@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 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/errors/index.ts"],"sourcesContent":["/**\n * Typed error hierarchy for B2 API failures.\n *\n * Every B2 error response is mapped to a specific {@link B2Error} subclass\n * (e.g. {@link ExpiredAuthTokenError}, {@link CapExceededError}) with pre-computed\n * {@link B2Error.retryable | retryable} flags. Use {@link classifyError} to convert\n * a raw error response into the appropriate subclass.\n *\n * Convention: `B2Error` and its subclasses represent failures returned by\n * the B2 API. Programming errors and SDK preconditions (e.g. \"not yet\n * authorized\", \"stream consumed twice\", \"called before init\") use the\n * native `Error` constructor instead. Two outliers extend `Error` directly\n * rather than `B2Error` because they originate inside the SDK before any\n * B2 request is made: {@link B2InsufficientCapabilityError} (raised by\n * `B2Client.hasCapabilities`) and {@link B2SsrfError} (raised by the\n * default `UrlGuard` before `fetch`).\n *\n * @packageDocumentation\n */\n\nimport type { B2ErrorCode, B2ErrorResponse } from '../types/errors.ts'\n\n/**\n * Base error class for all B2 API errors.\n * Contains the HTTP status, B2 error code, and retry metadata from the response.\n */\nexport class B2Error extends Error {\n /** HTTP status code returned by the B2 API. */\n readonly status: number\n /** B2 error code identifying the error type (e.g. `expired_auth_token`). */\n readonly code: B2ErrorCode\n /** B2 request ID from the `X-Bz-Request-Id` response header, if present. */\n readonly requestId?: string\n /** Retry delay in seconds from the `Retry-After` response header, if present. */\n readonly retryAfter?: number\n /** Whether this error is transient and the request can be retried. */\n readonly retryable: boolean\n\n /**\n * Creates a new B2Error instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional retry and request metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: { retryAfter?: number; requestId?: string }) {\n super(response.message)\n this.name = 'B2Error'\n this.status = response.status\n this.code = response.code\n if (options?.retryAfter !== undefined) this.retryAfter = options.retryAfter\n if (options?.requestId !== undefined) this.requestId = options.requestId\n this.retryable = isTransient(response.status, response.code)\n }\n}\n\n/** Thrown when the auth token has expired. Triggers automatic re-authorization. */\nexport class ExpiredAuthTokenError extends B2Error {\n /**\n * Creates a new ExpiredAuthTokenError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { requestId?: string }) {\n super(response, options)\n this.name = 'ExpiredAuthTokenError'\n }\n}\n\n/** Thrown when the auth token is invalid or unauthorized. */\nexport class BadAuthTokenError extends B2Error {\n /**\n * Creates a new BadAuthTokenError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { requestId?: string }) {\n super(response, options)\n this.name = 'BadAuthTokenError'\n }\n}\n\n/** Thrown when the B2 service is temporarily unavailable (HTTP 503). */\nexport class ServiceUnavailableError extends B2Error {\n /**\n * Creates a new ServiceUnavailableError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { retryAfter?: number; requestId?: string }) {\n super(response, options)\n this.name = 'ServiceUnavailableError'\n }\n}\n\n/** Thrown when a request times out on the server side (HTTP 408). */\nexport class RequestTimeoutError extends B2Error {\n /**\n * Creates a new RequestTimeoutError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { requestId?: string }) {\n super(response, options)\n this.name = 'RequestTimeoutError'\n }\n}\n\n/** Thrown when the client has sent too many requests (HTTP 429). */\nexport class TooManyRequestsError extends B2Error {\n /**\n * Creates a new TooManyRequestsError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { retryAfter?: number; requestId?: string }) {\n super(response, options)\n this.name = 'TooManyRequestsError'\n }\n}\n\n/** Thrown when a storage, transaction, or download cap has been exceeded. */\nexport class CapExceededError extends B2Error {\n /**\n * Creates a new CapExceededError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { requestId?: string }) {\n super(response, options)\n this.name = 'CapExceededError'\n }\n}\n\n/** Thrown when the application key does not have permission for the requested operation. */\nexport class AccessDeniedError extends B2Error {\n /**\n * Creates a new AccessDeniedError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { requestId?: string }) {\n super(response, options)\n this.name = 'AccessDeniedError'\n }\n}\n\n/** Thrown when the requested file does not exist. */\nexport class FileNotPresentError extends B2Error {\n /**\n * Creates a new FileNotPresentError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { requestId?: string }) {\n super(response, options)\n this.name = 'FileNotPresentError'\n }\n}\n\n/** Thrown when creating a bucket with a name that already exists in the account. */\nexport class DuplicateBucketNameError extends B2Error {\n /**\n * Creates a new DuplicateBucketNameError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { requestId?: string }) {\n super(response, options)\n this.name = 'DuplicateBucketNameError'\n }\n}\n\n/** Thrown for general bad request errors (HTTP 400) not covered by a more specific subclass. */\nexport class BadRequestError extends B2Error {\n /**\n * Creates a new BadRequestError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { requestId?: string }) {\n super(response, options)\n this.name = 'BadRequestError'\n }\n}\n\n/**\n * Thrown when an upload URL is no longer valid and must be refreshed.\n *\n * Forward-compat insurance: B2 does not currently surface a distinct\n * error code for this case, so {@link classifyError} never actually\n * instantiates this class today. It's part of the public API so\n * consumers can pre-write `instanceof` checks; when B2 documents a\n * `bad_upload_url` (or similar) error code, the `classifyError`\n * switch gets a matching case and existing consumer code starts\n * catching the typed error without any changes on their side.\n *\n * Until then, expect `BadRequestError` for upload-URL invalidation\n * scenarios — that's what B2 currently returns.\n */\nexport class BadUploadUrlError extends B2Error {\n /**\n * Creates a new BadUploadUrlError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { requestId?: string }) {\n super(response, options)\n this.name = 'BadUploadUrlError'\n }\n}\n\n/**\n * Thrown when the uploaded file's SHA-1 checksum does not match the\n * expected value.\n *\n * Forward-compat insurance: the B2 API currently rejects mismatched\n * uploads with a generic `bad_request` code, so {@link classifyError}\n * never actually instantiates this class today. It's part of the\n * public API so consumers can pre-write `instanceof` checks; when B2\n * documents a dedicated checksum-mismatch code, the `classifyError`\n * switch gets a matching case and existing consumer code starts\n * catching the typed error without any changes on their side.\n *\n * Until then, expect `BadRequestError` for SHA-1 mismatch scenarios.\n */\nexport class ChecksumMismatchError extends B2Error {\n /**\n * Creates a new ChecksumMismatchError instance.\n * @param response - Parsed B2 error response body.\n * @param options - The error details including HTTP status, error code, message, and optional request ID.\n */\n constructor(response: B2ErrorResponse, options?: { requestId?: string }) {\n super(response, options)\n this.name = 'ChecksumMismatchError'\n }\n}\n\n/**\n * Thrown by client-side capability checks when the application key is missing\n * capabilities required by an operation. Not raised by the server.\n */\nexport class B2InsufficientCapabilityError extends Error {\n /** Capabilities that were required for the operation. */\n readonly required: readonly string[]\n /** Capabilities that the current key actually has. */\n readonly available: readonly string[]\n /** Capabilities present in `required` but not in `available`. */\n readonly missing: readonly string[]\n\n /**\n * Creates a new B2InsufficientCapabilityError instance.\n *\n * @param required - Capabilities the operation requires.\n * @param available - Capabilities the current key holds.\n * @param missing - The subset of required that isn't available.\n */\n constructor(\n required: readonly string[],\n available: readonly string[],\n missing: readonly string[],\n ) {\n super(`Application key is missing capabilities: ${missing.join(', ')}`)\n this.name = 'B2InsufficientCapabilityError'\n this.required = required\n this.available = available\n this.missing = missing\n }\n}\n\n/**\n * Thrown when the SDK is asked to fetch a URL whose host is outside the\n * authorized B2 realm. Defense against SSRF / URL-substitution attacks where\n * a compromised or hostile B2 endpoint returns an upload URL pointing at an\n * internal service (e.g. cloud metadata at `169.254.169.254`).\n *\n * Not retryable.\n */\nexport class B2SsrfError extends Error {\n /** Always `false` — this is a security failure, not transient. */\n readonly retryable = false\n\n /**\n * Creates a new {@link B2SsrfError}.\n *\n * @param message - Human-readable description of which URL was rejected and why.\n * @param url - The full URL that was rejected.\n */\n constructor(\n message: string,\n /** The full URL that was rejected. */\n public readonly url: string,\n ) {\n super(message)\n this.name = 'B2SsrfError'\n }\n}\n\n/** Thrown when a network-level failure occurs (DNS, TCP, TLS). Always retryable. */\nexport class NetworkError extends Error {\n /** Always `true` since network errors are transient. */\n readonly retryable = true\n\n /**\n * Creates a new NetworkError instance.\n * @param message - Human-readable description of the network failure.\n * @param cause - The underlying error that caused this failure, if any.\n */\n constructor(\n message: string,\n public override readonly cause?: unknown,\n ) {\n super(message)\n this.name = 'NetworkError'\n }\n}\n\nfunction isTransient(status: number, code: B2ErrorCode): boolean {\n if (status === 408 || status === 429 || status === 503) return true\n if (code === 'expired_auth_token') return true\n if (code === 'service_unavailable' || code === 'request_timeout') return true\n return false\n}\n\n/**\n * Maps a B2 error response to the appropriate {@link B2Error} subclass.\n * Uses the error code for exact matching, then falls back to HTTP status codes.\n *\n * Maintainer note: when B2 documents a new error code, add a `case`\n * branch below pointing at the matching {@link B2Error} subclass. Unknown\n * codes fall through to the HTTP-status-based heuristic and finally to a\n * generic `B2Error` — that's safe but loses semantic specificity (the\n * caller can't `instanceof` against a precise subclass and the retry\n * decision relies on status alone). The `B2ErrorCode` union in\n * `src/types/errors.ts` should also gain the new code at the same time\n * so the switch is exhaustive again.\n *\n * @param response - Parsed B2 error response body.\n * @param options - Optional retry and request metadata from response headers.\n *\n * @returns A typed B2Error subclass instance.\n */\nexport function classifyError(\n response: B2ErrorResponse,\n options?: { retryAfter?: number; requestId?: string },\n): B2Error {\n switch (response.code) {\n case 'expired_auth_token':\n return new ExpiredAuthTokenError(response, options)\n case 'bad_auth_token':\n case 'unauthorized':\n return new BadAuthTokenError(response, options)\n case 'service_unavailable':\n return new ServiceUnavailableError(response, options)\n case 'request_timeout':\n return new RequestTimeoutError(response, options)\n case 'cap_exceeded':\n case 'storage_cap_exceeded':\n case 'transaction_cap_exceeded':\n case 'download_cap_exceeded':\n return new CapExceededError(response, options)\n case 'access_denied':\n return new AccessDeniedError(response, options)\n case 'file_not_present':\n case 'no_such_file':\n return new FileNotPresentError(response, options)\n case 'duplicate_bucket_name':\n return new DuplicateBucketNameError(response, options)\n case 'bad_sha1_checksum':\n return new ChecksumMismatchError(response, options)\n case 'bad_request':\n return new BadRequestError(response, options)\n default:\n break\n }\n\n if (response.status === 429) return new TooManyRequestsError(response, options)\n if (response.status === 503) return new ServiceUnavailableError(response, options)\n if (response.status === 408) return new RequestTimeoutError(response, options)\n\n return new B2Error(response, options)\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/errors/index.ts"],"sourcesContent":["/**\n * Typed error hierarchy for B2 API failures.\n *\n * Every B2 error response maps to a specific {@link B2Error} subclass.\n * Retry behavior is exposed through {@link B2Error.retryable}.\n * Examples include {@link ExpiredAuthTokenError} and {@link CapExceededError}.\n * Use {@link classifyError} to convert a raw error response into the\n * appropriate subclass.\n *\n * Convention: most `B2Error` subclasses represent failures returned by the B2\n * API. The client-side exception is {@link B2RealmConfigurationError}; it\n * extends `B2Error` so realm-validation failures can be handled with the SDK\n * error hierarchy before credentials are sent.\n *\n * Other programming errors and SDK preconditions, such as \"not yet authorized\",\n * \"stream consumed twice\", or \"called before init\", use the native `Error`\n * constructor instead. The direct `Error` outliers are\n * {@link B2InsufficientCapabilityError}, {@link B2RedirectError},\n * {@link B2SsrfError}, {@link NetworkError},\n * {@link ResumeFileIdMismatchError}, {@link UploadResponseBodyError}, and\n * {@link FinishLargeFileResponseBodyError}.\n *\n * @packageDocumentation\n */\n\nimport { redactUrlForError } from '../internal/url-redaction.ts'\nimport {\n type B2ErrorCode,\n type B2ErrorResponse,\n KNOWN_B2_ERROR_CODES,\n type KnownB2ErrorCode,\n} from '../types/errors.ts'\nimport type { BucketId, LargeFileId } from '../types/ids.ts'\n\n/** Thrown when an explicit resumeFileId is not compatible with the requested upload. */\nexport class ResumeFileIdMismatchError extends Error {\n /** Caller-supplied unfinished large file ID that failed verification. */\n readonly fileId: LargeFileId\n /** Requested destination file name. */\n readonly fileName: string\n\n /**\n * Creates a new resume-file ID mismatch error.\n * @param fileId - Caller-supplied unfinished large file ID that failed verification.\n * @param fileName - Requested destination file name.\n */\n constructor(fileId: LargeFileId, fileName: string) {\n super(\n `uploadLargeFile: resumeFileId ${fileId} does not identify a compatible unfinished large file for ${fileName}.`,\n )\n this.name = 'ResumeFileIdMismatchError'\n this.fileId = fileId\n this.fileName = fileName\n }\n}\n\n/** Metadata captured from B2 error response headers. */\nexport interface B2ErrorOptions {\n /** Retry delay in seconds from the `Retry-After` response header, if present. */\n readonly retryAfter?: number\n /** B2 request ID from the `X-Bz-Request-Id` response header, if present. */\n readonly requestId?: string\n}\n\n/**\n * Base error class for all B2 API errors.\n * Contains the HTTP status, B2 error code, and retry metadata from the response.\n */\nexport class B2Error extends Error {\n /** HTTP status code returned by the B2 API. */\n readonly status: number\n /** B2 error code identifying the error type (e.g. `expired_auth_token`). */\n readonly code: B2ErrorCode\n /** B2 request ID from the `X-Bz-Request-Id` response header, if present. */\n readonly requestId?: string\n /** Retry delay in seconds from the `Retry-After` response header, if present. */\n readonly retryAfter?: number\n /** Whether this error is transient and the request can be retried. */\n readonly retryable: boolean\n\n /**\n * Creates a new B2Error instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional retry and request metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response.message)\n this.name = 'B2Error'\n this.status = response.status\n this.code = response.code\n if (options?.retryAfter !== undefined) this.retryAfter = options.retryAfter\n if (options?.requestId !== undefined) this.requestId = options.requestId\n this.retryable = isTransient(response.status, response.code)\n }\n}\n\n/** Thrown when the auth token has expired. Triggers automatic re-authorization. */\nexport class ExpiredAuthTokenError extends B2Error {\n /**\n * Creates a new ExpiredAuthTokenError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'ExpiredAuthTokenError'\n }\n}\n\n/** Thrown when the auth token is invalid or unauthorized. */\nexport class BadAuthTokenError extends B2Error {\n /**\n * Creates a new BadAuthTokenError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'BadAuthTokenError'\n }\n}\n\n/** Thrown when the B2 service is temporarily unavailable (HTTP 503). */\nexport class ServiceUnavailableError extends B2Error {\n /**\n * Creates a new ServiceUnavailableError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'ServiceUnavailableError'\n }\n}\n\n/** Thrown when B2 reports an internal server error. */\nexport class InternalError extends B2Error {\n /**\n * Creates a new InternalError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'InternalError'\n }\n}\n\n/** Thrown when a request times out on the server side (HTTP 408). */\nexport class RequestTimeoutError extends B2Error {\n /**\n * Creates a new RequestTimeoutError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'RequestTimeoutError'\n }\n}\n\n/** Thrown when the client has sent too many requests (HTTP 429). */\nexport class TooManyRequestsError extends B2Error {\n /**\n * Creates a new TooManyRequestsError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'TooManyRequestsError'\n }\n}\n\n/** Thrown when the account has reached the maximum number of buckets. */\nexport class TooManyBucketsError extends B2Error {\n /**\n * Creates a new TooManyBucketsError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'TooManyBucketsError'\n }\n}\n\n/** Thrown when the bucket or request has reached the maximum number of files. */\nexport class TooManyFilesError extends B2Error {\n /**\n * Creates a new TooManyFilesError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'TooManyFilesError'\n }\n}\n\n/** Thrown when a storage, transaction, or download cap has been exceeded. */\nexport class CapExceededError extends B2Error {\n /**\n * Creates a new CapExceededError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'CapExceededError'\n }\n}\n\n/** Thrown when the application key does not have permission for the requested operation. */\nexport class AccessDeniedError extends B2Error {\n /**\n * Creates a new AccessDeniedError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'AccessDeniedError'\n }\n}\n\n/** Thrown when the requested file does not exist. */\nexport class FileNotPresentError extends B2Error {\n /**\n * Creates a new FileNotPresentError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'FileNotPresentError'\n }\n}\n\n/** Thrown when a requested B2 resource does not exist. */\nexport class NotFoundError extends B2Error {\n /**\n * Creates a new NotFoundError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'NotFoundError'\n }\n}\n\n/** Thrown when creating a bucket with a name that already exists in the account. */\nexport class DuplicateBucketNameError extends B2Error {\n /**\n * Creates a new DuplicateBucketNameError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'DuplicateBucketNameError'\n }\n}\n\n/** Thrown when a bucket name is malformed, reserved, or otherwise rejected by B2. */\nexport class InvalidBucketNameError extends B2Error {\n /**\n * Creates a new InvalidBucketNameError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'InvalidBucketNameError'\n }\n}\n\n/** Thrown when bucket metadata fails B2 validation. */\nexport class InvalidBucketInfoError extends B2Error {\n /**\n * Creates a new InvalidBucketInfoError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'InvalidBucketInfoError'\n }\n}\n\n/** Thrown when a bucket ID is malformed or does not identify a valid bucket. */\nexport class BadBucketIdError extends B2Error {\n /**\n * Creates a new BadBucketIdError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'BadBucketIdError'\n }\n}\n\n/** Thrown when the B2 endpoint does not allow the request method. */\nexport class MethodNotAllowedError extends B2Error {\n /**\n * Creates a new MethodNotAllowedError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'MethodNotAllowedError'\n }\n}\n\n/** Thrown when the request conflicts with current B2 resource state. */\nexport class ConflictError extends B2Error {\n /**\n * Creates a new ConflictError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'ConflictError'\n }\n}\n\n/** Thrown for general bad request errors (HTTP 400) not covered by a more specific subclass. */\nexport class BadRequestError extends B2Error {\n /**\n * Creates a new BadRequestError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'BadRequestError'\n }\n}\n\n/** Thrown when B2 cannot parse the JSON request body. */\nexport class BadJsonError extends B2Error {\n /**\n * Creates a new BadJsonError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'BadJsonError'\n }\n}\n\n/** Thrown when a bucket ID has a valid shape but does not identify a usable bucket. */\nexport class InvalidBucketIdError extends B2Error {\n /**\n * Creates a new InvalidBucketIdError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'InvalidBucketIdError'\n }\n}\n\n/** Thrown when a numeric request parameter is outside the allowed range. */\nexport class OutOfRangeError extends B2Error {\n /**\n * Creates a new OutOfRangeError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'OutOfRangeError'\n }\n}\n\n/** Thrown when a requested byte range cannot be satisfied. */\nexport class RangeNotSatisfiableError extends B2Error {\n /**\n * Creates a new RangeNotSatisfiableError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'RangeNotSatisfiableError'\n }\n}\n\n/** Thrown when a file name is malformed or otherwise rejected by B2. */\nexport class InvalidFileNameError extends B2Error {\n /**\n * Creates a new InvalidFileNameError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'InvalidFileNameError'\n }\n}\n\n/** Thrown when file metadata fails B2 validation. */\nexport class InvalidFileInfoError extends B2Error {\n /**\n * Creates a new InvalidFileInfoError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'InvalidFileInfoError'\n }\n}\n\n/** Thrown when a file ID is malformed or does not identify a valid file. */\nexport class InvalidFileIdError extends B2Error {\n /**\n * Creates a new InvalidFileIdError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'InvalidFileIdError'\n }\n}\n\n/** Thrown when a multipart upload part number is invalid. */\nexport class InvalidPartNumberError extends B2Error {\n /**\n * Creates a new InvalidPartNumberError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'InvalidPartNumberError'\n }\n}\n\n/**\n * Thrown when an upload URL is no longer valid and must be refreshed.\n *\n * Forward-compat insurance: B2 does not currently surface a distinct\n * error code for this case, so {@link classifyError} never actually\n * instantiates this class today. It's part of the public API so\n * consumers can pre-write `instanceof` checks; when B2 documents a\n * `bad_upload_url` (or similar) error code, the `classifyError`\n * switch gets a matching case and existing consumer code starts\n * catching the typed error without any changes on their side.\n *\n * Until then, expect `BadRequestError` for upload-URL invalidation\n * scenarios — that's what B2 currently returns.\n */\nexport class BadUploadUrlError extends B2Error {\n /**\n * Creates a new BadUploadUrlError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'BadUploadUrlError'\n }\n}\n\n/**\n * Thrown when the uploaded file's SHA-1 checksum does not match the\n * expected value.\n *\n * When B2 returns `bad_sha1_checksum`, {@link classifyError} instantiates\n * this class so callers can handle checksum failures with `instanceof`.\n * Generic `bad_request` checksum failures continue to classify as\n * {@link BadRequestError}.\n */\nexport class ChecksumMismatchError extends B2Error {\n /**\n * Creates a new ChecksumMismatchError instance.\n * @param response - Parsed B2 error response body.\n * @param options - Optional metadata from response headers.\n */\n constructor(response: B2ErrorResponse, options?: B2ErrorOptions) {\n super(response, options)\n this.name = 'ChecksumMismatchError'\n }\n}\n\n/**\n * Thrown by client-side capability checks when the application key is missing\n * capabilities required by an operation. Not raised by the server.\n */\nexport class B2InsufficientCapabilityError extends Error {\n /** Capabilities that were required for the operation. */\n readonly required: readonly string[]\n /** Capabilities that the current key actually has. */\n readonly available: readonly string[]\n /** Capabilities present in `required` but not in `available`. */\n readonly missing: readonly string[]\n\n /**\n * Creates a new B2InsufficientCapabilityError instance.\n *\n * @param required - Capabilities the operation requires.\n * @param available - Capabilities the current key holds.\n * @param missing - The subset of required that isn't available.\n */\n constructor(\n required: readonly string[],\n available: readonly string[],\n missing: readonly string[],\n ) {\n super(`Application key is missing capabilities: ${missing.join(', ')}`)\n this.name = 'B2InsufficientCapabilityError'\n this.required = required\n this.available = available\n this.missing = missing\n }\n}\n\n/**\n * Thrown when the SDK is asked to fetch a URL whose host is outside the\n * authorized B2 realm. Defense against SSRF / URL-substitution attacks where\n * a compromised or hostile B2 endpoint returns an upload URL pointing at an\n * internal service (e.g. cloud metadata at `169.254.169.254`).\n *\n * Not retryable.\n */\nexport class B2SsrfError extends Error {\n /** Always `false` — this is a security failure, not transient. */\n readonly retryable = false\n\n /**\n * Creates a new {@link B2SsrfError}.\n *\n * @param message - Human-readable description of which URL was rejected and why.\n * @param url - The URL that was rejected. Stored as a sanitized URL.\n */\n constructor(message: string, url: string) {\n const safeUrl = redactUrlForError(url)\n super(`${message.split(url).join(safeUrl)} (${safeUrl})`)\n this.name = 'B2SsrfError'\n this.url = safeUrl\n }\n\n /** Sanitized URL that was rejected. */\n readonly url: string\n}\n\n/** Thrown when a configured auth realm cannot safely be used for authorization. */\nexport class B2RealmConfigurationError extends B2Error {\n /**\n * Creates a new B2RealmConfigurationError instance.\n *\n * @param message - Human-readable description of the invalid realm setting.\n */\n constructor(message: string) {\n super({ status: 400, code: 'bad_request', message })\n this.name = 'B2RealmConfigurationError'\n }\n}\n\n/** Thrown when the SDK refuses to follow an HTTP redirect automatically. */\nexport class B2RedirectError extends Error {\n /** Always `false` because a blocked redirect is deterministic. */\n readonly retryable = false\n /** Sanitized request URL whose response attempted to redirect. */\n readonly url: string\n /** HTTP redirect status code, or 0 for an opaque browser redirect. */\n readonly status: number\n /** Sanitized redirect target, or `null` when no Location header was present. */\n readonly location: string | null\n\n /**\n * Creates a new B2RedirectError instance.\n *\n * @param url - Request URL whose response attempted to redirect. Stored as a sanitized URL.\n * @param status - HTTP redirect status code.\n * @param location - Redirect Location header, if present. Stored as a sanitized URL.\n */\n constructor(url: string, status: number, location: string | null) {\n const safeUrl = redactUrlForError(url)\n const safeLocation = location !== null ? redactUrlForError(location, { baseUrl: url }) : null\n super(\n safeLocation !== null\n ? `HTTP ${status} redirect blocked for ${safeUrl} to ${safeLocation}`\n : `HTTP ${status} redirect blocked for ${safeUrl}`,\n )\n this.name = 'B2RedirectError'\n this.url = safeUrl\n this.status = status\n this.location = safeLocation\n }\n}\n\n/** Thrown when a network-level failure occurs (DNS, TCP, TLS). Always retryable. */\nexport class NetworkError extends Error {\n /** Always `true` since network errors are transient. */\n readonly retryable = true\n\n /**\n * Creates a new NetworkError instance.\n * @param message - Human-readable description of the network failure.\n * @param cause - The underlying error that caused this failure, if any.\n */\n constructor(\n message: string,\n public override readonly cause?: unknown,\n ) {\n super(message)\n this.name = 'NetworkError'\n }\n}\n\n/**\n * Thrown when an upload POST returned a response but its body could not be\n * read. The upload may already have been stored by B2, so retrying this error\n * can create duplicate file versions or parts.\n */\nexport class UploadResponseBodyError extends Error {\n /** Underlying response body error, when available. */\n public override readonly cause?: unknown\n\n /**\n * Creates a new UploadResponseBodyError instance.\n * @param message - Human-readable description of the response read failure.\n * @param options - Optional cause.\n */\n constructor(\n message: string,\n options: {\n readonly cause?: unknown\n } = {},\n ) {\n super(message, { cause: options.cause })\n this.name = 'UploadResponseBodyError'\n if (options.cause !== undefined) this.cause = options.cause\n }\n}\n\n/**\n * Thrown when `b2_finish_large_file` returned a response but its body could not\n * be read. The large file may already be committed server-side, so high-level\n * upload paths do not cancel the large file after this error.\n */\nexport class FinishLargeFileResponseBodyError extends Error {\n /** Ambiguous large file ID that may already be committed server-side. */\n readonly fileId?: LargeFileId\n /** Bucket requested by the high-level upload, when available. */\n readonly bucketId?: BucketId\n /** File name requested by the high-level upload, when available. */\n readonly fileName?: string\n\n /**\n * Creates a new FinishLargeFileResponseBodyError instance.\n * @param message - Human-readable description of the response read failure.\n * @param options - Optional cause and reconciliation metadata.\n */\n constructor(\n message: string,\n options: {\n readonly cause?: unknown\n readonly fileId?: LargeFileId\n readonly bucketId?: BucketId\n readonly fileName?: string\n } = {},\n ) {\n super(message, { cause: options.cause })\n this.name = 'FinishLargeFileResponseBodyError'\n if (options.cause !== undefined) this.cause = options.cause\n if (options.fileId !== undefined) this.fileId = options.fileId\n if (options.bucketId !== undefined) this.bucketId = options.bucketId\n if (options.fileName !== undefined) this.fileName = options.fileName\n }\n}\n\nfunction isTransient(status: number, code: B2ErrorCode): boolean {\n // Request timeout + rate limit.\n if (status === 408 || status === 429) return true\n // Transient server errors: internal error (500), bad gateway (502), service\n // unavailable (503), gateway timeout (504). B2 documents 500 and 503 as\n // retryable; 502/504 are transient infrastructure failures. 501 (Not\n // Implemented) is deliberately excluded — it is deterministic, not transient.\n //\n // This is keyed on STATUS, not on the `internal_error` code: `RetryTransport`\n // synthesizes `{ code: 'internal_error' }` for any error response whose body\n // is not parseable JSON (see transport.ts), including bodyless 4xx like a 404\n // download miss. Treating that code as transient would wrongly retry 4xx.\n if (status === 500 || status === 502 || status === 503 || status === 504) return true\n if (code === 'expired_auth_token') return true\n if (code === 'service_unavailable' || code === 'request_timeout') return true\n return false\n}\n\nconst knownB2ErrorCodes: ReadonlySet<string> = new Set(KNOWN_B2_ERROR_CODES)\n\nfunction isKnownB2ErrorCode(code: B2ErrorCode): code is KnownB2ErrorCode {\n return knownB2ErrorCodes.has(code)\n}\n\nfunction assertNever(value: never): never {\n throw new Error(`Unhandled B2 error code: ${String(value)}`)\n}\n\nfunction classifyKnownError(\n response: B2ErrorResponse,\n code: KnownB2ErrorCode,\n options?: B2ErrorOptions,\n): B2Error {\n switch (code) {\n case 'expired_auth_token':\n return new ExpiredAuthTokenError(response, options)\n case 'bad_auth_token':\n case 'unauthorized':\n return new BadAuthTokenError(response, options)\n case 'bad_request':\n return new BadRequestError(response, options)\n case 'bad_bucket_name':\n case 'invalid_bucket_name':\n return new InvalidBucketNameError(response, options)\n case 'bad_bucket_id':\n return new BadBucketIdError(response, options)\n case 'not_found':\n return new NotFoundError(response, options)\n case 'method_not_allowed':\n return new MethodNotAllowedError(response, options)\n case 'request_timeout':\n return new RequestTimeoutError(response, options)\n case 'too_many_requests':\n return new TooManyRequestsError(response, options)\n case 'conflict':\n return new ConflictError(response, options)\n case 'duplicate_bucket_name':\n return new DuplicateBucketNameError(response, options)\n case 'too_many_buckets':\n return new TooManyBucketsError(response, options)\n case 'too_many_files':\n return new TooManyFilesError(response, options)\n case 'cap_exceeded':\n case 'storage_cap_exceeded':\n case 'transaction_cap_exceeded':\n case 'download_cap_exceeded':\n return new CapExceededError(response, options)\n case 'access_denied':\n return new AccessDeniedError(response, options)\n case 'service_unavailable':\n return new ServiceUnavailableError(response, options)\n case 'internal_error':\n return new InternalError(response, options)\n case 'bad_json':\n return new BadJsonError(response, options)\n case 'invalid_bucket_id':\n return new InvalidBucketIdError(response, options)\n case 'invalid_bucket_info':\n return new InvalidBucketInfoError(response, options)\n case 'file_not_present':\n case 'no_such_file':\n return new FileNotPresentError(response, options)\n case 'out_of_range':\n return new OutOfRangeError(response, options)\n case 'range_not_satisfiable':\n return new RangeNotSatisfiableError(response, options)\n case 'invalid_file_id':\n return new InvalidFileIdError(response, options)\n case 'invalid_file_name':\n return new InvalidFileNameError(response, options)\n case 'invalid_file_info':\n return new InvalidFileInfoError(response, options)\n case 'invalid_part_number':\n return new InvalidPartNumberError(response, options)\n case 'bad_sha1_checksum':\n return new ChecksumMismatchError(response, options)\n default:\n return assertNever(code)\n }\n}\n\nfunction classifyUnknownError(response: B2ErrorResponse, options?: B2ErrorOptions): B2Error {\n if (response.status === 429) return new TooManyRequestsError(response, options)\n if (response.status === 503) return new ServiceUnavailableError(response, options)\n if (response.status === 408) return new RequestTimeoutError(response, options)\n\n return new B2Error(response, options)\n}\n\n/**\n * Maps a B2 error response to the appropriate {@link B2Error} subclass.\n * Uses known error codes for exact matching, then falls back to HTTP status\n * codes for unknown future B2 codes.\n *\n * Maintainer note: when B2 documents a new error code, add it to\n * `KNOWN_B2_ERROR_CODES` in `src/types/errors.ts` and add a matching\n * `classifyKnownError` switch case. Unknown codes fall through to the\n * HTTP-status-based heuristic and finally to a generic `B2Error`, which is\n * safe but loses semantic specificity (the caller can't `instanceof` against\n * a precise subclass and the retry decision relies on status alone).\n *\n * @param response - Parsed B2 error response body.\n * @param options - Optional retry and request metadata from response headers.\n *\n * @returns A typed B2Error subclass instance.\n */\nexport function classifyError(response: B2ErrorResponse, options?: B2ErrorOptions): B2Error {\n // `RetryTransport` and ranged-download parsing synthesize `internal_error`\n // when a non-JSON response body cannot provide a real B2 code. Only the\n // documented 500/internal_error pair should classify as InternalError.\n if (response.code === 'internal_error' && response.status !== 500) {\n return classifyUnknownError(response, options)\n }\n\n if (isKnownB2ErrorCode(response.code)) return classifyKnownError(response, response.code, options)\n\n return classifyUnknownError(response, options)\n}\n"],"mappings":"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"}
@@ -1,36 +1,53 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const DEFAULT_RETRY_OPTIONS = {
4
- maxRetries: 5,
5
- maxRetryDelayMs: 64e3,
6
- initialRetryDelayMs: 1e3
1
+ //#region src/http/retry.ts
2
+ /** Default retry settings: 5 retries, 1s initial delay, 64s max delay, 15 minute timeout. */
3
+ var DEFAULT_RETRY_OPTIONS = {
4
+ maxRetries: 5,
5
+ maxRetryDelayMs: 64e3,
6
+ initialRetryDelayMs: 1e3,
7
+ requestTimeoutMs: 15 * 6e4
7
8
  };
9
+ /**
10
+ * Computes the delay before the next retry using exponential backoff with jitter.
11
+ * If a `Retry-After` value is provided by the server, it takes precedence over
12
+ * the calculated backoff (still capped at {@link RetryOptions.maxRetryDelayMs}).
13
+ *
14
+ * @param attempt - Zero-based retry attempt index.
15
+ * @param options - Retry configuration with delay bounds.
16
+ * @param retryAfter - Server-provided retry delay in seconds, if any.
17
+ *
18
+ * @returns The delay in milliseconds before the next retry attempt.
19
+ */
8
20
  function computeBackoff(attempt, options, retryAfter) {
9
- if (retryAfter !== void 0 && retryAfter > 0) {
10
- return Math.min(retryAfter * 1e3, options.maxRetryDelayMs);
11
- }
12
- const base = options.initialRetryDelayMs * 2 ** attempt;
13
- const jitter = Math.random() * base * 0.5;
14
- return Math.min(base + jitter, options.maxRetryDelayMs);
21
+ if (retryAfter !== void 0 && retryAfter > 0) return Math.min(retryAfter * 1e3, options.maxRetryDelayMs);
22
+ const base = options.initialRetryDelayMs * 2 ** attempt;
23
+ const jitter = Math.random() * base * .5;
24
+ return Math.min(base + jitter, options.maxRetryDelayMs);
15
25
  }
26
+ /**
27
+ * Returns a promise that resolves after the given delay. Supports cancellation
28
+ * via an optional AbortSignal.
29
+ *
30
+ * @param ms - Delay in milliseconds.
31
+ * @param signal - Optional abort signal to cancel the sleep early.
32
+ *
33
+ * @returns A promise that resolves when the delay elapses or rejects if aborted.
34
+ */
16
35
  function sleep(ms, signal) {
17
- return new Promise((resolve, reject) => {
18
- if (signal?.aborted) {
19
- reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
20
- return;
21
- }
22
- const timer = setTimeout(resolve, ms);
23
- signal?.addEventListener(
24
- "abort",
25
- () => {
26
- clearTimeout(timer);
27
- reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
28
- },
29
- { once: true }
30
- );
31
- });
36
+ return new Promise((resolve, reject) => {
37
+ if (signal?.aborted) {
38
+ reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
39
+ return;
40
+ }
41
+ const timer = setTimeout(resolve, ms);
42
+ signal?.addEventListener("abort", () => {
43
+ clearTimeout(timer);
44
+ reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
45
+ }, { once: true });
46
+ });
32
47
  }
48
+ //#endregion
33
49
  exports.DEFAULT_RETRY_OPTIONS = DEFAULT_RETRY_OPTIONS;
34
50
  exports.computeBackoff = computeBackoff;
35
51
  exports.sleep = sleep;
36
- //# sourceMappingURL=retry.cjs.map
52
+
53
+ //# sourceMappingURL=retry.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"retry.cjs","sources":["../../src/http/retry.ts"],"sourcesContent":["/** Configuration for retry behavior on transient failures. */\nexport interface RetryOptions {\n /** Maximum number of retry attempts before giving up. */\n readonly maxRetries: number\n /** Upper bound on retry delay in milliseconds, regardless of backoff calculation. */\n readonly maxRetryDelayMs: number\n /** Base delay in milliseconds for the first retry. Doubles on each subsequent attempt. */\n readonly initialRetryDelayMs: number\n}\n\n/** Default retry settings: 5 retries, 1s initial delay, 64s max delay. */\nexport const DEFAULT_RETRY_OPTIONS: RetryOptions = {\n maxRetries: 5,\n maxRetryDelayMs: 64_000,\n initialRetryDelayMs: 1_000,\n}\n\n/**\n * Computes the delay before the next retry using exponential backoff with jitter.\n * If a `Retry-After` value is provided by the server, it takes precedence over\n * the calculated backoff (still capped at {@link RetryOptions.maxRetryDelayMs}).\n *\n * @param attempt - Zero-based retry attempt index.\n * @param options - Retry configuration with delay bounds.\n * @param retryAfter - Server-provided retry delay in seconds, if any.\n *\n * @returns The delay in milliseconds before the next retry attempt.\n */\nexport function computeBackoff(\n attempt: number,\n options: RetryOptions,\n retryAfter?: number,\n): number {\n if (retryAfter !== undefined && retryAfter > 0) {\n return Math.min(retryAfter * 1000, options.maxRetryDelayMs)\n }\n const base = options.initialRetryDelayMs * 2 ** attempt\n const jitter = Math.random() * base * 0.5\n return Math.min(base + jitter, options.maxRetryDelayMs)\n}\n\n/**\n * Returns a promise that resolves after the given delay. Supports cancellation\n * via an optional AbortSignal.\n *\n * @param ms - Delay in milliseconds.\n * @param signal - Optional abort signal to cancel the sleep early.\n *\n * @returns A promise that resolves when the delay elapses or rejects if aborted.\n */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason ?? new DOMException('Aborted', 'AbortError'))\n return\n }\n const timer = setTimeout(resolve, ms)\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer)\n reject(signal.reason ?? new DOMException('Aborted', 'AbortError'))\n },\n { once: true },\n )\n })\n}\n"],"names":[],"mappings":";;AAWO,MAAM,wBAAsC;AAAA,EACjD,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,qBAAqB;AACvB;AAaO,SAAS,eACd,SACA,SACA,YACQ;AACR,MAAI,eAAe,UAAa,aAAa,GAAG;AAC9C,WAAO,KAAK,IAAI,aAAa,KAAM,QAAQ,eAAe;AAAA,EAC5D;AACA,QAAM,OAAO,QAAQ,sBAAsB,KAAK;AAChD,QAAM,SAAS,KAAK,OAAA,IAAW,OAAO;AACtC,SAAO,KAAK,IAAI,OAAO,QAAQ,QAAQ,eAAe;AACxD;AAWO,SAAS,MAAM,IAAY,QAAqC;AACrE,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI,QAAQ,SAAS;AACnB,aAAO,OAAO,UAAU,IAAI,aAAa,WAAW,YAAY,CAAC;AACjE;AAAA,IACF;AACA,UAAM,QAAQ,WAAW,SAAS,EAAE;AACpC,YAAQ;AAAA,MACN;AAAA,MACA,MAAM;AACJ,qBAAa,KAAK;AAClB,eAAO,OAAO,UAAU,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,MACnE;AAAA,MACA,EAAE,MAAM,KAAA;AAAA,IAAK;AAAA,EAEjB,CAAC;AACH;;;;"}
1
+ {"version":3,"file":"retry.cjs","names":[],"sources":["../../src/http/retry.ts"],"sourcesContent":["/** Configuration for retry behavior on transient failures. */\nexport interface RetryOptions {\n /** Maximum number of retry attempts before giving up. */\n readonly maxRetries: number\n /** Upper bound on retry delay in milliseconds, regardless of backoff calculation. */\n readonly maxRetryDelayMs: number\n /** Base delay in milliseconds for the first retry. Doubles on each subsequent attempt. */\n readonly initialRetryDelayMs: number\n /**\n * Optional timeout for each HTTP request attempt. Defaults to 15 minutes\n * when omitted. The timer covers request dispatch, upload bodies, and\n * non-streaming response body reads. For `response.body` streams it is an\n * idle timeout that resets after each received chunk. Set to 0 to disable\n * the SDK timeout and rely only on the caller's AbortSignal.\n */\n readonly requestTimeoutMs?: number\n}\n\n/** Default retry settings: 5 retries, 1s initial delay, 64s max delay, 15 minute timeout. */\nexport const DEFAULT_RETRY_OPTIONS = {\n maxRetries: 5,\n maxRetryDelayMs: 64_000,\n initialRetryDelayMs: 1_000,\n requestTimeoutMs: 15 * 60_000,\n} satisfies Required<RetryOptions>\n\n/**\n * Computes the delay before the next retry using exponential backoff with jitter.\n * If a `Retry-After` value is provided by the server, it takes precedence over\n * the calculated backoff (still capped at {@link RetryOptions.maxRetryDelayMs}).\n *\n * @param attempt - Zero-based retry attempt index.\n * @param options - Retry configuration with delay bounds.\n * @param retryAfter - Server-provided retry delay in seconds, if any.\n *\n * @returns The delay in milliseconds before the next retry attempt.\n */\nexport function computeBackoff(\n attempt: number,\n options: RetryOptions,\n retryAfter?: number,\n): number {\n if (retryAfter !== undefined && retryAfter > 0) {\n return Math.min(retryAfter * 1000, options.maxRetryDelayMs)\n }\n const base = options.initialRetryDelayMs * 2 ** attempt\n const jitter = Math.random() * base * 0.5\n return Math.min(base + jitter, options.maxRetryDelayMs)\n}\n\n/**\n * Returns a promise that resolves after the given delay. Supports cancellation\n * via an optional AbortSignal.\n *\n * @param ms - Delay in milliseconds.\n * @param signal - Optional abort signal to cancel the sleep early.\n *\n * @returns A promise that resolves when the delay elapses or rejects if aborted.\n */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason ?? new DOMException('Aborted', 'AbortError'))\n return\n }\n const timer = setTimeout(resolve, ms)\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer)\n reject(signal.reason ?? new DOMException('Aborted', 'AbortError'))\n },\n { once: true },\n )\n })\n}\n"],"mappings":";;AAmBA,IAAa,wBAAwB;CACnC,YAAY;CACZ,iBAAiB;CACjB,qBAAqB;CACrB,kBAAkB,KAAK;AACzB;;;;;;;;;;;;AAaA,SAAgB,eACd,SACA,SACA,YACQ;CACR,IAAI,eAAe,KAAA,KAAa,aAAa,GAC3C,OAAO,KAAK,IAAI,aAAa,KAAM,QAAQ,eAAe;CAE5D,MAAM,OAAO,QAAQ,sBAAsB,KAAK;CAChD,MAAM,SAAS,KAAK,OAAO,IAAI,OAAO;CACtC,OAAO,KAAK,IAAI,OAAO,QAAQ,QAAQ,eAAe;AACxD;;;;;;;;;;AAWA,SAAgB,MAAM,IAAY,QAAqC;CACrE,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,IAAI,QAAQ,SAAS;GACnB,OAAO,OAAO,UAAU,IAAI,aAAa,WAAW,YAAY,CAAC;GACjE;EACF;EACA,MAAM,QAAQ,WAAW,SAAS,EAAE;EACpC,QAAQ,iBACN,eACM;GACJ,aAAa,KAAK;GAClB,OAAO,OAAO,UAAU,IAAI,aAAa,WAAW,YAAY,CAAC;EACnE,GACA,EAAE,MAAM,KAAK,CACf;CACF,CAAC;AACH"}
@@ -6,9 +6,22 @@ export interface RetryOptions {
6
6
  readonly maxRetryDelayMs: number;
7
7
  /** Base delay in milliseconds for the first retry. Doubles on each subsequent attempt. */
8
8
  readonly initialRetryDelayMs: number;
9
+ /**
10
+ * Optional timeout for each HTTP request attempt. Defaults to 15 minutes
11
+ * when omitted. The timer covers request dispatch, upload bodies, and
12
+ * non-streaming response body reads. For `response.body` streams it is an
13
+ * idle timeout that resets after each received chunk. Set to 0 to disable
14
+ * the SDK timeout and rely only on the caller's AbortSignal.
15
+ */
16
+ readonly requestTimeoutMs?: number;
9
17
  }
10
- /** Default retry settings: 5 retries, 1s initial delay, 64s max delay. */
11
- export declare const DEFAULT_RETRY_OPTIONS: RetryOptions;
18
+ /** Default retry settings: 5 retries, 1s initial delay, 64s max delay, 15 minute timeout. */
19
+ export declare const DEFAULT_RETRY_OPTIONS: {
20
+ maxRetries: number;
21
+ maxRetryDelayMs: number;
22
+ initialRetryDelayMs: number;
23
+ requestTimeoutMs: number;
24
+ };
12
25
  /**
13
26
  * Computes the delay before the next retry using exponential backoff with jitter.
14
27
  * If a `Retry-After` value is provided by the server, it takes precedence over
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/http/retry.js"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,qFAAqF;IACrF,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,0FAA0F;IAC1F,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;CACrC;AAED,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,EAAE,YAInC,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAOR;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrE"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/http/retry.js"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,qFAAqF;IACrF,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,0FAA0F;IAC1F,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC;AAED,6FAA6F;AAC7F,eAAO,MAAM,qBAAqB;;;;;CAKA,CAAA;AAElC;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAOR;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrE"}
@@ -6,9 +6,22 @@ export interface RetryOptions {
6
6
  readonly maxRetryDelayMs: number;
7
7
  /** Base delay in milliseconds for the first retry. Doubles on each subsequent attempt. */
8
8
  readonly initialRetryDelayMs: number;
9
+ /**
10
+ * Optional timeout for each HTTP request attempt. Defaults to 15 minutes
11
+ * when omitted. The timer covers request dispatch, upload bodies, and
12
+ * non-streaming response body reads. For `response.body` streams it is an
13
+ * idle timeout that resets after each received chunk. Set to 0 to disable
14
+ * the SDK timeout and rely only on the caller's AbortSignal.
15
+ */
16
+ readonly requestTimeoutMs?: number;
9
17
  }
10
- /** Default retry settings: 5 retries, 1s initial delay, 64s max delay. */
11
- export declare const DEFAULT_RETRY_OPTIONS: RetryOptions;
18
+ /** Default retry settings: 5 retries, 1s initial delay, 64s max delay, 15 minute timeout. */
19
+ export declare const DEFAULT_RETRY_OPTIONS: {
20
+ maxRetries: number;
21
+ maxRetryDelayMs: number;
22
+ initialRetryDelayMs: number;
23
+ requestTimeoutMs: number;
24
+ };
12
25
  /**
13
26
  * Computes the delay before the next retry using exponential backoff with jitter.
14
27
  * If a `Retry-After` value is provided by the server, it takes precedence over
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/http/retry.js"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,qFAAqF;IACrF,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,0FAA0F;IAC1F,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;CACrC;AAED,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,EAAE,YAInC,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAOR;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrE"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/http/retry.js"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,qFAAqF;IACrF,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,0FAA0F;IAC1F,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC;AAED,6FAA6F;AAC7F,eAAO,MAAM,qBAAqB;;;;;CAKA,CAAA;AAElC;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAOR;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrE"}
@@ -1,36 +1,51 @@
1
- const DEFAULT_RETRY_OPTIONS = {
2
- maxRetries: 5,
3
- maxRetryDelayMs: 64e3,
4
- initialRetryDelayMs: 1e3
1
+ //#region src/http/retry.ts
2
+ /** Default retry settings: 5 retries, 1s initial delay, 64s max delay, 15 minute timeout. */
3
+ var DEFAULT_RETRY_OPTIONS = {
4
+ maxRetries: 5,
5
+ maxRetryDelayMs: 64e3,
6
+ initialRetryDelayMs: 1e3,
7
+ requestTimeoutMs: 15 * 6e4
5
8
  };
9
+ /**
10
+ * Computes the delay before the next retry using exponential backoff with jitter.
11
+ * If a `Retry-After` value is provided by the server, it takes precedence over
12
+ * the calculated backoff (still capped at {@link RetryOptions.maxRetryDelayMs}).
13
+ *
14
+ * @param attempt - Zero-based retry attempt index.
15
+ * @param options - Retry configuration with delay bounds.
16
+ * @param retryAfter - Server-provided retry delay in seconds, if any.
17
+ *
18
+ * @returns The delay in milliseconds before the next retry attempt.
19
+ */
6
20
  function computeBackoff(attempt, options, retryAfter) {
7
- if (retryAfter !== void 0 && retryAfter > 0) {
8
- return Math.min(retryAfter * 1e3, options.maxRetryDelayMs);
9
- }
10
- const base = options.initialRetryDelayMs * 2 ** attempt;
11
- const jitter = Math.random() * base * 0.5;
12
- return Math.min(base + jitter, options.maxRetryDelayMs);
21
+ if (retryAfter !== void 0 && retryAfter > 0) return Math.min(retryAfter * 1e3, options.maxRetryDelayMs);
22
+ const base = options.initialRetryDelayMs * 2 ** attempt;
23
+ const jitter = Math.random() * base * .5;
24
+ return Math.min(base + jitter, options.maxRetryDelayMs);
13
25
  }
26
+ /**
27
+ * Returns a promise that resolves after the given delay. Supports cancellation
28
+ * via an optional AbortSignal.
29
+ *
30
+ * @param ms - Delay in milliseconds.
31
+ * @param signal - Optional abort signal to cancel the sleep early.
32
+ *
33
+ * @returns A promise that resolves when the delay elapses or rejects if aborted.
34
+ */
14
35
  function sleep(ms, signal) {
15
- return new Promise((resolve, reject) => {
16
- if (signal?.aborted) {
17
- reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
18
- return;
19
- }
20
- const timer = setTimeout(resolve, ms);
21
- signal?.addEventListener(
22
- "abort",
23
- () => {
24
- clearTimeout(timer);
25
- reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
26
- },
27
- { once: true }
28
- );
29
- });
36
+ return new Promise((resolve, reject) => {
37
+ if (signal?.aborted) {
38
+ reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
39
+ return;
40
+ }
41
+ const timer = setTimeout(resolve, ms);
42
+ signal?.addEventListener("abort", () => {
43
+ clearTimeout(timer);
44
+ reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
45
+ }, { once: true });
46
+ });
30
47
  }
31
- export {
32
- DEFAULT_RETRY_OPTIONS,
33
- computeBackoff,
34
- sleep
35
- };
36
- //# sourceMappingURL=retry.js.map
48
+ //#endregion
49
+ export { DEFAULT_RETRY_OPTIONS, computeBackoff, sleep };
50
+
51
+ //# sourceMappingURL=retry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sources":["../../src/http/retry.ts"],"sourcesContent":["/** Configuration for retry behavior on transient failures. */\nexport interface RetryOptions {\n /** Maximum number of retry attempts before giving up. */\n readonly maxRetries: number\n /** Upper bound on retry delay in milliseconds, regardless of backoff calculation. */\n readonly maxRetryDelayMs: number\n /** Base delay in milliseconds for the first retry. Doubles on each subsequent attempt. */\n readonly initialRetryDelayMs: number\n}\n\n/** Default retry settings: 5 retries, 1s initial delay, 64s max delay. */\nexport const DEFAULT_RETRY_OPTIONS: RetryOptions = {\n maxRetries: 5,\n maxRetryDelayMs: 64_000,\n initialRetryDelayMs: 1_000,\n}\n\n/**\n * Computes the delay before the next retry using exponential backoff with jitter.\n * If a `Retry-After` value is provided by the server, it takes precedence over\n * the calculated backoff (still capped at {@link RetryOptions.maxRetryDelayMs}).\n *\n * @param attempt - Zero-based retry attempt index.\n * @param options - Retry configuration with delay bounds.\n * @param retryAfter - Server-provided retry delay in seconds, if any.\n *\n * @returns The delay in milliseconds before the next retry attempt.\n */\nexport function computeBackoff(\n attempt: number,\n options: RetryOptions,\n retryAfter?: number,\n): number {\n if (retryAfter !== undefined && retryAfter > 0) {\n return Math.min(retryAfter * 1000, options.maxRetryDelayMs)\n }\n const base = options.initialRetryDelayMs * 2 ** attempt\n const jitter = Math.random() * base * 0.5\n return Math.min(base + jitter, options.maxRetryDelayMs)\n}\n\n/**\n * Returns a promise that resolves after the given delay. Supports cancellation\n * via an optional AbortSignal.\n *\n * @param ms - Delay in milliseconds.\n * @param signal - Optional abort signal to cancel the sleep early.\n *\n * @returns A promise that resolves when the delay elapses or rejects if aborted.\n */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason ?? new DOMException('Aborted', 'AbortError'))\n return\n }\n const timer = setTimeout(resolve, ms)\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer)\n reject(signal.reason ?? new DOMException('Aborted', 'AbortError'))\n },\n { once: true },\n )\n })\n}\n"],"names":[],"mappings":"AAWO,MAAM,wBAAsC;AAAA,EACjD,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,qBAAqB;AACvB;AAaO,SAAS,eACd,SACA,SACA,YACQ;AACR,MAAI,eAAe,UAAa,aAAa,GAAG;AAC9C,WAAO,KAAK,IAAI,aAAa,KAAM,QAAQ,eAAe;AAAA,EAC5D;AACA,QAAM,OAAO,QAAQ,sBAAsB,KAAK;AAChD,QAAM,SAAS,KAAK,OAAA,IAAW,OAAO;AACtC,SAAO,KAAK,IAAI,OAAO,QAAQ,QAAQ,eAAe;AACxD;AAWO,SAAS,MAAM,IAAY,QAAqC;AACrE,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI,QAAQ,SAAS;AACnB,aAAO,OAAO,UAAU,IAAI,aAAa,WAAW,YAAY,CAAC;AACjE;AAAA,IACF;AACA,UAAM,QAAQ,WAAW,SAAS,EAAE;AACpC,YAAQ;AAAA,MACN;AAAA,MACA,MAAM;AACJ,qBAAa,KAAK;AAClB,eAAO,OAAO,UAAU,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,MACnE;AAAA,MACA,EAAE,MAAM,KAAA;AAAA,IAAK;AAAA,EAEjB,CAAC;AACH;"}
1
+ {"version":3,"file":"retry.js","names":[],"sources":["../../src/http/retry.ts"],"sourcesContent":["/** Configuration for retry behavior on transient failures. */\nexport interface RetryOptions {\n /** Maximum number of retry attempts before giving up. */\n readonly maxRetries: number\n /** Upper bound on retry delay in milliseconds, regardless of backoff calculation. */\n readonly maxRetryDelayMs: number\n /** Base delay in milliseconds for the first retry. Doubles on each subsequent attempt. */\n readonly initialRetryDelayMs: number\n /**\n * Optional timeout for each HTTP request attempt. Defaults to 15 minutes\n * when omitted. The timer covers request dispatch, upload bodies, and\n * non-streaming response body reads. For `response.body` streams it is an\n * idle timeout that resets after each received chunk. Set to 0 to disable\n * the SDK timeout and rely only on the caller's AbortSignal.\n */\n readonly requestTimeoutMs?: number\n}\n\n/** Default retry settings: 5 retries, 1s initial delay, 64s max delay, 15 minute timeout. */\nexport const DEFAULT_RETRY_OPTIONS = {\n maxRetries: 5,\n maxRetryDelayMs: 64_000,\n initialRetryDelayMs: 1_000,\n requestTimeoutMs: 15 * 60_000,\n} satisfies Required<RetryOptions>\n\n/**\n * Computes the delay before the next retry using exponential backoff with jitter.\n * If a `Retry-After` value is provided by the server, it takes precedence over\n * the calculated backoff (still capped at {@link RetryOptions.maxRetryDelayMs}).\n *\n * @param attempt - Zero-based retry attempt index.\n * @param options - Retry configuration with delay bounds.\n * @param retryAfter - Server-provided retry delay in seconds, if any.\n *\n * @returns The delay in milliseconds before the next retry attempt.\n */\nexport function computeBackoff(\n attempt: number,\n options: RetryOptions,\n retryAfter?: number,\n): number {\n if (retryAfter !== undefined && retryAfter > 0) {\n return Math.min(retryAfter * 1000, options.maxRetryDelayMs)\n }\n const base = options.initialRetryDelayMs * 2 ** attempt\n const jitter = Math.random() * base * 0.5\n return Math.min(base + jitter, options.maxRetryDelayMs)\n}\n\n/**\n * Returns a promise that resolves after the given delay. Supports cancellation\n * via an optional AbortSignal.\n *\n * @param ms - Delay in milliseconds.\n * @param signal - Optional abort signal to cancel the sleep early.\n *\n * @returns A promise that resolves when the delay elapses or rejects if aborted.\n */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason ?? new DOMException('Aborted', 'AbortError'))\n return\n }\n const timer = setTimeout(resolve, ms)\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer)\n reject(signal.reason ?? new DOMException('Aborted', 'AbortError'))\n },\n { once: true },\n )\n })\n}\n"],"mappings":";;AAmBA,IAAa,wBAAwB;CACnC,YAAY;CACZ,iBAAiB;CACjB,qBAAqB;CACrB,kBAAkB,KAAK;AACzB;;;;;;;;;;;;AAaA,SAAgB,eACd,SACA,SACA,YACQ;CACR,IAAI,eAAe,KAAA,KAAa,aAAa,GAC3C,OAAO,KAAK,IAAI,aAAa,KAAM,QAAQ,eAAe;CAE5D,MAAM,OAAO,QAAQ,sBAAsB,KAAK;CAChD,MAAM,SAAS,KAAK,OAAO,IAAI,OAAO;CACtC,OAAO,KAAK,IAAI,OAAO,QAAQ,QAAQ,eAAe;AACxD;;;;;;;;;;AAWA,SAAgB,MAAM,IAAY,QAAqC;CACrE,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,IAAI,QAAQ,SAAS;GACnB,OAAO,OAAO,UAAU,IAAI,aAAa,WAAW,YAAY,CAAC;GACjE;EACF;EACA,MAAM,QAAQ,WAAW,SAAS,EAAE;EACpC,QAAQ,iBACN,eACM;GACJ,aAAa,KAAK;GAClB,OAAO,OAAO,UAAU,IAAI,aAAa,WAAW,YAAY,CAAC;EACnE,GACA,EAAE,MAAM,KAAK,CACf;CACF,CAAC;AACH"}