@azure/storage-file-share 12.15.0-beta.1 → 12.20.0-alpha.20230608.4

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 (324) hide show
  1. package/dist/index.js +5967 -6568
  2. package/dist/index.js.map +1 -1
  3. package/dist-esm/storage-blob/src/BatchResponse.js +4 -0
  4. package/dist-esm/storage-blob/src/BatchResponse.js.map +1 -0
  5. package/dist-esm/storage-blob/src/BatchResponseParser.js +137 -0
  6. package/dist-esm/storage-blob/src/BatchResponseParser.js.map +1 -0
  7. package/dist-esm/storage-blob/src/BatchUtils.browser.js +11 -0
  8. package/dist-esm/storage-blob/src/BatchUtils.browser.js.map +1 -0
  9. package/dist-esm/storage-blob/src/BatchUtils.js +15 -0
  10. package/dist-esm/storage-blob/src/BatchUtils.js.map +1 -0
  11. package/dist-esm/storage-blob/src/BlobBatch.js +267 -0
  12. package/dist-esm/storage-blob/src/BlobBatch.js.map +1 -0
  13. package/dist-esm/storage-blob/src/BlobBatchClient.js +140 -0
  14. package/dist-esm/storage-blob/src/BlobBatchClient.js.map +1 -0
  15. package/dist-esm/storage-blob/src/BlobDownloadResponse.browser.js +7 -0
  16. package/dist-esm/storage-blob/src/BlobDownloadResponse.browser.js.map +1 -0
  17. package/dist-esm/storage-blob/src/BlobDownloadResponse.js +455 -0
  18. package/dist-esm/storage-blob/src/BlobDownloadResponse.js.map +1 -0
  19. package/dist-esm/storage-blob/src/BlobLeaseClient.js +192 -0
  20. package/dist-esm/storage-blob/src/BlobLeaseClient.js.map +1 -0
  21. package/dist-esm/storage-blob/src/BlobQueryResponse.browser.js +362 -0
  22. package/dist-esm/storage-blob/src/BlobQueryResponse.browser.js.map +1 -0
  23. package/dist-esm/storage-blob/src/BlobQueryResponse.js +367 -0
  24. package/dist-esm/storage-blob/src/BlobQueryResponse.js.map +1 -0
  25. package/dist-esm/storage-blob/src/BlobServiceClient.js +702 -0
  26. package/dist-esm/storage-blob/src/BlobServiceClient.js.map +1 -0
  27. package/dist-esm/storage-blob/src/Clients.js +2527 -0
  28. package/dist-esm/storage-blob/src/Clients.js.map +1 -0
  29. package/dist-esm/storage-blob/src/ContainerClient.js +1161 -0
  30. package/dist-esm/storage-blob/src/ContainerClient.js.map +1 -0
  31. package/dist-esm/storage-blob/src/PageBlobRangeResponse.js +24 -0
  32. package/dist-esm/storage-blob/src/PageBlobRangeResponse.js.map +1 -0
  33. package/dist-esm/storage-blob/src/Pipeline.js +259 -0
  34. package/dist-esm/storage-blob/src/Pipeline.js.map +1 -0
  35. package/dist-esm/storage-blob/src/Range.js +21 -0
  36. package/dist-esm/storage-blob/src/Range.js.map +1 -0
  37. package/dist-esm/{src → storage-blob/src}/StorageBrowserPolicyFactory.js +1 -1
  38. package/dist-esm/storage-blob/src/StorageBrowserPolicyFactory.js.map +1 -0
  39. package/dist-esm/storage-blob/src/StorageClient.js +29 -0
  40. package/dist-esm/storage-blob/src/StorageClient.js.map +1 -0
  41. package/dist-esm/storage-blob/src/StorageContextClient.js +17 -0
  42. package/dist-esm/storage-blob/src/StorageContextClient.js.map +1 -0
  43. package/dist-esm/{src → storage-blob/src}/StorageRetryPolicyFactory.js +2 -1
  44. package/dist-esm/storage-blob/src/StorageRetryPolicyFactory.js.map +1 -0
  45. package/dist-esm/{src → storage-blob/src}/credentials/AnonymousCredential.js +1 -1
  46. package/dist-esm/storage-blob/src/credentials/AnonymousCredential.js.map +1 -0
  47. package/dist-esm/storage-blob/src/credentials/Credential.js.map +1 -0
  48. package/dist-esm/storage-blob/src/credentials/StorageSharedKeyCredential.browser.js.map +1 -0
  49. package/dist-esm/{src → storage-blob/src}/credentials/StorageSharedKeyCredential.js +1 -1
  50. package/dist-esm/storage-blob/src/credentials/StorageSharedKeyCredential.js.map +1 -0
  51. package/dist-esm/storage-blob/src/credentials/UserDelegationKeyCredential.browser.js +5 -0
  52. package/dist-esm/storage-blob/src/credentials/UserDelegationKeyCredential.browser.js.map +1 -0
  53. package/dist-esm/storage-blob/src/credentials/UserDelegationKeyCredential.js +31 -0
  54. package/dist-esm/storage-blob/src/credentials/UserDelegationKeyCredential.js.map +1 -0
  55. package/dist-esm/{src → storage-blob/src}/generated/src/index.js +1 -1
  56. package/dist-esm/storage-blob/src/generated/src/index.js.map +1 -0
  57. package/dist-esm/storage-blob/src/generated/src/models/index.js +256 -0
  58. package/dist-esm/storage-blob/src/generated/src/models/index.js.map +1 -0
  59. package/dist-esm/storage-blob/src/generated/src/models/mappers.js +8196 -0
  60. package/dist-esm/storage-blob/src/generated/src/models/mappers.js.map +1 -0
  61. package/dist-esm/storage-blob/src/generated/src/models/parameters.js +1610 -0
  62. package/dist-esm/storage-blob/src/generated/src/models/parameters.js.map +1 -0
  63. package/dist-esm/storage-blob/src/generated/src/operations/appendBlob.js +221 -0
  64. package/dist-esm/storage-blob/src/generated/src/operations/appendBlob.js.map +1 -0
  65. package/dist-esm/storage-blob/src/generated/src/operations/blob.js +997 -0
  66. package/dist-esm/storage-blob/src/generated/src/operations/blob.js.map +1 -0
  67. package/dist-esm/storage-blob/src/generated/src/operations/blockBlob.js +365 -0
  68. package/dist-esm/storage-blob/src/generated/src/operations/blockBlob.js.map +1 -0
  69. package/dist-esm/storage-blob/src/generated/src/operations/container.js +705 -0
  70. package/dist-esm/storage-blob/src/generated/src/operations/container.js.map +1 -0
  71. package/dist-esm/storage-blob/src/generated/src/operations/index.js +14 -0
  72. package/dist-esm/storage-blob/src/generated/src/operations/index.js.map +1 -0
  73. package/dist-esm/storage-blob/src/generated/src/operations/pageBlob.js +456 -0
  74. package/dist-esm/storage-blob/src/generated/src/operations/pageBlob.js.map +1 -0
  75. package/dist-esm/storage-blob/src/generated/src/operations/service.js +315 -0
  76. package/dist-esm/storage-blob/src/generated/src/operations/service.js.map +1 -0
  77. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/appendBlob.js +9 -0
  78. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/appendBlob.js.map +1 -0
  79. package/dist-esm/{src/generated/src/models/index.js → storage-blob/src/generated/src/operationsInterfaces/blob.js} +1 -1
  80. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/blob.js.map +1 -0
  81. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/blockBlob.js +9 -0
  82. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/blockBlob.js.map +1 -0
  83. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/container.js +9 -0
  84. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/container.js.map +1 -0
  85. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/index.js +14 -0
  86. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/index.js.map +1 -0
  87. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/pageBlob.js +9 -0
  88. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/pageBlob.js.map +1 -0
  89. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/service.js +9 -0
  90. package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/service.js.map +1 -0
  91. package/dist-esm/storage-blob/src/generated/src/storageClient.js +49 -0
  92. package/dist-esm/storage-blob/src/generated/src/storageClient.js.map +1 -0
  93. package/dist-esm/storage-blob/src/generatedModels.js +4 -0
  94. package/dist-esm/storage-blob/src/generatedModels.js.map +1 -0
  95. package/dist-esm/storage-blob/src/index.browser.js +23 -0
  96. package/dist-esm/storage-blob/src/index.browser.js.map +1 -0
  97. package/dist-esm/storage-blob/src/index.js +33 -0
  98. package/dist-esm/storage-blob/src/index.js.map +1 -0
  99. package/dist-esm/storage-blob/src/log.js +8 -0
  100. package/dist-esm/storage-blob/src/log.js.map +1 -0
  101. package/dist-esm/storage-blob/src/models.js +108 -0
  102. package/dist-esm/storage-blob/src/models.js.map +1 -0
  103. package/dist-esm/storage-blob/src/policies/AnonymousCredentialPolicy.js.map +1 -0
  104. package/dist-esm/{src → storage-blob/src}/policies/CredentialPolicy.js +1 -1
  105. package/dist-esm/storage-blob/src/policies/CredentialPolicy.js.map +1 -0
  106. package/dist-esm/storage-blob/src/policies/RequestPolicy.js +40 -0
  107. package/dist-esm/storage-blob/src/policies/RequestPolicy.js.map +1 -0
  108. package/dist-esm/{src → storage-blob/src}/policies/StorageBrowserPolicy.js +2 -1
  109. package/dist-esm/{src → storage-blob/src}/policies/StorageBrowserPolicy.js.map +1 -1
  110. package/dist-esm/storage-blob/src/policies/StorageBrowserPolicyV2.js +31 -0
  111. package/dist-esm/storage-blob/src/policies/StorageBrowserPolicyV2.js.map +1 -0
  112. package/dist-esm/{src → storage-blob/src}/policies/StorageRetryPolicy.js +15 -6
  113. package/dist-esm/storage-blob/src/policies/StorageRetryPolicy.js.map +1 -0
  114. package/dist-esm/storage-blob/src/policies/StorageRetryPolicyV2.js +165 -0
  115. package/dist-esm/storage-blob/src/policies/StorageRetryPolicyV2.js.map +1 -0
  116. package/dist-esm/storage-blob/src/policies/StorageSharedKeyCredentialPolicy.js.map +1 -0
  117. package/dist-esm/storage-blob/src/policies/StorageSharedKeyCredentialPolicyV2.browser.js +18 -0
  118. package/dist-esm/storage-blob/src/policies/StorageSharedKeyCredentialPolicyV2.browser.js.map +1 -0
  119. package/dist-esm/storage-blob/src/policies/StorageSharedKeyCredentialPolicyV2.js +131 -0
  120. package/dist-esm/storage-blob/src/policies/StorageSharedKeyCredentialPolicyV2.js.map +1 -0
  121. package/dist-esm/storage-blob/src/pollers/BlobStartCopyFromUrlPoller.js +130 -0
  122. package/dist-esm/storage-blob/src/pollers/BlobStartCopyFromUrlPoller.js.map +1 -0
  123. package/dist-esm/storage-blob/src/sas/AccountSASPermissions.js +227 -0
  124. package/dist-esm/storage-blob/src/sas/AccountSASPermissions.js.map +1 -0
  125. package/dist-esm/storage-blob/src/sas/AccountSASResourceTypes.js.map +1 -0
  126. package/dist-esm/storage-blob/src/sas/AccountSASServices.js.map +1 -0
  127. package/dist-esm/storage-blob/src/sas/AccountSASSignatureValues.js +93 -0
  128. package/dist-esm/storage-blob/src/sas/AccountSASSignatureValues.js.map +1 -0
  129. package/dist-esm/storage-blob/src/sas/BlobSASPermissions.js +195 -0
  130. package/dist-esm/storage-blob/src/sas/BlobSASPermissions.js.map +1 -0
  131. package/dist-esm/storage-blob/src/sas/BlobSASSignatureValues.js +555 -0
  132. package/dist-esm/storage-blob/src/sas/BlobSASSignatureValues.js.map +1 -0
  133. package/dist-esm/storage-blob/src/sas/ContainerSASPermissions.js +221 -0
  134. package/dist-esm/storage-blob/src/sas/ContainerSASPermissions.js.map +1 -0
  135. package/dist-esm/storage-blob/src/sas/SASQueryParameters.js +234 -0
  136. package/dist-esm/storage-blob/src/sas/SASQueryParameters.js.map +1 -0
  137. package/dist-esm/storage-blob/src/sas/SasIPRange.js +13 -0
  138. package/dist-esm/storage-blob/src/sas/SasIPRange.js.map +1 -0
  139. package/dist-esm/storage-blob/src/utils/Batch.js.map +1 -0
  140. package/dist-esm/storage-blob/src/utils/BlobQuickQueryStream.js +111 -0
  141. package/dist-esm/storage-blob/src/utils/BlobQuickQueryStream.js.map +1 -0
  142. package/dist-esm/storage-blob/src/utils/Mutex.js +66 -0
  143. package/dist-esm/storage-blob/src/utils/Mutex.js.map +1 -0
  144. package/dist-esm/storage-blob/src/utils/RetriableReadableStream.js +119 -0
  145. package/dist-esm/storage-blob/src/utils/RetriableReadableStream.js.map +1 -0
  146. package/dist-esm/storage-blob/src/utils/cache.js +11 -0
  147. package/dist-esm/storage-blob/src/utils/cache.js.map +1 -0
  148. package/dist-esm/storage-blob/src/utils/constants.js +223 -0
  149. package/dist-esm/storage-blob/src/utils/constants.js.map +1 -0
  150. package/dist-esm/storage-blob/src/utils/tracing.js +14 -0
  151. package/dist-esm/storage-blob/src/utils/tracing.js.map +1 -0
  152. package/dist-esm/storage-blob/src/utils/utils.browser.js +48 -0
  153. package/dist-esm/storage-blob/src/utils/utils.browser.js.map +1 -0
  154. package/dist-esm/storage-blob/src/utils/utils.common.js +754 -0
  155. package/dist-esm/storage-blob/src/utils/utils.common.js.map +1 -0
  156. package/dist-esm/storage-blob/src/utils/utils.node.js +132 -0
  157. package/dist-esm/storage-blob/src/utils/utils.node.js.map +1 -0
  158. package/dist-esm/storage-file-share/src/AccountSASPermissions.js.map +1 -0
  159. package/dist-esm/storage-file-share/src/AccountSASResourceTypes.js +72 -0
  160. package/dist-esm/storage-file-share/src/AccountSASResourceTypes.js.map +1 -0
  161. package/dist-esm/storage-file-share/src/AccountSASServices.js +80 -0
  162. package/dist-esm/storage-file-share/src/AccountSASServices.js.map +1 -0
  163. package/dist-esm/storage-file-share/src/AccountSASSignatureValues.js.map +1 -0
  164. package/dist-esm/{src → storage-file-share/src}/Clients.js +476 -1253
  165. package/dist-esm/storage-file-share/src/Clients.js.map +1 -0
  166. package/dist-esm/storage-file-share/src/FileDownloadResponse.browser.js.map +1 -0
  167. package/dist-esm/{src → storage-file-share/src}/FileDownloadResponse.js +15 -14
  168. package/dist-esm/storage-file-share/src/FileDownloadResponse.js.map +1 -0
  169. package/dist-esm/storage-file-share/src/FileSASPermissions.js.map +1 -0
  170. package/dist-esm/storage-file-share/src/FileSASSignatureValues.js.map +1 -0
  171. package/dist-esm/storage-file-share/src/FileSystemAttributes.js.map +1 -0
  172. package/dist-esm/storage-file-share/src/Range.js.map +1 -0
  173. package/dist-esm/{src → storage-file-share/src}/SASQueryParameters.js +14 -14
  174. package/dist-esm/storage-file-share/src/SASQueryParameters.js.map +1 -0
  175. package/dist-esm/storage-file-share/src/SasIPRange.js.map +1 -0
  176. package/dist-esm/{src → storage-file-share/src}/ShareClientInternal.js +1 -2
  177. package/dist-esm/storage-file-share/src/ShareClientInternal.js.map +1 -0
  178. package/dist-esm/storage-file-share/src/ShareSASPermissions.js.map +1 -0
  179. package/dist-esm/{src → storage-file-share/src}/ShareServiceClient.js +58 -121
  180. package/dist-esm/storage-file-share/src/ShareServiceClient.js.map +1 -0
  181. package/dist-esm/{src → storage-file-share/src}/StorageClient.js +8 -14
  182. package/dist-esm/storage-file-share/src/StorageClient.js.map +1 -0
  183. package/dist-esm/storage-file-share/src/StorageContextClient.js +18 -0
  184. package/dist-esm/storage-file-share/src/StorageContextClient.js.map +1 -0
  185. package/dist-esm/storage-file-share/src/generated/src/index.js +11 -0
  186. package/dist-esm/storage-file-share/src/generated/src/index.js.map +1 -0
  187. package/dist-esm/storage-file-share/src/generated/src/models/index.js +144 -0
  188. package/dist-esm/storage-file-share/src/generated/src/models/index.js.map +1 -0
  189. package/dist-esm/{src → storage-file-share/src}/generated/src/models/mappers.js +16 -64
  190. package/dist-esm/storage-file-share/src/generated/src/models/mappers.js.map +1 -0
  191. package/dist-esm/{src → storage-file-share/src}/generated/src/models/parameters.js +17 -37
  192. package/dist-esm/storage-file-share/src/generated/src/models/parameters.js.map +1 -0
  193. package/dist-esm/{src → storage-file-share/src}/generated/src/operations/directory.js +17 -73
  194. package/dist-esm/storage-file-share/src/generated/src/operations/directory.js.map +1 -0
  195. package/dist-esm/{src → storage-file-share/src}/generated/src/operations/file.js +33 -142
  196. package/dist-esm/storage-file-share/src/generated/src/operations/file.js.map +1 -0
  197. package/dist-esm/storage-file-share/src/generated/src/operations/index.js.map +1 -0
  198. package/dist-esm/{src → storage-file-share/src}/generated/src/operations/service.js +7 -17
  199. package/dist-esm/storage-file-share/src/generated/src/operations/service.js.map +1 -0
  200. package/dist-esm/{src → storage-file-share/src}/generated/src/operations/share.js +26 -85
  201. package/dist-esm/storage-file-share/src/generated/src/operations/share.js.map +1 -0
  202. package/dist-esm/storage-file-share/src/generated/src/operationsInterfaces/directory.js +9 -0
  203. package/dist-esm/storage-file-share/src/generated/src/operationsInterfaces/directory.js.map +1 -0
  204. package/dist-esm/storage-file-share/src/generated/src/operationsInterfaces/file.js +9 -0
  205. package/dist-esm/storage-file-share/src/generated/src/operationsInterfaces/file.js.map +1 -0
  206. package/dist-esm/storage-file-share/src/generated/src/operationsInterfaces/index.js +12 -0
  207. package/dist-esm/storage-file-share/src/generated/src/operationsInterfaces/index.js.map +1 -0
  208. package/dist-esm/storage-file-share/src/generated/src/operationsInterfaces/service.js +9 -0
  209. package/dist-esm/storage-file-share/src/generated/src/operationsInterfaces/service.js.map +1 -0
  210. package/dist-esm/storage-file-share/src/generated/src/operationsInterfaces/share.js +9 -0
  211. package/dist-esm/storage-file-share/src/generated/src/operationsInterfaces/share.js.map +1 -0
  212. package/dist-esm/storage-file-share/src/generated/src/storageClient.js +48 -0
  213. package/dist-esm/storage-file-share/src/generated/src/storageClient.js.map +1 -0
  214. package/dist-esm/storage-file-share/src/generatedModels.js +4 -0
  215. package/dist-esm/storage-file-share/src/generatedModels.js.map +1 -0
  216. package/dist-esm/storage-file-share/src/index.browser.js +18 -0
  217. package/dist-esm/storage-file-share/src/index.browser.js.map +1 -0
  218. package/dist-esm/storage-file-share/src/index.js +28 -0
  219. package/dist-esm/storage-file-share/src/index.js.map +1 -0
  220. package/dist-esm/storage-file-share/src/log.js.map +1 -0
  221. package/dist-esm/storage-file-share/src/models.js.map +1 -0
  222. package/dist-esm/storage-file-share/src/utils/Batch.js +122 -0
  223. package/dist-esm/storage-file-share/src/utils/Batch.js.map +1 -0
  224. package/dist-esm/storage-file-share/src/utils/BufferScheduler.js.map +1 -0
  225. package/dist-esm/{src → storage-file-share/src}/utils/RetriableReadableStream.js +51 -48
  226. package/dist-esm/storage-file-share/src/utils/RetriableReadableStream.js.map +1 -0
  227. package/dist-esm/{src → storage-file-share/src}/utils/constants.js +2 -6
  228. package/dist-esm/storage-file-share/src/utils/constants.js.map +1 -0
  229. package/dist-esm/storage-file-share/src/utils/tracing.js +14 -0
  230. package/dist-esm/storage-file-share/src/utils/tracing.js.map +1 -0
  231. package/dist-esm/storage-file-share/src/utils/utils.browser.js.map +1 -0
  232. package/dist-esm/{src → storage-file-share/src}/utils/utils.common.js +77 -94
  233. package/dist-esm/storage-file-share/src/utils/utils.common.js.map +1 -0
  234. package/dist-esm/storage-file-share/src/utils/utils.node.js.map +1 -0
  235. package/package.json +36 -31
  236. package/types/3.1/storage-file-share.d.ts +1454 -532
  237. package/types/latest/storage-file-share.d.ts +1571 -544
  238. package/dist-esm/src/AccountSASPermissions.js.map +0 -1
  239. package/dist-esm/src/AccountSASResourceTypes.js.map +0 -1
  240. package/dist-esm/src/AccountSASServices.js.map +0 -1
  241. package/dist-esm/src/AccountSASSignatureValues.js.map +0 -1
  242. package/dist-esm/src/Clients.js.map +0 -1
  243. package/dist-esm/src/FileDownloadResponse.browser.js.map +0 -1
  244. package/dist-esm/src/FileDownloadResponse.js.map +0 -1
  245. package/dist-esm/src/FileSASPermissions.js.map +0 -1
  246. package/dist-esm/src/FileSASSignatureValues.js.map +0 -1
  247. package/dist-esm/src/FileSystemAttributes.js.map +0 -1
  248. package/dist-esm/src/Pipeline.js +0 -88
  249. package/dist-esm/src/Pipeline.js.map +0 -1
  250. package/dist-esm/src/Range.js.map +0 -1
  251. package/dist-esm/src/SASQueryParameters.js.map +0 -1
  252. package/dist-esm/src/SasIPRange.js.map +0 -1
  253. package/dist-esm/src/ShareClientInternal.js.map +0 -1
  254. package/dist-esm/src/ShareSASPermissions.js.map +0 -1
  255. package/dist-esm/src/ShareServiceClient.js.map +0 -1
  256. package/dist-esm/src/StorageBrowserPolicyFactory.js.map +0 -1
  257. package/dist-esm/src/StorageClient.js.map +0 -1
  258. package/dist-esm/src/StorageRetryPolicyFactory.js.map +0 -1
  259. package/dist-esm/src/TelemetryPolicyFactory.js +0 -50
  260. package/dist-esm/src/TelemetryPolicyFactory.js.map +0 -1
  261. package/dist-esm/src/credentials/AnonymousCredential.js.map +0 -1
  262. package/dist-esm/src/credentials/Credential.js.map +0 -1
  263. package/dist-esm/src/credentials/StorageSharedKeyCredential.browser.js.map +0 -1
  264. package/dist-esm/src/credentials/StorageSharedKeyCredential.js.map +0 -1
  265. package/dist-esm/src/generated/src/index.js.map +0 -1
  266. package/dist-esm/src/generated/src/models/index.js.map +0 -1
  267. package/dist-esm/src/generated/src/models/mappers.js.map +0 -1
  268. package/dist-esm/src/generated/src/models/parameters.js.map +0 -1
  269. package/dist-esm/src/generated/src/operations/directory.js.map +0 -1
  270. package/dist-esm/src/generated/src/operations/file.js.map +0 -1
  271. package/dist-esm/src/generated/src/operations/index.js.map +0 -1
  272. package/dist-esm/src/generated/src/operations/service.js.map +0 -1
  273. package/dist-esm/src/generated/src/operations/share.js.map +0 -1
  274. package/dist-esm/src/generated/src/storageClient.js +0 -25
  275. package/dist-esm/src/generated/src/storageClient.js.map +0 -1
  276. package/dist-esm/src/generated/src/storageClientContext.js +0 -40
  277. package/dist-esm/src/generated/src/storageClientContext.js.map +0 -1
  278. package/dist-esm/src/generatedModels.js +0 -8
  279. package/dist-esm/src/generatedModels.js.map +0 -1
  280. package/dist-esm/src/index.browser.js +0 -17
  281. package/dist-esm/src/index.browser.js.map +0 -1
  282. package/dist-esm/src/index.js +0 -27
  283. package/dist-esm/src/index.js.map +0 -1
  284. package/dist-esm/src/log.js.map +0 -1
  285. package/dist-esm/src/models.js.map +0 -1
  286. package/dist-esm/src/policies/AnonymousCredentialPolicy.js.map +0 -1
  287. package/dist-esm/src/policies/CredentialPolicy.js.map +0 -1
  288. package/dist-esm/src/policies/StorageRetryPolicy.js.map +0 -1
  289. package/dist-esm/src/policies/StorageSharedKeyCredentialPolicy.js.map +0 -1
  290. package/dist-esm/src/policies/TelemetryPolicy.js +0 -36
  291. package/dist-esm/src/policies/TelemetryPolicy.js.map +0 -1
  292. package/dist-esm/src/utils/Batch.js.map +0 -1
  293. package/dist-esm/src/utils/BufferScheduler.js.map +0 -1
  294. package/dist-esm/src/utils/RetriableReadableStream.js.map +0 -1
  295. package/dist-esm/src/utils/cache.js +0 -8
  296. package/dist-esm/src/utils/cache.js.map +0 -1
  297. package/dist-esm/src/utils/constants.js.map +0 -1
  298. package/dist-esm/src/utils/tracing.js +0 -27
  299. package/dist-esm/src/utils/tracing.js.map +0 -1
  300. package/dist-esm/src/utils/utils.browser.js.map +0 -1
  301. package/dist-esm/src/utils/utils.common.js.map +0 -1
  302. package/dist-esm/src/utils/utils.node.js.map +0 -1
  303. /package/dist-esm/{src → storage-blob/src}/credentials/Credential.js +0 -0
  304. /package/dist-esm/{src → storage-blob/src}/credentials/StorageSharedKeyCredential.browser.js +0 -0
  305. /package/dist-esm/{src → storage-blob/src}/policies/AnonymousCredentialPolicy.js +0 -0
  306. /package/dist-esm/{src → storage-blob/src}/policies/StorageSharedKeyCredentialPolicy.js +0 -0
  307. /package/dist-esm/{src → storage-blob/src/sas}/AccountSASResourceTypes.js +0 -0
  308. /package/dist-esm/{src → storage-blob/src/sas}/AccountSASServices.js +0 -0
  309. /package/dist-esm/{src → storage-blob/src}/utils/Batch.js +0 -0
  310. /package/dist-esm/{src → storage-file-share/src}/AccountSASPermissions.js +0 -0
  311. /package/dist-esm/{src → storage-file-share/src}/AccountSASSignatureValues.js +0 -0
  312. /package/dist-esm/{src → storage-file-share/src}/FileDownloadResponse.browser.js +0 -0
  313. /package/dist-esm/{src → storage-file-share/src}/FileSASPermissions.js +0 -0
  314. /package/dist-esm/{src → storage-file-share/src}/FileSASSignatureValues.js +0 -0
  315. /package/dist-esm/{src → storage-file-share/src}/FileSystemAttributes.js +0 -0
  316. /package/dist-esm/{src → storage-file-share/src}/Range.js +0 -0
  317. /package/dist-esm/{src → storage-file-share/src}/SasIPRange.js +0 -0
  318. /package/dist-esm/{src → storage-file-share/src}/ShareSASPermissions.js +0 -0
  319. /package/dist-esm/{src → storage-file-share/src}/generated/src/operations/index.js +0 -0
  320. /package/dist-esm/{src → storage-file-share/src}/log.js +0 -0
  321. /package/dist-esm/{src → storage-file-share/src}/models.js +0 -0
  322. /package/dist-esm/{src → storage-file-share/src}/utils/BufferScheduler.js +0 -0
  323. /package/dist-esm/{src → storage-file-share/src}/utils/utils.browser.js +0 -0
  324. /package/dist-esm/{src → storage-file-share/src}/utils/utils.node.js +0 -0
@@ -0,0 +1,165 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { AbortError } from "@azure/abort-controller";
4
+ import { isRestError, RestError, } from "@azure/core-rest-pipeline";
5
+ import { getErrorMessage } from "@azure/core-util";
6
+ import { URLConstants } from "../utils/constants";
7
+ import { delay, setURLHost, setURLParameter } from "../utils/utils.common";
8
+ import { logger } from "../log";
9
+ /**
10
+ * Name of the {@link storageRetryPolicy}
11
+ */
12
+ export const storageRetryPolicyName = "storageRetryPolicy";
13
+ /**
14
+ * RetryPolicy types.
15
+ */
16
+ export var StorageRetryPolicyType;
17
+ (function (StorageRetryPolicyType) {
18
+ /**
19
+ * Exponential retry. Retry time delay grows exponentially.
20
+ */
21
+ StorageRetryPolicyType[StorageRetryPolicyType["EXPONENTIAL"] = 0] = "EXPONENTIAL";
22
+ /**
23
+ * Linear retry. Retry time delay grows linearly.
24
+ */
25
+ StorageRetryPolicyType[StorageRetryPolicyType["FIXED"] = 1] = "FIXED";
26
+ })(StorageRetryPolicyType || (StorageRetryPolicyType = {}));
27
+ // Default values of StorageRetryOptions
28
+ const DEFAULT_RETRY_OPTIONS = {
29
+ maxRetryDelayInMs: 120 * 1000,
30
+ maxTries: 4,
31
+ retryDelayInMs: 4 * 1000,
32
+ retryPolicyType: StorageRetryPolicyType.EXPONENTIAL,
33
+ secondaryHost: "",
34
+ tryTimeoutInMs: undefined, // Use server side default timeout strategy
35
+ };
36
+ const retriableErrors = [
37
+ "ETIMEDOUT",
38
+ "ESOCKETTIMEDOUT",
39
+ "ECONNREFUSED",
40
+ "ECONNRESET",
41
+ "ENOENT",
42
+ "ENOTFOUND",
43
+ "TIMEOUT",
44
+ "EPIPE",
45
+ "REQUEST_SEND_ERROR",
46
+ ];
47
+ const RETRY_ABORT_ERROR = new AbortError("The operation was aborted.");
48
+ /**
49
+ * Retry policy with exponential retry and linear retry implemented.
50
+ */
51
+ export function storageRetryPolicy(options = {}) {
52
+ var _a, _b, _c, _d, _e, _f;
53
+ const retryPolicyType = (_a = options.retryPolicyType) !== null && _a !== void 0 ? _a : DEFAULT_RETRY_OPTIONS.retryPolicyType;
54
+ const maxTries = (_b = options.maxTries) !== null && _b !== void 0 ? _b : DEFAULT_RETRY_OPTIONS.maxTries;
55
+ const retryDelayInMs = (_c = options.retryDelayInMs) !== null && _c !== void 0 ? _c : DEFAULT_RETRY_OPTIONS.retryDelayInMs;
56
+ const maxRetryDelayInMs = (_d = options.maxRetryDelayInMs) !== null && _d !== void 0 ? _d : DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs;
57
+ const secondaryHost = (_e = options.secondaryHost) !== null && _e !== void 0 ? _e : DEFAULT_RETRY_OPTIONS.secondaryHost;
58
+ const tryTimeoutInMs = (_f = options.tryTimeoutInMs) !== null && _f !== void 0 ? _f : DEFAULT_RETRY_OPTIONS.tryTimeoutInMs;
59
+ function shouldRetry({ isPrimaryRetry, attempt, response, error, }) {
60
+ var _a, _b;
61
+ if (attempt >= maxTries) {
62
+ logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${maxTries}, no further try.`);
63
+ return false;
64
+ }
65
+ if (error) {
66
+ for (const retriableError of retriableErrors) {
67
+ if (error.name.toUpperCase().includes(retriableError) ||
68
+ error.message.toUpperCase().includes(retriableError) ||
69
+ (error.code && error.code.toString().toUpperCase() === retriableError)) {
70
+ logger.info(`RetryPolicy: Network error ${retriableError} found, will retry.`);
71
+ return true;
72
+ }
73
+ }
74
+ if ((error === null || error === void 0 ? void 0 : error.code) === "PARSE_ERROR" &&
75
+ (error === null || error === void 0 ? void 0 : error.message.startsWith(`Error "Error: Unclosed root tag`))) {
76
+ logger.info("RetryPolicy: Incomplete XML response likely due to service timeout, will retry.");
77
+ return true;
78
+ }
79
+ }
80
+ // If attempt was against the secondary & it returned a StatusNotFound (404), then
81
+ // the resource was not found. This may be due to replication delay. So, in this
82
+ // case, we'll never try the secondary again for this operation.
83
+ if (response || error) {
84
+ const statusCode = (_b = (_a = response === null || response === void 0 ? void 0 : response.status) !== null && _a !== void 0 ? _a : error === null || error === void 0 ? void 0 : error.statusCode) !== null && _b !== void 0 ? _b : 0;
85
+ if (!isPrimaryRetry && statusCode === 404) {
86
+ logger.info(`RetryPolicy: Secondary access with 404, will retry.`);
87
+ return true;
88
+ }
89
+ // Server internal error or server timeout
90
+ if (statusCode === 503 || statusCode === 500) {
91
+ logger.info(`RetryPolicy: Will retry for status code ${statusCode}.`);
92
+ return true;
93
+ }
94
+ }
95
+ return false;
96
+ }
97
+ function calculateDelay(isPrimaryRetry, attempt) {
98
+ let delayTimeInMs = 0;
99
+ if (isPrimaryRetry) {
100
+ switch (retryPolicyType) {
101
+ case StorageRetryPolicyType.EXPONENTIAL:
102
+ delayTimeInMs = Math.min((Math.pow(2, attempt - 1) - 1) * retryDelayInMs, maxRetryDelayInMs);
103
+ break;
104
+ case StorageRetryPolicyType.FIXED:
105
+ delayTimeInMs = retryDelayInMs;
106
+ break;
107
+ }
108
+ }
109
+ else {
110
+ delayTimeInMs = Math.random() * 1000;
111
+ }
112
+ logger.info(`RetryPolicy: Delay for ${delayTimeInMs}ms`);
113
+ return delayTimeInMs;
114
+ }
115
+ return {
116
+ name: storageRetryPolicyName,
117
+ async sendRequest(request, next) {
118
+ // Set the server-side timeout query parameter "timeout=[seconds]"
119
+ if (tryTimeoutInMs) {
120
+ request.url = setURLParameter(request.url, URLConstants.Parameters.TIMEOUT, String(Math.floor(tryTimeoutInMs / 1000)));
121
+ }
122
+ const primaryUrl = request.url;
123
+ const secondaryUrl = secondaryHost ? setURLHost(request.url, secondaryHost) : undefined;
124
+ let secondaryHas404 = false;
125
+ let attempt = 1;
126
+ let retryAgain = true;
127
+ let response;
128
+ let error;
129
+ while (retryAgain) {
130
+ const isPrimaryRetry = secondaryHas404 ||
131
+ !secondaryUrl ||
132
+ !["GET", "HEAD", "OPTIONS"].includes(request.method) ||
133
+ attempt % 2 === 1;
134
+ request.url = isPrimaryRetry ? primaryUrl : secondaryUrl;
135
+ response = undefined;
136
+ error = undefined;
137
+ try {
138
+ logger.info(`RetryPolicy: =====> Try=${attempt} ${isPrimaryRetry ? "Primary" : "Secondary"}`);
139
+ response = await next(request);
140
+ secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404);
141
+ }
142
+ catch (e) {
143
+ if (isRestError(e)) {
144
+ logger.error(`RetryPolicy: Caught error, message: ${e.message}, code: ${e.code}`);
145
+ error = e;
146
+ }
147
+ else {
148
+ logger.error(`RetryPolicy: Caught error, message: ${getErrorMessage(e)}`);
149
+ throw e;
150
+ }
151
+ }
152
+ retryAgain = shouldRetry({ isPrimaryRetry, attempt, response, error });
153
+ if (retryAgain) {
154
+ await delay(calculateDelay(isPrimaryRetry, attempt), request.abortSignal, RETRY_ABORT_ERROR);
155
+ }
156
+ attempt++;
157
+ }
158
+ if (response) {
159
+ return response;
160
+ }
161
+ throw error !== null && error !== void 0 ? error : new RestError("RetryPolicy failed without known error.");
162
+ },
163
+ };
164
+ }
165
+ //# sourceMappingURL=StorageRetryPolicyV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageRetryPolicyV2.js","sourceRoot":"","sources":["../../../../../storage-blob/src/policies/StorageRetryPolicyV2.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AbortError } from \"@azure/abort-controller\";\nimport {\n PipelinePolicy,\n PipelineRequest,\n SendRequest,\n PipelineResponse,\n isRestError,\n RestError,\n} from \"@azure/core-rest-pipeline\";\nimport { getErrorMessage } from \"@azure/core-util\";\nimport { StorageRetryOptions } from \"../StorageRetryPolicyFactory\";\nimport { URLConstants } from \"../utils/constants\";\nimport { delay, setURLHost, setURLParameter } from \"../utils/utils.common\";\nimport { logger } from \"../log\";\n\n/**\n * Name of the {@link storageRetryPolicy}\n */\nexport const storageRetryPolicyName = \"storageRetryPolicy\";\n\n/**\n * RetryPolicy types.\n */\nexport enum StorageRetryPolicyType {\n /**\n * Exponential retry. Retry time delay grows exponentially.\n */\n EXPONENTIAL,\n /**\n * Linear retry. Retry time delay grows linearly.\n */\n FIXED,\n}\n\n// Default values of StorageRetryOptions\nconst DEFAULT_RETRY_OPTIONS = {\n maxRetryDelayInMs: 120 * 1000,\n maxTries: 4,\n retryDelayInMs: 4 * 1000,\n retryPolicyType: StorageRetryPolicyType.EXPONENTIAL,\n secondaryHost: \"\",\n tryTimeoutInMs: undefined, // Use server side default timeout strategy\n} as const;\n\nconst retriableErrors = [\n \"ETIMEDOUT\",\n \"ESOCKETTIMEDOUT\",\n \"ECONNREFUSED\",\n \"ECONNRESET\",\n \"ENOENT\",\n \"ENOTFOUND\",\n \"TIMEOUT\",\n \"EPIPE\",\n \"REQUEST_SEND_ERROR\",\n] as const;\n\nconst RETRY_ABORT_ERROR = new AbortError(\"The operation was aborted.\");\n\n/**\n * Retry policy with exponential retry and linear retry implemented.\n */\nexport function storageRetryPolicy(options: StorageRetryOptions = {}): PipelinePolicy {\n const retryPolicyType = options.retryPolicyType ?? DEFAULT_RETRY_OPTIONS.retryPolicyType;\n const maxTries = options.maxTries ?? DEFAULT_RETRY_OPTIONS.maxTries;\n const retryDelayInMs = options.retryDelayInMs ?? DEFAULT_RETRY_OPTIONS.retryDelayInMs;\n const maxRetryDelayInMs = options.maxRetryDelayInMs ?? DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs;\n const secondaryHost = options.secondaryHost ?? DEFAULT_RETRY_OPTIONS.secondaryHost;\n const tryTimeoutInMs = options.tryTimeoutInMs ?? DEFAULT_RETRY_OPTIONS.tryTimeoutInMs;\n\n function shouldRetry({\n isPrimaryRetry,\n attempt,\n response,\n error,\n }: {\n isPrimaryRetry: boolean;\n attempt: number;\n response?: PipelineResponse;\n error?: RestError;\n }): boolean {\n if (attempt >= maxTries) {\n logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${maxTries}, no further try.`);\n return false;\n }\n if (error) {\n for (const retriableError of retriableErrors) {\n if (\n error.name.toUpperCase().includes(retriableError) ||\n error.message.toUpperCase().includes(retriableError) ||\n (error.code && error.code.toString().toUpperCase() === retriableError)\n ) {\n logger.info(`RetryPolicy: Network error ${retriableError} found, will retry.`);\n return true;\n }\n }\n if (\n error?.code === \"PARSE_ERROR\" &&\n error?.message.startsWith(`Error \"Error: Unclosed root tag`)\n ) {\n logger.info(\n \"RetryPolicy: Incomplete XML response likely due to service timeout, will retry.\"\n );\n return true;\n }\n }\n // If attempt was against the secondary & it returned a StatusNotFound (404), then\n // the resource was not found. This may be due to replication delay. So, in this\n // case, we'll never try the secondary again for this operation.\n if (response || error) {\n const statusCode = response?.status ?? error?.statusCode ?? 0;\n if (!isPrimaryRetry && statusCode === 404) {\n logger.info(`RetryPolicy: Secondary access with 404, will retry.`);\n return true;\n }\n\n // Server internal error or server timeout\n if (statusCode === 503 || statusCode === 500) {\n logger.info(`RetryPolicy: Will retry for status code ${statusCode}.`);\n return true;\n }\n }\n\n return false;\n }\n function calculateDelay(isPrimaryRetry: boolean, attempt: number): number {\n let delayTimeInMs = 0;\n\n if (isPrimaryRetry) {\n switch (retryPolicyType) {\n case StorageRetryPolicyType.EXPONENTIAL:\n delayTimeInMs = Math.min(\n (Math.pow(2, attempt - 1) - 1) * retryDelayInMs,\n maxRetryDelayInMs\n );\n break;\n case StorageRetryPolicyType.FIXED:\n delayTimeInMs = retryDelayInMs;\n break;\n }\n } else {\n delayTimeInMs = Math.random() * 1000;\n }\n\n logger.info(`RetryPolicy: Delay for ${delayTimeInMs}ms`);\n return delayTimeInMs;\n }\n return {\n name: storageRetryPolicyName,\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n // Set the server-side timeout query parameter \"timeout=[seconds]\"\n if (tryTimeoutInMs) {\n request.url = setURLParameter(\n request.url,\n URLConstants.Parameters.TIMEOUT,\n String(Math.floor(tryTimeoutInMs / 1000))\n );\n }\n const primaryUrl = request.url;\n const secondaryUrl = secondaryHost ? setURLHost(request.url, secondaryHost) : undefined;\n let secondaryHas404 = false;\n let attempt = 1;\n let retryAgain = true;\n let response: PipelineResponse | undefined;\n let error: RestError | undefined;\n while (retryAgain) {\n const isPrimaryRetry: boolean =\n secondaryHas404 ||\n !secondaryUrl ||\n ![\"GET\", \"HEAD\", \"OPTIONS\"].includes(request.method) ||\n attempt % 2 === 1;\n request.url = isPrimaryRetry ? primaryUrl : secondaryUrl!;\n response = undefined;\n error = undefined;\n try {\n logger.info(\n `RetryPolicy: =====> Try=${attempt} ${isPrimaryRetry ? \"Primary\" : \"Secondary\"}`\n );\n response = await next(request);\n secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404);\n } catch (e: unknown) {\n if (isRestError(e)) {\n logger.error(`RetryPolicy: Caught error, message: ${e.message}, code: ${e.code}`);\n error = e;\n } else {\n logger.error(`RetryPolicy: Caught error, message: ${getErrorMessage(e)}`);\n throw e;\n }\n }\n retryAgain = shouldRetry({ isPrimaryRetry, attempt, response, error });\n if (retryAgain) {\n await delay(\n calculateDelay(isPrimaryRetry, attempt),\n request.abortSignal,\n RETRY_ABORT_ERROR\n );\n }\n attempt++;\n }\n if (response) {\n return response;\n }\n throw error ?? new RestError(\"RetryPolicy failed without known error.\");\n },\n };\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageSharedKeyCredentialPolicy.js","sourceRoot":"","sources":["../../../../../storage-blob/src/policies/StorageSharedKeyCredentialPolicy.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n RequestPolicy,\n RequestPolicyOptionsLike as RequestPolicyOptions,\n WebResourceLike as WebResource,\n} from \"@azure/core-http-compat\";\nimport { StorageSharedKeyCredential } from \"../credentials/StorageSharedKeyCredential\";\nimport { HeaderConstants } from \"../utils/constants\";\nimport { getURLPath, getURLQueries } from \"../utils/utils.common\";\nimport { CredentialPolicy } from \"./CredentialPolicy\";\n\n/**\n * StorageSharedKeyCredentialPolicy is a policy used to sign HTTP request with a shared key.\n */\nexport class StorageSharedKeyCredentialPolicy extends CredentialPolicy {\n /**\n * Reference to StorageSharedKeyCredential which generates StorageSharedKeyCredentialPolicy\n */\n private readonly factory: StorageSharedKeyCredential;\n\n /**\n * Creates an instance of StorageSharedKeyCredentialPolicy.\n * @param nextPolicy -\n * @param options -\n * @param factory -\n */\n constructor(\n nextPolicy: RequestPolicy,\n options: RequestPolicyOptions,\n factory: StorageSharedKeyCredential\n ) {\n super(nextPolicy, options);\n this.factory = factory;\n }\n\n /**\n * Signs request.\n *\n * @param request -\n */\n protected signRequest(request: WebResource): WebResource {\n request.headers.set(HeaderConstants.X_MS_DATE, new Date().toUTCString());\n\n if (\n request.body &&\n (typeof request.body === \"string\" || (request.body as Buffer) !== undefined) &&\n request.body.length > 0\n ) {\n request.headers.set(HeaderConstants.CONTENT_LENGTH, Buffer.byteLength(request.body));\n }\n\n const stringToSign: string =\n [\n request.method.toUpperCase(),\n this.getHeaderValueToSign(request, HeaderConstants.CONTENT_LANGUAGE),\n this.getHeaderValueToSign(request, HeaderConstants.CONTENT_ENCODING),\n this.getHeaderValueToSign(request, HeaderConstants.CONTENT_LENGTH),\n this.getHeaderValueToSign(request, HeaderConstants.CONTENT_MD5),\n this.getHeaderValueToSign(request, HeaderConstants.CONTENT_TYPE),\n this.getHeaderValueToSign(request, HeaderConstants.DATE),\n this.getHeaderValueToSign(request, HeaderConstants.IF_MODIFIED_SINCE),\n this.getHeaderValueToSign(request, HeaderConstants.IF_MATCH),\n this.getHeaderValueToSign(request, HeaderConstants.IF_NONE_MATCH),\n this.getHeaderValueToSign(request, HeaderConstants.IF_UNMODIFIED_SINCE),\n this.getHeaderValueToSign(request, HeaderConstants.RANGE),\n ].join(\"\\n\") +\n \"\\n\" +\n this.getCanonicalizedHeadersString(request) +\n this.getCanonicalizedResourceString(request);\n\n const signature: string = this.factory.computeHMACSHA256(stringToSign);\n request.headers.set(\n HeaderConstants.AUTHORIZATION,\n `SharedKey ${this.factory.accountName}:${signature}`\n );\n\n // console.log(`[URL]:${request.url}`);\n // console.log(`[HEADERS]:${request.headers.toString()}`);\n // console.log(`[STRING TO SIGN]:${JSON.stringify(stringToSign)}`);\n // console.log(`[KEY]: ${request.headers.get(HeaderConstants.AUTHORIZATION)}`);\n return request;\n }\n\n /**\n * Retrieve header value according to shared key sign rules.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key\n *\n * @param request -\n * @param headerName -\n */\n private getHeaderValueToSign(request: WebResource, headerName: string): string {\n const value = request.headers.get(headerName);\n\n if (!value) {\n return \"\";\n }\n\n // When using version 2015-02-21 or later, if Content-Length is zero, then\n // set the Content-Length part of the StringToSign to an empty string.\n // https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key\n if (headerName === HeaderConstants.CONTENT_LENGTH && value === \"0\") {\n return \"\";\n }\n\n return value;\n }\n\n /**\n * To construct the CanonicalizedHeaders portion of the signature string, follow these steps:\n * 1. Retrieve all headers for the resource that begin with x-ms-, including the x-ms-date header.\n * 2. Convert each HTTP header name to lowercase.\n * 3. Sort the headers lexicographically by header name, in ascending order.\n * Each header may appear only once in the string.\n * 4. Replace any linear whitespace in the header value with a single space.\n * 5. Trim any whitespace around the colon in the header.\n * 6. Finally, append a new-line character to each canonicalized header in the resulting list.\n * Construct the CanonicalizedHeaders string by concatenating all headers in this list into a single string.\n *\n * @param request -\n */\n private getCanonicalizedHeadersString(request: WebResource): string {\n let headersArray = request.headers.headersArray().filter((value) => {\n return value.name.toLowerCase().startsWith(HeaderConstants.PREFIX_FOR_STORAGE);\n });\n\n headersArray.sort((a, b): number => {\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n });\n\n // Remove duplicate headers\n headersArray = headersArray.filter((value, index, array) => {\n if (index > 0 && value.name.toLowerCase() === array[index - 1].name.toLowerCase()) {\n return false;\n }\n return true;\n });\n\n let canonicalizedHeadersStringToSign: string = \"\";\n headersArray.forEach((header) => {\n canonicalizedHeadersStringToSign += `${header.name\n .toLowerCase()\n .trimRight()}:${header.value.trimLeft()}\\n`;\n });\n\n return canonicalizedHeadersStringToSign;\n }\n\n /**\n * Retrieves the webResource canonicalized resource string.\n *\n * @param request -\n */\n private getCanonicalizedResourceString(request: WebResource): string {\n const path = getURLPath(request.url) || \"/\";\n\n let canonicalizedResourceString: string = \"\";\n canonicalizedResourceString += `/${this.factory.accountName}${path}`;\n\n const queries = getURLQueries(request.url);\n const lowercaseQueries: { [key: string]: string } = {};\n if (queries) {\n const queryKeys: string[] = [];\n for (const key in queries) {\n if (Object.prototype.hasOwnProperty.call(queries, key)) {\n const lowercaseKey = key.toLowerCase();\n lowercaseQueries[lowercaseKey] = queries[key];\n queryKeys.push(lowercaseKey);\n }\n }\n\n queryKeys.sort();\n for (const key of queryKeys) {\n canonicalizedResourceString += `\\n${key}:${decodeURIComponent(lowercaseQueries[key])}`;\n }\n }\n\n return canonicalizedResourceString;\n }\n}\n"]}
@@ -0,0 +1,18 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * The programmatic identifier of the storageSharedKeyCredentialPolicy.
5
+ */
6
+ export const storageSharedKeyCredentialPolicyName = "storageSharedKeyCredentialPolicy";
7
+ /**
8
+ * storageSharedKeyCredentialPolicy handles signing requests using storage account keys.
9
+ */
10
+ export function storageSharedKeyCredentialPolicy(_options) {
11
+ return {
12
+ name: storageSharedKeyCredentialPolicyName,
13
+ async sendRequest(request, next) {
14
+ return next(request);
15
+ },
16
+ };
17
+ }
18
+ //# sourceMappingURL=StorageSharedKeyCredentialPolicyV2.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageSharedKeyCredentialPolicyV2.browser.js","sourceRoot":"","sources":["../../../../../storage-blob/src/policies/StorageSharedKeyCredentialPolicyV2.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAQlC;;GAEG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,kCAAkC,CAAC;AAUvF;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,QAAiD;IAEjD,OAAO;QACL,IAAI,EAAE,oCAAoC;QAC1C,KAAK,CAAC,WAAW,CAAC,OAAwB,EAAE,IAAiB;YAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n PipelinePolicy,\n} from \"@azure/core-rest-pipeline\";\n/**\n * The programmatic identifier of the storageSharedKeyCredentialPolicy.\n */\nexport const storageSharedKeyCredentialPolicyName = \"storageSharedKeyCredentialPolicy\";\n\n/**\n * Options used to configure StorageSharedKeyCredentialPolicy.\n */\nexport interface StorageSharedKeyCredentialPolicyOptions {\n accountName: string;\n accountKey: Buffer;\n}\n\n/**\n * storageSharedKeyCredentialPolicy handles signing requests using storage account keys.\n */\nexport function storageSharedKeyCredentialPolicy(\n _options: StorageSharedKeyCredentialPolicyOptions\n): PipelinePolicy {\n return {\n name: storageSharedKeyCredentialPolicyName,\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n return next(request);\n },\n };\n}\n"]}
@@ -0,0 +1,131 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { createHmac } from "crypto";
4
+ import { HeaderConstants } from "../utils/constants";
5
+ import { getURLPath, getURLQueries } from "../utils/utils.common";
6
+ /**
7
+ * The programmatic identifier of the storageSharedKeyCredentialPolicy.
8
+ */
9
+ export const storageSharedKeyCredentialPolicyName = "storageSharedKeyCredentialPolicy";
10
+ /**
11
+ * storageSharedKeyCredentialPolicy handles signing requests using storage account keys.
12
+ */
13
+ export function storageSharedKeyCredentialPolicy(options) {
14
+ function signRequest(request) {
15
+ request.headers.set(HeaderConstants.X_MS_DATE, new Date().toUTCString());
16
+ if (request.body &&
17
+ (typeof request.body === "string" || Buffer.isBuffer(request.body)) &&
18
+ request.body.length > 0) {
19
+ request.headers.set(HeaderConstants.CONTENT_LENGTH, Buffer.byteLength(request.body));
20
+ }
21
+ const stringToSign = [
22
+ request.method.toUpperCase(),
23
+ getHeaderValueToSign(request, HeaderConstants.CONTENT_LANGUAGE),
24
+ getHeaderValueToSign(request, HeaderConstants.CONTENT_ENCODING),
25
+ getHeaderValueToSign(request, HeaderConstants.CONTENT_LENGTH),
26
+ getHeaderValueToSign(request, HeaderConstants.CONTENT_MD5),
27
+ getHeaderValueToSign(request, HeaderConstants.CONTENT_TYPE),
28
+ getHeaderValueToSign(request, HeaderConstants.DATE),
29
+ getHeaderValueToSign(request, HeaderConstants.IF_MODIFIED_SINCE),
30
+ getHeaderValueToSign(request, HeaderConstants.IF_MATCH),
31
+ getHeaderValueToSign(request, HeaderConstants.IF_NONE_MATCH),
32
+ getHeaderValueToSign(request, HeaderConstants.IF_UNMODIFIED_SINCE),
33
+ getHeaderValueToSign(request, HeaderConstants.RANGE),
34
+ ].join("\n") +
35
+ "\n" +
36
+ getCanonicalizedHeadersString(request) +
37
+ getCanonicalizedResourceString(request);
38
+ const signature = createHmac("sha256", options.accountKey)
39
+ .update(stringToSign, "utf8")
40
+ .digest("base64");
41
+ request.headers.set(HeaderConstants.AUTHORIZATION, `SharedKey ${options.accountName}:${signature}`);
42
+ // console.log(`[URL]:${request.url}`);
43
+ // console.log(`[HEADERS]:${request.headers.toString()}`);
44
+ // console.log(`[STRING TO SIGN]:${JSON.stringify(stringToSign)}`);
45
+ // console.log(`[KEY]: ${request.headers.get(HeaderConstants.AUTHORIZATION)}`);
46
+ }
47
+ /**
48
+ * Retrieve header value according to shared key sign rules.
49
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key
50
+ */
51
+ function getHeaderValueToSign(request, headerName) {
52
+ const value = request.headers.get(headerName);
53
+ if (!value) {
54
+ return "";
55
+ }
56
+ // When using version 2015-02-21 or later, if Content-Length is zero, then
57
+ // set the Content-Length part of the StringToSign to an empty string.
58
+ // https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key
59
+ if (headerName === HeaderConstants.CONTENT_LENGTH && value === "0") {
60
+ return "";
61
+ }
62
+ return value;
63
+ }
64
+ /**
65
+ * To construct the CanonicalizedHeaders portion of the signature string, follow these steps:
66
+ * 1. Retrieve all headers for the resource that begin with x-ms-, including the x-ms-date header.
67
+ * 2. Convert each HTTP header name to lowercase.
68
+ * 3. Sort the headers lexicographically by header name, in ascending order.
69
+ * Each header may appear only once in the string.
70
+ * 4. Replace any linear whitespace in the header value with a single space.
71
+ * 5. Trim any whitespace around the colon in the header.
72
+ * 6. Finally, append a new-line character to each canonicalized header in the resulting list.
73
+ * Construct the CanonicalizedHeaders string by concatenating all headers in this list into a single string.
74
+ *
75
+ */
76
+ function getCanonicalizedHeadersString(request) {
77
+ let headersArray = [];
78
+ for (const [name, value] of request.headers) {
79
+ if (name.toLowerCase().startsWith(HeaderConstants.PREFIX_FOR_STORAGE)) {
80
+ headersArray.push({ name, value });
81
+ }
82
+ }
83
+ headersArray.sort((a, b) => {
84
+ return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
85
+ });
86
+ // Remove duplicate headers
87
+ headersArray = headersArray.filter((value, index, array) => {
88
+ if (index > 0 && value.name.toLowerCase() === array[index - 1].name.toLowerCase()) {
89
+ return false;
90
+ }
91
+ return true;
92
+ });
93
+ let canonicalizedHeadersStringToSign = "";
94
+ headersArray.forEach((header) => {
95
+ canonicalizedHeadersStringToSign += `${header.name
96
+ .toLowerCase()
97
+ .trimRight()}:${header.value.trimLeft()}\n`;
98
+ });
99
+ return canonicalizedHeadersStringToSign;
100
+ }
101
+ function getCanonicalizedResourceString(request) {
102
+ const path = getURLPath(request.url) || "/";
103
+ let canonicalizedResourceString = "";
104
+ canonicalizedResourceString += `/${options.accountName}${path}`;
105
+ const queries = getURLQueries(request.url);
106
+ const lowercaseQueries = {};
107
+ if (queries) {
108
+ const queryKeys = [];
109
+ for (const key in queries) {
110
+ if (Object.prototype.hasOwnProperty.call(queries, key)) {
111
+ const lowercaseKey = key.toLowerCase();
112
+ lowercaseQueries[lowercaseKey] = queries[key];
113
+ queryKeys.push(lowercaseKey);
114
+ }
115
+ }
116
+ queryKeys.sort();
117
+ for (const key of queryKeys) {
118
+ canonicalizedResourceString += `\n${key}:${decodeURIComponent(lowercaseQueries[key])}`;
119
+ }
120
+ }
121
+ return canonicalizedResourceString;
122
+ }
123
+ return {
124
+ name: storageSharedKeyCredentialPolicyName,
125
+ async sendRequest(request, next) {
126
+ signRequest(request);
127
+ return next(request);
128
+ },
129
+ };
130
+ }
131
+ //# sourceMappingURL=StorageSharedKeyCredentialPolicyV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageSharedKeyCredentialPolicyV2.js","sourceRoot":"","sources":["../../../../../storage-blob/src/policies/StorageSharedKeyCredentialPolicyV2.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAOpC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAElE;;GAEG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,kCAAkC,CAAC;AAUvF;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,OAAgD;IAEhD,SAAS,WAAW,CAAC,OAAwB;QAC3C,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzE,IACE,OAAO,CAAC,IAAI;YACZ,CAAC,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EACvB;YACA,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SACtF;QAED,MAAM,YAAY,GAChB;YACE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;YAC5B,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,gBAAgB,CAAC;YAC/D,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,gBAAgB,CAAC;YAC/D,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,cAAc,CAAC;YAC7D,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC;YAC1D,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC;YAC3D,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC;YACnD,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,iBAAiB,CAAC;YAChE,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;YACvD,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,aAAa,CAAC;YAC5D,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,mBAAmB,CAAC;YAClE,oBAAoB,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;SACrD,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,IAAI;YACJ,6BAA6B,CAAC,OAAO,CAAC;YACtC,8BAA8B,CAAC,OAAO,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAW,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;aAC/D,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC;aAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpB,OAAO,CAAC,OAAO,CAAC,GAAG,CACjB,eAAe,CAAC,aAAa,EAC7B,aAAa,OAAO,CAAC,WAAW,IAAI,SAAS,EAAE,CAChD,CAAC;QAEF,uCAAuC;QACvC,0DAA0D;QAC1D,mEAAmE;QACnE,+EAA+E;IACjF,CAAC;IAED;;;OAGG;IACH,SAAS,oBAAoB,CAAC,OAAwB,EAAE,UAAkB;QACxE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,EAAE,CAAC;SACX;QAED,0EAA0E;QAC1E,sEAAsE;QACtE,yFAAyF;QACzF,IAAI,UAAU,KAAK,eAAe,CAAC,cAAc,IAAI,KAAK,KAAK,GAAG,EAAE;YAClE,OAAO,EAAE,CAAC;SACX;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;OAWG;IACH,SAAS,6BAA6B,CAAC,OAAwB;QAC7D,IAAI,YAAY,GAA2C,EAAE,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE;YAC3C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE;gBACrE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;aACpC;SACF;QAED,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAU,EAAE;YACjC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,2BAA2B;QAC3B,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACzD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBACjF,OAAO,KAAK,CAAC;aACd;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,gCAAgC,GAAW,EAAE,CAAC;QAClD,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,gCAAgC,IAAI,GAAG,MAAM,CAAC,IAAI;iBAC/C,WAAW,EAAE;iBACb,SAAS,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IAED,SAAS,8BAA8B,CAAC,OAAwB;QAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QAE5C,IAAI,2BAA2B,GAAW,EAAE,CAAC;QAC7C,2BAA2B,IAAI,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC;QAEhE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,gBAAgB,GAA8B,EAAE,CAAC;QACvD,IAAI,OAAO,EAAE;YACX,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;gBACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;oBACtD,MAAM,YAAY,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;oBACvC,gBAAgB,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC9C,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;iBAC9B;aACF;YAED,SAAS,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;gBAC3B,2BAA2B,IAAI,KAAK,GAAG,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;aACxF;SACF;QAED,OAAO,2BAA2B,CAAC;IACrC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,oCAAoC;QAC1C,KAAK,CAAC,WAAW,CAAC,OAAwB,EAAE,IAAiB;YAC3D,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createHmac } from \"crypto\";\nimport {\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n PipelinePolicy,\n} from \"@azure/core-rest-pipeline\";\nimport { HeaderConstants } from \"../utils/constants\";\nimport { getURLPath, getURLQueries } from \"../utils/utils.common\";\n\n/**\n * The programmatic identifier of the storageSharedKeyCredentialPolicy.\n */\nexport const storageSharedKeyCredentialPolicyName = \"storageSharedKeyCredentialPolicy\";\n\n/**\n * Options used to configure StorageSharedKeyCredentialPolicy.\n */\nexport interface StorageSharedKeyCredentialPolicyOptions {\n accountName: string;\n accountKey: Buffer;\n}\n\n/**\n * storageSharedKeyCredentialPolicy handles signing requests using storage account keys.\n */\nexport function storageSharedKeyCredentialPolicy(\n options: StorageSharedKeyCredentialPolicyOptions\n): PipelinePolicy {\n function signRequest(request: PipelineRequest): void {\n request.headers.set(HeaderConstants.X_MS_DATE, new Date().toUTCString());\n\n if (\n request.body &&\n (typeof request.body === \"string\" || Buffer.isBuffer(request.body)) &&\n request.body.length > 0\n ) {\n request.headers.set(HeaderConstants.CONTENT_LENGTH, Buffer.byteLength(request.body));\n }\n\n const stringToSign: string =\n [\n request.method.toUpperCase(),\n getHeaderValueToSign(request, HeaderConstants.CONTENT_LANGUAGE),\n getHeaderValueToSign(request, HeaderConstants.CONTENT_ENCODING),\n getHeaderValueToSign(request, HeaderConstants.CONTENT_LENGTH),\n getHeaderValueToSign(request, HeaderConstants.CONTENT_MD5),\n getHeaderValueToSign(request, HeaderConstants.CONTENT_TYPE),\n getHeaderValueToSign(request, HeaderConstants.DATE),\n getHeaderValueToSign(request, HeaderConstants.IF_MODIFIED_SINCE),\n getHeaderValueToSign(request, HeaderConstants.IF_MATCH),\n getHeaderValueToSign(request, HeaderConstants.IF_NONE_MATCH),\n getHeaderValueToSign(request, HeaderConstants.IF_UNMODIFIED_SINCE),\n getHeaderValueToSign(request, HeaderConstants.RANGE),\n ].join(\"\\n\") +\n \"\\n\" +\n getCanonicalizedHeadersString(request) +\n getCanonicalizedResourceString(request);\n\n const signature: string = createHmac(\"sha256\", options.accountKey)\n .update(stringToSign, \"utf8\")\n .digest(\"base64\");\n request.headers.set(\n HeaderConstants.AUTHORIZATION,\n `SharedKey ${options.accountName}:${signature}`\n );\n\n // console.log(`[URL]:${request.url}`);\n // console.log(`[HEADERS]:${request.headers.toString()}`);\n // console.log(`[STRING TO SIGN]:${JSON.stringify(stringToSign)}`);\n // console.log(`[KEY]: ${request.headers.get(HeaderConstants.AUTHORIZATION)}`);\n }\n\n /**\n * Retrieve header value according to shared key sign rules.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key\n */\n function getHeaderValueToSign(request: PipelineRequest, headerName: string): string {\n const value = request.headers.get(headerName);\n\n if (!value) {\n return \"\";\n }\n\n // When using version 2015-02-21 or later, if Content-Length is zero, then\n // set the Content-Length part of the StringToSign to an empty string.\n // https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key\n if (headerName === HeaderConstants.CONTENT_LENGTH && value === \"0\") {\n return \"\";\n }\n\n return value;\n }\n\n /**\n * To construct the CanonicalizedHeaders portion of the signature string, follow these steps:\n * 1. Retrieve all headers for the resource that begin with x-ms-, including the x-ms-date header.\n * 2. Convert each HTTP header name to lowercase.\n * 3. Sort the headers lexicographically by header name, in ascending order.\n * Each header may appear only once in the string.\n * 4. Replace any linear whitespace in the header value with a single space.\n * 5. Trim any whitespace around the colon in the header.\n * 6. Finally, append a new-line character to each canonicalized header in the resulting list.\n * Construct the CanonicalizedHeaders string by concatenating all headers in this list into a single string.\n *\n */\n function getCanonicalizedHeadersString(request: PipelineRequest): string {\n let headersArray: Array<{ name: string; value: string }> = [];\n for (const [name, value] of request.headers) {\n if (name.toLowerCase().startsWith(HeaderConstants.PREFIX_FOR_STORAGE)) {\n headersArray.push({ name, value });\n }\n }\n\n headersArray.sort((a, b): number => {\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n });\n\n // Remove duplicate headers\n headersArray = headersArray.filter((value, index, array) => {\n if (index > 0 && value.name.toLowerCase() === array[index - 1].name.toLowerCase()) {\n return false;\n }\n return true;\n });\n\n let canonicalizedHeadersStringToSign: string = \"\";\n headersArray.forEach((header) => {\n canonicalizedHeadersStringToSign += `${header.name\n .toLowerCase()\n .trimRight()}:${header.value.trimLeft()}\\n`;\n });\n\n return canonicalizedHeadersStringToSign;\n }\n\n function getCanonicalizedResourceString(request: PipelineRequest): string {\n const path = getURLPath(request.url) || \"/\";\n\n let canonicalizedResourceString: string = \"\";\n canonicalizedResourceString += `/${options.accountName}${path}`;\n\n const queries = getURLQueries(request.url);\n const lowercaseQueries: { [key: string]: string } = {};\n if (queries) {\n const queryKeys: string[] = [];\n for (const key in queries) {\n if (Object.prototype.hasOwnProperty.call(queries, key)) {\n const lowercaseKey = key.toLowerCase();\n lowercaseQueries[lowercaseKey] = queries[key];\n queryKeys.push(lowercaseKey);\n }\n }\n\n queryKeys.sort();\n for (const key of queryKeys) {\n canonicalizedResourceString += `\\n${key}:${decodeURIComponent(lowercaseQueries[key])}`;\n }\n }\n\n return canonicalizedResourceString;\n }\n\n return {\n name: storageSharedKeyCredentialPolicyName,\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n signRequest(request);\n return next(request);\n },\n };\n}\n"]}
@@ -0,0 +1,130 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { delay } from "@azure/core-util";
4
+ import { Poller } from "@azure/core-lro";
5
+ /**
6
+ * This is the poller returned by {@link BlobClient.beginCopyFromURL}.
7
+ * This can not be instantiated directly outside of this package.
8
+ *
9
+ * @hidden
10
+ */
11
+ export class BlobBeginCopyFromUrlPoller extends Poller {
12
+ constructor(options) {
13
+ const { blobClient, copySource, intervalInMs = 15000, onProgress, resumeFrom, startCopyFromURLOptions, } = options;
14
+ let state;
15
+ if (resumeFrom) {
16
+ state = JSON.parse(resumeFrom).state;
17
+ }
18
+ const operation = makeBlobBeginCopyFromURLPollOperation(Object.assign(Object.assign({}, state), { blobClient,
19
+ copySource,
20
+ startCopyFromURLOptions }));
21
+ super(operation);
22
+ if (typeof onProgress === "function") {
23
+ this.onProgress(onProgress);
24
+ }
25
+ this.intervalInMs = intervalInMs;
26
+ }
27
+ delay() {
28
+ return delay(this.intervalInMs);
29
+ }
30
+ }
31
+ /**
32
+ * Note: Intentionally using function expression over arrow function expression
33
+ * so that the function can be invoked with a different context.
34
+ * This affects what `this` refers to.
35
+ * @hidden
36
+ */
37
+ const cancel = async function cancel(options = {}) {
38
+ const state = this.state;
39
+ const { copyId } = state;
40
+ if (state.isCompleted) {
41
+ return makeBlobBeginCopyFromURLPollOperation(state);
42
+ }
43
+ if (!copyId) {
44
+ state.isCancelled = true;
45
+ return makeBlobBeginCopyFromURLPollOperation(state);
46
+ }
47
+ // if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call
48
+ await state.blobClient.abortCopyFromURL(copyId, {
49
+ abortSignal: options.abortSignal,
50
+ });
51
+ state.isCancelled = true;
52
+ return makeBlobBeginCopyFromURLPollOperation(state);
53
+ };
54
+ /**
55
+ * Note: Intentionally using function expression over arrow function expression
56
+ * so that the function can be invoked with a different context.
57
+ * This affects what `this` refers to.
58
+ * @hidden
59
+ */
60
+ const update = async function update(options = {}) {
61
+ const state = this.state;
62
+ const { blobClient, copySource, startCopyFromURLOptions } = state;
63
+ if (!state.isStarted) {
64
+ state.isStarted = true;
65
+ const result = await blobClient.startCopyFromURL(copySource, startCopyFromURLOptions);
66
+ // copyId is needed to abort
67
+ state.copyId = result.copyId;
68
+ if (result.copyStatus === "success") {
69
+ state.result = result;
70
+ state.isCompleted = true;
71
+ }
72
+ }
73
+ else if (!state.isCompleted) {
74
+ try {
75
+ const result = await state.blobClient.getProperties({ abortSignal: options.abortSignal });
76
+ const { copyStatus, copyProgress } = result;
77
+ const prevCopyProgress = state.copyProgress;
78
+ if (copyProgress) {
79
+ state.copyProgress = copyProgress;
80
+ }
81
+ if (copyStatus === "pending" &&
82
+ copyProgress !== prevCopyProgress &&
83
+ typeof options.fireProgress === "function") {
84
+ // trigger in setTimeout, or swallow error?
85
+ options.fireProgress(state);
86
+ }
87
+ else if (copyStatus === "success") {
88
+ state.result = result;
89
+ state.isCompleted = true;
90
+ }
91
+ else if (copyStatus === "failed") {
92
+ state.error = new Error(`Blob copy failed with reason: "${result.copyStatusDescription || "unknown"}"`);
93
+ state.isCompleted = true;
94
+ }
95
+ }
96
+ catch (err) {
97
+ state.error = err;
98
+ state.isCompleted = true;
99
+ }
100
+ }
101
+ return makeBlobBeginCopyFromURLPollOperation(state);
102
+ };
103
+ /**
104
+ * Note: Intentionally using function expression over arrow function expression
105
+ * so that the function can be invoked with a different context.
106
+ * This affects what `this` refers to.
107
+ * @hidden
108
+ */
109
+ const toString = function toString() {
110
+ return JSON.stringify({ state: this.state }, (key, value) => {
111
+ // remove blobClient from serialized state since a client can't be hydrated from this info.
112
+ if (key === "blobClient") {
113
+ return undefined;
114
+ }
115
+ return value;
116
+ });
117
+ };
118
+ /**
119
+ * Creates a poll operation given the provided state.
120
+ * @hidden
121
+ */
122
+ function makeBlobBeginCopyFromURLPollOperation(state) {
123
+ return {
124
+ state: Object.assign({}, state),
125
+ cancel,
126
+ toString,
127
+ update,
128
+ };
129
+ }
130
+ //# sourceMappingURL=BlobStartCopyFromUrlPoller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlobStartCopyFromUrlPoller.js","sourceRoot":"","sources":["../../../../../storage-blob/src/pollers/BlobStartCopyFromUrlPoller.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { delay } from \"@azure/core-util\";\nimport { PollOperation, PollOperationState, Poller } from \"@azure/core-lro\";\nimport { BlobClient, BlobStartCopyFromURLOptions, BlobBeginCopyFromURLResponse } from \"../Clients\";\n\n/**\n * Defines the operations from a {@link BlobClient} that are needed for the poller\n * returned by {@link BlobClient.beginCopyFromURL} to work.\n */\nexport type CopyPollerBlobClient = Pick<BlobClient, \"abortCopyFromURL\" | \"getProperties\"> & {\n startCopyFromURL(\n copySource: string,\n options?: BlobStartCopyFromURLOptions\n ): Promise<BlobBeginCopyFromURLResponse>;\n};\n\n/**\n * The state used by the poller returned from {@link BlobClient.beginCopyFromURL}.\n *\n * This state is passed into the user-specified `onProgress` callback\n * whenever copy progress is detected.\n */\nexport interface BlobBeginCopyFromUrlPollState\n extends PollOperationState<BlobBeginCopyFromURLResponse> {\n /**\n * The instance of {@link BlobClient} that was used when calling {@link BlobClient.beginCopyFromURL}.\n */\n readonly blobClient: CopyPollerBlobClient;\n /**\n * The copyId that identifies the in-progress blob copy.\n */\n copyId?: string;\n /**\n * the progress of the blob copy as reported by the service.\n */\n copyProgress?: string;\n /**\n * The source URL provided in {@link BlobClient.beginCopyFromURL}.\n */\n copySource: string;\n /**\n * The options that were passed to the initial {@link BlobClient.beginCopyFromURL} call.\n * This is exposed for the poller and should not be modified directly.\n */\n readonly startCopyFromURLOptions?: BlobStartCopyFromURLOptions;\n}\n\n/**\n * The PollOperation responsible for:\n * - performing the initial startCopyFromURL\n * - checking the copy status via getProperties\n * - cancellation via abortCopyFromURL\n * @hidden\n */\nexport interface BlobBeginCopyFromURLPollOperation\n extends PollOperation<BlobBeginCopyFromUrlPollState, BlobBeginCopyFromURLResponse> {}\n\n/**\n * The set of options used to configure the poller.\n * This is an internal interface populated by {@link BlobClient.beginCopyFromURL}.\n *\n * @hidden\n */\nexport interface BlobBeginCopyFromUrlPollerOptions {\n blobClient: CopyPollerBlobClient;\n copySource: string;\n intervalInMs?: number;\n onProgress?: (state: BlobBeginCopyFromUrlPollState) => void;\n resumeFrom?: string;\n startCopyFromURLOptions?: BlobStartCopyFromURLOptions;\n}\n\n/**\n * This is the poller returned by {@link BlobClient.beginCopyFromURL}.\n * This can not be instantiated directly outside of this package.\n *\n * @hidden\n */\nexport class BlobBeginCopyFromUrlPoller extends Poller<\n BlobBeginCopyFromUrlPollState,\n BlobBeginCopyFromURLResponse\n> {\n public intervalInMs: number;\n\n constructor(options: BlobBeginCopyFromUrlPollerOptions) {\n const {\n blobClient,\n copySource,\n intervalInMs = 15000,\n onProgress,\n resumeFrom,\n startCopyFromURLOptions,\n } = options;\n\n let state: BlobBeginCopyFromUrlPollState | undefined;\n\n if (resumeFrom) {\n state = JSON.parse(resumeFrom).state;\n }\n\n const operation = makeBlobBeginCopyFromURLPollOperation({\n ...state,\n blobClient,\n copySource,\n startCopyFromURLOptions,\n });\n\n super(operation);\n\n if (typeof onProgress === \"function\") {\n this.onProgress(onProgress);\n }\n\n this.intervalInMs = intervalInMs;\n }\n\n public delay(): Promise<void> {\n return delay(this.intervalInMs);\n }\n}\n\n/**\n * Note: Intentionally using function expression over arrow function expression\n * so that the function can be invoked with a different context.\n * This affects what `this` refers to.\n * @hidden\n */\nconst cancel: BlobBeginCopyFromURLPollOperation[\"cancel\"] = async function cancel(\n this: BlobBeginCopyFromURLPollOperation,\n options = {}\n) {\n const state = this.state;\n const { copyId } = state;\n if (state.isCompleted) {\n return makeBlobBeginCopyFromURLPollOperation(state);\n }\n\n if (!copyId) {\n state.isCancelled = true;\n return makeBlobBeginCopyFromURLPollOperation(state);\n }\n\n // if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call\n await state.blobClient.abortCopyFromURL(copyId, {\n abortSignal: options.abortSignal,\n });\n state.isCancelled = true;\n\n return makeBlobBeginCopyFromURLPollOperation(state);\n};\n\n/**\n * Note: Intentionally using function expression over arrow function expression\n * so that the function can be invoked with a different context.\n * This affects what `this` refers to.\n * @hidden\n */\nconst update: BlobBeginCopyFromURLPollOperation[\"update\"] = async function update(\n this: BlobBeginCopyFromURLPollOperation,\n options = {}\n): Promise<BlobBeginCopyFromURLPollOperation> {\n const state = this.state;\n const { blobClient, copySource, startCopyFromURLOptions } = state;\n\n if (!state.isStarted) {\n state.isStarted = true;\n const result = await blobClient.startCopyFromURL(copySource, startCopyFromURLOptions);\n\n // copyId is needed to abort\n state.copyId = result.copyId;\n if (result.copyStatus === \"success\") {\n state.result = result;\n state.isCompleted = true;\n }\n } else if (!state.isCompleted) {\n try {\n const result = await state.blobClient.getProperties({ abortSignal: options.abortSignal });\n const { copyStatus, copyProgress } = result;\n const prevCopyProgress = state.copyProgress;\n if (copyProgress) {\n state.copyProgress = copyProgress;\n }\n if (\n copyStatus === \"pending\" &&\n copyProgress !== prevCopyProgress &&\n typeof options.fireProgress === \"function\"\n ) {\n // trigger in setTimeout, or swallow error?\n options.fireProgress(state);\n } else if (copyStatus === \"success\") {\n state.result = result;\n state.isCompleted = true;\n } else if (copyStatus === \"failed\") {\n state.error = new Error(\n `Blob copy failed with reason: \"${result.copyStatusDescription || \"unknown\"}\"`\n );\n state.isCompleted = true;\n }\n } catch (err: any) {\n state.error = err;\n state.isCompleted = true;\n }\n }\n\n return makeBlobBeginCopyFromURLPollOperation(state);\n};\n\n/**\n * Note: Intentionally using function expression over arrow function expression\n * so that the function can be invoked with a different context.\n * This affects what `this` refers to.\n * @hidden\n */\nconst toString: BlobBeginCopyFromURLPollOperation[\"toString\"] = function toString(\n this: BlobBeginCopyFromURLPollOperation\n) {\n return JSON.stringify({ state: this.state }, (key, value) => {\n // remove blobClient from serialized state since a client can't be hydrated from this info.\n if (key === \"blobClient\") {\n return undefined;\n }\n return value;\n });\n};\n\n/**\n * Creates a poll operation given the provided state.\n * @hidden\n */\nfunction makeBlobBeginCopyFromURLPollOperation(\n state: BlobBeginCopyFromUrlPollState\n): BlobBeginCopyFromURLPollOperation {\n return {\n state: { ...state },\n cancel,\n toString,\n update,\n };\n}\n"]}