@backblaze-labs/b2-sdk 0.1.0 → 0.2.0

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 (701) hide show
  1. package/CHANGELOG.md +110 -5
  2. package/README.md +144 -33
  3. package/dist/_virtual/_b2-sdk-version-json.cjs +4 -0
  4. package/dist/_virtual/_b2-sdk-version-json.js +4 -0
  5. package/dist/auth/account-info.d.cts +32 -0
  6. package/dist/auth/account-info.d.cts.map +1 -1
  7. package/dist/auth/account-info.d.ts +32 -0
  8. package/dist/auth/account-info.d.ts.map +1 -1
  9. package/dist/auth/file.cjs +408 -207
  10. package/dist/auth/file.cjs.map +1 -1
  11. package/dist/auth/file.d.cts +77 -3
  12. package/dist/auth/file.d.cts.map +1 -1
  13. package/dist/auth/file.d.ts +77 -3
  14. package/dist/auth/file.d.ts.map +1 -1
  15. package/dist/auth/file.js +407 -207
  16. package/dist/auth/file.js.map +1 -1
  17. package/dist/auth/in-memory.cjs +212 -183
  18. package/dist/auth/in-memory.cjs.map +1 -1
  19. package/dist/auth/in-memory.d.cts +8 -0
  20. package/dist/auth/in-memory.d.cts.map +1 -1
  21. package/dist/auth/in-memory.d.ts +8 -0
  22. package/dist/auth/in-memory.d.ts.map +1 -1
  23. package/dist/auth/in-memory.js +211 -182
  24. package/dist/auth/in-memory.js.map +1 -1
  25. package/dist/auth/index.cjs +7 -9
  26. package/dist/auth/index.d.cts +3 -2
  27. package/dist/auth/index.d.cts.map +1 -1
  28. package/dist/auth/index.d.ts +3 -2
  29. package/dist/auth/index.d.ts.map +1 -1
  30. package/dist/auth/index.js +2 -8
  31. package/dist/auth/realms.cjs +80 -7
  32. package/dist/auth/realms.cjs.map +1 -1
  33. package/dist/auth/realms.d.cts +27 -4
  34. package/dist/auth/realms.d.cts.map +1 -1
  35. package/dist/auth/realms.d.ts +27 -4
  36. package/dist/auth/realms.d.ts.map +1 -1
  37. package/dist/auth/realms.js +80 -9
  38. package/dist/auth/realms.js.map +1 -1
  39. package/dist/auth/upload-url-pool.cjs +55 -51
  40. package/dist/auth/upload-url-pool.cjs.map +1 -1
  41. package/dist/auth/upload-url-pool.js +55 -51
  42. package/dist/auth/upload-url-pool.js.map +1 -1
  43. package/dist/bucket.cjs +785 -787
  44. package/dist/bucket.cjs.map +1 -1
  45. package/dist/bucket.d.cts +35 -47
  46. package/dist/bucket.d.cts.map +1 -1
  47. package/dist/bucket.d.ts +35 -47
  48. package/dist/bucket.d.ts.map +1 -1
  49. package/dist/bucket.js +780 -782
  50. package/dist/bucket.js.map +1 -1
  51. package/dist/client.cjs +246 -228
  52. package/dist/client.cjs.map +1 -1
  53. package/dist/client.d.cts +25 -17
  54. package/dist/client.d.cts.map +1 -1
  55. package/dist/client.d.ts +25 -17
  56. package/dist/client.d.ts.map +1 -1
  57. package/dist/client.js +243 -225
  58. package/dist/client.js.map +1 -1
  59. package/dist/copy/large.cjs +114 -71
  60. package/dist/copy/large.cjs.map +1 -1
  61. package/dist/copy/large.d.cts +6 -0
  62. package/dist/copy/large.d.cts.map +1 -1
  63. package/dist/copy/large.d.ts +6 -0
  64. package/dist/copy/large.d.ts.map +1 -1
  65. package/dist/copy/large.js +112 -69
  66. package/dist/copy/large.js.map +1 -1
  67. package/dist/download/checksum.cjs +89 -0
  68. package/dist/download/checksum.cjs.map +1 -0
  69. package/dist/download/checksum.d.cts +40 -0
  70. package/dist/download/checksum.d.cts.map +1 -0
  71. package/dist/download/checksum.d.ts +40 -0
  72. package/dist/download/checksum.d.ts.map +1 -0
  73. package/dist/download/checksum.js +87 -0
  74. package/dist/download/checksum.js.map +1 -0
  75. package/dist/download/parallel.cjs +214 -118
  76. package/dist/download/parallel.cjs.map +1 -1
  77. package/dist/download/parallel.d.cts +5 -1
  78. package/dist/download/parallel.d.cts.map +1 -1
  79. package/dist/download/parallel.d.ts +5 -1
  80. package/dist/download/parallel.d.ts.map +1 -1
  81. package/dist/download/parallel.js +212 -116
  82. package/dist/download/parallel.js.map +1 -1
  83. package/dist/download/single.cjs +188 -97
  84. package/dist/download/single.cjs.map +1 -1
  85. package/dist/download/single.d.cts +6 -1
  86. package/dist/download/single.d.cts.map +1 -1
  87. package/dist/download/single.d.ts +6 -1
  88. package/dist/download/single.d.ts.map +1 -1
  89. package/dist/download/single.js +186 -98
  90. package/dist/download/single.js.map +1 -1
  91. package/dist/errors/index.cjs +699 -243
  92. package/dist/errors/index.cjs.map +1 -1
  93. package/dist/errors/index.d.cts +285 -82
  94. package/dist/errors/index.d.cts.map +1 -1
  95. package/dist/errors/index.d.ts +285 -82
  96. package/dist/errors/index.d.ts.map +1 -1
  97. package/dist/errors/index.js +678 -261
  98. package/dist/errors/index.js.map +1 -1
  99. package/dist/http/retry.cjs +45 -28
  100. package/dist/http/retry.cjs.map +1 -1
  101. package/dist/http/retry.d.cts +15 -2
  102. package/dist/http/retry.d.cts.map +1 -1
  103. package/dist/http/retry.d.ts +15 -2
  104. package/dist/http/retry.d.ts.map +1 -1
  105. package/dist/http/retry.js +46 -31
  106. package/dist/http/retry.js.map +1 -1
  107. package/dist/http/transport.cjs +438 -140
  108. package/dist/http/transport.cjs.map +1 -1
  109. package/dist/http/transport.d.cts +21 -2
  110. package/dist/http/transport.d.cts.map +1 -1
  111. package/dist/http/transport.d.ts +21 -2
  112. package/dist/http/transport.d.ts.map +1 -1
  113. package/dist/http/transport.js +437 -140
  114. package/dist/http/transport.js.map +1 -1
  115. package/dist/http/url-guard.cjs +154 -89
  116. package/dist/http/url-guard.cjs.map +1 -1
  117. package/dist/http/url-guard.d.cts +25 -3
  118. package/dist/http/url-guard.d.cts.map +1 -1
  119. package/dist/http/url-guard.d.ts +25 -3
  120. package/dist/http/url-guard.d.ts.map +1 -1
  121. package/dist/http/url-guard.js +152 -90
  122. package/dist/http/url-guard.js.map +1 -1
  123. package/dist/http/user-agent.cjs +84 -44
  124. package/dist/http/user-agent.cjs.map +1 -1
  125. package/dist/http/user-agent.js +84 -46
  126. package/dist/http/user-agent.js.map +1 -1
  127. package/dist/index.cjs +101 -77
  128. package/dist/index.d.cts +27 -21
  129. package/dist/index.d.cts.map +1 -1
  130. package/dist/index.d.ts +27 -21
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +15 -71
  133. package/dist/internal/b2-naming.cjs +66 -0
  134. package/dist/internal/b2-naming.cjs.map +1 -0
  135. package/dist/internal/b2-naming.d.cts +43 -0
  136. package/dist/internal/b2-naming.d.cts.map +1 -0
  137. package/dist/internal/b2-naming.d.ts +43 -0
  138. package/dist/internal/b2-naming.d.ts.map +1 -0
  139. package/dist/internal/b2-naming.js +60 -0
  140. package/dist/internal/b2-naming.js.map +1 -0
  141. package/dist/internal/upload-retry-options.cjs +21 -0
  142. package/dist/internal/upload-retry-options.cjs.map +1 -0
  143. package/dist/internal/upload-retry-options.d.cts +12 -0
  144. package/dist/internal/upload-retry-options.d.cts.map +1 -0
  145. package/dist/internal/upload-retry-options.d.ts +12 -0
  146. package/dist/internal/upload-retry-options.d.ts.map +1 -0
  147. package/dist/internal/upload-retry-options.js +21 -0
  148. package/dist/internal/upload-retry-options.js.map +1 -0
  149. package/dist/internal/url-redaction.cjs +31 -0
  150. package/dist/internal/url-redaction.cjs.map +1 -0
  151. package/dist/internal/url-redaction.d.cts +17 -0
  152. package/dist/internal/url-redaction.d.cts.map +1 -0
  153. package/dist/internal/url-redaction.d.ts +17 -0
  154. package/dist/internal/url-redaction.d.ts.map +1 -0
  155. package/dist/internal/url-redaction.js +31 -0
  156. package/dist/internal/url-redaction.js.map +1 -0
  157. package/dist/notifications/index.cjs +4 -6
  158. package/dist/notifications/index.d.cts +1 -1
  159. package/dist/notifications/index.d.cts.map +1 -1
  160. package/dist/notifications/index.d.ts +1 -1
  161. package/dist/notifications/index.d.ts.map +1 -1
  162. package/dist/notifications/index.js +1 -6
  163. package/dist/notifications/webhook.cjs +195 -85
  164. package/dist/notifications/webhook.cjs.map +1 -1
  165. package/dist/notifications/webhook.d.cts.map +1 -1
  166. package/dist/notifications/webhook.d.ts.map +1 -1
  167. package/dist/notifications/webhook.js +195 -87
  168. package/dist/notifications/webhook.js.map +1 -1
  169. package/dist/object.cjs +253 -210
  170. package/dist/object.cjs.map +1 -1
  171. package/dist/object.d.cts +9 -55
  172. package/dist/object.d.cts.map +1 -1
  173. package/dist/object.d.ts +9 -55
  174. package/dist/object.d.ts.map +1 -1
  175. package/dist/object.js +249 -206
  176. package/dist/object.js.map +1 -1
  177. package/dist/raw/encoding.cjs +74 -35
  178. package/dist/raw/encoding.cjs.map +1 -1
  179. package/dist/raw/encoding.js +74 -38
  180. package/dist/raw/encoding.js.map +1 -1
  181. package/dist/raw/index.cjs +678 -587
  182. package/dist/raw/index.cjs.map +1 -1
  183. package/dist/raw/index.d.cts +121 -18
  184. package/dist/raw/index.d.cts.map +1 -1
  185. package/dist/raw/index.d.ts +121 -18
  186. package/dist/raw/index.d.ts.map +1 -1
  187. package/dist/raw/index.js +674 -589
  188. package/dist/raw/index.js.map +1 -1
  189. package/dist/s3/index.cjs +355 -18
  190. package/dist/s3/index.cjs.map +1 -1
  191. package/dist/s3/index.d.cts +233 -5
  192. package/dist/s3/index.d.cts.map +1 -1
  193. package/dist/s3/index.d.ts +233 -5
  194. package/dist/s3/index.d.ts.map +1 -1
  195. package/dist/s3/index.js +351 -22
  196. package/dist/s3/index.js.map +1 -1
  197. package/dist/s3/sigv4.cjs +149 -0
  198. package/dist/s3/sigv4.cjs.map +1 -0
  199. package/dist/s3/sigv4.d.cts +43 -0
  200. package/dist/s3/sigv4.d.cts.map +1 -0
  201. package/dist/s3/sigv4.d.ts +43 -0
  202. package/dist/s3/sigv4.d.ts.map +1 -0
  203. package/dist/s3/sigv4.js +148 -0
  204. package/dist/s3/sigv4.js.map +1 -0
  205. package/dist/s3/validation.cjs +69 -0
  206. package/dist/s3/validation.cjs.map +1 -0
  207. package/dist/s3/validation.d.cts +43 -0
  208. package/dist/s3/validation.d.cts.map +1 -0
  209. package/dist/s3/validation.d.ts +43 -0
  210. package/dist/s3/validation.d.ts.map +1 -0
  211. package/dist/s3/validation.js +66 -0
  212. package/dist/s3/validation.js.map +1 -0
  213. package/dist/simulator/capabilities.cjs +63 -48
  214. package/dist/simulator/capabilities.cjs.map +1 -1
  215. package/dist/simulator/capabilities.js +63 -49
  216. package/dist/simulator/capabilities.js.map +1 -1
  217. package/dist/simulator/index.cjs +2124 -1548
  218. package/dist/simulator/index.cjs.map +1 -1
  219. package/dist/simulator/index.d.cts +79 -11
  220. package/dist/simulator/index.d.cts.map +1 -1
  221. package/dist/simulator/index.d.ts +79 -11
  222. package/dist/simulator/index.d.ts.map +1 -1
  223. package/dist/simulator/index.js +2112 -1546
  224. package/dist/simulator/index.js.map +1 -1
  225. package/dist/simulator/validation.cjs +191 -153
  226. package/dist/simulator/validation.cjs.map +1 -1
  227. package/dist/simulator/validation.d.cts +3 -21
  228. package/dist/simulator/validation.d.cts.map +1 -1
  229. package/dist/simulator/validation.d.ts +3 -21
  230. package/dist/simulator/validation.d.ts.map +1 -1
  231. package/dist/simulator/validation.js +188 -162
  232. package/dist/simulator/validation.js.map +1 -1
  233. package/dist/streams/collect.cjs +74 -24
  234. package/dist/streams/collect.cjs.map +1 -1
  235. package/dist/streams/collect.d.cts +14 -1
  236. package/dist/streams/collect.d.cts.map +1 -1
  237. package/dist/streams/collect.d.ts +14 -1
  238. package/dist/streams/collect.d.ts.map +1 -1
  239. package/dist/streams/collect.js +74 -25
  240. package/dist/streams/collect.js.map +1 -1
  241. package/dist/streams/file-source.cjs +287 -0
  242. package/dist/streams/file-source.cjs.map +1 -0
  243. package/dist/streams/file-source.d.cts +96 -0
  244. package/dist/streams/file-source.d.cts.map +1 -0
  245. package/dist/streams/file-source.d.ts +96 -0
  246. package/dist/streams/file-source.d.ts.map +1 -0
  247. package/dist/streams/file-source.js +286 -0
  248. package/dist/streams/file-source.js.map +1 -0
  249. package/dist/streams/hash.cjs +207 -115
  250. package/dist/streams/hash.cjs.map +1 -1
  251. package/dist/streams/hash.d.cts +5 -4
  252. package/dist/streams/hash.d.cts.map +1 -1
  253. package/dist/streams/hash.d.ts +5 -4
  254. package/dist/streams/hash.d.ts.map +1 -1
  255. package/dist/streams/hash.js +208 -95
  256. package/dist/streams/hash.js.map +1 -1
  257. package/dist/streams/index.cjs +12 -12
  258. package/dist/streams/index.d.cts +3 -3
  259. package/dist/streams/index.d.cts.map +1 -1
  260. package/dist/streams/index.d.ts +3 -3
  261. package/dist/streams/index.d.ts.map +1 -1
  262. package/dist/streams/index.js +2 -10
  263. package/dist/streams/progress.cjs +60 -46
  264. package/dist/streams/progress.cjs.map +1 -1
  265. package/dist/streams/progress.js +60 -46
  266. package/dist/streams/progress.js.map +1 -1
  267. package/dist/streams/source.cjs +316 -146
  268. package/dist/streams/source.cjs.map +1 -1
  269. package/dist/streams/source.d.cts +56 -18
  270. package/dist/streams/source.d.cts.map +1 -1
  271. package/dist/streams/source.d.ts +56 -18
  272. package/dist/streams/source.d.ts.map +1 -1
  273. package/dist/streams/source.js +312 -149
  274. package/dist/streams/source.js.map +1 -1
  275. package/dist/sync/actions/index.cjs +236 -184
  276. package/dist/sync/actions/index.cjs.map +1 -1
  277. package/dist/sync/actions/index.d.cts +29 -21
  278. package/dist/sync/actions/index.d.cts.map +1 -1
  279. package/dist/sync/actions/index.d.ts +29 -21
  280. package/dist/sync/actions/index.d.ts.map +1 -1
  281. package/dist/sync/actions/index.js +236 -190
  282. package/dist/sync/actions/index.js.map +1 -1
  283. package/dist/sync/b2-sha1-reader.cjs +148 -0
  284. package/dist/sync/b2-sha1-reader.cjs.map +1 -0
  285. package/dist/sync/b2-sha1-reader.d.cts +58 -0
  286. package/dist/sync/b2-sha1-reader.d.cts.map +1 -0
  287. package/dist/sync/b2-sha1-reader.d.ts +58 -0
  288. package/dist/sync/b2-sha1-reader.d.ts.map +1 -0
  289. package/dist/sync/b2-sha1-reader.js +145 -0
  290. package/dist/sync/b2-sha1-reader.js.map +1 -0
  291. package/dist/sync/download-staging.cjs +265 -0
  292. package/dist/sync/download-staging.cjs.map +1 -0
  293. package/dist/sync/download-staging.d.cts +54 -0
  294. package/dist/sync/download-staging.d.cts.map +1 -0
  295. package/dist/sync/download-staging.d.ts +54 -0
  296. package/dist/sync/download-staging.d.ts.map +1 -0
  297. package/dist/sync/download-staging.js +259 -0
  298. package/dist/sync/download-staging.js.map +1 -0
  299. package/dist/sync/filesystem-errors.cjs +32 -0
  300. package/dist/sync/filesystem-errors.cjs.map +1 -0
  301. package/dist/sync/filesystem-errors.d.cts +8 -0
  302. package/dist/sync/filesystem-errors.d.cts.map +1 -0
  303. package/dist/sync/filesystem-errors.d.ts +8 -0
  304. package/dist/sync/filesystem-errors.d.ts.map +1 -0
  305. package/dist/sync/filesystem-errors.js +32 -0
  306. package/dist/sync/filesystem-errors.js.map +1 -0
  307. package/dist/sync/filters.cjs +217 -0
  308. package/dist/sync/filters.cjs.map +1 -0
  309. package/dist/sync/filters.d.cts +51 -0
  310. package/dist/sync/filters.d.cts.map +1 -0
  311. package/dist/sync/filters.d.ts +51 -0
  312. package/dist/sync/filters.d.ts.map +1 -0
  313. package/dist/sync/filters.js +213 -0
  314. package/dist/sync/filters.js.map +1 -0
  315. package/dist/sync/index.cjs +39 -22
  316. package/dist/sync/index.d.cts +14 -9
  317. package/dist/sync/index.d.cts.map +1 -1
  318. package/dist/sync/index.d.ts +14 -9
  319. package/dist/sync/index.d.ts.map +1 -1
  320. package/dist/sync/index.js +9 -20
  321. package/dist/sync/local-file-identity.cjs +61 -0
  322. package/dist/sync/local-file-identity.cjs.map +1 -0
  323. package/dist/sync/local-file-identity.d.cts +37 -0
  324. package/dist/sync/local-file-identity.d.cts.map +1 -0
  325. package/dist/sync/local-file-identity.d.ts +37 -0
  326. package/dist/sync/local-file-identity.d.ts.map +1 -0
  327. package/dist/sync/local-file-identity.js +60 -0
  328. package/dist/sync/local-file-identity.js.map +1 -0
  329. package/dist/sync/local-file-io.cjs +364 -0
  330. package/dist/sync/local-file-io.cjs.map +1 -0
  331. package/dist/sync/local-file-io.d.cts +75 -0
  332. package/dist/sync/local-file-io.d.cts.map +1 -0
  333. package/dist/sync/local-file-io.d.ts +75 -0
  334. package/dist/sync/local-file-io.d.ts.map +1 -0
  335. package/dist/sync/local-file-io.js +360 -0
  336. package/dist/sync/local-file-io.js.map +1 -0
  337. package/dist/sync/local-filesystem-root.cjs +27 -0
  338. package/dist/sync/local-filesystem-root.cjs.map +1 -0
  339. package/dist/sync/local-filesystem-root.d.cts +18 -0
  340. package/dist/sync/local-filesystem-root.d.cts.map +1 -0
  341. package/dist/sync/local-filesystem-root.d.ts +18 -0
  342. package/dist/sync/local-filesystem-root.d.ts.map +1 -0
  343. package/dist/sync/local-filesystem-root.js +26 -0
  344. package/dist/sync/local-filesystem-root.js.map +1 -0
  345. package/dist/sync/local-sha1.cjs +119 -0
  346. package/dist/sync/local-sha1.cjs.map +1 -0
  347. package/dist/sync/local-sha1.d.cts +39 -0
  348. package/dist/sync/local-sha1.d.cts.map +1 -0
  349. package/dist/sync/local-sha1.d.ts +39 -0
  350. package/dist/sync/local-sha1.d.ts.map +1 -0
  351. package/dist/sync/local-sha1.js +117 -0
  352. package/dist/sync/local-sha1.js.map +1 -0
  353. package/dist/sync/pairing.cjs +118 -29
  354. package/dist/sync/pairing.cjs.map +1 -1
  355. package/dist/sync/pairing.d.cts +7 -2
  356. package/dist/sync/pairing.d.cts.map +1 -1
  357. package/dist/sync/pairing.d.ts +7 -2
  358. package/dist/sync/pairing.d.ts.map +1 -1
  359. package/dist/sync/pairing.js +120 -31
  360. package/dist/sync/pairing.js.map +1 -1
  361. package/dist/sync/path-order.cjs +30 -0
  362. package/dist/sync/path-order.cjs.map +1 -0
  363. package/dist/sync/path-order.d.cts +28 -0
  364. package/dist/sync/path-order.d.cts.map +1 -0
  365. package/dist/sync/path-order.d.ts +28 -0
  366. package/dist/sync/path-order.d.ts.map +1 -0
  367. package/dist/sync/path-order.js +29 -0
  368. package/dist/sync/path-order.js.map +1 -0
  369. package/dist/sync/path-safety.cjs +111 -0
  370. package/dist/sync/path-safety.cjs.map +1 -0
  371. package/dist/sync/path-safety.d.cts +78 -0
  372. package/dist/sync/path-safety.d.cts.map +1 -0
  373. package/dist/sync/path-safety.d.ts +78 -0
  374. package/dist/sync/path-safety.d.ts.map +1 -0
  375. package/dist/sync/path-safety.js +105 -0
  376. package/dist/sync/path-safety.js.map +1 -0
  377. package/dist/sync/paths.d.cts +19 -0
  378. package/dist/sync/paths.d.cts.map +1 -0
  379. package/dist/sync/paths.d.ts +19 -0
  380. package/dist/sync/paths.d.ts.map +1 -0
  381. package/dist/sync/policies/compare.cjs +389 -11
  382. package/dist/sync/policies/compare.cjs.map +1 -1
  383. package/dist/sync/policies/compare.d.cts +100 -2
  384. package/dist/sync/policies/compare.d.cts.map +1 -1
  385. package/dist/sync/policies/compare.d.ts +100 -2
  386. package/dist/sync/policies/compare.d.ts.map +1 -1
  387. package/dist/sync/policies/compare.js +387 -13
  388. package/dist/sync/policies/compare.js.map +1 -1
  389. package/dist/sync/policies/index.cjs +76 -65
  390. package/dist/sync/policies/index.cjs.map +1 -1
  391. package/dist/sync/policies/index.d.cts +35 -6
  392. package/dist/sync/policies/index.d.cts.map +1 -1
  393. package/dist/sync/policies/index.d.ts +35 -6
  394. package/dist/sync/policies/index.d.ts.map +1 -1
  395. package/dist/sync/policies/index.js +76 -65
  396. package/dist/sync/policies/index.js.map +1 -1
  397. package/dist/sync/prefix.cjs +96 -0
  398. package/dist/sync/prefix.cjs.map +1 -0
  399. package/dist/sync/prefix.d.cts +55 -0
  400. package/dist/sync/prefix.d.cts.map +1 -0
  401. package/dist/sync/prefix.d.ts +55 -0
  402. package/dist/sync/prefix.d.ts.map +1 -0
  403. package/dist/sync/prefix.js +92 -0
  404. package/dist/sync/prefix.js.map +1 -0
  405. package/dist/sync/regexp-safety.cjs +192 -0
  406. package/dist/sync/regexp-safety.cjs.map +1 -0
  407. package/dist/sync/regexp-safety.d.cts +29 -0
  408. package/dist/sync/regexp-safety.d.cts.map +1 -0
  409. package/dist/sync/regexp-safety.d.ts +29 -0
  410. package/dist/sync/regexp-safety.d.ts.map +1 -0
  411. package/dist/sync/regexp-safety.js +190 -0
  412. package/dist/sync/regexp-safety.js.map +1 -0
  413. package/dist/sync/scan-events.cjs +33 -0
  414. package/dist/sync/scan-events.cjs.map +1 -0
  415. package/dist/sync/scan-events.d.cts +17 -0
  416. package/dist/sync/scan-events.d.cts.map +1 -0
  417. package/dist/sync/scan-events.d.ts +17 -0
  418. package/dist/sync/scan-events.d.ts.map +1 -0
  419. package/dist/sync/scan-events.js +32 -0
  420. package/dist/sync/scan-events.js.map +1 -0
  421. package/dist/sync/scan-limit.cjs +33 -0
  422. package/dist/sync/scan-limit.cjs.map +1 -0
  423. package/dist/sync/scan-limit.d.cts +21 -0
  424. package/dist/sync/scan-limit.d.cts.map +1 -0
  425. package/dist/sync/scan-limit.d.ts +21 -0
  426. package/dist/sync/scan-limit.d.ts.map +1 -0
  427. package/dist/sync/scan-limit.js +31 -0
  428. package/dist/sync/scan-limit.js.map +1 -0
  429. package/dist/sync/scanners/b2.cjs +239 -55
  430. package/dist/sync/scanners/b2.cjs.map +1 -1
  431. package/dist/sync/scanners/b2.d.cts +26 -7
  432. package/dist/sync/scanners/b2.d.cts.map +1 -1
  433. package/dist/sync/scanners/b2.d.ts +26 -7
  434. package/dist/sync/scanners/b2.d.ts.map +1 -1
  435. package/dist/sync/scanners/b2.js +239 -55
  436. package/dist/sync/scanners/b2.js.map +1 -1
  437. package/dist/sync/scanners/local.cjs +215 -56
  438. package/dist/sync/scanners/local.cjs.map +1 -1
  439. package/dist/sync/scanners/local.d.cts +22 -7
  440. package/dist/sync/scanners/local.d.cts.map +1 -1
  441. package/dist/sync/scanners/local.d.ts +22 -7
  442. package/dist/sync/scanners/local.d.ts.map +1 -1
  443. package/dist/sync/scanners/local.js +216 -57
  444. package/dist/sync/scanners/local.js.map +1 -1
  445. package/dist/sync/sha1-metadata.cjs +94 -0
  446. package/dist/sync/sha1-metadata.cjs.map +1 -0
  447. package/dist/sync/sha1-metadata.d.cts +82 -0
  448. package/dist/sync/sha1-metadata.d.cts.map +1 -0
  449. package/dist/sync/sha1-metadata.d.ts +82 -0
  450. package/dist/sync/sha1-metadata.d.ts.map +1 -0
  451. package/dist/sync/sha1-metadata.js +89 -0
  452. package/dist/sync/sha1-metadata.js.map +1 -0
  453. package/dist/sync/sha1-options.cjs +23 -0
  454. package/dist/sync/sha1-options.cjs.map +1 -0
  455. package/dist/sync/sha1-options.d.cts +14 -0
  456. package/dist/sync/sha1-options.d.cts.map +1 -0
  457. package/dist/sync/sha1-options.d.ts +14 -0
  458. package/dist/sync/sha1-options.d.ts.map +1 -0
  459. package/dist/sync/sha1-options.js +21 -0
  460. package/dist/sync/sha1-options.js.map +1 -0
  461. package/dist/sync/synchronizer.cjs +782 -197
  462. package/dist/sync/synchronizer.cjs.map +1 -1
  463. package/dist/sync/synchronizer.d.cts +47 -1
  464. package/dist/sync/synchronizer.d.cts.map +1 -1
  465. package/dist/sync/synchronizer.d.ts +47 -1
  466. package/dist/sync/synchronizer.d.ts.map +1 -1
  467. package/dist/sync/synchronizer.js +779 -173
  468. package/dist/sync/synchronizer.js.map +1 -1
  469. package/dist/sync/types.d.cts +208 -16
  470. package/dist/sync/types.d.cts.map +1 -1
  471. package/dist/sync/types.d.ts +208 -16
  472. package/dist/sync/types.d.ts.map +1 -1
  473. package/dist/types/auth.cjs +76 -56
  474. package/dist/types/auth.cjs.map +1 -1
  475. package/dist/types/auth.d.cts +67 -9
  476. package/dist/types/auth.d.cts.map +1 -1
  477. package/dist/types/auth.d.ts +67 -9
  478. package/dist/types/auth.d.ts.map +1 -1
  479. package/dist/types/auth.js +77 -57
  480. package/dist/types/auth.js.map +1 -1
  481. package/dist/types/bucket.cjs +74 -38
  482. package/dist/types/bucket.cjs.map +1 -1
  483. package/dist/types/bucket.js +75 -41
  484. package/dist/types/bucket.js.map +1 -1
  485. package/dist/types/encryption.cjs +364 -327
  486. package/dist/types/encryption.cjs.map +1 -1
  487. package/dist/types/encryption.d.cts +16 -0
  488. package/dist/types/encryption.d.cts.map +1 -1
  489. package/dist/types/encryption.d.ts +16 -0
  490. package/dist/types/encryption.d.ts.map +1 -1
  491. package/dist/types/encryption.js +364 -310
  492. package/dist/types/encryption.js.map +1 -1
  493. package/dist/types/errors.cjs +47 -0
  494. package/dist/types/errors.cjs.map +1 -0
  495. package/dist/types/errors.d.cts +13 -4
  496. package/dist/types/errors.d.cts.map +1 -1
  497. package/dist/types/errors.d.ts +13 -4
  498. package/dist/types/errors.d.ts.map +1 -1
  499. package/dist/types/errors.js +47 -0
  500. package/dist/types/errors.js.map +1 -0
  501. package/dist/types/file.cjs +36 -19
  502. package/dist/types/file.cjs.map +1 -1
  503. package/dist/types/file.d.cts +2 -2
  504. package/dist/types/file.d.cts.map +1 -1
  505. package/dist/types/file.d.ts +2 -2
  506. package/dist/types/file.d.ts.map +1 -1
  507. package/dist/types/file.js +37 -21
  508. package/dist/types/file.js.map +1 -1
  509. package/dist/types/ids.cjs +53 -9
  510. package/dist/types/ids.cjs.map +1 -1
  511. package/dist/types/ids.js +54 -15
  512. package/dist/types/ids.js.map +1 -1
  513. package/dist/types/index.d.cts +12 -11
  514. package/dist/types/index.d.cts.map +1 -1
  515. package/dist/types/index.d.ts +12 -11
  516. package/dist/types/index.d.ts.map +1 -1
  517. package/dist/types/key.d.cts +44 -8
  518. package/dist/types/key.d.cts.map +1 -1
  519. package/dist/types/key.d.ts +44 -8
  520. package/dist/types/key.d.ts.map +1 -1
  521. package/dist/types/lock.cjs +33 -13
  522. package/dist/types/lock.cjs.map +1 -1
  523. package/dist/types/lock.js +34 -15
  524. package/dist/types/lock.js.map +1 -1
  525. package/dist/types/notifications.cjs +44 -22
  526. package/dist/types/notifications.cjs.map +1 -1
  527. package/dist/types/notifications.js +45 -23
  528. package/dist/types/notifications.js.map +1 -1
  529. package/dist/types/upload.d.cts +39 -5
  530. package/dist/types/upload.d.cts.map +1 -1
  531. package/dist/types/upload.d.ts +39 -5
  532. package/dist/types/upload.d.ts.map +1 -1
  533. package/dist/upload/abort-scope.cjs +91 -0
  534. package/dist/upload/abort-scope.cjs.map +1 -0
  535. package/dist/upload/abort-scope.d.cts +48 -0
  536. package/dist/upload/abort-scope.d.cts.map +1 -0
  537. package/dist/upload/abort-scope.d.ts +48 -0
  538. package/dist/upload/abort-scope.d.ts.map +1 -0
  539. package/dist/upload/abort-scope.js +88 -0
  540. package/dist/upload/abort-scope.js.map +1 -0
  541. package/dist/upload/cancel.cjs +183 -8
  542. package/dist/upload/cancel.cjs.map +1 -1
  543. package/dist/upload/cancel.d.cts +110 -2
  544. package/dist/upload/cancel.d.cts.map +1 -1
  545. package/dist/upload/cancel.d.ts +110 -2
  546. package/dist/upload/cancel.d.ts.map +1 -1
  547. package/dist/upload/cancel.js +178 -9
  548. package/dist/upload/cancel.js.map +1 -1
  549. package/dist/upload/concurrency.cjs +79 -52
  550. package/dist/upload/concurrency.cjs.map +1 -1
  551. package/dist/upload/concurrency.js +79 -53
  552. package/dist/upload/concurrency.js.map +1 -1
  553. package/dist/upload/finish.cjs +59 -0
  554. package/dist/upload/finish.cjs.map +1 -0
  555. package/dist/upload/finish.d.cts +26 -0
  556. package/dist/upload/finish.d.cts.map +1 -0
  557. package/dist/upload/finish.d.ts +26 -0
  558. package/dist/upload/finish.d.ts.map +1 -0
  559. package/dist/upload/finish.js +59 -0
  560. package/dist/upload/finish.js.map +1 -0
  561. package/dist/upload/large.cjs +301 -218
  562. package/dist/upload/large.cjs.map +1 -1
  563. package/dist/upload/large.d.cts +76 -9
  564. package/dist/upload/large.d.cts.map +1 -1
  565. package/dist/upload/large.d.ts +76 -9
  566. package/dist/upload/large.d.ts.map +1 -1
  567. package/dist/upload/large.js +301 -218
  568. package/dist/upload/large.js.map +1 -1
  569. package/dist/upload/options.cjs +28 -0
  570. package/dist/upload/options.cjs.map +1 -0
  571. package/dist/upload/options.d.cts +104 -0
  572. package/dist/upload/options.d.cts.map +1 -0
  573. package/dist/upload/options.d.ts +104 -0
  574. package/dist/upload/options.d.ts.map +1 -0
  575. package/dist/upload/options.js +27 -0
  576. package/dist/upload/options.js.map +1 -0
  577. package/dist/upload/resume.cjs +333 -33
  578. package/dist/upload/resume.cjs.map +1 -1
  579. package/dist/upload/resume.d.cts +82 -12
  580. package/dist/upload/resume.d.cts.map +1 -1
  581. package/dist/upload/resume.d.ts +82 -12
  582. package/dist/upload/resume.d.ts.map +1 -1
  583. package/dist/upload/resume.js +330 -33
  584. package/dist/upload/resume.js.map +1 -1
  585. package/dist/upload/retry.cjs +186 -0
  586. package/dist/upload/retry.cjs.map +1 -0
  587. package/dist/upload/retry.d.cts +127 -0
  588. package/dist/upload/retry.d.cts.map +1 -0
  589. package/dist/upload/retry.d.ts +127 -0
  590. package/dist/upload/retry.d.ts.map +1 -0
  591. package/dist/upload/retry.js +182 -0
  592. package/dist/upload/retry.js.map +1 -0
  593. package/dist/upload/single.cjs +68 -44
  594. package/dist/upload/single.cjs.map +1 -1
  595. package/dist/upload/single.d.cts +2 -1
  596. package/dist/upload/single.d.cts.map +1 -1
  597. package/dist/upload/single.d.ts +2 -1
  598. package/dist/upload/single.d.ts.map +1 -1
  599. package/dist/upload/single.js +68 -44
  600. package/dist/upload/single.js.map +1 -1
  601. package/dist/upload/stream.cjs +317 -193
  602. package/dist/upload/stream.cjs.map +1 -1
  603. package/dist/upload/stream.d.cts +3 -1
  604. package/dist/upload/stream.d.cts.map +1 -1
  605. package/dist/upload/stream.d.ts +3 -1
  606. package/dist/upload/stream.d.ts.map +1 -1
  607. package/dist/upload/stream.js +316 -192
  608. package/dist/upload/stream.js.map +1 -1
  609. package/dist/util/best-effort.cjs +42 -8
  610. package/dist/util/best-effort.cjs.map +1 -1
  611. package/dist/util/best-effort.d.cts +2 -1
  612. package/dist/util/best-effort.d.cts.map +1 -1
  613. package/dist/util/best-effort.d.ts +2 -1
  614. package/dist/util/best-effort.d.ts.map +1 -1
  615. package/dist/util/best-effort.js +43 -9
  616. package/dist/util/best-effort.js.map +1 -1
  617. package/dist/util/bytes.cjs +23 -0
  618. package/dist/util/bytes.cjs.map +1 -0
  619. package/dist/util/bytes.d.cts +15 -0
  620. package/dist/util/bytes.d.cts.map +1 -0
  621. package/dist/util/bytes.d.ts +15 -0
  622. package/dist/util/bytes.d.ts.map +1 -0
  623. package/dist/util/bytes.js +23 -0
  624. package/dist/util/bytes.js.map +1 -0
  625. package/dist/util/crypto.cjs +68 -0
  626. package/dist/util/crypto.cjs.map +1 -0
  627. package/dist/util/crypto.d.cts +26 -0
  628. package/dist/util/crypto.d.cts.map +1 -0
  629. package/dist/util/crypto.d.ts +26 -0
  630. package/dist/util/crypto.d.ts.map +1 -0
  631. package/dist/util/crypto.js +66 -0
  632. package/dist/util/crypto.js.map +1 -0
  633. package/dist/util/defaults.cjs +25 -9
  634. package/dist/util/defaults.cjs.map +1 -1
  635. package/dist/util/defaults.js +26 -11
  636. package/dist/util/defaults.js.map +1 -1
  637. package/dist/util/error-reason.cjs +41 -0
  638. package/dist/util/error-reason.cjs.map +1 -0
  639. package/dist/util/error-reason.d.cts +9 -0
  640. package/dist/util/error-reason.d.cts.map +1 -0
  641. package/dist/util/error-reason.d.ts +9 -0
  642. package/dist/util/error-reason.d.ts.map +1 -0
  643. package/dist/util/error-reason.js +41 -0
  644. package/dist/util/error-reason.js.map +1 -0
  645. package/dist/util/http.cjs +23 -0
  646. package/dist/util/http.cjs.map +1 -0
  647. package/dist/util/http.d.cts +13 -0
  648. package/dist/util/http.d.cts.map +1 -0
  649. package/dist/util/http.d.ts +13 -0
  650. package/dist/util/http.d.ts.map +1 -0
  651. package/dist/util/http.js +23 -0
  652. package/dist/util/http.js.map +1 -0
  653. package/dist/util/normalize.cjs +66 -7
  654. package/dist/util/normalize.cjs.map +1 -1
  655. package/dist/util/normalize.js +67 -10
  656. package/dist/util/normalize.js.map +1 -1
  657. package/dist/util/paginator.cjs +63 -14
  658. package/dist/util/paginator.cjs.map +1 -1
  659. package/dist/util/paginator.js +64 -16
  660. package/dist/util/paginator.js.map +1 -1
  661. package/dist/util/plan-ranges.cjs +47 -22
  662. package/dist/util/plan-ranges.cjs.map +1 -1
  663. package/dist/util/plan-ranges.js +48 -24
  664. package/dist/util/plan-ranges.js.map +1 -1
  665. package/dist/util/sha1.cjs +27 -0
  666. package/dist/util/sha1.cjs.map +1 -0
  667. package/dist/util/sha1.d.cts +17 -0
  668. package/dist/util/sha1.d.cts.map +1 -0
  669. package/dist/util/sha1.d.ts +17 -0
  670. package/dist/util/sha1.d.ts.map +1 -0
  671. package/dist/util/sha1.js +26 -0
  672. package/dist/util/sha1.js.map +1 -0
  673. package/dist/util/text-codec.cjs +29 -5
  674. package/dist/util/text-codec.cjs.map +1 -1
  675. package/dist/util/text-codec.js +30 -7
  676. package/dist/util/text-codec.js.map +1 -1
  677. package/dist/util/to-error.cjs +18 -4
  678. package/dist/util/to-error.cjs.map +1 -1
  679. package/dist/util/to-error.js +19 -5
  680. package/dist/util/to-error.js.map +1 -1
  681. package/dist/version.cjs +17 -5
  682. package/dist/version.cjs.map +1 -1
  683. package/dist/version.d.cts +3 -3
  684. package/dist/version.d.ts +3 -3
  685. package/dist/version.js +19 -6
  686. package/dist/version.js.map +1 -1
  687. package/package.json +19 -16
  688. package/dist/auth/index.cjs.map +0 -1
  689. package/dist/auth/index.js.map +0 -1
  690. package/dist/index.cjs.map +0 -1
  691. package/dist/index.js.map +0 -1
  692. package/dist/notifications/index.cjs.map +0 -1
  693. package/dist/notifications/index.js.map +0 -1
  694. package/dist/package.json.cjs +0 -9
  695. package/dist/package.json.cjs.map +0 -1
  696. package/dist/package.json.js +0 -9
  697. package/dist/package.json.js.map +0 -1
  698. package/dist/streams/index.cjs.map +0 -1
  699. package/dist/streams/index.js.map +0 -1
  700. package/dist/sync/index.cjs.map +0 -1
  701. package/dist/sync/index.js.map +0 -1
@@ -1,143 +1,440 @@
1
- import { classifyError, ExpiredAuthTokenError, B2Error, NetworkError } from "../errors/index.js";
2
- import { DEFAULT_RETRY_OPTIONS, sleep, computeBackoff } from "./retry.js";
1
+ import { B2Error, B2RedirectError, B2SsrfError, ExpiredAuthTokenError, NetworkError, classifyError } from "../errors/index.js";
2
+ import { DEFAULT_RETRY_OPTIONS, computeBackoff, sleep } from "./retry.js";
3
3
  import { UrlGuard } from "./url-guard.js";
4
4
  import { getUserAgent } from "./user-agent.js";
5
- class FetchTransport {
6
- /** User-Agent string sent with every request. */
7
- userAgent;
8
- /** SSRF allow-list applied to every outgoing URL. Mutable so `B2Client.authorize()` can lock it down post-auth. */
9
- urlGuard;
10
- /**
11
- * Creates a new FetchTransport.
12
- * @param options - Optional configuration: custom User-Agent prefix and SSRF guard.
13
- */
14
- constructor(options) {
15
- this.userAgent = getUserAgent(options?.userAgent);
16
- this.urlGuard = options?.urlGuard ?? new UrlGuard();
17
- }
18
- /**
19
- * Sends the request using the global `fetch` function.
20
- * @param request - The HTTP request to execute.
21
- *
22
- * @returns The HTTP response.
23
- *
24
- * @throws B2SsrfError when the URL fails the configured SSRF guard.
25
- */
26
- async send(request) {
27
- this.urlGuard.check(request.url);
28
- const headers = new Headers(request.headers);
29
- if (!headers.has("User-Agent")) {
30
- headers.set("User-Agent", this.userAgent);
31
- }
32
- const response = await fetch(request.url, {
33
- method: request.method,
34
- headers,
35
- body: request.body ?? null,
36
- ...request.signal !== void 0 ? { signal: request.signal } : {}
37
- });
38
- return {
39
- status: response.status,
40
- headers: response.headers,
41
- body: response.body,
42
- json: () => response.json(),
43
- text: () => response.text(),
44
- arrayBuffer: () => response.arrayBuffer()
45
- };
46
- }
47
- }
48
- class RetryTransport {
49
- /** The wrapped transport that performs actual HTTP requests. */
50
- inner;
51
- /** Resolved retry options (defaults merged with user overrides). */
52
- options;
53
- /** Optional callback to refresh auth credentials on 401 — returns the fresh token. */
54
- onReauth;
55
- /** Sleep implementation used between retries; injectable for tests. */
56
- sleepImpl;
57
- /**
58
- * Creates a new RetryTransport.
59
- * @param opts - Retry transport configuration.
60
- */
61
- constructor(opts) {
62
- this.inner = opts.transport;
63
- this.options = { ...DEFAULT_RETRY_OPTIONS, ...opts.retry };
64
- if (opts.onReauth !== void 0) this.onReauth = opts.onReauth;
65
- this.sleepImpl = opts.sleepImpl ?? sleep;
66
- }
67
- /**
68
- * Sends the request with automatic retry on transient failures.
69
- * On expired auth tokens, calls {@link RetryTransportOptions.onReauth} and retries.
70
- * @param originalRequest - The HTTP request to execute. The caller's
71
- * reference is not mutated; on reauth, a copy with a refreshed
72
- * Authorization header is sent.
73
- *
74
- * @returns The HTTP response.
75
- */
76
- async send(originalRequest) {
77
- let request = originalRequest;
78
- let lastError;
79
- for (let attempt = 0; attempt <= this.options.maxRetries; attempt++) {
80
- if (attempt > 0 && lastError) {
81
- const retryAfter = lastError instanceof NetworkError ? void 0 : lastError.retryAfter;
82
- const delay = computeBackoff(attempt - 1, this.options, retryAfter);
83
- await this.sleepImpl(delay, request.signal);
84
- }
85
- try {
86
- const response = await this.inner.send(request);
87
- if (response.status >= 200 && response.status < 300) {
88
- return response;
89
- }
90
- let errorBody;
91
- try {
92
- errorBody = await response.json();
93
- } catch {
94
- errorBody = {
95
- status: response.status,
96
- code: "internal_error",
97
- message: `HTTP ${response.status}`
98
- };
99
- }
100
- const retryAfterHeader = response.headers.get("Retry-After");
101
- const retryAfterSec = retryAfterHeader ? Number.parseInt(retryAfterHeader, 10) : void 0;
102
- const requestId = response.headers.get("X-Bz-Request-Id") ?? void 0;
103
- const error = classifyError(errorBody, {
104
- ...retryAfterSec !== void 0 ? { retryAfter: retryAfterSec } : {},
105
- ...requestId !== void 0 ? { requestId } : {}
106
- });
107
- if (error instanceof ExpiredAuthTokenError && this.onReauth) {
108
- const freshToken = await this.onReauth();
109
- request = {
110
- ...request,
111
- headers: { ...request.headers ?? {}, Authorization: freshToken }
112
- };
113
- continue;
114
- }
115
- if (!error.retryable || attempt === this.options.maxRetries) {
116
- throw error;
117
- }
118
- lastError = error;
119
- } catch (err) {
120
- if (err instanceof B2Error || err instanceof NetworkError) {
121
- throw err;
122
- }
123
- if (err instanceof DOMException && err.name === "AbortError") {
124
- throw err;
125
- }
126
- const networkErr = new NetworkError(
127
- err instanceof Error ? err.message : "Network error",
128
- err
129
- );
130
- if (attempt === this.options.maxRetries) {
131
- throw networkErr;
132
- }
133
- lastError = networkErr;
134
- }
135
- }
136
- throw lastError ?? new NetworkError("Max retries exceeded");
137
- }
138
- }
139
- export {
140
- FetchTransport,
141
- RetryTransport
5
+ //#region src/http/transport.ts
6
+ var REDIRECT_STATUSES = /* @__PURE__ */ new Set([
7
+ 301,
8
+ 302,
9
+ 303,
10
+ 307,
11
+ 308
12
+ ]);
13
+ var MAX_SAME_ORIGIN_REDIRECTS = 5;
14
+ /**
15
+ * Default transport implementation using the global `fetch` API.
16
+ * Automatically sets the User-Agent header on each request and applies the
17
+ * SSRF {@link UrlGuard} (if configured) before opening the connection.
18
+ * Redirect following is disabled so redirected URLs cannot bypass the guard or
19
+ * receive credential-bearing headers without an explicit checked request.
20
+ */
21
+ var FetchTransport = class {
22
+ /** User-Agent string sent with every request. */
23
+ userAgent;
24
+ /** Whether same-origin GET/HEAD redirects should be followed after guard checks. */
25
+ followSameOriginRedirects;
26
+ /** SSRF allow-list applied to every outgoing URL. Mutable so `B2Client.authorize()` can lock it down post-auth. */
27
+ urlGuard;
28
+ /**
29
+ * Creates a new FetchTransport.
30
+ * @param options - Optional configuration: custom User-Agent prefix and SSRF guard.
31
+ */
32
+ constructor(options) {
33
+ this.userAgent = getUserAgent(options?.userAgent);
34
+ this.followSameOriginRedirects = options?.followSameOriginRedirects ?? true;
35
+ this.urlGuard = options?.urlGuard ?? new UrlGuard();
36
+ }
37
+ /**
38
+ * Sends the request using the global `fetch` function.
39
+ * @param request - The HTTP request to execute.
40
+ *
41
+ * @returns The HTTP response.
42
+ *
43
+ * @throws B2SsrfError when the URL fails the configured SSRF guard.
44
+ * @throws B2RedirectError when a response attempts to redirect.
45
+ */
46
+ async send(request) {
47
+ let currentRequest = request;
48
+ let redirectCount = 0;
49
+ while (true) {
50
+ this.urlGuard.check(currentRequest.url);
51
+ const headers = new Headers(currentRequest.headers);
52
+ if (!headers.has("User-Agent")) headers.set("User-Agent", this.userAgent);
53
+ const timeoutScope = createRequestTimeoutScope(currentRequest);
54
+ let response;
55
+ try {
56
+ response = await fetch(currentRequest.url, {
57
+ method: currentRequest.method,
58
+ headers,
59
+ body: currentRequest.body ?? null,
60
+ redirect: "manual",
61
+ ...timeoutScope.signal !== void 0 ? { signal: timeoutScope.signal } : {}
62
+ });
63
+ } catch (err) {
64
+ timeoutScope.dispose();
65
+ if (timeoutScope.timedOut) throw createRequestTimeoutError(timeoutScope);
66
+ throw err;
67
+ }
68
+ if (isBlockedRedirect(response)) {
69
+ const location = response.headers.get("Location");
70
+ if (this.followSameOriginRedirects && location !== null && redirectCount < MAX_SAME_ORIGIN_REDIRECTS && canFollowSameOriginRedirect(currentRequest, location)) {
71
+ const nextUrl = new URL(location, currentRequest.url).toString();
72
+ await cancelResponseBody(response);
73
+ timeoutScope.dispose();
74
+ this.urlGuard.check(nextUrl);
75
+ currentRequest = {
76
+ ...currentRequest,
77
+ url: nextUrl
78
+ };
79
+ redirectCount += 1;
80
+ continue;
81
+ }
82
+ await cancelResponseBody(response);
83
+ timeoutScope.dispose();
84
+ throw new B2RedirectError(currentRequest.url, response.status, location);
85
+ }
86
+ return createTimedHttpResponse(response, timeoutScope);
87
+ }
88
+ }
142
89
  };
143
- //# sourceMappingURL=transport.js.map
90
+ function createRequestTimeoutScope(request) {
91
+ const timeoutMs = request.retry?.requestTimeoutMs ?? DEFAULT_RETRY_OPTIONS.requestTimeoutMs;
92
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
93
+ const scope = {
94
+ timeoutMs: 0,
95
+ timedOut: false,
96
+ reset() {},
97
+ dispose() {}
98
+ };
99
+ if (request.signal !== void 0) return {
100
+ ...scope,
101
+ signal: request.signal
102
+ };
103
+ return scope;
104
+ }
105
+ const controller = new AbortController();
106
+ let timedOut = false;
107
+ let timer;
108
+ const abortFromUpstream = () => {
109
+ clearTimeout(timer);
110
+ controller.abort(request.signal?.reason ?? new DOMException("Aborted", "AbortError"));
111
+ };
112
+ const armTimer = () => {
113
+ const nextTimer = setTimeout(() => {
114
+ timedOut = true;
115
+ controller.abort(new DOMException("HTTP request timed out", "TimeoutError"));
116
+ }, timeoutMs);
117
+ unrefTimer(nextTimer);
118
+ return nextTimer;
119
+ };
120
+ timer = armTimer();
121
+ const reset = () => {
122
+ if (timedOut || controller.signal.aborted) return;
123
+ clearTimeout(timer);
124
+ timer = armTimer();
125
+ };
126
+ if (request.signal?.aborted === true) {
127
+ clearTimeout(timer);
128
+ abortFromUpstream();
129
+ } else request.signal?.addEventListener("abort", abortFromUpstream, { once: true });
130
+ return {
131
+ signal: controller.signal,
132
+ timeoutMs,
133
+ get timedOut() {
134
+ return timedOut;
135
+ },
136
+ reset,
137
+ dispose() {
138
+ clearTimeout(timer);
139
+ request.signal?.removeEventListener("abort", abortFromUpstream);
140
+ }
141
+ };
142
+ }
143
+ function unrefTimer(timer) {
144
+ const maybeUnref = timer.unref;
145
+ if (typeof maybeUnref === "function") maybeUnref.call(timer);
146
+ }
147
+ function createRequestTimeoutError(scope) {
148
+ return new DOMException(`HTTP request timed out after ${scope.timeoutMs} ms`, "TimeoutError");
149
+ }
150
+ function createTimedHttpResponse(response, timeoutScope) {
151
+ const body = response.body;
152
+ if (body === null) timeoutScope.dispose();
153
+ let timedBody;
154
+ return {
155
+ status: response.status,
156
+ headers: response.headers,
157
+ get body() {
158
+ if (body === null) return null;
159
+ timedBody ??= createTimedResponseBody(body, timeoutScope);
160
+ return timedBody;
161
+ },
162
+ json: () => readTimedResponseBody(timeoutScope, response, () => response.json()),
163
+ text: () => readTimedResponseBody(timeoutScope, response, () => response.text()),
164
+ arrayBuffer: () => readTimedResponseBody(timeoutScope, response, () => response.arrayBuffer())
165
+ };
166
+ }
167
+ async function readTimedResponseBody(timeoutScope, response, read) {
168
+ try {
169
+ return await raceBodyReadWithAbort(timeoutScope, read(), (reason) => cancelResponseBody(response, reason));
170
+ } catch (err) {
171
+ if (timeoutScope.timedOut) throw createRequestTimeoutError(timeoutScope);
172
+ throw err;
173
+ } finally {
174
+ timeoutScope.dispose();
175
+ }
176
+ }
177
+ function createTimedResponseBody(body, timeoutScope) {
178
+ let reader;
179
+ let disposed = false;
180
+ const dispose = () => {
181
+ if (disposed) return;
182
+ disposed = true;
183
+ timeoutScope.dispose();
184
+ };
185
+ return new ReadableStream({
186
+ async pull(controller) {
187
+ reader ??= body.getReader();
188
+ try {
189
+ const result = await raceBodyReadWithAbort(timeoutScope, reader.read(), (reason) => reader?.cancel(reason));
190
+ if (result.done) {
191
+ dispose();
192
+ controller.close();
193
+ return;
194
+ }
195
+ timeoutScope.reset();
196
+ controller.enqueue(result.value);
197
+ } catch (err) {
198
+ dispose();
199
+ if (timeoutScope.timedOut) {
200
+ controller.error(createRequestTimeoutError(timeoutScope));
201
+ return;
202
+ }
203
+ controller.error(err);
204
+ }
205
+ },
206
+ async cancel(reason) {
207
+ dispose();
208
+ try {
209
+ if (reader !== void 0) {
210
+ await reader.cancel(reason);
211
+ return;
212
+ }
213
+ await body.cancel(reason);
214
+ } catch {}
215
+ }
216
+ });
217
+ }
218
+ async function raceBodyReadWithAbort(timeoutScope, read, abortCleanup) {
219
+ const signal = timeoutScope.signal;
220
+ if (signal === void 0) return read;
221
+ const abortReason = () => signal.reason ?? new DOMException("Aborted", "AbortError");
222
+ if (signal.aborted) {
223
+ read.catch(() => {});
224
+ const reason = abortReason();
225
+ await runAbortCleanup(abortCleanup, reason);
226
+ throw reason;
227
+ }
228
+ let removeAbortListener;
229
+ const abort = new Promise((_, reject) => {
230
+ const onAbort = () => {
231
+ const reason = abortReason();
232
+ read.catch(() => {});
233
+ reject(reason);
234
+ runAbortCleanup(abortCleanup, reason);
235
+ };
236
+ signal.addEventListener("abort", onAbort, { once: true });
237
+ removeAbortListener = () => signal.removeEventListener("abort", onAbort);
238
+ });
239
+ try {
240
+ return await Promise.race([read, abort]);
241
+ } finally {
242
+ removeAbortListener?.();
243
+ }
244
+ }
245
+ async function runAbortCleanup(abortCleanup, reason) {
246
+ try {
247
+ await abortCleanup?.(reason);
248
+ } catch {}
249
+ }
250
+ function isBlockedRedirect(response) {
251
+ return response.type === "opaqueredirect" || REDIRECT_STATUSES.has(response.status);
252
+ }
253
+ function canFollowSameOriginRedirect(request, location) {
254
+ if (request.method !== "GET" && request.method !== "HEAD") return false;
255
+ try {
256
+ return new URL(request.url).origin === new URL(location, request.url).origin;
257
+ } catch {
258
+ return false;
259
+ }
260
+ }
261
+ async function cancelResponseBody(response, reason) {
262
+ try {
263
+ await response.body?.cancel(reason);
264
+ } catch {}
265
+ }
266
+ /**
267
+ * Decide whether `url` points at a URL-pinned upload POST endpoint.
268
+ *
269
+ * @param url - Request URL to inspect.
270
+ *
271
+ * @returns Whether the request is a direct upload endpoint.
272
+ */
273
+ function isUploadEndpoint(url) {
274
+ const endpoint = b2ApiEndpointName(url);
275
+ return endpoint === "b2_upload_file" || endpoint === "b2_upload_part";
276
+ }
277
+ function isFinishLargeFileEndpoint(url) {
278
+ return b2ApiEndpointName(url) === "b2_finish_large_file";
279
+ }
280
+ function isStartLargeFileEndpoint(url) {
281
+ return b2ApiEndpointName(url) === "b2_start_large_file";
282
+ }
283
+ function b2ApiEndpointName(url) {
284
+ const [, root, , endpoint] = new URL(url).pathname.split("/");
285
+ if (root !== "b2api") return void 0;
286
+ return endpoint;
287
+ }
288
+ function isReplayUnsafePostEndpoint(url) {
289
+ return isUploadEndpoint(url) || isStartLargeFileEndpoint(url) || isFinishLargeFileEndpoint(url);
290
+ }
291
+ /**
292
+ * Decide whether a classified error should be retried in place for `url`.
293
+ * Transient errors normally retry; upload endpoints bubble to the upload layer
294
+ * for fresh-URL retry except account-level 429 throttling, where fetching a new
295
+ * upload URL only amplifies the rate limit.
296
+ *
297
+ * @param error - The classified, retryability-tagged error.
298
+ * @param url - The request URL (used to detect upload endpoints).
299
+ *
300
+ * @returns Whether to retry the request in place.
301
+ */
302
+ function shouldRetryInPlace(error, url) {
303
+ if (!error.retryable) return false;
304
+ if (isStartLargeFileEndpoint(url) || isFinishLargeFileEndpoint(url)) return false;
305
+ if (isUploadEndpoint(url) && error.status === 429) return true;
306
+ if (isUploadEndpoint(url)) return false;
307
+ return true;
308
+ }
309
+ function isRequestTimeoutError(err) {
310
+ return err instanceof DOMException && err.name === "TimeoutError";
311
+ }
312
+ function isTerminalTransportError(err) {
313
+ return err instanceof B2Error || err instanceof B2RedirectError || err instanceof NetworkError || err instanceof B2SsrfError || err instanceof DOMException && err.name === "AbortError";
314
+ }
315
+ /**
316
+ * Transport wrapper that adds automatic retry with exponential backoff.
317
+ * Handles transient errors (408, 429, and the transient 5xx set 500/502/503/504),
318
+ * expired auth tokens, and network failures. Delegates to an inner
319
+ * {@link HttpTransport}.
320
+ *
321
+ * Upload endpoints (`b2_upload_file` / `b2_upload_part`) are URL-pinned. Their
322
+ * retryable pod failures bubble to the upload layer, which evicts the failed
323
+ * URL, fetches a fresh one, and retries there. HTTP 429 remains an in-place
324
+ * retry so account-level throttling does not trigger extra upload URL fetches.
325
+ */
326
+ var RetryTransport = class {
327
+ /** The wrapped transport that performs actual HTTP requests. */
328
+ inner;
329
+ /** Resolved retry options (defaults merged with user overrides). */
330
+ options;
331
+ /** Optional callback to refresh auth credentials on 401 — returns the fresh token. */
332
+ onReauth;
333
+ /** Sleep implementation used between retries; injectable for tests. */
334
+ sleepImpl;
335
+ /**
336
+ * Creates a new RetryTransport.
337
+ * @param opts - Retry transport configuration.
338
+ */
339
+ constructor(opts) {
340
+ this.inner = opts.transport;
341
+ this.options = {
342
+ ...DEFAULT_RETRY_OPTIONS,
343
+ ...opts.retry
344
+ };
345
+ if (opts.onReauth !== void 0) this.onReauth = opts.onReauth;
346
+ this.sleepImpl = opts.sleepImpl ?? sleep;
347
+ }
348
+ /**
349
+ * Sends the request with automatic retry on transient failures.
350
+ * On expired auth tokens, calls {@link RetryTransportOptions.onReauth} and retries.
351
+ * @param originalRequest - The HTTP request to execute. The caller's
352
+ * reference is not mutated; on reauth, a copy with a refreshed
353
+ * Authorization header is sent.
354
+ *
355
+ * @returns The HTTP response.
356
+ */
357
+ async send(originalRequest) {
358
+ let request = originalRequest;
359
+ const retryOptions = {
360
+ ...this.options,
361
+ ...originalRequest.retry
362
+ };
363
+ let lastError;
364
+ let didReauth = false;
365
+ let attempt = 0;
366
+ while (attempt <= retryOptions.maxRetries) {
367
+ throwIfSignalAborted(request.signal);
368
+ if (attempt > 0 && lastError) {
369
+ const retryAfter = lastError instanceof NetworkError ? void 0 : lastError.retryAfter;
370
+ const delay = computeBackoff(attempt - 1, retryOptions, retryAfter);
371
+ await this.sleepImpl(delay, request.signal);
372
+ }
373
+ try {
374
+ const response = await this.inner.send({
375
+ ...request,
376
+ retry: retryOptions
377
+ });
378
+ await throwIfSignalAbortedAfterResponse(request.signal, response);
379
+ if (response.status >= 200 && response.status < 300) return response;
380
+ let errorBody;
381
+ try {
382
+ errorBody = await response.json();
383
+ } catch (err) {
384
+ if (isRequestTimeoutError(err)) throw err;
385
+ errorBody = {
386
+ status: response.status,
387
+ code: "internal_error",
388
+ message: `HTTP ${response.status}`
389
+ };
390
+ }
391
+ const retryAfterHeader = response.headers.get("Retry-After");
392
+ const retryAfterSec = retryAfterHeader ? Number.parseInt(retryAfterHeader, 10) : void 0;
393
+ const requestId = response.headers.get("X-Bz-Request-Id") ?? void 0;
394
+ const error = classifyError(errorBody, {
395
+ ...retryAfterSec !== void 0 ? { retryAfter: retryAfterSec } : {},
396
+ ...requestId !== void 0 ? { requestId } : {}
397
+ });
398
+ if (error instanceof ExpiredAuthTokenError && this.onReauth && !isUploadEndpoint(request.url) && !didReauth) {
399
+ const freshToken = await this.onReauth();
400
+ request = {
401
+ ...request,
402
+ headers: {
403
+ ...request.headers ?? {},
404
+ Authorization: freshToken
405
+ }
406
+ };
407
+ didReauth = true;
408
+ lastError = void 0;
409
+ continue;
410
+ }
411
+ if (!shouldRetryInPlace(error, request.url) || attempt === retryOptions.maxRetries) throw error;
412
+ lastError = error;
413
+ attempt += 1;
414
+ } catch (err) {
415
+ throwIfSignalAborted(request.signal);
416
+ if (isTerminalTransportError(err)) throw err;
417
+ const networkErr = new NetworkError(err instanceof Error ? err.message : "Network error", err);
418
+ if (isReplayUnsafePostEndpoint(request.url) || attempt === retryOptions.maxRetries) throw networkErr;
419
+ lastError = networkErr;
420
+ attempt += 1;
421
+ }
422
+ }
423
+ throw lastError ?? new NetworkError("Max retries exceeded");
424
+ }
425
+ };
426
+ function throwIfSignalAborted(signal) {
427
+ if (signal?.aborted === true) throw signal.reason ?? new DOMException("Aborted", "AbortError");
428
+ }
429
+ async function throwIfSignalAbortedAfterResponse(signal, response) {
430
+ if (signal?.aborted !== true) return;
431
+ const reason = signal.reason ?? new DOMException("Aborted", "AbortError");
432
+ try {
433
+ await response.body?.cancel(reason);
434
+ } catch {}
435
+ throw reason;
436
+ }
437
+ //#endregion
438
+ export { FetchTransport, RetryTransport };
439
+
440
+ //# sourceMappingURL=transport.js.map