@typespec/ts-http-runtime 1.0.0-alpha.20231023.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/dist/index.js +3509 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist-esm/src/abort-controller/AbortError.js +27 -0
  6. package/dist-esm/src/abort-controller/AbortError.js.map +1 -0
  7. package/dist-esm/src/abort-controller/AbortSignalLike.js +4 -0
  8. package/dist-esm/src/abort-controller/AbortSignalLike.js.map +1 -0
  9. package/dist-esm/src/accessTokenCache.js +32 -0
  10. package/dist-esm/src/accessTokenCache.js.map +1 -0
  11. package/dist-esm/src/auth/keyCredential.js +4 -0
  12. package/dist-esm/src/auth/keyCredential.js.map +1 -0
  13. package/dist-esm/src/auth/tokenCredential.js +19 -0
  14. package/dist-esm/src/auth/tokenCredential.js.map +1 -0
  15. package/dist-esm/src/client/apiVersionPolicy.js +23 -0
  16. package/dist-esm/src/client/apiVersionPolicy.js.map +1 -0
  17. package/dist-esm/src/client/clientHelpers.js +52 -0
  18. package/dist-esm/src/client/clientHelpers.js.map +1 -0
  19. package/dist-esm/src/client/common.js +4 -0
  20. package/dist-esm/src/client/common.js.map +1 -0
  21. package/dist-esm/src/client/getClient.js +86 -0
  22. package/dist-esm/src/client/getClient.js.map +1 -0
  23. package/dist-esm/src/client/helpers/getBinaryBody.js +13 -0
  24. package/dist-esm/src/client/helpers/getBinaryBody.js.map +1 -0
  25. package/dist-esm/src/client/helpers/isReadableStream.browser.js +12 -0
  26. package/dist-esm/src/client/helpers/isReadableStream.browser.js.map +1 -0
  27. package/dist-esm/src/client/helpers/isReadableStream.js +10 -0
  28. package/dist-esm/src/client/helpers/isReadableStream.js.map +1 -0
  29. package/dist-esm/src/client/keyCredentialAuthenticationPolicy.js +16 -0
  30. package/dist-esm/src/client/keyCredentialAuthenticationPolicy.js.map +1 -0
  31. package/dist-esm/src/client/operationOptionHelpers.js +22 -0
  32. package/dist-esm/src/client/operationOptionHelpers.js.map +1 -0
  33. package/dist-esm/src/client/restError.js +27 -0
  34. package/dist-esm/src/client/restError.js.map +1 -0
  35. package/dist-esm/src/client/sendRequest.js +195 -0
  36. package/dist-esm/src/client/sendRequest.js.map +1 -0
  37. package/dist-esm/src/client/urlHelpers.js +100 -0
  38. package/dist-esm/src/client/urlHelpers.js.map +1 -0
  39. package/dist-esm/src/constants.js +5 -0
  40. package/dist-esm/src/constants.js.map +1 -0
  41. package/dist-esm/src/createPipelineFromOptions.js +39 -0
  42. package/dist-esm/src/createPipelineFromOptions.js.map +1 -0
  43. package/dist-esm/src/defaultHttpClient.browser.js +10 -0
  44. package/dist-esm/src/defaultHttpClient.browser.js.map +1 -0
  45. package/dist-esm/src/defaultHttpClient.js +10 -0
  46. package/dist-esm/src/defaultHttpClient.js.map +1 -0
  47. package/dist-esm/src/defaultHttpClient.native.js +10 -0
  48. package/dist-esm/src/defaultHttpClient.native.js.map +1 -0
  49. package/dist-esm/src/fetchHttpClient.js +268 -0
  50. package/dist-esm/src/fetchHttpClient.js.map +1 -0
  51. package/dist-esm/src/httpHeaders.js +89 -0
  52. package/dist-esm/src/httpHeaders.js.map +1 -0
  53. package/dist-esm/src/index.js +41 -0
  54. package/dist-esm/src/index.js.map +1 -0
  55. package/dist-esm/src/interfaces.js +4 -0
  56. package/dist-esm/src/interfaces.js.map +1 -0
  57. package/dist-esm/src/log.js +5 -0
  58. package/dist-esm/src/log.js.map +1 -0
  59. package/dist-esm/src/logger/debug.js +93 -0
  60. package/dist-esm/src/logger/debug.js.map +1 -0
  61. package/dist-esm/src/logger/log.browser.js +23 -0
  62. package/dist-esm/src/logger/log.browser.js.map +1 -0
  63. package/dist-esm/src/logger/log.js +8 -0
  64. package/dist-esm/src/logger/log.js.map +1 -0
  65. package/dist-esm/src/logger/logger.js +99 -0
  66. package/dist-esm/src/logger/logger.js.map +1 -0
  67. package/dist-esm/src/nodeHttpClient.js +332 -0
  68. package/dist-esm/src/nodeHttpClient.js.map +1 -0
  69. package/dist-esm/src/pipeline.js +262 -0
  70. package/dist-esm/src/pipeline.js.map +1 -0
  71. package/dist-esm/src/pipelineRequest.js +35 -0
  72. package/dist-esm/src/pipelineRequest.js.map +1 -0
  73. package/dist-esm/src/policies/bearerTokenAuthenticationPolicy.js +108 -0
  74. package/dist-esm/src/policies/bearerTokenAuthenticationPolicy.js.map +1 -0
  75. package/dist-esm/src/policies/decompressResponsePolicy.browser.js +14 -0
  76. package/dist-esm/src/policies/decompressResponsePolicy.browser.js.map +1 -0
  77. package/dist-esm/src/policies/decompressResponsePolicy.js +23 -0
  78. package/dist-esm/src/policies/decompressResponsePolicy.js.map +1 -0
  79. package/dist-esm/src/policies/defaultRetryPolicy.js +26 -0
  80. package/dist-esm/src/policies/defaultRetryPolicy.js.map +1 -0
  81. package/dist-esm/src/policies/exponentialRetryPolicy.js +22 -0
  82. package/dist-esm/src/policies/exponentialRetryPolicy.js.map +1 -0
  83. package/dist-esm/src/policies/formDataPolicy.browser.js +43 -0
  84. package/dist-esm/src/policies/formDataPolicy.browser.js.map +1 -0
  85. package/dist-esm/src/policies/formDataPolicy.js +79 -0
  86. package/dist-esm/src/policies/formDataPolicy.js.map +1 -0
  87. package/dist-esm/src/policies/logPolicy.js +34 -0
  88. package/dist-esm/src/policies/logPolicy.js.map +1 -0
  89. package/dist-esm/src/policies/proxyPolicy.browser.js +27 -0
  90. package/dist-esm/src/policies/proxyPolicy.browser.js.map +1 -0
  91. package/dist-esm/src/policies/proxyPolicy.js +190 -0
  92. package/dist-esm/src/policies/proxyPolicy.js.map +1 -0
  93. package/dist-esm/src/policies/redirectPolicy.js +52 -0
  94. package/dist-esm/src/policies/redirectPolicy.js.map +1 -0
  95. package/dist-esm/src/policies/retryPolicy.js +106 -0
  96. package/dist-esm/src/policies/retryPolicy.js.map +1 -0
  97. package/dist-esm/src/policies/systemErrorRetryPolicy.js +27 -0
  98. package/dist-esm/src/policies/systemErrorRetryPolicy.js.map +1 -0
  99. package/dist-esm/src/policies/throttlingRetryPolicy.js +29 -0
  100. package/dist-esm/src/policies/throttlingRetryPolicy.js.map +1 -0
  101. package/dist-esm/src/policies/tlsPolicy.js +22 -0
  102. package/dist-esm/src/policies/tlsPolicy.js.map +1 -0
  103. package/dist-esm/src/policies/tracingPolicy.js +120 -0
  104. package/dist-esm/src/policies/tracingPolicy.js.map +1 -0
  105. package/dist-esm/src/policies/userAgentPolicy.js +26 -0
  106. package/dist-esm/src/policies/userAgentPolicy.js.map +1 -0
  107. package/dist-esm/src/restError.js +48 -0
  108. package/dist-esm/src/restError.js.map +1 -0
  109. package/dist-esm/src/retryStrategies/exponentialRetryStrategy.js +70 -0
  110. package/dist-esm/src/retryStrategies/exponentialRetryStrategy.js.map +1 -0
  111. package/dist-esm/src/retryStrategies/retryStrategy.js +4 -0
  112. package/dist-esm/src/retryStrategies/retryStrategy.js.map +1 -0
  113. package/dist-esm/src/retryStrategies/throttlingRetryStrategy.js +74 -0
  114. package/dist-esm/src/retryStrategies/throttlingRetryStrategy.js.map +1 -0
  115. package/dist-esm/src/tracing/instrumenter.js +61 -0
  116. package/dist-esm/src/tracing/instrumenter.js.map +1 -0
  117. package/dist-esm/src/tracing/interfaces.js +4 -0
  118. package/dist-esm/src/tracing/interfaces.js.map +1 -0
  119. package/dist-esm/src/tracing/tracingClient.js +74 -0
  120. package/dist-esm/src/tracing/tracingClient.js.map +1 -0
  121. package/dist-esm/src/tracing/tracingContext.js +47 -0
  122. package/dist-esm/src/tracing/tracingContext.js.map +1 -0
  123. package/dist-esm/src/util/aborterUtils.js +21 -0
  124. package/dist-esm/src/util/aborterUtils.js.map +1 -0
  125. package/dist-esm/src/util/base64.browser.js +35 -0
  126. package/dist-esm/src/util/base64.browser.js.map +1 -0
  127. package/dist-esm/src/util/bytesEncoding.browser.js +82 -0
  128. package/dist-esm/src/util/bytesEncoding.browser.js.map +1 -0
  129. package/dist-esm/src/util/bytesEncoding.js +77 -0
  130. package/dist-esm/src/util/bytesEncoding.js.map +1 -0
  131. package/dist-esm/src/util/checkEnvironment.js +36 -0
  132. package/dist-esm/src/util/checkEnvironment.js.map +1 -0
  133. package/dist-esm/src/util/createAbortablePromise.js +42 -0
  134. package/dist-esm/src/util/createAbortablePromise.js.map +1 -0
  135. package/dist-esm/src/util/delay.js +22 -0
  136. package/dist-esm/src/util/delay.js.map +1 -0
  137. package/dist-esm/src/util/error.js +42 -0
  138. package/dist-esm/src/util/error.js.map +1 -0
  139. package/dist-esm/src/util/helpers.js +58 -0
  140. package/dist-esm/src/util/helpers.js.map +1 -0
  141. package/dist-esm/src/util/hex.js +21 -0
  142. package/dist-esm/src/util/hex.js.map +1 -0
  143. package/dist-esm/src/util/inspect.browser.js +4 -0
  144. package/dist-esm/src/util/inspect.browser.js.map +1 -0
  145. package/dist-esm/src/util/inspect.js +5 -0
  146. package/dist-esm/src/util/inspect.js.map +1 -0
  147. package/dist-esm/src/util/object.js +14 -0
  148. package/dist-esm/src/util/object.js.map +1 -0
  149. package/dist-esm/src/util/random.js +21 -0
  150. package/dist-esm/src/util/random.js.map +1 -0
  151. package/dist-esm/src/util/sanitizer.js +139 -0
  152. package/dist-esm/src/util/sanitizer.js.map +1 -0
  153. package/dist-esm/src/util/sha256.browser.js +61 -0
  154. package/dist-esm/src/util/sha256.browser.js.map +1 -0
  155. package/dist-esm/src/util/sha256.js +22 -0
  156. package/dist-esm/src/util/sha256.js.map +1 -0
  157. package/dist-esm/src/util/tokenCycler.js +149 -0
  158. package/dist-esm/src/util/tokenCycler.js.map +1 -0
  159. package/dist-esm/src/util/typeGuards.js +34 -0
  160. package/dist-esm/src/util/typeGuards.js.map +1 -0
  161. package/dist-esm/src/util/userAgent.js +30 -0
  162. package/dist-esm/src/util/userAgent.js.map +1 -0
  163. package/dist-esm/src/util/userAgentPlatform.browser.js +20 -0
  164. package/dist-esm/src/util/userAgentPlatform.browser.js.map +1 -0
  165. package/dist-esm/src/util/userAgentPlatform.js +17 -0
  166. package/dist-esm/src/util/userAgentPlatform.js.map +1 -0
  167. package/dist-esm/src/util/userAgentPlatform.native.js +24 -0
  168. package/dist-esm/src/util/userAgentPlatform.native.js.map +1 -0
  169. package/dist-esm/src/util/utf8.browser.js +26 -0
  170. package/dist-esm/src/util/utf8.browser.js.map +1 -0
  171. package/dist-esm/src/util/uuidUtils.browser.js +17 -0
  172. package/dist-esm/src/util/uuidUtils.browser.js.map +1 -0
  173. package/dist-esm/src/util/uuidUtils.js +22 -0
  174. package/dist-esm/src/util/uuidUtils.js.map +1 -0
  175. package/dist-esm/src/util/uuidUtils.native.js +43 -0
  176. package/dist-esm/src/util/uuidUtils.native.js.map +1 -0
  177. package/dist-esm/src/xhrHttpClient.js +177 -0
  178. package/dist-esm/src/xhrHttpClient.js.map +1 -0
  179. package/package.json +134 -0
  180. package/ts-http-runtime.shims.d.ts +12 -0
  181. package/types/ts-http-runtime.d.ts +2062 -0
@@ -0,0 +1,20 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /*
4
+ * NOTE: When moving this file, please update "browser" section in package.json.
5
+ */
6
+ /**
7
+ * @internal
8
+ */
9
+ export function getHeaderName() {
10
+ return "x-ms-useragent";
11
+ }
12
+ /**
13
+ * @internal
14
+ */
15
+ export function setPlatformSpecificData(map) {
16
+ var _a, _b, _c;
17
+ const localNavigator = globalThis.navigator;
18
+ map.set("OS", ((_c = (_b = (_a = localNavigator === null || localNavigator === void 0 ? void 0 : localNavigator.userAgentData) === null || _a === void 0 ? void 0 : _a.platform) !== null && _b !== void 0 ? _b : localNavigator === null || localNavigator === void 0 ? void 0 : localNavigator.platform) !== null && _c !== void 0 ? _c : "unknown").replace(" ", ""));
19
+ }
20
+ //# sourceMappingURL=userAgentPlatform.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userAgentPlatform.browser.js","sourceRoot":"","sources":["../../../src/util/userAgentPlatform.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAQD;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAwB;;IAC9D,MAAM,cAAc,GAAG,UAAU,CAAC,SAAwB,CAAC;IAC3D,GAAG,CAAC,GAAG,CACL,IAAI,EACJ,CAAC,MAAA,MAAA,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,aAAa,0CAAE,QAAQ,mCAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,QAAQ,mCAAI,SAAS,CAAC,CAAC,OAAO,CACxF,GAAG,EACH,EAAE,CACH,CACF,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/*\n * NOTE: When moving this file, please update \"browser\" section in package.json.\n */\n\n/**\n * @internal\n */\nexport function getHeaderName(): string {\n return \"x-ms-useragent\";\n}\n\ninterface NavigatorEx extends Navigator {\n userAgentData?: {\n platform?: string;\n };\n}\n\n/**\n * @internal\n */\nexport function setPlatformSpecificData(map: Map<string, string>): void {\n const localNavigator = globalThis.navigator as NavigatorEx;\n map.set(\n \"OS\",\n (localNavigator?.userAgentData?.platform ?? localNavigator?.platform ?? \"unknown\").replace(\n \" \",\n \"\"\n )\n );\n}\n"]}
@@ -0,0 +1,17 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import * as os from "os";
4
+ /**
5
+ * @internal
6
+ */
7
+ export function getHeaderName() {
8
+ return "User-Agent";
9
+ }
10
+ /**
11
+ * @internal
12
+ */
13
+ export function setPlatformSpecificData(map) {
14
+ map.set("Node", process.version);
15
+ map.set("OS", `(${os.arch()}-${os.type()}-${os.release()})`);
16
+ }
17
+ //# sourceMappingURL=userAgentPlatform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userAgentPlatform.js","sourceRoot":"","sources":["../../../src/util/userAgentPlatform.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAwB;IAC9D,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport * as os from \"os\";\n\n/**\n * @internal\n */\nexport function getHeaderName(): string {\n return \"User-Agent\";\n}\n\n/**\n * @internal\n */\nexport function setPlatformSpecificData(map: Map<string, string>): void {\n map.set(\"Node\", process.version);\n map.set(\"OS\", `(${os.arch()}-${os.type()}-${os.release()})`);\n}\n"]}
@@ -0,0 +1,24 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /*
4
+ * NOTE: When moving this file, please update "react-native" section in package.json.
5
+ */
6
+ const { Platform } = require("react-native"); // eslint-disable-line import/no-extraneous-dependencies, @typescript-eslint/no-require-imports
7
+ /**
8
+ * @internal
9
+ */
10
+ export function getHeaderName() {
11
+ return "x-ms-useragent";
12
+ }
13
+ /**
14
+ * @internal
15
+ */
16
+ export function setPlatformSpecificData(map) {
17
+ var _a;
18
+ if ((_a = Platform.constants) === null || _a === void 0 ? void 0 : _a.reactNativeVersion) {
19
+ const { major, minor, patch } = Platform.constants.reactNativeVersion;
20
+ map.set("react-native", `${major}.${minor}.${patch}`);
21
+ }
22
+ map.set("OS", `${Platform.OS}-${Platform.Version}`);
23
+ }
24
+ //# sourceMappingURL=userAgentPlatform.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userAgentPlatform.native.js","sourceRoot":"","sources":["../../../src/util/userAgentPlatform.native.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AACH,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,+FAA+F;AAE7I;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAwB;;IAC9D,IAAI,MAAA,QAAQ,CAAC,SAAS,0CAAE,kBAAkB,EAAE;QAC1C,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC;QACtE,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;KACvD;IACD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;AACtD,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/*\n * NOTE: When moving this file, please update \"react-native\" section in package.json.\n */\nconst { Platform } = require(\"react-native\"); // eslint-disable-line import/no-extraneous-dependencies, @typescript-eslint/no-require-imports\n\n/**\n * @internal\n */\nexport function getHeaderName(): string {\n return \"x-ms-useragent\";\n}\n\n/**\n * @internal\n */\nexport function setPlatformSpecificData(map: Map<string, string>): void {\n if (Platform.constants?.reactNativeVersion) {\n const { major, minor, patch } = Platform.constants.reactNativeVersion;\n map.set(\"react-native\", `${major}.${minor}.${patch}`);\n }\n map.set(\"OS\", `${Platform.OS}-${Platform.Version}`);\n}\n"]}
@@ -0,0 +1,26 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ let encoder;
4
+ /**
5
+ * Returns a cached TextEncoder.
6
+ * @internal
7
+ */
8
+ function getTextEncoder() {
9
+ if (encoder) {
10
+ return encoder;
11
+ }
12
+ if (typeof TextEncoder === "undefined") {
13
+ throw new Error(`Your browser environment is missing "TextEncoder".`);
14
+ }
15
+ encoder = new TextEncoder();
16
+ return encoder;
17
+ }
18
+ /**
19
+ * Converts a utf8 string into a byte array.
20
+ * @param content - The utf8 string to convert.
21
+ * @internal
22
+ */
23
+ export function utf8ToBytes(content) {
24
+ return getTextEncoder().encode(content);
25
+ }
26
+ //# sourceMappingURL=utf8.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utf8.browser.js","sourceRoot":"","sources":["../../../src/util/utf8.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAalC,IAAI,OAAgC,CAAC;AAErC;;;GAGG;AACH,SAAS,cAAc;IACrB,IAAI,OAAO,EAAE;QACX,OAAO,OAAO,CAAC;KAChB;IAED,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;KACvE;IAED,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAC5B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,cAAc,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// stubs for browser TextEncoder\ninterface TextEncoder {\n encode(input?: string): Uint8Array;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\ndeclare const TextEncoder: {\n prototype: TextEncoder;\n new (): TextEncoder;\n};\n\nlet encoder: TextEncoder | undefined;\n\n/**\n * Returns a cached TextEncoder.\n * @internal\n */\nfunction getTextEncoder(): TextEncoder {\n if (encoder) {\n return encoder;\n }\n\n if (typeof TextEncoder === \"undefined\") {\n throw new Error(`Your browser environment is missing \"TextEncoder\".`);\n }\n\n encoder = new TextEncoder();\n return encoder;\n}\n\n/**\n * Converts a utf8 string into a byte array.\n * @param content - The utf8 string to convert.\n * @internal\n */\nexport function utf8ToBytes(content: string): Uint8Array {\n return getTextEncoder().encode(content);\n}\n"]}
@@ -0,0 +1,17 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ var _a;
4
+ import { generateUUID } from "./uuidUtils.native";
5
+ // NOTE: This could be undefined if not used in a secure context
6
+ const uuidFunction = typeof ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.crypto) === null || _a === void 0 ? void 0 : _a.randomUUID) === "function"
7
+ ? globalThis.crypto.randomUUID.bind(globalThis.crypto)
8
+ : generateUUID;
9
+ /**
10
+ * Generated Universally Unique Identifier
11
+ *
12
+ * @returns RFC4122 v4 UUID.
13
+ */
14
+ export function randomUUID() {
15
+ return uuidFunction();
16
+ }
17
+ //# sourceMappingURL=uuidUtils.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuidUtils.browser.js","sourceRoot":"","sources":["../../../src/util/uuidUtils.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,gEAAgE;AAChE,MAAM,YAAY,GAChB,OAAO,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,UAAU,CAAA,KAAK,UAAU;IAClD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IACtD,CAAC,CAAC,YAAY,CAAC;AAEnB;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { generateUUID } from \"./uuidUtils.native\";\n\ninterface Crypto {\n randomUUID(): string;\n}\n\ndeclare const globalThis: {\n crypto: Crypto;\n};\n\n// NOTE: This could be undefined if not used in a secure context\nconst uuidFunction =\n typeof globalThis?.crypto?.randomUUID === \"function\"\n ? globalThis.crypto.randomUUID.bind(globalThis.crypto)\n : generateUUID;\n\n/**\n * Generated Universally Unique Identifier\n *\n * @returns RFC4122 v4 UUID.\n */\nexport function randomUUID(): string {\n return uuidFunction();\n}\n"]}
@@ -0,0 +1,22 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ var _a;
4
+ import { randomUUID as v4RandomUUID } from "crypto";
5
+ import { generateUUID } from "./uuidUtils.native";
6
+ // NOTE: This is a workaround until we can use `globalThis.crypto.randomUUID` in Node.js 19+.
7
+ let uuidFunction = typeof ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.crypto) === null || _a === void 0 ? void 0 : _a.randomUUID) === "function"
8
+ ? globalThis.crypto.randomUUID.bind(globalThis.crypto)
9
+ : v4RandomUUID;
10
+ // Not defined in earlier versions of Node.js 14
11
+ if (!uuidFunction) {
12
+ uuidFunction = generateUUID;
13
+ }
14
+ /**
15
+ * Generated Universally Unique Identifier
16
+ *
17
+ * @returns RFC4122 v4 UUID.
18
+ */
19
+ export function randomUUID() {
20
+ return uuidFunction();
21
+ }
22
+ //# sourceMappingURL=uuidUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuidUtils.js","sourceRoot":"","sources":["../../../src/util/uuidUtils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;AAElC,OAAO,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,6FAA6F;AAC7F,IAAI,YAAY,GACd,OAAO,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,UAAU,CAAA,KAAK,UAAU;IAClD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IACtD,CAAC,CAAC,YAAY,CAAC;AAEnB,gDAAgD;AAChD,IAAI,CAAC,YAAY,EAAE;IACjB,YAAY,GAAG,YAAY,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { randomUUID as v4RandomUUID } from \"crypto\";\nimport { generateUUID } from \"./uuidUtils.native\";\n\ninterface Crypto {\n randomUUID(): string;\n}\n\ndeclare const globalThis: {\n crypto: Crypto;\n};\n\n// NOTE: This is a workaround until we can use `globalThis.crypto.randomUUID` in Node.js 19+.\nlet uuidFunction =\n typeof globalThis?.crypto?.randomUUID === \"function\"\n ? globalThis.crypto.randomUUID.bind(globalThis.crypto)\n : v4RandomUUID;\n\n// Not defined in earlier versions of Node.js 14\nif (!uuidFunction) {\n uuidFunction = generateUUID;\n}\n\n/**\n * Generated Universally Unique Identifier\n *\n * @returns RFC4122 v4 UUID.\n */\nexport function randomUUID(): string {\n return uuidFunction();\n}\n"]}
@@ -0,0 +1,43 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /*
4
+ * NOTE: When moving this file, please update "react-native" section in package.json.
5
+ */
6
+ /**
7
+ * Generated Universally Unique Identifier
8
+ *
9
+ * @returns RFC4122 v4 UUID.
10
+ */
11
+ export function generateUUID() {
12
+ let uuid = "";
13
+ for (let i = 0; i < 32; i++) {
14
+ // Generate a random number between 0 and 15
15
+ const randomNumber = Math.floor(Math.random() * 16);
16
+ // Set the UUID version to 4 in the 13th position
17
+ if (i === 12) {
18
+ uuid += "4";
19
+ }
20
+ else if (i === 16) {
21
+ // Set the UUID variant to "10" in the 17th position
22
+ uuid += (randomNumber & 0x3) | 0x8;
23
+ }
24
+ else {
25
+ // Add a random hexadecimal digit to the UUID string
26
+ uuid += randomNumber.toString(16);
27
+ }
28
+ // Add hyphens to the UUID string at the appropriate positions
29
+ if (i === 7 || i === 11 || i === 15 || i === 19) {
30
+ uuid += "-";
31
+ }
32
+ }
33
+ return uuid;
34
+ }
35
+ /**
36
+ * Generated Universally Unique Identifier
37
+ *
38
+ * @returns RFC4122 v4 UUID.
39
+ */
40
+ export function randomUUID() {
41
+ return generateUUID();
42
+ }
43
+ //# sourceMappingURL=uuidUtils.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuidUtils.native.js","sourceRoot":"","sources":["../../../src/util/uuidUtils.native.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AAEH;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;QAC3B,4CAA4C;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,iDAAiD;QACjD,IAAI,CAAC,KAAK,EAAE,EAAE;YACZ,IAAI,IAAI,GAAG,CAAC;SACb;aAAM,IAAI,CAAC,KAAK,EAAE,EAAE;YACnB,oDAAoD;YACpD,IAAI,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;SACpC;aAAM;YACL,oDAAoD;YACpD,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SACnC;QACD,8DAA8D;QAC9D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;YAC/C,IAAI,IAAI,GAAG,CAAC;SACb;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/*\n * NOTE: When moving this file, please update \"react-native\" section in package.json.\n */\n\n/**\n * Generated Universally Unique Identifier\n *\n * @returns RFC4122 v4 UUID.\n */\nexport function generateUUID(): string {\n let uuid = \"\";\n for (let i = 0; i < 32; i++) {\n // Generate a random number between 0 and 15\n const randomNumber = Math.floor(Math.random() * 16);\n // Set the UUID version to 4 in the 13th position\n if (i === 12) {\n uuid += \"4\";\n } else if (i === 16) {\n // Set the UUID variant to \"10\" in the 17th position\n uuid += (randomNumber & 0x3) | 0x8;\n } else {\n // Add a random hexadecimal digit to the UUID string\n uuid += randomNumber.toString(16);\n }\n // Add hyphens to the UUID string at the appropriate positions\n if (i === 7 || i === 11 || i === 15 || i === 19) {\n uuid += \"-\";\n }\n }\n return uuid;\n}\n\n/**\n * Generated Universally Unique Identifier\n *\n * @returns RFC4122 v4 UUID.\n */\nexport function randomUUID(): string {\n return generateUUID();\n}\n"]}
@@ -0,0 +1,177 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { AbortError } from "./abort-controller/AbortError";
4
+ import { createHttpHeaders } from "./httpHeaders";
5
+ import { RestError } from "./restError";
6
+ function isNodeReadableStream(body) {
7
+ return body && typeof body.pipe === "function";
8
+ }
9
+ /**
10
+ * Checks if the body is a ReadableStream supported by browsers
11
+ */
12
+ function isReadableStream(body) {
13
+ return Boolean(body &&
14
+ typeof body.getReader === "function" &&
15
+ typeof body.tee === "function");
16
+ }
17
+ /**
18
+ * A HttpClient implementation that uses XMLHttpRequest to send HTTP requests.
19
+ * @internal
20
+ */
21
+ class XhrHttpClient {
22
+ /**
23
+ * Makes a request over an underlying transport layer and returns the response.
24
+ * @param request - The request to be made.
25
+ */
26
+ async sendRequest(request) {
27
+ var _a;
28
+ const url = new URL(request.url);
29
+ const isInsecure = url.protocol !== "https:";
30
+ if (isInsecure && !request.allowInsecureConnection) {
31
+ throw new Error(`Cannot connect to ${request.url} while allowInsecureConnection is false.`);
32
+ }
33
+ const xhr = new XMLHttpRequest();
34
+ if (request.proxySettings) {
35
+ throw new Error("HTTP proxy is not supported in browser environment");
36
+ }
37
+ const abortSignal = request.abortSignal;
38
+ if (abortSignal) {
39
+ if (abortSignal.aborted) {
40
+ throw new AbortError("The operation was aborted.");
41
+ }
42
+ const listener = () => {
43
+ xhr.abort();
44
+ };
45
+ abortSignal.addEventListener("abort", listener);
46
+ xhr.addEventListener("readystatechange", () => {
47
+ if (xhr.readyState === XMLHttpRequest.DONE) {
48
+ abortSignal.removeEventListener("abort", listener);
49
+ }
50
+ });
51
+ }
52
+ addProgressListener(xhr.upload, request.onUploadProgress);
53
+ addProgressListener(xhr, request.onDownloadProgress);
54
+ xhr.open(request.method, request.url);
55
+ xhr.timeout = request.timeout;
56
+ xhr.withCredentials = request.withCredentials;
57
+ for (const [name, value] of request.headers) {
58
+ xhr.setRequestHeader(name, value);
59
+ }
60
+ xhr.responseType = ((_a = request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.size) ? "blob" : "text";
61
+ const body = typeof request.body === "function" ? request.body() : request.body;
62
+ if (isNodeReadableStream(body) || isReadableStream(body)) {
63
+ throw new Error("streams are not supported in XhrHttpClient.");
64
+ }
65
+ xhr.send(body === undefined ? null : body);
66
+ if (xhr.responseType === "blob") {
67
+ return new Promise((resolve, reject) => {
68
+ handleBlobResponse(xhr, request, resolve, reject);
69
+ rejectOnTerminalEvent(request, xhr, reject);
70
+ });
71
+ }
72
+ else {
73
+ return new Promise(function (resolve, reject) {
74
+ xhr.addEventListener("load", () => resolve({
75
+ request,
76
+ status: xhr.status,
77
+ headers: parseHeaders(xhr),
78
+ bodyAsText: xhr.responseText,
79
+ }));
80
+ rejectOnTerminalEvent(request, xhr, reject);
81
+ });
82
+ }
83
+ }
84
+ }
85
+ function handleBlobResponse(xhr, request, res, rej) {
86
+ xhr.addEventListener("readystatechange", () => {
87
+ var _a, _b;
88
+ // Resolve as soon as headers are loaded
89
+ if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
90
+ if (
91
+ // Value of POSITIVE_INFINITY in streamResponseStatusCodes is considered as any status code
92
+ ((_a = request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(Number.POSITIVE_INFINITY)) ||
93
+ ((_b = request.streamResponseStatusCodes) === null || _b === void 0 ? void 0 : _b.has(xhr.status))) {
94
+ const blobBody = new Promise((resolve, reject) => {
95
+ xhr.addEventListener("load", () => {
96
+ resolve(xhr.response);
97
+ });
98
+ rejectOnTerminalEvent(request, xhr, reject);
99
+ });
100
+ res({
101
+ request,
102
+ status: xhr.status,
103
+ headers: parseHeaders(xhr),
104
+ blobBody,
105
+ });
106
+ }
107
+ else {
108
+ xhr.addEventListener("load", () => {
109
+ // xhr.response is of Blob type if the request is sent with xhr.responseType === "blob"
110
+ // but the status code is not one of the stream response status codes,
111
+ // so treat it as text and convert from Blob to text
112
+ if (xhr.response) {
113
+ xhr.response
114
+ .text()
115
+ .then((text) => {
116
+ res({
117
+ request: request,
118
+ status: xhr.status,
119
+ headers: parseHeaders(xhr),
120
+ bodyAsText: text,
121
+ });
122
+ return;
123
+ })
124
+ .catch((e) => {
125
+ rej(e);
126
+ });
127
+ }
128
+ else {
129
+ res({
130
+ request,
131
+ status: xhr.status,
132
+ headers: parseHeaders(xhr),
133
+ });
134
+ }
135
+ });
136
+ }
137
+ }
138
+ });
139
+ }
140
+ function addProgressListener(xhr, listener) {
141
+ if (listener) {
142
+ xhr.addEventListener("progress", (rawEvent) => listener({
143
+ loadedBytes: rawEvent.loaded,
144
+ }));
145
+ }
146
+ }
147
+ function parseHeaders(xhr) {
148
+ const responseHeaders = createHttpHeaders();
149
+ const headerLines = xhr
150
+ .getAllResponseHeaders()
151
+ .trim()
152
+ .split(/[\r\n]+/);
153
+ for (const line of headerLines) {
154
+ const index = line.indexOf(":");
155
+ const headerName = line.slice(0, index);
156
+ const headerValue = line.slice(index + 2);
157
+ responseHeaders.set(headerName, headerValue);
158
+ }
159
+ return responseHeaders;
160
+ }
161
+ function rejectOnTerminalEvent(request, xhr, reject) {
162
+ xhr.addEventListener("error", () => reject(new RestError(`Failed to send request to ${request.url}`, {
163
+ code: RestError.REQUEST_SEND_ERROR,
164
+ request,
165
+ })));
166
+ const abortError = new AbortError("The operation was aborted.");
167
+ xhr.addEventListener("abort", () => reject(abortError));
168
+ xhr.addEventListener("timeout", () => reject(abortError));
169
+ }
170
+ /**
171
+ * Create a new HttpClient instance for the browser environment.
172
+ * @internal
173
+ */
174
+ export function createXhrHttpClient() {
175
+ return new XhrHttpClient();
176
+ }
177
+ //# sourceMappingURL=xhrHttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhrHttpClient.js","sourceRoot":"","sources":["../../src/xhrHttpClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AbortError } from \"./abort-controller/AbortError\";\nimport {\n HttpClient,\n HttpHeaders,\n PipelineRequest,\n PipelineResponse,\n TransferProgressEvent,\n} from \"./interfaces\";\nimport { createHttpHeaders } from \"./httpHeaders\";\nimport { RestError } from \"./restError\";\n\nfunction isNodeReadableStream(body: any): body is NodeJS.ReadableStream {\n return body && typeof body.pipe === \"function\";\n}\n\n/**\n * Checks if the body is a ReadableStream supported by browsers\n */\nfunction isReadableStream(body: unknown): body is ReadableStream {\n return Boolean(\n body &&\n typeof (body as ReadableStream).getReader === \"function\" &&\n typeof (body as ReadableStream).tee === \"function\"\n );\n}\n\n/**\n * A HttpClient implementation that uses XMLHttpRequest to send HTTP requests.\n * @internal\n */\nclass XhrHttpClient implements HttpClient {\n /**\n * Makes a request over an underlying transport layer and returns the response.\n * @param request - The request to be made.\n */\n public async sendRequest(request: PipelineRequest): Promise<PipelineResponse> {\n const url = new URL(request.url);\n const isInsecure = url.protocol !== \"https:\";\n\n if (isInsecure && !request.allowInsecureConnection) {\n throw new Error(`Cannot connect to ${request.url} while allowInsecureConnection is false.`);\n }\n\n const xhr = new XMLHttpRequest();\n\n if (request.proxySettings) {\n throw new Error(\"HTTP proxy is not supported in browser environment\");\n }\n\n const abortSignal = request.abortSignal;\n if (abortSignal) {\n if (abortSignal.aborted) {\n throw new AbortError(\"The operation was aborted.\");\n }\n\n const listener = (): void => {\n xhr.abort();\n };\n abortSignal.addEventListener(\"abort\", listener);\n xhr.addEventListener(\"readystatechange\", () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n abortSignal.removeEventListener(\"abort\", listener);\n }\n });\n }\n\n addProgressListener(xhr.upload, request.onUploadProgress);\n addProgressListener(xhr, request.onDownloadProgress);\n\n xhr.open(request.method, request.url);\n xhr.timeout = request.timeout;\n xhr.withCredentials = request.withCredentials;\n for (const [name, value] of request.headers) {\n xhr.setRequestHeader(name, value);\n }\n\n xhr.responseType = request.streamResponseStatusCodes?.size ? \"blob\" : \"text\";\n\n const body = typeof request.body === \"function\" ? request.body() : request.body;\n if (isNodeReadableStream(body) || isReadableStream(body)) {\n throw new Error(\"streams are not supported in XhrHttpClient.\");\n }\n\n xhr.send(body === undefined ? null : body);\n\n if (xhr.responseType === \"blob\") {\n return new Promise((resolve, reject) => {\n handleBlobResponse(xhr, request, resolve, reject);\n rejectOnTerminalEvent(request, xhr, reject);\n });\n } else {\n return new Promise(function (resolve, reject) {\n xhr.addEventListener(\"load\", () =>\n resolve({\n request,\n status: xhr.status,\n headers: parseHeaders(xhr),\n bodyAsText: xhr.responseText,\n })\n );\n rejectOnTerminalEvent(request, xhr, reject);\n });\n }\n }\n}\n\nfunction handleBlobResponse(\n xhr: XMLHttpRequest,\n request: PipelineRequest,\n res: (value: PipelineResponse | PromiseLike<PipelineResponse>) => void,\n rej: (reason?: any) => void\n): void {\n xhr.addEventListener(\"readystatechange\", () => {\n // Resolve as soon as headers are loaded\n if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {\n if (\n // Value of POSITIVE_INFINITY in streamResponseStatusCodes is considered as any status code\n request.streamResponseStatusCodes?.has(Number.POSITIVE_INFINITY) ||\n request.streamResponseStatusCodes?.has(xhr.status)\n ) {\n const blobBody = new Promise<Blob>((resolve, reject) => {\n xhr.addEventListener(\"load\", () => {\n resolve(xhr.response);\n });\n rejectOnTerminalEvent(request, xhr, reject);\n });\n res({\n request,\n status: xhr.status,\n headers: parseHeaders(xhr),\n blobBody,\n });\n } else {\n xhr.addEventListener(\"load\", () => {\n // xhr.response is of Blob type if the request is sent with xhr.responseType === \"blob\"\n // but the status code is not one of the stream response status codes,\n // so treat it as text and convert from Blob to text\n if (xhr.response) {\n xhr.response\n .text()\n .then((text: string) => {\n res({\n request: request,\n status: xhr.status,\n headers: parseHeaders(xhr),\n bodyAsText: text,\n });\n return;\n })\n .catch((e: any) => {\n rej(e);\n });\n } else {\n res({\n request,\n status: xhr.status,\n headers: parseHeaders(xhr),\n });\n }\n });\n }\n }\n });\n}\n\nfunction addProgressListener(\n xhr: XMLHttpRequestEventTarget,\n listener?: (progress: TransferProgressEvent) => void\n): void {\n if (listener) {\n xhr.addEventListener(\"progress\", (rawEvent) =>\n listener({\n loadedBytes: rawEvent.loaded,\n })\n );\n }\n}\n\nfunction parseHeaders(xhr: XMLHttpRequest): HttpHeaders {\n const responseHeaders = createHttpHeaders();\n const headerLines = xhr\n .getAllResponseHeaders()\n .trim()\n .split(/[\\r\\n]+/);\n for (const line of headerLines) {\n const index = line.indexOf(\":\");\n const headerName = line.slice(0, index);\n const headerValue = line.slice(index + 2);\n responseHeaders.set(headerName, headerValue);\n }\n return responseHeaders;\n}\n\nfunction rejectOnTerminalEvent(\n request: PipelineRequest,\n xhr: XMLHttpRequest,\n reject: (err: any) => void\n): void {\n xhr.addEventListener(\"error\", () =>\n reject(\n new RestError(`Failed to send request to ${request.url}`, {\n code: RestError.REQUEST_SEND_ERROR,\n request,\n })\n )\n );\n const abortError = new AbortError(\"The operation was aborted.\");\n xhr.addEventListener(\"abort\", () => reject(abortError));\n xhr.addEventListener(\"timeout\", () => reject(abortError));\n}\n\n/**\n * Create a new HttpClient instance for the browser environment.\n * @internal\n */\nexport function createXhrHttpClient(): HttpClient {\n return new XhrHttpClient();\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,134 @@
1
+ {
2
+ "name": "@typespec/ts-http-runtime",
3
+ "version": "1.0.0-alpha.20231023.3",
4
+ "description": "Isomorphic client library for making HTTP requests in node.js and browser.",
5
+ "sdk-type": "client",
6
+ "main": "dist/index.js",
7
+ "module": "dist-esm/src/index.js",
8
+ "browser": {
9
+ "./dist-esm/src/defaultHttpClient.js": "./dist-esm/src/defaultHttpClient.browser.js",
10
+ "./dist-esm/src/policies/decompressResponsePolicy.js": "./dist-esm/src/policies/decompressResponsePolicy.browser.js",
11
+ "./dist-esm/src/policies/formDataPolicy.js": "./dist-esm/src/policies/formDataPolicy.browser.js",
12
+ "./dist-esm/src/policies/proxyPolicy.js": "./dist-esm/src/policies/proxyPolicy.browser.js",
13
+ "./dist-esm/src/util/inspect.js": "./dist-esm/src/util/inspect.browser.js",
14
+ "./dist-esm/src/util/userAgentPlatform.js": "./dist-esm/src/util/userAgentPlatform.browser.js",
15
+ "./dist-esm/src/util/sha256.js": "./dist-esm/src/util/sha256.browser.js",
16
+ "./dist-esm/src/util/uuidUtils.js": "./dist-esm/src/util/uuidUtils.browser.js",
17
+ "./dist-esm/src/util/bytesEncoding.js": "./dist-esm/src/util/bytesEncoding.browser.js",
18
+ "./dist-esm/src/logger/log.js": "./dist-esm/src/logger/log.browser.js",
19
+ "./dist-esm/src/client/helpers/isReadableStream.js": "./dist-esm/src/client/helpers/isReadableStream.browser.js",
20
+ "process": false
21
+ },
22
+ "react-native": {
23
+ "./dist/index.js": "./dist-esm/src/index.js",
24
+ "./dist-esm/src/defaultHttpClient.js": "./dist-esm/src/defaultHttpClient.native.js",
25
+ "./dist-esm/src/util/userAgentPlatform.js": "./dist-esm/src/util/userAgentPlatform.native.js",
26
+ "./dist-esm/src/util/uuidUtils.js": "./dist-esm/src/util/uuidUtils.native.js"
27
+ },
28
+ "types": "ts-http-runtime.shims.d.ts",
29
+ "scripts": {
30
+ "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit",
31
+ "build:samples": "echo Obsolete",
32
+ "build:test": "tsc -p . && dev-tool run bundle",
33
+ "build": "npm run clean && tsc -p . && dev-tool run bundle && api-extractor run --local",
34
+ "check-format": "prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"",
35
+ "clean": "rimraf dist dist-* temp types *.tgz *.log",
36
+ "execute:samples": "echo skipped",
37
+ "extract-api": "tsc -p . && api-extractor run --local",
38
+ "format": "prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
39
+ "integration-test:browser": "echo skipped",
40
+ "integration-test:node": "echo skipped",
41
+ "integration-test": "npm run integration-test:node && npm run integration-test:browser",
42
+ "lint:fix": "eslint package.json api-extractor.json src test --ext .ts --fix --fix-type [problem,suggestion]",
43
+ "lint": "eslint package.json api-extractor.json src test --ext .ts",
44
+ "pack": "npm pack 2>&1",
45
+ "test:browser": "npm run clean && npm run build:test && npm run unit-test:browser && npm run integration-test:browser",
46
+ "test:node": "npm run clean && tsc -p . && npm run unit-test:node && npm run integration-test:node",
47
+ "test": "npm run clean && tsc -p . && npm run unit-test:node && dev-tool run bundle && npm run unit-test:browser && npm run integration-test",
48
+ "unit-test:browser": "karma start --single-run",
49
+ "unit-test:node": "dev-tool run test:node-ts-input --no-test-proxy=true",
50
+ "unit-test": "npm run unit-test:node && npm run unit-test:browser"
51
+ },
52
+ "files": [
53
+ "dist/",
54
+ "dist-esm/src/",
55
+ "types/ts-http-runtime.d.ts",
56
+ "ts-http-runtime.shims.d.ts",
57
+ "LICENSE",
58
+ "README.md"
59
+ ],
60
+ "repository": "github:Azure/azure-sdk-for-js",
61
+ "keywords": [
62
+ "azure",
63
+ "cloud"
64
+ ],
65
+ "author": "Microsoft Corporation",
66
+ "license": "MIT",
67
+ "bugs": {
68
+ "url": "https://github.com/Azure/azure-sdk-for-js/issues"
69
+ },
70
+ "engines": {
71
+ "node": ">=18.0.0"
72
+ },
73
+ "homepage": "https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/ts-http-runtime/",
74
+ "sideEffects": false,
75
+ "prettier": "@azure/eslint-plugin-azure-sdk/prettier.json",
76
+ "//metadata": {
77
+ "constantPaths": [
78
+ {
79
+ "path": "src/constants.ts",
80
+ "prefix": "SDK_VERSION"
81
+ }
82
+ ],
83
+ "sampleConfiguration": {
84
+ "skipFolder": true,
85
+ "disableDocsMs": true,
86
+ "productName": "HTTP Runtime for Generated TypeSpec Clients",
87
+ "productSlugs": [
88
+ "TypeSpec"
89
+ ]
90
+ },
91
+ "migrationDate": "2023-03-08T18:36:03.000Z"
92
+ },
93
+ "dependencies": {
94
+ "form-data": "^4.0.0",
95
+ "tslib": "^2.2.0",
96
+ "http-proxy-agent": "^5.0.0",
97
+ "https-proxy-agent": "^5.0.0"
98
+ },
99
+ "devDependencies": {
100
+ "@azure/dev-tool": ">=1.0.0-alpha <1.0.0-alphb",
101
+ "@azure/eslint-plugin-azure-sdk": ">=3.0.0-alpha <3.0.0-alphb",
102
+ "@microsoft/api-extractor": "^7.31.1",
103
+ "@opentelemetry/api": "^1.4.1",
104
+ "@types/chai": "^4.1.6",
105
+ "@types/chai-as-promised": "^7.1.0",
106
+ "@types/mocha": "^10.0.0",
107
+ "@types/node": "^18.0.0",
108
+ "@types/sinon": "^10.0.0",
109
+ "chai": "^4.2.0",
110
+ "chai-as-promised": "^7.1.1",
111
+ "cross-env": "^7.0.2",
112
+ "eslint": "^8.0.0",
113
+ "inherits": "^2.0.3",
114
+ "karma-chrome-launcher": "^3.1.0",
115
+ "karma-coverage": "^2.0.0",
116
+ "karma-env-preprocessor": "^0.1.1",
117
+ "karma-firefox-launcher": "^1.1.0",
118
+ "karma-junit-reporter": "^2.0.1",
119
+ "karma-mocha-reporter": "^2.2.5",
120
+ "karma-mocha": "^2.0.1",
121
+ "karma-sourcemap-loader": "^0.3.8",
122
+ "karma": "^6.3.0",
123
+ "mocha-junit-reporter": "^2.0.0",
124
+ "mocha": "^10.0.0",
125
+ "prettier": "^2.5.1",
126
+ "puppeteer": "^19.2.2",
127
+ "rimraf": "^3.0.0",
128
+ "sinon": "^15.0.0",
129
+ "typescript": "~5.2.0",
130
+ "util": "^0.12.1",
131
+ "ts-node": "^10.0.0",
132
+ "esm": "^3.2.18"
133
+ }
134
+ }
@@ -0,0 +1,12 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ declare global {
5
+ interface FormData {}
6
+ interface Blob {}
7
+ interface File {}
8
+ interface ReadableStream<R = any> {}
9
+ interface TransformStream<I = any, O = any> {}
10
+ }
11
+
12
+ export * from "./types/ts-http-runtime";