@azure/core-client 1.8.1-alpha.20240202.3 → 1.8.1-alpha.20240223.2

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 (281) hide show
  1. package/README.md +0 -4
  2. package/dist/browser/authorizeRequestOnClaimChallenge.d.ts +43 -0
  3. package/dist/browser/authorizeRequestOnClaimChallenge.d.ts.map +1 -0
  4. package/{dist-esm/src → dist/browser}/authorizeRequestOnClaimChallenge.js +3 -3
  5. package/dist/browser/authorizeRequestOnClaimChallenge.js.map +1 -0
  6. package/dist/browser/authorizeRequestOnTenantChallenge.d.ts +8 -0
  7. package/dist/browser/authorizeRequestOnTenantChallenge.d.ts.map +1 -0
  8. package/{dist-esm/src → dist/browser}/authorizeRequestOnTenantChallenge.js +5 -2
  9. package/dist/browser/authorizeRequestOnTenantChallenge.js.map +1 -0
  10. package/dist/browser/base64-browser.d.mts.map +1 -0
  11. package/dist/browser/base64-browser.mjs.map +1 -0
  12. package/dist/browser/base64.d.ts +29 -0
  13. package/{dist-esm/src/base64.browser.js → dist/browser/base64.js} +5 -1
  14. package/dist/browser/deserializationPolicy.d.ts +45 -0
  15. package/dist/browser/deserializationPolicy.d.ts.map +1 -0
  16. package/{dist-esm/src → dist/browser}/deserializationPolicy.js +16 -19
  17. package/dist/browser/deserializationPolicy.js.map +1 -0
  18. package/dist/browser/httpClientCache.d.ts +3 -0
  19. package/dist/browser/httpClientCache.d.ts.map +1 -0
  20. package/dist/browser/index.d.ts +9 -0
  21. package/dist/browser/index.d.ts.map +1 -0
  22. package/dist/browser/index.js +11 -0
  23. package/dist/browser/index.js.map +1 -0
  24. package/dist/browser/interfaceHelpers.d.ts +14 -0
  25. package/dist/browser/interfaceHelpers.d.ts.map +1 -0
  26. package/{dist-esm/src → dist/browser}/interfaceHelpers.js +1 -1
  27. package/dist/browser/interfaceHelpers.js.map +1 -0
  28. package/dist/browser/interfaces.d.ts +664 -0
  29. package/dist/browser/interfaces.d.ts.map +1 -0
  30. package/dist/browser/log.d.ts +2 -0
  31. package/dist/browser/log.d.ts.map +1 -0
  32. package/dist/browser/operationHelpers.d.ts +14 -0
  33. package/dist/browser/operationHelpers.d.ts.map +1 -0
  34. package/dist/browser/operationHelpers.js.map +1 -0
  35. package/dist/browser/package.json +3 -0
  36. package/dist/browser/pipeline.d.ts +34 -0
  37. package/dist/browser/pipeline.d.ts.map +1 -0
  38. package/{dist-esm/src → dist/browser}/pipeline.js +3 -3
  39. package/dist/browser/pipeline.js.map +1 -0
  40. package/dist/browser/serializationPolicy.d.ts +33 -0
  41. package/dist/browser/serializationPolicy.d.ts.map +1 -0
  42. package/{dist-esm/src → dist/browser}/serializationPolicy.js +12 -14
  43. package/dist/browser/serializationPolicy.js.map +1 -0
  44. package/dist/browser/serializer.d.ts +31 -0
  45. package/dist/browser/serializer.d.ts.map +1 -0
  46. package/{dist-esm/src → dist/browser}/serializer.js +25 -26
  47. package/dist/browser/serializer.js.map +1 -0
  48. package/dist/browser/serviceClient.d.ts +82 -0
  49. package/dist/browser/serviceClient.d.ts.map +1 -0
  50. package/{dist-esm/src → dist/browser}/serviceClient.js +38 -14
  51. package/dist/browser/serviceClient.js.map +1 -0
  52. package/dist/browser/urlHelpers.d.ts +7 -0
  53. package/dist/browser/urlHelpers.d.ts.map +1 -0
  54. package/{dist-esm/src → dist/browser}/urlHelpers.js +4 -6
  55. package/dist/browser/urlHelpers.js.map +1 -0
  56. package/dist/browser/utils.d.ts +37 -0
  57. package/dist/browser/utils.d.ts.map +1 -0
  58. package/{dist-esm/src → dist/browser}/utils.js +23 -10
  59. package/dist/browser/utils.js.map +1 -0
  60. package/dist/commonjs/authorizeRequestOnClaimChallenge.d.ts +43 -0
  61. package/dist/commonjs/authorizeRequestOnClaimChallenge.d.ts.map +1 -0
  62. package/dist/commonjs/authorizeRequestOnClaimChallenge.js +74 -0
  63. package/dist/commonjs/authorizeRequestOnClaimChallenge.js.map +1 -0
  64. package/dist/commonjs/authorizeRequestOnTenantChallenge.d.ts +8 -0
  65. package/dist/commonjs/authorizeRequestOnTenantChallenge.d.ts.map +1 -0
  66. package/dist/commonjs/authorizeRequestOnTenantChallenge.js +106 -0
  67. package/dist/commonjs/authorizeRequestOnTenantChallenge.js.map +1 -0
  68. package/dist/commonjs/base64.d.ts +25 -0
  69. package/dist/commonjs/base64.d.ts.map +1 -0
  70. package/dist/commonjs/base64.js +43 -0
  71. package/dist/commonjs/base64.js.map +1 -0
  72. package/dist/commonjs/deserializationPolicy.d.ts +45 -0
  73. package/dist/commonjs/deserializationPolicy.d.ts.map +1 -0
  74. package/dist/commonjs/deserializationPolicy.js +232 -0
  75. package/dist/commonjs/deserializationPolicy.js.map +1 -0
  76. package/dist/commonjs/httpClientCache.d.ts +3 -0
  77. package/dist/commonjs/httpClientCache.d.ts.map +1 -0
  78. package/dist/commonjs/httpClientCache.js +15 -0
  79. package/dist/commonjs/httpClientCache.js.map +1 -0
  80. package/dist/commonjs/index.d.ts +9 -0
  81. package/dist/commonjs/index.d.ts.map +1 -0
  82. package/dist/commonjs/index.js +26 -0
  83. package/dist/commonjs/index.js.map +1 -0
  84. package/dist/commonjs/interfaceHelpers.d.ts +14 -0
  85. package/dist/commonjs/interfaceHelpers.d.ts.map +1 -0
  86. package/dist/commonjs/interfaceHelpers.js +44 -0
  87. package/dist/commonjs/interfaceHelpers.js.map +1 -0
  88. package/dist/commonjs/interfaces.d.ts +664 -0
  89. package/dist/commonjs/interfaces.d.ts.map +1 -0
  90. package/dist/commonjs/interfaces.js +14 -0
  91. package/dist/commonjs/interfaces.js.map +1 -0
  92. package/dist/commonjs/log.d.ts +2 -0
  93. package/dist/commonjs/log.d.ts.map +1 -0
  94. package/dist/commonjs/log.js +8 -0
  95. package/dist/commonjs/log.js.map +1 -0
  96. package/dist/commonjs/operationHelpers.d.ts +14 -0
  97. package/dist/commonjs/operationHelpers.d.ts.map +1 -0
  98. package/dist/commonjs/operationHelpers.js +99 -0
  99. package/dist/commonjs/operationHelpers.js.map +1 -0
  100. package/dist/commonjs/package.json +3 -0
  101. package/dist/commonjs/pipeline.d.ts +34 -0
  102. package/dist/commonjs/pipeline.d.ts.map +1 -0
  103. package/dist/commonjs/pipeline.js +30 -0
  104. package/dist/commonjs/pipeline.js.map +1 -0
  105. package/dist/commonjs/serializationPolicy.d.ts +33 -0
  106. package/dist/commonjs/serializationPolicy.d.ts.map +1 -0
  107. package/dist/commonjs/serializationPolicy.js +157 -0
  108. package/dist/commonjs/serializationPolicy.js.map +1 -0
  109. package/dist/commonjs/serializer.d.ts +31 -0
  110. package/dist/commonjs/serializer.d.ts.map +1 -0
  111. package/dist/commonjs/serializer.js +926 -0
  112. package/dist/commonjs/serializer.js.map +1 -0
  113. package/dist/commonjs/serviceClient.d.ts +82 -0
  114. package/dist/commonjs/serviceClient.d.ts.map +1 -0
  115. package/dist/commonjs/serviceClient.js +177 -0
  116. package/dist/commonjs/serviceClient.js.map +1 -0
  117. package/dist/commonjs/tsdoc-metadata.json +11 -0
  118. package/dist/commonjs/urlHelpers.d.ts +7 -0
  119. package/dist/commonjs/urlHelpers.d.ts.map +1 -0
  120. package/dist/commonjs/urlHelpers.js +238 -0
  121. package/dist/commonjs/urlHelpers.js.map +1 -0
  122. package/dist/commonjs/utils.d.ts +37 -0
  123. package/dist/commonjs/utils.d.ts.map +1 -0
  124. package/dist/commonjs/utils.js +135 -0
  125. package/dist/commonjs/utils.js.map +1 -0
  126. package/dist/esm/authorizeRequestOnClaimChallenge.d.ts +43 -0
  127. package/dist/esm/authorizeRequestOnClaimChallenge.d.ts.map +1 -0
  128. package/dist/esm/authorizeRequestOnClaimChallenge.js +69 -0
  129. package/dist/esm/authorizeRequestOnClaimChallenge.js.map +1 -0
  130. package/dist/esm/authorizeRequestOnTenantChallenge.d.ts +8 -0
  131. package/dist/esm/authorizeRequestOnTenantChallenge.d.ts.map +1 -0
  132. package/dist/esm/authorizeRequestOnTenantChallenge.js +102 -0
  133. package/dist/esm/authorizeRequestOnTenantChallenge.js.map +1 -0
  134. package/dist/esm/base64.d.ts +25 -0
  135. package/dist/esm/base64.d.ts.map +1 -0
  136. package/{dist-esm/src → dist/esm}/base64.js +0 -2
  137. package/dist/esm/base64.js.map +1 -0
  138. package/dist/esm/deserializationPolicy.d.ts +45 -0
  139. package/dist/esm/deserializationPolicy.d.ts.map +1 -0
  140. package/dist/esm/deserializationPolicy.js +228 -0
  141. package/dist/esm/deserializationPolicy.js.map +1 -0
  142. package/dist/esm/httpClientCache.d.ts +3 -0
  143. package/dist/esm/httpClientCache.d.ts.map +1 -0
  144. package/dist/esm/httpClientCache.js +11 -0
  145. package/dist/esm/httpClientCache.js.map +1 -0
  146. package/dist/esm/index.d.ts +9 -0
  147. package/dist/esm/index.d.ts.map +1 -0
  148. package/dist/esm/index.js +11 -0
  149. package/dist/esm/index.js.map +1 -0
  150. package/dist/esm/interfaceHelpers.d.ts +14 -0
  151. package/dist/esm/interfaceHelpers.d.ts.map +1 -0
  152. package/dist/esm/interfaceHelpers.js +39 -0
  153. package/dist/esm/interfaceHelpers.js.map +1 -0
  154. package/dist/esm/interfaces.d.ts +664 -0
  155. package/dist/esm/interfaces.d.ts.map +1 -0
  156. package/dist/esm/interfaces.js +11 -0
  157. package/dist/esm/interfaces.js.map +1 -0
  158. package/dist/esm/log.d.ts +2 -0
  159. package/dist/esm/log.d.ts.map +1 -0
  160. package/dist/esm/log.js +5 -0
  161. package/dist/esm/log.js.map +1 -0
  162. package/dist/esm/operationHelpers.d.ts +14 -0
  163. package/dist/esm/operationHelpers.d.ts.map +1 -0
  164. package/dist/esm/operationHelpers.js +94 -0
  165. package/dist/esm/operationHelpers.js.map +1 -0
  166. package/dist/esm/package.json +3 -0
  167. package/dist/esm/pipeline.d.ts +34 -0
  168. package/dist/esm/pipeline.d.ts.map +1 -0
  169. package/dist/esm/pipeline.js +26 -0
  170. package/dist/esm/pipeline.js.map +1 -0
  171. package/dist/esm/serializationPolicy.d.ts +33 -0
  172. package/dist/esm/serializationPolicy.d.ts.map +1 -0
  173. package/dist/esm/serializationPolicy.js +151 -0
  174. package/dist/esm/serializationPolicy.js.map +1 -0
  175. package/dist/esm/serializer.d.ts +31 -0
  176. package/dist/esm/serializer.d.ts.map +1 -0
  177. package/dist/esm/serializer.js +921 -0
  178. package/dist/esm/serializer.js.map +1 -0
  179. package/dist/esm/serviceClient.d.ts +82 -0
  180. package/dist/esm/serviceClient.d.ts.map +1 -0
  181. package/dist/esm/serviceClient.js +173 -0
  182. package/dist/esm/serviceClient.js.map +1 -0
  183. package/dist/esm/urlHelpers.d.ts +7 -0
  184. package/dist/esm/urlHelpers.d.ts.map +1 -0
  185. package/dist/esm/urlHelpers.js +233 -0
  186. package/dist/esm/urlHelpers.js.map +1 -0
  187. package/dist/esm/utils.d.ts +37 -0
  188. package/dist/esm/utils.d.ts.map +1 -0
  189. package/dist/esm/utils.js +128 -0
  190. package/dist/esm/utils.js.map +1 -0
  191. package/dist/react-native/authorizeRequestOnClaimChallenge.d.ts +43 -0
  192. package/dist/react-native/authorizeRequestOnClaimChallenge.d.ts.map +1 -0
  193. package/dist/react-native/authorizeRequestOnClaimChallenge.js +69 -0
  194. package/dist/react-native/authorizeRequestOnClaimChallenge.js.map +1 -0
  195. package/dist/react-native/authorizeRequestOnTenantChallenge.d.ts +8 -0
  196. package/dist/react-native/authorizeRequestOnTenantChallenge.d.ts.map +1 -0
  197. package/dist/react-native/authorizeRequestOnTenantChallenge.js +102 -0
  198. package/dist/react-native/authorizeRequestOnTenantChallenge.js.map +1 -0
  199. package/dist/react-native/base64.d.ts +25 -0
  200. package/dist/react-native/base64.d.ts.map +1 -0
  201. package/dist/react-native/base64.js +36 -0
  202. package/dist/react-native/base64.js.map +1 -0
  203. package/dist/react-native/deserializationPolicy.d.ts +45 -0
  204. package/dist/react-native/deserializationPolicy.d.ts.map +1 -0
  205. package/dist/react-native/deserializationPolicy.js +228 -0
  206. package/dist/react-native/deserializationPolicy.js.map +1 -0
  207. package/dist/react-native/httpClientCache.d.ts +3 -0
  208. package/dist/react-native/httpClientCache.d.ts.map +1 -0
  209. package/dist/react-native/httpClientCache.js +11 -0
  210. package/dist/react-native/httpClientCache.js.map +1 -0
  211. package/dist/react-native/index.d.ts +9 -0
  212. package/dist/react-native/index.d.ts.map +1 -0
  213. package/dist/react-native/index.js +11 -0
  214. package/dist/react-native/index.js.map +1 -0
  215. package/dist/react-native/interfaceHelpers.d.ts +14 -0
  216. package/dist/react-native/interfaceHelpers.d.ts.map +1 -0
  217. package/dist/react-native/interfaceHelpers.js +39 -0
  218. package/dist/react-native/interfaceHelpers.js.map +1 -0
  219. package/dist/react-native/interfaces.d.ts +664 -0
  220. package/dist/react-native/interfaces.d.ts.map +1 -0
  221. package/dist/react-native/interfaces.js +11 -0
  222. package/dist/react-native/interfaces.js.map +1 -0
  223. package/dist/react-native/log.d.ts +2 -0
  224. package/dist/react-native/log.d.ts.map +1 -0
  225. package/dist/react-native/log.js +5 -0
  226. package/dist/react-native/log.js.map +1 -0
  227. package/dist/react-native/operationHelpers.d.ts +14 -0
  228. package/dist/react-native/operationHelpers.d.ts.map +1 -0
  229. package/dist/react-native/operationHelpers.js +94 -0
  230. package/dist/react-native/operationHelpers.js.map +1 -0
  231. package/dist/react-native/package.json +3 -0
  232. package/dist/react-native/pipeline.d.ts +34 -0
  233. package/dist/react-native/pipeline.d.ts.map +1 -0
  234. package/dist/react-native/pipeline.js +26 -0
  235. package/dist/react-native/pipeline.js.map +1 -0
  236. package/dist/react-native/serializationPolicy.d.ts +33 -0
  237. package/dist/react-native/serializationPolicy.d.ts.map +1 -0
  238. package/dist/react-native/serializationPolicy.js +151 -0
  239. package/dist/react-native/serializationPolicy.js.map +1 -0
  240. package/dist/react-native/serializer.d.ts +31 -0
  241. package/dist/react-native/serializer.d.ts.map +1 -0
  242. package/dist/react-native/serializer.js +921 -0
  243. package/dist/react-native/serializer.js.map +1 -0
  244. package/dist/react-native/serviceClient.d.ts +82 -0
  245. package/dist/react-native/serviceClient.d.ts.map +1 -0
  246. package/dist/react-native/serviceClient.js +173 -0
  247. package/dist/react-native/serviceClient.js.map +1 -0
  248. package/dist/react-native/urlHelpers.d.ts +7 -0
  249. package/dist/react-native/urlHelpers.d.ts.map +1 -0
  250. package/dist/react-native/urlHelpers.js +233 -0
  251. package/dist/react-native/urlHelpers.js.map +1 -0
  252. package/dist/react-native/utils.d.ts +37 -0
  253. package/dist/react-native/utils.d.ts.map +1 -0
  254. package/dist/react-native/utils.js +128 -0
  255. package/dist/react-native/utils.js.map +1 -0
  256. package/package.json +74 -61
  257. package/dist/index.js +0 -2185
  258. package/dist/index.js.map +0 -1
  259. package/dist-esm/src/authorizeRequestOnClaimChallenge.js.map +0 -1
  260. package/dist-esm/src/authorizeRequestOnTenantChallenge.js.map +0 -1
  261. package/dist-esm/src/base64.browser.js.map +0 -1
  262. package/dist-esm/src/base64.js.map +0 -1
  263. package/dist-esm/src/deserializationPolicy.js.map +0 -1
  264. package/dist-esm/src/index.js +0 -11
  265. package/dist-esm/src/index.js.map +0 -1
  266. package/dist-esm/src/interfaceHelpers.js.map +0 -1
  267. package/dist-esm/src/operationHelpers.js.map +0 -1
  268. package/dist-esm/src/pipeline.js.map +0 -1
  269. package/dist-esm/src/serializationPolicy.js.map +0 -1
  270. package/dist-esm/src/serializer.js.map +0 -1
  271. package/dist-esm/src/serviceClient.js.map +0 -1
  272. package/dist-esm/src/urlHelpers.js.map +0 -1
  273. package/dist-esm/src/utils.js.map +0 -1
  274. /package/{dist-esm/src → dist/browser}/httpClientCache.js +0 -0
  275. /package/{dist-esm/src → dist/browser}/httpClientCache.js.map +0 -0
  276. /package/{dist-esm/src → dist/browser}/interfaces.js +0 -0
  277. /package/{dist-esm/src → dist/browser}/interfaces.js.map +0 -0
  278. /package/{dist-esm/src → dist/browser}/log.js +0 -0
  279. /package/{dist-esm/src → dist/browser}/log.js.map +0 -0
  280. /package/{dist-esm/src → dist/browser}/operationHelpers.js +0 -0
  281. /package/{types/latest → dist}/core-client.d.ts +0 -0
@@ -0,0 +1,102 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * A set of constants used internally when processing requests.
5
+ */
6
+ const Constants = {
7
+ DefaultScope: "/.default",
8
+ /**
9
+ * Defines constants for use with HTTP headers.
10
+ */
11
+ HeaderConstants: {
12
+ /**
13
+ * The Authorization header.
14
+ */
15
+ AUTHORIZATION: "authorization",
16
+ },
17
+ };
18
+ /**
19
+ * Defines a callback to handle auth challenge for Storage APIs.
20
+ * This implements the bearer challenge process described here: https://docs.microsoft.com/rest/api/storageservices/authorize-with-azure-active-directory#bearer-challenge
21
+ * Handling has specific features for storage that departs to the general AAD challenge docs.
22
+ **/
23
+ export const authorizeRequestOnTenantChallenge = async (challengeOptions) => {
24
+ const requestOptions = requestToOptions(challengeOptions.request);
25
+ const challenge = getChallenge(challengeOptions.response);
26
+ if (challenge) {
27
+ const challengeInfo = parseChallenge(challenge);
28
+ const challengeScopes = buildScopes(challengeOptions, challengeInfo);
29
+ const tenantId = extractTenantId(challengeInfo);
30
+ const accessToken = await challengeOptions.getAccessToken(challengeScopes, {
31
+ ...requestOptions,
32
+ tenantId,
33
+ });
34
+ if (!accessToken) {
35
+ return false;
36
+ }
37
+ challengeOptions.request.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${accessToken.token}`);
38
+ return true;
39
+ }
40
+ return false;
41
+ };
42
+ /**
43
+ * Extracts the tenant id from the challenge information
44
+ * The tenant id is contained in the authorization_uri as the first
45
+ * path part.
46
+ */
47
+ function extractTenantId(challengeInfo) {
48
+ const parsedAuthUri = new URL(challengeInfo.authorization_uri);
49
+ const pathSegments = parsedAuthUri.pathname.split("/");
50
+ const tenantId = pathSegments[1];
51
+ return tenantId;
52
+ }
53
+ /**
54
+ * Builds the authentication scopes based on the information that comes in the
55
+ * challenge information. Scopes url is present in the resource_id, if it is empty
56
+ * we keep using the original scopes.
57
+ */
58
+ function buildScopes(challengeOptions, challengeInfo) {
59
+ if (!challengeInfo.resource_uri) {
60
+ return challengeOptions.scopes;
61
+ }
62
+ const challengeScopes = new URL(challengeInfo.resource_uri);
63
+ challengeScopes.pathname = Constants.DefaultScope;
64
+ return [challengeScopes.toString()];
65
+ }
66
+ /**
67
+ * We will retrieve the challenge only if the response status code was 401,
68
+ * and if the response contained the header "WWW-Authenticate" with a non-empty value.
69
+ */
70
+ function getChallenge(response) {
71
+ const challenge = response.headers.get("WWW-Authenticate");
72
+ if (response.status === 401 && challenge) {
73
+ return challenge;
74
+ }
75
+ return;
76
+ }
77
+ /**
78
+ * Converts: `Bearer a="b" c="d"`.
79
+ * Into: `[ { a: 'b', c: 'd' }]`.
80
+ *
81
+ * @internal
82
+ */
83
+ function parseChallenge(challenge) {
84
+ const bearerChallenge = challenge.slice("Bearer ".length);
85
+ const challengeParts = `${bearerChallenge.trim()} `.split(" ").filter((x) => x);
86
+ const keyValuePairs = challengeParts.map((keyValue) => (([key, value]) => ({ [key]: value }))(keyValue.trim().split("=")));
87
+ // Key-value pairs to plain object:
88
+ return keyValuePairs.reduce((a, b) => ({ ...a, ...b }), {});
89
+ }
90
+ /**
91
+ * Extracts the options form a Pipeline Request for later re-use
92
+ */
93
+ function requestToOptions(request) {
94
+ return {
95
+ abortSignal: request.abortSignal,
96
+ requestOptions: {
97
+ timeout: request.timeout,
98
+ },
99
+ tracingOptions: request.tracingOptions,
100
+ };
101
+ }
102
+ //# sourceMappingURL=authorizeRequestOnTenantChallenge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorizeRequestOnTenantChallenge.js","sourceRoot":"","sources":["../../src/authorizeRequestOnTenantChallenge.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n AuthorizeRequestOnChallengeOptions,\n PipelineRequest,\n PipelineResponse,\n} from \"@azure/core-rest-pipeline\";\n\nimport { GetTokenOptions } from \"@azure/core-auth\";\n\n/**\n * A set of constants used internally when processing requests.\n */\nconst Constants = {\n DefaultScope: \"/.default\",\n /**\n * Defines constants for use with HTTP headers.\n */\n HeaderConstants: {\n /**\n * The Authorization header.\n */\n AUTHORIZATION: \"authorization\",\n },\n};\n\n/**\n * Defines a callback to handle auth challenge for Storage APIs.\n * This implements the bearer challenge process described here: https://docs.microsoft.com/rest/api/storageservices/authorize-with-azure-active-directory#bearer-challenge\n * Handling has specific features for storage that departs to the general AAD challenge docs.\n **/\nexport const authorizeRequestOnTenantChallenge: (\n challengeOptions: AuthorizeRequestOnChallengeOptions,\n) => Promise<boolean> = async (challengeOptions) => {\n const requestOptions = requestToOptions(challengeOptions.request);\n const challenge = getChallenge(challengeOptions.response);\n if (challenge) {\n const challengeInfo: Challenge = parseChallenge(challenge);\n const challengeScopes = buildScopes(challengeOptions, challengeInfo);\n const tenantId = extractTenantId(challengeInfo);\n const accessToken = await challengeOptions.getAccessToken(challengeScopes, {\n ...requestOptions,\n tenantId,\n });\n\n if (!accessToken) {\n return false;\n }\n\n challengeOptions.request.headers.set(\n Constants.HeaderConstants.AUTHORIZATION,\n `Bearer ${accessToken.token}`,\n );\n return true;\n }\n return false;\n};\n\n/**\n * Extracts the tenant id from the challenge information\n * The tenant id is contained in the authorization_uri as the first\n * path part.\n */\nfunction extractTenantId(challengeInfo: Challenge): string {\n const parsedAuthUri = new URL(challengeInfo.authorization_uri);\n const pathSegments = parsedAuthUri.pathname.split(\"/\");\n const tenantId = pathSegments[1];\n\n return tenantId;\n}\n\n/**\n * Builds the authentication scopes based on the information that comes in the\n * challenge information. Scopes url is present in the resource_id, if it is empty\n * we keep using the original scopes.\n */\nfunction buildScopes(\n challengeOptions: AuthorizeRequestOnChallengeOptions,\n challengeInfo: Challenge,\n): string[] {\n if (!challengeInfo.resource_uri) {\n return challengeOptions.scopes;\n }\n\n const challengeScopes = new URL(challengeInfo.resource_uri);\n challengeScopes.pathname = Constants.DefaultScope;\n return [challengeScopes.toString()];\n}\n\n/**\n * We will retrieve the challenge only if the response status code was 401,\n * and if the response contained the header \"WWW-Authenticate\" with a non-empty value.\n */\nfunction getChallenge(response: PipelineResponse): string | undefined {\n const challenge = response.headers.get(\"WWW-Authenticate\");\n if (response.status === 401 && challenge) {\n return challenge;\n }\n return;\n}\n\n/**\n * Challenge structure\n */\ninterface Challenge {\n authorization_uri: string;\n resource_uri?: string;\n}\n\n/**\n * Converts: `Bearer a=\"b\" c=\"d\"`.\n * Into: `[ { a: 'b', c: 'd' }]`.\n *\n * @internal\n */\nfunction parseChallenge(challenge: string): Challenge {\n const bearerChallenge = challenge.slice(\"Bearer \".length);\n const challengeParts = `${bearerChallenge.trim()} `.split(\" \").filter((x) => x);\n const keyValuePairs = challengeParts.map((keyValue) =>\n (([key, value]) => ({ [key]: value }))(keyValue.trim().split(\"=\")),\n );\n // Key-value pairs to plain object:\n return keyValuePairs.reduce((a, b) => ({ ...a, ...b }), {} as Challenge);\n}\n\n/**\n * Extracts the options form a Pipeline Request for later re-use\n */\nfunction requestToOptions(request: PipelineRequest): GetTokenOptions {\n return {\n abortSignal: request.abortSignal,\n requestOptions: {\n timeout: request.timeout,\n },\n tracingOptions: request.tracingOptions,\n };\n}\n"]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Encodes a string in base64 format.
3
+ * @param value - the string to encode
4
+ * @internal
5
+ */
6
+ export declare function encodeString(value: string): string;
7
+ /**
8
+ * Encodes a byte array in base64 format.
9
+ * @param value - the Uint8Aray to encode
10
+ * @internal
11
+ */
12
+ export declare function encodeByteArray(value: Uint8Array): string;
13
+ /**
14
+ * Decodes a base64 string into a byte array.
15
+ * @param value - the base64 string to decode
16
+ * @internal
17
+ */
18
+ export declare function decodeString(value: string): Uint8Array;
19
+ /**
20
+ * Decodes a base64 string into a string.
21
+ * @param value - the base64 string to decode
22
+ * @internal
23
+ */
24
+ export declare function decodeStringToString(value: string): string;
25
+ //# sourceMappingURL=base64.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/base64.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAGzD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,36 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * Encodes a string in base64 format.
5
+ * @param value - the string to encode
6
+ * @internal
7
+ */
8
+ export function encodeString(value) {
9
+ return Buffer.from(value).toString("base64");
10
+ }
11
+ /**
12
+ * Encodes a byte array in base64 format.
13
+ * @param value - the Uint8Aray to encode
14
+ * @internal
15
+ */
16
+ export function encodeByteArray(value) {
17
+ const bufferValue = value instanceof Buffer ? value : Buffer.from(value.buffer);
18
+ return bufferValue.toString("base64");
19
+ }
20
+ /**
21
+ * Decodes a base64 string into a byte array.
22
+ * @param value - the base64 string to decode
23
+ * @internal
24
+ */
25
+ export function decodeString(value) {
26
+ return Buffer.from(value, "base64");
27
+ }
28
+ /**
29
+ * Decodes a base64 string into a string.
30
+ * @param value - the base64 string to decode
31
+ * @internal
32
+ */
33
+ export function decodeStringToString(value) {
34
+ return Buffer.from(value, "base64").toString();
35
+ }
36
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/base64.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,MAAM,WAAW,GAAG,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAqB,CAAC,CAAC;IAC/F,OAAO,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;AACjD,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * Encodes a string in base64 format.\n * @param value - the string to encode\n * @internal\n */\nexport function encodeString(value: string): string {\n return Buffer.from(value).toString(\"base64\");\n}\n\n/**\n * Encodes a byte array in base64 format.\n * @param value - the Uint8Aray to encode\n * @internal\n */\nexport function encodeByteArray(value: Uint8Array): string {\n const bufferValue = value instanceof Buffer ? value : Buffer.from(value.buffer as ArrayBuffer);\n return bufferValue.toString(\"base64\");\n}\n\n/**\n * Decodes a base64 string into a byte array.\n * @param value - the base64 string to decode\n * @internal\n */\nexport function decodeString(value: string): Uint8Array {\n return Buffer.from(value, \"base64\");\n}\n\n/**\n * Decodes a base64 string into a string.\n * @param value - the base64 string to decode\n * @internal\n */\nexport function decodeStringToString(value: string): string {\n return Buffer.from(value, \"base64\").toString();\n}\n"]}
@@ -0,0 +1,45 @@
1
+ import { SerializerOptions, XmlOptions } from "./interfaces.js";
2
+ import { PipelinePolicy } from "@azure/core-rest-pipeline";
3
+ /**
4
+ * The programmatic identifier of the deserializationPolicy.
5
+ */
6
+ export declare const deserializationPolicyName = "deserializationPolicy";
7
+ /**
8
+ * Options to configure API response deserialization.
9
+ */
10
+ export interface DeserializationPolicyOptions {
11
+ /**
12
+ * Configures the expected content types for the deserialization of
13
+ * JSON and XML response bodies.
14
+ */
15
+ expectedContentTypes?: DeserializationContentTypes;
16
+ /**
17
+ * A function that is able to parse XML. Required for XML support.
18
+ */
19
+ parseXML?: (str: string, opts?: XmlOptions) => Promise<any>;
20
+ /**
21
+ * Configures behavior of xml parser and builder.
22
+ */
23
+ serializerOptions?: SerializerOptions;
24
+ }
25
+ /**
26
+ * The content-types that will indicate that an operation response should be deserialized in a
27
+ * particular way.
28
+ */
29
+ export interface DeserializationContentTypes {
30
+ /**
31
+ * The content-types that indicate that an operation response should be deserialized as JSON.
32
+ * Defaults to [ "application/json", "text/json" ].
33
+ */
34
+ json?: string[];
35
+ /**
36
+ * The content-types that indicate that an operation response should be deserialized as XML.
37
+ * Defaults to [ "application/xml", "application/atom+xml" ].
38
+ */
39
+ xml?: string[];
40
+ }
41
+ /**
42
+ * This policy handles parsing out responses according to OperationSpecs on the request.
43
+ */
44
+ export declare function deserializationPolicy(options?: DeserializationPolicyOptions): PipelinePolicy;
45
+ //# sourceMappingURL=deserializationPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deserializationPolicy.d.ts","sourceRoot":"","sources":["../../src/deserializationPolicy.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,iBAAiB,EAEjB,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,cAAc,EAKf,MAAM,2BAA2B,CAAC;AAOnC;;GAEG;AACH,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,2BAA2B,CAAC;IAEnD;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAE5D;;OAEG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,4BAAiC,GAAG,cAAc,CA0BhG"}
@@ -0,0 +1,228 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { XML_CHARKEY, } from "./interfaces.js";
4
+ import { RestError, } from "@azure/core-rest-pipeline";
5
+ import { MapperTypeNames } from "./serializer.js";
6
+ import { getOperationRequestInfo } from "./operationHelpers.js";
7
+ const defaultJsonContentTypes = ["application/json", "text/json"];
8
+ const defaultXmlContentTypes = ["application/xml", "application/atom+xml"];
9
+ /**
10
+ * The programmatic identifier of the deserializationPolicy.
11
+ */
12
+ export const deserializationPolicyName = "deserializationPolicy";
13
+ /**
14
+ * This policy handles parsing out responses according to OperationSpecs on the request.
15
+ */
16
+ export function deserializationPolicy(options = {}) {
17
+ const jsonContentTypes = options.expectedContentTypes?.json ?? defaultJsonContentTypes;
18
+ const xmlContentTypes = options.expectedContentTypes?.xml ?? defaultXmlContentTypes;
19
+ const parseXML = options.parseXML;
20
+ const serializerOptions = options.serializerOptions;
21
+ const updatedOptions = {
22
+ xml: {
23
+ rootName: serializerOptions?.xml.rootName ?? "",
24
+ includeRoot: serializerOptions?.xml.includeRoot ?? false,
25
+ xmlCharKey: serializerOptions?.xml.xmlCharKey ?? XML_CHARKEY,
26
+ },
27
+ };
28
+ return {
29
+ name: deserializationPolicyName,
30
+ async sendRequest(request, next) {
31
+ const response = await next(request);
32
+ return deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, updatedOptions, parseXML);
33
+ },
34
+ };
35
+ }
36
+ function getOperationResponseMap(parsedResponse) {
37
+ let result;
38
+ const request = parsedResponse.request;
39
+ const operationInfo = getOperationRequestInfo(request);
40
+ const operationSpec = operationInfo?.operationSpec;
41
+ if (operationSpec) {
42
+ if (!operationInfo?.operationResponseGetter) {
43
+ result = operationSpec.responses[parsedResponse.status];
44
+ }
45
+ else {
46
+ result = operationInfo?.operationResponseGetter(operationSpec, parsedResponse);
47
+ }
48
+ }
49
+ return result;
50
+ }
51
+ function shouldDeserializeResponse(parsedResponse) {
52
+ const request = parsedResponse.request;
53
+ const operationInfo = getOperationRequestInfo(request);
54
+ const shouldDeserialize = operationInfo?.shouldDeserialize;
55
+ let result;
56
+ if (shouldDeserialize === undefined) {
57
+ result = true;
58
+ }
59
+ else if (typeof shouldDeserialize === "boolean") {
60
+ result = shouldDeserialize;
61
+ }
62
+ else {
63
+ result = shouldDeserialize(parsedResponse);
64
+ }
65
+ return result;
66
+ }
67
+ async function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options, parseXML) {
68
+ const parsedResponse = await parse(jsonContentTypes, xmlContentTypes, response, options, parseXML);
69
+ if (!shouldDeserializeResponse(parsedResponse)) {
70
+ return parsedResponse;
71
+ }
72
+ const operationInfo = getOperationRequestInfo(parsedResponse.request);
73
+ const operationSpec = operationInfo?.operationSpec;
74
+ if (!operationSpec || !operationSpec.responses) {
75
+ return parsedResponse;
76
+ }
77
+ const responseSpec = getOperationResponseMap(parsedResponse);
78
+ const { error, shouldReturnResponse } = handleErrorResponse(parsedResponse, operationSpec, responseSpec, options);
79
+ if (error) {
80
+ throw error;
81
+ }
82
+ else if (shouldReturnResponse) {
83
+ return parsedResponse;
84
+ }
85
+ // An operation response spec does exist for current status code, so
86
+ // use it to deserialize the response.
87
+ if (responseSpec) {
88
+ if (responseSpec.bodyMapper) {
89
+ let valueToDeserialize = parsedResponse.parsedBody;
90
+ if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperTypeNames.Sequence) {
91
+ valueToDeserialize =
92
+ typeof valueToDeserialize === "object"
93
+ ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName]
94
+ : [];
95
+ }
96
+ try {
97
+ parsedResponse.parsedBody = operationSpec.serializer.deserialize(responseSpec.bodyMapper, valueToDeserialize, "operationRes.parsedBody", options);
98
+ }
99
+ catch (deserializeError) {
100
+ const restError = new RestError(`Error ${deserializeError} occurred in deserializing the responseBody - ${parsedResponse.bodyAsText}`, {
101
+ statusCode: parsedResponse.status,
102
+ request: parsedResponse.request,
103
+ response: parsedResponse,
104
+ });
105
+ throw restError;
106
+ }
107
+ }
108
+ else if (operationSpec.httpMethod === "HEAD") {
109
+ // head methods never have a body, but we return a boolean to indicate presence/absence of the resource
110
+ parsedResponse.parsedBody = response.status >= 200 && response.status < 300;
111
+ }
112
+ if (responseSpec.headersMapper) {
113
+ parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(responseSpec.headersMapper, parsedResponse.headers.toJSON(), "operationRes.parsedHeaders", { xml: {}, ignoreUnknownProperties: true });
114
+ }
115
+ }
116
+ return parsedResponse;
117
+ }
118
+ function isOperationSpecEmpty(operationSpec) {
119
+ const expectedStatusCodes = Object.keys(operationSpec.responses);
120
+ return (expectedStatusCodes.length === 0 ||
121
+ (expectedStatusCodes.length === 1 && expectedStatusCodes[0] === "default"));
122
+ }
123
+ function handleErrorResponse(parsedResponse, operationSpec, responseSpec, options) {
124
+ const isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300;
125
+ const isExpectedStatusCode = isOperationSpecEmpty(operationSpec)
126
+ ? isSuccessByStatus
127
+ : !!responseSpec;
128
+ if (isExpectedStatusCode) {
129
+ if (responseSpec) {
130
+ if (!responseSpec.isError) {
131
+ return { error: null, shouldReturnResponse: false };
132
+ }
133
+ }
134
+ else {
135
+ return { error: null, shouldReturnResponse: false };
136
+ }
137
+ }
138
+ const errorResponseSpec = responseSpec ?? operationSpec.responses.default;
139
+ const initialErrorMessage = parsedResponse.request.streamResponseStatusCodes?.has(parsedResponse.status)
140
+ ? `Unexpected status code: ${parsedResponse.status}`
141
+ : parsedResponse.bodyAsText;
142
+ const error = new RestError(initialErrorMessage, {
143
+ statusCode: parsedResponse.status,
144
+ request: parsedResponse.request,
145
+ response: parsedResponse,
146
+ });
147
+ // If the item failed but there's no error spec or default spec to deserialize the error,
148
+ // we should fail so we just throw the parsed response
149
+ if (!errorResponseSpec) {
150
+ throw error;
151
+ }
152
+ const defaultBodyMapper = errorResponseSpec.bodyMapper;
153
+ const defaultHeadersMapper = errorResponseSpec.headersMapper;
154
+ try {
155
+ // If error response has a body, try to deserialize it using default body mapper.
156
+ // Then try to extract error code & message from it
157
+ if (parsedResponse.parsedBody) {
158
+ const parsedBody = parsedResponse.parsedBody;
159
+ let deserializedError;
160
+ if (defaultBodyMapper) {
161
+ let valueToDeserialize = parsedBody;
162
+ if (operationSpec.isXML && defaultBodyMapper.type.name === MapperTypeNames.Sequence) {
163
+ valueToDeserialize = [];
164
+ const elementName = defaultBodyMapper.xmlElementName;
165
+ if (typeof parsedBody === "object" && elementName) {
166
+ valueToDeserialize = parsedBody[elementName];
167
+ }
168
+ }
169
+ deserializedError = operationSpec.serializer.deserialize(defaultBodyMapper, valueToDeserialize, "error.response.parsedBody", options);
170
+ }
171
+ const internalError = parsedBody.error || deserializedError || parsedBody;
172
+ error.code = internalError.code;
173
+ if (internalError.message) {
174
+ error.message = internalError.message;
175
+ }
176
+ if (defaultBodyMapper) {
177
+ error.response.parsedBody = deserializedError;
178
+ }
179
+ }
180
+ // If error response has headers, try to deserialize it using default header mapper
181
+ if (parsedResponse.headers && defaultHeadersMapper) {
182
+ error.response.parsedHeaders =
183
+ operationSpec.serializer.deserialize(defaultHeadersMapper, parsedResponse.headers.toJSON(), "operationRes.parsedHeaders");
184
+ }
185
+ }
186
+ catch (defaultError) {
187
+ error.message = `Error "${defaultError.message}" occurred in deserializing the responseBody - "${parsedResponse.bodyAsText}" for the default response.`;
188
+ }
189
+ return { error, shouldReturnResponse: false };
190
+ }
191
+ async function parse(jsonContentTypes, xmlContentTypes, operationResponse, opts, parseXML) {
192
+ if (!operationResponse.request.streamResponseStatusCodes?.has(operationResponse.status) &&
193
+ operationResponse.bodyAsText) {
194
+ const text = operationResponse.bodyAsText;
195
+ const contentType = operationResponse.headers.get("Content-Type") || "";
196
+ const contentComponents = !contentType
197
+ ? []
198
+ : contentType.split(";").map((component) => component.toLowerCase());
199
+ try {
200
+ if (contentComponents.length === 0 ||
201
+ contentComponents.some((component) => jsonContentTypes.indexOf(component) !== -1)) {
202
+ operationResponse.parsedBody = JSON.parse(text);
203
+ return operationResponse;
204
+ }
205
+ else if (contentComponents.some((component) => xmlContentTypes.indexOf(component) !== -1)) {
206
+ if (!parseXML) {
207
+ throw new Error("Parsing XML not supported.");
208
+ }
209
+ const body = await parseXML(text, opts.xml);
210
+ operationResponse.parsedBody = body;
211
+ return operationResponse;
212
+ }
213
+ }
214
+ catch (err) {
215
+ const msg = `Error "${err}" occurred while parsing the response body - ${operationResponse.bodyAsText}.`;
216
+ const errCode = err.code || RestError.PARSE_ERROR;
217
+ const e = new RestError(msg, {
218
+ code: errCode,
219
+ statusCode: operationResponse.status,
220
+ request: operationResponse.request,
221
+ response: operationResponse,
222
+ });
223
+ throw e;
224
+ }
225
+ }
226
+ return operationResponse;
227
+ }
228
+ //# sourceMappingURL=deserializationPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deserializationPolicy.js","sourceRoot":"","sources":["../../src/deserializationPolicy.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n FullOperationResponse,\n OperationRequest,\n OperationResponseMap,\n OperationSpec,\n RequiredSerializerOptions,\n SerializerOptions,\n XML_CHARKEY,\n XmlOptions,\n} from \"./interfaces.js\";\nimport {\n PipelinePolicy,\n PipelineRequest,\n PipelineResponse,\n RestError,\n SendRequest,\n} from \"@azure/core-rest-pipeline\";\nimport { MapperTypeNames } from \"./serializer.js\";\nimport { getOperationRequestInfo } from \"./operationHelpers.js\";\n\nconst defaultJsonContentTypes = [\"application/json\", \"text/json\"];\nconst defaultXmlContentTypes = [\"application/xml\", \"application/atom+xml\"];\n\n/**\n * The programmatic identifier of the deserializationPolicy.\n */\nexport const deserializationPolicyName = \"deserializationPolicy\";\n\n/**\n * Options to configure API response deserialization.\n */\nexport interface DeserializationPolicyOptions {\n /**\n * Configures the expected content types for the deserialization of\n * JSON and XML response bodies.\n */\n expectedContentTypes?: DeserializationContentTypes;\n\n /**\n * A function that is able to parse XML. Required for XML support.\n */\n parseXML?: (str: string, opts?: XmlOptions) => Promise<any>;\n\n /**\n * Configures behavior of xml parser and builder.\n */\n serializerOptions?: SerializerOptions;\n}\n\n/**\n * The content-types that will indicate that an operation response should be deserialized in a\n * particular way.\n */\nexport interface DeserializationContentTypes {\n /**\n * The content-types that indicate that an operation response should be deserialized as JSON.\n * Defaults to [ \"application/json\", \"text/json\" ].\n */\n json?: string[];\n\n /**\n * The content-types that indicate that an operation response should be deserialized as XML.\n * Defaults to [ \"application/xml\", \"application/atom+xml\" ].\n */\n xml?: string[];\n}\n\n/**\n * This policy handles parsing out responses according to OperationSpecs on the request.\n */\nexport function deserializationPolicy(options: DeserializationPolicyOptions = {}): PipelinePolicy {\n const jsonContentTypes = options.expectedContentTypes?.json ?? defaultJsonContentTypes;\n const xmlContentTypes = options.expectedContentTypes?.xml ?? defaultXmlContentTypes;\n const parseXML = options.parseXML;\n const serializerOptions = options.serializerOptions;\n const updatedOptions: RequiredSerializerOptions = {\n xml: {\n rootName: serializerOptions?.xml.rootName ?? \"\",\n includeRoot: serializerOptions?.xml.includeRoot ?? false,\n xmlCharKey: serializerOptions?.xml.xmlCharKey ?? XML_CHARKEY,\n },\n };\n\n return {\n name: deserializationPolicyName,\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n const response = await next(request);\n return deserializeResponseBody(\n jsonContentTypes,\n xmlContentTypes,\n response,\n updatedOptions,\n parseXML,\n );\n },\n };\n}\n\nfunction getOperationResponseMap(\n parsedResponse: PipelineResponse,\n): undefined | OperationResponseMap {\n let result: OperationResponseMap | undefined;\n const request: OperationRequest = parsedResponse.request;\n const operationInfo = getOperationRequestInfo(request);\n const operationSpec = operationInfo?.operationSpec;\n if (operationSpec) {\n if (!operationInfo?.operationResponseGetter) {\n result = operationSpec.responses[parsedResponse.status];\n } else {\n result = operationInfo?.operationResponseGetter(operationSpec, parsedResponse);\n }\n }\n return result;\n}\n\nfunction shouldDeserializeResponse(parsedResponse: PipelineResponse): boolean {\n const request: OperationRequest = parsedResponse.request;\n const operationInfo = getOperationRequestInfo(request);\n const shouldDeserialize = operationInfo?.shouldDeserialize;\n let result: boolean;\n if (shouldDeserialize === undefined) {\n result = true;\n } else if (typeof shouldDeserialize === \"boolean\") {\n result = shouldDeserialize;\n } else {\n result = shouldDeserialize(parsedResponse);\n }\n return result;\n}\n\nasync function deserializeResponseBody(\n jsonContentTypes: string[],\n xmlContentTypes: string[],\n response: PipelineResponse,\n options: RequiredSerializerOptions,\n parseXML?: (str: string, opts?: XmlOptions) => Promise<any>,\n): Promise<PipelineResponse> {\n const parsedResponse = await parse(\n jsonContentTypes,\n xmlContentTypes,\n response,\n options,\n parseXML,\n );\n if (!shouldDeserializeResponse(parsedResponse)) {\n return parsedResponse;\n }\n\n const operationInfo = getOperationRequestInfo(parsedResponse.request);\n const operationSpec = operationInfo?.operationSpec;\n if (!operationSpec || !operationSpec.responses) {\n return parsedResponse;\n }\n\n const responseSpec = getOperationResponseMap(parsedResponse);\n const { error, shouldReturnResponse } = handleErrorResponse(\n parsedResponse,\n operationSpec,\n responseSpec,\n options,\n );\n if (error) {\n throw error;\n } else if (shouldReturnResponse) {\n return parsedResponse;\n }\n\n // An operation response spec does exist for current status code, so\n // use it to deserialize the response.\n if (responseSpec) {\n if (responseSpec.bodyMapper) {\n let valueToDeserialize: any = parsedResponse.parsedBody;\n if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperTypeNames.Sequence) {\n valueToDeserialize =\n typeof valueToDeserialize === \"object\"\n ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName!]\n : [];\n }\n try {\n parsedResponse.parsedBody = operationSpec.serializer.deserialize(\n responseSpec.bodyMapper,\n valueToDeserialize,\n \"operationRes.parsedBody\",\n options,\n );\n } catch (deserializeError: any) {\n const restError = new RestError(\n `Error ${deserializeError} occurred in deserializing the responseBody - ${parsedResponse.bodyAsText}`,\n {\n statusCode: parsedResponse.status,\n request: parsedResponse.request,\n response: parsedResponse,\n },\n );\n throw restError;\n }\n } else if (operationSpec.httpMethod === \"HEAD\") {\n // head methods never have a body, but we return a boolean to indicate presence/absence of the resource\n parsedResponse.parsedBody = response.status >= 200 && response.status < 300;\n }\n\n if (responseSpec.headersMapper) {\n parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(\n responseSpec.headersMapper,\n parsedResponse.headers.toJSON(),\n \"operationRes.parsedHeaders\",\n { xml: {}, ignoreUnknownProperties: true },\n );\n }\n }\n\n return parsedResponse;\n}\n\nfunction isOperationSpecEmpty(operationSpec: OperationSpec): boolean {\n const expectedStatusCodes = Object.keys(operationSpec.responses);\n return (\n expectedStatusCodes.length === 0 ||\n (expectedStatusCodes.length === 1 && expectedStatusCodes[0] === \"default\")\n );\n}\n\nfunction handleErrorResponse(\n parsedResponse: FullOperationResponse,\n operationSpec: OperationSpec,\n responseSpec: OperationResponseMap | undefined,\n options: RequiredSerializerOptions,\n): { error: RestError | null; shouldReturnResponse: boolean } {\n const isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300;\n const isExpectedStatusCode: boolean = isOperationSpecEmpty(operationSpec)\n ? isSuccessByStatus\n : !!responseSpec;\n\n if (isExpectedStatusCode) {\n if (responseSpec) {\n if (!responseSpec.isError) {\n return { error: null, shouldReturnResponse: false };\n }\n } else {\n return { error: null, shouldReturnResponse: false };\n }\n }\n\n const errorResponseSpec = responseSpec ?? operationSpec.responses.default;\n\n const initialErrorMessage = parsedResponse.request.streamResponseStatusCodes?.has(\n parsedResponse.status,\n )\n ? `Unexpected status code: ${parsedResponse.status}`\n : (parsedResponse.bodyAsText as string);\n\n const error = new RestError(initialErrorMessage, {\n statusCode: parsedResponse.status,\n request: parsedResponse.request,\n response: parsedResponse,\n });\n\n // If the item failed but there's no error spec or default spec to deserialize the error,\n // we should fail so we just throw the parsed response\n if (!errorResponseSpec) {\n throw error;\n }\n\n const defaultBodyMapper = errorResponseSpec.bodyMapper;\n const defaultHeadersMapper = errorResponseSpec.headersMapper;\n\n try {\n // If error response has a body, try to deserialize it using default body mapper.\n // Then try to extract error code & message from it\n if (parsedResponse.parsedBody) {\n const parsedBody = parsedResponse.parsedBody;\n let deserializedError;\n\n if (defaultBodyMapper) {\n let valueToDeserialize: any = parsedBody;\n if (operationSpec.isXML && defaultBodyMapper.type.name === MapperTypeNames.Sequence) {\n valueToDeserialize = [];\n const elementName = defaultBodyMapper.xmlElementName;\n if (typeof parsedBody === \"object\" && elementName) {\n valueToDeserialize = parsedBody[elementName];\n }\n }\n deserializedError = operationSpec.serializer.deserialize(\n defaultBodyMapper,\n valueToDeserialize,\n \"error.response.parsedBody\",\n options,\n );\n }\n\n const internalError: any = parsedBody.error || deserializedError || parsedBody;\n error.code = internalError.code;\n if (internalError.message) {\n error.message = internalError.message;\n }\n\n if (defaultBodyMapper) {\n (error.response! as FullOperationResponse).parsedBody = deserializedError;\n }\n }\n\n // If error response has headers, try to deserialize it using default header mapper\n if (parsedResponse.headers && defaultHeadersMapper) {\n (error.response! as FullOperationResponse).parsedHeaders =\n operationSpec.serializer.deserialize(\n defaultHeadersMapper,\n parsedResponse.headers.toJSON(),\n \"operationRes.parsedHeaders\",\n );\n }\n } catch (defaultError: any) {\n error.message = `Error \"${defaultError.message}\" occurred in deserializing the responseBody - \"${parsedResponse.bodyAsText}\" for the default response.`;\n }\n\n return { error, shouldReturnResponse: false };\n}\n\nasync function parse(\n jsonContentTypes: string[],\n xmlContentTypes: string[],\n operationResponse: FullOperationResponse,\n opts: RequiredSerializerOptions,\n parseXML?: (str: string, opts?: XmlOptions) => Promise<any>,\n): Promise<FullOperationResponse> {\n if (\n !operationResponse.request.streamResponseStatusCodes?.has(operationResponse.status) &&\n operationResponse.bodyAsText\n ) {\n const text = operationResponse.bodyAsText;\n const contentType: string = operationResponse.headers.get(\"Content-Type\") || \"\";\n const contentComponents: string[] = !contentType\n ? []\n : contentType.split(\";\").map((component) => component.toLowerCase());\n\n try {\n if (\n contentComponents.length === 0 ||\n contentComponents.some((component) => jsonContentTypes.indexOf(component) !== -1)\n ) {\n operationResponse.parsedBody = JSON.parse(text);\n return operationResponse;\n } else if (contentComponents.some((component) => xmlContentTypes.indexOf(component) !== -1)) {\n if (!parseXML) {\n throw new Error(\"Parsing XML not supported.\");\n }\n const body = await parseXML(text, opts.xml);\n operationResponse.parsedBody = body;\n return operationResponse;\n }\n } catch (err: any) {\n const msg = `Error \"${err}\" occurred while parsing the response body - ${operationResponse.bodyAsText}.`;\n const errCode = err.code || RestError.PARSE_ERROR;\n const e = new RestError(msg, {\n code: errCode,\n statusCode: operationResponse.status,\n request: operationResponse.request,\n response: operationResponse,\n });\n throw e;\n }\n }\n\n return operationResponse;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { HttpClient } from "@azure/core-rest-pipeline";
2
+ export declare function getCachedDefaultHttpClient(): HttpClient;
3
+ //# sourceMappingURL=httpClientCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpClientCache.d.ts","sourceRoot":"","sources":["../../src/httpClientCache.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAA2B,MAAM,2BAA2B,CAAC;AAIhF,wBAAgB,0BAA0B,IAAI,UAAU,CAMvD"}
@@ -0,0 +1,11 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { createDefaultHttpClient } from "@azure/core-rest-pipeline";
4
+ let cachedHttpClient;
5
+ export function getCachedDefaultHttpClient() {
6
+ if (!cachedHttpClient) {
7
+ cachedHttpClient = createDefaultHttpClient();
8
+ }
9
+ return cachedHttpClient;
10
+ }
11
+ //# sourceMappingURL=httpClientCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpClientCache.js","sourceRoot":"","sources":["../../src/httpClientCache.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAc,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEhF,IAAI,gBAAwC,CAAC;AAE7C,MAAM,UAAU,0BAA0B;IACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,uBAAuB,EAAE,CAAC;IAC/C,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { HttpClient, createDefaultHttpClient } from \"@azure/core-rest-pipeline\";\n\nlet cachedHttpClient: HttpClient | undefined;\n\nexport function getCachedDefaultHttpClient(): HttpClient {\n if (!cachedHttpClient) {\n cachedHttpClient = createDefaultHttpClient();\n }\n\n return cachedHttpClient;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ export { createSerializer, MapperTypeNames } from "./serializer.js";
2
+ export { ServiceClient, ServiceClientOptions } from "./serviceClient.js";
3
+ export { createClientPipeline, InternalClientPipelineOptions } from "./pipeline.js";
4
+ export { OperationSpec, OperationArguments, OperationOptions, OperationResponseMap, OperationParameter, OperationQueryParameter, OperationURLParameter, Serializer, BaseMapper, Mapper, MapperType, SimpleMapperType, EnumMapper, EnumMapperType, SequenceMapper, SequenceMapperType, DictionaryMapper, DictionaryMapperType, CompositeMapper, CompositeMapperType, MapperConstraints, OperationRequest, OperationRequestOptions, OperationRequestInfo, QueryCollectionFormat, ParameterPath, FullOperationResponse, PolymorphicDiscriminator, SpanConfig, XML_ATTRKEY, XML_CHARKEY, XmlOptions, SerializerOptions, RawResponseCallback, CommonClientOptions, AdditionalPolicyConfig, } from "./interfaces.js";
5
+ export { deserializationPolicy, deserializationPolicyName, DeserializationPolicyOptions, DeserializationContentTypes, } from "./deserializationPolicy.js";
6
+ export { serializationPolicy, serializationPolicyName, SerializationPolicyOptions, } from "./serializationPolicy.js";
7
+ export { authorizeRequestOnClaimChallenge } from "./authorizeRequestOnClaimChallenge.js";
8
+ export { authorizeRequestOnTenantChallenge } from "./authorizeRequestOnTenantChallenge.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,UAAU,EACV,UAAU,EACV,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,qBAAqB,EACrB,wBAAwB,EACxB,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC"}
@@ -0,0 +1,11 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ export { createSerializer, MapperTypeNames } from "./serializer.js";
4
+ export { ServiceClient } from "./serviceClient.js";
5
+ export { createClientPipeline } from "./pipeline.js";
6
+ export { XML_ATTRKEY, XML_CHARKEY, } from "./interfaces.js";
7
+ export { deserializationPolicy, deserializationPolicyName, } from "./deserializationPolicy.js";
8
+ export { serializationPolicy, serializationPolicyName, } from "./serializationPolicy.js";
9
+ export { authorizeRequestOnClaimChallenge } from "./authorizeRequestOnClaimChallenge.js";
10
+ export { authorizeRequestOnTenantChallenge } from "./authorizeRequestOnTenantChallenge.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAiC,MAAM,eAAe,CAAC;AACpF,OAAO,EA8BL,WAAW,EACX,WAAW,GAMZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAG1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport { createSerializer, MapperTypeNames } from \"./serializer.js\";\nexport { ServiceClient, ServiceClientOptions } from \"./serviceClient.js\";\nexport { createClientPipeline, InternalClientPipelineOptions } from \"./pipeline.js\";\nexport {\n OperationSpec,\n OperationArguments,\n OperationOptions,\n OperationResponseMap,\n OperationParameter,\n OperationQueryParameter,\n OperationURLParameter,\n Serializer,\n BaseMapper,\n Mapper,\n MapperType,\n SimpleMapperType,\n EnumMapper,\n EnumMapperType,\n SequenceMapper,\n SequenceMapperType,\n DictionaryMapper,\n DictionaryMapperType,\n CompositeMapper,\n CompositeMapperType,\n MapperConstraints,\n OperationRequest,\n OperationRequestOptions,\n OperationRequestInfo,\n QueryCollectionFormat,\n ParameterPath,\n FullOperationResponse,\n PolymorphicDiscriminator,\n SpanConfig,\n XML_ATTRKEY,\n XML_CHARKEY,\n XmlOptions,\n SerializerOptions,\n RawResponseCallback,\n CommonClientOptions,\n AdditionalPolicyConfig,\n} from \"./interfaces.js\";\nexport {\n deserializationPolicy,\n deserializationPolicyName,\n DeserializationPolicyOptions,\n DeserializationContentTypes,\n} from \"./deserializationPolicy.js\";\nexport {\n serializationPolicy,\n serializationPolicyName,\n SerializationPolicyOptions,\n} from \"./serializationPolicy.js\";\nexport { authorizeRequestOnClaimChallenge } from \"./authorizeRequestOnClaimChallenge.js\";\nexport { authorizeRequestOnTenantChallenge } from \"./authorizeRequestOnTenantChallenge.js\";\n"]}
@@ -0,0 +1,14 @@
1
+ import { OperationParameter, OperationSpec } from "./interfaces.js";
2
+ /**
3
+ * Gets the list of status codes for streaming responses.
4
+ * @internal
5
+ */
6
+ export declare function getStreamingResponseStatusCodes(operationSpec: OperationSpec): Set<number>;
7
+ /**
8
+ * Get the path to this parameter's value as a dotted string (a.b.c).
9
+ * @param parameter - The parameter to get the path string for.
10
+ * @returns The path to this parameter's value as a dotted string.
11
+ * @internal
12
+ */
13
+ export declare function getPathStringFromParameter(parameter: OperationParameter): string;
14
+ //# sourceMappingURL=interfaceHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaceHelpers.d.ts","sourceRoot":"","sources":["../../src/interfaceHelpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGpE;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,aAAa,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAYzF;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAWhF"}
@@ -0,0 +1,39 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { MapperTypeNames } from "./serializer.js";
4
+ /**
5
+ * Gets the list of status codes for streaming responses.
6
+ * @internal
7
+ */
8
+ export function getStreamingResponseStatusCodes(operationSpec) {
9
+ const result = new Set();
10
+ for (const statusCode in operationSpec.responses) {
11
+ const operationResponse = operationSpec.responses[statusCode];
12
+ if (operationResponse.bodyMapper &&
13
+ operationResponse.bodyMapper.type.name === MapperTypeNames.Stream) {
14
+ result.add(Number(statusCode));
15
+ }
16
+ }
17
+ return result;
18
+ }
19
+ /**
20
+ * Get the path to this parameter's value as a dotted string (a.b.c).
21
+ * @param parameter - The parameter to get the path string for.
22
+ * @returns The path to this parameter's value as a dotted string.
23
+ * @internal
24
+ */
25
+ export function getPathStringFromParameter(parameter) {
26
+ const { parameterPath, mapper } = parameter;
27
+ let result;
28
+ if (typeof parameterPath === "string") {
29
+ result = parameterPath;
30
+ }
31
+ else if (Array.isArray(parameterPath)) {
32
+ result = parameterPath.join(".");
33
+ }
34
+ else {
35
+ result = mapper.serializedName;
36
+ }
37
+ return result;
38
+ }
39
+ //# sourceMappingURL=interfaceHelpers.js.map