2022-07-12 09:00:22 +02:00
/ * * @ l i c e n s e m s - r e s t - j s
* 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 .
* /
'use strict' ;
Object . defineProperty ( exports , '__esModule' , { value : true } ) ;
function _interopDefault ( ex ) { return ( ex && ( typeof ex === 'object' ) && 'default' in ex ) ? ex [ 'default' ] : ex ; }
var uuid = require ( 'uuid' ) ;
var tslib = require ( 'tslib' ) ;
var tough = require ( 'tough-cookie' ) ;
var http = require ( 'http' ) ;
var https = require ( 'https' ) ;
var node _fetch = _interopDefault ( require ( 'node-fetch' ) ) ;
var FormData = _interopDefault ( require ( 'form-data' ) ) ;
var stream = require ( 'stream' ) ;
var tunnel = require ( 'tunnel' ) ;
var xml2js = require ( 'xml2js' ) ;
var os = require ( 'os' ) ;
// 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 ( ) ;
}
function isHttpHeadersLike ( object ) {
if ( ! object || typeof object !== "object" ) {
return false ;
}
if ( typeof object . rawHeaders === "function" &&
typeof object . clone === "function" &&
typeof object . get === "function" &&
typeof object . set === "function" &&
typeof object . contains === "function" &&
typeof object . remove === "function" &&
typeof object . headersArray === "function" &&
typeof object . headerValues === "function" &&
typeof object . headerNames === "function" &&
typeof object . toJson === "function" ) {
return true ;
}
return false ;
}
/ * *
* 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 Buffer . from ( value ) . toString ( "base64" ) ;
}
/ * *
* Encodes a byte array in base64 format .
* @ param value the Uint8Aray to encode
* /
function encodeByteArray ( value ) {
// Buffer.from accepts <ArrayBuffer> | <SharedArrayBuffer>-- the TypeScript definition is off here
// https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length
var bufferValue = value instanceof Buffer ? value : Buffer . from ( value . buffer ) ;
return bufferValue . toString ( "base64" ) ;
}
/ * *
* Decodes a base64 string into a byte array .
* @ param value the base64 string to decode
* /
function decodeString ( value ) {
return Buffer . from ( value , "base64" ) ;
}
// 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 }
* /
2022-10-29 10:03:51 +02:00
msRestVersion : "2.6.2" ,
2022-07-12 09:00:22 +02:00
/ * *
* 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" ,
/ * *
* Specifies NO Proxy .
* /
NO _PROXY : "NO_PROXY" ,
/ * *
* Specifies ALL Proxy .
* /
ALL _PROXY : "ALL_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 uuid . v4 ( ) ;
}
/ * *
* 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 || "" ) ;
}
/ * *
* Determines whether the given enity is a basic / primitive type
* ( string , number , boolean , null , undefined ) .
* @ param value Any entity
* @ return boolean - true is it is primitive type , false otherwise .
* /
function isPrimitiveType ( value ) {
return ( typeof value !== "object" && typeof value !== "function" ) || value === null ;
}
// 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 ) {
var pattern = typeof Pattern === "string" ? new RegExp ( Pattern ) : Pattern ;
if ( typeof value !== "string" || 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$/gi ) !== null ) {
payload = [ ] ;
}
if ( 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$/gi ) !== null ) {
payload = object ;
}
else if ( mapperType . match ( /^(Number|String|Boolean|Object|Stream|Uuid)$/gi ) !== null ) {
payload = serializeBasicTypes ( mapperType , objectName , object ) ;
}
else if ( mapperType . match ( /^Enum$/gi ) !== null ) {
var enumMapper = mapper ;
payload = serializeEnumType ( objectName , enumMapper . type . allowedValues , object ) ;
}
else if ( mapperType . match ( /^(Date|DateTime|TimeSpan|DateTimeRfc1123|UnixTime)$/gi ) !== null ) {
payload = serializeDateTypes ( mapperType , object , objectName ) ;
}
else if ( mapperType . match ( /^ByteArray$/gi ) !== null ) {
payload = serializeByteArrayType ( objectName , object ) ;
}
else if ( mapperType . match ( /^Base64Url$/gi ) !== null ) {
payload = serializeBase64UrlType ( objectName , object ) ;
}
else if ( mapperType . match ( /^Sequence$/gi ) !== null ) {
payload = serializeSequenceType ( this , mapper , object , objectName ) ;
}
else if ( mapperType . match ( /^Dictionary$/gi ) !== null ) {
payload = serializeDictionaryType ( this , mapper , object , objectName ) ;
}
else if ( mapperType . match ( /^Composite$/gi ) !== 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 = [ ] ;
}
// specifically check for undefined as default value can be a falsey value `0, "", false, null`
if ( mapper . defaultValue !== undefined ) {
responseBody = mapper . defaultValue ;
}
return responseBody ;
}
var payload ;
var mapperType = mapper . type . name ;
if ( ! objectName ) {
objectName = mapper . serializedName ;
}
if ( mapperType . match ( /^Composite$/gi ) !== 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$/gi ) !== null ) {
payload = parseFloat ( responseBody ) ;
if ( isNaN ( payload ) ) {
payload = responseBody ;
}
}
else if ( mapperType . match ( /^Boolean$/gi ) !== 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)$/gi ) !== null ) {
payload = responseBody ;
}
else if ( mapperType . match ( /^(Date|DateTime|DateTimeRfc1123)$/gi ) !== null ) {
payload = new Date ( responseBody ) ;
}
else if ( mapperType . match ( /^UnixTime$/gi ) !== null ) {
payload = unixTimeToDate ( responseBody ) ;
}
else if ( mapperType . match ( /^ByteArray$/gi ) !== null ) {
payload = decodeString ( responseBody ) ;
}
else if ( mapperType . match ( /^Base64Url$/gi ) !== null ) {
payload = base64UrlToByteArray ( responseBody ) ;
}
else if ( mapperType . match ( /^Sequence$/gi ) !== null ) {
payload = deserializeSequenceType ( this , mapper , responseBody , objectName ) ;
}
else if ( mapperType . match ( /^Dictionary$/gi ) !== 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$/gi ) !== null ) {
if ( typeof value !== "number" ) {
throw new Error ( objectName + " with value " + value + " must be of type number." ) ;
}
}
else if ( typeName . match ( /^String$/gi ) !== null ) {
if ( typeof value . valueOf ( ) !== "string" ) {
throw new Error ( objectName + " with value \"" + value + "\" must be of type string." ) ;
}
}
else if ( typeName . match ( /^Uuid$/gi ) !== 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$/gi ) !== null ) {
if ( typeof value !== "boolean" ) {
throw new Error ( objectName + " with value " + value + " must be of type boolean." ) ;
}
}
else if ( typeName . match ( /^Stream$/gi ) !== 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$/gi ) !== 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$/gi ) !== 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$/gi ) !== 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$/gi ) !== 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$/gi ) !== 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 ;
// checking that the model property name (key)(ex: "fishtype") and the
// clientName of the polymorphicDiscriminator {metadata} (ex: "fishtype")
// instead of the serializedName of the polymorphicDiscriminator (ex: "fish.type")
// is a better approach. The generator is not consistent with escaping '\.' in the
// serializedName of the property (ex: "fish\.type") that is marked as polymorphic discriminator
// and the serializedName of the metadata polymorphicDiscriminator (ex: "fish.type"). However,
// the clientName transformation of the polymorphicDiscriminator (ex: "fishtype") and
// the transformation of model property name (ex: "fishtype") is done consistently.
// Hence, it is a safer bet to rely on the clientName of the polymorphicDiscriminator.
if ( polymorphicDiscriminator &&
key === polymorphicDiscriminator . clientName &&
propertyInstance == undefined ) {
propertyInstance = mapper . serializedName ;
}
var serializedValue = void 0 ;
// paging
if ( Array . isArray ( responseBody [ key ] ) && modelProps [ key ] . serializedName === "" ) {
propertyInstance = responseBody [ key ] ;
var arrayInstance = serializer . deserialize ( propertyMapper , propertyInstance , propertyObjectName ) ;
// Copy over any properties that have already been added into the instance, where they do
// not exist on the newly de-serialized array
for ( var _e = 0 , _f = Object . entries ( instance ) ; _e < _f . length ; _e ++ ) {
var _g = _f [ _e ] , key _1 = _g [ 0 ] , value = _g [ 1 ] ;
if ( ! arrayInstance . hasOwnProperty ( key _1 ) ) {
arrayInstance [ key _1 ] = value ;
}
}
instance = arrayInstance ;
}
else if ( propertyInstance !== undefined || propertyMapper . defaultValue !== 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 _h = 0 , _j = Object . keys ( responseBody ) ; _h < _j . length ; _h ++ ) {
var key = _j [ _h ] ;
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.
function isWebResourceLike ( object ) {
if ( typeof object !== "object" ) {
return false ;
}
if ( typeof object . url === "string" &&
typeof object . method === "string" &&
typeof object . headers === "object" &&
isHttpHeadersLike ( object . headers ) &&
typeof object . validateRequestProperties === "function" &&
typeof object . prepare === "function" &&
typeof object . clone === "function" ) {
return true ;
}
return false ;
}
/ * *
* 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 , keepAlive , agentSettings , redirectLimit ) {
this . streamResponseBody = streamResponseBody ;
this . url = url || "" ;
this . method = method || "GET" ;
this . headers = isHttpHeadersLike ( headers ) ? 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 ;
this . keepAlive = keepAlive ;
this . agentSettings = agentSettings ;
this . redirectLimit = redirectLimit ;
}
/ * *
* 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*})/gi ) ;
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 ;
this . redirectLimit = options . redirectLimit ;
this . streamResponseBody = options . streamResponseBody ;
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 , this . proxySettings , this . keepAlive , this . agentSettings , this . redirectLimit ) ;
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 ;
} ( ) ) ;
/ * *
* @ author Toru Nagashima < https : //github.com/mysticatea>
* @ copyright 2015 Toru Nagashima . All rights reserved .
* See LICENSE file in root directory for full license .
* /
/ * *
* @ typedef { object } PrivateData
* @ property { EventTarget } eventTarget The event target .
* @ property { { type : string } } event The original event object .
* @ property { number } eventPhase The current event phase .
* @ property { EventTarget | null } currentTarget The current event target .
* @ property { boolean } canceled The flag to prevent default .
* @ property { boolean } stopped The flag to stop propagation .
* @ property { boolean } immediateStopped The flag to stop propagation immediately .
* @ property { Function | null } passiveListener The listener if the current listener is passive . Otherwise this is null .
* @ property { number } timeStamp The unix time .
* @ private
* /
/ * *
* Private data for event wrappers .
* @ type { WeakMap < Event , PrivateData > }
* @ private
* /
const privateData = new WeakMap ( ) ;
/ * *
* Cache for wrapper classes .
* @ type { WeakMap < Object , Function > }
* @ private
* /
const wrappers = new WeakMap ( ) ;
/ * *
* Get private data .
* @ param { Event } event The event object to get private data .
* @ returns { PrivateData } The private data of the event .
* @ private
* /
function pd ( event ) {
const retv = privateData . get ( event ) ;
console . assert (
retv != null ,
"'this' is expected an Event object, but got" ,
event
) ;
return retv
}
/ * *
* https : //dom.spec.whatwg.org/#set-the-canceled-flag
* @ param data { PrivateData } private data .
* /
function setCancelFlag ( data ) {
if ( data . passiveListener != null ) {
if (
typeof console !== "undefined" &&
typeof console . error === "function"
) {
console . error (
"Unable to preventDefault inside passive event listener invocation." ,
data . passiveListener
) ;
}
return
}
if ( ! data . event . cancelable ) {
return
}
data . canceled = true ;
if ( typeof data . event . preventDefault === "function" ) {
data . event . preventDefault ( ) ;
}
}
/ * *
* @ see https : //dom.spec.whatwg.org/#interface-event
* @ private
* /
/ * *
* The event wrapper .
* @ constructor
* @ param { EventTarget } eventTarget The event target of this dispatching .
* @ param { Event | { type : string } } event The original event to wrap .
* /
function Event ( eventTarget , event ) {
privateData . set ( this , {
eventTarget ,
event ,
eventPhase : 2 ,
currentTarget : eventTarget ,
canceled : false ,
stopped : false ,
immediateStopped : false ,
passiveListener : null ,
timeStamp : event . timeStamp || Date . now ( ) ,
} ) ;
// https://heycam.github.io/webidl/#Unforgeable
Object . defineProperty ( this , "isTrusted" , { value : false , enumerable : true } ) ;
// Define accessors
const keys = Object . keys ( event ) ;
for ( let i = 0 ; i < keys . length ; ++ i ) {
const key = keys [ i ] ;
if ( ! ( key in this ) ) {
Object . defineProperty ( this , key , defineRedirectDescriptor ( key ) ) ;
}
}
}
// Should be enumerable, but class methods are not enumerable.
Event . prototype = {
/ * *
* The type of this event .
* @ type { string }
* /
get type ( ) {
return pd ( this ) . event . type
} ,
/ * *
* The target of this event .
* @ type { EventTarget }
* /
get target ( ) {
return pd ( this ) . eventTarget
} ,
/ * *
* The target of this event .
* @ type { EventTarget }
* /
get currentTarget ( ) {
return pd ( this ) . currentTarget
} ,
/ * *
* @ returns { EventTarget [ ] } The composed path of this event .
* /
composedPath ( ) {
const currentTarget = pd ( this ) . currentTarget ;
if ( currentTarget == null ) {
return [ ]
}
return [ currentTarget ]
} ,
/ * *
* Constant of NONE .
* @ type { number }
* /
get NONE ( ) {
return 0
} ,
/ * *
* Constant of CAPTURING _PHASE .
* @ type { number }
* /
get CAPTURING _PHASE ( ) {
return 1
} ,
/ * *
* Constant of AT _TARGET .
* @ type { number }
* /
get AT _TARGET ( ) {
return 2
} ,
/ * *
* Constant of BUBBLING _PHASE .
* @ type { number }
* /
get BUBBLING _PHASE ( ) {
return 3
} ,
/ * *
* The target of this event .
* @ type { number }
* /
get eventPhase ( ) {
return pd ( this ) . eventPhase
} ,
/ * *
* Stop event bubbling .
* @ returns { void }
* /
stopPropagation ( ) {
const data = pd ( this ) ;
data . stopped = true ;
if ( typeof data . event . stopPropagation === "function" ) {
data . event . stopPropagation ( ) ;
}
} ,
/ * *
* Stop event bubbling .
* @ returns { void }
* /
stopImmediatePropagation ( ) {
const data = pd ( this ) ;
data . stopped = true ;
data . immediateStopped = true ;
if ( typeof data . event . stopImmediatePropagation === "function" ) {
data . event . stopImmediatePropagation ( ) ;
}
} ,
/ * *
* The flag to be bubbling .
* @ type { boolean }
* /
get bubbles ( ) {
return Boolean ( pd ( this ) . event . bubbles )
} ,
/ * *
* The flag to be cancelable .
* @ type { boolean }
* /
get cancelable ( ) {
return Boolean ( pd ( this ) . event . cancelable )
} ,
/ * *
* Cancel this event .
* @ returns { void }
* /
preventDefault ( ) {
setCancelFlag ( pd ( this ) ) ;
} ,
/ * *
* The flag to indicate cancellation state .
* @ type { boolean }
* /
get defaultPrevented ( ) {
return pd ( this ) . canceled
} ,
/ * *
* The flag to be composed .
* @ type { boolean }
* /
get composed ( ) {
return Boolean ( pd ( this ) . event . composed )
} ,
/ * *
* The unix time of this event .
* @ type { number }
* /
get timeStamp ( ) {
return pd ( this ) . timeStamp
} ,
/ * *
* The target of this event .
* @ type { EventTarget }
* @ deprecated
* /
get srcElement ( ) {
return pd ( this ) . eventTarget
} ,
/ * *
* The flag to stop event bubbling .
* @ type { boolean }
* @ deprecated
* /
get cancelBubble ( ) {
return pd ( this ) . stopped
} ,
set cancelBubble ( value ) {
if ( ! value ) {
return
}
const data = pd ( this ) ;
data . stopped = true ;
if ( typeof data . event . cancelBubble === "boolean" ) {
data . event . cancelBubble = true ;
}
} ,
/ * *
* The flag to indicate cancellation state .
* @ type { boolean }
* @ deprecated
* /
get returnValue ( ) {
return ! pd ( this ) . canceled
} ,
set returnValue ( value ) {
if ( ! value ) {
setCancelFlag ( pd ( this ) ) ;
}
} ,
/ * *
* Initialize this event object . But do nothing under event dispatching .
* @ param { string } type The event type .
* @ param { boolean } [ bubbles = false ] The flag to be possible to bubble up .
* @ param { boolean } [ cancelable = false ] The flag to be possible to cancel .
* @ deprecated
* /
initEvent ( ) {
// Do nothing.
} ,
} ;
// `constructor` is not enumerable.
Object . defineProperty ( Event . prototype , "constructor" , {
value : Event ,
configurable : true ,
writable : true ,
} ) ;
// Ensure `event instanceof window.Event` is `true`.
if ( typeof window !== "undefined" && typeof window . Event !== "undefined" ) {
Object . setPrototypeOf ( Event . prototype , window . Event . prototype ) ;
// Make association for wrappers.
wrappers . set ( window . Event . prototype , Event ) ;
}
/ * *
* Get the property descriptor to redirect a given property .
* @ param { string } key Property name to define property descriptor .
* @ returns { PropertyDescriptor } The property descriptor to redirect the property .
* @ private
* /
function defineRedirectDescriptor ( key ) {
return {
get ( ) {
return pd ( this ) . event [ key ]
} ,
set ( value ) {
pd ( this ) . event [ key ] = value ;
} ,
configurable : true ,
enumerable : true ,
}
}
/ * *
* Get the property descriptor to call a given method property .
* @ param { string } key Property name to define property descriptor .
* @ returns { PropertyDescriptor } The property descriptor to call the method property .
* @ private
* /
function defineCallDescriptor ( key ) {
return {
value ( ) {
const event = pd ( this ) . event ;
return event [ key ] . apply ( event , arguments )
} ,
configurable : true ,
enumerable : true ,
}
}
/ * *
* Define new wrapper class .
* @ param { Function } BaseEvent The base wrapper class .
* @ param { Object } proto The prototype of the original event .
* @ returns { Function } The defined wrapper class .
* @ private
* /
function defineWrapper ( BaseEvent , proto ) {
const keys = Object . keys ( proto ) ;
if ( keys . length === 0 ) {
return BaseEvent
}
/** CustomEvent */
function CustomEvent ( eventTarget , event ) {
BaseEvent . call ( this , eventTarget , event ) ;
}
CustomEvent . prototype = Object . create ( BaseEvent . prototype , {
constructor : { value : CustomEvent , configurable : true , writable : true } ,
} ) ;
// Define accessors.
for ( let i = 0 ; i < keys . length ; ++ i ) {
const key = keys [ i ] ;
if ( ! ( key in BaseEvent . prototype ) ) {
const descriptor = Object . getOwnPropertyDescriptor ( proto , key ) ;
const isFunc = typeof descriptor . value === "function" ;
Object . defineProperty (
CustomEvent . prototype ,
key ,
isFunc
? defineCallDescriptor ( key )
: defineRedirectDescriptor ( key )
) ;
}
}
return CustomEvent
}
/ * *
* Get the wrapper class of a given prototype .
* @ param { Object } proto The prototype of the original event to get its wrapper .
* @ returns { Function } The wrapper class .
* @ private
* /
function getWrapper ( proto ) {
if ( proto == null || proto === Object . prototype ) {
return Event
}
let wrapper = wrappers . get ( proto ) ;
if ( wrapper == null ) {
wrapper = defineWrapper ( getWrapper ( Object . getPrototypeOf ( proto ) ) , proto ) ;
wrappers . set ( proto , wrapper ) ;
}
return wrapper
}
/ * *
* Wrap a given event to management a dispatching .
* @ param { EventTarget } eventTarget The event target of this dispatching .
* @ param { Object } event The event to wrap .
* @ returns { Event } The wrapper instance .
* @ private
* /
function wrapEvent ( eventTarget , event ) {
const Wrapper = getWrapper ( Object . getPrototypeOf ( event ) ) ;
return new Wrapper ( eventTarget , event )
}
/ * *
* Get the immediateStopped flag of a given event .
* @ param { Event } event The event to get .
* @ returns { boolean } The flag to stop propagation immediately .
* @ private
* /
function isStopped ( event ) {
return pd ( event ) . immediateStopped
}
/ * *
* Set the current event phase of a given event .
* @ param { Event } event The event to set current target .
* @ param { number } eventPhase New event phase .
* @ returns { void }
* @ private
* /
function setEventPhase ( event , eventPhase ) {
pd ( event ) . eventPhase = eventPhase ;
}
/ * *
* Set the current target of a given event .
* @ param { Event } event The event to set current target .
* @ param { EventTarget | null } currentTarget New current target .
* @ returns { void }
* @ private
* /
function setCurrentTarget ( event , currentTarget ) {
pd ( event ) . currentTarget = currentTarget ;
}
/ * *
* Set a passive listener of a given event .
* @ param { Event } event The event to set current target .
* @ param { Function | null } passiveListener New passive listener .
* @ returns { void }
* @ private
* /
function setPassiveListener ( event , passiveListener ) {
pd ( event ) . passiveListener = passiveListener ;
}
/ * *
* @ typedef { object } ListenerNode
* @ property { Function } listener
* @ property { 1 | 2 | 3 } listenerType
* @ property { boolean } passive
* @ property { boolean } once
* @ property { ListenerNode | null } next
* @ private
* /
/ * *
* @ type { WeakMap < object , Map < string , ListenerNode >> }
* @ private
* /
const listenersMap = new WeakMap ( ) ;
// Listener types
const CAPTURE = 1 ;
const BUBBLE = 2 ;
const ATTRIBUTE = 3 ;
/ * *
* Check whether a given value is an object or not .
* @ param { any } x The value to check .
* @ returns { boolean } ` true ` if the value is an object .
* /
function isObject ( x ) {
return x !== null && typeof x === "object" //eslint-disable-line no-restricted-syntax
}
/ * *
* Get listeners .
* @ param { EventTarget } eventTarget The event target to get .
* @ returns { Map < string , ListenerNode > } The listeners .
* @ private
* /
function getListeners ( eventTarget ) {
const listeners = listenersMap . get ( eventTarget ) ;
if ( listeners == null ) {
throw new TypeError (
"'this' is expected an EventTarget object, but got another value."
)
}
return listeners
}
/ * *
* Get the property descriptor for the event attribute of a given event .
* @ param { string } eventName The event name to get property descriptor .
* @ returns { PropertyDescriptor } The property descriptor .
* @ private
* /
function defineEventAttributeDescriptor ( eventName ) {
return {
get ( ) {
const listeners = getListeners ( this ) ;
let node = listeners . get ( eventName ) ;
while ( node != null ) {
if ( node . listenerType === ATTRIBUTE ) {
return node . listener
}
node = node . next ;
}
return null
} ,
set ( listener ) {
if ( typeof listener !== "function" && ! isObject ( listener ) ) {
listener = null ; // eslint-disable-line no-param-reassign
}
const listeners = getListeners ( this ) ;
// Traverse to the tail while removing old value.
let prev = null ;
let node = listeners . get ( eventName ) ;
while ( node != null ) {
if ( node . listenerType === ATTRIBUTE ) {
// Remove old value.
if ( prev !== null ) {
prev . next = node . next ;
} else if ( node . next !== null ) {
listeners . set ( eventName , node . next ) ;
} else {
listeners . delete ( eventName ) ;
}
} else {
prev = node ;
}
node = node . next ;
}
// Add new value.
if ( listener !== null ) {
const newNode = {
listener ,
listenerType : ATTRIBUTE ,
passive : false ,
once : false ,
next : null ,
} ;
if ( prev === null ) {
listeners . set ( eventName , newNode ) ;
} else {
prev . next = newNode ;
}
}
} ,
configurable : true ,
enumerable : true ,
}
}
/ * *
* Define an event attribute ( e . g . ` eventTarget.onclick ` ) .
* @ param { Object } eventTargetPrototype The event target prototype to define an event attrbite .
* @ param { string } eventName The event name to define .
* @ returns { void }
* /
function defineEventAttribute ( eventTargetPrototype , eventName ) {
Object . defineProperty (
eventTargetPrototype ,
` on ${ eventName } ` ,
defineEventAttributeDescriptor ( eventName )
) ;
}
/ * *
* Define a custom EventTarget with event attributes .
* @ param { string [ ] } eventNames Event names for event attributes .
* @ returns { EventTarget } The custom EventTarget .
* @ private
* /
function defineCustomEventTarget ( eventNames ) {
/** CustomEventTarget */
function CustomEventTarget ( ) {
EventTarget . call ( this ) ;
}
CustomEventTarget . prototype = Object . create ( EventTarget . prototype , {
constructor : {
value : CustomEventTarget ,
configurable : true ,
writable : true ,
} ,
} ) ;
for ( let i = 0 ; i < eventNames . length ; ++ i ) {
defineEventAttribute ( CustomEventTarget . prototype , eventNames [ i ] ) ;
}
return CustomEventTarget
}
/ * *
* EventTarget .
*
* - This is constructor if no arguments .
* - This is a function which returns a CustomEventTarget constructor if there are arguments .
*
* For example :
*
* class A extends EventTarget { }
* class B extends EventTarget ( "message" ) { }
* class C extends EventTarget ( "message" , "error" ) { }
* class D extends EventTarget ( [ "message" , "error" ] ) { }
* /
function EventTarget ( ) {
/*eslint-disable consistent-return */
if ( this instanceof EventTarget ) {
listenersMap . set ( this , new Map ( ) ) ;
return
}
if ( arguments . length === 1 && Array . isArray ( arguments [ 0 ] ) ) {
return defineCustomEventTarget ( arguments [ 0 ] )
}
if ( arguments . length > 0 ) {
const types = new Array ( arguments . length ) ;
for ( let i = 0 ; i < arguments . length ; ++ i ) {
types [ i ] = arguments [ i ] ;
}
return defineCustomEventTarget ( types )
}
throw new TypeError ( "Cannot call a class as a function" )
/*eslint-enable consistent-return */
}
// Should be enumerable, but class methods are not enumerable.
EventTarget . prototype = {
/ * *
* Add a given listener to this event target .
* @ param { string } eventName The event name to add .
* @ param { Function } listener The listener to add .
* @ param { boolean | { capture ? : boolean , passive ? : boolean , once ? : boolean } } [ options ] The options for this listener .
* @ returns { void }
* /
addEventListener ( eventName , listener , options ) {
if ( listener == null ) {
return
}
if ( typeof listener !== "function" && ! isObject ( listener ) ) {
throw new TypeError ( "'listener' should be a function or an object." )
}
const listeners = getListeners ( this ) ;
const optionsIsObj = isObject ( options ) ;
const capture = optionsIsObj
? Boolean ( options . capture )
: Boolean ( options ) ;
const listenerType = capture ? CAPTURE : BUBBLE ;
const newNode = {
listener ,
listenerType ,
passive : optionsIsObj && Boolean ( options . passive ) ,
once : optionsIsObj && Boolean ( options . once ) ,
next : null ,
} ;
// Set it as the first node if the first node is null.
let node = listeners . get ( eventName ) ;
if ( node === undefined ) {
listeners . set ( eventName , newNode ) ;
return
}
// Traverse to the tail while checking duplication..
let prev = null ;
while ( node != null ) {
if (
node . listener === listener &&
node . listenerType === listenerType
) {
// Should ignore duplication.
return
}
prev = node ;
node = node . next ;
}
// Add it.
prev . next = newNode ;
} ,
/ * *
* Remove a given listener from this event target .
* @ param { string } eventName The event name to remove .
* @ param { Function } listener The listener to remove .
* @ param { boolean | { capture ? : boolean , passive ? : boolean , once ? : boolean } } [ options ] The options for this listener .
* @ returns { void }
* /
removeEventListener ( eventName , listener , options ) {
if ( listener == null ) {
return
}
const listeners = getListeners ( this ) ;
const capture = isObject ( options )
? Boolean ( options . capture )
: Boolean ( options ) ;
const listenerType = capture ? CAPTURE : BUBBLE ;
let prev = null ;
let node = listeners . get ( eventName ) ;
while ( node != null ) {
if (
node . listener === listener &&
node . listenerType === listenerType
) {
if ( prev !== null ) {
prev . next = node . next ;
} else if ( node . next !== null ) {
listeners . set ( eventName , node . next ) ;
} else {
listeners . delete ( eventName ) ;
}
return
}
prev = node ;
node = node . next ;
}
} ,
/ * *
* Dispatch a given event .
* @ param { Event | { type : string } } event The event to dispatch .
* @ returns { boolean } ` false ` if canceled .
* /
dispatchEvent ( event ) {
if ( event == null || typeof event . type !== "string" ) {
throw new TypeError ( '"event.type" should be a string.' )
}
// If listeners aren't registered, terminate.
const listeners = getListeners ( this ) ;
const eventName = event . type ;
let node = listeners . get ( eventName ) ;
if ( node == null ) {
return true
}
// Since we cannot rewrite several properties, so wrap object.
const wrappedEvent = wrapEvent ( this , event ) ;
// This doesn't process capturing phase and bubbling phase.
// This isn't participating in a tree.
let prev = null ;
while ( node != null ) {
// Remove this listener if it's once
if ( node . once ) {
if ( prev !== null ) {
prev . next = node . next ;
} else if ( node . next !== null ) {
listeners . set ( eventName , node . next ) ;
} else {
listeners . delete ( eventName ) ;
}
} else {
prev = node ;
}
// Call this listener
setPassiveListener (
wrappedEvent ,
node . passive ? node . listener : null
) ;
if ( typeof node . listener === "function" ) {
try {
node . listener . call ( this , wrappedEvent ) ;
} catch ( err ) {
if (
typeof console !== "undefined" &&
typeof console . error === "function"
) {
console . error ( err ) ;
}
}
} else if (
node . listenerType !== ATTRIBUTE &&
typeof node . listener . handleEvent === "function"
) {
node . listener . handleEvent ( wrappedEvent ) ;
}
// Break if `event.stopImmediatePropagation` was called.
if ( isStopped ( wrappedEvent ) ) {
break
}
node = node . next ;
}
setPassiveListener ( wrappedEvent , null ) ;
setEventPhase ( wrappedEvent , 0 ) ;
setCurrentTarget ( wrappedEvent , null ) ;
return ! wrappedEvent . defaultPrevented
} ,
} ;
// `constructor` is not enumerable.
Object . defineProperty ( EventTarget . prototype , "constructor" , {
value : EventTarget ,
configurable : true ,
writable : true ,
} ) ;
// Ensure `eventTarget instanceof window.EventTarget` is `true`.
if (
typeof window !== "undefined" &&
typeof window . EventTarget !== "undefined"
) {
Object . setPrototypeOf ( EventTarget . prototype , window . EventTarget . prototype ) ;
}
/ * *
* @ author Toru Nagashima < https : //github.com/mysticatea>
* See LICENSE file in root directory for full license .
* /
/ * *
* The signal class .
* @ see https : //dom.spec.whatwg.org/#abortsignal
* /
class AbortSignal extends EventTarget {
/ * *
* AbortSignal cannot be constructed directly .
* /
constructor ( ) {
super ( ) ;
throw new TypeError ( "AbortSignal cannot be constructed directly" ) ;
}
/ * *
* Returns ` true ` if this ` AbortSignal ` ' s ` AbortController ` has signaled to abort , and ` false ` otherwise .
* /
get aborted ( ) {
const aborted = abortedFlags . get ( this ) ;
if ( typeof aborted !== "boolean" ) {
throw new TypeError ( ` Expected 'this' to be an 'AbortSignal' object, but got ${ this === null ? "null" : typeof this } ` ) ;
}
return aborted ;
}
}
defineEventAttribute ( AbortSignal . prototype , "abort" ) ;
/ * *
* Create an AbortSignal object .
* /
function createAbortSignal ( ) {
const signal = Object . create ( AbortSignal . prototype ) ;
EventTarget . call ( signal ) ;
abortedFlags . set ( signal , false ) ;
return signal ;
}
/ * *
* Abort a given signal .
* /
function abortSignal ( signal ) {
if ( abortedFlags . get ( signal ) !== false ) {
return ;
}
abortedFlags . set ( signal , true ) ;
signal . dispatchEvent ( { type : "abort" } ) ;
}
/ * *
* Aborted flag for each instances .
* /
const abortedFlags = new WeakMap ( ) ;
// Properties should be enumerable.
Object . defineProperties ( AbortSignal . prototype , {
aborted : { enumerable : true } ,
} ) ;
// `toString()` should return `"[object AbortSignal]"`
if ( typeof Symbol === "function" && typeof Symbol . toStringTag === "symbol" ) {
Object . defineProperty ( AbortSignal . prototype , Symbol . toStringTag , {
configurable : true ,
value : "AbortSignal" ,
} ) ;
}
/ * *
* The AbortController .
* @ see https : //dom.spec.whatwg.org/#abortcontroller
* /
class AbortController {
/ * *
* Initialize this controller .
* /
constructor ( ) {
signals . set ( this , createAbortSignal ( ) ) ;
}
/ * *
* Returns the ` AbortSignal ` object associated with this object .
* /
get signal ( ) {
return getSignal ( this ) ;
}
/ * *
* Abort and signal to any observers that the associated activity is to be aborted .
* /
abort ( ) {
abortSignal ( getSignal ( this ) ) ;
}
}
/ * *
* Associated signals .
* /
const signals = new WeakMap ( ) ;
/ * *
* Get the associated signal of a given controller .
* /
function getSignal ( controller ) {
const signal = signals . get ( controller ) ;
if ( signal == null ) {
throw new TypeError ( ` Expected 'this' to be an 'AbortController' object, but got ${ controller === null ? "null" : typeof controller } ` ) ;
}
return signal ;
}
// Properties should be enumerable.
Object . defineProperties ( AbortController . prototype , {
signal : { enumerable : true } ,
abort : { enumerable : true } ,
} ) ;
if ( typeof Symbol === "function" && typeof Symbol . toStringTag === "symbol" ) {
Object . defineProperty ( AbortController . prototype , Symbol . toStringTag , {
configurable : true ,
value : "AbortController" ,
} ) ;
}
// Copyright (c) Microsoft Corporation. All rights reserved.
var RestError = /** @class */ ( function ( _super ) {
tslib . _ _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.
var FetchHttpClient = /** @class */ ( function ( ) {
function FetchHttpClient ( ) {
}
FetchHttpClient . prototype . sendRequest = function ( httpRequest ) {
return tslib . _ _awaiter ( this , void 0 , void 0 , function ( ) {
var abortController , abortListener , formData , requestForm _1 , appendFormValue , _i , _a , formKey , formValue , j , contentType , body , loadedBytes _1 , uploadReportStream , platformSpecificRequestInit , requestInit , operationResponse , response , headers , _b , _c , onDownloadProgress _1 , responseBody , loadedBytes _2 , downloadReportStream , length _1 , error _1 , fetchError , uploadStreamDone , downloadStreamDone ;
return tslib . _ _generator ( this , function ( _d ) {
switch ( _d . label ) {
case 0 :
if ( ! httpRequest && typeof httpRequest !== "object" ) {
throw new Error ( "'httpRequest' (WebResource) cannot be null or undefined and must be of type object." ) ;
}
abortController = new AbortController ( ) ;
if ( httpRequest . abortSignal ) {
if ( httpRequest . abortSignal . aborted ) {
throw new RestError ( "The request was aborted" , RestError . REQUEST _ABORTED _ERROR , undefined , httpRequest ) ;
}
abortListener = function ( event ) {
if ( event . type === "abort" ) {
abortController . abort ( ) ;
}
} ;
httpRequest . abortSignal . addEventListener ( "abort" , abortListener ) ;
}
if ( httpRequest . timeout ) {
setTimeout ( function ( ) {
abortController . abort ( ) ;
} , httpRequest . timeout ) ;
}
if ( httpRequest . formData ) {
formData = httpRequest . formData ;
requestForm _1 = new FormData ( ) ;
appendFormValue = function ( key , value ) {
// value function probably returns a stream so we can provide a fresh stream on each retry
if ( typeof value === "function" ) {
value = value ( ) ;
}
if ( value && value . hasOwnProperty ( "value" ) && value . hasOwnProperty ( "options" ) ) {
requestForm _1 . append ( key , value . value , value . options ) ;
}
else {
requestForm _1 . append ( key , value ) ;
}
} ;
for ( _i = 0 , _a = Object . keys ( formData ) ; _i < _a . length ; _i ++ ) {
formKey = _a [ _i ] ;
formValue = formData [ formKey ] ;
if ( Array . isArray ( formValue ) ) {
for ( j = 0 ; j < formValue . length ; j ++ ) {
appendFormValue ( formKey , formValue [ j ] ) ;
}
}
else {
appendFormValue ( formKey , formValue ) ;
}
}
httpRequest . body = requestForm _1 ;
httpRequest . formData = undefined ;
contentType = httpRequest . headers . get ( "Content-Type" ) ;
if ( contentType && contentType . indexOf ( "multipart/form-data" ) !== - 1 ) {
if ( typeof requestForm _1 . getBoundary === "function" ) {
httpRequest . headers . set ( "Content-Type" , "multipart/form-data; boundary=" + requestForm _1 . getBoundary ( ) ) ;
}
else {
// browser will automatically apply a suitable content-type header
httpRequest . headers . remove ( "Content-Type" ) ;
}
}
}
body = httpRequest . body
? typeof httpRequest . body === "function"
? httpRequest . body ( )
: httpRequest . body
: undefined ;
if ( httpRequest . onUploadProgress && httpRequest . body ) {
loadedBytes _1 = 0 ;
uploadReportStream = new stream . Transform ( {
transform : function ( chunk , _encoding , callback ) {
loadedBytes _1 += chunk . length ;
httpRequest . onUploadProgress ( { loadedBytes : loadedBytes _1 } ) ;
callback ( undefined , chunk ) ;
} ,
} ) ;
if ( isReadableStream ( body ) ) {
body . pipe ( uploadReportStream ) ;
}
else {
uploadReportStream . end ( body ) ;
}
body = uploadReportStream ;
}
return [ 4 /*yield*/ , this . prepareRequest ( httpRequest ) ] ;
case 1 :
platformSpecificRequestInit = _d . sent ( ) ;
requestInit = tslib . _ _assign ( { body : body , headers : httpRequest . headers . rawHeaders ( ) , method : httpRequest . method , signal : abortController . signal , redirect : "manual" } , platformSpecificRequestInit ) ;
_d . label = 2 ;
case 2 :
_d . trys . push ( [ 2 , 8 , 9 , 10 ] ) ;
return [ 4 /*yield*/ , this . fetch ( httpRequest . url , requestInit ) ] ;
case 3 :
response = _d . sent ( ) ;
headers = parseHeaders ( response . headers ) ;
_b = {
headers : headers ,
request : httpRequest ,
status : response . status ,
readableStreamBody : httpRequest . streamResponseBody
? response . body
: undefined
} ;
if ( ! ! httpRequest . streamResponseBody ) return [ 3 /*break*/ , 5 ] ;
return [ 4 /*yield*/ , response . text ( ) ] ;
case 4 :
_c = _d . sent ( ) ;
return [ 3 /*break*/ , 6 ] ;
case 5 :
_c = undefined ;
_d . label = 6 ;
case 6 :
operationResponse = ( _b . bodyAsText = _c ,
_b . redirected = response . redirected ,
_b . url = response . url ,
_b ) ;
onDownloadProgress _1 = httpRequest . onDownloadProgress ;
if ( onDownloadProgress _1 ) {
responseBody = response . body || undefined ;
if ( isReadableStream ( responseBody ) ) {
loadedBytes _2 = 0 ;
downloadReportStream = new stream . Transform ( {
transform : function ( chunk , _encoding , callback ) {
loadedBytes _2 += chunk . length ;
onDownloadProgress _1 ( { loadedBytes : loadedBytes _2 } ) ;
callback ( undefined , chunk ) ;
} ,
} ) ;
responseBody . pipe ( downloadReportStream ) ;
operationResponse . readableStreamBody = downloadReportStream ;
}
else {
length _1 = parseInt ( headers . get ( "Content-Length" ) ) || undefined ;
if ( length _1 ) {
// Calling callback for non-stream response for consistency with browser
onDownloadProgress _1 ( { loadedBytes : length _1 } ) ;
}
}
}
return [ 4 /*yield*/ , this . processRequest ( operationResponse ) ] ;
case 7 :
_d . sent ( ) ;
return [ 2 /*return*/ , operationResponse ] ;
case 8 :
error _1 = _d . sent ( ) ;
fetchError = error _1 ;
if ( fetchError . code === "ENOTFOUND" ) {
throw new RestError ( fetchError . message , RestError . REQUEST _SEND _ERROR , undefined , httpRequest ) ;
}
else if ( fetchError . type === "aborted" ) {
throw new RestError ( "The request was aborted" , RestError . REQUEST _ABORTED _ERROR , undefined , httpRequest ) ;
}
throw fetchError ;
case 9 :
// clean up event listener
if ( httpRequest . abortSignal && abortListener ) {
uploadStreamDone = Promise . resolve ( ) ;
if ( isReadableStream ( body ) ) {
uploadStreamDone = isStreamComplete ( body ) ;
}
downloadStreamDone = Promise . resolve ( ) ;
if ( isReadableStream ( operationResponse === null || operationResponse === void 0 ? void 0 : operationResponse . readableStreamBody ) ) {
downloadStreamDone = isStreamComplete ( operationResponse . readableStreamBody ) ;
}
Promise . all ( [ uploadStreamDone , downloadStreamDone ] )
. then ( function ( ) {
var _a ;
( _a = httpRequest . abortSignal ) === null || _a === void 0 ? void 0 : _a . removeEventListener ( "abort" , abortListener ) ;
return ;
} )
. catch ( function ( _e ) { } ) ;
}
return [ 7 /*endfinally*/ ] ;
case 10 : return [ 2 /*return*/ ] ;
}
} ) ;
} ) ;
} ;
return FetchHttpClient ;
} ( ) ) ;
function isReadableStream ( body ) {
return body && typeof body . pipe === "function" ;
}
function isStreamComplete ( stream ) {
return new Promise ( function ( resolve ) {
stream . on ( "close" , resolve ) ;
stream . on ( "end" , resolve ) ;
stream . on ( "error" , resolve ) ;
} ) ;
}
function parseHeaders ( headers ) {
var httpHeaders = new HttpHeaders ( ) ;
headers . forEach ( function ( value , key ) {
httpHeaders . set ( key , value ) ;
} ) ;
return httpHeaders ;
}
// 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 "&" :
result . set ( parameterName , parameterValue ) ;
parameterName = "" ;
parameterValue = "" ;
currentState = "ParameterName" ;
break ;
default :
parameterValue += currentCharacter ;
break ;
}
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 {
var schemeIndex = path . indexOf ( "://" ) ;
if ( schemeIndex !== - 1 ) {
var schemeStart = path . lastIndexOf ( "/" , schemeIndex ) ;
// Make sure to only grab the URL part of the path before setting the state back to SCHEME
// this will handle cases such as "/a/b/c/https://microsoft.com" => "https://microsoft.com"
this . set ( schemeStart === - 1 ? path : path . substr ( schemeStart + 1 ) , "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 createProxyAgent ( requestUrl , proxySettings , headers ) {
var tunnelOptions = {
proxy : {
host : URLBuilder . parse ( proxySettings . host ) . getHost ( ) ,
port : proxySettings . port ,
headers : ( headers && headers . rawHeaders ( ) ) || { } ,
} ,
} ;
if ( proxySettings . username && proxySettings . password ) {
tunnelOptions . proxy . proxyAuth = proxySettings . username + ":" + proxySettings . password ;
}
else if ( proxySettings . username ) {
tunnelOptions . proxy . proxyAuth = "" + proxySettings . username ;
}
var requestScheme = URLBuilder . parse ( requestUrl ) . getScheme ( ) || "" ;
var isRequestHttps = requestScheme . toLowerCase ( ) === "https" ;
var proxyScheme = URLBuilder . parse ( proxySettings . host ) . getScheme ( ) || "" ;
var isProxyHttps = proxyScheme . toLowerCase ( ) === "https" ;
var proxyAgent = {
isHttps : isRequestHttps ,
agent : createTunnel ( isRequestHttps , isProxyHttps , tunnelOptions ) ,
} ;
return proxyAgent ;
}
function createTunnel ( isRequestHttps , isProxyHttps , tunnelOptions ) {
if ( isRequestHttps && isProxyHttps ) {
return tunnel . httpsOverHttps ( tunnelOptions ) ;
}
else if ( isRequestHttps && ! isProxyHttps ) {
return tunnel . httpsOverHttp ( tunnelOptions ) ;
}
else if ( ! isRequestHttps && isProxyHttps ) {
return tunnel . httpOverHttps ( tunnelOptions ) ;
}
else {
return tunnel . httpOverHttp ( tunnelOptions ) ;
}
}
// Copyright (c) Microsoft Corporation. All rights reserved.
var NodeFetchHttpClient = /** @class */ ( function ( _super ) {
tslib . _ _extends ( NodeFetchHttpClient , _super ) ;
function NodeFetchHttpClient ( ) {
var _this = _super !== null && _super . apply ( this , arguments ) || this ;
_this . cookieJar = new tough . CookieJar ( undefined , { looseMode : true } ) ;
return _this ;
}
NodeFetchHttpClient . prototype . fetch = function ( input , init ) {
return tslib . _ _awaiter ( this , void 0 , void 0 , function ( ) {
return tslib . _ _generator ( this , function ( _a ) {
return [ 2 /*return*/ , node _fetch ( input , init ) ] ;
} ) ;
} ) ;
} ;
NodeFetchHttpClient . prototype . prepareRequest = function ( httpRequest ) {
return tslib . _ _awaiter ( this , void 0 , void 0 , function ( ) {
var requestInit , cookieString , _a , httpAgent , httpsAgent , tunnel , options , agent ;
var _this = this ;
return tslib . _ _generator ( this , function ( _b ) {
switch ( _b . label ) {
case 0 :
requestInit = { } ;
if ( ! ( this . cookieJar && ! httpRequest . headers . get ( "Cookie" ) ) ) return [ 3 /*break*/ , 2 ] ;
return [ 4 /*yield*/ , new Promise ( function ( resolve , reject ) {
_this . cookieJar . getCookieString ( httpRequest . url , function ( err , cookie ) {
if ( err ) {
reject ( err ) ;
}
else {
resolve ( cookie ) ;
}
} ) ;
} ) ] ;
case 1 :
cookieString = _b . sent ( ) ;
httpRequest . headers . set ( "Cookie" , cookieString ) ;
_b . label = 2 ;
case 2 :
if ( httpRequest . agentSettings ) {
_a = httpRequest . agentSettings , httpAgent = _a . http , httpsAgent = _a . https ;
if ( httpsAgent && httpRequest . url . startsWith ( "https" ) ) {
requestInit . agent = httpsAgent ;
}
else if ( httpAgent ) {
requestInit . agent = httpAgent ;
}
}
else if ( httpRequest . proxySettings ) {
tunnel = createProxyAgent ( httpRequest . url , httpRequest . proxySettings , httpRequest . headers ) ;
requestInit . agent = tunnel . agent ;
}
if ( httpRequest . keepAlive === true ) {
if ( requestInit . agent ) {
requestInit . agent . keepAlive = true ;
}
else {
options = { keepAlive : true } ;
agent = httpRequest . url . startsWith ( "https" )
? new https . Agent ( options )
: new http . Agent ( options ) ;
requestInit . agent = agent ;
}
}
return [ 2 /*return*/ , requestInit ] ;
}
} ) ;
} ) ;
} ;
NodeFetchHttpClient . prototype . processRequest = function ( operationResponse ) {
return tslib . _ _awaiter ( this , void 0 , void 0 , function ( ) {
var setCookieHeader _1 ;
var _this = this ;
return tslib . _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 :
if ( ! this . cookieJar ) return [ 3 /*break*/ , 2 ] ;
setCookieHeader _1 = operationResponse . headers . get ( "Set-Cookie" ) ;
if ( ! ( setCookieHeader _1 != undefined ) ) return [ 3 /*break*/ , 2 ] ;
return [ 4 /*yield*/ , new Promise ( function ( resolve , reject ) {
_this . cookieJar . setCookie ( setCookieHeader _1 , operationResponse . request . url , { ignoreError : true } , function ( err ) {
if ( err ) {
reject ( err ) ;
}
else {
resolve ( ) ;
}
} ) ;
} ) ] ;
case 1 :
_a . sent ( ) ;
_a . label = 2 ;
case 2 : return [ 2 /*return*/ ] ;
}
} ) ;
} ) ;
} ;
return NodeFetchHttpClient ;
} ( FetchHttpClient ) ) ;
// 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.
// Licensed under the MIT license.
/ * *
* Tests an object to determine whether it implements TokenCredential .
*
* @ param credential - The assumed TokenCredential to be tested .
* /
function isTokenCredential ( credential ) {
// Check for an object with a 'getToken' function and possibly with
// a 'signRequest' function. We do this check to make sure that
// a ServiceClientCredentials implementor (like TokenClientCredentials
// in ms-rest-nodeauth) doesn't get mistaken for a TokenCredential if
// it doesn't actually implement TokenCredential also.
const castCredential = credential ;
return ( castCredential &&
typeof castCredential . getToken === "function" &&
( castCredential . signRequest === undefined || castCredential . getToken . length > 0 ) ) ;
}
// 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.
function stringifyXML ( obj , opts ) {
var builder = new xml2js . Builder ( {
rootName : ( opts || { } ) . rootName ,
renderOpts : {
pretty : false ,
} ,
} ) ;
return builder . buildObject ( obj ) ;
}
function parseXML ( str ) {
var xmlParser = new xml2js . Parser ( {
explicitArray : false ,
explicitCharkey : false ,
explicitRoot : false ,
} ) ;
return new Promise ( function ( resolve , reject ) {
if ( ! str ) {
reject ( new Error ( "Document is empty" ) ) ;
}
else {
xmlParser . parseString ( str , function ( err , res ) {
if ( err ) {
reject ( err ) ;
}
else {
resolve ( res ) ;
}
} ) ;
}
} ) ;
}
// 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 ) {
tslib . _ _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 tslib . _ _awaiter ( this , void 0 , void 0 , function ( ) {
var _this = this ;
return tslib . _ _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 ) {
tslib . _ _extends ( ExponentialRetryPolicy , _super ) ;
/ * *
* @ constructor
* @ param { RequestPolicy } nextPolicy The next RequestPolicy in the pipeline chain .
* @ param { RequestPolicyOptionsLike } 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 ) {
tslib . _ _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.
function getDefaultUserAgentKey ( ) {
return Constants . HeaderConstants . USER _AGENT ;
}
function getPlatformSpecificData ( ) {
var runtimeInfo = {
key : "Node" ,
value : process . version ,
} ;
var osInfo = {
key : "OS" ,
value : "(" + os . arch ( ) + "-" + os . type ( ) + "-" + os . release ( ) + ")" ,
} ;
return [ runtimeInfo , 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 ) {
tslib . _ _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.
var DefaultRedirectOptions = {
handleRedirects : true ,
maxRetries : 20 ,
} ;
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 ) {
tslib . _ _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 === 301 && [ "GET" , "HEAD" ] . includes ( request . method ) ) ||
( status === 302 && [ "GET" , "POST" , "HEAD" ] . includes ( request . method ) ) ||
( status === 303 && "POST" === request . method ) ||
status === 307 ) &&
( ( request . redirectLimit !== undefined && currentRetries < request . redirectLimit ) ||
( request . redirectLimit === undefined && currentRetries < policy . maxRetries ) ) ) {
var builder = URLBuilder . parse ( request . url ) ;
builder . setPath ( locationHeader ) ;
request . url = builder . toString ( ) ;
// POST request with Status code 302 and 303 should be converted into a
// redirected GET request if the redirect url is present in the location header
// reference: https://tools.ietf.org/html/rfc7231#page-57 && https://fetch.spec.whatwg.org/#http-redirect-fetch
if ( ( status === 302 || status === 303 ) && request . method === "POST" ) {
request . method = "GET" ;
delete request . body ;
}
return policy . _nextPolicy
. sendRequest ( request )
. then ( function ( res ) { return handleRedirect ( policy , res , currentRetries + 1 ) ; } )
. then ( function ( res ) { return recordRedirect ( res , request . url ) ; } ) ;
}
return Promise . resolve ( response ) ;
}
function recordRedirect ( response , redirect ) {
// This is called as the recursive calls to handleRedirect() unwind,
// only record the deepest/last redirect
if ( ! response . redirected ) {
response . redirected = true ;
response . url = redirect ;
}
return 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 ) {
tslib . _ _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 { WebResourceLike } 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-]+\//gi ) ;
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 { WebResourceLike } 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 { WebResourceLike } 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 ) {
tslib . _ _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 ) {
tslib . _ _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 ( ) )
. catch ( function ( error ) { return retry$1 ( _this , request , error . response , error ) ; } ) ;
} ;
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 * 0.4 ) ) ;
incrementDelta *= boundedRandDelta ;
retryData . retryInterval = Math . min ( policy . minRetryInterval + incrementDelta , policy . maxRetryInterval ) ;
return retryData ;
}
function retry$1 ( policy , request , operationResponse , err , retryData ) {
return tslib . _ _awaiter ( this , void 0 , void 0 , function ( ) {
var error _1 ;
return tslib . _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 :
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" ) ) ) return [ 3 /*break*/ , 5 ] ;
_a . label = 1 ;
case 1 :
_a . trys . push ( [ 1 , 3 , , 4 ] ) ;
return [ 4 /*yield*/ , delay ( retryData . retryInterval ) ] ;
case 2 :
_a . sent ( ) ;
return [ 2 /*return*/ , policy . _nextPolicy . sendRequest ( request . clone ( ) ) ] ;
case 3 :
error _1 = _a . sent ( ) ;
return [ 2 /*return*/ , retry$1 ( policy , request , operationResponse , error _1 , retryData ) ] ;
case 4 : return [ 3 /*break*/ , 6 ] ;
case 5 :
if ( err ) {
// If the operation failed in the end, return all errors instead of just the last one
return [ 2 /*return*/ , Promise . reject ( retryData . error ) ] ;
}
return [ 2 /*return*/ , operationResponse ] ;
case 6 : return [ 2 /*return*/ ] ;
}
} ) ;
} ) ;
}
// 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.
function agentPolicy ( agentSettings ) {
return {
create : function ( nextPolicy , options ) {
return new AgentPolicy ( nextPolicy , options , agentSettings ) ;
} ,
} ;
}
var AgentPolicy = /** @class */ ( function ( _super ) {
tslib . _ _extends ( AgentPolicy , _super ) ;
function AgentPolicy ( nextPolicy , options , agentSettings ) {
var _this = _super . call ( this , nextPolicy , options ) || this ;
_this . agentSettings = agentSettings ;
return _this ;
}
AgentPolicy . prototype . sendRequest = function ( request ) {
if ( ! request . agentSettings ) {
request . agentSettings = this . agentSettings ;
}
return this . _nextPolicy . sendRequest ( request ) ;
} ;
return AgentPolicy ;
} ( BaseRequestPolicy ) ) ;
// Copyright (c) Microsoft Corporation. All rights reserved.
/ * *
* @ internal
* /
var noProxyList = loadNoProxy ( ) ;
var byPassedList = new Map ( ) ;
/ * *
* @ internal
* /
function getEnvironmentValue ( name ) {
if ( process . env [ name ] ) {
return process . env [ name ] ;
}
else if ( process . env [ name . toLowerCase ( ) ] ) {
return process . env [ name . toLowerCase ( ) ] ;
}
return undefined ;
}
function loadEnvironmentProxyValue ( ) {
if ( ! process ) {
return undefined ;
}
var httpsProxy = getEnvironmentValue ( Constants . HTTPS _PROXY ) ;
var allProxy = getEnvironmentValue ( Constants . ALL _PROXY ) ;
var httpProxy = getEnvironmentValue ( Constants . HTTP _PROXY ) ;
return httpsProxy || allProxy || httpProxy ;
}
// Check whether the host of a given `uri` is in the noProxyList.
// If there's a match, any request sent to the same host won't have the proxy settings set.
// This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
function isBypassed ( uri ) {
if ( noProxyList . length === 0 ) {
return false ;
}
var host = URLBuilder . parse ( uri ) . getHost ( ) ;
if ( byPassedList . has ( host ) ) {
return byPassedList . get ( host ) ;
}
var isBypassedFlag = false ;
for ( var _i = 0 , noProxyList _1 = noProxyList ; _i < noProxyList _1 . length ; _i ++ ) {
var pattern = noProxyList _1 [ _i ] ;
if ( pattern [ 0 ] === "." ) {
// This should match either domain it self or any subdomain or host
// .foo.com will match foo.com it self or *.foo.com
if ( host . endsWith ( pattern ) ) {
isBypassedFlag = true ;
}
else {
if ( host . length === pattern . length - 1 && host === pattern . slice ( 1 ) ) {
isBypassedFlag = true ;
}
}
}
else {
if ( host === pattern ) {
isBypassedFlag = true ;
}
}
}
byPassedList . set ( host , isBypassedFlag ) ;
return isBypassedFlag ;
}
/ * *
* @ internal
* /
function loadNoProxy ( ) {
var noProxy = getEnvironmentValue ( Constants . NO _PROXY ) ;
if ( noProxy ) {
return noProxy
. split ( "," )
. map ( function ( item ) { return item . trim ( ) ; } )
. filter ( function ( item ) { return item . length ; } ) ;
}
return [ ] ;
}
/ * *
* @ internal
* /
function extractAuthFromUrl ( url ) {
var atIndex = url . indexOf ( "@" ) ;
if ( atIndex === - 1 ) {
return { urlWithoutAuth : url } ;
}
var schemeIndex = url . indexOf ( "://" ) ;
var authStart = schemeIndex !== - 1 ? schemeIndex + 3 : 0 ;
var auth = url . substring ( authStart , atIndex ) ;
var colonIndex = auth . indexOf ( ":" ) ;
var hasPassword = colonIndex !== - 1 ;
var username = hasPassword ? auth . substring ( 0 , colonIndex ) : auth ;
var password = hasPassword ? auth . substring ( colonIndex + 1 ) : undefined ;
var urlWithoutAuth = url . substring ( 0 , authStart ) + url . substring ( atIndex + 1 ) ;
return {
username : username ,
password : password ,
urlWithoutAuth : urlWithoutAuth ,
} ;
}
function getDefaultProxySettings ( proxyUrl ) {
if ( ! proxyUrl ) {
proxyUrl = loadEnvironmentProxyValue ( ) ;
if ( ! proxyUrl ) {
return undefined ;
}
}
var _a = extractAuthFromUrl ( proxyUrl ) , username = _a . username , password = _a . password , urlWithoutAuth = _a . urlWithoutAuth ;
var parsedUrl = URLBuilder . parse ( urlWithoutAuth ) ;
var schema = parsedUrl . getScheme ( ) ? parsedUrl . getScheme ( ) + "://" : "" ;
return {
host : schema + parsedUrl . getHost ( ) ,
port : Number . parseInt ( parsedUrl . getPort ( ) || "80" ) ,
username : username ,
password : password ,
} ;
}
function proxyPolicy ( proxySettings ) {
if ( ! proxySettings ) {
proxySettings = getDefaultProxySettings ( ) ;
}
return {
create : function ( nextPolicy , options ) {
return new ProxyPolicy ( nextPolicy , options , proxySettings ) ;
} ,
} ;
}
var ProxyPolicy = /** @class */ ( function ( _super ) {
tslib . _ _extends ( ProxyPolicy , _super ) ;
function ProxyPolicy ( nextPolicy , options , proxySettings ) {
var _this = _super . call ( this , nextPolicy , options ) || this ;
_this . proxySettings = proxySettings ;
return _this ;
}
ProxyPolicy . prototype . sendRequest = function ( request ) {
if ( ! request . proxySettings && ! isBypassed ( request . url ) ) {
request . proxySettings = this . proxySettings ;
}
return this . _nextPolicy . sendRequest ( request ) ;
} ;
return ProxyPolicy ;
} ( BaseRequestPolicy ) ) ;
// Copyright (c) Microsoft Corporation. All rights reserved.
var StatusCodes = Constants . HttpConstants . StatusCodes ;
var DEFAULT _RETRY _COUNT = 3 ;
function throttlingRetryPolicy ( maxRetries ) {
if ( maxRetries === void 0 ) { maxRetries = DEFAULT _RETRY _COUNT ; }
return {
create : function ( nextPolicy , options ) {
return new ThrottlingRetryPolicy ( nextPolicy , options , maxRetries ) ;
} ,
} ;
}
/ * *
* 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 ) {
tslib . _ _extends ( ThrottlingRetryPolicy , _super ) ;
function ThrottlingRetryPolicy ( nextPolicy , options , retryLimit ) {
var _this = _super . call ( this , nextPolicy , options ) || this ;
_this . retryLimit = retryLimit ;
return _this ;
}
ThrottlingRetryPolicy . prototype . sendRequest = function ( httpRequest ) {
return tslib . _ _awaiter ( this , void 0 , void 0 , function ( ) {
var _this = this ;
return tslib . _ _generator ( this , function ( _a ) {
return [ 2 /*return*/ , this . _nextPolicy . sendRequest ( httpRequest . clone ( ) ) . then ( function ( response ) {
return _this . retry ( httpRequest , response , 0 ) ;
} ) ] ;
} ) ;
} ) ;
} ;
ThrottlingRetryPolicy . prototype . retry = function ( httpRequest , httpResponse , retryCount ) {
return tslib . _ _awaiter ( this , void 0 , void 0 , function ( ) {
var retryAfterHeader , delayInMs , res ;
return tslib . _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 :
if ( httpResponse . status !== StatusCodes . TooManyRequests ) {
return [ 2 /*return*/ , httpResponse ] ;
}
retryAfterHeader = httpResponse . headers . get ( Constants . HeaderConstants . RETRY _AFTER ) ;
if ( ! ( retryAfterHeader && retryCount < this . retryLimit ) ) return [ 3 /*break*/ , 3 ] ;
delayInMs = ThrottlingRetryPolicy . parseRetryAfterHeader ( retryAfterHeader ) ;
if ( ! delayInMs ) return [ 3 /*break*/ , 3 ] ;
return [ 4 /*yield*/ , delay ( delayInMs ) ] ;
case 1 :
_a . sent ( ) ;
return [ 4 /*yield*/ , this . _nextPolicy . sendRequest ( httpRequest ) ] ;
case 2 :
res = _a . sent ( ) ;
return [ 2 /*return*/ , this . retry ( httpRequest , res , retryCount + 1 ) ] ;
case 3 : 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.
var DEFAULT _AUTHORIZATION _SCHEME = "Bearer" ;
/ * *
* Resource manager endpoints to match in order to specify a valid scope to the AzureIdentityCredentialAdapter .
* /
var azureResourceManagerEndpoints = [
"https://management.windows.net" ,
"https://management.chinacloudapi.cn" ,
"https://management.usgovcloudapi.net" ,
"https://management.cloudapi.de" ,
] ;
/ * *
* This class provides a simple extension to use { @ link TokenCredential } from ` @azure/identity ` library to
* use with legacy Azure SDKs that accept { @ link ServiceClientCredentials } family of credentials for authentication .
* /
var AzureIdentityCredentialAdapter = /** @class */ ( function ( ) {
function AzureIdentityCredentialAdapter ( azureTokenCredential , scopes ) {
if ( scopes === void 0 ) { scopes = "https://management.azure.com/.default" ; }
this . azureTokenCredential = azureTokenCredential ;
this . scopes = scopes ;
}
AzureIdentityCredentialAdapter . prototype . getToken = function ( ) {
return tslib . _ _awaiter ( this , void 0 , void 0 , function ( ) {
var accessToken , result ;
return tslib . _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 : return [ 4 /*yield*/ , this . azureTokenCredential . getToken ( this . scopes ) ] ;
case 1 :
accessToken = _a . sent ( ) ;
if ( accessToken !== null ) {
result = {
accessToken : accessToken . token ,
tokenType : DEFAULT _AUTHORIZATION _SCHEME ,
expiresOn : accessToken . expiresOnTimestamp ,
} ;
return [ 2 /*return*/ , result ] ;
}
else {
throw new Error ( "Could find token for scope" ) ;
}
}
} ) ;
} ) ;
} ;
AzureIdentityCredentialAdapter . prototype . signRequest = function ( webResource ) {
return tslib . _ _awaiter ( this , void 0 , void 0 , function ( ) {
var tokenResponse ;
return tslib . _ _generator ( this , function ( _a ) {
switch ( _a . label ) {
case 0 : return [ 4 /*yield*/ , this . getToken ( ) ] ;
case 1 :
tokenResponse = _a . sent ( ) ;
webResource . headers . set ( Constants . HeaderConstants . AUTHORIZATION , tokenResponse . tokenType + " " + tokenResponse . accessToken ) ;
return [ 2 /*return*/ , Promise . resolve ( webResource ) ] ;
}
} ) ;
} ) ;
} ;
return AzureIdentityCredentialAdapter ;
} ( ) ) ;
// 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 ( options . baseUri ) {
this . baseUri = options . baseUri ;
}
var serviceClientCredentials ;
if ( isTokenCredential ( credentials ) ) {
var scope = undefined ;
if ( ( options === null || options === void 0 ? void 0 : options . baseUri ) && azureResourceManagerEndpoints . includes ( options === null || options === void 0 ? void 0 : options . baseUri ) ) {
scope = options . baseUri + "/.default" ;
}
serviceClientCredentials = new AzureIdentityCredentialAdapter ( credentials , scope ) ;
}
else {
serviceClientCredentials = credentials ;
}
if ( serviceClientCredentials && ! serviceClientCredentials . signRequest ) {
throw new Error ( "credentials argument needs to implement signRequest method" ) ;
}
this . _withCredentials = options . withCredentials || false ;
this . _httpClient = options . httpClient || new NodeFetchHttpClient ( ) ;
this . _requestPolicyOptions = new RequestPolicyOptions ( options . httpPipelineLogger ) ;
var requestPolicyFactories ;
if ( Array . isArray ( options . requestPolicyFactories ) ) {
requestPolicyFactories = options . requestPolicyFactories ;
}
else {
requestPolicyFactories = createDefaultRequestPolicyFactories ( serviceClientCredentials , 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 ( isWebResourceLike ( options ) ) {
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 if ( queryParameter . collectionFormat === exports . QueryCollectionFormat . Ssv ||
queryParameter . collectionFormat === exports . QueryCollectionFormat . Tsv ) {
queryParameterValue = queryParameterValue . join ( queryParameter . collectionFormat ) ;
}
}
if ( ! queryParameter . skipEncoding ) {
if ( Array . isArray ( queryParameterValue ) ) {
for ( var index in queryParameterValue ) {
if ( queryParameterValue [ index ] !== undefined &&
queryParameterValue [ index ] !== null ) {
queryParameterValue [ index ] = encodeURIComponent ( queryParameterValue [ index ] ) ;
}
}
}
else {
queryParameterValue = encodeURIComponent ( queryParameterValue ) ;
}
}
if ( queryParameter . collectionFormat != undefined &&
queryParameter . collectionFormat !== exports . QueryCollectionFormat . Multi &&
queryParameter . collectionFormat !== exports . QueryCollectionFormat . Ssv &&
queryParameter . collectionFormat !== exports . QueryCollectionFormat . Tsv ) {
queryParameterValue = queryParameterValue . join ( queryParameter . collectionFormat ) ;
}
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 } ) ) ;
}
var redirectOptions = tslib . _ _assign ( tslib . _ _assign ( { } , DefaultRedirectOptions ) , options . redirectOptions ) ;
if ( redirectOptions . handleRedirects ) {
factories . push ( redirectPolicy ( redirectOptions . maxRetries ) ) ;
}
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 ) ) ;
}
if ( options . agentSettings ) {
factories . push ( agentPolicy ( options . agentSettings ) ) ;
}
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 ( tslib . _ _assign ( tslib . _ _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 ) {
// We're expecting a sequece(array) make sure that the response body is in the
// correct format, if not make it an empty array []
var parsedBody = Array . isArray ( _response . parsedBody ) ? _response . parsedBody : [ ] ;
var arrayResponse = tslib . _ _spreadArrays ( parsedBody ) ;
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 ( tslib . _ _assign ( tslib . _ _assign ( { } , parsedHeaders ) , _response . parsedBody ) ) ;
}
}
if ( bodyMapper ||
_response . request . method === "HEAD" ||
isPrimitiveType ( _response . parsedBody ) ) {
// primitive body types and HEAD booleans
return addOperationResponse ( tslib . _ _assign ( tslib . _ _assign ( { } , parsedHeaders ) , { body : _response . parsedBody } ) ) ;
}
return addOperationResponse ( tslib . _ _assign ( tslib . _ _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 ) {
tslib . _ _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$1 = "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$1 ; }
this . authorizationScheme = DEFAULT _AUTHORIZATION _SCHEME$1 ;
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 { WebResourceLike } webResource The WebResourceLike to be signed .
* @ return { Promise < WebResourceLike > } 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$2 = "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$2 ; }
this . authorizationScheme = DEFAULT _AUTHORIZATION _SCHEME$2 ;
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 { WebResourceLike } webResource The WebResourceLike to be signed .
* @ returns { Promise < WebResourceLike > } 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 ) {
tslib . _ _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 ) {
tslib . _ _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 ) ) ;
exports . ApiKeyCredentials = ApiKeyCredentials ;
exports . AzureIdentityCredentialAdapter = AzureIdentityCredentialAdapter ;
exports . BaseRequestPolicy = BaseRequestPolicy ;
exports . BasicAuthenticationCredentials = BasicAuthenticationCredentials ;
exports . Constants = Constants ;
exports . DefaultHttpClient = NodeFetchHttpClient ;
exports . DomainCredentials = DomainCredentials ;
exports . HttpHeaders = HttpHeaders ;
exports . MapperType = MapperType ;
exports . RequestPolicyOptions = RequestPolicyOptions ;
exports . RestError = RestError ;
exports . Serializer = Serializer ;
exports . ServiceClient = ServiceClient ;
exports . TokenCredentials = TokenCredentials ;
exports . TopicCredentials = TopicCredentials ;
exports . URLBuilder = URLBuilder ;
exports . URLQuery = URLQuery ;
exports . WebResource = WebResource ;
exports . agentPolicy = agentPolicy ;
exports . applyMixins = applyMixins ;
exports . delay = delay ;
exports . deserializationPolicy = deserializationPolicy ;
exports . deserializeResponseBody = deserializeResponseBody ;
exports . encodeUri = encodeUri ;
exports . executePromisesSequentially = executePromisesSequentially ;
exports . exponentialRetryPolicy = exponentialRetryPolicy ;
exports . flattenResponse = flattenResponse ;
exports . generateClientRequestIdPolicy = generateClientRequestIdPolicy ;
exports . generateUuid = generateUuid ;
exports . getDefaultProxySettings = getDefaultProxySettings ;
exports . getDefaultUserAgentValue = getDefaultUserAgentValue ;
exports . isDuration = isDuration ;
exports . isNode = isNode ;
exports . isValidUuid = isValidUuid ;
exports . logPolicy = logPolicy ;
exports . promiseToCallback = promiseToCallback ;
exports . promiseToServiceCallback = promiseToServiceCallback ;
exports . proxyPolicy = proxyPolicy ;
exports . redirectPolicy = redirectPolicy ;
exports . serializeObject = serializeObject ;
exports . signingPolicy = signingPolicy ;
exports . stripRequest = stripRequest ;
exports . stripResponse = stripResponse ;
exports . systemErrorRetryPolicy = systemErrorRetryPolicy ;
exports . throttlingRetryPolicy = throttlingRetryPolicy ;
exports . userAgentPolicy = userAgentPolicy ;
//# sourceMappingURL=msRest.node.js.map