@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,222 +1,305 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const hash = require("../streams/hash.cjs");
4
- const progress = require("../streams/progress.cjs");
5
- const defaults = require("../util/defaults.cjs");
6
- const planRanges = require("../util/plan-ranges.cjs");
7
- const cancel = require("./cancel.cjs");
8
- const concurrency = require("./concurrency.cjs");
9
- const resume = require("./resume.cjs");
1
+ const require_abort_scope = require("./abort-scope.cjs");
2
+ const require_errors_index = require("../errors/index.cjs");
3
+ const require_cancel = require("./cancel.cjs");
4
+ const require_concurrency = require("./concurrency.cjs");
5
+ const require_finish = require("./finish.cjs");
6
+ require("../util/defaults.cjs");
7
+ const require_plan_ranges = require("../util/plan-ranges.cjs");
8
+ const require_progress = require("../streams/progress.cjs");
9
+ const require_hash = require("../streams/hash.cjs");
10
+ const require_source = require("../streams/source.cjs");
11
+ const require_resume = require("./resume.cjs");
12
+ const require_retry = require("./retry.cjs");
13
+ //#region src/upload/large.ts
14
+ var MAX_CONSECUTIVE_EMPTY_STREAM_CHUNKS = 1024;
15
+ function createResumeCandidateCriteria(options, request, totalSize, partSize, parts) {
16
+ return {
17
+ contentType: request.contentType,
18
+ fileInfo: request.fileInfo,
19
+ sourceSize: totalSize,
20
+ partSize,
21
+ parts,
22
+ ...options.signal !== void 0 ? { signal: options.signal } : {},
23
+ ...request.serverSideEncryption !== void 0 ? { serverSideEncryption: request.serverSideEncryption } : options.bucketDefaultServerSideEncryption !== void 0 ? { serverSideEncryption: options.bucketDefaultServerSideEncryption } : {},
24
+ ...request.fileRetention !== void 0 ? { fileRetention: request.fileRetention } : options.bucketDefaultRetention !== void 0 ? { defaultFileRetention: options.bucketDefaultRetention } : options.bucketDefaultRetentionUnreadable === true ? { defaultFileRetentionUnreadable: true } : {},
25
+ ...request.legalHold !== void 0 ? { legalHold: request.legalHold } : {},
26
+ ...options.resumeDiscoveryTimeoutMs !== void 0 ? { discoveryTimeoutMs: options.resumeDiscoveryTimeoutMs } : {},
27
+ ...options.onResumeCandidateRejected !== void 0 ? { onCandidateRejected: options.onResumeCandidateRejected } : {},
28
+ ...options.resumeMaxListPages !== void 0 ? { maxListPages: options.resumeMaxListPages } : {},
29
+ ...options.resumeMaxPartCandidates !== void 0 ? { maxPartCandidates: options.resumeMaxPartCandidates } : {},
30
+ ...options.resumeMaxPartPages !== void 0 ? { maxPartPages: options.resumeMaxPartPages } : {}
31
+ };
32
+ }
33
+ /**
34
+ * Uploads a file using the B2 multipart (large file) protocol.
35
+ *
36
+ * The source is sliced into parts and uploaded concurrently via
37
+ * `b2_upload_part`. This is appropriate for files larger than the recommended
38
+ * part size. For smaller files, use {@link uploadSmallFile} which sends the
39
+ * entire payload in a single request.
40
+ *
41
+ * On failure, the in-progress large file is cancelled on a best-effort basis.
42
+ *
43
+ * @param raw - Low-level B2 API client.
44
+ * @param accountInfo - Authorized account state (tokens, URLs, upload URL pool).
45
+ * @param options - Upload parameters including part size and concurrency.
46
+ *
47
+ * @returns The resulting {@link FileVersion} metadata.
48
+ */
10
49
  async function uploadLargeFile(raw, accountInfo, options) {
11
- const recommendedPartSize = accountInfo.getRecommendedPartSize();
12
- const minPartSize = accountInfo.getAbsoluteMinimumPartSize();
13
- const partSize = Math.max(options.partSize ?? recommendedPartSize, minPartSize);
14
- const concurrency$1 = options.concurrency ?? defaults.DEFAULT_TRANSFER_CONCURRENCY;
15
- const totalSize = options.source.size;
16
- const parts = planRanges.planRanges(totalSize, partSize);
17
- const fileInfo = { ...options.fileInfo };
18
- const startLargeFileRequest = {
19
- bucketId: options.bucketId,
20
- fileName: options.fileName,
21
- contentType: options.contentType ?? defaults.DEFAULT_CONTENT_TYPE,
22
- fileInfo,
23
- ...options.serverSideEncryption !== void 0 ? { serverSideEncryption: options.serverSideEncryption } : {},
24
- ...options.fileRetention !== void 0 ? { fileRetention: options.fileRetention } : {},
25
- ...options.legalHold !== void 0 ? { legalHold: options.legalHold } : {}
26
- };
27
- let largeFileId;
28
- let preUploaded;
29
- if (options.resumeFileId !== void 0) {
30
- largeFileId = options.resumeFileId;
31
- preUploaded = await resume.collectPartSha1s(raw, accountInfo, largeFileId);
32
- } else if (options.resume === true) {
33
- const candidate = await resume.findResumeCandidate(
34
- raw,
35
- accountInfo,
36
- options.bucketId,
37
- options.fileName
38
- );
39
- if (candidate) {
40
- largeFileId = candidate.fileId;
41
- preUploaded = candidate.uploadedPartSha1s;
42
- } else {
43
- const startResp = await raw.startLargeFile(
44
- accountInfo.getApiUrl(),
45
- accountInfo.getAuthToken(),
46
- startLargeFileRequest
47
- );
48
- largeFileId = startResp.fileId;
49
- preUploaded = /* @__PURE__ */ new Map();
50
- }
51
- } else {
52
- const startResp = await raw.startLargeFile(
53
- accountInfo.getApiUrl(),
54
- accountInfo.getAuthToken(),
55
- startLargeFileRequest
56
- );
57
- largeFileId = startResp.fileId;
58
- preUploaded = /* @__PURE__ */ new Map();
59
- }
60
- const partSha1s = new Array(parts.length);
61
- const tracker = new progress.ProgressTracker(options.onProgress, totalSize, parts.length);
62
- const sem = new concurrency.Semaphore(concurrency$1);
63
- if (!options.source.canSlice) {
64
- if (options.resume === true || options.resumeFileId !== void 0) {
65
- await cancel.cancelLargeFileBestEffort(raw, accountInfo, largeFileId);
66
- throw new Error(
67
- "uploadLargeFile: resume is not supported on non-sliceable sources (e.g. StreamSource)."
68
- );
69
- }
70
- try {
71
- await uploadPartsSequentially(
72
- raw,
73
- accountInfo,
74
- options,
75
- largeFileId,
76
- parts,
77
- partSha1s,
78
- tracker
79
- );
80
- return await raw.finishLargeFile(accountInfo.getApiUrl(), accountInfo.getAuthToken(), {
81
- fileId: largeFileId,
82
- partSha1Array: partSha1s
83
- });
84
- } catch (err) {
85
- await cancel.cancelLargeFileBestEffort(raw, accountInfo, largeFileId);
86
- throw err;
87
- }
88
- }
89
- try {
90
- const tasks = parts.map(async (part) => {
91
- await sem.acquire();
92
- try {
93
- options.signal?.throwIfAborted();
94
- const partSource = options.source.slice(part.offset, part.offset + part.length);
95
- const data = new Uint8Array(await partSource.toArrayBuffer());
96
- const partSha1 = new hash.IncrementalSha1();
97
- await partSha1.update(data);
98
- const sha1Hex = await partSha1.digest();
99
- const serverSha1 = preUploaded.get(part.partNumber);
100
- if (serverSha1 !== void 0 && serverSha1 === sha1Hex) {
101
- partSha1s[part.partNumber - 1] = serverSha1;
102
- tracker.addBytes(data.byteLength);
103
- tracker.completePart();
104
- return;
105
- }
106
- let uploadEntry = accountInfo.checkoutPartUploadUrl(largeFileId);
107
- if (!uploadEntry) {
108
- const resp = await raw.getUploadPartUrl(
109
- accountInfo.getApiUrl(),
110
- accountInfo.getAuthToken(),
111
- { fileId: largeFileId }
112
- );
113
- uploadEntry = { uploadUrl: resp.uploadUrl, authorizationToken: resp.authorizationToken };
114
- }
115
- try {
116
- const result2 = await raw.uploadPart(
117
- uploadEntry.uploadUrl,
118
- {
119
- authorization: uploadEntry.authorizationToken,
120
- partNumber: part.partNumber,
121
- contentLength: data.byteLength,
122
- contentSha1: sha1Hex,
123
- ...options.serverSideEncryption !== void 0 ? { serverSideEncryption: options.serverSideEncryption } : {}
124
- },
125
- data,
126
- options.signal
127
- );
128
- accountInfo.returnPartUploadUrl(largeFileId, uploadEntry);
129
- partSha1s[part.partNumber - 1] = result2.contentSha1;
130
- tracker.addBytes(data.byteLength);
131
- tracker.completePart();
132
- } catch (err) {
133
- accountInfo.evictPartUploadUrl(largeFileId, uploadEntry);
134
- throw err;
135
- }
136
- } finally {
137
- sem.release();
138
- }
139
- });
140
- await Promise.all(tasks);
141
- const result = await raw.finishLargeFile(accountInfo.getApiUrl(), accountInfo.getAuthToken(), {
142
- fileId: largeFileId,
143
- partSha1Array: partSha1s
144
- });
145
- return result;
146
- } catch (err) {
147
- await cancel.cancelLargeFileBestEffort(raw, accountInfo, largeFileId);
148
- throw err;
149
- }
50
+ const recommendedPartSize = accountInfo.getRecommendedPartSize();
51
+ const minPartSize = accountInfo.getAbsoluteMinimumPartSize();
52
+ const partSize = Math.max(options.partSize ?? recommendedPartSize, minPartSize);
53
+ const concurrency = options.concurrency ?? 4;
54
+ const totalSize = options.source.size;
55
+ const parts = require_plan_ranges.planRanges(totalSize, partSize);
56
+ const fileInfo = Object.create(null);
57
+ if (options.fileInfo !== void 0) for (const [key, value] of Object.entries(options.fileInfo)) fileInfo[key] = value;
58
+ const startLargeFileRequest = {
59
+ bucketId: options.bucketId,
60
+ fileName: options.fileName,
61
+ contentType: options.contentType ?? "b2/x-auto",
62
+ fileInfo,
63
+ ...options.serverSideEncryption !== void 0 ? { serverSideEncryption: options.serverSideEncryption } : {},
64
+ ...options.fileRetention !== void 0 ? { fileRetention: options.fileRetention } : {},
65
+ ...options.legalHold !== void 0 ? { legalHold: options.legalHold } : {}
66
+ };
67
+ const resumeCandidateCriteria = createResumeCandidateCriteria(options, startLargeFileRequest, totalSize, partSize, parts);
68
+ if (!options.source.canSlice && options.resumeFileId !== void 0) throw new Error("uploadLargeFile: resume is not supported on non-sliceable sources.");
69
+ let largeFileId;
70
+ let preUploaded = /* @__PURE__ */ new Map();
71
+ let createdLargeFile = false;
72
+ const abortScope = require_abort_scope.createAbortScope(options.signal);
73
+ const startFreshLargeFile = async () => {
74
+ if (abortScope.signal.aborted && !options.source.canSlice) await cancelForwardOnlySource(options.source, abortScope.signal.reason);
75
+ abortScope.signal.throwIfAborted();
76
+ const startPromise = raw.startLargeFile(accountInfo.getApiUrl(), accountInfo.getAuthToken(), startLargeFileRequest, {
77
+ signal: abortScope.signal,
78
+ ...options.retry !== void 0 ? { retry: options.retry } : {}
79
+ });
80
+ try {
81
+ largeFileId = (await require_abort_scope.raceWithAbort(startPromise, abortScope.signal)).fileId;
82
+ } catch (err) {
83
+ if (abortScope.signal.aborted) {
84
+ if (!options.source.canSlice) await cancelForwardOnlySource(options.source, abortScope.signal.reason).catch(() => {});
85
+ cancelLargeFileAfterStart(startPromise, raw, accountInfo, options.onCleanupFailure);
86
+ }
87
+ throw err;
88
+ }
89
+ preUploaded = /* @__PURE__ */ new Map();
90
+ createdLargeFile = true;
91
+ };
92
+ try {
93
+ if (abortScope.signal.aborted && !options.source.canSlice) await cancelForwardOnlySource(options.source, abortScope.signal.reason);
94
+ abortScope.signal.throwIfAborted();
95
+ if (options.resumeFileId !== void 0) {
96
+ const candidate = await require_resume.findResumeCandidate(raw, accountInfo, options.bucketId, options.fileName, {
97
+ ...resumeCandidateCriteria,
98
+ resumeFileId: options.resumeFileId
99
+ });
100
+ if (candidate === null) throw new require_errors_index.ResumeFileIdMismatchError(options.resumeFileId, options.fileName);
101
+ largeFileId = candidate.fileId;
102
+ preUploaded = candidate.uploadedPartSha1s;
103
+ } else if (options.resume === true && options.source.canSlice) {
104
+ const candidate = await require_resume.findResumeCandidate(raw, accountInfo, options.bucketId, options.fileName, resumeCandidateCriteria);
105
+ if (candidate) {
106
+ largeFileId = candidate.fileId;
107
+ preUploaded = /* @__PURE__ */ new Map();
108
+ } else await startFreshLargeFile();
109
+ } else await startFreshLargeFile();
110
+ const activeLargeFileId = largeFileId;
111
+ if (activeLargeFileId === void 0) throw new Error("uploadLargeFile: start did not return a large file ID.");
112
+ const partSha1s = new Array(parts.length);
113
+ const tracker = new require_progress.ProgressTracker(options.onProgress, totalSize, parts.length);
114
+ const sem = new require_concurrency.Semaphore(concurrency);
115
+ if (!options.source.canSlice) {
116
+ await uploadPartsSequentially(raw, accountInfo, options, activeLargeFileId, parts, partSha1s, tracker, abortScope.signal);
117
+ return await require_finish.finishLargeFileWithAbortReconciliation(raw, accountInfo, {
118
+ fileId: activeLargeFileId,
119
+ bucketId: options.bucketId,
120
+ fileName: options.fileName,
121
+ partSha1s,
122
+ signal: abortScope.signal,
123
+ ...options.retry !== void 0 ? { retry: options.retry } : {}
124
+ });
125
+ }
126
+ const tasks = parts.map(async (part) => {
127
+ await sem.acquire();
128
+ try {
129
+ abortScope.signal.throwIfAborted();
130
+ const partSource = options.source.slice(part.offset, part.offset + part.length);
131
+ const data = new Uint8Array(await partSource.toArrayBuffer({ signal: abortScope.signal }));
132
+ abortScope.signal.throwIfAborted();
133
+ const partSha1 = new require_hash.IncrementalSha1();
134
+ await partSha1.update(data);
135
+ const sha1Hex = await partSha1.digest();
136
+ abortScope.signal.throwIfAborted();
137
+ const serverSha1 = preUploaded.get(part.partNumber);
138
+ if (serverSha1 !== void 0 && serverSha1 === sha1Hex) {
139
+ notifyResumePartReused(options.onResumePartReused, {
140
+ fileName: options.fileName,
141
+ fileId: activeLargeFileId,
142
+ partNumber: part.partNumber,
143
+ contentLength: data.byteLength,
144
+ contentSha1: serverSha1
145
+ });
146
+ partSha1s[part.partNumber - 1] = serverSha1;
147
+ tracker.addBytes(data.byteLength);
148
+ tracker.completePart();
149
+ return;
150
+ }
151
+ const result = await require_retry.uploadPartWithFreshUrl(raw, accountInfo, activeLargeFileId, {
152
+ fileName: options.fileName,
153
+ partNumber: part.partNumber,
154
+ data,
155
+ contentLength: data.byteLength,
156
+ contentSha1: sha1Hex,
157
+ retry: options.retry,
158
+ signal: abortScope.signal,
159
+ onUploadRetry: options.onUploadRetry,
160
+ retryResponseBodyFailures: require_retry.resolveRetryResponseBodyFailures(options.retryResponseBodyFailures),
161
+ ...options.serverSideEncryption !== void 0 ? { serverSideEncryption: options.serverSideEncryption } : {}
162
+ });
163
+ partSha1s[part.partNumber - 1] = result.contentSha1;
164
+ tracker.addBytes(data.byteLength);
165
+ tracker.completePart();
166
+ } catch (err) {
167
+ abortScope.abort(err);
168
+ throw err;
169
+ } finally {
170
+ sem.release();
171
+ }
172
+ });
173
+ require_abort_scope.throwRejectedOrAbortReason(await Promise.allSettled(tasks), abortScope);
174
+ return await require_finish.finishLargeFileWithAbortReconciliation(raw, accountInfo, {
175
+ fileId: activeLargeFileId,
176
+ bucketId: options.bucketId,
177
+ fileName: options.fileName,
178
+ partSha1s,
179
+ signal: abortScope.signal,
180
+ ...options.retry !== void 0 ? { retry: options.retry } : {}
181
+ });
182
+ } catch (err) {
183
+ abortScope.abort(err);
184
+ if (largeFileId === void 0) throw err;
185
+ return await cleanupAfterUploadLargeFileError(err, raw, accountInfo, options, largeFileId, createdLargeFile);
186
+ } finally {
187
+ abortScope.dispose();
188
+ }
189
+ }
190
+ function cancelLargeFileAfterStart(started, raw, accountInfo, onCleanupFailure) {
191
+ started.then((resp) => require_cancel.cancelLargeFileBestEffort(raw, accountInfo, resp.fileId, onCleanupFailure === void 0 ? void 0 : { onCleanupFailure })).catch(() => {});
192
+ }
193
+ async function cleanupAfterUploadLargeFileError(err, raw, accountInfo, options, largeFileId, createdLargeFile) {
194
+ return await require_cancel.cleanupAfterLargeFileError(err, raw, accountInfo, {
195
+ fileId: largeFileId,
196
+ bucketId: options.bucketId,
197
+ fileName: options.fileName,
198
+ signal: options.signal,
199
+ onCleanupFailure: options.onCleanupFailure
200
+ }, { cancelOnError: createdLargeFile });
201
+ }
202
+ /**
203
+ * Sequential upload path for non-sliceable sources.
204
+ *
205
+ * Reads the source's `stream()` once and accumulates exactly `partSize`
206
+ * bytes into an in-memory buffer per iteration. Each filled buffer is
207
+ * hashed, dispatched to `b2_upload_part`, then released before the next
208
+ * part starts — so peak memory is ~partSize regardless of file size.
209
+ *
210
+ * Concurrency is forced to 1 here because the stream is a single
211
+ * forward-only cursor; the engine can't read part N+1 until part N is
212
+ * fully consumed.
213
+ *
214
+ * @param raw - Low-level B2 API client.
215
+ * @param accountInfo - Authorized account state.
216
+ * @param options - The original `uploadLargeFile` options.
217
+ * @param largeFileId - ID of the in-progress large file (already started).
218
+ * @param parts - Pre-planned part layout (used for part numbers + count).
219
+ * @param partSha1s - Output array, written in-place at index `partNumber - 1`.
220
+ * @param tracker - Progress tracker; bytes added per chunk, part completed
221
+ * each time a part finishes.
222
+ * @param signal - Linked abort signal for source reads and part uploads.
223
+ */
224
+ async function uploadPartsSequentially(raw, accountInfo, options, largeFileId, parts, partSha1s, tracker, signal) {
225
+ const reader = options.source.stream().getReader();
226
+ let bytesRead = 0;
227
+ let carry = null;
228
+ try {
229
+ for (const planned of parts) {
230
+ signal.throwIfAborted();
231
+ const buf = new Uint8Array(planned.length);
232
+ let filled = 0;
233
+ if (carry !== null) {
234
+ const take = Math.min(carry.byteLength, buf.byteLength - filled);
235
+ buf.set(carry.subarray(0, take), filled);
236
+ filled += take;
237
+ carry = take < carry.byteLength ? carry.subarray(take) : null;
238
+ }
239
+ while (filled < buf.byteLength) {
240
+ const { done, value } = await require_source.readNextNonEmptyStreamChunk(reader, emptyChunkError(), signal);
241
+ if (done) throw new Error(`uploadLargeFile: source stream ended after ${bytesRead} bytes, expected ${options.source.size}.`);
242
+ bytesRead += value.byteLength;
243
+ const take = Math.min(value.byteLength, buf.byteLength - filled);
244
+ buf.set(value.subarray(0, take), filled);
245
+ filled += take;
246
+ if (take < value.byteLength) carry = value.subarray(take);
247
+ }
248
+ signal.throwIfAborted();
249
+ const data = buf;
250
+ const partSha1 = new require_hash.IncrementalSha1();
251
+ await partSha1.update(data);
252
+ const sha1Hex = await partSha1.digest();
253
+ signal.throwIfAborted();
254
+ const result = await require_retry.uploadPartWithFreshUrl(raw, accountInfo, largeFileId, {
255
+ fileName: options.fileName,
256
+ partNumber: planned.partNumber,
257
+ data,
258
+ contentLength: data.byteLength,
259
+ contentSha1: sha1Hex,
260
+ retry: options.retry,
261
+ signal,
262
+ onUploadRetry: options.onUploadRetry,
263
+ retryResponseBodyFailures: require_retry.resolveRetryResponseBodyFailures(options.retryResponseBodyFailures),
264
+ ...options.serverSideEncryption !== void 0 ? { serverSideEncryption: options.serverSideEncryption } : {}
265
+ });
266
+ partSha1s[planned.partNumber - 1] = result.contentSha1;
267
+ tracker.addBytes(data.byteLength);
268
+ tracker.completePart();
269
+ }
270
+ if (carry !== null && carry.byteLength > 0) throw new Error(tooManyBytesError(options.source.size));
271
+ const extra = await require_source.readNextNonEmptyStreamChunk(reader, emptyChunkError(), signal);
272
+ if (!extra.done) {
273
+ bytesRead += extra.value.byteLength;
274
+ throw new Error(tooManyBytesError(options.source.size));
275
+ }
276
+ } catch (err) {
277
+ await reader.cancel(err).catch(() => {});
278
+ throw err;
279
+ } finally {
280
+ reader.releaseLock();
281
+ }
282
+ }
283
+ function emptyChunkError() {
284
+ return `uploadLargeFile: source stream emitted more than ${MAX_CONSECUTIVE_EMPTY_STREAM_CHUNKS} consecutive empty chunks. too many empty chunks.`;
285
+ }
286
+ function tooManyBytesError(advertisedSize) {
287
+ return `uploadLargeFile: source stream emitted more than advertised ${advertisedSize} bytes. source stream emitted more bytes than advertised size.`;
288
+ }
289
+ async function cancelForwardOnlySource(source, reason) {
290
+ const reader = source.stream().getReader();
291
+ try {
292
+ await reader.cancel(reason);
293
+ } finally {
294
+ reader.releaseLock();
295
+ }
150
296
  }
151
- async function uploadPartsSequentially(raw, accountInfo, options, largeFileId, parts, partSha1s, tracker) {
152
- const reader = options.source.stream().getReader();
153
- let partNumber = 1;
154
- let carry = null;
155
- try {
156
- for (const planned of parts) {
157
- options.signal?.throwIfAborted();
158
- const buf = new Uint8Array(planned.length);
159
- let filled = 0;
160
- if (carry !== null) {
161
- const take = Math.min(carry.byteLength, buf.byteLength - filled);
162
- buf.set(carry.subarray(0, take), filled);
163
- filled += take;
164
- carry = take < carry.byteLength ? carry.subarray(take) : null;
165
- }
166
- while (filled < buf.byteLength) {
167
- const { done, value } = await reader.read();
168
- if (done) break;
169
- const take = Math.min(value.byteLength, buf.byteLength - filled);
170
- buf.set(value.subarray(0, take), filled);
171
- filled += take;
172
- if (take < value.byteLength) {
173
- carry = value.subarray(take);
174
- }
175
- }
176
- const data = filled === buf.byteLength ? buf : buf.subarray(0, filled);
177
- if (data.byteLength === 0) {
178
- throw new Error(
179
- `uploadLargeFile: source stream ended before part ${partNumber}; advertised size does not match emitted bytes.`
180
- );
181
- }
182
- const partSha1 = new hash.IncrementalSha1();
183
- await partSha1.update(data);
184
- const sha1Hex = await partSha1.digest();
185
- let uploadEntry = accountInfo.checkoutPartUploadUrl(largeFileId);
186
- if (!uploadEntry) {
187
- const resp = await raw.getUploadPartUrl(
188
- accountInfo.getApiUrl(),
189
- accountInfo.getAuthToken(),
190
- { fileId: largeFileId }
191
- );
192
- uploadEntry = { uploadUrl: resp.uploadUrl, authorizationToken: resp.authorizationToken };
193
- }
194
- try {
195
- const result = await raw.uploadPart(
196
- uploadEntry.uploadUrl,
197
- {
198
- authorization: uploadEntry.authorizationToken,
199
- partNumber: planned.partNumber,
200
- contentLength: data.byteLength,
201
- contentSha1: sha1Hex,
202
- ...options.serverSideEncryption !== void 0 ? { serverSideEncryption: options.serverSideEncryption } : {}
203
- },
204
- data,
205
- options.signal
206
- );
207
- accountInfo.returnPartUploadUrl(largeFileId, uploadEntry);
208
- partSha1s[planned.partNumber - 1] = result.contentSha1;
209
- tracker.addBytes(data.byteLength);
210
- tracker.completePart();
211
- } catch (err) {
212
- accountInfo.evictPartUploadUrl(largeFileId, uploadEntry);
213
- throw err;
214
- }
215
- partNumber++;
216
- }
217
- } finally {
218
- reader.releaseLock();
219
- }
297
+ function notifyResumePartReused(listener, event) {
298
+ try {
299
+ listener?.(event);
300
+ } catch {}
220
301
  }
302
+ //#endregion
221
303
  exports.uploadLargeFile = uploadLargeFile;
222
- //# sourceMappingURL=large.cjs.map
304
+
305
+ //# sourceMappingURL=large.cjs.map