@backblaze-labs/b2-sdk 0.1.0 → 0.3.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 (885) hide show
  1. package/CHANGELOG.md +151 -5
  2. package/README.md +163 -34
  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/backup/client.cjs +206 -0
  44. package/dist/backup/client.cjs.map +1 -0
  45. package/dist/backup/client.d.cts +238 -0
  46. package/dist/backup/client.d.cts.map +1 -0
  47. package/dist/backup/client.d.ts +238 -0
  48. package/dist/backup/client.d.ts.map +1 -0
  49. package/dist/backup/client.js +206 -0
  50. package/dist/backup/client.js.map +1 -0
  51. package/dist/backup/index.cjs +15 -0
  52. package/dist/backup/index.d.cts +22 -0
  53. package/dist/backup/index.d.cts.map +1 -0
  54. package/dist/backup/index.d.ts +22 -0
  55. package/dist/backup/index.d.ts.map +1 -0
  56. package/dist/backup/index.js +7 -0
  57. package/dist/backup/raw.cjs +146 -0
  58. package/dist/backup/raw.cjs.map +1 -0
  59. package/dist/backup/raw.d.cts +122 -0
  60. package/dist/backup/raw.d.cts.map +1 -0
  61. package/dist/backup/raw.d.ts +122 -0
  62. package/dist/backup/raw.d.ts.map +1 -0
  63. package/dist/backup/raw.js +146 -0
  64. package/dist/backup/raw.js.map +1 -0
  65. package/dist/bucket.cjs +786 -787
  66. package/dist/bucket.cjs.map +1 -1
  67. package/dist/bucket.d.cts +35 -47
  68. package/dist/bucket.d.cts.map +1 -1
  69. package/dist/bucket.d.ts +35 -47
  70. package/dist/bucket.d.ts.map +1 -1
  71. package/dist/bucket.js +781 -782
  72. package/dist/bucket.js.map +1 -1
  73. package/dist/client.cjs +246 -228
  74. package/dist/client.cjs.map +1 -1
  75. package/dist/client.d.cts +25 -17
  76. package/dist/client.d.cts.map +1 -1
  77. package/dist/client.d.ts +25 -17
  78. package/dist/client.d.ts.map +1 -1
  79. package/dist/client.js +243 -225
  80. package/dist/client.js.map +1 -1
  81. package/dist/copy/large.cjs +116 -71
  82. package/dist/copy/large.cjs.map +1 -1
  83. package/dist/copy/large.d.cts +6 -0
  84. package/dist/copy/large.d.cts.map +1 -1
  85. package/dist/copy/large.d.ts +6 -0
  86. package/dist/copy/large.d.ts.map +1 -1
  87. package/dist/copy/large.js +114 -69
  88. package/dist/copy/large.js.map +1 -1
  89. package/dist/download/checksum.cjs +93 -0
  90. package/dist/download/checksum.cjs.map +1 -0
  91. package/dist/download/checksum.d.cts +40 -0
  92. package/dist/download/checksum.d.cts.map +1 -0
  93. package/dist/download/checksum.d.ts +40 -0
  94. package/dist/download/checksum.d.ts.map +1 -0
  95. package/dist/download/checksum.js +91 -0
  96. package/dist/download/checksum.js.map +1 -0
  97. package/dist/download/parallel.cjs +251 -118
  98. package/dist/download/parallel.cjs.map +1 -1
  99. package/dist/download/parallel.d.cts +13 -2
  100. package/dist/download/parallel.d.cts.map +1 -1
  101. package/dist/download/parallel.d.ts +13 -2
  102. package/dist/download/parallel.d.ts.map +1 -1
  103. package/dist/download/parallel.js +249 -116
  104. package/dist/download/parallel.js.map +1 -1
  105. package/dist/download/single.cjs +323 -97
  106. package/dist/download/single.cjs.map +1 -1
  107. package/dist/download/single.d.cts +6 -1
  108. package/dist/download/single.d.cts.map +1 -1
  109. package/dist/download/single.d.ts +6 -1
  110. package/dist/download/single.d.ts.map +1 -1
  111. package/dist/download/single.js +322 -99
  112. package/dist/download/single.js.map +1 -1
  113. package/dist/errors/index.cjs +869 -243
  114. package/dist/errors/index.cjs.map +1 -1
  115. package/dist/errors/index.d.cts +404 -82
  116. package/dist/errors/index.d.cts.map +1 -1
  117. package/dist/errors/index.d.ts +404 -82
  118. package/dist/errors/index.d.ts.map +1 -1
  119. package/dist/errors/index.js +835 -261
  120. package/dist/errors/index.js.map +1 -1
  121. package/dist/http/retry.cjs +45 -28
  122. package/dist/http/retry.cjs.map +1 -1
  123. package/dist/http/retry.d.cts +15 -2
  124. package/dist/http/retry.d.cts.map +1 -1
  125. package/dist/http/retry.d.ts +15 -2
  126. package/dist/http/retry.d.ts.map +1 -1
  127. package/dist/http/retry.js +46 -31
  128. package/dist/http/retry.js.map +1 -1
  129. package/dist/http/transport.cjs +476 -140
  130. package/dist/http/transport.cjs.map +1 -1
  131. package/dist/http/transport.d.cts +46 -5
  132. package/dist/http/transport.d.cts.map +1 -1
  133. package/dist/http/transport.d.ts +46 -5
  134. package/dist/http/transport.d.ts.map +1 -1
  135. package/dist/http/transport.js +474 -140
  136. package/dist/http/transport.js.map +1 -1
  137. package/dist/http/url-guard.cjs +154 -89
  138. package/dist/http/url-guard.cjs.map +1 -1
  139. package/dist/http/url-guard.d.cts +25 -3
  140. package/dist/http/url-guard.d.cts.map +1 -1
  141. package/dist/http/url-guard.d.ts +25 -3
  142. package/dist/http/url-guard.d.ts.map +1 -1
  143. package/dist/http/url-guard.js +152 -90
  144. package/dist/http/url-guard.js.map +1 -1
  145. package/dist/http/user-agent.cjs +84 -44
  146. package/dist/http/user-agent.cjs.map +1 -1
  147. package/dist/http/user-agent.js +84 -46
  148. package/dist/http/user-agent.js.map +1 -1
  149. package/dist/index.cjs +124 -77
  150. package/dist/index.d.cts +29 -21
  151. package/dist/index.d.cts.map +1 -1
  152. package/dist/index.d.ts +29 -21
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.js +18 -72
  155. package/dist/internal/b2-naming.cjs +66 -0
  156. package/dist/internal/b2-naming.cjs.map +1 -0
  157. package/dist/internal/b2-naming.d.cts +43 -0
  158. package/dist/internal/b2-naming.d.cts.map +1 -0
  159. package/dist/internal/b2-naming.d.ts +43 -0
  160. package/dist/internal/b2-naming.d.ts.map +1 -0
  161. package/dist/internal/b2-naming.js +60 -0
  162. package/dist/internal/b2-naming.js.map +1 -0
  163. package/dist/internal/upload-retry-options.cjs +21 -0
  164. package/dist/internal/upload-retry-options.cjs.map +1 -0
  165. package/dist/internal/upload-retry-options.d.cts +12 -0
  166. package/dist/internal/upload-retry-options.d.cts.map +1 -0
  167. package/dist/internal/upload-retry-options.d.ts +12 -0
  168. package/dist/internal/upload-retry-options.d.ts.map +1 -0
  169. package/dist/internal/upload-retry-options.js +21 -0
  170. package/dist/internal/upload-retry-options.js.map +1 -0
  171. package/dist/internal/url-redaction.cjs +31 -0
  172. package/dist/internal/url-redaction.cjs.map +1 -0
  173. package/dist/internal/url-redaction.d.cts +17 -0
  174. package/dist/internal/url-redaction.d.cts.map +1 -0
  175. package/dist/internal/url-redaction.d.ts +17 -0
  176. package/dist/internal/url-redaction.d.ts.map +1 -0
  177. package/dist/internal/url-redaction.js +31 -0
  178. package/dist/internal/url-redaction.js.map +1 -0
  179. package/dist/notifications/index.cjs +4 -6
  180. package/dist/notifications/index.d.cts +1 -1
  181. package/dist/notifications/index.d.cts.map +1 -1
  182. package/dist/notifications/index.d.ts +1 -1
  183. package/dist/notifications/index.d.ts.map +1 -1
  184. package/dist/notifications/index.js +1 -6
  185. package/dist/notifications/webhook.cjs +195 -85
  186. package/dist/notifications/webhook.cjs.map +1 -1
  187. package/dist/notifications/webhook.d.cts.map +1 -1
  188. package/dist/notifications/webhook.d.ts.map +1 -1
  189. package/dist/notifications/webhook.js +195 -87
  190. package/dist/notifications/webhook.js.map +1 -1
  191. package/dist/object.cjs +253 -210
  192. package/dist/object.cjs.map +1 -1
  193. package/dist/object.d.cts +13 -57
  194. package/dist/object.d.cts.map +1 -1
  195. package/dist/object.d.ts +13 -57
  196. package/dist/object.d.ts.map +1 -1
  197. package/dist/object.js +249 -206
  198. package/dist/object.js.map +1 -1
  199. package/dist/partner/account-info.d.cts +43 -0
  200. package/dist/partner/account-info.d.cts.map +1 -0
  201. package/dist/partner/account-info.d.ts +43 -0
  202. package/dist/partner/account-info.d.ts.map +1 -0
  203. package/dist/partner/auth-clone.cjs +64 -0
  204. package/dist/partner/auth-clone.cjs.map +1 -0
  205. package/dist/partner/auth-clone.d.cts +27 -0
  206. package/dist/partner/auth-clone.d.cts.map +1 -0
  207. package/dist/partner/auth-clone.d.ts +27 -0
  208. package/dist/partner/auth-clone.d.ts.map +1 -0
  209. package/dist/partner/auth-clone.js +63 -0
  210. package/dist/partner/auth-clone.js.map +1 -0
  211. package/dist/partner/auth-core.cjs +175 -0
  212. package/dist/partner/auth-core.cjs.map +1 -0
  213. package/dist/partner/auth-core.d.cts +111 -0
  214. package/dist/partner/auth-core.d.cts.map +1 -0
  215. package/dist/partner/auth-core.d.ts +111 -0
  216. package/dist/partner/auth-core.d.ts.map +1 -0
  217. package/dist/partner/auth-core.js +175 -0
  218. package/dist/partner/auth-core.js.map +1 -0
  219. package/dist/partner/auth-shape.cjs +36 -0
  220. package/dist/partner/auth-shape.cjs.map +1 -0
  221. package/dist/partner/auth-shape.d.cts +12 -0
  222. package/dist/partner/auth-shape.d.cts.map +1 -0
  223. package/dist/partner/auth-shape.d.ts +12 -0
  224. package/dist/partner/auth-shape.d.ts.map +1 -0
  225. package/dist/partner/auth-shape.js +36 -0
  226. package/dist/partner/auth-shape.js.map +1 -0
  227. package/dist/partner/client.cjs +255 -0
  228. package/dist/partner/client.cjs.map +1 -0
  229. package/dist/partner/client.d.cts +335 -0
  230. package/dist/partner/client.d.cts.map +1 -0
  231. package/dist/partner/client.d.ts +335 -0
  232. package/dist/partner/client.d.ts.map +1 -0
  233. package/dist/partner/client.js +255 -0
  234. package/dist/partner/client.js.map +1 -0
  235. package/dist/partner/endpoint-url.cjs +108 -0
  236. package/dist/partner/endpoint-url.cjs.map +1 -0
  237. package/dist/partner/endpoint-url.d.cts +72 -0
  238. package/dist/partner/endpoint-url.d.cts.map +1 -0
  239. package/dist/partner/endpoint-url.d.ts +72 -0
  240. package/dist/partner/endpoint-url.d.ts.map +1 -0
  241. package/dist/partner/endpoint-url.js +105 -0
  242. package/dist/partner/endpoint-url.js.map +1 -0
  243. package/dist/partner/in-memory.cjs +135 -0
  244. package/dist/partner/in-memory.cjs.map +1 -0
  245. package/dist/partner/in-memory.d.cts +99 -0
  246. package/dist/partner/in-memory.d.cts.map +1 -0
  247. package/dist/partner/in-memory.d.ts +99 -0
  248. package/dist/partner/in-memory.d.ts.map +1 -0
  249. package/dist/partner/in-memory.js +135 -0
  250. package/dist/partner/in-memory.js.map +1 -0
  251. package/dist/partner/index.cjs +18 -0
  252. package/dist/partner/index.d.cts +23 -0
  253. package/dist/partner/index.d.cts.map +1 -0
  254. package/dist/partner/index.d.ts +23 -0
  255. package/dist/partner/index.d.ts.map +1 -0
  256. package/dist/partner/index.js +7 -0
  257. package/dist/partner/raw.cjs +392 -0
  258. package/dist/partner/raw.cjs.map +1 -0
  259. package/dist/partner/raw.d.cts +223 -0
  260. package/dist/partner/raw.d.cts.map +1 -0
  261. package/dist/partner/raw.d.ts +223 -0
  262. package/dist/partner/raw.d.ts.map +1 -0
  263. package/dist/partner/raw.js +390 -0
  264. package/dist/partner/raw.js.map +1 -0
  265. package/dist/partner/redaction-placeholders.cjs +10 -0
  266. package/dist/partner/redaction-placeholders.cjs.map +1 -0
  267. package/dist/partner/redaction-placeholders.d.cts +5 -0
  268. package/dist/partner/redaction-placeholders.d.cts.map +1 -0
  269. package/dist/partner/redaction-placeholders.d.ts +5 -0
  270. package/dist/partner/redaction-placeholders.d.ts.map +1 -0
  271. package/dist/partner/redaction-placeholders.js +9 -0
  272. package/dist/partner/redaction-placeholders.js.map +1 -0
  273. package/dist/partner/redaction.cjs +267 -0
  274. package/dist/partner/redaction.cjs.map +1 -0
  275. package/dist/partner/redaction.d.cts +124 -0
  276. package/dist/partner/redaction.d.cts.map +1 -0
  277. package/dist/partner/redaction.d.ts +124 -0
  278. package/dist/partner/redaction.d.ts.map +1 -0
  279. package/dist/partner/redaction.js +257 -0
  280. package/dist/partner/redaction.js.map +1 -0
  281. package/dist/raw/encoding.cjs +74 -35
  282. package/dist/raw/encoding.cjs.map +1 -1
  283. package/dist/raw/encoding.js +74 -38
  284. package/dist/raw/encoding.js.map +1 -1
  285. package/dist/raw/index.cjs +740 -587
  286. package/dist/raw/index.cjs.map +1 -1
  287. package/dist/raw/index.d.cts +126 -19
  288. package/dist/raw/index.d.cts.map +1 -1
  289. package/dist/raw/index.d.ts +126 -19
  290. package/dist/raw/index.d.ts.map +1 -1
  291. package/dist/raw/index.js +736 -589
  292. package/dist/raw/index.js.map +1 -1
  293. package/dist/raw/url.cjs +111 -0
  294. package/dist/raw/url.cjs.map +1 -0
  295. package/dist/raw/url.d.cts +41 -0
  296. package/dist/raw/url.d.cts.map +1 -0
  297. package/dist/raw/url.d.ts +41 -0
  298. package/dist/raw/url.d.ts.map +1 -0
  299. package/dist/raw/url.js +110 -0
  300. package/dist/raw/url.js.map +1 -0
  301. package/dist/s3/index.cjs +355 -18
  302. package/dist/s3/index.cjs.map +1 -1
  303. package/dist/s3/index.d.cts +233 -5
  304. package/dist/s3/index.d.cts.map +1 -1
  305. package/dist/s3/index.d.ts +233 -5
  306. package/dist/s3/index.d.ts.map +1 -1
  307. package/dist/s3/index.js +351 -22
  308. package/dist/s3/index.js.map +1 -1
  309. package/dist/s3/sigv4.cjs +154 -0
  310. package/dist/s3/sigv4.cjs.map +1 -0
  311. package/dist/s3/sigv4.d.cts +43 -0
  312. package/dist/s3/sigv4.d.cts.map +1 -0
  313. package/dist/s3/sigv4.d.ts +43 -0
  314. package/dist/s3/sigv4.d.ts.map +1 -0
  315. package/dist/s3/sigv4.js +153 -0
  316. package/dist/s3/sigv4.js.map +1 -0
  317. package/dist/s3/validation.cjs +69 -0
  318. package/dist/s3/validation.cjs.map +1 -0
  319. package/dist/s3/validation.d.cts +43 -0
  320. package/dist/s3/validation.d.cts.map +1 -0
  321. package/dist/s3/validation.d.ts +43 -0
  322. package/dist/s3/validation.d.ts.map +1 -0
  323. package/dist/s3/validation.js +66 -0
  324. package/dist/s3/validation.js.map +1 -0
  325. package/dist/simulator/capabilities.cjs +63 -48
  326. package/dist/simulator/capabilities.cjs.map +1 -1
  327. package/dist/simulator/capabilities.js +63 -49
  328. package/dist/simulator/capabilities.js.map +1 -1
  329. package/dist/simulator/index.cjs +3114 -1547
  330. package/dist/simulator/index.cjs.map +1 -1
  331. package/dist/simulator/index.d.cts +186 -20
  332. package/dist/simulator/index.d.cts.map +1 -1
  333. package/dist/simulator/index.d.ts +186 -20
  334. package/dist/simulator/index.d.ts.map +1 -1
  335. package/dist/simulator/index.js +3098 -1545
  336. package/dist/simulator/index.js.map +1 -1
  337. package/dist/simulator/partner.cjs +719 -0
  338. package/dist/simulator/partner.cjs.map +1 -0
  339. package/dist/simulator/partner.d.cts +183 -0
  340. package/dist/simulator/partner.d.cts.map +1 -0
  341. package/dist/simulator/partner.d.ts +183 -0
  342. package/dist/simulator/partner.d.ts.map +1 -0
  343. package/dist/simulator/partner.js +718 -0
  344. package/dist/simulator/partner.js.map +1 -0
  345. package/dist/simulator/validation.cjs +772 -157
  346. package/dist/simulator/validation.cjs.map +1 -1
  347. package/dist/simulator/validation.d.cts +120 -21
  348. package/dist/simulator/validation.d.cts.map +1 -1
  349. package/dist/simulator/validation.d.ts +120 -21
  350. package/dist/simulator/validation.d.ts.map +1 -1
  351. package/dist/simulator/validation.js +755 -167
  352. package/dist/simulator/validation.js.map +1 -1
  353. package/dist/streams/collect.cjs +74 -24
  354. package/dist/streams/collect.cjs.map +1 -1
  355. package/dist/streams/collect.d.cts +14 -1
  356. package/dist/streams/collect.d.cts.map +1 -1
  357. package/dist/streams/collect.d.ts +14 -1
  358. package/dist/streams/collect.d.ts.map +1 -1
  359. package/dist/streams/collect.js +74 -25
  360. package/dist/streams/collect.js.map +1 -1
  361. package/dist/streams/file-source.cjs +287 -0
  362. package/dist/streams/file-source.cjs.map +1 -0
  363. package/dist/streams/file-source.d.cts +96 -0
  364. package/dist/streams/file-source.d.cts.map +1 -0
  365. package/dist/streams/file-source.d.ts +96 -0
  366. package/dist/streams/file-source.d.ts.map +1 -0
  367. package/dist/streams/file-source.js +286 -0
  368. package/dist/streams/file-source.js.map +1 -0
  369. package/dist/streams/hash.cjs +207 -115
  370. package/dist/streams/hash.cjs.map +1 -1
  371. package/dist/streams/hash.d.cts +5 -4
  372. package/dist/streams/hash.d.cts.map +1 -1
  373. package/dist/streams/hash.d.ts +5 -4
  374. package/dist/streams/hash.d.ts.map +1 -1
  375. package/dist/streams/hash.js +208 -95
  376. package/dist/streams/hash.js.map +1 -1
  377. package/dist/streams/index.cjs +12 -12
  378. package/dist/streams/index.d.cts +3 -3
  379. package/dist/streams/index.d.cts.map +1 -1
  380. package/dist/streams/index.d.ts +3 -3
  381. package/dist/streams/index.d.ts.map +1 -1
  382. package/dist/streams/index.js +3 -11
  383. package/dist/streams/progress.cjs +60 -46
  384. package/dist/streams/progress.cjs.map +1 -1
  385. package/dist/streams/progress.js +60 -46
  386. package/dist/streams/progress.js.map +1 -1
  387. package/dist/streams/source.cjs +317 -146
  388. package/dist/streams/source.cjs.map +1 -1
  389. package/dist/streams/source.d.cts +56 -18
  390. package/dist/streams/source.d.cts.map +1 -1
  391. package/dist/streams/source.d.ts +56 -18
  392. package/dist/streams/source.d.ts.map +1 -1
  393. package/dist/streams/source.js +313 -149
  394. package/dist/streams/source.js.map +1 -1
  395. package/dist/sync/actions/index.cjs +236 -184
  396. package/dist/sync/actions/index.cjs.map +1 -1
  397. package/dist/sync/actions/index.d.cts +29 -21
  398. package/dist/sync/actions/index.d.cts.map +1 -1
  399. package/dist/sync/actions/index.d.ts +29 -21
  400. package/dist/sync/actions/index.d.ts.map +1 -1
  401. package/dist/sync/actions/index.js +236 -190
  402. package/dist/sync/actions/index.js.map +1 -1
  403. package/dist/sync/b2-sha1-reader.cjs +152 -0
  404. package/dist/sync/b2-sha1-reader.cjs.map +1 -0
  405. package/dist/sync/b2-sha1-reader.d.cts +58 -0
  406. package/dist/sync/b2-sha1-reader.d.cts.map +1 -0
  407. package/dist/sync/b2-sha1-reader.d.ts +58 -0
  408. package/dist/sync/b2-sha1-reader.d.ts.map +1 -0
  409. package/dist/sync/b2-sha1-reader.js +149 -0
  410. package/dist/sync/b2-sha1-reader.js.map +1 -0
  411. package/dist/sync/download-staging.cjs +266 -0
  412. package/dist/sync/download-staging.cjs.map +1 -0
  413. package/dist/sync/download-staging.d.cts +55 -0
  414. package/dist/sync/download-staging.d.cts.map +1 -0
  415. package/dist/sync/download-staging.d.ts +55 -0
  416. package/dist/sync/download-staging.d.ts.map +1 -0
  417. package/dist/sync/download-staging.js +260 -0
  418. package/dist/sync/download-staging.js.map +1 -0
  419. package/dist/sync/filesystem-errors.cjs +32 -0
  420. package/dist/sync/filesystem-errors.cjs.map +1 -0
  421. package/dist/sync/filesystem-errors.d.cts +8 -0
  422. package/dist/sync/filesystem-errors.d.cts.map +1 -0
  423. package/dist/sync/filesystem-errors.d.ts +8 -0
  424. package/dist/sync/filesystem-errors.d.ts.map +1 -0
  425. package/dist/sync/filesystem-errors.js +32 -0
  426. package/dist/sync/filesystem-errors.js.map +1 -0
  427. package/dist/sync/filters.cjs +217 -0
  428. package/dist/sync/filters.cjs.map +1 -0
  429. package/dist/sync/filters.d.cts +51 -0
  430. package/dist/sync/filters.d.cts.map +1 -0
  431. package/dist/sync/filters.d.ts +51 -0
  432. package/dist/sync/filters.d.ts.map +1 -0
  433. package/dist/sync/filters.js +213 -0
  434. package/dist/sync/filters.js.map +1 -0
  435. package/dist/sync/index.cjs +39 -22
  436. package/dist/sync/index.d.cts +14 -9
  437. package/dist/sync/index.d.cts.map +1 -1
  438. package/dist/sync/index.d.ts +14 -9
  439. package/dist/sync/index.d.ts.map +1 -1
  440. package/dist/sync/index.js +9 -20
  441. package/dist/sync/local-file-identity.cjs +61 -0
  442. package/dist/sync/local-file-identity.cjs.map +1 -0
  443. package/dist/sync/local-file-identity.d.cts +37 -0
  444. package/dist/sync/local-file-identity.d.cts.map +1 -0
  445. package/dist/sync/local-file-identity.d.ts +37 -0
  446. package/dist/sync/local-file-identity.d.ts.map +1 -0
  447. package/dist/sync/local-file-identity.js +60 -0
  448. package/dist/sync/local-file-identity.js.map +1 -0
  449. package/dist/sync/local-file-io.cjs +369 -0
  450. package/dist/sync/local-file-io.cjs.map +1 -0
  451. package/dist/sync/local-file-io.d.cts +76 -0
  452. package/dist/sync/local-file-io.d.cts.map +1 -0
  453. package/dist/sync/local-file-io.d.ts +76 -0
  454. package/dist/sync/local-file-io.d.ts.map +1 -0
  455. package/dist/sync/local-file-io.js +365 -0
  456. package/dist/sync/local-file-io.js.map +1 -0
  457. package/dist/sync/local-filesystem-root.cjs +27 -0
  458. package/dist/sync/local-filesystem-root.cjs.map +1 -0
  459. package/dist/sync/local-filesystem-root.d.cts +18 -0
  460. package/dist/sync/local-filesystem-root.d.cts.map +1 -0
  461. package/dist/sync/local-filesystem-root.d.ts +18 -0
  462. package/dist/sync/local-filesystem-root.d.ts.map +1 -0
  463. package/dist/sync/local-filesystem-root.js +26 -0
  464. package/dist/sync/local-filesystem-root.js.map +1 -0
  465. package/dist/sync/local-sha1.cjs +110 -0
  466. package/dist/sync/local-sha1.cjs.map +1 -0
  467. package/dist/sync/local-sha1.d.cts +31 -0
  468. package/dist/sync/local-sha1.d.cts.map +1 -0
  469. package/dist/sync/local-sha1.d.ts +31 -0
  470. package/dist/sync/local-sha1.d.ts.map +1 -0
  471. package/dist/sync/local-sha1.js +109 -0
  472. package/dist/sync/local-sha1.js.map +1 -0
  473. package/dist/sync/pairing.cjs +118 -29
  474. package/dist/sync/pairing.cjs.map +1 -1
  475. package/dist/sync/pairing.d.cts +7 -2
  476. package/dist/sync/pairing.d.cts.map +1 -1
  477. package/dist/sync/pairing.d.ts +7 -2
  478. package/dist/sync/pairing.d.ts.map +1 -1
  479. package/dist/sync/pairing.js +120 -31
  480. package/dist/sync/pairing.js.map +1 -1
  481. package/dist/sync/path-order.cjs +30 -0
  482. package/dist/sync/path-order.cjs.map +1 -0
  483. package/dist/sync/path-order.d.cts +28 -0
  484. package/dist/sync/path-order.d.cts.map +1 -0
  485. package/dist/sync/path-order.d.ts +28 -0
  486. package/dist/sync/path-order.d.ts.map +1 -0
  487. package/dist/sync/path-order.js +29 -0
  488. package/dist/sync/path-order.js.map +1 -0
  489. package/dist/sync/path-safety.cjs +111 -0
  490. package/dist/sync/path-safety.cjs.map +1 -0
  491. package/dist/sync/path-safety.d.cts +78 -0
  492. package/dist/sync/path-safety.d.cts.map +1 -0
  493. package/dist/sync/path-safety.d.ts +78 -0
  494. package/dist/sync/path-safety.d.ts.map +1 -0
  495. package/dist/sync/path-safety.js +105 -0
  496. package/dist/sync/path-safety.js.map +1 -0
  497. package/dist/sync/paths.d.cts +19 -0
  498. package/dist/sync/paths.d.cts.map +1 -0
  499. package/dist/sync/paths.d.ts +19 -0
  500. package/dist/sync/paths.d.ts.map +1 -0
  501. package/dist/sync/policies/compare.cjs +391 -11
  502. package/dist/sync/policies/compare.cjs.map +1 -1
  503. package/dist/sync/policies/compare.d.cts +100 -2
  504. package/dist/sync/policies/compare.d.cts.map +1 -1
  505. package/dist/sync/policies/compare.d.ts +100 -2
  506. package/dist/sync/policies/compare.d.ts.map +1 -1
  507. package/dist/sync/policies/compare.js +389 -13
  508. package/dist/sync/policies/compare.js.map +1 -1
  509. package/dist/sync/policies/index.cjs +70 -65
  510. package/dist/sync/policies/index.cjs.map +1 -1
  511. package/dist/sync/policies/index.d.cts +35 -6
  512. package/dist/sync/policies/index.d.cts.map +1 -1
  513. package/dist/sync/policies/index.d.ts +35 -6
  514. package/dist/sync/policies/index.d.ts.map +1 -1
  515. package/dist/sync/policies/index.js +70 -65
  516. package/dist/sync/policies/index.js.map +1 -1
  517. package/dist/sync/prefix.cjs +96 -0
  518. package/dist/sync/prefix.cjs.map +1 -0
  519. package/dist/sync/prefix.d.cts +55 -0
  520. package/dist/sync/prefix.d.cts.map +1 -0
  521. package/dist/sync/prefix.d.ts +55 -0
  522. package/dist/sync/prefix.d.ts.map +1 -0
  523. package/dist/sync/prefix.js +92 -0
  524. package/dist/sync/prefix.js.map +1 -0
  525. package/dist/sync/regexp-safety.cjs +192 -0
  526. package/dist/sync/regexp-safety.cjs.map +1 -0
  527. package/dist/sync/regexp-safety.d.cts +29 -0
  528. package/dist/sync/regexp-safety.d.cts.map +1 -0
  529. package/dist/sync/regexp-safety.d.ts +29 -0
  530. package/dist/sync/regexp-safety.d.ts.map +1 -0
  531. package/dist/sync/regexp-safety.js +190 -0
  532. package/dist/sync/regexp-safety.js.map +1 -0
  533. package/dist/sync/scan-events.cjs +33 -0
  534. package/dist/sync/scan-events.cjs.map +1 -0
  535. package/dist/sync/scan-events.d.cts +17 -0
  536. package/dist/sync/scan-events.d.cts.map +1 -0
  537. package/dist/sync/scan-events.d.ts +17 -0
  538. package/dist/sync/scan-events.d.ts.map +1 -0
  539. package/dist/sync/scan-events.js +32 -0
  540. package/dist/sync/scan-events.js.map +1 -0
  541. package/dist/sync/scan-limit.cjs +33 -0
  542. package/dist/sync/scan-limit.cjs.map +1 -0
  543. package/dist/sync/scan-limit.d.cts +21 -0
  544. package/dist/sync/scan-limit.d.cts.map +1 -0
  545. package/dist/sync/scan-limit.d.ts +21 -0
  546. package/dist/sync/scan-limit.d.ts.map +1 -0
  547. package/dist/sync/scan-limit.js +31 -0
  548. package/dist/sync/scan-limit.js.map +1 -0
  549. package/dist/sync/scanners/b2.cjs +239 -55
  550. package/dist/sync/scanners/b2.cjs.map +1 -1
  551. package/dist/sync/scanners/b2.d.cts +26 -7
  552. package/dist/sync/scanners/b2.d.cts.map +1 -1
  553. package/dist/sync/scanners/b2.d.ts +26 -7
  554. package/dist/sync/scanners/b2.d.ts.map +1 -1
  555. package/dist/sync/scanners/b2.js +239 -55
  556. package/dist/sync/scanners/b2.js.map +1 -1
  557. package/dist/sync/scanners/local.cjs +215 -56
  558. package/dist/sync/scanners/local.cjs.map +1 -1
  559. package/dist/sync/scanners/local.d.cts +22 -7
  560. package/dist/sync/scanners/local.d.cts.map +1 -1
  561. package/dist/sync/scanners/local.d.ts +22 -7
  562. package/dist/sync/scanners/local.d.ts.map +1 -1
  563. package/dist/sync/scanners/local.js +216 -57
  564. package/dist/sync/scanners/local.js.map +1 -1
  565. package/dist/sync/sha1-metadata.cjs +94 -0
  566. package/dist/sync/sha1-metadata.cjs.map +1 -0
  567. package/dist/sync/sha1-metadata.d.cts +82 -0
  568. package/dist/sync/sha1-metadata.d.cts.map +1 -0
  569. package/dist/sync/sha1-metadata.d.ts +82 -0
  570. package/dist/sync/sha1-metadata.d.ts.map +1 -0
  571. package/dist/sync/sha1-metadata.js +89 -0
  572. package/dist/sync/sha1-metadata.js.map +1 -0
  573. package/dist/sync/sha1-options.cjs +23 -0
  574. package/dist/sync/sha1-options.cjs.map +1 -0
  575. package/dist/sync/sha1-options.d.cts +14 -0
  576. package/dist/sync/sha1-options.d.cts.map +1 -0
  577. package/dist/sync/sha1-options.d.ts +14 -0
  578. package/dist/sync/sha1-options.d.ts.map +1 -0
  579. package/dist/sync/sha1-options.js +21 -0
  580. package/dist/sync/sha1-options.js.map +1 -0
  581. package/dist/sync/synchronizer.cjs +783 -197
  582. package/dist/sync/synchronizer.cjs.map +1 -1
  583. package/dist/sync/synchronizer.d.cts +47 -1
  584. package/dist/sync/synchronizer.d.cts.map +1 -1
  585. package/dist/sync/synchronizer.d.ts +47 -1
  586. package/dist/sync/synchronizer.d.ts.map +1 -1
  587. package/dist/sync/synchronizer.js +780 -173
  588. package/dist/sync/synchronizer.js.map +1 -1
  589. package/dist/sync/types.d.cts +208 -16
  590. package/dist/sync/types.d.cts.map +1 -1
  591. package/dist/sync/types.d.ts +208 -16
  592. package/dist/sync/types.d.ts.map +1 -1
  593. package/dist/types/auth.cjs +80 -56
  594. package/dist/types/auth.cjs.map +1 -1
  595. package/dist/types/auth.d.cts +71 -9
  596. package/dist/types/auth.d.cts.map +1 -1
  597. package/dist/types/auth.d.ts +71 -9
  598. package/dist/types/auth.d.ts.map +1 -1
  599. package/dist/types/auth.js +81 -57
  600. package/dist/types/auth.js.map +1 -1
  601. package/dist/types/backup.d.cts +80 -0
  602. package/dist/types/backup.d.cts.map +1 -0
  603. package/dist/types/backup.d.ts +80 -0
  604. package/dist/types/backup.d.ts.map +1 -0
  605. package/dist/types/bucket.cjs +74 -38
  606. package/dist/types/bucket.cjs.map +1 -1
  607. package/dist/types/bucket.d.cts +4 -2
  608. package/dist/types/bucket.d.cts.map +1 -1
  609. package/dist/types/bucket.d.ts +4 -2
  610. package/dist/types/bucket.d.ts.map +1 -1
  611. package/dist/types/bucket.js +75 -41
  612. package/dist/types/bucket.js.map +1 -1
  613. package/dist/types/download.cjs +62 -0
  614. package/dist/types/download.cjs.map +1 -0
  615. package/dist/types/download.d.cts +98 -0
  616. package/dist/types/download.d.cts.map +1 -1
  617. package/dist/types/download.d.ts +98 -0
  618. package/dist/types/download.d.ts.map +1 -1
  619. package/dist/types/download.js +61 -0
  620. package/dist/types/download.js.map +1 -0
  621. package/dist/types/encryption.cjs +194 -328
  622. package/dist/types/encryption.cjs.map +1 -1
  623. package/dist/types/encryption.d.cts +48 -0
  624. package/dist/types/encryption.d.cts.map +1 -1
  625. package/dist/types/encryption.d.ts +48 -0
  626. package/dist/types/encryption.d.ts.map +1 -1
  627. package/dist/types/encryption.js +192 -311
  628. package/dist/types/encryption.js.map +1 -1
  629. package/dist/types/errors.cjs +56 -0
  630. package/dist/types/errors.cjs.map +1 -0
  631. package/dist/types/errors.d.cts +13 -4
  632. package/dist/types/errors.d.cts.map +1 -1
  633. package/dist/types/errors.d.ts +13 -4
  634. package/dist/types/errors.d.ts.map +1 -1
  635. package/dist/types/errors.js +56 -0
  636. package/dist/types/errors.js.map +1 -0
  637. package/dist/types/file.cjs +36 -19
  638. package/dist/types/file.cjs.map +1 -1
  639. package/dist/types/file.d.cts +17 -4
  640. package/dist/types/file.d.cts.map +1 -1
  641. package/dist/types/file.d.ts +17 -4
  642. package/dist/types/file.d.ts.map +1 -1
  643. package/dist/types/file.js +37 -21
  644. package/dist/types/file.js.map +1 -1
  645. package/dist/types/ids.cjs +83 -9
  646. package/dist/types/ids.cjs.map +1 -1
  647. package/dist/types/ids.d.cts +32 -0
  648. package/dist/types/ids.d.cts.map +1 -1
  649. package/dist/types/ids.d.ts +32 -0
  650. package/dist/types/ids.d.ts.map +1 -1
  651. package/dist/types/ids.js +82 -16
  652. package/dist/types/ids.js.map +1 -1
  653. package/dist/types/index.d.cts +18 -13
  654. package/dist/types/index.d.cts.map +1 -1
  655. package/dist/types/index.d.ts +18 -13
  656. package/dist/types/index.d.ts.map +1 -1
  657. package/dist/types/key.d.cts +44 -8
  658. package/dist/types/key.d.cts.map +1 -1
  659. package/dist/types/key.d.ts +44 -8
  660. package/dist/types/key.d.ts.map +1 -1
  661. package/dist/types/lock.cjs +33 -13
  662. package/dist/types/lock.cjs.map +1 -1
  663. package/dist/types/lock.d.cts +14 -0
  664. package/dist/types/lock.d.cts.map +1 -1
  665. package/dist/types/lock.d.ts +14 -0
  666. package/dist/types/lock.d.ts.map +1 -1
  667. package/dist/types/lock.js +34 -15
  668. package/dist/types/lock.js.map +1 -1
  669. package/dist/types/notifications.cjs +44 -22
  670. package/dist/types/notifications.cjs.map +1 -1
  671. package/dist/types/notifications.d.cts +5 -3
  672. package/dist/types/notifications.d.cts.map +1 -1
  673. package/dist/types/notifications.d.ts +5 -3
  674. package/dist/types/notifications.d.ts.map +1 -1
  675. package/dist/types/notifications.js +45 -23
  676. package/dist/types/notifications.js.map +1 -1
  677. package/dist/types/partner.cjs +32 -0
  678. package/dist/types/partner.cjs.map +1 -0
  679. package/dist/types/partner.d.cts +394 -0
  680. package/dist/types/partner.d.cts.map +1 -0
  681. package/dist/types/partner.d.ts +394 -0
  682. package/dist/types/partner.d.ts.map +1 -0
  683. package/dist/types/partner.js +29 -0
  684. package/dist/types/partner.js.map +1 -0
  685. package/dist/types/upload.d.cts +53 -6
  686. package/dist/types/upload.d.cts.map +1 -1
  687. package/dist/types/upload.d.ts +53 -6
  688. package/dist/types/upload.d.ts.map +1 -1
  689. package/dist/upload/abort-scope.cjs +46 -0
  690. package/dist/upload/abort-scope.cjs.map +1 -0
  691. package/dist/upload/abort-scope.d.cts +26 -0
  692. package/dist/upload/abort-scope.d.cts.map +1 -0
  693. package/dist/upload/abort-scope.d.ts +26 -0
  694. package/dist/upload/abort-scope.d.ts.map +1 -0
  695. package/dist/upload/abort-scope.js +45 -0
  696. package/dist/upload/abort-scope.js.map +1 -0
  697. package/dist/upload/cancel.cjs +183 -8
  698. package/dist/upload/cancel.cjs.map +1 -1
  699. package/dist/upload/cancel.d.cts +110 -2
  700. package/dist/upload/cancel.d.cts.map +1 -1
  701. package/dist/upload/cancel.d.ts +110 -2
  702. package/dist/upload/cancel.d.ts.map +1 -1
  703. package/dist/upload/cancel.js +178 -9
  704. package/dist/upload/cancel.js.map +1 -1
  705. package/dist/upload/concurrency.cjs +79 -52
  706. package/dist/upload/concurrency.cjs.map +1 -1
  707. package/dist/upload/concurrency.js +79 -53
  708. package/dist/upload/concurrency.js.map +1 -1
  709. package/dist/upload/finish.cjs +54 -0
  710. package/dist/upload/finish.cjs.map +1 -0
  711. package/dist/upload/finish.d.cts +26 -0
  712. package/dist/upload/finish.d.cts.map +1 -0
  713. package/dist/upload/finish.d.ts +26 -0
  714. package/dist/upload/finish.d.ts.map +1 -0
  715. package/dist/upload/finish.js +54 -0
  716. package/dist/upload/finish.js.map +1 -0
  717. package/dist/upload/large.cjs +305 -218
  718. package/dist/upload/large.cjs.map +1 -1
  719. package/dist/upload/large.d.cts +90 -9
  720. package/dist/upload/large.d.cts.map +1 -1
  721. package/dist/upload/large.d.ts +90 -9
  722. package/dist/upload/large.d.ts.map +1 -1
  723. package/dist/upload/large.js +305 -218
  724. package/dist/upload/large.js.map +1 -1
  725. package/dist/upload/options.cjs +28 -0
  726. package/dist/upload/options.cjs.map +1 -0
  727. package/dist/upload/options.d.cts +116 -0
  728. package/dist/upload/options.d.cts.map +1 -0
  729. package/dist/upload/options.d.ts +116 -0
  730. package/dist/upload/options.d.ts.map +1 -0
  731. package/dist/upload/options.js +27 -0
  732. package/dist/upload/options.js.map +1 -0
  733. package/dist/upload/resume.cjs +334 -33
  734. package/dist/upload/resume.cjs.map +1 -1
  735. package/dist/upload/resume.d.cts +84 -12
  736. package/dist/upload/resume.d.cts.map +1 -1
  737. package/dist/upload/resume.d.ts +84 -12
  738. package/dist/upload/resume.d.ts.map +1 -1
  739. package/dist/upload/resume.js +331 -33
  740. package/dist/upload/resume.js.map +1 -1
  741. package/dist/upload/retry.cjs +191 -0
  742. package/dist/upload/retry.cjs.map +1 -0
  743. package/dist/upload/retry.d.cts +127 -0
  744. package/dist/upload/retry.d.cts.map +1 -0
  745. package/dist/upload/retry.d.ts +127 -0
  746. package/dist/upload/retry.d.ts.map +1 -0
  747. package/dist/upload/retry.js +187 -0
  748. package/dist/upload/retry.js.map +1 -0
  749. package/dist/upload/single.cjs +69 -44
  750. package/dist/upload/single.cjs.map +1 -1
  751. package/dist/upload/single.d.cts +8 -1
  752. package/dist/upload/single.d.cts.map +1 -1
  753. package/dist/upload/single.d.ts +8 -1
  754. package/dist/upload/single.d.ts.map +1 -1
  755. package/dist/upload/single.js +69 -44
  756. package/dist/upload/single.js.map +1 -1
  757. package/dist/upload/stream.cjs +319 -193
  758. package/dist/upload/stream.cjs.map +1 -1
  759. package/dist/upload/stream.d.cts +9 -1
  760. package/dist/upload/stream.d.cts.map +1 -1
  761. package/dist/upload/stream.d.ts +9 -1
  762. package/dist/upload/stream.d.ts.map +1 -1
  763. package/dist/upload/stream.js +318 -192
  764. package/dist/upload/stream.js.map +1 -1
  765. package/dist/util/abort.cjs +114 -0
  766. package/dist/util/abort.cjs.map +1 -0
  767. package/dist/util/abort.d.cts +65 -0
  768. package/dist/util/abort.d.cts.map +1 -0
  769. package/dist/util/abort.d.ts +65 -0
  770. package/dist/util/abort.d.ts.map +1 -0
  771. package/dist/util/abort.js +109 -0
  772. package/dist/util/abort.js.map +1 -0
  773. package/dist/util/best-effort.cjs +42 -8
  774. package/dist/util/best-effort.cjs.map +1 -1
  775. package/dist/util/best-effort.d.cts +2 -1
  776. package/dist/util/best-effort.d.cts.map +1 -1
  777. package/dist/util/best-effort.d.ts +2 -1
  778. package/dist/util/best-effort.d.ts.map +1 -1
  779. package/dist/util/best-effort.js +43 -9
  780. package/dist/util/best-effort.js.map +1 -1
  781. package/dist/util/bytes.cjs +23 -0
  782. package/dist/util/bytes.cjs.map +1 -0
  783. package/dist/util/bytes.d.cts +15 -0
  784. package/dist/util/bytes.d.cts.map +1 -0
  785. package/dist/util/bytes.d.ts +15 -0
  786. package/dist/util/bytes.d.ts.map +1 -0
  787. package/dist/util/bytes.js +23 -0
  788. package/dist/util/bytes.js.map +1 -0
  789. package/dist/util/crypto.cjs +68 -0
  790. package/dist/util/crypto.cjs.map +1 -0
  791. package/dist/util/crypto.d.cts +26 -0
  792. package/dist/util/crypto.d.cts.map +1 -0
  793. package/dist/util/crypto.d.ts +26 -0
  794. package/dist/util/crypto.d.ts.map +1 -0
  795. package/dist/util/crypto.js +66 -0
  796. package/dist/util/crypto.js.map +1 -0
  797. package/dist/util/defaults.cjs +28 -9
  798. package/dist/util/defaults.cjs.map +1 -1
  799. package/dist/util/defaults.d.cts +2 -0
  800. package/dist/util/defaults.d.cts.map +1 -1
  801. package/dist/util/defaults.d.ts +2 -0
  802. package/dist/util/defaults.d.ts.map +1 -1
  803. package/dist/util/defaults.js +28 -11
  804. package/dist/util/defaults.js.map +1 -1
  805. package/dist/util/error-reason.cjs +41 -0
  806. package/dist/util/error-reason.cjs.map +1 -0
  807. package/dist/util/error-reason.d.cts +9 -0
  808. package/dist/util/error-reason.d.cts.map +1 -0
  809. package/dist/util/error-reason.d.ts +9 -0
  810. package/dist/util/error-reason.d.ts.map +1 -0
  811. package/dist/util/error-reason.js +41 -0
  812. package/dist/util/error-reason.js.map +1 -0
  813. package/dist/util/http.cjs +23 -0
  814. package/dist/util/http.cjs.map +1 -0
  815. package/dist/util/http.d.cts +13 -0
  816. package/dist/util/http.d.cts.map +1 -0
  817. package/dist/util/http.d.ts +13 -0
  818. package/dist/util/http.d.ts.map +1 -0
  819. package/dist/util/http.js +23 -0
  820. package/dist/util/http.js.map +1 -0
  821. package/dist/util/md5.cjs +211 -0
  822. package/dist/util/md5.cjs.map +1 -0
  823. package/dist/util/md5.d.cts +43 -0
  824. package/dist/util/md5.d.cts.map +1 -0
  825. package/dist/util/md5.d.ts +43 -0
  826. package/dist/util/md5.d.ts.map +1 -0
  827. package/dist/util/md5.js +209 -0
  828. package/dist/util/md5.js.map +1 -0
  829. package/dist/util/normalize.cjs +66 -7
  830. package/dist/util/normalize.cjs.map +1 -1
  831. package/dist/util/normalize.d.cts +7 -7
  832. package/dist/util/normalize.d.cts.map +1 -1
  833. package/dist/util/normalize.d.ts +7 -7
  834. package/dist/util/normalize.d.ts.map +1 -1
  835. package/dist/util/normalize.js +67 -10
  836. package/dist/util/normalize.js.map +1 -1
  837. package/dist/util/paginator.cjs +69 -14
  838. package/dist/util/paginator.cjs.map +1 -1
  839. package/dist/util/paginator.d.cts +3 -1
  840. package/dist/util/paginator.d.cts.map +1 -1
  841. package/dist/util/paginator.d.ts +3 -1
  842. package/dist/util/paginator.d.ts.map +1 -1
  843. package/dist/util/paginator.js +70 -16
  844. package/dist/util/paginator.js.map +1 -1
  845. package/dist/util/plan-ranges.cjs +47 -22
  846. package/dist/util/plan-ranges.cjs.map +1 -1
  847. package/dist/util/plan-ranges.js +48 -24
  848. package/dist/util/plan-ranges.js.map +1 -1
  849. package/dist/util/sha1.cjs +27 -0
  850. package/dist/util/sha1.cjs.map +1 -0
  851. package/dist/util/sha1.d.cts +17 -0
  852. package/dist/util/sha1.d.cts.map +1 -0
  853. package/dist/util/sha1.d.ts +17 -0
  854. package/dist/util/sha1.d.ts.map +1 -0
  855. package/dist/util/sha1.js +26 -0
  856. package/dist/util/sha1.js.map +1 -0
  857. package/dist/util/text-codec.cjs +29 -5
  858. package/dist/util/text-codec.cjs.map +1 -1
  859. package/dist/util/text-codec.js +30 -7
  860. package/dist/util/text-codec.js.map +1 -1
  861. package/dist/util/to-error.cjs +18 -4
  862. package/dist/util/to-error.cjs.map +1 -1
  863. package/dist/util/to-error.js +19 -5
  864. package/dist/util/to-error.js.map +1 -1
  865. package/dist/version.cjs +17 -5
  866. package/dist/version.cjs.map +1 -1
  867. package/dist/version.d.cts +3 -3
  868. package/dist/version.d.ts +3 -3
  869. package/dist/version.js +19 -6
  870. package/dist/version.js.map +1 -1
  871. package/package.json +45 -20
  872. package/dist/auth/index.cjs.map +0 -1
  873. package/dist/auth/index.js.map +0 -1
  874. package/dist/index.cjs.map +0 -1
  875. package/dist/index.js.map +0 -1
  876. package/dist/notifications/index.cjs.map +0 -1
  877. package/dist/notifications/index.js.map +0 -1
  878. package/dist/package.json.cjs +0 -9
  879. package/dist/package.json.cjs.map +0 -1
  880. package/dist/package.json.js +0 -9
  881. package/dist/package.json.js.map +0 -1
  882. package/dist/streams/index.cjs.map +0 -1
  883. package/dist/streams/index.js.map +0 -1
  884. package/dist/sync/index.cjs.map +0 -1
  885. package/dist/sync/index.js.map +0 -1
@@ -1,6 +1,56 @@
1
1
  import { AccountInfo } from '../auth/account-info.js';
2
+ import { FinishLargeFileResponseBodyError } from '../errors/index.js';
2
3
  import { RawClient } from '../raw/index.js';
3
- import { LargeFileId } from '../types/ids.js';
4
+ import { BucketId, LargeFileId } from '../types/ids.js';
5
+ /** Event emitted when best-effort `b2_cancel_large_file` cleanup fails. */
6
+ export interface CancelLargeFileCleanupFailureEvent {
7
+ /** Unfinished large file that may remain orphaned. */
8
+ readonly fileId: LargeFileId;
9
+ /** Error thrown by `b2_cancel_large_file`. */
10
+ readonly error: unknown;
11
+ /** Cleanup phase that produced the observable event. */
12
+ readonly reason: 'cancel-failed';
13
+ }
14
+ /** Event emitted when cleanup is skipped because finish may have committed. */
15
+ export interface AmbiguousFinishCleanupFailureEvent {
16
+ /** Large file whose final server-side state is ambiguous. */
17
+ readonly fileId: LargeFileId;
18
+ /** Error thrown to the caller with reconciliation metadata. */
19
+ readonly error: FinishLargeFileResponseBodyError;
20
+ /** Cleanup phase that produced the observable event. */
21
+ readonly reason: 'finish-ambiguous';
22
+ }
23
+ /** Event emitted when large-file cleanup fails or is deliberately skipped. */
24
+ export type CleanupFailureEvent = CancelLargeFileCleanupFailureEvent | AmbiguousFinishCleanupFailureEvent;
25
+ /** Callback invoked when best-effort cancellation fails or finish cleanup is skipped. */
26
+ export type CleanupFailureListener = (event: CleanupFailureEvent) => void;
27
+ /** Shared option for observing large-file cleanup failures or skipped cleanup. */
28
+ export interface CleanupFailureOptions {
29
+ /**
30
+ * Callback invoked if best-effort cancellation fails, or if cancellation is
31
+ * skipped because `b2_finish_large_file` may already have committed.
32
+ */
33
+ readonly onCleanupFailure?: CleanupFailureListener;
34
+ }
35
+ /** Default wall-clock bound for best-effort cleanup calls after upload failure. */
36
+ export declare const DEFAULT_CLEANUP_TIMEOUT_MS = 30000;
37
+ /** Context needed to reconcile or cancel an unfinished large file after an error. */
38
+ export interface LargeFileCleanupContext {
39
+ readonly fileId: LargeFileId;
40
+ readonly bucketId: BucketId;
41
+ readonly fileName: string;
42
+ readonly signal?: AbortSignal | undefined;
43
+ readonly onCleanupFailure?: CleanupFailureListener | undefined;
44
+ }
45
+ /** Options for applying the shared large-file cleanup policy. */
46
+ export interface LargeFileCleanupPolicyOptions {
47
+ /**
48
+ * Whether non-ambiguous failures should cancel the unfinished large file.
49
+ * Defaults to true. Explicit resume callers can disable this so the SDK does
50
+ * not cancel a large file that it did not create.
51
+ */
52
+ readonly cancelOnError?: boolean;
53
+ }
4
54
  /**
5
55
  * Cancels an unfinished large file on a best-effort basis. Used at every
6
56
  * error-handling boundary in the multipart upload, write-stream, and
@@ -15,9 +65,67 @@ import { LargeFileId } from '../types/ids.js';
15
65
  * @param raw - Low-level B2 API client.
16
66
  * @param accountInfo - Authorized account state for the API URL + token.
17
67
  * @param fileId - The in-progress large file ID to cancel.
68
+ * @param options - Optional request controls and cleanup-failure observer.
18
69
  *
19
70
  * @returns A promise that always resolves, regardless of the cancel
20
71
  * call's outcome.
21
72
  */
22
- export declare function cancelLargeFileBestEffort(raw: RawClient, accountInfo: AccountInfo, fileId: LargeFileId): Promise<void>;
73
+ export declare function cancelLargeFileBestEffort(raw: RawClient, accountInfo: AccountInfo, fileId: LargeFileId, options?: {
74
+ readonly signal?: AbortSignal;
75
+ } & CleanupFailureOptions): Promise<void>;
76
+ /**
77
+ * Returns cleanup request controls with a live timeout signal.
78
+ *
79
+ * @param signal - Caller-provided abort signal, if any.
80
+ * @param timeoutMs - Maximum time to spend waiting for cleanup.
81
+ *
82
+ * @returns Request controls with a signal independent of an already-aborted caller signal.
83
+ */
84
+ export declare function cleanupRequestOptions(signal: AbortSignal | undefined, timeoutMs?: number): {
85
+ readonly signal: AbortSignal;
86
+ };
87
+ /**
88
+ * Emits an observable cleanup event when cancellation is deliberately skipped
89
+ * because `b2_finish_large_file` may already have committed the file.
90
+ * @param fileId - Large file whose final state is ambiguous.
91
+ * @param error - Ambiguous finish error that will be thrown to the caller.
92
+ * @param onCleanupFailure - Optional observer for cleanup-related events.
93
+ */
94
+ export declare function notifyAmbiguousLargeFileCleanupSkipped(fileId: LargeFileId, error: FinishLargeFileResponseBodyError, onCleanupFailure?: CleanupFailureListener): void;
95
+ /**
96
+ * Adds high-level reconciliation metadata to an ambiguous finish response-body
97
+ * error and notifies the cleanup observer that cancellation was skipped.
98
+ *
99
+ * @param err - Raw finish response-body error from the low-level client.
100
+ * @param options - Large-file context used for reconciliation.
101
+ *
102
+ * @returns The enriched {@link FinishLargeFileResponseBodyError}.
103
+ */
104
+ export declare function handleAmbiguousFinishLargeFileResponseBodyError(err: FinishLargeFileResponseBodyError, options: LargeFileCleanupContext): FinishLargeFileResponseBodyError;
105
+ /**
106
+ * Performs the shared large-file failure policy: ambiguous finish-body errors
107
+ * are enriched and left uncancelled, while all pre-finish errors trigger
108
+ * best-effort cancellation.
109
+ *
110
+ * @param err - Error from a multipart upload/copy/write-stream path.
111
+ * @param raw - Low-level B2 API client.
112
+ * @param accountInfo - Authorized account state.
113
+ * @param context - Large file metadata used for cleanup and diagnostics.
114
+ * @param options - Cleanup policy controls.
115
+ *
116
+ * @returns The error that should be surfaced to the caller.
117
+ */
118
+ export declare function resolveLargeFileErrorAfterCleanup(err: unknown, raw: RawClient, accountInfo: AccountInfo, context: LargeFileCleanupContext, options?: LargeFileCleanupPolicyOptions): Promise<unknown>;
119
+ /**
120
+ * Throwing wrapper around {@link resolveLargeFileErrorAfterCleanup} for paths
121
+ * that can surface the error directly.
122
+ * @param err - Error from a multipart upload/copy/write-stream path.
123
+ * @param raw - Low-level B2 API client.
124
+ * @param accountInfo - Authorized account state.
125
+ * @param context - Large file metadata used for cleanup and diagnostics.
126
+ * @param options - Cleanup policy controls.
127
+ *
128
+ * @throws The resolved large-file error after cleanup policy is applied.
129
+ */
130
+ export declare function cleanupAfterLargeFileError(err: unknown, raw: RawClient, accountInfo: AccountInfo, context: LargeFileCleanupContext, options?: LargeFileCleanupPolicyOptions): Promise<never>;
23
131
  //# sourceMappingURL=cancel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/upload/cancel.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAGlD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf"}
1
+ {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/upload/cancel.js"],"names":[],"mappings":"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"}
@@ -1,6 +1,56 @@
1
1
  import { AccountInfo } from '../auth/account-info.js';
2
+ import { FinishLargeFileResponseBodyError } from '../errors/index.js';
2
3
  import { RawClient } from '../raw/index.js';
3
- import { LargeFileId } from '../types/ids.js';
4
+ import { BucketId, LargeFileId } from '../types/ids.js';
5
+ /** Event emitted when best-effort `b2_cancel_large_file` cleanup fails. */
6
+ export interface CancelLargeFileCleanupFailureEvent {
7
+ /** Unfinished large file that may remain orphaned. */
8
+ readonly fileId: LargeFileId;
9
+ /** Error thrown by `b2_cancel_large_file`. */
10
+ readonly error: unknown;
11
+ /** Cleanup phase that produced the observable event. */
12
+ readonly reason: 'cancel-failed';
13
+ }
14
+ /** Event emitted when cleanup is skipped because finish may have committed. */
15
+ export interface AmbiguousFinishCleanupFailureEvent {
16
+ /** Large file whose final server-side state is ambiguous. */
17
+ readonly fileId: LargeFileId;
18
+ /** Error thrown to the caller with reconciliation metadata. */
19
+ readonly error: FinishLargeFileResponseBodyError;
20
+ /** Cleanup phase that produced the observable event. */
21
+ readonly reason: 'finish-ambiguous';
22
+ }
23
+ /** Event emitted when large-file cleanup fails or is deliberately skipped. */
24
+ export type CleanupFailureEvent = CancelLargeFileCleanupFailureEvent | AmbiguousFinishCleanupFailureEvent;
25
+ /** Callback invoked when best-effort cancellation fails or finish cleanup is skipped. */
26
+ export type CleanupFailureListener = (event: CleanupFailureEvent) => void;
27
+ /** Shared option for observing large-file cleanup failures or skipped cleanup. */
28
+ export interface CleanupFailureOptions {
29
+ /**
30
+ * Callback invoked if best-effort cancellation fails, or if cancellation is
31
+ * skipped because `b2_finish_large_file` may already have committed.
32
+ */
33
+ readonly onCleanupFailure?: CleanupFailureListener;
34
+ }
35
+ /** Default wall-clock bound for best-effort cleanup calls after upload failure. */
36
+ export declare const DEFAULT_CLEANUP_TIMEOUT_MS = 30000;
37
+ /** Context needed to reconcile or cancel an unfinished large file after an error. */
38
+ export interface LargeFileCleanupContext {
39
+ readonly fileId: LargeFileId;
40
+ readonly bucketId: BucketId;
41
+ readonly fileName: string;
42
+ readonly signal?: AbortSignal | undefined;
43
+ readonly onCleanupFailure?: CleanupFailureListener | undefined;
44
+ }
45
+ /** Options for applying the shared large-file cleanup policy. */
46
+ export interface LargeFileCleanupPolicyOptions {
47
+ /**
48
+ * Whether non-ambiguous failures should cancel the unfinished large file.
49
+ * Defaults to true. Explicit resume callers can disable this so the SDK does
50
+ * not cancel a large file that it did not create.
51
+ */
52
+ readonly cancelOnError?: boolean;
53
+ }
4
54
  /**
5
55
  * Cancels an unfinished large file on a best-effort basis. Used at every
6
56
  * error-handling boundary in the multipart upload, write-stream, and
@@ -15,9 +65,67 @@ import { LargeFileId } from '../types/ids.js';
15
65
  * @param raw - Low-level B2 API client.
16
66
  * @param accountInfo - Authorized account state for the API URL + token.
17
67
  * @param fileId - The in-progress large file ID to cancel.
68
+ * @param options - Optional request controls and cleanup-failure observer.
18
69
  *
19
70
  * @returns A promise that always resolves, regardless of the cancel
20
71
  * call's outcome.
21
72
  */
22
- export declare function cancelLargeFileBestEffort(raw: RawClient, accountInfo: AccountInfo, fileId: LargeFileId): Promise<void>;
73
+ export declare function cancelLargeFileBestEffort(raw: RawClient, accountInfo: AccountInfo, fileId: LargeFileId, options?: {
74
+ readonly signal?: AbortSignal;
75
+ } & CleanupFailureOptions): Promise<void>;
76
+ /**
77
+ * Returns cleanup request controls with a live timeout signal.
78
+ *
79
+ * @param signal - Caller-provided abort signal, if any.
80
+ * @param timeoutMs - Maximum time to spend waiting for cleanup.
81
+ *
82
+ * @returns Request controls with a signal independent of an already-aborted caller signal.
83
+ */
84
+ export declare function cleanupRequestOptions(signal: AbortSignal | undefined, timeoutMs?: number): {
85
+ readonly signal: AbortSignal;
86
+ };
87
+ /**
88
+ * Emits an observable cleanup event when cancellation is deliberately skipped
89
+ * because `b2_finish_large_file` may already have committed the file.
90
+ * @param fileId - Large file whose final state is ambiguous.
91
+ * @param error - Ambiguous finish error that will be thrown to the caller.
92
+ * @param onCleanupFailure - Optional observer for cleanup-related events.
93
+ */
94
+ export declare function notifyAmbiguousLargeFileCleanupSkipped(fileId: LargeFileId, error: FinishLargeFileResponseBodyError, onCleanupFailure?: CleanupFailureListener): void;
95
+ /**
96
+ * Adds high-level reconciliation metadata to an ambiguous finish response-body
97
+ * error and notifies the cleanup observer that cancellation was skipped.
98
+ *
99
+ * @param err - Raw finish response-body error from the low-level client.
100
+ * @param options - Large-file context used for reconciliation.
101
+ *
102
+ * @returns The enriched {@link FinishLargeFileResponseBodyError}.
103
+ */
104
+ export declare function handleAmbiguousFinishLargeFileResponseBodyError(err: FinishLargeFileResponseBodyError, options: LargeFileCleanupContext): FinishLargeFileResponseBodyError;
105
+ /**
106
+ * Performs the shared large-file failure policy: ambiguous finish-body errors
107
+ * are enriched and left uncancelled, while all pre-finish errors trigger
108
+ * best-effort cancellation.
109
+ *
110
+ * @param err - Error from a multipart upload/copy/write-stream path.
111
+ * @param raw - Low-level B2 API client.
112
+ * @param accountInfo - Authorized account state.
113
+ * @param context - Large file metadata used for cleanup and diagnostics.
114
+ * @param options - Cleanup policy controls.
115
+ *
116
+ * @returns The error that should be surfaced to the caller.
117
+ */
118
+ export declare function resolveLargeFileErrorAfterCleanup(err: unknown, raw: RawClient, accountInfo: AccountInfo, context: LargeFileCleanupContext, options?: LargeFileCleanupPolicyOptions): Promise<unknown>;
119
+ /**
120
+ * Throwing wrapper around {@link resolveLargeFileErrorAfterCleanup} for paths
121
+ * that can surface the error directly.
122
+ * @param err - Error from a multipart upload/copy/write-stream path.
123
+ * @param raw - Low-level B2 API client.
124
+ * @param accountInfo - Authorized account state.
125
+ * @param context - Large file metadata used for cleanup and diagnostics.
126
+ * @param options - Cleanup policy controls.
127
+ *
128
+ * @throws The resolved large-file error after cleanup policy is applied.
129
+ */
130
+ export declare function cleanupAfterLargeFileError(err: unknown, raw: RawClient, accountInfo: AccountInfo, context: LargeFileCleanupContext, options?: LargeFileCleanupPolicyOptions): Promise<never>;
23
131
  //# sourceMappingURL=cancel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/upload/cancel.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAGlD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf"}
1
+ {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/upload/cancel.js"],"names":[],"mappings":"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"}
@@ -1,10 +1,179 @@
1
+ import { FinishLargeFileResponseBodyError } from "../errors/index.js";
1
2
  import { bestEffort } from "../util/best-effort.js";
2
- async function cancelLargeFileBestEffort(raw, accountInfo, fileId) {
3
- await bestEffort(
4
- () => raw.cancelLargeFile(accountInfo.getApiUrl(), accountInfo.getAuthToken(), { fileId })
5
- );
6
- }
7
- export {
8
- cancelLargeFileBestEffort
9
- };
10
- //# sourceMappingURL=cancel.js.map
3
+ //#region src/upload/cancel.ts
4
+ /** Default wall-clock bound for best-effort cleanup calls after upload failure. */
5
+ var DEFAULT_CLEANUP_TIMEOUT_MS = 3e4;
6
+ var fallbackCleanupDisposers = /* @__PURE__ */ new WeakMap();
7
+ /**
8
+ * Cancels an unfinished large file on a best-effort basis. Used at every
9
+ * error-handling boundary in the multipart upload, write-stream, and
10
+ * server-side copy paths to roll back in-progress uploads without
11
+ * letting a cancellation failure mask the underlying error the caller
12
+ * is about to see.
13
+ *
14
+ * Centralising the call removes a five-line `bestEffort` block that
15
+ * recurred at six sites with identical shape — the only thing that
16
+ * changed was the captured `fileId` and the surrounding error trail.
17
+ *
18
+ * @param raw - Low-level B2 API client.
19
+ * @param accountInfo - Authorized account state for the API URL + token.
20
+ * @param fileId - The in-progress large file ID to cancel.
21
+ * @param options - Optional request controls and cleanup-failure observer.
22
+ *
23
+ * @returns A promise that always resolves, regardless of the cancel
24
+ * call's outcome.
25
+ */
26
+ async function cancelLargeFileBestEffort(raw, accountInfo, fileId, options) {
27
+ await bestEffort(async () => {
28
+ const requestOptions = cleanupRequestOptions(options?.signal);
29
+ await waitForCleanup(raw.cancelLargeFile(accountInfo.getApiUrl(), accountInfo.getAuthToken(), { fileId }, requestOptions), requestOptions.signal);
30
+ }, (error) => options?.onCleanupFailure?.({
31
+ fileId,
32
+ error,
33
+ reason: "cancel-failed"
34
+ }));
35
+ }
36
+ /**
37
+ * Returns cleanup request controls with a live timeout signal.
38
+ *
39
+ * @param signal - Caller-provided abort signal, if any.
40
+ * @param timeoutMs - Maximum time to spend waiting for cleanup.
41
+ *
42
+ * @returns Request controls with a signal independent of an already-aborted caller signal.
43
+ */
44
+ function cleanupRequestOptions(signal, timeoutMs = DEFAULT_CLEANUP_TIMEOUT_MS) {
45
+ return { signal: createCleanupSignal(signal, timeoutMs) };
46
+ }
47
+ function createCleanupSignal(signal, timeoutMs) {
48
+ if (typeof AbortSignal.timeout === "function") {
49
+ if (signal === void 0 || signal.aborted) return AbortSignal.timeout(timeoutMs);
50
+ if (typeof AbortSignal.any === "function") return AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)]);
51
+ }
52
+ return createFallbackCleanupSignal(signal, timeoutMs);
53
+ }
54
+ function createFallbackCleanupSignal(signal, timeoutMs) {
55
+ const controller = new AbortController();
56
+ const timeout = setTimeout(() => {
57
+ abortFallbackCleanup(controller, cleanupTimeoutReason(), cleanup);
58
+ }, timeoutMs);
59
+ const onAbort = () => {
60
+ const reason = signal === void 0 ? cleanupDomException("Cleanup aborted", "AbortError") : cleanupAbortReason(signal);
61
+ abortFallbackCleanup(controller, reason, cleanup);
62
+ };
63
+ const cleanup = () => {
64
+ clearTimeout(timeout);
65
+ signal?.removeEventListener("abort", onAbort);
66
+ fallbackCleanupDisposers.delete(controller.signal);
67
+ };
68
+ fallbackCleanupDisposers.set(controller.signal, cleanup);
69
+ if (signal === void 0 || signal.aborted) return controller.signal;
70
+ signal.addEventListener("abort", onAbort, { once: true });
71
+ controller.signal.addEventListener("abort", cleanup, { once: true });
72
+ return controller.signal;
73
+ }
74
+ function abortFallbackCleanup(controller, reason, cleanup) {
75
+ if (!controller.signal.aborted) controller.abort(reason);
76
+ cleanup();
77
+ }
78
+ async function waitForCleanup(request, signal) {
79
+ if (signal.aborted) throw cleanupAbortReason(signal);
80
+ let removeAbortListener;
81
+ const aborted = new Promise((_resolve, reject) => {
82
+ const onAbort = () => reject(cleanupAbortReason(signal));
83
+ signal.addEventListener("abort", onAbort, { once: true });
84
+ removeAbortListener = () => signal.removeEventListener("abort", onAbort);
85
+ });
86
+ try {
87
+ await Promise.race([request, aborted]);
88
+ } finally {
89
+ removeAbortListener?.();
90
+ fallbackCleanupDisposers.get(signal)?.();
91
+ request.catch(() => {});
92
+ }
93
+ }
94
+ function cleanupAbortReason(signal) {
95
+ return signal.reason ?? cleanupDomException("Cleanup aborted", "AbortError");
96
+ }
97
+ function cleanupTimeoutReason() {
98
+ return cleanupDomException("Cleanup timed out", "TimeoutError");
99
+ }
100
+ function cleanupDomException(message, name) {
101
+ if (typeof DOMException === "function") return new DOMException(message, name);
102
+ const error = new Error(message);
103
+ error.name = name;
104
+ return error;
105
+ }
106
+ /**
107
+ * Emits an observable cleanup event when cancellation is deliberately skipped
108
+ * because `b2_finish_large_file` may already have committed the file.
109
+ * @param fileId - Large file whose final state is ambiguous.
110
+ * @param error - Ambiguous finish error that will be thrown to the caller.
111
+ * @param onCleanupFailure - Optional observer for cleanup-related events.
112
+ */
113
+ function notifyAmbiguousLargeFileCleanupSkipped(fileId, error, onCleanupFailure) {
114
+ try {
115
+ onCleanupFailure?.({
116
+ fileId,
117
+ error,
118
+ reason: "finish-ambiguous"
119
+ });
120
+ } catch {}
121
+ }
122
+ /**
123
+ * Adds high-level reconciliation metadata to an ambiguous finish response-body
124
+ * error and notifies the cleanup observer that cancellation was skipped.
125
+ *
126
+ * @param err - Raw finish response-body error from the low-level client.
127
+ * @param options - Large-file context used for reconciliation.
128
+ *
129
+ * @returns The enriched {@link FinishLargeFileResponseBodyError}.
130
+ */
131
+ function handleAmbiguousFinishLargeFileResponseBodyError(err, options) {
132
+ const enriched = err.fileId === options.fileId && err.bucketId === options.bucketId && err.fileName === options.fileName ? err : new FinishLargeFileResponseBodyError(err.message, {
133
+ cause: err.cause ?? err,
134
+ fileId: options.fileId,
135
+ bucketId: options.bucketId,
136
+ fileName: options.fileName
137
+ });
138
+ notifyAmbiguousLargeFileCleanupSkipped(options.fileId, enriched, options.onCleanupFailure);
139
+ return enriched;
140
+ }
141
+ /**
142
+ * Performs the shared large-file failure policy: ambiguous finish-body errors
143
+ * are enriched and left uncancelled, while all pre-finish errors trigger
144
+ * best-effort cancellation.
145
+ *
146
+ * @param err - Error from a multipart upload/copy/write-stream path.
147
+ * @param raw - Low-level B2 API client.
148
+ * @param accountInfo - Authorized account state.
149
+ * @param context - Large file metadata used for cleanup and diagnostics.
150
+ * @param options - Cleanup policy controls.
151
+ *
152
+ * @returns The error that should be surfaced to the caller.
153
+ */
154
+ async function resolveLargeFileErrorAfterCleanup(err, raw, accountInfo, context, options = {}) {
155
+ if (err instanceof FinishLargeFileResponseBodyError) return handleAmbiguousFinishLargeFileResponseBodyError(err, context);
156
+ if (options.cancelOnError ?? true) await cancelLargeFileBestEffort(raw, accountInfo, context.fileId, {
157
+ ...context.signal !== void 0 ? { signal: context.signal } : {},
158
+ ...context.onCleanupFailure !== void 0 ? { onCleanupFailure: context.onCleanupFailure } : {}
159
+ });
160
+ return err;
161
+ }
162
+ /**
163
+ * Throwing wrapper around {@link resolveLargeFileErrorAfterCleanup} for paths
164
+ * that can surface the error directly.
165
+ * @param err - Error from a multipart upload/copy/write-stream path.
166
+ * @param raw - Low-level B2 API client.
167
+ * @param accountInfo - Authorized account state.
168
+ * @param context - Large file metadata used for cleanup and diagnostics.
169
+ * @param options - Cleanup policy controls.
170
+ *
171
+ * @throws The resolved large-file error after cleanup policy is applied.
172
+ */
173
+ async function cleanupAfterLargeFileError(err, raw, accountInfo, context, options) {
174
+ throw await resolveLargeFileErrorAfterCleanup(err, raw, accountInfo, context, options);
175
+ }
176
+ //#endregion
177
+ export { DEFAULT_CLEANUP_TIMEOUT_MS, cancelLargeFileBestEffort, cleanupAfterLargeFileError, cleanupRequestOptions, handleAmbiguousFinishLargeFileResponseBodyError, notifyAmbiguousLargeFileCleanupSkipped, resolveLargeFileErrorAfterCleanup };
178
+
179
+ //# sourceMappingURL=cancel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cancel.js","sources":["../../src/upload/cancel.ts"],"sourcesContent":["import type { AccountInfo } from '../auth/account-info.ts'\nimport type { RawClient } from '../raw/index.ts'\nimport type { LargeFileId } from '../types/ids.ts'\nimport { bestEffort } from '../util/best-effort.ts'\n\n/**\n * Cancels an unfinished large file on a best-effort basis. Used at every\n * error-handling boundary in the multipart upload, write-stream, and\n * server-side copy paths to roll back in-progress uploads without\n * letting a cancellation failure mask the underlying error the caller\n * is about to see.\n *\n * Centralising the call removes a five-line `bestEffort` block that\n * recurred at six sites with identical shape — the only thing that\n * changed was the captured `fileId` and the surrounding error trail.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state for the API URL + token.\n * @param fileId - The in-progress large file ID to cancel.\n *\n * @returns A promise that always resolves, regardless of the cancel\n * call's outcome.\n */\nexport async function cancelLargeFileBestEffort(\n raw: RawClient,\n accountInfo: AccountInfo,\n fileId: LargeFileId,\n): Promise<void> {\n await bestEffort(() =>\n raw.cancelLargeFile(accountInfo.getApiUrl(), accountInfo.getAuthToken(), { fileId }),\n )\n}\n"],"names":[],"mappings":";AAuBA,eAAsB,0BACpB,KACA,aACA,QACe;AACf,QAAM;AAAA,IAAW,MACf,IAAI,gBAAgB,YAAY,UAAA,GAAa,YAAY,gBAAgB,EAAE,OAAA,CAAQ;AAAA,EAAA;AAEvF;"}
1
+ {"version":3,"file":"cancel.js","names":[],"sources":["../../src/upload/cancel.ts"],"sourcesContent":["import type { AccountInfo } from '../auth/account-info.ts'\nimport { FinishLargeFileResponseBodyError } from '../errors/index.ts'\nimport type { RawClient } from '../raw/index.ts'\nimport type { BucketId, LargeFileId } from '../types/ids.ts'\nimport { bestEffort } from '../util/best-effort.ts'\n\n/** Event emitted when best-effort `b2_cancel_large_file` cleanup fails. */\nexport interface CancelLargeFileCleanupFailureEvent {\n /** Unfinished large file that may remain orphaned. */\n readonly fileId: LargeFileId\n /** Error thrown by `b2_cancel_large_file`. */\n readonly error: unknown\n /** Cleanup phase that produced the observable event. */\n readonly reason: 'cancel-failed'\n}\n\n/** Event emitted when cleanup is skipped because finish may have committed. */\nexport interface AmbiguousFinishCleanupFailureEvent {\n /** Large file whose final server-side state is ambiguous. */\n readonly fileId: LargeFileId\n /** Error thrown to the caller with reconciliation metadata. */\n readonly error: FinishLargeFileResponseBodyError\n /** Cleanup phase that produced the observable event. */\n readonly reason: 'finish-ambiguous'\n}\n\n/** Event emitted when large-file cleanup fails or is deliberately skipped. */\nexport type CleanupFailureEvent =\n | CancelLargeFileCleanupFailureEvent\n | AmbiguousFinishCleanupFailureEvent\n\n/** Callback invoked when best-effort cancellation fails or finish cleanup is skipped. */\nexport type CleanupFailureListener = (event: CleanupFailureEvent) => void\n\n/** Shared option for observing large-file cleanup failures or skipped cleanup. */\nexport interface CleanupFailureOptions {\n /**\n * Callback invoked if best-effort cancellation fails, or if cancellation is\n * skipped because `b2_finish_large_file` may already have committed.\n */\n readonly onCleanupFailure?: CleanupFailureListener\n}\n\n/** Default wall-clock bound for best-effort cleanup calls after upload failure. */\nexport const DEFAULT_CLEANUP_TIMEOUT_MS = 30_000\n\nconst fallbackCleanupDisposers = new WeakMap<AbortSignal, () => void>()\n\n/** Context needed to reconcile or cancel an unfinished large file after an error. */\nexport interface LargeFileCleanupContext {\n readonly fileId: LargeFileId\n readonly bucketId: BucketId\n readonly fileName: string\n readonly signal?: AbortSignal | undefined\n readonly onCleanupFailure?: CleanupFailureListener | undefined\n}\n\n/** Options for applying the shared large-file cleanup policy. */\nexport interface LargeFileCleanupPolicyOptions {\n /**\n * Whether non-ambiguous failures should cancel the unfinished large file.\n * Defaults to true. Explicit resume callers can disable this so the SDK does\n * not cancel a large file that it did not create.\n */\n readonly cancelOnError?: boolean\n}\n\n/**\n * Cancels an unfinished large file on a best-effort basis. Used at every\n * error-handling boundary in the multipart upload, write-stream, and\n * server-side copy paths to roll back in-progress uploads without\n * letting a cancellation failure mask the underlying error the caller\n * is about to see.\n *\n * Centralising the call removes a five-line `bestEffort` block that\n * recurred at six sites with identical shape — the only thing that\n * changed was the captured `fileId` and the surrounding error trail.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state for the API URL + token.\n * @param fileId - The in-progress large file ID to cancel.\n * @param options - Optional request controls and cleanup-failure observer.\n *\n * @returns A promise that always resolves, regardless of the cancel\n * call's outcome.\n */\nexport async function cancelLargeFileBestEffort(\n raw: RawClient,\n accountInfo: AccountInfo,\n fileId: LargeFileId,\n options?: { readonly signal?: AbortSignal } & CleanupFailureOptions,\n): Promise<void> {\n await bestEffort(\n async () => {\n const requestOptions = cleanupRequestOptions(options?.signal)\n const request = raw.cancelLargeFile(\n accountInfo.getApiUrl(),\n accountInfo.getAuthToken(),\n { fileId },\n requestOptions,\n )\n await waitForCleanup(request, requestOptions.signal)\n },\n (error) => options?.onCleanupFailure?.({ fileId, error, reason: 'cancel-failed' }),\n )\n}\n\n/**\n * Returns cleanup request controls with a live timeout signal.\n *\n * @param signal - Caller-provided abort signal, if any.\n * @param timeoutMs - Maximum time to spend waiting for cleanup.\n *\n * @returns Request controls with a signal independent of an already-aborted caller signal.\n */\nexport function cleanupRequestOptions(\n signal: AbortSignal | undefined,\n timeoutMs = DEFAULT_CLEANUP_TIMEOUT_MS,\n): { readonly signal: AbortSignal } {\n return { signal: createCleanupSignal(signal, timeoutMs) }\n}\n\nfunction createCleanupSignal(signal: AbortSignal | undefined, timeoutMs: number): AbortSignal {\n if (typeof AbortSignal.timeout === 'function') {\n if (signal === undefined || signal.aborted) return AbortSignal.timeout(timeoutMs)\n if (typeof AbortSignal.any === 'function') {\n return AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)])\n }\n }\n\n return createFallbackCleanupSignal(signal, timeoutMs)\n}\n\nfunction createFallbackCleanupSignal(\n signal: AbortSignal | undefined,\n timeoutMs: number,\n): AbortSignal {\n const controller = new AbortController()\n const timeout = setTimeout(() => {\n abortFallbackCleanup(controller, cleanupTimeoutReason(), cleanup)\n }, timeoutMs)\n\n const onAbort = () => {\n const reason =\n signal === undefined\n ? cleanupDomException('Cleanup aborted', 'AbortError')\n : cleanupAbortReason(signal)\n abortFallbackCleanup(controller, reason, cleanup)\n }\n const cleanup = () => {\n clearTimeout(timeout)\n signal?.removeEventListener('abort', onAbort)\n fallbackCleanupDisposers.delete(controller.signal)\n }\n fallbackCleanupDisposers.set(controller.signal, cleanup)\n\n if (signal === undefined || signal.aborted) {\n return controller.signal\n }\n\n signal.addEventListener('abort', onAbort, { once: true })\n controller.signal.addEventListener('abort', cleanup, { once: true })\n return controller.signal\n}\n\nfunction abortFallbackCleanup(\n controller: AbortController,\n reason: unknown,\n cleanup: () => void,\n): void {\n if (!controller.signal.aborted) controller.abort(reason)\n cleanup()\n}\n\nasync function waitForCleanup(request: Promise<unknown>, signal: AbortSignal): Promise<void> {\n if (signal.aborted) throw cleanupAbortReason(signal)\n\n let removeAbortListener: (() => void) | undefined\n const aborted = new Promise<never>((_resolve, reject) => {\n const onAbort = () => reject(cleanupAbortReason(signal))\n signal.addEventListener('abort', onAbort, { once: true })\n removeAbortListener = () => signal.removeEventListener('abort', onAbort)\n })\n\n try {\n await Promise.race([request, aborted])\n } finally {\n removeAbortListener?.()\n fallbackCleanupDisposers.get(signal)?.()\n void request.catch(() => {})\n }\n}\n\nfunction cleanupAbortReason(signal: AbortSignal): unknown {\n return signal.reason ?? cleanupDomException('Cleanup aborted', 'AbortError')\n}\n\nfunction cleanupTimeoutReason(): unknown {\n return cleanupDomException('Cleanup timed out', 'TimeoutError')\n}\n\nfunction cleanupDomException(message: string, name: string): Error {\n if (typeof DOMException === 'function') return new DOMException(message, name)\n const error = new Error(message)\n error.name = name\n return error\n}\n\n/**\n * Emits an observable cleanup event when cancellation is deliberately skipped\n * because `b2_finish_large_file` may already have committed the file.\n * @param fileId - Large file whose final state is ambiguous.\n * @param error - Ambiguous finish error that will be thrown to the caller.\n * @param onCleanupFailure - Optional observer for cleanup-related events.\n */\nexport function notifyAmbiguousLargeFileCleanupSkipped(\n fileId: LargeFileId,\n error: FinishLargeFileResponseBodyError,\n onCleanupFailure?: CleanupFailureListener,\n): void {\n try {\n onCleanupFailure?.({ fileId, error, reason: 'finish-ambiguous' })\n } catch {\n // Observer failures are secondary and must not hide the finish ambiguity.\n }\n}\n\n/**\n * Adds high-level reconciliation metadata to an ambiguous finish response-body\n * error and notifies the cleanup observer that cancellation was skipped.\n *\n * @param err - Raw finish response-body error from the low-level client.\n * @param options - Large-file context used for reconciliation.\n *\n * @returns The enriched {@link FinishLargeFileResponseBodyError}.\n */\nexport function handleAmbiguousFinishLargeFileResponseBodyError(\n err: FinishLargeFileResponseBodyError,\n options: LargeFileCleanupContext,\n): FinishLargeFileResponseBodyError {\n const enriched =\n err.fileId === options.fileId &&\n err.bucketId === options.bucketId &&\n err.fileName === options.fileName\n ? err\n : new FinishLargeFileResponseBodyError(err.message, {\n cause: err.cause ?? err,\n fileId: options.fileId,\n bucketId: options.bucketId,\n fileName: options.fileName,\n })\n notifyAmbiguousLargeFileCleanupSkipped(options.fileId, enriched, options.onCleanupFailure)\n return enriched\n}\n\n/**\n * Performs the shared large-file failure policy: ambiguous finish-body errors\n * are enriched and left uncancelled, while all pre-finish errors trigger\n * best-effort cancellation.\n *\n * @param err - Error from a multipart upload/copy/write-stream path.\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param context - Large file metadata used for cleanup and diagnostics.\n * @param options - Cleanup policy controls.\n *\n * @returns The error that should be surfaced to the caller.\n */\nexport async function resolveLargeFileErrorAfterCleanup(\n err: unknown,\n raw: RawClient,\n accountInfo: AccountInfo,\n context: LargeFileCleanupContext,\n options: LargeFileCleanupPolicyOptions = {},\n): Promise<unknown> {\n if (err instanceof FinishLargeFileResponseBodyError) {\n return handleAmbiguousFinishLargeFileResponseBodyError(err, context)\n }\n if (options.cancelOnError ?? true) {\n await cancelLargeFileBestEffort(raw, accountInfo, context.fileId, {\n ...(context.signal !== undefined ? { signal: context.signal } : {}),\n ...(context.onCleanupFailure !== undefined\n ? { onCleanupFailure: context.onCleanupFailure }\n : {}),\n })\n }\n return err\n}\n\n/**\n * Throwing wrapper around {@link resolveLargeFileErrorAfterCleanup} for paths\n * that can surface the error directly.\n * @param err - Error from a multipart upload/copy/write-stream path.\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param context - Large file metadata used for cleanup and diagnostics.\n * @param options - Cleanup policy controls.\n *\n * @throws The resolved large-file error after cleanup policy is applied.\n */\nexport async function cleanupAfterLargeFileError(\n err: unknown,\n raw: RawClient,\n accountInfo: AccountInfo,\n context: LargeFileCleanupContext,\n options?: LargeFileCleanupPolicyOptions,\n): Promise<never> {\n throw await resolveLargeFileErrorAfterCleanup(err, raw, accountInfo, context, options)\n}\n"],"mappings":"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"}
@@ -1,54 +1,81 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- class Semaphore {
4
- /**
5
- * @param limit - Maximum number of concurrent acquisitions. Must be a
6
- * positive integer; values `<= 0` would create a semaphore that
7
- * never lets anything through (all `acquire()` calls would queue
8
- * forever), so the constructor throws fast instead.
9
- *
10
- * @throws `RangeError` when `limit` is not a positive integer.
11
- */
12
- constructor(limit) {
13
- this.limit = limit;
14
- if (!Number.isInteger(limit) || limit <= 0) {
15
- throw new RangeError(
16
- `Semaphore limit must be a positive integer; received ${limit}. A non-positive limit produces a deadlocked semaphore — fail fast at construction instead.`
17
- );
18
- }
19
- }
20
- current = 0;
21
- queue = [];
22
- /**
23
- * Acquires a slot, waiting if the limit has been reached.
24
- * @returns A promise that resolves when a slot is available.
25
- */
26
- async acquire() {
27
- if (this.current < this.limit) {
28
- this.current++;
29
- return;
30
- }
31
- return new Promise((resolve) => {
32
- this.queue.push(resolve);
33
- });
34
- }
35
- /** Releases a slot, unblocking the next queued caller if any. */
36
- release() {
37
- const next = this.queue.shift();
38
- if (next) {
39
- next();
40
- } else {
41
- this.current--;
42
- }
43
- }
44
- /**
45
- * Number of slots currently available.
46
- *
47
- * @returns The count of free concurrency slots.
48
- */
49
- get available() {
50
- return this.limit - this.current;
51
- }
1
+ //#region src/upload/concurrency.ts
2
+ /**
3
+ * Bounded concurrency primitive.
4
+ *
5
+ * Limits the number of concurrent operations to a fixed maximum. Callers
6
+ * {@link acquire} a slot before starting work and {@link release} it when done.
7
+ * If all slots are taken, `acquire` returns a promise that resolves when a slot
8
+ * becomes available.
9
+ */
10
+ var Semaphore = class {
11
+ limit;
12
+ current = 0;
13
+ queue = [];
14
+ /**
15
+ * @param limit - Maximum number of concurrent acquisitions. Must be a
16
+ * positive integer; values `<= 0` would create a semaphore that
17
+ * never lets anything through (all `acquire()` calls would queue
18
+ * forever), so the constructor throws fast instead.
19
+ *
20
+ * @throws `RangeError` when `limit` is not a positive integer.
21
+ */
22
+ constructor(limit) {
23
+ this.limit = limit;
24
+ if (!Number.isInteger(limit) || limit <= 0) throw new RangeError(`Semaphore limit must be a positive integer; received ${limit}. A non-positive limit produces a deadlocked semaphore — fail fast at construction instead.`);
25
+ }
26
+ /**
27
+ * Acquires a slot, waiting if the limit has been reached.
28
+ * @returns A promise that resolves when a slot is available.
29
+ */
30
+ async acquire() {
31
+ if (this.current < this.limit) {
32
+ this.current++;
33
+ return;
34
+ }
35
+ return new Promise((resolve) => {
36
+ this.queue.push(resolve);
37
+ });
38
+ }
39
+ /** Releases a slot, unblocking the next queued caller if any. */
40
+ release() {
41
+ const next = this.queue.shift();
42
+ if (next) next();
43
+ else this.current--;
44
+ }
45
+ /**
46
+ * Number of slots currently available.
47
+ *
48
+ * @returns The count of free concurrency slots.
49
+ */
50
+ get available() {
51
+ return this.limit - this.current;
52
+ }
53
+ };
54
+ /**
55
+ * Maps over an array with bounded concurrency.
56
+ *
57
+ * @param items - Input items to process.
58
+ * @param concurrency - Maximum number of items processed in parallel.
59
+ * @param fn - Async function applied to each item.
60
+ *
61
+ * @returns Results in the same order as the input items.
62
+ */
63
+ async function mapConcurrent(items, concurrency, fn) {
64
+ const sem = new Semaphore(concurrency);
65
+ const results = new Array(items.length);
66
+ const tasks = items.map(async (item, i) => {
67
+ await sem.acquire();
68
+ try {
69
+ results[i] = await fn(item, i);
70
+ } finally {
71
+ sem.release();
72
+ }
73
+ });
74
+ await Promise.all(tasks);
75
+ return results;
52
76
  }
77
+ //#endregion
53
78
  exports.Semaphore = Semaphore;
54
- //# sourceMappingURL=concurrency.cjs.map
79
+ exports.mapConcurrent = mapConcurrent;
80
+
81
+ //# sourceMappingURL=concurrency.cjs.map