| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060 |
- /** @license ms-rest-js
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt and ThirdPartyNotices.txt in the project root for license information.
- */
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (factory((global.msRest = {})));
- }(this, (function (exports) { 'use strict';
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // Licensed under the MIT License. See License.txt in the project root for license information.
- /**
- * A collection of HttpHeaders that can be sent with a HTTP request.
- */
- function getHeaderKey(headerName) {
- return headerName.toLowerCase();
- }
- /**
- * A collection of HTTP header key/value pairs.
- */
- var HttpHeaders = /** @class */ (function () {
- function HttpHeaders(rawHeaders) {
- this._headersMap = {};
- if (rawHeaders) {
- for (var headerName in rawHeaders) {
- this.set(headerName, rawHeaders[headerName]);
- }
- }
- }
- /**
- * Set a header in this collection with the provided name and value. The name is
- * case-insensitive.
- * @param headerName The name of the header to set. This value is case-insensitive.
- * @param headerValue The value of the header to set.
- */
- HttpHeaders.prototype.set = function (headerName, headerValue) {
- this._headersMap[getHeaderKey(headerName)] = { name: headerName, value: headerValue.toString() };
- };
- /**
- * Get the header value for the provided header name, or undefined if no header exists in this
- * collection with the provided name.
- * @param headerName The name of the header.
- */
- HttpHeaders.prototype.get = function (headerName) {
- var header = this._headersMap[getHeaderKey(headerName)];
- return !header ? undefined : header.value;
- };
- /**
- * Get whether or not this header collection contains a header entry for the provided header name.
- */
- HttpHeaders.prototype.contains = function (headerName) {
- return !!this._headersMap[getHeaderKey(headerName)];
- };
- /**
- * Remove the header with the provided headerName. Return whether or not the header existed and
- * was removed.
- * @param headerName The name of the header to remove.
- */
- HttpHeaders.prototype.remove = function (headerName) {
- var result = this.contains(headerName);
- delete this._headersMap[getHeaderKey(headerName)];
- return result;
- };
- /**
- * Get the headers that are contained this collection as an object.
- */
- HttpHeaders.prototype.rawHeaders = function () {
- var result = {};
- for (var headerKey in this._headersMap) {
- var header = this._headersMap[headerKey];
- result[header.name.toLowerCase()] = header.value;
- }
- return result;
- };
- /**
- * Get the headers that are contained in this collection as an array.
- */
- HttpHeaders.prototype.headersArray = function () {
- var headers = [];
- for (var headerKey in this._headersMap) {
- headers.push(this._headersMap[headerKey]);
- }
- return headers;
- };
- /**
- * Get the header names that are contained in this collection.
- */
- HttpHeaders.prototype.headerNames = function () {
- var headerNames = [];
- var headers = this.headersArray();
- for (var i = 0; i < headers.length; ++i) {
- headerNames.push(headers[i].name);
- }
- return headerNames;
- };
- /**
- * Get the header names that are contained in this collection.
- */
- HttpHeaders.prototype.headerValues = function () {
- var headerValues = [];
- var headers = this.headersArray();
- for (var i = 0; i < headers.length; ++i) {
- headerValues.push(headers[i].value);
- }
- return headerValues;
- };
- /**
- * Get the JSON object representation of this HTTP header collection.
- */
- HttpHeaders.prototype.toJson = function () {
- return this.rawHeaders();
- };
- /**
- * Get the string representation of this HTTP header collection.
- */
- HttpHeaders.prototype.toString = function () {
- return JSON.stringify(this.toJson());
- };
- /**
- * Create a deep clone/copy of this HttpHeaders collection.
- */
- HttpHeaders.prototype.clone = function () {
- return new HttpHeaders(this.rawHeaders());
- };
- return HttpHeaders;
- }());
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // Licensed under the MIT License. See License.txt in the project root for license information.
- /**
- * Encodes a string in base64 format.
- * @param value the string to encode
- */
- function encodeString(value) {
- return btoa(value);
- }
- /**
- * Encodes a byte array in base64 format.
- * @param value the Uint8Aray to encode
- */
- function encodeByteArray(value) {
- var str = "";
- for (var i = 0; i < value.length; i++) {
- str += String.fromCharCode(value[i]);
- }
- return btoa(str);
- }
- /**
- * Decodes a base64 string into a byte array.
- * @param value the base64 string to decode
- */
- function decodeString(value) {
- var byteString = atob(value);
- var arr = new Uint8Array(byteString.length);
- for (var i = 0; i < byteString.length; i++) {
- arr[i] = byteString.charCodeAt(i);
- }
- return arr;
- }
- function createCommonjsModule(fn, module) {
- return module = { exports: {} }, fn(module, module.exports), module.exports;
- }
- var rngBrowser = createCommonjsModule(function (module) {
- // Unique ID creation requires a high quality random # generator. In the
- // browser this is a little complicated due to unknown quality of Math.random()
- // and inconsistent support for the `crypto` API. We do the best we can via
- // feature-detection
- // getRandomValues needs to be invoked in a context where "this" is a Crypto
- // implementation. Also, find the complete implementation of crypto on IE11.
- var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||
- (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));
- if (getRandomValues) {
- // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto
- var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef
- module.exports = function whatwgRNG() {
- getRandomValues(rnds8);
- return rnds8;
- };
- } else {
- // Math.random()-based (RNG)
- //
- // If all else fails, use Math.random(). It's fast, but is of unspecified
- // quality.
- var rnds = new Array(16);
- module.exports = function mathRNG() {
- for (var i = 0, r; i < 16; i++) {
- if ((i & 0x03) === 0) r = Math.random() * 0x100000000;
- rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;
- }
- return rnds;
- };
- }
- });
- /**
- * Convert array of 16 byte values to UUID string format of the form:
- * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
- */
- var byteToHex = [];
- for (var i = 0; i < 256; ++i) {
- byteToHex[i] = (i + 0x100).toString(16).substr(1);
- }
- function bytesToUuid(buf, offset) {
- var i = offset || 0;
- var bth = byteToHex;
- // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
- return ([bth[buf[i++]], bth[buf[i++]],
- bth[buf[i++]], bth[buf[i++]], '-',
- bth[buf[i++]], bth[buf[i++]], '-',
- bth[buf[i++]], bth[buf[i++]], '-',
- bth[buf[i++]], bth[buf[i++]], '-',
- bth[buf[i++]], bth[buf[i++]],
- bth[buf[i++]], bth[buf[i++]],
- bth[buf[i++]], bth[buf[i++]]]).join('');
- }
- var bytesToUuid_1 = bytesToUuid;
- function v4(options, buf, offset) {
- var i = buf && offset || 0;
- if (typeof(options) == 'string') {
- buf = options === 'binary' ? new Array(16) : null;
- options = null;
- }
- options = options || {};
- var rnds = options.random || (options.rng || rngBrowser)();
- // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
- rnds[6] = (rnds[6] & 0x0f) | 0x40;
- rnds[8] = (rnds[8] & 0x3f) | 0x80;
- // Copy bytes to buffer, if provided
- if (buf) {
- for (var ii = 0; ii < 16; ++ii) {
- buf[i + ii] = rnds[ii];
- }
- }
- return buf || bytesToUuid_1(rnds);
- }
- var v4_1 = v4;
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // Licensed under the MIT License. See License.txt in the project root for license information.
- var Constants = {
- /**
- * The ms-rest version
- * @const
- * @type {string}
- */
- msRestVersion: "1.8.13",
- /**
- * Specifies HTTP.
- *
- * @const
- * @type {string}
- */
- HTTP: "http:",
- /**
- * Specifies HTTPS.
- *
- * @const
- * @type {string}
- */
- HTTPS: "https:",
- /**
- * Specifies HTTP Proxy.
- *
- * @const
- * @type {string}
- */
- HTTP_PROXY: "HTTP_PROXY",
- /**
- * Specifies HTTPS Proxy.
- *
- * @const
- * @type {string}
- */
- HTTPS_PROXY: "HTTPS_PROXY",
- HttpConstants: {
- /**
- * Http Verbs
- *
- * @const
- * @enum {string}
- */
- HttpVerbs: {
- PUT: "PUT",
- GET: "GET",
- DELETE: "DELETE",
- POST: "POST",
- MERGE: "MERGE",
- HEAD: "HEAD",
- PATCH: "PATCH"
- },
- StatusCodes: {
- TooManyRequests: 429
- }
- },
- /**
- * Defines constants for use with HTTP headers.
- */
- HeaderConstants: {
- /**
- * The Authorization header.
- *
- * @const
- * @type {string}
- */
- AUTHORIZATION: "authorization",
- AUTHORIZATION_SCHEME: "Bearer",
- /**
- * The Retry-After response-header field can be used with a 503 (Service
- * Unavailable) or 349 (Too Many Requests) responses to indicate how long
- * the service is expected to be unavailable to the requesting client.
- *
- * @const
- * @type {string}
- */
- RETRY_AFTER: "Retry-After",
- /**
- * The UserAgent header.
- *
- * @const
- * @type {string}
- */
- USER_AGENT: "User-Agent"
- }
- };
- // Copyright (c) Microsoft Corporation. All rights reserved.
- /**
- * A constant that indicates whether the environment is node.js or browser based.
- */
- var isNode = (typeof process !== "undefined") && !!process.version && !!process.versions && !!process.versions.node;
- /**
- * Encodes an URI.
- *
- * @param {string} uri The URI to be encoded.
- * @return {string} The encoded URI.
- */
- function encodeUri(uri) {
- return encodeURIComponent(uri)
- .replace(/!/g, "%21")
- .replace(/"/g, "%27")
- .replace(/\(/g, "%28")
- .replace(/\)/g, "%29")
- .replace(/\*/g, "%2A");
- }
- /**
- * Returns a stripped version of the Http Response which only contains body,
- * headers and the status.
- *
- * @param {HttpOperationResponse} response The Http Response
- *
- * @return {object} The stripped version of Http Response.
- */
- function stripResponse(response) {
- var strippedResponse = {};
- strippedResponse.body = response.bodyAsText;
- strippedResponse.headers = response.headers;
- strippedResponse.status = response.status;
- return strippedResponse;
- }
- /**
- * Returns a stripped version of the Http Request that does not contain the
- * Authorization header.
- *
- * @param {WebResource} request The Http Request object
- *
- * @return {WebResource} The stripped version of Http Request.
- */
- function stripRequest(request) {
- var strippedRequest = request.clone();
- if (strippedRequest.headers) {
- strippedRequest.headers.remove("authorization");
- }
- return strippedRequest;
- }
- /**
- * Validates the given uuid as a string
- *
- * @param {string} uuid The uuid as a string that needs to be validated
- *
- * @return {boolean} True if the uuid is valid; false otherwise.
- */
- function isValidUuid(uuid) {
- var validUuidRegex = new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", "ig");
- return validUuidRegex.test(uuid);
- }
- /**
- * Generated UUID
- *
- * @return {string} RFC4122 v4 UUID.
- */
- function generateUuid() {
- return v4_1();
- }
- /**
- * Executes an array of promises sequentially. Inspiration of this method is here:
- * https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html. An awesome blog on promises!
- *
- * @param {Array} promiseFactories An array of promise factories(A function that return a promise)
- *
- * @param {any} [kickstart] Input to the first promise that is used to kickstart the promise chain.
- * If not provided then the promise chain starts with undefined.
- *
- * @return A chain of resolved or rejected promises
- */
- function executePromisesSequentially(promiseFactories, kickstart) {
- var result = Promise.resolve(kickstart);
- promiseFactories.forEach(function (promiseFactory) {
- result = result.then(promiseFactory);
- });
- return result;
- }
- /**
- * A wrapper for setTimeout that resolves a promise after t milliseconds.
- * @param {number} t The number of milliseconds to be delayed.
- * @param {T} value The value to be resolved with after a timeout of t milliseconds.
- * @returns {Promise<T>} Resolved promise
- */
- function delay(t, value) {
- return new Promise(function (resolve) { return setTimeout(function () { return resolve(value); }, t); });
- }
- /**
- * Converts a Promise to a callback.
- * @param {Promise<any>} promise The Promise to be converted to a callback
- * @returns {Function} A function that takes the callback (cb: Function): void
- * @deprecated generated code should instead depend on responseToBody
- */
- function promiseToCallback(promise) {
- if (typeof promise.then !== "function") {
- throw new Error("The provided input is not a Promise.");
- }
- return function (cb) {
- promise.then(function (data) {
- cb(undefined, data);
- }, function (err) {
- cb(err);
- });
- };
- }
- /**
- * Converts a Promise to a service callback.
- * @param {Promise<HttpOperationResponse>} promise - The Promise of HttpOperationResponse to be converted to a service callback
- * @returns {Function} A function that takes the service callback (cb: ServiceCallback<T>): void
- */
- function promiseToServiceCallback(promise) {
- if (typeof promise.then !== "function") {
- throw new Error("The provided input is not a Promise.");
- }
- return function (cb) {
- promise.then(function (data) {
- process.nextTick(cb, undefined, data.parsedBody, data.request, data);
- }, function (err) {
- process.nextTick(cb, err);
- });
- };
- }
- function prepareXMLRootList(obj, elementName) {
- var _a;
- if (!Array.isArray(obj)) {
- obj = [obj];
- }
- return _a = {}, _a[elementName] = obj, _a;
- }
- /**
- * Applies the properties on the prototype of sourceCtors to the prototype of targetCtor
- * @param {object} targetCtor The target object on which the properties need to be applied.
- * @param {Array<object>} sourceCtors An array of source objects from which the properties need to be taken.
- */
- function applyMixins(targetCtor, sourceCtors) {
- sourceCtors.forEach(function (sourceCtors) {
- Object.getOwnPropertyNames(sourceCtors.prototype).forEach(function (name) {
- targetCtor.prototype[name] = sourceCtors.prototype[name];
- });
- });
- }
- var validateISODuration = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
- /**
- * Indicates whether the given string is in ISO 8601 format.
- * @param {string} value The value to be validated for ISO 8601 duration format.
- * @return {boolean} `true` if valid, `false` otherwise.
- */
- function isDuration(value) {
- return validateISODuration.test(value);
- }
- /**
- * Replace all of the instances of searchValue in value with the provided replaceValue.
- * @param {string | undefined} value The value to search and replace in.
- * @param {string} searchValue The value to search for in the value argument.
- * @param {string} replaceValue The value to replace searchValue with in the value argument.
- * @returns {string | undefined} The value where each instance of searchValue was replaced with replacedValue.
- */
- function replaceAll(value, searchValue, replaceValue) {
- return !value || !searchValue ? value : value.split(searchValue).join(replaceValue || "");
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- var Serializer = /** @class */ (function () {
- function Serializer(modelMappers, isXML) {
- if (modelMappers === void 0) { modelMappers = {}; }
- this.modelMappers = modelMappers;
- this.isXML = isXML;
- }
- Serializer.prototype.validateConstraints = function (mapper, value, objectName) {
- var failValidation = function (constraintName, constraintValue) {
- throw new Error("\"" + objectName + "\" with value \"" + value + "\" should satisfy the constraint \"" + constraintName + "\": " + constraintValue + ".");
- };
- if (mapper.constraints && (value != undefined)) {
- var _a = mapper.constraints, ExclusiveMaximum = _a.ExclusiveMaximum, ExclusiveMinimum = _a.ExclusiveMinimum, InclusiveMaximum = _a.InclusiveMaximum, InclusiveMinimum = _a.InclusiveMinimum, MaxItems = _a.MaxItems, MaxLength = _a.MaxLength, MinItems = _a.MinItems, MinLength = _a.MinLength, MultipleOf = _a.MultipleOf, Pattern = _a.Pattern, UniqueItems = _a.UniqueItems;
- if (ExclusiveMaximum != undefined && value >= ExclusiveMaximum) {
- failValidation("ExclusiveMaximum", ExclusiveMaximum);
- }
- if (ExclusiveMinimum != undefined && value <= ExclusiveMinimum) {
- failValidation("ExclusiveMinimum", ExclusiveMinimum);
- }
- if (InclusiveMaximum != undefined && value > InclusiveMaximum) {
- failValidation("InclusiveMaximum", InclusiveMaximum);
- }
- if (InclusiveMinimum != undefined && value < InclusiveMinimum) {
- failValidation("InclusiveMinimum", InclusiveMinimum);
- }
- if (MaxItems != undefined && value.length > MaxItems) {
- failValidation("MaxItems", MaxItems);
- }
- if (MaxLength != undefined && value.length > MaxLength) {
- failValidation("MaxLength", MaxLength);
- }
- if (MinItems != undefined && value.length < MinItems) {
- failValidation("MinItems", MinItems);
- }
- if (MinLength != undefined && value.length < MinLength) {
- failValidation("MinLength", MinLength);
- }
- if (MultipleOf != undefined && value % MultipleOf !== 0) {
- failValidation("MultipleOf", MultipleOf);
- }
- if (Pattern && value.match(Pattern) === null) {
- failValidation("Pattern", Pattern);
- }
- if (UniqueItems && value.some(function (item, i, ar) { return ar.indexOf(item) !== i; })) {
- failValidation("UniqueItems", UniqueItems);
- }
- }
- };
- /**
- * Serialize the given object based on its metadata defined in the mapper
- *
- * @param {Mapper} mapper The mapper which defines the metadata of the serializable object
- *
- * @param {object|string|Array|number|boolean|Date|stream} object A valid Javascript object to be serialized
- *
- * @param {string} objectName Name of the serialized object
- *
- * @returns {object|string|Array|number|boolean|Date|stream} A valid serialized Javascript object
- */
- Serializer.prototype.serialize = function (mapper, object, objectName) {
- var payload = {};
- var mapperType = mapper.type.name;
- if (!objectName) {
- objectName = mapper.serializedName;
- }
- if (mapperType.match(/^Sequence$/ig) !== null) {
- payload = [];
- }
- if (object == undefined && (mapper.defaultValue != undefined || mapper.isConstant)) {
- object = mapper.defaultValue;
- }
- // This table of allowed values should help explain
- // the mapper.required and mapper.nullable properties.
- // X means "neither undefined or null are allowed".
- // || required
- // || true | false
- // nullable || ==========================
- // true || null | undefined/null
- // false || X | undefined
- // undefined || X | undefined/null
- var required = mapper.required, nullable = mapper.nullable;
- if (required && nullable && object === undefined) {
- throw new Error(objectName + " cannot be undefined.");
- }
- if (required && !nullable && object == undefined) {
- throw new Error(objectName + " cannot be null or undefined.");
- }
- if (!required && nullable === false && object === null) {
- throw new Error(objectName + " cannot be null.");
- }
- if (object == undefined) {
- payload = object;
- }
- else {
- // Validate Constraints if any
- this.validateConstraints(mapper, object, objectName);
- if (mapperType.match(/^any$/ig) !== null) {
- payload = object;
- }
- else if (mapperType.match(/^(Number|String|Boolean|Object|Stream|Uuid)$/ig) !== null) {
- payload = serializeBasicTypes(mapperType, objectName, object);
- }
- else if (mapperType.match(/^Enum$/ig) !== null) {
- var enumMapper = mapper;
- payload = serializeEnumType(objectName, enumMapper.type.allowedValues, object);
- }
- else if (mapperType.match(/^(Date|DateTime|TimeSpan|DateTimeRfc1123|UnixTime)$/ig) !== null) {
- payload = serializeDateTypes(mapperType, object, objectName);
- }
- else if (mapperType.match(/^ByteArray$/ig) !== null) {
- payload = serializeByteArrayType(objectName, object);
- }
- else if (mapperType.match(/^Base64Url$/ig) !== null) {
- payload = serializeBase64UrlType(objectName, object);
- }
- else if (mapperType.match(/^Sequence$/ig) !== null) {
- payload = serializeSequenceType(this, mapper, object, objectName);
- }
- else if (mapperType.match(/^Dictionary$/ig) !== null) {
- payload = serializeDictionaryType(this, mapper, object, objectName);
- }
- else if (mapperType.match(/^Composite$/ig) !== null) {
- payload = serializeCompositeType(this, mapper, object, objectName);
- }
- }
- return payload;
- };
- /**
- * Deserialize the given object based on its metadata defined in the mapper
- *
- * @param {object} mapper The mapper which defines the metadata of the serializable object
- *
- * @param {object|string|Array|number|boolean|Date|stream} responseBody A valid Javascript entity to be deserialized
- *
- * @param {string} objectName Name of the deserialized object
- *
- * @returns {object|string|Array|number|boolean|Date|stream} A valid deserialized Javascript object
- */
- Serializer.prototype.deserialize = function (mapper, responseBody, objectName) {
- if (responseBody == undefined) {
- if (this.isXML && mapper.type.name === "Sequence" && !mapper.xmlIsWrapped) {
- // Edge case for empty XML non-wrapped lists. xml2js can't distinguish
- // between the list being empty versus being missing,
- // so let's do the more user-friendly thing and return an empty list.
- responseBody = [];
- }
- return responseBody;
- }
- var payload;
- var mapperType = mapper.type.name;
- if (!objectName) {
- objectName = mapper.serializedName;
- }
- if (mapperType.match(/^Composite$/ig) !== null) {
- payload = deserializeCompositeType(this, mapper, responseBody, objectName);
- }
- else {
- if (this.isXML) {
- /**
- * If the mapper specifies this as a non-composite type value but the responseBody contains
- * both header ("$") and body ("_") properties, then just reduce the responseBody value to
- * the body ("_") property.
- */
- if (responseBody["$"] != undefined && responseBody["_"] != undefined) {
- responseBody = responseBody["_"];
- }
- }
- if (mapperType.match(/^Number$/ig) !== null) {
- payload = parseFloat(responseBody);
- if (isNaN(payload)) {
- payload = responseBody;
- }
- }
- else if (mapperType.match(/^Boolean$/ig) !== null) {
- if (responseBody === "true") {
- payload = true;
- }
- else if (responseBody === "false") {
- payload = false;
- }
- else {
- payload = responseBody;
- }
- }
- else if (mapperType.match(/^(String|Enum|Object|Stream|Uuid|TimeSpan|any)$/ig) !== null) {
- payload = responseBody;
- }
- else if (mapperType.match(/^(Date|DateTime|DateTimeRfc1123)$/ig) !== null) {
- payload = new Date(responseBody);
- }
- else if (mapperType.match(/^UnixTime$/ig) !== null) {
- payload = unixTimeToDate(responseBody);
- }
- else if (mapperType.match(/^ByteArray$/ig) !== null) {
- payload = decodeString(responseBody);
- }
- else if (mapperType.match(/^Base64Url$/ig) !== null) {
- payload = base64UrlToByteArray(responseBody);
- }
- else if (mapperType.match(/^Sequence$/ig) !== null) {
- payload = deserializeSequenceType(this, mapper, responseBody, objectName);
- }
- else if (mapperType.match(/^Dictionary$/ig) !== null) {
- payload = deserializeDictionaryType(this, mapper, responseBody, objectName);
- }
- }
- if (mapper.isConstant) {
- payload = mapper.defaultValue;
- }
- return payload;
- };
- return Serializer;
- }());
- function trimEnd(str, ch) {
- var len = str.length;
- while ((len - 1) >= 0 && str[len - 1] === ch) {
- --len;
- }
- return str.substr(0, len);
- }
- function bufferToBase64Url(buffer) {
- if (!buffer) {
- return undefined;
- }
- if (!(buffer instanceof Uint8Array)) {
- throw new Error("Please provide an input of type Uint8Array for converting to Base64Url.");
- }
- // Uint8Array to Base64.
- var str = encodeByteArray(buffer);
- // Base64 to Base64Url.
- return trimEnd(str, "=").replace(/\+/g, "-").replace(/\//g, "_");
- }
- function base64UrlToByteArray(str) {
- if (!str) {
- return undefined;
- }
- if (str && typeof str.valueOf() !== "string") {
- throw new Error("Please provide an input of type string for converting to Uint8Array");
- }
- // Base64Url to Base64.
- str = str.replace(/\-/g, "+").replace(/\_/g, "/");
- // Base64 to Uint8Array.
- return decodeString(str);
- }
- function splitSerializeName(prop) {
- var classes = [];
- var partialclass = "";
- if (prop) {
- var subwords = prop.split(".");
- for (var _i = 0, subwords_1 = subwords; _i < subwords_1.length; _i++) {
- var item = subwords_1[_i];
- if (item.charAt(item.length - 1) === "\\") {
- partialclass += item.substr(0, item.length - 1) + ".";
- }
- else {
- partialclass += item;
- classes.push(partialclass);
- partialclass = "";
- }
- }
- }
- return classes;
- }
- function dateToUnixTime(d) {
- if (!d) {
- return undefined;
- }
- if (typeof d.valueOf() === "string") {
- d = new Date(d);
- }
- return Math.floor(d.getTime() / 1000);
- }
- function unixTimeToDate(n) {
- if (!n) {
- return undefined;
- }
- return new Date(n * 1000);
- }
- function serializeBasicTypes(typeName, objectName, value) {
- if (value !== null && value !== undefined) {
- if (typeName.match(/^Number$/ig) !== null) {
- if (typeof value !== "number") {
- throw new Error(objectName + " with value " + value + " must be of type number.");
- }
- }
- else if (typeName.match(/^String$/ig) !== null) {
- if (typeof value.valueOf() !== "string") {
- throw new Error(objectName + " with value \"" + value + "\" must be of type string.");
- }
- }
- else if (typeName.match(/^Uuid$/ig) !== null) {
- if (!(typeof value.valueOf() === "string" && isValidUuid(value))) {
- throw new Error(objectName + " with value \"" + value + "\" must be of type string and a valid uuid.");
- }
- }
- else if (typeName.match(/^Boolean$/ig) !== null) {
- if (typeof value !== "boolean") {
- throw new Error(objectName + " with value " + value + " must be of type boolean.");
- }
- }
- else if (typeName.match(/^Stream$/ig) !== null) {
- var objectType = typeof value;
- if (objectType !== "string" &&
- objectType !== "function" &&
- !(value instanceof ArrayBuffer) &&
- !ArrayBuffer.isView(value) &&
- !(typeof Blob === "function" && value instanceof Blob)) {
- throw new Error(objectName + " must be a string, Blob, ArrayBuffer, ArrayBufferView, or a function returning NodeJS.ReadableStream.");
- }
- }
- }
- return value;
- }
- function serializeEnumType(objectName, allowedValues, value) {
- if (!allowedValues) {
- throw new Error("Please provide a set of allowedValues to validate " + objectName + " as an Enum Type.");
- }
- var isPresent = allowedValues.some(function (item) {
- if (typeof item.valueOf() === "string") {
- return item.toLowerCase() === value.toLowerCase();
- }
- return item === value;
- });
- if (!isPresent) {
- throw new Error(value + " is not a valid value for " + objectName + ". The valid values are: " + JSON.stringify(allowedValues) + ".");
- }
- return value;
- }
- function serializeByteArrayType(objectName, value) {
- if (value != undefined) {
- if (!(value instanceof Uint8Array)) {
- throw new Error(objectName + " must be of type Uint8Array.");
- }
- value = encodeByteArray(value);
- }
- return value;
- }
- function serializeBase64UrlType(objectName, value) {
- if (value != undefined) {
- if (!(value instanceof Uint8Array)) {
- throw new Error(objectName + " must be of type Uint8Array.");
- }
- value = bufferToBase64Url(value);
- }
- return value;
- }
- function serializeDateTypes(typeName, value, objectName) {
- if (value != undefined) {
- if (typeName.match(/^Date$/ig) !== null) {
- if (!(value instanceof Date ||
- (typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) {
- throw new Error(objectName + " must be an instanceof Date or a string in ISO8601 format.");
- }
- value = (value instanceof Date) ? value.toISOString().substring(0, 10) : new Date(value).toISOString().substring(0, 10);
- }
- else if (typeName.match(/^DateTime$/ig) !== null) {
- if (!(value instanceof Date ||
- (typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) {
- throw new Error(objectName + " must be an instanceof Date or a string in ISO8601 format.");
- }
- value = (value instanceof Date) ? value.toISOString() : new Date(value).toISOString();
- }
- else if (typeName.match(/^DateTimeRfc1123$/ig) !== null) {
- if (!(value instanceof Date ||
- (typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) {
- throw new Error(objectName + " must be an instanceof Date or a string in RFC-1123 format.");
- }
- value = (value instanceof Date) ? value.toUTCString() : new Date(value).toUTCString();
- }
- else if (typeName.match(/^UnixTime$/ig) !== null) {
- if (!(value instanceof Date ||
- (typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) {
- throw new Error(objectName + " must be an instanceof Date or a string in RFC-1123/ISO8601 format " +
- "for it to be serialized in UnixTime/Epoch format.");
- }
- value = dateToUnixTime(value);
- }
- else if (typeName.match(/^TimeSpan$/ig) !== null) {
- if (!isDuration(value)) {
- throw new Error(objectName + " must be a string in ISO 8601 format. Instead was \"" + value + "\".");
- }
- value = value;
- }
- }
- return value;
- }
- function serializeSequenceType(serializer, mapper, object, objectName) {
- if (!Array.isArray(object)) {
- throw new Error(objectName + " must be of type Array.");
- }
- var elementType = mapper.type.element;
- if (!elementType || typeof elementType !== "object") {
- throw new Error("element\" metadata for an Array must be defined in the " +
- ("mapper and it must of type \"object\" in " + objectName + "."));
- }
- var tempArray = [];
- for (var i = 0; i < object.length; i++) {
- tempArray[i] = serializer.serialize(elementType, object[i], objectName);
- }
- return tempArray;
- }
- function serializeDictionaryType(serializer, mapper, object, objectName) {
- if (typeof object !== "object") {
- throw new Error(objectName + " must be of type object.");
- }
- var valueType = mapper.type.value;
- if (!valueType || typeof valueType !== "object") {
- throw new Error("\"value\" metadata for a Dictionary must be defined in the " +
- ("mapper and it must of type \"object\" in " + objectName + "."));
- }
- var tempDictionary = {};
- for (var _i = 0, _a = Object.keys(object); _i < _a.length; _i++) {
- var key = _a[_i];
- tempDictionary[key] = serializer.serialize(valueType, object[key], objectName + "." + key);
- }
- return tempDictionary;
- }
- /**
- * Resolves a composite mapper's modelProperties.
- * @param serializer the serializer containing the entire set of mappers
- * @param mapper the composite mapper to resolve
- */
- function resolveModelProperties(serializer, mapper, objectName) {
- var modelProps = mapper.type.modelProperties;
- if (!modelProps) {
- var className = mapper.type.className;
- if (!className) {
- throw new Error("Class name for model \"" + objectName + "\" is not provided in the mapper \"" + JSON.stringify(mapper, undefined, 2) + "\".");
- }
- var modelMapper = serializer.modelMappers[className];
- if (!modelMapper) {
- throw new Error("mapper() cannot be null or undefined for model \"" + className + "\".");
- }
- modelProps = modelMapper.type.modelProperties;
- if (!modelProps) {
- throw new Error("modelProperties cannot be null or undefined in the " +
- ("mapper \"" + JSON.stringify(modelMapper) + "\" of type \"" + className + "\" for object \"" + objectName + "\"."));
- }
- }
- return modelProps;
- }
- function serializeCompositeType(serializer, mapper, object, objectName) {
- var _a;
- if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {
- mapper = getPolymorphicMapper(serializer, mapper, object, "clientName");
- }
- if (object != undefined) {
- var payload = {};
- var modelProps = resolveModelProperties(serializer, mapper, objectName);
- for (var _i = 0, _b = Object.keys(modelProps); _i < _b.length; _i++) {
- var key = _b[_i];
- var propertyMapper = modelProps[key];
- if (propertyMapper.readOnly) {
- continue;
- }
- var propName = void 0;
- var parentObject = payload;
- if (serializer.isXML) {
- if (propertyMapper.xmlIsWrapped) {
- propName = propertyMapper.xmlName;
- }
- else {
- propName = propertyMapper.xmlElementName || propertyMapper.xmlName;
- }
- }
- else {
- var paths = splitSerializeName(propertyMapper.serializedName);
- propName = paths.pop();
- for (var _c = 0, paths_1 = paths; _c < paths_1.length; _c++) {
- var pathName = paths_1[_c];
- var childObject = parentObject[pathName];
- if ((childObject == undefined) && (object[key] != undefined)) {
- parentObject[pathName] = {};
- }
- parentObject = parentObject[pathName];
- }
- }
- if (parentObject != undefined) {
- var propertyObjectName = propertyMapper.serializedName !== ""
- ? objectName + "." + propertyMapper.serializedName
- : objectName;
- var toSerialize = object[key];
- var polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);
- if (polymorphicDiscriminator && polymorphicDiscriminator.clientName === key && toSerialize == undefined) {
- toSerialize = mapper.serializedName;
- }
- var serializedValue = serializer.serialize(propertyMapper, toSerialize, propertyObjectName);
- if (serializedValue !== undefined && propName != undefined) {
- if (propertyMapper.xmlIsAttribute) {
- // $ is the key attributes are kept under in xml2js.
- // This keeps things simple while preventing name collision
- // with names in user documents.
- parentObject.$ = parentObject.$ || {};
- parentObject.$[propName] = serializedValue;
- }
- else if (propertyMapper.xmlIsWrapped) {
- parentObject[propName] = (_a = {}, _a[propertyMapper.xmlElementName] = serializedValue, _a);
- }
- else {
- parentObject[propName] = serializedValue;
- }
- }
- }
- }
- var additionalPropertiesMapper = mapper.type.additionalProperties;
- if (additionalPropertiesMapper) {
- var propNames = Object.keys(modelProps);
- var _loop_1 = function (clientPropName) {
- var isAdditionalProperty = propNames.every(function (pn) { return pn !== clientPropName; });
- if (isAdditionalProperty) {
- payload[clientPropName] = serializer.serialize(additionalPropertiesMapper, object[clientPropName], objectName + '["' + clientPropName + '"]');
- }
- };
- for (var clientPropName in object) {
- _loop_1(clientPropName);
- }
- }
- return payload;
- }
- return object;
- }
- function isSpecialXmlProperty(propertyName) {
- return ["$", "_"].includes(propertyName);
- }
- function deserializeCompositeType(serializer, mapper, responseBody, objectName) {
- if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {
- mapper = getPolymorphicMapper(serializer, mapper, responseBody, "serializedName");
- }
- var modelProps = resolveModelProperties(serializer, mapper, objectName);
- var instance = {};
- var handledPropertyNames = [];
- for (var _i = 0, _a = Object.keys(modelProps); _i < _a.length; _i++) {
- var key = _a[_i];
- var propertyMapper = modelProps[key];
- var paths = splitSerializeName(modelProps[key].serializedName);
- handledPropertyNames.push(paths[0]);
- var serializedName = propertyMapper.serializedName, xmlName = propertyMapper.xmlName, xmlElementName = propertyMapper.xmlElementName;
- var propertyObjectName = objectName;
- if (serializedName !== "" && serializedName !== undefined) {
- propertyObjectName = objectName + "." + serializedName;
- }
- var headerCollectionPrefix = propertyMapper.headerCollectionPrefix;
- if (headerCollectionPrefix) {
- var dictionary = {};
- for (var _b = 0, _c = Object.keys(responseBody); _b < _c.length; _b++) {
- var headerKey = _c[_b];
- if (headerKey.startsWith(headerCollectionPrefix)) {
- dictionary[headerKey.substring(headerCollectionPrefix.length)] = serializer.deserialize(propertyMapper.type.value, responseBody[headerKey], propertyObjectName);
- }
- handledPropertyNames.push(headerKey);
- }
- instance[key] = dictionary;
- }
- else if (serializer.isXML) {
- if (propertyMapper.xmlIsAttribute && responseBody.$) {
- instance[key] = serializer.deserialize(propertyMapper, responseBody.$[xmlName], propertyObjectName);
- }
- else {
- var propertyName = xmlElementName || xmlName || serializedName;
- var unwrappedProperty = responseBody[propertyName];
- if (propertyMapper.xmlIsWrapped) {
- unwrappedProperty = responseBody[xmlName];
- unwrappedProperty = unwrappedProperty && unwrappedProperty[xmlElementName];
- var isEmptyWrappedList = unwrappedProperty === undefined;
- if (isEmptyWrappedList) {
- unwrappedProperty = [];
- }
- }
- instance[key] = serializer.deserialize(propertyMapper, unwrappedProperty, propertyObjectName);
- }
- }
- else {
- // deserialize the property if it is present in the provided responseBody instance
- var propertyInstance = void 0;
- var res = responseBody;
- // traversing the object step by step.
- for (var _d = 0, paths_2 = paths; _d < paths_2.length; _d++) {
- var item = paths_2[_d];
- if (!res)
- break;
- res = res[item];
- }
- propertyInstance = res;
- var polymorphicDiscriminator = mapper.type.polymorphicDiscriminator;
- if (polymorphicDiscriminator && propertyMapper.serializedName === polymorphicDiscriminator.serializedName && propertyInstance == undefined) {
- propertyInstance = mapper.serializedName;
- }
- var serializedValue = void 0;
- // paging
- if (Array.isArray(responseBody[key]) && modelProps[key].serializedName === "") {
- propertyInstance = responseBody[key];
- instance = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName);
- }
- else if (propertyInstance !== undefined) {
- serializedValue = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName);
- instance[key] = serializedValue;
- }
- }
- }
- var additionalPropertiesMapper = mapper.type.additionalProperties;
- if (additionalPropertiesMapper) {
- var isAdditionalProperty = function (responsePropName) {
- for (var clientPropName in modelProps) {
- var paths = splitSerializeName(modelProps[clientPropName].serializedName);
- if (paths[0] === responsePropName) {
- return false;
- }
- }
- return true;
- };
- for (var responsePropName in responseBody) {
- if (isAdditionalProperty(responsePropName)) {
- instance[responsePropName] = serializer.deserialize(additionalPropertiesMapper, responseBody[responsePropName], objectName + '["' + responsePropName + '"]');
- }
- }
- }
- else if (responseBody) {
- for (var _e = 0, _f = Object.keys(responseBody); _e < _f.length; _e++) {
- var key = _f[_e];
- if (instance[key] === undefined && !handledPropertyNames.includes(key) && !isSpecialXmlProperty(key)) {
- instance[key] = responseBody[key];
- }
- }
- }
- return instance;
- }
- function deserializeDictionaryType(serializer, mapper, responseBody, objectName) {
- /*jshint validthis: true */
- var value = mapper.type.value;
- if (!value || typeof value !== "object") {
- throw new Error("\"value\" metadata for a Dictionary must be defined in the " +
- ("mapper and it must of type \"object\" in " + objectName));
- }
- if (responseBody) {
- var tempDictionary = {};
- for (var _i = 0, _a = Object.keys(responseBody); _i < _a.length; _i++) {
- var key = _a[_i];
- tempDictionary[key] = serializer.deserialize(value, responseBody[key], objectName);
- }
- return tempDictionary;
- }
- return responseBody;
- }
- function deserializeSequenceType(serializer, mapper, responseBody, objectName) {
- /*jshint validthis: true */
- var element = mapper.type.element;
- if (!element || typeof element !== "object") {
- throw new Error("element\" metadata for an Array must be defined in the " +
- ("mapper and it must of type \"object\" in " + objectName));
- }
- if (responseBody) {
- if (!Array.isArray(responseBody)) {
- // xml2js will interpret a single element array as just the element, so force it to be an array
- responseBody = [responseBody];
- }
- var tempArray = [];
- for (var i = 0; i < responseBody.length; i++) {
- tempArray[i] = serializer.deserialize(element, responseBody[i], objectName + "[" + i + "]");
- }
- return tempArray;
- }
- return responseBody;
- }
- function getPolymorphicMapper(serializer, mapper, object, polymorphicPropertyName) {
- var polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);
- if (polymorphicDiscriminator) {
- var discriminatorName = polymorphicDiscriminator[polymorphicPropertyName];
- if (discriminatorName != undefined) {
- var discriminatorValue = object[discriminatorName];
- if (discriminatorValue != undefined) {
- var typeName = mapper.type.uberParent || mapper.type.className;
- var indexDiscriminator = discriminatorValue === typeName
- ? discriminatorValue
- : typeName + "." + discriminatorValue;
- var polymorphicMapper = serializer.modelMappers.discriminators[indexDiscriminator];
- if (polymorphicMapper) {
- mapper = polymorphicMapper;
- }
- }
- }
- }
- return mapper;
- }
- function getPolymorphicDiscriminatorRecursively(serializer, mapper) {
- return mapper.type.polymorphicDiscriminator
- || getPolymorphicDiscriminatorSafely(serializer, mapper.type.uberParent)
- || getPolymorphicDiscriminatorSafely(serializer, mapper.type.className);
- }
- function getPolymorphicDiscriminatorSafely(serializer, typeName) {
- return (typeName && serializer.modelMappers[typeName] && serializer.modelMappers[typeName].type.polymorphicDiscriminator);
- }
- // TODO: why is this here?
- function serializeObject(toSerialize) {
- if (toSerialize == undefined)
- return undefined;
- if (toSerialize instanceof Uint8Array) {
- toSerialize = encodeByteArray(toSerialize);
- return toSerialize;
- }
- else if (toSerialize instanceof Date) {
- return toSerialize.toISOString();
- }
- else if (Array.isArray(toSerialize)) {
- var array = [];
- for (var i = 0; i < toSerialize.length; i++) {
- array.push(serializeObject(toSerialize[i]));
- }
- return array;
- }
- else if (typeof toSerialize === "object") {
- var dictionary = {};
- for (var property in toSerialize) {
- dictionary[property] = serializeObject(toSerialize[property]);
- }
- return dictionary;
- }
- return toSerialize;
- }
- /**
- * Utility function to create a K:V from a list of strings
- */
- function strEnum(o) {
- var result = {};
- for (var _i = 0, o_1 = o; _i < o_1.length; _i++) {
- var key = o_1[_i];
- result[key] = key;
- }
- return result;
- }
- var MapperType = strEnum([
- "Base64Url",
- "Boolean",
- "ByteArray",
- "Composite",
- "Date",
- "DateTime",
- "DateTimeRfc1123",
- "Dictionary",
- "Enum",
- "Number",
- "Object",
- "Sequence",
- "String",
- "Stream",
- "TimeSpan",
- "UnixTime"
- ]);
- // Copyright (c) Microsoft Corporation. All rights reserved.
- /**
- * Creates a new WebResource object.
- *
- * This class provides an abstraction over a REST call by being library / implementation agnostic and wrapping the necessary
- * properties to initiate a request.
- *
- * @constructor
- */
- var WebResource = /** @class */ (function () {
- function WebResource(url, method, body, query, headers, streamResponseBody, withCredentials, abortSignal, timeout, onUploadProgress, onDownloadProgress, proxySettings) {
- this.streamResponseBody = streamResponseBody;
- this.url = url || "";
- this.method = method || "GET";
- this.headers = (headers instanceof HttpHeaders ? headers : new HttpHeaders(headers));
- this.body = body;
- this.query = query;
- this.formData = undefined;
- this.withCredentials = withCredentials || false;
- this.abortSignal = abortSignal;
- this.timeout = timeout || 0;
- this.onUploadProgress = onUploadProgress;
- this.onDownloadProgress = onDownloadProgress;
- this.proxySettings = proxySettings;
- }
- /**
- * Validates that the required properties such as method, url, headers["Content-Type"],
- * headers["accept-language"] are defined. It will throw an error if one of the above
- * mentioned properties are not defined.
- */
- WebResource.prototype.validateRequestProperties = function () {
- if (!this.method) {
- throw new Error("WebResource.method is required.");
- }
- if (!this.url) {
- throw new Error("WebResource.url is required.");
- }
- };
- /**
- * Prepares the request.
- * @param {RequestPrepareOptions} options Options to provide for preparing the request.
- * @returns {WebResource} Returns the prepared WebResource (HTTP Request) object that needs to be given to the request pipeline.
- */
- WebResource.prototype.prepare = function (options) {
- if (!options) {
- throw new Error("options object is required");
- }
- if (options.method == undefined || typeof options.method.valueOf() !== "string") {
- throw new Error("options.method must be a string.");
- }
- if (options.url && options.pathTemplate) {
- throw new Error("options.url and options.pathTemplate are mutually exclusive. Please provide exactly one of them.");
- }
- if ((options.pathTemplate == undefined || typeof options.pathTemplate.valueOf() !== "string") && (options.url == undefined || typeof options.url.valueOf() !== "string")) {
- throw new Error("Please provide exactly one of options.pathTemplate or options.url.");
- }
- // set the url if it is provided.
- if (options.url) {
- if (typeof options.url !== "string") {
- throw new Error("options.url must be of type \"string\".");
- }
- this.url = options.url;
- }
- // set the method
- if (options.method) {
- var validMethods = ["GET", "PUT", "HEAD", "DELETE", "OPTIONS", "POST", "PATCH", "TRACE"];
- if (validMethods.indexOf(options.method.toUpperCase()) === -1) {
- throw new Error("The provided method \"" + options.method + "\" is invalid. Supported HTTP methods are: " + JSON.stringify(validMethods));
- }
- }
- this.method = options.method.toUpperCase();
- // construct the url if path template is provided
- if (options.pathTemplate) {
- var pathTemplate_1 = options.pathTemplate, pathParameters_1 = options.pathParameters;
- if (typeof pathTemplate_1 !== "string") {
- throw new Error("options.pathTemplate must be of type \"string\".");
- }
- if (!options.baseUrl) {
- options.baseUrl = "https://management.azure.com";
- }
- var baseUrl = options.baseUrl;
- var url_1 = baseUrl + (baseUrl.endsWith("/") ? "" : "/") + (pathTemplate_1.startsWith("/") ? pathTemplate_1.slice(1) : pathTemplate_1);
- var segments = url_1.match(/({\w*\s*\w*})/ig);
- if (segments && segments.length) {
- if (!pathParameters_1) {
- throw new Error("pathTemplate: " + pathTemplate_1 + " has been provided. Hence, options.pathParameters must also be provided.");
- }
- segments.forEach(function (item) {
- var pathParamName = item.slice(1, -1);
- var pathParam = pathParameters_1[pathParamName];
- if (pathParam === null || pathParam === undefined || !(typeof pathParam === "string" || typeof pathParam === "object")) {
- throw new Error("pathTemplate: " + pathTemplate_1 + " contains the path parameter " + pathParamName +
- (" however, it is not present in " + pathParameters_1 + " - " + JSON.stringify(pathParameters_1, undefined, 2) + ".") +
- ("The value of the path parameter can either be a \"string\" of the form { " + pathParamName + ": \"some sample value\" } or ") +
- ("it can be an \"object\" of the form { \"" + pathParamName + "\": { value: \"some sample value\", skipUrlEncoding: true } }."));
- }
- if (typeof pathParam.valueOf() === "string") {
- url_1 = url_1.replace(item, encodeURIComponent(pathParam));
- }
- if (typeof pathParam.valueOf() === "object") {
- if (!pathParam.value) {
- throw new Error("options.pathParameters[" + pathParamName + "] is of type \"object\" but it does not contain a \"value\" property.");
- }
- if (pathParam.skipUrlEncoding) {
- url_1 = url_1.replace(item, pathParam.value);
- }
- else {
- url_1 = url_1.replace(item, encodeURIComponent(pathParam.value));
- }
- }
- });
- }
- this.url = url_1;
- }
- // append query parameters to the url if they are provided. They can be provided with pathTemplate or url option.
- if (options.queryParameters) {
- var queryParameters = options.queryParameters;
- if (typeof queryParameters !== "object") {
- throw new Error("options.queryParameters must be of type object. It should be a JSON object " +
- "of \"query-parameter-name\" as the key and the \"query-parameter-value\" as the value. " +
- "The \"query-parameter-value\" may be fo type \"string\" or an \"object\" of the form { value: \"query-parameter-value\", skipUrlEncoding: true }.");
- }
- // append question mark if it is not present in the url
- if (this.url && this.url.indexOf("?") === -1) {
- this.url += "?";
- }
- // construct queryString
- var queryParams = [];
- // We need to populate this.query as a dictionary if the request is being used for Sway's validateRequest().
- this.query = {};
- for (var queryParamName in queryParameters) {
- var queryParam = queryParameters[queryParamName];
- if (queryParam) {
- if (typeof queryParam === "string") {
- queryParams.push(queryParamName + "=" + encodeURIComponent(queryParam));
- this.query[queryParamName] = encodeURIComponent(queryParam);
- }
- else if (typeof queryParam === "object") {
- if (!queryParam.value) {
- throw new Error("options.queryParameters[" + queryParamName + "] is of type \"object\" but it does not contain a \"value\" property.");
- }
- if (queryParam.skipUrlEncoding) {
- queryParams.push(queryParamName + "=" + queryParam.value);
- this.query[queryParamName] = queryParam.value;
- }
- else {
- queryParams.push(queryParamName + "=" + encodeURIComponent(queryParam.value));
- this.query[queryParamName] = encodeURIComponent(queryParam.value);
- }
- }
- }
- } // end-of-for
- // append the queryString
- this.url += queryParams.join("&");
- }
- // add headers to the request if they are provided
- if (options.headers) {
- var headers = options.headers;
- for (var _i = 0, _a = Object.keys(options.headers); _i < _a.length; _i++) {
- var headerName = _a[_i];
- this.headers.set(headerName, headers[headerName]);
- }
- }
- // ensure accept-language is set correctly
- if (!this.headers.get("accept-language")) {
- this.headers.set("accept-language", "en-US");
- }
- // ensure the request-id is set correctly
- if (!this.headers.get("x-ms-client-request-id") && !options.disableClientRequestId) {
- this.headers.set("x-ms-client-request-id", generateUuid());
- }
- // default
- if (!this.headers.get("Content-Type")) {
- this.headers.set("Content-Type", "application/json; charset=utf-8");
- }
- // set the request body. request.js automatically sets the Content-Length request header, so we need not set it explicilty
- this.body = options.body;
- if (options.body != undefined) {
- // body as a stream special case. set the body as-is and check for some special request headers specific to sending a stream.
- if (options.bodyIsStream) {
- if (!this.headers.get("Transfer-Encoding")) {
- this.headers.set("Transfer-Encoding", "chunked");
- }
- if (this.headers.get("Content-Type") !== "application/octet-stream") {
- this.headers.set("Content-Type", "application/octet-stream");
- }
- }
- else {
- if (options.serializationMapper) {
- this.body = new Serializer(options.mappers).serialize(options.serializationMapper, options.body, "requestBody");
- }
- if (!options.disableJsonStringifyOnBody) {
- this.body = JSON.stringify(options.body);
- }
- }
- }
- this.abortSignal = options.abortSignal;
- this.onDownloadProgress = options.onDownloadProgress;
- this.onUploadProgress = options.onUploadProgress;
- return this;
- };
- /**
- * Clone this WebResource HTTP request object.
- * @returns {WebResource} The clone of this WebResource HTTP request object.
- */
- WebResource.prototype.clone = function () {
- var result = new WebResource(this.url, this.method, this.body, this.query, this.headers && this.headers.clone(), this.streamResponseBody, this.withCredentials, this.abortSignal, this.timeout, this.onUploadProgress, this.onDownloadProgress);
- if (this.formData) {
- result.formData = this.formData;
- }
- if (this.operationSpec) {
- result.operationSpec = this.operationSpec;
- }
- if (this.shouldDeserialize) {
- result.shouldDeserialize = this.shouldDeserialize;
- }
- if (this.operationResponseGetter) {
- result.operationResponseGetter = this.operationResponseGetter;
- }
- return result;
- };
- return WebResource;
- }());
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation. All rights reserved.
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use
- this file except in compliance with the License. You may obtain a copy of the
- License at http://www.apache.org/licenses/LICENSE-2.0
- THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
- WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
- MERCHANTABLITY OR NON-INFRINGEMENT.
- See the Apache Version 2.0 License for specific language governing permissions
- and limitations under the License.
- ***************************************************************************** */
- /* global Reflect, Promise */
- var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- }
- var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- function __awaiter(thisArg, _arguments, P, generator) {
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
- }
- function __generator(thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- var RestError = /** @class */ (function (_super) {
- __extends(RestError, _super);
- function RestError(message, code, statusCode, request, response, body) {
- var _this = _super.call(this, message) || this;
- _this.code = code;
- _this.statusCode = statusCode;
- _this.request = request;
- _this.response = response;
- _this.body = body;
- Object.setPrototypeOf(_this, RestError.prototype);
- return _this;
- }
- RestError.REQUEST_SEND_ERROR = "REQUEST_SEND_ERROR";
- RestError.REQUEST_ABORTED_ERROR = "REQUEST_ABORTED_ERROR";
- RestError.PARSE_ERROR = "PARSE_ERROR";
- return RestError;
- }(Error));
- // Copyright (c) Microsoft Corporation. All rights reserved.
- /**
- * A HttpClient implementation that uses XMLHttpRequest to send HTTP requests.
- */
- var XhrHttpClient = /** @class */ (function () {
- function XhrHttpClient() {
- }
- XhrHttpClient.prototype.sendRequest = function (request) {
- var xhr = new XMLHttpRequest();
- if (request.proxySettings) {
- throw new Error("HTTP proxy is not supported in browser environment");
- }
- var abortSignal = request.abortSignal;
- if (abortSignal) {
- var listener_1 = function () {
- xhr.abort();
- };
- abortSignal.addEventListener("abort", listener_1);
- xhr.addEventListener("readystatechange", function () {
- if (xhr.readyState === XMLHttpRequest.DONE) {
- abortSignal.removeEventListener("abort", listener_1);
- }
- });
- }
- addProgressListener(xhr.upload, request.onUploadProgress);
- addProgressListener(xhr, request.onDownloadProgress);
- if (request.formData) {
- var formData = request.formData;
- var requestForm_1 = new FormData();
- var appendFormValue = function (key, value) {
- if (value && value.hasOwnProperty("value") && value.hasOwnProperty("options")) {
- requestForm_1.append(key, value.value, value.options);
- }
- else {
- requestForm_1.append(key, value);
- }
- };
- for (var _i = 0, _a = Object.keys(formData); _i < _a.length; _i++) {
- var formKey = _a[_i];
- var formValue = formData[formKey];
- if (Array.isArray(formValue)) {
- for (var j = 0; j < formValue.length; j++) {
- appendFormValue(formKey, formValue[j]);
- }
- }
- else {
- appendFormValue(formKey, formValue);
- }
- }
- request.body = requestForm_1;
- request.formData = undefined;
- var contentType = request.headers.get("Content-Type");
- if (contentType && contentType.indexOf("multipart/form-data") !== -1) {
- // browser will automatically apply a suitable content-type header
- request.headers.remove("Content-Type");
- }
- }
- xhr.open(request.method, request.url);
- xhr.timeout = request.timeout;
- xhr.withCredentials = request.withCredentials;
- for (var _b = 0, _c = request.headers.headersArray(); _b < _c.length; _b++) {
- var header = _c[_b];
- xhr.setRequestHeader(header.name, header.value);
- }
- xhr.responseType = request.streamResponseBody ? "blob" : "text";
- // tslint:disable-next-line:no-null-keyword
- xhr.send(request.body === undefined ? null : request.body);
- if (request.streamResponseBody) {
- return new Promise(function (resolve, reject) {
- xhr.addEventListener("readystatechange", function () {
- // Resolve as soon as headers are loaded
- if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
- var blobBody = new Promise(function (resolve, reject) {
- xhr.addEventListener("load", function () {
- resolve(xhr.response);
- });
- rejectOnTerminalEvent(request, xhr, reject);
- });
- resolve({
- request: request,
- status: xhr.status,
- headers: parseHeaders(xhr),
- blobBody: blobBody
- });
- }
- });
- rejectOnTerminalEvent(request, xhr, reject);
- });
- }
- else {
- return new Promise(function (resolve, reject) {
- xhr.addEventListener("load", function () { return resolve({
- request: request,
- status: xhr.status,
- headers: parseHeaders(xhr),
- bodyAsText: xhr.responseText
- }); });
- rejectOnTerminalEvent(request, xhr, reject);
- });
- }
- };
- return XhrHttpClient;
- }());
- function addProgressListener(xhr, listener) {
- if (listener) {
- xhr.addEventListener("progress", function (rawEvent) { return listener({
- loadedBytes: rawEvent.loaded
- }); });
- }
- }
- // exported locally for testing
- function parseHeaders(xhr) {
- var responseHeaders = new HttpHeaders();
- var headerLines = xhr.getAllResponseHeaders().trim().split(/[\r\n]+/);
- for (var _i = 0, headerLines_1 = headerLines; _i < headerLines_1.length; _i++) {
- var line = headerLines_1[_i];
- var index = line.indexOf(":");
- var headerName = line.slice(0, index);
- var headerValue = line.slice(index + 2);
- responseHeaders.set(headerName, headerValue);
- }
- return responseHeaders;
- }
- function rejectOnTerminalEvent(request, xhr, reject) {
- xhr.addEventListener("error", function () { return reject(new RestError("Failed to send request to " + request.url, RestError.REQUEST_SEND_ERROR, undefined, request)); });
- xhr.addEventListener("abort", function () { return reject(new RestError("The request was aborted", RestError.REQUEST_ABORTED_ERROR, undefined, request)); });
- xhr.addEventListener("timeout", function () { return reject(new RestError("timeout of " + xhr.timeout + "ms exceeded", RestError.REQUEST_SEND_ERROR, undefined, request)); });
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // Copyright (c) Microsoft Corporation. All rights reserved.
- (function (HttpPipelineLogLevel) {
- /**
- * A log level that indicates that no logs will be logged.
- */
- HttpPipelineLogLevel[HttpPipelineLogLevel["OFF"] = 0] = "OFF";
- /**
- * An error log.
- */
- HttpPipelineLogLevel[HttpPipelineLogLevel["ERROR"] = 1] = "ERROR";
- /**
- * A warning log.
- */
- HttpPipelineLogLevel[HttpPipelineLogLevel["WARNING"] = 2] = "WARNING";
- /**
- * An information log.
- */
- HttpPipelineLogLevel[HttpPipelineLogLevel["INFO"] = 3] = "INFO";
- })(exports.HttpPipelineLogLevel || (exports.HttpPipelineLogLevel = {}));
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // Licensed under the MIT License. See License.txt in the project root for license information.
- /**
- * Get the path to this parameter's value as a dotted string (a.b.c).
- * @param parameter The parameter to get the path string for.
- * @returns The path to this parameter's value as a dotted string.
- */
- function getPathStringFromParameter(parameter) {
- return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);
- }
- function getPathStringFromParameterPath(parameterPath, mapper) {
- var result;
- if (typeof parameterPath === "string") {
- result = parameterPath;
- }
- else if (Array.isArray(parameterPath)) {
- result = parameterPath.join(".");
- }
- else {
- result = mapper.serializedName;
- }
- return result;
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- function isStreamOperation(operationSpec) {
- var result = false;
- for (var statusCode in operationSpec.responses) {
- var operationResponse = operationSpec.responses[statusCode];
- if (operationResponse.bodyMapper && operationResponse.bodyMapper.type.name === MapperType.Stream) {
- result = true;
- break;
- }
- }
- return result;
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // Licensed under the MIT License. See License.txt in the project root for license information.
- var parser = new DOMParser();
- function parseXML(str) {
- try {
- var dom = parser.parseFromString(str, "application/xml");
- throwIfError(dom);
- var obj = domToObject(dom.childNodes[0]);
- return Promise.resolve(obj);
- }
- catch (err) {
- return Promise.reject(err);
- }
- }
- var errorNS = "";
- try {
- errorNS = parser.parseFromString("INVALID", "text/xml").getElementsByTagName("parsererror")[0].namespaceURI;
- }
- catch (ignored) {
- // Most browsers will return a document containing <parsererror>, but IE will throw.
- }
- function throwIfError(dom) {
- if (errorNS) {
- var parserErrors = dom.getElementsByTagNameNS(errorNS, "parsererror");
- if (parserErrors.length) {
- throw new Error(parserErrors.item(0).innerHTML);
- }
- }
- }
- function isElement(node) {
- return !!node.attributes;
- }
- /**
- * Get the Element-typed version of the provided Node if the provided node is an element with
- * attributes. If it isn't, then undefined is returned.
- */
- function asElementWithAttributes(node) {
- return isElement(node) && node.hasAttributes() ? node : undefined;
- }
- function domToObject(node) {
- var result = {};
- var childNodeCount = node.childNodes.length;
- var firstChildNode = node.childNodes[0];
- var onlyChildTextValue = (firstChildNode && childNodeCount === 1 && firstChildNode.nodeType === Node.TEXT_NODE && firstChildNode.nodeValue) || undefined;
- var elementWithAttributes = asElementWithAttributes(node);
- if (elementWithAttributes) {
- result["$"] = {};
- for (var i = 0; i < elementWithAttributes.attributes.length; i++) {
- var attr = elementWithAttributes.attributes[i];
- result["$"][attr.nodeName] = attr.nodeValue;
- }
- if (onlyChildTextValue) {
- result["_"] = onlyChildTextValue;
- }
- }
- else if (childNodeCount === 0) {
- result = "";
- }
- else if (onlyChildTextValue) {
- result = onlyChildTextValue;
- }
- if (!onlyChildTextValue) {
- for (var i = 0; i < childNodeCount; i++) {
- var child = node.childNodes[i];
- // Ignore leading/trailing whitespace nodes
- if (child.nodeType !== Node.TEXT_NODE) {
- var childObject = domToObject(child);
- if (!result[child.nodeName]) {
- result[child.nodeName] = childObject;
- }
- else if (Array.isArray(result[child.nodeName])) {
- result[child.nodeName].push(childObject);
- }
- else {
- result[child.nodeName] = [result[child.nodeName], childObject];
- }
- }
- }
- }
- return result;
- }
- // tslint:disable-next-line:no-null-keyword
- var doc = document.implementation.createDocument(null, null, null);
- var serializer = new XMLSerializer();
- function stringifyXML(obj, opts) {
- var rootName = opts && opts.rootName || "root";
- var dom = buildNode(obj, rootName)[0];
- return '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + serializer.serializeToString(dom);
- }
- function buildAttributes(attrs) {
- var result = [];
- for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {
- var key = _a[_i];
- var attr = doc.createAttribute(key);
- attr.value = attrs[key].toString();
- result.push(attr);
- }
- return result;
- }
- function buildNode(obj, elementName) {
- if (typeof obj === "string" || typeof obj === "number" || typeof obj === "boolean") {
- var elem = doc.createElement(elementName);
- elem.textContent = obj.toString();
- return [elem];
- }
- else if (Array.isArray(obj)) {
- var result = [];
- for (var _i = 0, obj_1 = obj; _i < obj_1.length; _i++) {
- var arrayElem = obj_1[_i];
- for (var _a = 0, _b = buildNode(arrayElem, elementName); _a < _b.length; _a++) {
- var child = _b[_a];
- result.push(child);
- }
- }
- return result;
- }
- else if (typeof obj === "object") {
- var elem = doc.createElement(elementName);
- for (var _c = 0, _d = Object.keys(obj); _c < _d.length; _c++) {
- var key = _d[_c];
- if (key === "$") {
- for (var _e = 0, _f = buildAttributes(obj[key]); _e < _f.length; _e++) {
- var attr = _f[_e];
- elem.attributes.setNamedItem(attr);
- }
- }
- else {
- for (var _g = 0, _h = buildNode(obj[key], key); _g < _h.length; _g++) {
- var child = _h[_g];
- elem.appendChild(child);
- }
- }
- }
- return [elem];
- }
- else {
- throw new Error("Illegal value passed to buildObject: " + obj);
- }
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- var BaseRequestPolicy = /** @class */ (function () {
- function BaseRequestPolicy(_nextPolicy, _options) {
- this._nextPolicy = _nextPolicy;
- this._options = _options;
- }
- /**
- * Get whether or not a log with the provided log level should be logged.
- * @param logLevel The log level of the log that will be logged.
- * @returns Whether or not a log with the provided log level should be logged.
- */
- BaseRequestPolicy.prototype.shouldLog = function (logLevel) {
- return this._options.shouldLog(logLevel);
- };
- /**
- * Attempt to log the provided message to the provided logger. If no logger was provided or if
- * the log level does not meat the logger's threshold, then nothing will be logged.
- * @param logLevel The log level of this log.
- * @param message The message of this log.
- */
- BaseRequestPolicy.prototype.log = function (logLevel, message) {
- this._options.log(logLevel, message);
- };
- return BaseRequestPolicy;
- }());
- /**
- * Optional properties that can be used when creating a RequestPolicy.
- */
- var RequestPolicyOptions = /** @class */ (function () {
- function RequestPolicyOptions(_logger) {
- this._logger = _logger;
- }
- /**
- * Get whether or not a log with the provided log level should be logged.
- * @param logLevel The log level of the log that will be logged.
- * @returns Whether or not a log with the provided log level should be logged.
- */
- RequestPolicyOptions.prototype.shouldLog = function (logLevel) {
- return !!this._logger &&
- logLevel !== exports.HttpPipelineLogLevel.OFF &&
- logLevel <= this._logger.minimumLogLevel;
- };
- /**
- * Attempt to log the provided message to the provided logger. If no logger was provided or if
- * the log level does not meat the logger's threshold, then nothing will be logged.
- * @param logLevel The log level of this log.
- * @param message The message of this log.
- */
- RequestPolicyOptions.prototype.log = function (logLevel, message) {
- if (this._logger && this.shouldLog(logLevel)) {
- this._logger.log(logLevel, message);
- }
- };
- return RequestPolicyOptions;
- }());
- // Copyright (c) Microsoft Corporation. All rights reserved.
- /**
- * Create a new serialization RequestPolicyCreator that will serialized HTTP request bodies as they
- * pass through the HTTP pipeline.
- */
- function deserializationPolicy(deserializationContentTypes) {
- return {
- create: function (nextPolicy, options) {
- return new DeserializationPolicy(nextPolicy, deserializationContentTypes, options);
- }
- };
- }
- var defaultJsonContentTypes = ["application/json", "text/json"];
- var defaultXmlContentTypes = ["application/xml", "application/atom+xml"];
- /**
- * A RequestPolicy that will deserialize HTTP response bodies and headers as they pass through the
- * HTTP pipeline.
- */
- var DeserializationPolicy = /** @class */ (function (_super) {
- __extends(DeserializationPolicy, _super);
- function DeserializationPolicy(nextPolicy, deserializationContentTypes, options) {
- var _this = _super.call(this, nextPolicy, options) || this;
- _this.jsonContentTypes = deserializationContentTypes && deserializationContentTypes.json || defaultJsonContentTypes;
- _this.xmlContentTypes = deserializationContentTypes && deserializationContentTypes.xml || defaultXmlContentTypes;
- return _this;
- }
- DeserializationPolicy.prototype.sendRequest = function (request) {
- return __awaiter(this, void 0, void 0, function () {
- var _this = this;
- return __generator(this, function (_a) {
- return [2 /*return*/, this._nextPolicy.sendRequest(request).then(function (response) { return deserializeResponseBody(_this.jsonContentTypes, _this.xmlContentTypes, response); })];
- });
- });
- };
- return DeserializationPolicy;
- }(BaseRequestPolicy));
- function getOperationResponse(parsedResponse) {
- var result;
- var request = parsedResponse.request;
- var operationSpec = request.operationSpec;
- if (operationSpec) {
- var operationResponseGetter = request.operationResponseGetter;
- if (!operationResponseGetter) {
- result = operationSpec.responses[parsedResponse.status];
- }
- else {
- result = operationResponseGetter(operationSpec, parsedResponse);
- }
- }
- return result;
- }
- function shouldDeserializeResponse(parsedResponse) {
- var shouldDeserialize = parsedResponse.request.shouldDeserialize;
- var result;
- if (shouldDeserialize === undefined) {
- result = true;
- }
- else if (typeof shouldDeserialize === "boolean") {
- result = shouldDeserialize;
- }
- else {
- result = shouldDeserialize(parsedResponse);
- }
- return result;
- }
- function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response) {
- return parse(jsonContentTypes, xmlContentTypes, response).then(function (parsedResponse) {
- var shouldDeserialize = shouldDeserializeResponse(parsedResponse);
- if (shouldDeserialize) {
- var operationSpec = parsedResponse.request.operationSpec;
- if (operationSpec && operationSpec.responses) {
- var statusCode = parsedResponse.status;
- var expectedStatusCodes = Object.keys(operationSpec.responses);
- var hasNoExpectedStatusCodes = (expectedStatusCodes.length === 0 || (expectedStatusCodes.length === 1 && expectedStatusCodes[0] === "default"));
- var responseSpec = getOperationResponse(parsedResponse);
- var isExpectedStatusCode = hasNoExpectedStatusCodes ? (200 <= statusCode && statusCode < 300) : !!responseSpec;
- if (!isExpectedStatusCode) {
- var defaultResponseSpec = operationSpec.responses.default;
- if (defaultResponseSpec) {
- var initialErrorMessage = isStreamOperation(operationSpec)
- ? "Unexpected status code: " + statusCode
- : parsedResponse.bodyAsText;
- var error = new RestError(initialErrorMessage);
- error.statusCode = statusCode;
- error.request = stripRequest(parsedResponse.request);
- error.response = stripResponse(parsedResponse);
- var parsedErrorResponse = parsedResponse.parsedBody;
- try {
- if (parsedErrorResponse) {
- var defaultResponseBodyMapper = defaultResponseSpec.bodyMapper;
- if (defaultResponseBodyMapper && defaultResponseBodyMapper.serializedName === "CloudError") {
- if (parsedErrorResponse.error) {
- parsedErrorResponse = parsedErrorResponse.error;
- }
- if (parsedErrorResponse.code) {
- error.code = parsedErrorResponse.code;
- }
- if (parsedErrorResponse.message) {
- error.message = parsedErrorResponse.message;
- }
- }
- else {
- var internalError = parsedErrorResponse;
- if (parsedErrorResponse.error) {
- internalError = parsedErrorResponse.error;
- }
- error.code = internalError.code;
- if (internalError.message) {
- error.message = internalError.message;
- }
- }
- if (defaultResponseBodyMapper) {
- var valueToDeserialize = parsedErrorResponse;
- if (operationSpec.isXML && defaultResponseBodyMapper.type.name === MapperType.Sequence) {
- valueToDeserialize = typeof parsedErrorResponse === "object"
- ? parsedErrorResponse[defaultResponseBodyMapper.xmlElementName]
- : [];
- }
- error.body = operationSpec.serializer.deserialize(defaultResponseBodyMapper, valueToDeserialize, "error.body");
- }
- }
- }
- catch (defaultError) {
- error.message = "Error \"" + defaultError.message + "\" occurred in deserializing the responseBody - \"" + parsedResponse.bodyAsText + "\" for the default response.";
- }
- return Promise.reject(error);
- }
- }
- else if (responseSpec) {
- if (responseSpec.bodyMapper) {
- var valueToDeserialize = parsedResponse.parsedBody;
- if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperType.Sequence) {
- valueToDeserialize = typeof valueToDeserialize === "object" ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName] : [];
- }
- try {
- parsedResponse.parsedBody = operationSpec.serializer.deserialize(responseSpec.bodyMapper, valueToDeserialize, "operationRes.parsedBody");
- }
- catch (error) {
- var restError = new RestError("Error " + error + " occurred in deserializing the responseBody - " + parsedResponse.bodyAsText);
- restError.request = stripRequest(parsedResponse.request);
- restError.response = stripResponse(parsedResponse);
- return Promise.reject(restError);
- }
- }
- else if (operationSpec.httpMethod === "HEAD") {
- // head methods never have a body, but we return a boolean to indicate presence/absence of the resource
- parsedResponse.parsedBody = response.status >= 200 && response.status < 300;
- }
- if (responseSpec.headersMapper) {
- parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(responseSpec.headersMapper, parsedResponse.headers.rawHeaders(), "operationRes.parsedHeaders");
- }
- }
- }
- }
- return Promise.resolve(parsedResponse);
- });
- }
- function parse(jsonContentTypes, xmlContentTypes, operationResponse) {
- var errorHandler = function (err) {
- var msg = "Error \"" + err + "\" occurred while parsing the response body - " + operationResponse.bodyAsText + ".";
- var errCode = err.code || RestError.PARSE_ERROR;
- var e = new RestError(msg, errCode, operationResponse.status, operationResponse.request, operationResponse, operationResponse.bodyAsText);
- return Promise.reject(e);
- };
- if (!operationResponse.request.streamResponseBody && operationResponse.bodyAsText) {
- var text_1 = operationResponse.bodyAsText;
- var contentType = operationResponse.headers.get("Content-Type") || "";
- var contentComponents = !contentType ? [] : contentType.split(";").map(function (component) { return component.toLowerCase(); });
- if (contentComponents.length === 0 || contentComponents.some(function (component) { return jsonContentTypes.indexOf(component) !== -1; })) {
- return new Promise(function (resolve) {
- operationResponse.parsedBody = JSON.parse(text_1);
- resolve(operationResponse);
- }).catch(errorHandler);
- }
- else if (contentComponents.some(function (component) { return xmlContentTypes.indexOf(component) !== -1; })) {
- return parseXML(text_1)
- .then(function (body) {
- operationResponse.parsedBody = body;
- return operationResponse;
- })
- .catch(errorHandler);
- }
- }
- return Promise.resolve(operationResponse);
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- function exponentialRetryPolicy(retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
- return {
- create: function (nextPolicy, options) {
- return new ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);
- }
- };
- }
- var DEFAULT_CLIENT_RETRY_INTERVAL = 1000 * 30;
- var DEFAULT_CLIENT_RETRY_COUNT = 3;
- var DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 90;
- var DEFAULT_CLIENT_MIN_RETRY_INTERVAL = 1000 * 3;
- /**
- * @class
- * Instantiates a new "ExponentialRetryPolicyFilter" instance.
- */
- var ExponentialRetryPolicy = /** @class */ (function (_super) {
- __extends(ExponentialRetryPolicy, _super);
- /**
- * @constructor
- * @param {RequestPolicy} nextPolicy The next RequestPolicy in the pipeline chain.
- * @param {RequestPolicyOptions} options The options for this RequestPolicy.
- * @param {number} [retryCount] The client retry count.
- * @param {number} [retryInterval] The client retry interval, in milliseconds.
- * @param {number} [minRetryInterval] The minimum retry interval, in milliseconds.
- * @param {number} [maxRetryInterval] The maximum retry interval, in milliseconds.
- */
- function ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
- var _this = _super.call(this, nextPolicy, options) || this;
- function isNumber(n) { return typeof n === "number"; }
- _this.retryCount = isNumber(retryCount) ? retryCount : DEFAULT_CLIENT_RETRY_COUNT;
- _this.retryInterval = isNumber(retryInterval) ? retryInterval : DEFAULT_CLIENT_RETRY_INTERVAL;
- _this.minRetryInterval = isNumber(minRetryInterval) ? minRetryInterval : DEFAULT_CLIENT_MIN_RETRY_INTERVAL;
- _this.maxRetryInterval = isNumber(maxRetryInterval) ? maxRetryInterval : DEFAULT_CLIENT_MAX_RETRY_INTERVAL;
- return _this;
- }
- ExponentialRetryPolicy.prototype.sendRequest = function (request) {
- var _this = this;
- return this._nextPolicy.sendRequest(request.clone())
- .then(function (response) { return retry(_this, request, response); })
- .catch(function (error) { return retry(_this, request, error.response, undefined, error); });
- };
- return ExponentialRetryPolicy;
- }(BaseRequestPolicy));
- /**
- * Determines if the operation should be retried and how long to wait until the next retry.
- *
- * @param {ExponentialRetryPolicy} policy The ExponentialRetryPolicy that this function is being called against.
- * @param {number} statusCode The HTTP status code.
- * @param {RetryData} retryData The retry data.
- * @return {boolean} True if the operation qualifies for a retry; false otherwise.
- */
- function shouldRetry(policy, statusCode, retryData) {
- if (statusCode == undefined || (statusCode < 500 && statusCode !== 408) || statusCode === 501 || statusCode === 505) {
- return false;
- }
- var currentCount;
- if (!retryData) {
- throw new Error("retryData for the ExponentialRetryPolicyFilter cannot be null.");
- }
- else {
- currentCount = (retryData && retryData.retryCount);
- }
- return (currentCount < policy.retryCount);
- }
- /**
- * Updates the retry data for the next attempt.
- *
- * @param {ExponentialRetryPolicy} policy The ExponentialRetryPolicy that this function is being called against.
- * @param {RetryData} retryData The retry data.
- * @param {RetryError} [err] The operation"s error, if any.
- */
- function updateRetryData(policy, retryData, err) {
- if (!retryData) {
- retryData = {
- retryCount: 0,
- retryInterval: 0
- };
- }
- if (err) {
- if (retryData.error) {
- err.innerError = retryData.error;
- }
- retryData.error = err;
- }
- // Adjust retry count
- retryData.retryCount++;
- // Adjust retry interval
- var incrementDelta = Math.pow(2, retryData.retryCount) - 1;
- var boundedRandDelta = policy.retryInterval * 0.8 +
- Math.floor(Math.random() * (policy.retryInterval * 1.2 - policy.retryInterval * 0.8));
- incrementDelta *= boundedRandDelta;
- retryData.retryInterval = Math.min(policy.minRetryInterval + incrementDelta, policy.maxRetryInterval);
- return retryData;
- }
- function retry(policy, request, response, retryData, requestError) {
- retryData = updateRetryData(policy, retryData, requestError);
- var isAborted = request.abortSignal && request.abortSignal.aborted;
- if (!isAborted && shouldRetry(policy, response && response.status, retryData)) {
- return delay(retryData.retryInterval)
- .then(function () { return policy._nextPolicy.sendRequest(request.clone()); })
- .then(function (res) { return retry(policy, request, res, retryData, undefined); })
- .catch(function (err) { return retry(policy, request, response, retryData, err); });
- }
- else if (isAborted || requestError || !response) {
- // If the operation failed in the end, return all errors instead of just the last one
- var err = retryData.error ||
- new RestError("Failed to send the request.", RestError.REQUEST_SEND_ERROR, response && response.status, response && response.request, response);
- return Promise.reject(err);
- }
- else {
- return Promise.resolve(response);
- }
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- function generateClientRequestIdPolicy(requestIdHeaderName) {
- if (requestIdHeaderName === void 0) { requestIdHeaderName = "x-ms-client-request-id"; }
- return {
- create: function (nextPolicy, options) {
- return new GenerateClientRequestIdPolicy(nextPolicy, options, requestIdHeaderName);
- }
- };
- }
- var GenerateClientRequestIdPolicy = /** @class */ (function (_super) {
- __extends(GenerateClientRequestIdPolicy, _super);
- function GenerateClientRequestIdPolicy(nextPolicy, options, _requestIdHeaderName) {
- var _this = _super.call(this, nextPolicy, options) || this;
- _this._requestIdHeaderName = _requestIdHeaderName;
- return _this;
- }
- GenerateClientRequestIdPolicy.prototype.sendRequest = function (request) {
- if (!request.headers.contains(this._requestIdHeaderName)) {
- request.headers.set(this._requestIdHeaderName, generateUuid());
- }
- return this._nextPolicy.sendRequest(request);
- };
- return GenerateClientRequestIdPolicy;
- }(BaseRequestPolicy));
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // Licensed under the MIT License. See License.txt in the project root for license information.
- function getDefaultUserAgentKey() {
- return "x-ms-command-name";
- }
- function getPlatformSpecificData() {
- var navigator = window.navigator;
- var osInfo = {
- key: "OS",
- value: (navigator.oscpu || navigator.platform).replace(" ", "")
- };
- return [osInfo];
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- function getRuntimeInfo() {
- var msRestRuntime = {
- key: "ms-rest-js",
- value: Constants.msRestVersion
- };
- return [msRestRuntime];
- }
- function getUserAgentString(telemetryInfo, keySeparator, valueSeparator) {
- if (keySeparator === void 0) { keySeparator = " "; }
- if (valueSeparator === void 0) { valueSeparator = "/"; }
- return telemetryInfo.map(function (info) {
- var value = info.value ? "" + valueSeparator + info.value : "";
- return "" + info.key + value;
- }).join(keySeparator);
- }
- var getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
- function getDefaultUserAgentValue() {
- var runtimeInfo = getRuntimeInfo();
- var platformSpecificData = getPlatformSpecificData();
- var userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
- return userAgent;
- }
- function userAgentPolicy(userAgentData) {
- var key = (!userAgentData || userAgentData.key == undefined) ? getDefaultUserAgentKey() : userAgentData.key;
- var value = (!userAgentData || userAgentData.value == undefined) ? getDefaultUserAgentValue() : userAgentData.value;
- return {
- create: function (nextPolicy, options) {
- return new UserAgentPolicy(nextPolicy, options, key, value);
- }
- };
- }
- var UserAgentPolicy = /** @class */ (function (_super) {
- __extends(UserAgentPolicy, _super);
- function UserAgentPolicy(_nextPolicy, _options, headerKey, headerValue) {
- var _this = _super.call(this, _nextPolicy, _options) || this;
- _this._nextPolicy = _nextPolicy;
- _this._options = _options;
- _this.headerKey = headerKey;
- _this.headerValue = headerValue;
- return _this;
- }
- UserAgentPolicy.prototype.sendRequest = function (request) {
- this.addUserAgentHeader(request);
- return this._nextPolicy.sendRequest(request);
- };
- UserAgentPolicy.prototype.addUserAgentHeader = function (request) {
- if (!request.headers) {
- request.headers = new HttpHeaders();
- }
- if (!request.headers.get(this.headerKey) && this.headerValue) {
- request.headers.set(this.headerKey, this.headerValue);
- }
- };
- return UserAgentPolicy;
- }(BaseRequestPolicy));
- // Copyright (c) Microsoft Corporation. All rights reserved.
- /**
- * A class that handles the query portion of a URLBuilder.
- */
- var URLQuery = /** @class */ (function () {
- function URLQuery() {
- this._rawQuery = {};
- }
- /**
- * Get whether or not there any query parameters in this URLQuery.
- */
- URLQuery.prototype.any = function () {
- return Object.keys(this._rawQuery).length > 0;
- };
- /**
- * Set a query parameter with the provided name and value. If the parameterValue is undefined or
- * empty, then this will attempt to remove an existing query parameter with the provided
- * parameterName.
- */
- URLQuery.prototype.set = function (parameterName, parameterValue) {
- if (parameterName) {
- if (parameterValue != undefined) {
- var newValue = Array.isArray(parameterValue) ? parameterValue : parameterValue.toString();
- this._rawQuery[parameterName] = newValue;
- }
- else {
- delete this._rawQuery[parameterName];
- }
- }
- };
- /**
- * Get the value of the query parameter with the provided name. If no parameter exists with the
- * provided parameter name, then undefined will be returned.
- */
- URLQuery.prototype.get = function (parameterName) {
- return parameterName ? this._rawQuery[parameterName] : undefined;
- };
- /**
- * Get the string representation of this query. The return value will not start with a "?".
- */
- URLQuery.prototype.toString = function () {
- var result = "";
- for (var parameterName in this._rawQuery) {
- if (result) {
- result += "&";
- }
- var parameterValue = this._rawQuery[parameterName];
- if (Array.isArray(parameterValue)) {
- var parameterStrings = [];
- for (var _i = 0, parameterValue_1 = parameterValue; _i < parameterValue_1.length; _i++) {
- var parameterValueElement = parameterValue_1[_i];
- parameterStrings.push(parameterName + "=" + parameterValueElement);
- }
- result += parameterStrings.join("&");
- }
- else {
- result += parameterName + "=" + parameterValue;
- }
- }
- return result;
- };
- /**
- * Parse a URLQuery from the provided text.
- */
- URLQuery.parse = function (text) {
- var result = new URLQuery();
- if (text) {
- if (text.startsWith("?")) {
- text = text.substring(1);
- }
- var currentState = "ParameterName";
- var parameterName = "";
- var parameterValue = "";
- for (var i = 0; i < text.length; ++i) {
- var currentCharacter = text[i];
- switch (currentState) {
- case "ParameterName":
- switch (currentCharacter) {
- case "=":
- currentState = "ParameterValue";
- break;
- case "&":
- parameterName = "";
- parameterValue = "";
- break;
- default:
- parameterName += currentCharacter;
- break;
- }
- break;
- case "ParameterValue":
- switch (currentCharacter) {
- case "=":
- parameterName = "";
- parameterValue = "";
- currentState = "Invalid";
- break;
- case "&":
- result.set(parameterName, parameterValue);
- parameterName = "";
- parameterValue = "";
- currentState = "ParameterName";
- break;
- default:
- parameterValue += currentCharacter;
- break;
- }
- break;
- case "Invalid":
- if (currentCharacter === "&") {
- currentState = "ParameterName";
- }
- break;
- default:
- throw new Error("Unrecognized URLQuery parse state: " + currentState);
- }
- }
- if (currentState === "ParameterValue") {
- result.set(parameterName, parameterValue);
- }
- }
- return result;
- };
- return URLQuery;
- }());
- /**
- * A class that handles creating, modifying, and parsing URLs.
- */
- var URLBuilder = /** @class */ (function () {
- function URLBuilder() {
- }
- /**
- * Set the scheme/protocol for this URL. If the provided scheme contains other parts of a URL
- * (such as a host, port, path, or query), those parts will be added to this URL as well.
- */
- URLBuilder.prototype.setScheme = function (scheme) {
- if (!scheme) {
- this._scheme = undefined;
- }
- else {
- this.set(scheme, "SCHEME");
- }
- };
- /**
- * Get the scheme that has been set in this URL.
- */
- URLBuilder.prototype.getScheme = function () {
- return this._scheme;
- };
- /**
- * Set the host for this URL. If the provided host contains other parts of a URL (such as a
- * port, path, or query), those parts will be added to this URL as well.
- */
- URLBuilder.prototype.setHost = function (host) {
- if (!host) {
- this._host = undefined;
- }
- else {
- this.set(host, "SCHEME_OR_HOST");
- }
- };
- /**
- * Get the host that has been set in this URL.
- */
- URLBuilder.prototype.getHost = function () {
- return this._host;
- };
- /**
- * Set the port for this URL. If the provided port contains other parts of a URL (such as a
- * path or query), those parts will be added to this URL as well.
- */
- URLBuilder.prototype.setPort = function (port) {
- if (port == undefined || port === "") {
- this._port = undefined;
- }
- else {
- this.set(port.toString(), "PORT");
- }
- };
- /**
- * Get the port that has been set in this URL.
- */
- URLBuilder.prototype.getPort = function () {
- return this._port;
- };
- /**
- * Set the path for this URL. If the provided path contains a query, then it will be added to
- * this URL as well.
- */
- URLBuilder.prototype.setPath = function (path) {
- if (!path) {
- this._path = undefined;
- }
- else {
- if (path.indexOf("://") !== -1) {
- this.set(path, "SCHEME");
- }
- else {
- this.set(path, "PATH");
- }
- }
- };
- /**
- * Append the provided path to this URL's existing path. If the provided path contains a query,
- * then it will be added to this URL as well.
- */
- URLBuilder.prototype.appendPath = function (path) {
- if (path) {
- var currentPath = this.getPath();
- if (currentPath) {
- if (!currentPath.endsWith("/")) {
- currentPath += "/";
- }
- if (path.startsWith("/")) {
- path = path.substring(1);
- }
- path = currentPath + path;
- }
- this.set(path, "PATH");
- }
- };
- /**
- * Get the path that has been set in this URL.
- */
- URLBuilder.prototype.getPath = function () {
- return this._path;
- };
- /**
- * Set the query in this URL.
- */
- URLBuilder.prototype.setQuery = function (query) {
- if (!query) {
- this._query = undefined;
- }
- else {
- this._query = URLQuery.parse(query);
- }
- };
- /**
- * Set a query parameter with the provided name and value in this URL's query. If the provided
- * query parameter value is undefined or empty, then the query parameter will be removed if it
- * existed.
- */
- URLBuilder.prototype.setQueryParameter = function (queryParameterName, queryParameterValue) {
- if (queryParameterName) {
- if (!this._query) {
- this._query = new URLQuery();
- }
- this._query.set(queryParameterName, queryParameterValue);
- }
- };
- /**
- * Get the value of the query parameter with the provided query parameter name. If no query
- * parameter exists with the provided name, then undefined will be returned.
- */
- URLBuilder.prototype.getQueryParameterValue = function (queryParameterName) {
- return this._query ? this._query.get(queryParameterName) : undefined;
- };
- /**
- * Get the query in this URL.
- */
- URLBuilder.prototype.getQuery = function () {
- return this._query ? this._query.toString() : undefined;
- };
- /**
- * Set the parts of this URL by parsing the provided text using the provided startState.
- */
- URLBuilder.prototype.set = function (text, startState) {
- var tokenizer = new URLTokenizer(text, startState);
- while (tokenizer.next()) {
- var token = tokenizer.current();
- if (token) {
- switch (token.type) {
- case "SCHEME":
- this._scheme = token.text || undefined;
- break;
- case "HOST":
- this._host = token.text || undefined;
- break;
- case "PORT":
- this._port = token.text || undefined;
- break;
- case "PATH":
- var tokenPath = token.text || undefined;
- if (!this._path || this._path === "/" || tokenPath !== "/") {
- this._path = tokenPath;
- }
- break;
- case "QUERY":
- this._query = URLQuery.parse(token.text);
- break;
- default:
- throw new Error("Unrecognized URLTokenType: " + token.type);
- }
- }
- }
- };
- URLBuilder.prototype.toString = function () {
- var result = "";
- if (this._scheme) {
- result += this._scheme + "://";
- }
- if (this._host) {
- result += this._host;
- }
- if (this._port) {
- result += ":" + this._port;
- }
- if (this._path) {
- if (!this._path.startsWith("/")) {
- result += "/";
- }
- result += this._path;
- }
- if (this._query && this._query.any()) {
- result += "?" + this._query.toString();
- }
- return result;
- };
- /**
- * If the provided searchValue is found in this URLBuilder, then replace it with the provided
- * replaceValue.
- */
- URLBuilder.prototype.replaceAll = function (searchValue, replaceValue) {
- if (searchValue) {
- this.setScheme(replaceAll(this.getScheme(), searchValue, replaceValue));
- this.setHost(replaceAll(this.getHost(), searchValue, replaceValue));
- this.setPort(replaceAll(this.getPort(), searchValue, replaceValue));
- this.setPath(replaceAll(this.getPath(), searchValue, replaceValue));
- this.setQuery(replaceAll(this.getQuery(), searchValue, replaceValue));
- }
- };
- URLBuilder.parse = function (text) {
- var result = new URLBuilder();
- result.set(text, "SCHEME_OR_HOST");
- return result;
- };
- return URLBuilder;
- }());
- var URLToken = /** @class */ (function () {
- function URLToken(text, type) {
- this.text = text;
- this.type = type;
- }
- URLToken.scheme = function (text) {
- return new URLToken(text, "SCHEME");
- };
- URLToken.host = function (text) {
- return new URLToken(text, "HOST");
- };
- URLToken.port = function (text) {
- return new URLToken(text, "PORT");
- };
- URLToken.path = function (text) {
- return new URLToken(text, "PATH");
- };
- URLToken.query = function (text) {
- return new URLToken(text, "QUERY");
- };
- return URLToken;
- }());
- /**
- * Get whether or not the provided character (single character string) is an alphanumeric (letter or
- * digit) character.
- */
- function isAlphaNumericCharacter(character) {
- var characterCode = character.charCodeAt(0);
- return (48 /* '0' */ <= characterCode && characterCode <= 57 /* '9' */) ||
- (65 /* 'A' */ <= characterCode && characterCode <= 90 /* 'Z' */) ||
- (97 /* 'a' */ <= characterCode && characterCode <= 122 /* 'z' */);
- }
- /**
- * A class that tokenizes URL strings.
- */
- var URLTokenizer = /** @class */ (function () {
- function URLTokenizer(_text, state) {
- this._text = _text;
- this._textLength = _text ? _text.length : 0;
- this._currentState = state != undefined ? state : "SCHEME_OR_HOST";
- this._currentIndex = 0;
- }
- /**
- * Get the current URLToken this URLTokenizer is pointing at, or undefined if the URLTokenizer
- * hasn't started or has finished tokenizing.
- */
- URLTokenizer.prototype.current = function () {
- return this._currentToken;
- };
- /**
- * Advance to the next URLToken and return whether or not a URLToken was found.
- */
- URLTokenizer.prototype.next = function () {
- if (!hasCurrentCharacter(this)) {
- this._currentToken = undefined;
- }
- else {
- switch (this._currentState) {
- case "SCHEME":
- nextScheme(this);
- break;
- case "SCHEME_OR_HOST":
- nextSchemeOrHost(this);
- break;
- case "HOST":
- nextHost(this);
- break;
- case "PORT":
- nextPort(this);
- break;
- case "PATH":
- nextPath(this);
- break;
- case "QUERY":
- nextQuery(this);
- break;
- default:
- throw new Error("Unrecognized URLTokenizerState: " + this._currentState);
- }
- }
- return !!this._currentToken;
- };
- return URLTokenizer;
- }());
- /**
- * Read the remaining characters from this Tokenizer's character stream.
- */
- function readRemaining(tokenizer) {
- var result = "";
- if (tokenizer._currentIndex < tokenizer._textLength) {
- result = tokenizer._text.substring(tokenizer._currentIndex);
- tokenizer._currentIndex = tokenizer._textLength;
- }
- return result;
- }
- /**
- * Whether or not this URLTokenizer has a current character.
- */
- function hasCurrentCharacter(tokenizer) {
- return tokenizer._currentIndex < tokenizer._textLength;
- }
- /**
- * Get the character in the text string at the current index.
- */
- function getCurrentCharacter(tokenizer) {
- return tokenizer._text[tokenizer._currentIndex];
- }
- /**
- * Advance to the character in text that is "step" characters ahead. If no step value is provided,
- * then step will default to 1.
- */
- function nextCharacter(tokenizer, step) {
- if (hasCurrentCharacter(tokenizer)) {
- if (!step) {
- step = 1;
- }
- tokenizer._currentIndex += step;
- }
- }
- /**
- * Starting with the current character, peek "charactersToPeek" number of characters ahead in this
- * Tokenizer's stream of characters.
- */
- function peekCharacters(tokenizer, charactersToPeek) {
- var endIndex = tokenizer._currentIndex + charactersToPeek;
- if (tokenizer._textLength < endIndex) {
- endIndex = tokenizer._textLength;
- }
- return tokenizer._text.substring(tokenizer._currentIndex, endIndex);
- }
- /**
- * Read characters from this Tokenizer until the end of the stream or until the provided condition
- * is false when provided the current character.
- */
- function readWhile(tokenizer, condition) {
- var result = "";
- while (hasCurrentCharacter(tokenizer)) {
- var currentCharacter = getCurrentCharacter(tokenizer);
- if (!condition(currentCharacter)) {
- break;
- }
- else {
- result += currentCharacter;
- nextCharacter(tokenizer);
- }
- }
- return result;
- }
- /**
- * Read characters from this Tokenizer until a non-alphanumeric character or the end of the
- * character stream is reached.
- */
- function readWhileLetterOrDigit(tokenizer) {
- return readWhile(tokenizer, function (character) { return isAlphaNumericCharacter(character); });
- }
- /**
- * Read characters from this Tokenizer until one of the provided terminating characters is read or
- * the end of the character stream is reached.
- */
- function readUntilCharacter(tokenizer) {
- var terminatingCharacters = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- terminatingCharacters[_i - 1] = arguments[_i];
- }
- return readWhile(tokenizer, function (character) { return terminatingCharacters.indexOf(character) === -1; });
- }
- function nextScheme(tokenizer) {
- var scheme = readWhileLetterOrDigit(tokenizer);
- tokenizer._currentToken = URLToken.scheme(scheme);
- if (!hasCurrentCharacter(tokenizer)) {
- tokenizer._currentState = "DONE";
- }
- else {
- tokenizer._currentState = "HOST";
- }
- }
- function nextSchemeOrHost(tokenizer) {
- var schemeOrHost = readUntilCharacter(tokenizer, ":", "/", "?");
- if (!hasCurrentCharacter(tokenizer)) {
- tokenizer._currentToken = URLToken.host(schemeOrHost);
- tokenizer._currentState = "DONE";
- }
- else if (getCurrentCharacter(tokenizer) === ":") {
- if (peekCharacters(tokenizer, 3) === "://") {
- tokenizer._currentToken = URLToken.scheme(schemeOrHost);
- tokenizer._currentState = "HOST";
- }
- else {
- tokenizer._currentToken = URLToken.host(schemeOrHost);
- tokenizer._currentState = "PORT";
- }
- }
- else {
- tokenizer._currentToken = URLToken.host(schemeOrHost);
- if (getCurrentCharacter(tokenizer) === "/") {
- tokenizer._currentState = "PATH";
- }
- else {
- tokenizer._currentState = "QUERY";
- }
- }
- }
- function nextHost(tokenizer) {
- if (peekCharacters(tokenizer, 3) === "://") {
- nextCharacter(tokenizer, 3);
- }
- var host = readUntilCharacter(tokenizer, ":", "/", "?");
- tokenizer._currentToken = URLToken.host(host);
- if (!hasCurrentCharacter(tokenizer)) {
- tokenizer._currentState = "DONE";
- }
- else if (getCurrentCharacter(tokenizer) === ":") {
- tokenizer._currentState = "PORT";
- }
- else if (getCurrentCharacter(tokenizer) === "/") {
- tokenizer._currentState = "PATH";
- }
- else {
- tokenizer._currentState = "QUERY";
- }
- }
- function nextPort(tokenizer) {
- if (getCurrentCharacter(tokenizer) === ":") {
- nextCharacter(tokenizer);
- }
- var port = readUntilCharacter(tokenizer, "/", "?");
- tokenizer._currentToken = URLToken.port(port);
- if (!hasCurrentCharacter(tokenizer)) {
- tokenizer._currentState = "DONE";
- }
- else if (getCurrentCharacter(tokenizer) === "/") {
- tokenizer._currentState = "PATH";
- }
- else {
- tokenizer._currentState = "QUERY";
- }
- }
- function nextPath(tokenizer) {
- var path = readUntilCharacter(tokenizer, "?");
- tokenizer._currentToken = URLToken.path(path);
- if (!hasCurrentCharacter(tokenizer)) {
- tokenizer._currentState = "DONE";
- }
- else {
- tokenizer._currentState = "QUERY";
- }
- }
- function nextQuery(tokenizer) {
- if (getCurrentCharacter(tokenizer) === "?") {
- nextCharacter(tokenizer);
- }
- var query = readRemaining(tokenizer);
- tokenizer._currentToken = URLToken.query(query);
- tokenizer._currentState = "DONE";
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- function redirectPolicy(maximumRetries) {
- if (maximumRetries === void 0) { maximumRetries = 20; }
- return {
- create: function (nextPolicy, options) {
- return new RedirectPolicy(nextPolicy, options, maximumRetries);
- }
- };
- }
- var RedirectPolicy = /** @class */ (function (_super) {
- __extends(RedirectPolicy, _super);
- function RedirectPolicy(nextPolicy, options, maxRetries) {
- if (maxRetries === void 0) { maxRetries = 20; }
- var _this = _super.call(this, nextPolicy, options) || this;
- _this.maxRetries = maxRetries;
- return _this;
- }
- RedirectPolicy.prototype.sendRequest = function (request) {
- var _this = this;
- return this._nextPolicy.sendRequest(request).then(function (response) { return handleRedirect(_this, response, 0); });
- };
- return RedirectPolicy;
- }(BaseRequestPolicy));
- function handleRedirect(policy, response, currentRetries) {
- var request = response.request, status = response.status;
- var locationHeader = response.headers.get("location");
- if (locationHeader &&
- (status === 300 || status === 307 || (status === 303 && request.method === "POST")) &&
- (!policy.maxRetries || currentRetries < policy.maxRetries)) {
- var builder = URLBuilder.parse(request.url);
- builder.setPath(locationHeader);
- request.url = builder.toString();
- // POST request with Status code 303 should be converted into a
- // redirected GET request if the redirect url is present in the location header
- if (status === 303) {
- request.method = "GET";
- }
- return policy._nextPolicy.sendRequest(request)
- .then(function (res) { return handleRedirect(policy, res, currentRetries + 1); });
- }
- return Promise.resolve(response);
- }
- function rpRegistrationPolicy(retryTimeout) {
- if (retryTimeout === void 0) { retryTimeout = 30; }
- return {
- create: function (nextPolicy, options) {
- return new RPRegistrationPolicy(nextPolicy, options, retryTimeout);
- }
- };
- }
- var RPRegistrationPolicy = /** @class */ (function (_super) {
- __extends(RPRegistrationPolicy, _super);
- function RPRegistrationPolicy(nextPolicy, options, _retryTimeout) {
- if (_retryTimeout === void 0) { _retryTimeout = 30; }
- var _this = _super.call(this, nextPolicy, options) || this;
- _this._retryTimeout = _retryTimeout;
- return _this;
- }
- RPRegistrationPolicy.prototype.sendRequest = function (request) {
- var _this = this;
- return this._nextPolicy.sendRequest(request.clone())
- .then(function (response) { return registerIfNeeded(_this, request, response); });
- };
- return RPRegistrationPolicy;
- }(BaseRequestPolicy));
- function registerIfNeeded(policy, request, response) {
- if (response.status === 409) {
- var rpName = checkRPNotRegisteredError(response.bodyAsText);
- if (rpName) {
- var urlPrefix = extractSubscriptionUrl(request.url);
- return registerRP(policy, urlPrefix, rpName, request)
- // Autoregistration of ${provider} failed for some reason. We will not return this error
- // instead will return the initial response with 409 status code back to the user.
- // do nothing here as we are returning the original response at the end of this method.
- .catch(function () { return false; })
- .then(function (registrationStatus) {
- if (registrationStatus) {
- // Retry the original request. We have to change the x-ms-client-request-id
- // otherwise Azure endpoint will return the initial 409 (cached) response.
- request.headers.set("x-ms-client-request-id", generateUuid());
- return policy._nextPolicy.sendRequest(request.clone());
- }
- return response;
- });
- }
- }
- return Promise.resolve(response);
- }
- /**
- * Reuses the headers of the original request and url (if specified).
- * @param {WebResource} originalRequest The original request
- * @param {boolean} reuseUrlToo Should the url from the original request be reused as well. Default false.
- * @returns {object} A new request object with desired headers.
- */
- function getRequestEssentials(originalRequest, reuseUrlToo) {
- if (reuseUrlToo === void 0) { reuseUrlToo = false; }
- var reqOptions = originalRequest.clone();
- if (reuseUrlToo) {
- reqOptions.url = originalRequest.url;
- }
- // We have to change the x-ms-client-request-id otherwise Azure endpoint
- // will return the initial 409 (cached) response.
- reqOptions.headers.set("x-ms-client-request-id", generateUuid());
- // Set content-type to application/json
- reqOptions.headers.set("Content-Type", "application/json; charset=utf-8");
- return reqOptions;
- }
- /**
- * Validates the error code and message associated with 409 response status code. If it matches to that of
- * RP not registered then it returns the name of the RP else returns undefined.
- * @param {string} body The response body received after making the original request.
- * @returns {string} The name of the RP if condition is satisfied else undefined.
- */
- function checkRPNotRegisteredError(body) {
- var result, responseBody;
- if (body) {
- try {
- responseBody = JSON.parse(body);
- }
- catch (err) {
- // do nothing;
- }
- if (responseBody && responseBody.error && responseBody.error.message &&
- responseBody.error.code && responseBody.error.code === "MissingSubscriptionRegistration") {
- var matchRes = responseBody.error.message.match(/.*'(.*)'/i);
- if (matchRes) {
- result = matchRes.pop();
- }
- }
- }
- return result;
- }
- /**
- * Extracts the first part of the URL, just after subscription:
- * https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/
- * @param {string} url The original request url
- * @returns {string} The url prefix as explained above.
- */
- function extractSubscriptionUrl(url) {
- var result;
- var matchRes = url.match(/.*\/subscriptions\/[a-f0-9-]+\//ig);
- if (matchRes && matchRes[0]) {
- result = matchRes[0];
- }
- else {
- throw new Error("Unable to extract subscriptionId from the given url - " + url + ".");
- }
- return result;
- }
- /**
- * Registers the given provider.
- * @param {RPRegistrationPolicy} policy The RPRegistrationPolicy this function is being called against.
- * @param {string} urlPrefix https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/
- * @param {string} provider The provider name to be registered.
- * @param {WebResource} originalRequest The original request sent by the user that returned a 409 response
- * with a message that the provider is not registered.
- * @param {registrationCallback} callback The callback that handles the RP registration
- */
- function registerRP(policy, urlPrefix, provider, originalRequest) {
- var postUrl = urlPrefix + "providers/" + provider + "/register?api-version=2016-02-01";
- var getUrl = urlPrefix + "providers/" + provider + "?api-version=2016-02-01";
- var reqOptions = getRequestEssentials(originalRequest);
- reqOptions.method = "POST";
- reqOptions.url = postUrl;
- return policy._nextPolicy.sendRequest(reqOptions)
- .then(function (response) {
- if (response.status !== 200) {
- throw new Error("Autoregistration of " + provider + " failed. Please try registering manually.");
- }
- return getRegistrationStatus(policy, getUrl, originalRequest);
- });
- }
- /**
- * Polls the registration status of the provider that was registered. Polling happens at an interval of 30 seconds.
- * Polling will happen till the registrationState property of the response body is "Registered".
- * @param {RPRegistrationPolicy} policy The RPRegistrationPolicy this function is being called against.
- * @param {string} url The request url for polling
- * @param {WebResource} originalRequest The original request sent by the user that returned a 409 response
- * with a message that the provider is not registered.
- * @returns {Promise<boolean>} True if RP Registration is successful.
- */
- function getRegistrationStatus(policy, url, originalRequest) {
- var reqOptions = getRequestEssentials(originalRequest);
- reqOptions.url = url;
- reqOptions.method = "GET";
- return policy._nextPolicy.sendRequest(reqOptions).then(function (res) {
- var obj = res.parsedBody;
- if (res.parsedBody && obj.registrationState && obj.registrationState === "Registered") {
- return true;
- }
- else {
- return delay(policy._retryTimeout * 1000).then(function () { return getRegistrationStatus(policy, url, originalRequest); });
- }
- });
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- function signingPolicy(authenticationProvider) {
- return {
- create: function (nextPolicy, options) {
- return new SigningPolicy(nextPolicy, options, authenticationProvider);
- }
- };
- }
- var SigningPolicy = /** @class */ (function (_super) {
- __extends(SigningPolicy, _super);
- function SigningPolicy(nextPolicy, options, authenticationProvider) {
- var _this = _super.call(this, nextPolicy, options) || this;
- _this.authenticationProvider = authenticationProvider;
- return _this;
- }
- SigningPolicy.prototype.signRequest = function (request) {
- return this.authenticationProvider.signRequest(request);
- };
- SigningPolicy.prototype.sendRequest = function (request) {
- var _this = this;
- return this.signRequest(request).then(function (nextRequest) { return _this._nextPolicy.sendRequest(nextRequest); });
- };
- return SigningPolicy;
- }(BaseRequestPolicy));
- // Copyright (c) Microsoft Corporation. All rights reserved.
- function systemErrorRetryPolicy(retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
- return {
- create: function (nextPolicy, options) {
- return new SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);
- }
- };
- }
- /**
- * @class
- * Instantiates a new "ExponentialRetryPolicyFilter" instance.
- *
- * @constructor
- * @param {number} retryCount The client retry count.
- * @param {number} retryInterval The client retry interval, in milliseconds.
- * @param {number} minRetryInterval The minimum retry interval, in milliseconds.
- * @param {number} maxRetryInterval The maximum retry interval, in milliseconds.
- */
- var SystemErrorRetryPolicy = /** @class */ (function (_super) {
- __extends(SystemErrorRetryPolicy, _super);
- function SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
- var _this = _super.call(this, nextPolicy, options) || this;
- _this.DEFAULT_CLIENT_RETRY_INTERVAL = 1000 * 30;
- _this.DEFAULT_CLIENT_RETRY_COUNT = 3;
- _this.DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 90;
- _this.DEFAULT_CLIENT_MIN_RETRY_INTERVAL = 1000 * 3;
- _this.retryCount = typeof retryCount === "number" ? retryCount : _this.DEFAULT_CLIENT_RETRY_COUNT;
- _this.retryInterval = typeof retryInterval === "number" ? retryInterval : _this.DEFAULT_CLIENT_RETRY_INTERVAL;
- _this.minRetryInterval = typeof minRetryInterval === "number" ? minRetryInterval : _this.DEFAULT_CLIENT_MIN_RETRY_INTERVAL;
- _this.maxRetryInterval = typeof maxRetryInterval === "number" ? maxRetryInterval : _this.DEFAULT_CLIENT_MAX_RETRY_INTERVAL;
- return _this;
- }
- SystemErrorRetryPolicy.prototype.sendRequest = function (request) {
- var _this = this;
- return this._nextPolicy.sendRequest(request.clone()).then(function (response) { return retry$1(_this, request, response); });
- };
- return SystemErrorRetryPolicy;
- }(BaseRequestPolicy));
- /**
- * Determines if the operation should be retried and how long to wait until the next retry.
- *
- * @param {number} statusCode The HTTP status code.
- * @param {RetryData} retryData The retry data.
- * @return {boolean} True if the operation qualifies for a retry; false otherwise.
- */
- function shouldRetry$1(policy, retryData) {
- var currentCount;
- if (!retryData) {
- throw new Error("retryData for the SystemErrorRetryPolicyFilter cannot be null.");
- }
- else {
- currentCount = (retryData && retryData.retryCount);
- }
- return (currentCount < policy.retryCount);
- }
- /**
- * Updates the retry data for the next attempt.
- *
- * @param {RetryData} retryData The retry data.
- * @param {object} err The operation"s error, if any.
- */
- function updateRetryData$1(policy, retryData, err) {
- if (!retryData) {
- retryData = {
- retryCount: 0,
- retryInterval: 0
- };
- }
- if (err) {
- if (retryData.error) {
- err.innerError = retryData.error;
- }
- retryData.error = err;
- }
- // Adjust retry count
- retryData.retryCount++;
- // Adjust retry interval
- var incrementDelta = Math.pow(2, retryData.retryCount) - 1;
- var boundedRandDelta = policy.retryInterval * 0.8 +
- Math.floor(Math.random() * (policy.retryInterval * 1.2 - policy.retryInterval * 0.8));
- incrementDelta *= boundedRandDelta;
- retryData.retryInterval = Math.min(policy.minRetryInterval + incrementDelta, policy.maxRetryInterval);
- return retryData;
- }
- function retry$1(policy, request, operationResponse, retryData, err) {
- retryData = updateRetryData$1(policy, retryData, err);
- if (err && err.code && shouldRetry$1(policy, retryData) &&
- (err.code === "ETIMEDOUT" || err.code === "ESOCKETTIMEDOUT" || err.code === "ECONNREFUSED" ||
- err.code === "ECONNRESET" || err.code === "ENOENT")) {
- // If previous operation ended with an error and the policy allows a retry, do that
- return delay(retryData.retryInterval)
- .then(function () { return policy._nextPolicy.sendRequest(request.clone()); })
- .then(function (res) { return retry$1(policy, request, res, retryData, err); })
- .catch(function (err) { return retry$1(policy, request, operationResponse, retryData, err); });
- }
- else {
- if (err != undefined) {
- // If the operation failed in the end, return all errors instead of just the last one
- err = retryData.error;
- return Promise.reject(err);
- }
- return Promise.resolve(operationResponse);
- }
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- (function (QueryCollectionFormat) {
- QueryCollectionFormat["Csv"] = ",";
- QueryCollectionFormat["Ssv"] = " ";
- QueryCollectionFormat["Tsv"] = "\t";
- QueryCollectionFormat["Pipes"] = "|";
- QueryCollectionFormat["Multi"] = "Multi";
- })(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {}));
- // Copyright (c) Microsoft Corporation. All rights reserved.
- var proxyNotSupportedInBrowser = new Error("ProxyPolicy is not supported in browser environment");
- function getDefaultProxySettings(_proxyUrl) {
- return undefined;
- }
- function proxyPolicy(_proxySettings) {
- return {
- create: function (_nextPolicy, _options) {
- throw proxyNotSupportedInBrowser;
- }
- };
- }
- var ProxyPolicy = /** @class */ (function (_super) {
- __extends(ProxyPolicy, _super);
- function ProxyPolicy(nextPolicy, options) {
- var _this = _super.call(this, nextPolicy, options) || this;
- throw proxyNotSupportedInBrowser;
- return _this;
- }
- ProxyPolicy.prototype.sendRequest = function (_request) {
- throw proxyNotSupportedInBrowser;
- };
- return ProxyPolicy;
- }(BaseRequestPolicy));
- // Copyright (c) Microsoft Corporation. All rights reserved.
- var StatusCodes = Constants.HttpConstants.StatusCodes;
- function throttlingRetryPolicy() {
- return {
- create: function (nextPolicy, options) {
- return new ThrottlingRetryPolicy(nextPolicy, options);
- }
- };
- }
- /**
- * To learn more, please refer to
- * https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,
- * https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and
- * https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors
- */
- var ThrottlingRetryPolicy = /** @class */ (function (_super) {
- __extends(ThrottlingRetryPolicy, _super);
- function ThrottlingRetryPolicy(nextPolicy, options, _handleResponse) {
- var _this = _super.call(this, nextPolicy, options) || this;
- _this._handleResponse = _handleResponse || _this._defaultResponseHandler;
- return _this;
- }
- ThrottlingRetryPolicy.prototype.sendRequest = function (httpRequest) {
- return __awaiter(this, void 0, void 0, function () {
- var _this = this;
- return __generator(this, function (_a) {
- return [2 /*return*/, this._nextPolicy.sendRequest(httpRequest.clone()).then(function (response) {
- if (response.status !== StatusCodes.TooManyRequests) {
- return response;
- }
- else {
- return _this._handleResponse(httpRequest, response);
- }
- })];
- });
- });
- };
- ThrottlingRetryPolicy.prototype._defaultResponseHandler = function (httpRequest, httpResponse) {
- return __awaiter(this, void 0, void 0, function () {
- var retryAfterHeader, delayInMs;
- var _this = this;
- return __generator(this, function (_a) {
- retryAfterHeader = httpResponse.headers.get(Constants.HeaderConstants.RETRY_AFTER);
- if (retryAfterHeader) {
- delayInMs = ThrottlingRetryPolicy.parseRetryAfterHeader(retryAfterHeader);
- if (delayInMs) {
- return [2 /*return*/, delay(delayInMs).then(function (_) { return _this._nextPolicy.sendRequest(httpRequest); })];
- }
- }
- return [2 /*return*/, httpResponse];
- });
- });
- };
- ThrottlingRetryPolicy.parseRetryAfterHeader = function (headerValue) {
- var retryAfterInSeconds = Number(headerValue);
- if (Number.isNaN(retryAfterInSeconds)) {
- return ThrottlingRetryPolicy.parseDateRetryAfterHeader(headerValue);
- }
- else {
- return retryAfterInSeconds * 1000;
- }
- };
- ThrottlingRetryPolicy.parseDateRetryAfterHeader = function (headerValue) {
- try {
- var now = Date.now();
- var date = Date.parse(headerValue);
- var diff = date - now;
- return Number.isNaN(diff) ? undefined : diff;
- }
- catch (error) {
- return undefined;
- }
- };
- return ThrottlingRetryPolicy;
- }(BaseRequestPolicy));
- // Copyright (c) Microsoft Corporation. All rights reserved.
- /**
- * @class
- * Initializes a new instance of the ServiceClient.
- */
- var ServiceClient = /** @class */ (function () {
- /**
- * The ServiceClient constructor
- * @constructor
- * @param {ServiceClientCredentials} [credentials] The credentials object used for authentication.
- * @param {ServiceClientOptions} [options] The service client options that govern the behavior of the client.
- */
- function ServiceClient(credentials, options) {
- if (!options) {
- options = {};
- }
- if (credentials && !credentials.signRequest) {
- throw new Error("credentials argument needs to implement signRequest method");
- }
- this._withCredentials = options.withCredentials || false;
- this._httpClient = options.httpClient || new XhrHttpClient();
- this._requestPolicyOptions = new RequestPolicyOptions(options.httpPipelineLogger);
- var requestPolicyFactories;
- if (Array.isArray(options.requestPolicyFactories)) {
- requestPolicyFactories = options.requestPolicyFactories;
- }
- else {
- requestPolicyFactories = createDefaultRequestPolicyFactories(credentials, options);
- if (options.requestPolicyFactories) {
- var newRequestPolicyFactories = options.requestPolicyFactories(requestPolicyFactories);
- if (newRequestPolicyFactories) {
- requestPolicyFactories = newRequestPolicyFactories;
- }
- }
- }
- this._requestPolicyFactories = requestPolicyFactories;
- }
- /**
- * Send the provided httpRequest.
- */
- ServiceClient.prototype.sendRequest = function (options) {
- if (options === null || options === undefined || typeof options !== "object") {
- throw new Error("options cannot be null or undefined and it must be of type object.");
- }
- var httpRequest;
- try {
- if (options instanceof WebResource) {
- options.validateRequestProperties();
- httpRequest = options;
- }
- else {
- httpRequest = new WebResource();
- httpRequest = httpRequest.prepare(options);
- }
- }
- catch (error) {
- return Promise.reject(error);
- }
- var httpPipeline = this._httpClient;
- if (this._requestPolicyFactories && this._requestPolicyFactories.length > 0) {
- for (var i = this._requestPolicyFactories.length - 1; i >= 0; --i) {
- httpPipeline = this._requestPolicyFactories[i].create(httpPipeline, this._requestPolicyOptions);
- }
- }
- return httpPipeline.sendRequest(httpRequest);
- };
- /**
- * Send an HTTP request that is populated using the provided OperationSpec.
- * @param {OperationArguments} operationArguments The arguments that the HTTP request's templated values will be populated from.
- * @param {OperationSpec} operationSpec The OperationSpec to use to populate the httpRequest.
- * @param {ServiceCallback} callback The callback to call when the response is received.
- */
- ServiceClient.prototype.sendOperationRequest = function (operationArguments, operationSpec, callback) {
- if (typeof operationArguments.options === "function") {
- callback = operationArguments.options;
- operationArguments.options = undefined;
- }
- var httpRequest = new WebResource();
- var result;
- try {
- var baseUri = operationSpec.baseUrl || this.baseUri;
- if (!baseUri) {
- throw new Error("If operationSpec.baseUrl is not specified, then the ServiceClient must have a baseUri string property that contains the base URL to use.");
- }
- httpRequest.method = operationSpec.httpMethod;
- httpRequest.operationSpec = operationSpec;
- var requestUrl = URLBuilder.parse(baseUri);
- if (operationSpec.path) {
- requestUrl.appendPath(operationSpec.path);
- }
- if (operationSpec.urlParameters && operationSpec.urlParameters.length > 0) {
- for (var _i = 0, _a = operationSpec.urlParameters; _i < _a.length; _i++) {
- var urlParameter = _a[_i];
- var urlParameterValue = getOperationArgumentValueFromParameter(this, operationArguments, urlParameter, operationSpec.serializer);
- urlParameterValue = operationSpec.serializer.serialize(urlParameter.mapper, urlParameterValue, getPathStringFromParameter(urlParameter));
- if (!urlParameter.skipEncoding) {
- urlParameterValue = encodeURIComponent(urlParameterValue);
- }
- requestUrl.replaceAll("{" + (urlParameter.mapper.serializedName || getPathStringFromParameter(urlParameter)) + "}", urlParameterValue);
- }
- }
- if (operationSpec.queryParameters && operationSpec.queryParameters.length > 0) {
- for (var _b = 0, _c = operationSpec.queryParameters; _b < _c.length; _b++) {
- var queryParameter = _c[_b];
- var queryParameterValue = getOperationArgumentValueFromParameter(this, operationArguments, queryParameter, operationSpec.serializer);
- if (queryParameterValue != undefined) {
- queryParameterValue = operationSpec.serializer.serialize(queryParameter.mapper, queryParameterValue, getPathStringFromParameter(queryParameter));
- if (queryParameter.collectionFormat != undefined) {
- if (queryParameter.collectionFormat === exports.QueryCollectionFormat.Multi) {
- if (queryParameterValue.length === 0) {
- queryParameterValue = "";
- }
- else {
- for (var index in queryParameterValue) {
- var item = queryParameterValue[index];
- queryParameterValue[index] = item == undefined ? "" : item.toString();
- }
- }
- }
- else {
- queryParameterValue = queryParameterValue.join(queryParameter.collectionFormat);
- }
- }
- if (!queryParameter.skipEncoding) {
- if (Array.isArray(queryParameterValue)) {
- for (var index in queryParameterValue) {
- queryParameterValue[index] = encodeURIComponent(queryParameterValue[index]);
- }
- }
- else {
- queryParameterValue = encodeURIComponent(queryParameterValue);
- }
- }
- requestUrl.setQueryParameter(queryParameter.mapper.serializedName || getPathStringFromParameter(queryParameter), queryParameterValue);
- }
- }
- }
- httpRequest.url = requestUrl.toString();
- var contentType = operationSpec.contentType || this.requestContentType;
- if (contentType) {
- httpRequest.headers.set("Content-Type", contentType);
- }
- if (operationSpec.headerParameters) {
- for (var _d = 0, _e = operationSpec.headerParameters; _d < _e.length; _d++) {
- var headerParameter = _e[_d];
- var headerValue = getOperationArgumentValueFromParameter(this, operationArguments, headerParameter, operationSpec.serializer);
- if (headerValue != undefined) {
- headerValue = operationSpec.serializer.serialize(headerParameter.mapper, headerValue, getPathStringFromParameter(headerParameter));
- var headerCollectionPrefix = headerParameter.mapper.headerCollectionPrefix;
- if (headerCollectionPrefix) {
- for (var _f = 0, _g = Object.keys(headerValue); _f < _g.length; _f++) {
- var key = _g[_f];
- httpRequest.headers.set(headerCollectionPrefix + key, headerValue[key]);
- }
- }
- else {
- httpRequest.headers.set(headerParameter.mapper.serializedName || getPathStringFromParameter(headerParameter), headerValue);
- }
- }
- }
- }
- var options = operationArguments.options;
- if (options) {
- if (options.customHeaders) {
- for (var customHeaderName in options.customHeaders) {
- httpRequest.headers.set(customHeaderName, options.customHeaders[customHeaderName]);
- }
- }
- if (options.abortSignal) {
- httpRequest.abortSignal = options.abortSignal;
- }
- if (options.timeout) {
- httpRequest.timeout = options.timeout;
- }
- if (options.onUploadProgress) {
- httpRequest.onUploadProgress = options.onUploadProgress;
- }
- if (options.onDownloadProgress) {
- httpRequest.onDownloadProgress = options.onDownloadProgress;
- }
- }
- httpRequest.withCredentials = this._withCredentials;
- serializeRequestBody(this, httpRequest, operationArguments, operationSpec);
- if (httpRequest.streamResponseBody == undefined) {
- httpRequest.streamResponseBody = isStreamOperation(operationSpec);
- }
- result = this.sendRequest(httpRequest)
- .then(function (res) { return flattenResponse(res, operationSpec.responses[res.status]); });
- }
- catch (error) {
- result = Promise.reject(error);
- }
- var cb = callback;
- if (cb) {
- result
- // tslint:disable-next-line:no-null-keyword
- .then(function (res) { return cb(null, res._response.parsedBody, res._response.request, res._response); })
- .catch(function (err) { return cb(err); });
- }
- return result;
- };
- return ServiceClient;
- }());
- function serializeRequestBody(serviceClient, httpRequest, operationArguments, operationSpec) {
- if (operationSpec.requestBody && operationSpec.requestBody.mapper) {
- httpRequest.body = getOperationArgumentValueFromParameter(serviceClient, operationArguments, operationSpec.requestBody, operationSpec.serializer);
- var bodyMapper = operationSpec.requestBody.mapper;
- var required = bodyMapper.required, xmlName = bodyMapper.xmlName, xmlElementName = bodyMapper.xmlElementName, serializedName = bodyMapper.serializedName;
- var typeName = bodyMapper.type.name;
- try {
- if (httpRequest.body != undefined || required) {
- var requestBodyParameterPathString = getPathStringFromParameter(operationSpec.requestBody);
- httpRequest.body = operationSpec.serializer.serialize(bodyMapper, httpRequest.body, requestBodyParameterPathString);
- var isStream = typeName === MapperType.Stream;
- if (operationSpec.isXML) {
- if (typeName === MapperType.Sequence) {
- httpRequest.body = stringifyXML(prepareXMLRootList(httpRequest.body, xmlElementName || xmlName || serializedName), { rootName: xmlName || serializedName });
- }
- else if (!isStream) {
- httpRequest.body = stringifyXML(httpRequest.body, { rootName: xmlName || serializedName });
- }
- }
- else if (!isStream) {
- httpRequest.body = JSON.stringify(httpRequest.body);
- }
- }
- }
- catch (error) {
- throw new Error("Error \"" + error.message + "\" occurred in serializing the payload - " + JSON.stringify(serializedName, undefined, " ") + ".");
- }
- }
- else if (operationSpec.formDataParameters && operationSpec.formDataParameters.length > 0) {
- httpRequest.formData = {};
- for (var _i = 0, _a = operationSpec.formDataParameters; _i < _a.length; _i++) {
- var formDataParameter = _a[_i];
- var formDataParameterValue = getOperationArgumentValueFromParameter(serviceClient, operationArguments, formDataParameter, operationSpec.serializer);
- if (formDataParameterValue != undefined) {
- var formDataParameterPropertyName = formDataParameter.mapper.serializedName || getPathStringFromParameter(formDataParameter);
- httpRequest.formData[formDataParameterPropertyName] = operationSpec.serializer.serialize(formDataParameter.mapper, formDataParameterValue, getPathStringFromParameter(formDataParameter));
- }
- }
- }
- }
- function isRequestPolicyFactory(instance) {
- return typeof instance.create === "function";
- }
- function getValueOrFunctionResult(value, defaultValueCreator) {
- var result;
- if (typeof value === "string") {
- result = value;
- }
- else {
- result = defaultValueCreator();
- if (typeof value === "function") {
- result = value(result);
- }
- }
- return result;
- }
- function createDefaultRequestPolicyFactories(credentials, options) {
- var factories = [];
- if (options.generateClientRequestIdHeader) {
- factories.push(generateClientRequestIdPolicy(options.clientRequestIdHeaderName));
- }
- if (credentials) {
- if (isRequestPolicyFactory(credentials)) {
- factories.push(credentials);
- }
- else {
- factories.push(signingPolicy(credentials));
- }
- }
- var userAgentHeaderName = getValueOrFunctionResult(options.userAgentHeaderName, getDefaultUserAgentHeaderName);
- var userAgentHeaderValue = getValueOrFunctionResult(options.userAgent, getDefaultUserAgentValue);
- if (userAgentHeaderName && userAgentHeaderValue) {
- factories.push(userAgentPolicy({ key: userAgentHeaderName, value: userAgentHeaderValue }));
- }
- factories.push(redirectPolicy());
- factories.push(rpRegistrationPolicy(options.rpRegistrationRetryTimeout));
- if (!options.noRetryPolicy) {
- factories.push(exponentialRetryPolicy());
- factories.push(systemErrorRetryPolicy());
- factories.push(throttlingRetryPolicy());
- }
- factories.push(deserializationPolicy(options.deserializationContentTypes));
- var proxySettings = options.proxySettings || getDefaultProxySettings();
- if (proxySettings) {
- factories.push(proxyPolicy(proxySettings));
- }
- return factories;
- }
- function getOperationArgumentValueFromParameter(serviceClient, operationArguments, parameter, serializer) {
- return getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameter.parameterPath, parameter.mapper, serializer);
- }
- function getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameterPath, parameterMapper, serializer) {
- var value;
- if (typeof parameterPath === "string") {
- parameterPath = [parameterPath];
- }
- if (Array.isArray(parameterPath)) {
- if (parameterPath.length > 0) {
- if (parameterMapper.isConstant) {
- value = parameterMapper.defaultValue;
- }
- else {
- var propertySearchResult = getPropertyFromParameterPath(operationArguments, parameterPath);
- if (!propertySearchResult.propertyFound) {
- propertySearchResult = getPropertyFromParameterPath(serviceClient, parameterPath);
- }
- var useDefaultValue = false;
- if (!propertySearchResult.propertyFound) {
- useDefaultValue = parameterMapper.required || (parameterPath[0] === "options" && parameterPath.length === 2);
- }
- value = useDefaultValue ? parameterMapper.defaultValue : propertySearchResult.propertyValue;
- }
- // Serialize just for validation purposes.
- var parameterPathString = getPathStringFromParameterPath(parameterPath, parameterMapper);
- serializer.serialize(parameterMapper, value, parameterPathString);
- }
- }
- else {
- if (parameterMapper.required) {
- value = {};
- }
- for (var propertyName in parameterPath) {
- var propertyMapper = parameterMapper.type.modelProperties[propertyName];
- var propertyPath = parameterPath[propertyName];
- var propertyValue = getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, propertyPath, propertyMapper, serializer);
- // Serialize just for validation purposes.
- var propertyPathString = getPathStringFromParameterPath(propertyPath, propertyMapper);
- serializer.serialize(propertyMapper, propertyValue, propertyPathString);
- if (propertyValue !== undefined) {
- if (!value) {
- value = {};
- }
- value[propertyName] = propertyValue;
- }
- }
- }
- return value;
- }
- function getPropertyFromParameterPath(parent, parameterPath) {
- var result = { propertyFound: false };
- var i = 0;
- for (; i < parameterPath.length; ++i) {
- var parameterPathPart = parameterPath[i];
- // Make sure to check inherited properties too, so don't use hasOwnProperty().
- if (parent != undefined && parameterPathPart in parent) {
- parent = parent[parameterPathPart];
- }
- else {
- break;
- }
- }
- if (i === parameterPath.length) {
- result.propertyValue = parent;
- result.propertyFound = true;
- }
- return result;
- }
- function flattenResponse(_response, responseSpec) {
- var parsedHeaders = _response.parsedHeaders;
- var bodyMapper = responseSpec && responseSpec.bodyMapper;
- var addOperationResponse = function (obj) {
- return Object.defineProperty(obj, "_response", {
- value: _response
- });
- };
- if (bodyMapper) {
- var typeName = bodyMapper.type.name;
- if (typeName === "Stream") {
- return addOperationResponse(__assign({}, parsedHeaders, { blobBody: _response.blobBody, readableStreamBody: _response.readableStreamBody }));
- }
- var modelProperties_1 = typeName === "Composite" && bodyMapper.type.modelProperties || {};
- var isPageableResponse = Object.keys(modelProperties_1).some(function (k) { return modelProperties_1[k].serializedName === ""; });
- if (typeName === "Sequence" || isPageableResponse) {
- var arrayResponse = (_response.parsedBody || []).slice();
- for (var _i = 0, _a = Object.keys(modelProperties_1); _i < _a.length; _i++) {
- var key = _a[_i];
- if (modelProperties_1[key].serializedName) {
- arrayResponse[key] = _response.parsedBody[key];
- }
- }
- if (parsedHeaders) {
- for (var _b = 0, _c = Object.keys(parsedHeaders); _b < _c.length; _b++) {
- var key = _c[_b];
- arrayResponse[key] = parsedHeaders[key];
- }
- }
- addOperationResponse(arrayResponse);
- return arrayResponse;
- }
- if (typeName === "Composite" || typeName === "Dictionary") {
- return addOperationResponse(__assign({}, parsedHeaders, _response.parsedBody));
- }
- }
- if (bodyMapper || _response.request.method === "HEAD") {
- // primitive body types and HEAD booleans
- return addOperationResponse(__assign({}, parsedHeaders, { body: _response.parsedBody }));
- }
- return addOperationResponse(__assign({}, parsedHeaders, _response.parsedBody));
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- function logPolicy(logger) {
- if (logger === void 0) { logger = console.log; }
- return {
- create: function (nextPolicy, options) {
- return new LogPolicy(nextPolicy, options, logger);
- }
- };
- }
- var LogPolicy = /** @class */ (function (_super) {
- __extends(LogPolicy, _super);
- function LogPolicy(nextPolicy, options, logger) {
- if (logger === void 0) { logger = console.log; }
- var _this = _super.call(this, nextPolicy, options) || this;
- _this.logger = logger;
- return _this;
- }
- LogPolicy.prototype.sendRequest = function (request) {
- var _this = this;
- return this._nextPolicy.sendRequest(request).then(function (response) { return logResponse(_this, response); });
- };
- return LogPolicy;
- }(BaseRequestPolicy));
- function logResponse(policy, response) {
- policy.logger(">> Request: " + JSON.stringify(response.request, undefined, 2));
- policy.logger(">> Response status code: " + response.status);
- var responseBody = response.bodyAsText;
- policy.logger(">> Body: " + responseBody);
- return Promise.resolve(response);
- }
- // Copyright (c) Microsoft Corporation. All rights reserved.
- var HeaderConstants = Constants.HeaderConstants;
- var DEFAULT_AUTHORIZATION_SCHEME = "Bearer";
- /**
- * A credentials object that uses a token string and a authorzation scheme to authenticate.
- */
- var TokenCredentials = /** @class */ (function () {
- /**
- * Creates a new TokenCredentials object.
- *
- * @constructor
- * @param {string} token The token.
- * @param {string} [authorizationScheme] The authorization scheme.
- */
- function TokenCredentials(token, authorizationScheme) {
- if (authorizationScheme === void 0) { authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME; }
- this.authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME;
- if (!token) {
- throw new Error("token cannot be null or undefined.");
- }
- this.token = token;
- this.authorizationScheme = authorizationScheme;
- }
- /**
- * Signs a request with the Authentication header.
- *
- * @param {WebResource} webResource The WebResource to be signed.
- * @return {Promise<WebResource>} The signed request object.
- */
- TokenCredentials.prototype.signRequest = function (webResource) {
- if (!webResource.headers)
- webResource.headers = new HttpHeaders();
- webResource.headers.set(HeaderConstants.AUTHORIZATION, this.authorizationScheme + " " + this.token);
- return Promise.resolve(webResource);
- };
- return TokenCredentials;
- }());
- // Copyright (c) Microsoft Corporation. All rights reserved.
- var HeaderConstants$1 = Constants.HeaderConstants;
- var DEFAULT_AUTHORIZATION_SCHEME$1 = "Basic";
- var BasicAuthenticationCredentials = /** @class */ (function () {
- /**
- * Creates a new BasicAuthenticationCredentials object.
- *
- * @constructor
- * @param {string} userName User name.
- * @param {string} password Password.
- * @param {string} [authorizationScheme] The authorization scheme.
- */
- function BasicAuthenticationCredentials(userName, password, authorizationScheme) {
- if (authorizationScheme === void 0) { authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME$1; }
- this.authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME$1;
- if (userName === null || userName === undefined || typeof userName.valueOf() !== "string") {
- throw new Error("userName cannot be null or undefined and must be of type string.");
- }
- if (password === null || password === undefined || typeof password.valueOf() !== "string") {
- throw new Error("password cannot be null or undefined and must be of type string.");
- }
- this.userName = userName;
- this.password = password;
- this.authorizationScheme = authorizationScheme;
- }
- /**
- * Signs a request with the Authentication header.
- *
- * @param {WebResource} webResource The WebResource to be signed.
- * @returns {Promise<WebResource>} The signed request object.
- */
- BasicAuthenticationCredentials.prototype.signRequest = function (webResource) {
- var credentials = this.userName + ":" + this.password;
- var encodedCredentials = this.authorizationScheme + " " + encodeString(credentials);
- if (!webResource.headers)
- webResource.headers = new HttpHeaders();
- webResource.headers.set(HeaderConstants$1.AUTHORIZATION, encodedCredentials);
- return Promise.resolve(webResource);
- };
- return BasicAuthenticationCredentials;
- }());
- // Copyright (c) Microsoft Corporation. All rights reserved.
- /**
- * Authenticates to a service using an API key.
- */
- var ApiKeyCredentials = /** @class */ (function () {
- /**
- * @constructor
- * @param {object} options Specifies the options to be provided for auth. Either header or query needs to be provided.
- */
- function ApiKeyCredentials(options) {
- if (!options || (options && !options.inHeader && !options.inQuery)) {
- throw new Error("options cannot be null or undefined. Either \"inHeader\" or \"inQuery\" property of the options object needs to be provided.");
- }
- this.inHeader = options.inHeader;
- this.inQuery = options.inQuery;
- }
- /**
- * Signs a request with the values provided in the inHeader and inQuery parameter.
- *
- * @param {WebResource} webResource The WebResource to be signed.
- * @returns {Promise<WebResource>} The signed request object.
- */
- ApiKeyCredentials.prototype.signRequest = function (webResource) {
- if (!webResource) {
- return Promise.reject(new Error("webResource cannot be null or undefined and must be of type \"object\"."));
- }
- if (this.inHeader) {
- if (!webResource.headers) {
- webResource.headers = new HttpHeaders();
- }
- for (var headerName in this.inHeader) {
- webResource.headers.set(headerName, this.inHeader[headerName]);
- }
- }
- if (this.inQuery) {
- if (!webResource.url) {
- return Promise.reject(new Error("url cannot be null in the request object."));
- }
- if (webResource.url.indexOf("?") < 0) {
- webResource.url += "?";
- }
- for (var key in this.inQuery) {
- if (!webResource.url.endsWith("?")) {
- webResource.url += "&";
- }
- webResource.url += key + "=" + this.inQuery[key];
- }
- }
- return Promise.resolve(webResource);
- };
- return ApiKeyCredentials;
- }());
- // Copyright (c) Microsoft Corporation. All rights reserved.
- var TopicCredentials = /** @class */ (function (_super) {
- __extends(TopicCredentials, _super);
- /**
- * Creates a new EventGrid TopicCredentials object.
- *
- * @constructor
- * @param {string} topicKey The EventGrid topic key
- */
- function TopicCredentials(topicKey) {
- var _this = this;
- if (!topicKey || (topicKey && typeof topicKey !== "string")) {
- throw new Error("topicKey cannot be null or undefined and must be of type string.");
- }
- var options = {
- inHeader: {
- "aeg-sas-key": topicKey
- }
- };
- _this = _super.call(this, options) || this;
- return _this;
- }
- return TopicCredentials;
- }(ApiKeyCredentials));
- // Copyright (c) Microsoft Corporation. All rights reserved.
- var DomainCredentials = /** @class */ (function (_super) {
- __extends(DomainCredentials, _super);
- /**
- * Creates a new EventGrid DomainCredentials object.
- *
- * @constructor
- * @param {string} domainKey The EventGrid domain key
- */
- function DomainCredentials(domainKey) {
- var _this = this;
- if (!domainKey || (domainKey && typeof domainKey !== "string")) {
- throw new Error("domainKey cannot be null or undefined and must be of type string.");
- }
- var options = {
- inHeader: {
- "aeg-sas-key": domainKey
- }
- };
- _this = _super.call(this, options) || this;
- return _this;
- }
- return DomainCredentials;
- }(ApiKeyCredentials));
- // Copyright (c) Microsoft Corporation. All rights reserved.
- exports.WebResource = WebResource;
- exports.DefaultHttpClient = XhrHttpClient;
- exports.HttpHeaders = HttpHeaders;
- exports.RestError = RestError;
- exports.ServiceClient = ServiceClient;
- exports.flattenResponse = flattenResponse;
- exports.Constants = Constants;
- exports.logPolicy = logPolicy;
- exports.BaseRequestPolicy = BaseRequestPolicy;
- exports.RequestPolicyOptions = RequestPolicyOptions;
- exports.generateClientRequestIdPolicy = generateClientRequestIdPolicy;
- exports.exponentialRetryPolicy = exponentialRetryPolicy;
- exports.systemErrorRetryPolicy = systemErrorRetryPolicy;
- exports.throttlingRetryPolicy = throttlingRetryPolicy;
- exports.getDefaultProxySettings = getDefaultProxySettings;
- exports.proxyPolicy = proxyPolicy;
- exports.redirectPolicy = redirectPolicy;
- exports.signingPolicy = signingPolicy;
- exports.userAgentPolicy = userAgentPolicy;
- exports.getDefaultUserAgentValue = getDefaultUserAgentValue;
- exports.deserializationPolicy = deserializationPolicy;
- exports.deserializeResponseBody = deserializeResponseBody;
- exports.MapperType = MapperType;
- exports.Serializer = Serializer;
- exports.serializeObject = serializeObject;
- exports.stripRequest = stripRequest;
- exports.stripResponse = stripResponse;
- exports.delay = delay;
- exports.executePromisesSequentially = executePromisesSequentially;
- exports.generateUuid = generateUuid;
- exports.encodeUri = encodeUri;
- exports.promiseToCallback = promiseToCallback;
- exports.promiseToServiceCallback = promiseToServiceCallback;
- exports.isValidUuid = isValidUuid;
- exports.applyMixins = applyMixins;
- exports.isNode = isNode;
- exports.isDuration = isDuration;
- exports.URLBuilder = URLBuilder;
- exports.URLQuery = URLQuery;
- exports.TokenCredentials = TokenCredentials;
- exports.BasicAuthenticationCredentials = BasicAuthenticationCredentials;
- exports.ApiKeyCredentials = ApiKeyCredentials;
- exports.TopicCredentials = TopicCredentials;
- exports.DomainCredentials = DomainCredentials;
- Object.defineProperty(exports, '__esModule', { value: true });
- })));
- //# sourceMappingURL=msRest.browser.js.map
|