@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,191 +1,237 @@
1
- class UploadAction {
2
- /**
3
- * Creates a new UploadAction for the given relative path.
4
- * @param relativePath - Path relative to the sync root.
5
- * @param absolutePath - Absolute local filesystem path.
6
- * @param size - File size in bytes.
7
- * @param doUpload - Callback that performs the actual upload.
8
- */
9
- constructor(relativePath, absolutePath, size, doUpload) {
10
- this.relativePath = relativePath;
11
- this.absolutePath = absolutePath;
12
- this.size = size;
13
- this.doUpload = doUpload;
14
- }
15
- type = "upload";
16
- /**
17
- * Uploads the file (unless dryRun) and returns an 'upload-done' event.
18
- * @param dryRun - Whether to simulate the action without making changes.
19
- *
20
- * @returns An async generator yielding sync progress events.
21
- */
22
- async execute(dryRun) {
23
- if (!dryRun) {
24
- await this.doUpload(this.absolutePath, this.relativePath);
25
- }
26
- return { type: "upload-done", path: this.relativePath, size: this.size };
27
- }
28
- }
29
- class DownloadAction {
30
- /**
31
- * Creates a new DownloadAction for the given relative path.
32
- * @param relativePath - Path relative to the sync root.
33
- * @param size - File size in bytes.
34
- * @param doDownload - Callback that performs the actual download.
35
- */
36
- constructor(relativePath, size, doDownload) {
37
- this.relativePath = relativePath;
38
- this.size = size;
39
- this.doDownload = doDownload;
40
- }
41
- type = "download";
42
- /**
43
- * Downloads the file (unless dryRun) and returns a 'download-done' event.
44
- * @param dryRun - Whether to simulate the action without making changes.
45
- *
46
- * @returns An async generator yielding sync progress events.
47
- */
48
- async execute(dryRun) {
49
- if (!dryRun) {
50
- await this.doDownload(this.relativePath);
51
- }
52
- return { type: "download-done", path: this.relativePath, size: this.size };
53
- }
54
- }
55
- class CopyAction {
56
- /**
57
- * Creates a new CopyAction for the given relative path.
58
- * @param relativePath - Path relative to the sync root.
59
- * @param size - File size in bytes.
60
- * @param doCopy - Callback that performs the server-side copy.
61
- */
62
- constructor(relativePath, size, doCopy) {
63
- this.relativePath = relativePath;
64
- this.size = size;
65
- this.doCopy = doCopy;
66
- }
67
- type = "copy";
68
- /**
69
- * Copies the file (unless dryRun) and returns a 'copy-done' event.
70
- * @param dryRun - Whether to simulate the action without making changes.
71
- *
72
- * @returns An async generator yielding sync progress events.
73
- */
74
- async execute(dryRun) {
75
- if (!dryRun) {
76
- await this.doCopy(this.relativePath);
77
- }
78
- return { type: "copy-done", path: this.relativePath, size: this.size };
79
- }
80
- }
81
- class HideAction {
82
- /**
83
- * Creates a new HideAction for the given relative path.
84
- * @param relativePath - Path relative to the sync root.
85
- * @param doHide - Callback that creates the hide marker.
86
- */
87
- constructor(relativePath, doHide) {
88
- this.relativePath = relativePath;
89
- this.doHide = doHide;
90
- }
91
- type = "hide";
92
- size = 0;
93
- /**
94
- * Hides the file (unless dryRun) and returns a 'hide' event.
95
- * @param dryRun - Whether to simulate the action without making changes.
96
- *
97
- * @returns An async generator yielding sync progress events.
98
- */
99
- async execute(dryRun) {
100
- if (!dryRun) {
101
- await this.doHide(this.relativePath);
102
- }
103
- return { type: "hide", path: this.relativePath, size: 0 };
104
- }
105
- }
106
- class DeleteRemoteAction {
107
- /**
108
- * Creates a new DeleteRemoteAction for the given relative path.
109
- * @param relativePath - Path relative to the sync root.
110
- * @param fileId - The B2 file version ID to delete.
111
- * @param doDelete - Callback that performs the deletion.
112
- */
113
- constructor(relativePath, fileId, doDelete) {
114
- this.relativePath = relativePath;
115
- this.fileId = fileId;
116
- this.doDelete = doDelete;
117
- }
118
- type = "delete-remote";
119
- size = 0;
120
- /**
121
- * Deletes the remote file version (unless dryRun) and returns a 'delete-remote' event.
122
- * @param dryRun - Whether to simulate the action without making changes.
123
- *
124
- * @returns An async generator yielding sync progress events.
125
- */
126
- async execute(dryRun) {
127
- if (!dryRun) {
128
- await this.doDelete(this.fileId, this.relativePath);
129
- }
130
- return { type: "delete-remote", path: this.relativePath, size: 0 };
131
- }
132
- }
133
- class DeleteLocalAction {
134
- /**
135
- * Creates a new DeleteLocalAction for the given relative path.
136
- * @param relativePath - Path relative to the sync root.
137
- * @param absolutePath - Absolute local filesystem path.
138
- * @param doDelete - Callback that performs the deletion.
139
- */
140
- constructor(relativePath, absolutePath, doDelete) {
141
- this.relativePath = relativePath;
142
- this.absolutePath = absolutePath;
143
- this.doDelete = doDelete;
144
- }
145
- type = "delete-local";
146
- size = 0;
147
- /**
148
- * Deletes the local file (unless dryRun) and returns a 'delete-local' event.
149
- * @param dryRun - Whether to simulate the action without making changes.
150
- *
151
- * @returns An async generator yielding sync progress events.
152
- */
153
- async execute(dryRun) {
154
- if (!dryRun) {
155
- await this.doDelete(this.absolutePath);
156
- }
157
- return { type: "delete-local", path: this.relativePath, size: 0 };
158
- }
159
- }
160
- class SkipAction {
161
- /**
162
- * Creates a new SkipAction for the given relative path.
163
- * @param relativePath - Path relative to the sync root.
164
- * @param reason - Human-readable explanation for why the file was skipped.
165
- */
166
- constructor(relativePath, reason) {
167
- this.relativePath = relativePath;
168
- this.reason = reason;
169
- }
170
- type = "skip";
171
- size = 0;
172
- /**
173
- * Returns a 'skip' event with the reason message. No I/O is performed.
174
- * @param _dryRun - Whether to simulate the action (unused for no-op).
175
- *
176
- * @returns An async generator yielding sync progress events.
177
- */
178
- async execute(_dryRun) {
179
- return { type: "skip", path: this.relativePath, size: 0, message: this.reason };
180
- }
181
- }
182
- export {
183
- CopyAction,
184
- DeleteLocalAction,
185
- DeleteRemoteAction,
186
- DownloadAction,
187
- HideAction,
188
- SkipAction,
189
- UploadAction
1
+ //#region src/sync/actions/index.ts
2
+ /** Uploads a local file to B2. */
3
+ var UploadAction = class {
4
+ relativePath;
5
+ absolutePath;
6
+ size;
7
+ doUpload;
8
+ type = "upload";
9
+ /**
10
+ * Creates a new UploadAction for the given relative path.
11
+ * @param relativePath - Path relative to the sync root.
12
+ * @param absolutePath - Absolute local filesystem path.
13
+ * @param size - File size in bytes.
14
+ * @param doUpload - Callback that performs the actual upload.
15
+ */
16
+ constructor(relativePath, absolutePath, size, doUpload) {
17
+ this.relativePath = relativePath;
18
+ this.absolutePath = absolutePath;
19
+ this.size = size;
20
+ this.doUpload = doUpload;
21
+ }
22
+ /**
23
+ * Uploads the file (unless dryRun) and returns an 'upload-done' event.
24
+ * @param dryRun - Whether to simulate the action without making changes.
25
+ * @param signal - Optional abort signal for canceling the upload.
26
+ *
27
+ * @returns A promise resolving to the sync event produced by the action.
28
+ */
29
+ async execute(dryRun, signal) {
30
+ if (!dryRun) await this.doUpload(this.absolutePath, this.relativePath, signal);
31
+ return {
32
+ type: "upload-done",
33
+ path: this.relativePath,
34
+ size: this.size
35
+ };
36
+ }
190
37
  };
191
- //# sourceMappingURL=index.js.map
38
+ /** Downloads a B2 file to the local filesystem. */
39
+ var DownloadAction = class {
40
+ relativePath;
41
+ size;
42
+ doDownload;
43
+ type = "download";
44
+ /**
45
+ * Creates a new DownloadAction for the given relative path.
46
+ * @param relativePath - Path relative to the sync root.
47
+ * @param size - File size in bytes.
48
+ * @param doDownload - Callback that performs the actual download.
49
+ */
50
+ constructor(relativePath, size, doDownload) {
51
+ this.relativePath = relativePath;
52
+ this.size = size;
53
+ this.doDownload = doDownload;
54
+ }
55
+ /**
56
+ * Downloads the file (unless dryRun) and returns a 'download-done' event.
57
+ * @param dryRun - Whether to simulate the action without making changes.
58
+ * @param signal - Optional abort signal for canceling the download.
59
+ *
60
+ * @returns A promise resolving to the sync event produced by the action.
61
+ */
62
+ async execute(dryRun, signal) {
63
+ if (!dryRun) await this.doDownload(this.relativePath, signal);
64
+ return {
65
+ type: "download-done",
66
+ path: this.relativePath,
67
+ size: this.size
68
+ };
69
+ }
70
+ };
71
+ /** Server-side copies a B2 file to a new key within the same or different bucket. */
72
+ var CopyAction = class {
73
+ relativePath;
74
+ size;
75
+ doCopy;
76
+ type = "copy";
77
+ /**
78
+ * Creates a new CopyAction for the given relative path.
79
+ * @param relativePath - Path relative to the sync root.
80
+ * @param size - File size in bytes.
81
+ * @param doCopy - Callback that performs the server-side copy.
82
+ */
83
+ constructor(relativePath, size, doCopy) {
84
+ this.relativePath = relativePath;
85
+ this.size = size;
86
+ this.doCopy = doCopy;
87
+ }
88
+ /**
89
+ * Copies the file (unless dryRun) and returns a 'copy-done' event.
90
+ * @param dryRun - Whether to simulate the action without making changes.
91
+ * @param signal - Optional abort signal for canceling the copy.
92
+ *
93
+ * @returns A promise resolving to the sync event produced by the action.
94
+ */
95
+ async execute(dryRun, signal) {
96
+ if (!dryRun) await this.doCopy(this.relativePath, signal);
97
+ return {
98
+ type: "copy-done",
99
+ path: this.relativePath,
100
+ size: this.size
101
+ };
102
+ }
103
+ };
104
+ /** Hides a file in B2 by creating a hide marker (soft delete). */
105
+ var HideAction = class {
106
+ relativePath;
107
+ doHide;
108
+ type = "hide";
109
+ size = 0;
110
+ /**
111
+ * Creates a new HideAction for the given relative path.
112
+ * @param relativePath - Path relative to the sync root.
113
+ * @param doHide - Callback that creates the hide marker.
114
+ */
115
+ constructor(relativePath, doHide) {
116
+ this.relativePath = relativePath;
117
+ this.doHide = doHide;
118
+ }
119
+ /**
120
+ * Hides the file (unless dryRun) and returns a 'hide' event.
121
+ * @param dryRun - Whether to simulate the action without making changes.
122
+ * @param signal - Optional abort signal for canceling the hide request.
123
+ *
124
+ * @returns A promise resolving to the sync event produced by the action.
125
+ */
126
+ async execute(dryRun, signal) {
127
+ if (!dryRun) await this.doHide(this.relativePath, signal);
128
+ return {
129
+ type: "hide",
130
+ path: this.relativePath,
131
+ size: 0
132
+ };
133
+ }
134
+ };
135
+ /** Permanently deletes a specific file version from B2. */
136
+ var DeleteRemoteAction = class {
137
+ relativePath;
138
+ fileId;
139
+ doDelete;
140
+ type = "delete-remote";
141
+ size = 0;
142
+ /**
143
+ * Creates a new DeleteRemoteAction for the given relative path.
144
+ * @param relativePath - Path relative to the sync root.
145
+ * @param fileId - The B2 file version ID to delete.
146
+ * @param doDelete - Callback that performs the deletion.
147
+ */
148
+ constructor(relativePath, fileId, doDelete) {
149
+ this.relativePath = relativePath;
150
+ this.fileId = fileId;
151
+ this.doDelete = doDelete;
152
+ }
153
+ /**
154
+ * Deletes the remote file version (unless dryRun) and returns a 'delete-remote' event.
155
+ * @param dryRun - Whether to simulate the action without making changes.
156
+ * @param signal - Optional abort signal for canceling the delete request.
157
+ *
158
+ * @returns A promise resolving to the sync event produced by the action.
159
+ */
160
+ async execute(dryRun, signal) {
161
+ if (!dryRun) await this.doDelete(this.fileId, this.relativePath, signal);
162
+ return {
163
+ type: "delete-remote",
164
+ path: this.relativePath,
165
+ size: 0
166
+ };
167
+ }
168
+ };
169
+ /** Deletes a file from the local filesystem. */
170
+ var DeleteLocalAction = class {
171
+ relativePath;
172
+ absolutePath;
173
+ doDelete;
174
+ type = "delete-local";
175
+ size = 0;
176
+ /**
177
+ * Creates a new DeleteLocalAction for the given relative path.
178
+ * @param relativePath - Path relative to the sync root.
179
+ * @param absolutePath - Absolute local filesystem path.
180
+ * @param doDelete - Callback that performs the deletion.
181
+ */
182
+ constructor(relativePath, absolutePath, doDelete) {
183
+ this.relativePath = relativePath;
184
+ this.absolutePath = absolutePath;
185
+ this.doDelete = doDelete;
186
+ }
187
+ /**
188
+ * Deletes the local file (unless dryRun) and returns a 'delete-local' event.
189
+ * @param dryRun - Whether to simulate the action without making changes.
190
+ * @param signal - Optional abort signal checked before deleting.
191
+ *
192
+ * @returns A promise resolving to the sync event produced by the action.
193
+ */
194
+ async execute(dryRun, signal) {
195
+ if (!dryRun) await this.doDelete(this.absolutePath, signal);
196
+ return {
197
+ type: "delete-local",
198
+ path: this.relativePath,
199
+ size: 0
200
+ };
201
+ }
202
+ };
203
+ /** Represents a no-op action for files that do not need syncing. */
204
+ var SkipAction = class {
205
+ relativePath;
206
+ reason;
207
+ type = "skip";
208
+ size = 0;
209
+ /**
210
+ * Creates a new SkipAction for the given relative path.
211
+ * @param relativePath - Path relative to the sync root.
212
+ * @param reason - Human-readable explanation for why the file was skipped.
213
+ */
214
+ constructor(relativePath, reason) {
215
+ this.relativePath = relativePath;
216
+ this.reason = reason;
217
+ }
218
+ /**
219
+ * Returns a 'skip' event with the reason message. No I/O is performed.
220
+ * @param _dryRun - Whether to simulate the action (unused for no-op).
221
+ * @param _signal - Unused abort signal accepted for the shared action interface.
222
+ *
223
+ * @returns A promise resolving to the sync event produced by the action.
224
+ */
225
+ async execute(_dryRun, _signal) {
226
+ return {
227
+ type: "skip",
228
+ path: this.relativePath,
229
+ size: 0,
230
+ message: this.reason
231
+ };
232
+ }
233
+ };
234
+ //#endregion
235
+ export { CopyAction, DeleteLocalAction, DeleteRemoteAction, DownloadAction, HideAction, SkipAction, UploadAction };
236
+
237
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/sync/actions/index.ts"],"sourcesContent":["import type { SyncEvent } from '../types.ts'\n\n/** Discriminated union of all sync action types. */\nexport type SyncActionType =\n | 'upload'\n | 'download'\n | 'copy'\n | 'hide'\n | 'delete-remote'\n | 'delete-local'\n | 'skip'\n\n/** A single executable sync action produced by the policy engine. */\nexport interface SyncAction {\n /** The kind of action. */\n readonly type: SyncActionType\n /** Relative path of the file this action targets. */\n readonly relativePath: string\n /** Size in bytes of the file, or 0 for metadata-only actions. */\n readonly size: number\n /**\n * Executes the action (or no-ops if dryRun is true) and returns a corresponding event.\n * @param dryRun - When true, skip the actual I/O but still return the event.\n */\n execute(dryRun: boolean): Promise<SyncEvent>\n}\n\n/** Uploads a local file to B2. */\nexport class UploadAction implements SyncAction {\n readonly type = 'upload' as const\n\n /**\n * Creates a new UploadAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param absolutePath - Absolute local filesystem path.\n * @param size - File size in bytes.\n * @param doUpload - Callback that performs the actual upload.\n */\n constructor(\n readonly relativePath: string,\n readonly absolutePath: string,\n readonly size: number,\n private readonly doUpload: (absolutePath: string, relativePath: string) => Promise<void>,\n ) {}\n\n /**\n * Uploads the file (unless dryRun) and returns an 'upload-done' event.\n * @param dryRun - Whether to simulate the action without making changes.\n *\n * @returns An async generator yielding sync progress events.\n */\n async execute(dryRun: boolean): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doUpload(this.absolutePath, this.relativePath)\n }\n return { type: 'upload-done', path: this.relativePath, size: this.size }\n }\n}\n\n/** Downloads a B2 file to the local filesystem. */\nexport class DownloadAction implements SyncAction {\n readonly type = 'download' as const\n\n /**\n * Creates a new DownloadAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param size - File size in bytes.\n * @param doDownload - Callback that performs the actual download.\n */\n constructor(\n readonly relativePath: string,\n readonly size: number,\n private readonly doDownload: (relativePath: string) => Promise<void>,\n ) {}\n\n /**\n * Downloads the file (unless dryRun) and returns a 'download-done' event.\n * @param dryRun - Whether to simulate the action without making changes.\n *\n * @returns An async generator yielding sync progress events.\n */\n async execute(dryRun: boolean): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doDownload(this.relativePath)\n }\n return { type: 'download-done', path: this.relativePath, size: this.size }\n }\n}\n\n/** Server-side copies a B2 file to a new key within the same or different bucket. */\nexport class CopyAction implements SyncAction {\n readonly type = 'copy' as const\n\n /**\n * Creates a new CopyAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param size - File size in bytes.\n * @param doCopy - Callback that performs the server-side copy.\n */\n constructor(\n readonly relativePath: string,\n readonly size: number,\n private readonly doCopy: (relativePath: string) => Promise<void>,\n ) {}\n\n /**\n * Copies the file (unless dryRun) and returns a 'copy-done' event.\n * @param dryRun - Whether to simulate the action without making changes.\n *\n * @returns An async generator yielding sync progress events.\n */\n async execute(dryRun: boolean): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doCopy(this.relativePath)\n }\n return { type: 'copy-done', path: this.relativePath, size: this.size }\n }\n}\n\n/** Hides a file in B2 by creating a hide marker (soft delete). */\nexport class HideAction implements SyncAction {\n readonly type = 'hide' as const\n readonly size = 0\n\n /**\n * Creates a new HideAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param doHide - Callback that creates the hide marker.\n */\n constructor(\n readonly relativePath: string,\n private readonly doHide: (relativePath: string) => Promise<void>,\n ) {}\n\n /**\n * Hides the file (unless dryRun) and returns a 'hide' event.\n * @param dryRun - Whether to simulate the action without making changes.\n *\n * @returns An async generator yielding sync progress events.\n */\n async execute(dryRun: boolean): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doHide(this.relativePath)\n }\n return { type: 'hide', path: this.relativePath, size: 0 }\n }\n}\n\n/** Permanently deletes a specific file version from B2. */\nexport class DeleteRemoteAction implements SyncAction {\n readonly type = 'delete-remote' as const\n readonly size = 0\n\n /**\n * Creates a new DeleteRemoteAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param fileId - The B2 file version ID to delete.\n * @param doDelete - Callback that performs the deletion.\n */\n constructor(\n readonly relativePath: string,\n readonly fileId: string,\n private readonly doDelete: (fileId: string, fileName: string) => Promise<void>,\n ) {}\n\n /**\n * Deletes the remote file version (unless dryRun) and returns a 'delete-remote' event.\n * @param dryRun - Whether to simulate the action without making changes.\n *\n * @returns An async generator yielding sync progress events.\n */\n async execute(dryRun: boolean): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doDelete(this.fileId, this.relativePath)\n }\n return { type: 'delete-remote', path: this.relativePath, size: 0 }\n }\n}\n\n/** Deletes a file from the local filesystem. */\nexport class DeleteLocalAction implements SyncAction {\n readonly type = 'delete-local' as const\n readonly size = 0\n\n /**\n * Creates a new DeleteLocalAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param absolutePath - Absolute local filesystem path.\n * @param doDelete - Callback that performs the deletion.\n */\n constructor(\n readonly relativePath: string,\n readonly absolutePath: string,\n private readonly doDelete: (absolutePath: string) => Promise<void>,\n ) {}\n\n /**\n * Deletes the local file (unless dryRun) and returns a 'delete-local' event.\n * @param dryRun - Whether to simulate the action without making changes.\n *\n * @returns An async generator yielding sync progress events.\n */\n async execute(dryRun: boolean): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doDelete(this.absolutePath)\n }\n return { type: 'delete-local', path: this.relativePath, size: 0 }\n }\n}\n\n/** Represents a no-op action for files that do not need syncing. */\nexport class SkipAction implements SyncAction {\n readonly type = 'skip' as const\n readonly size = 0\n\n /**\n * Creates a new SkipAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param reason - Human-readable explanation for why the file was skipped.\n */\n constructor(\n readonly relativePath: string,\n readonly reason: string,\n ) {}\n\n /**\n * Returns a 'skip' event with the reason message. No I/O is performed.\n * @param _dryRun - Whether to simulate the action (unused for no-op).\n *\n * @returns An async generator yielding sync progress events.\n */\n async execute(_dryRun: boolean): Promise<SyncEvent> {\n return { type: 'skip', path: this.relativePath, size: 0, message: this.reason }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/sync/actions/index.ts"],"sourcesContent":["import type { SyncEvent } from '../types.ts'\n\n/** Discriminated union of all sync action types. */\nexport type SyncActionType =\n | 'upload'\n | 'download'\n | 'copy'\n | 'hide'\n | 'delete-remote'\n | 'delete-local'\n | 'skip'\n\n/** A single executable sync action produced by the policy engine. */\nexport interface SyncAction {\n /** The kind of action. */\n readonly type: SyncActionType\n /** Relative path of the file this action targets. */\n readonly relativePath: string\n /** Size in bytes of the file, or 0 for metadata-only actions. */\n readonly size: number\n /**\n * Executes the action (or no-ops if dryRun is true) and returns a corresponding event.\n * @param dryRun - When true, skip the actual I/O but still return the event.\n * @param signal - Optional abort signal for canceling in-flight I/O.\n */\n execute(dryRun: boolean, signal?: AbortSignal): Promise<SyncEvent>\n}\n\n/** Uploads a local file to B2. */\nexport class UploadAction implements SyncAction {\n readonly type = 'upload' as const\n\n /**\n * Creates a new UploadAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param absolutePath - Absolute local filesystem path.\n * @param size - File size in bytes.\n * @param doUpload - Callback that performs the actual upload.\n */\n constructor(\n readonly relativePath: string,\n readonly absolutePath: string,\n readonly size: number,\n private readonly doUpload: (\n absolutePath: string,\n relativePath: string,\n signal?: AbortSignal,\n ) => Promise<void>,\n ) {}\n\n /**\n * Uploads the file (unless dryRun) and returns an 'upload-done' event.\n * @param dryRun - Whether to simulate the action without making changes.\n * @param signal - Optional abort signal for canceling the upload.\n *\n * @returns A promise resolving to the sync event produced by the action.\n */\n async execute(dryRun: boolean, signal?: AbortSignal): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doUpload(this.absolutePath, this.relativePath, signal)\n }\n return { type: 'upload-done', path: this.relativePath, size: this.size }\n }\n}\n\n/** Downloads a B2 file to the local filesystem. */\nexport class DownloadAction implements SyncAction {\n readonly type = 'download' as const\n\n /**\n * Creates a new DownloadAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param size - File size in bytes.\n * @param doDownload - Callback that performs the actual download.\n */\n constructor(\n readonly relativePath: string,\n readonly size: number,\n private readonly doDownload: (relativePath: string, signal?: AbortSignal) => Promise<void>,\n ) {}\n\n /**\n * Downloads the file (unless dryRun) and returns a 'download-done' event.\n * @param dryRun - Whether to simulate the action without making changes.\n * @param signal - Optional abort signal for canceling the download.\n *\n * @returns A promise resolving to the sync event produced by the action.\n */\n async execute(dryRun: boolean, signal?: AbortSignal): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doDownload(this.relativePath, signal)\n }\n return { type: 'download-done', path: this.relativePath, size: this.size }\n }\n}\n\n/** Server-side copies a B2 file to a new key within the same or different bucket. */\nexport class CopyAction implements SyncAction {\n readonly type = 'copy' as const\n\n /**\n * Creates a new CopyAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param size - File size in bytes.\n * @param doCopy - Callback that performs the server-side copy.\n */\n constructor(\n readonly relativePath: string,\n readonly size: number,\n private readonly doCopy: (relativePath: string, signal?: AbortSignal) => Promise<void>,\n ) {}\n\n /**\n * Copies the file (unless dryRun) and returns a 'copy-done' event.\n * @param dryRun - Whether to simulate the action without making changes.\n * @param signal - Optional abort signal for canceling the copy.\n *\n * @returns A promise resolving to the sync event produced by the action.\n */\n async execute(dryRun: boolean, signal?: AbortSignal): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doCopy(this.relativePath, signal)\n }\n return { type: 'copy-done', path: this.relativePath, size: this.size }\n }\n}\n\n/** Hides a file in B2 by creating a hide marker (soft delete). */\nexport class HideAction implements SyncAction {\n readonly type = 'hide' as const\n readonly size = 0\n\n /**\n * Creates a new HideAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param doHide - Callback that creates the hide marker.\n */\n constructor(\n readonly relativePath: string,\n private readonly doHide: (relativePath: string, signal?: AbortSignal) => Promise<void>,\n ) {}\n\n /**\n * Hides the file (unless dryRun) and returns a 'hide' event.\n * @param dryRun - Whether to simulate the action without making changes.\n * @param signal - Optional abort signal for canceling the hide request.\n *\n * @returns A promise resolving to the sync event produced by the action.\n */\n async execute(dryRun: boolean, signal?: AbortSignal): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doHide(this.relativePath, signal)\n }\n return { type: 'hide', path: this.relativePath, size: 0 }\n }\n}\n\n/** Permanently deletes a specific file version from B2. */\nexport class DeleteRemoteAction implements SyncAction {\n readonly type = 'delete-remote' as const\n readonly size = 0\n\n /**\n * Creates a new DeleteRemoteAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param fileId - The B2 file version ID to delete.\n * @param doDelete - Callback that performs the deletion.\n */\n constructor(\n readonly relativePath: string,\n readonly fileId: string,\n private readonly doDelete: (\n fileId: string,\n fileName: string,\n signal?: AbortSignal,\n ) => Promise<void>,\n ) {}\n\n /**\n * Deletes the remote file version (unless dryRun) and returns a 'delete-remote' event.\n * @param dryRun - Whether to simulate the action without making changes.\n * @param signal - Optional abort signal for canceling the delete request.\n *\n * @returns A promise resolving to the sync event produced by the action.\n */\n async execute(dryRun: boolean, signal?: AbortSignal): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doDelete(this.fileId, this.relativePath, signal)\n }\n return { type: 'delete-remote', path: this.relativePath, size: 0 }\n }\n}\n\n/** Deletes a file from the local filesystem. */\nexport class DeleteLocalAction implements SyncAction {\n readonly type = 'delete-local' as const\n readonly size = 0\n\n /**\n * Creates a new DeleteLocalAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param absolutePath - Absolute local filesystem path.\n * @param doDelete - Callback that performs the deletion.\n */\n constructor(\n readonly relativePath: string,\n readonly absolutePath: string,\n private readonly doDelete: (absolutePath: string, signal?: AbortSignal) => Promise<void>,\n ) {}\n\n /**\n * Deletes the local file (unless dryRun) and returns a 'delete-local' event.\n * @param dryRun - Whether to simulate the action without making changes.\n * @param signal - Optional abort signal checked before deleting.\n *\n * @returns A promise resolving to the sync event produced by the action.\n */\n async execute(dryRun: boolean, signal?: AbortSignal): Promise<SyncEvent> {\n if (!dryRun) {\n await this.doDelete(this.absolutePath, signal)\n }\n return { type: 'delete-local', path: this.relativePath, size: 0 }\n }\n}\n\n/** Represents a no-op action for files that do not need syncing. */\nexport class SkipAction implements SyncAction {\n readonly type = 'skip' as const\n readonly size = 0\n\n /**\n * Creates a new SkipAction for the given relative path.\n * @param relativePath - Path relative to the sync root.\n * @param reason - Human-readable explanation for why the file was skipped.\n */\n constructor(\n readonly relativePath: string,\n readonly reason: string,\n ) {}\n\n /**\n * Returns a 'skip' event with the reason message. No I/O is performed.\n * @param _dryRun - Whether to simulate the action (unused for no-op).\n * @param _signal - Unused abort signal accepted for the shared action interface.\n *\n * @returns A promise resolving to the sync event produced by the action.\n */\n async execute(_dryRun: boolean, _signal?: AbortSignal): Promise<SyncEvent> {\n return { type: 'skip', path: this.relativePath, size: 0, message: this.reason }\n }\n}\n"],"mappings":";;AA6BA,IAAa,eAAb,MAAgD;CAWnC;CACA;CACA;CACQ;CAbnB,OAAgB;;;;;;;;CAShB,YACE,cACA,cACA,MACA,UAKA;EARS,KAAA,eAAA;EACA,KAAA,eAAA;EACA,KAAA,OAAA;EACQ,KAAA,WAAA;CAKhB;;;;;;;;CASH,MAAM,QAAQ,QAAiB,QAA0C;EACvE,IAAI,CAAC,QACH,MAAM,KAAK,SAAS,KAAK,cAAc,KAAK,cAAc,MAAM;EAElE,OAAO;GAAE,MAAM;GAAe,MAAM,KAAK;GAAc,MAAM,KAAK;EAAK;CACzE;AACF;;AAGA,IAAa,iBAAb,MAAkD;CAUrC;CACA;CACQ;CAXnB,OAAgB;;;;;;;CAQhB,YACE,cACA,MACA,YACA;EAHS,KAAA,eAAA;EACA,KAAA,OAAA;EACQ,KAAA,aAAA;CAChB;;;;;;;;CASH,MAAM,QAAQ,QAAiB,QAA0C;EACvE,IAAI,CAAC,QACH,MAAM,KAAK,WAAW,KAAK,cAAc,MAAM;EAEjD,OAAO;GAAE,MAAM;GAAiB,MAAM,KAAK;GAAc,MAAM,KAAK;EAAK;CAC3E;AACF;;AAGA,IAAa,aAAb,MAA8C;CAUjC;CACA;CACQ;CAXnB,OAAgB;;;;;;;CAQhB,YACE,cACA,MACA,QACA;EAHS,KAAA,eAAA;EACA,KAAA,OAAA;EACQ,KAAA,SAAA;CAChB;;;;;;;;CASH,MAAM,QAAQ,QAAiB,QAA0C;EACvE,IAAI,CAAC,QACH,MAAM,KAAK,OAAO,KAAK,cAAc,MAAM;EAE7C,OAAO;GAAE,MAAM;GAAa,MAAM,KAAK;GAAc,MAAM,KAAK;EAAK;CACvE;AACF;;AAGA,IAAa,aAAb,MAA8C;CAUjC;CACQ;CAVnB,OAAgB;CAChB,OAAgB;;;;;;CAOhB,YACE,cACA,QACA;EAFS,KAAA,eAAA;EACQ,KAAA,SAAA;CAChB;;;;;;;;CASH,MAAM,QAAQ,QAAiB,QAA0C;EACvE,IAAI,CAAC,QACH,MAAM,KAAK,OAAO,KAAK,cAAc,MAAM;EAE7C,OAAO;GAAE,MAAM;GAAQ,MAAM,KAAK;GAAc,MAAM;EAAE;CAC1D;AACF;;AAGA,IAAa,qBAAb,MAAsD;CAWzC;CACA;CACQ;CAZnB,OAAgB;CAChB,OAAgB;;;;;;;CAQhB,YACE,cACA,QACA,UAKA;EAPS,KAAA,eAAA;EACA,KAAA,SAAA;EACQ,KAAA,WAAA;CAKhB;;;;;;;;CASH,MAAM,QAAQ,QAAiB,QAA0C;EACvE,IAAI,CAAC,QACH,MAAM,KAAK,SAAS,KAAK,QAAQ,KAAK,cAAc,MAAM;EAE5D,OAAO;GAAE,MAAM;GAAiB,MAAM,KAAK;GAAc,MAAM;EAAE;CACnE;AACF;;AAGA,IAAa,oBAAb,MAAqD;CAWxC;CACA;CACQ;CAZnB,OAAgB;CAChB,OAAgB;;;;;;;CAQhB,YACE,cACA,cACA,UACA;EAHS,KAAA,eAAA;EACA,KAAA,eAAA;EACQ,KAAA,WAAA;CAChB;;;;;;;;CASH,MAAM,QAAQ,QAAiB,QAA0C;EACvE,IAAI,CAAC,QACH,MAAM,KAAK,SAAS,KAAK,cAAc,MAAM;EAE/C,OAAO;GAAE,MAAM;GAAgB,MAAM,KAAK;GAAc,MAAM;EAAE;CAClE;AACF;;AAGA,IAAa,aAAb,MAA8C;CAUjC;CACA;CAVX,OAAgB;CAChB,OAAgB;;;;;;CAOhB,YACE,cACA,QACA;EAFS,KAAA,eAAA;EACA,KAAA,SAAA;CACR;;;;;;;;CASH,MAAM,QAAQ,SAAkB,SAA2C;EACzE,OAAO;GAAE,MAAM;GAAQ,MAAM,KAAK;GAAc,MAAM;GAAG,SAAS,KAAK;EAAO;CAChF;AACF"}
@@ -0,0 +1,148 @@
1
+ const require_hash = require("../streams/hash.cjs");
2
+ const require_sha1_options = require("./sha1-options.cjs");
3
+ //#region src/sync/b2-sha1-reader.ts
4
+ var MAX_CONSECUTIVE_EMPTY_READ_CHUNKS = 1024;
5
+ /**
6
+ * Reads one non-empty stream chunk with an idle timeout and optional abort signal.
7
+ * Empty chunks are not progress; too many consecutive empty chunks fail with the
8
+ * same stalled-read diagnostic used for pending reads.
9
+ *
10
+ * @param reader - Locked reader to read from.
11
+ * @param timeoutMillis - Idle timeout in milliseconds for this read.
12
+ * @param stalledMessage - Error message used when the read makes no progress.
13
+ * @param signal - Optional abort signal to observe while reading.
14
+ *
15
+ * @returns The next stream read result.
16
+ *
17
+ * @internal
18
+ */
19
+ async function readStreamChunkWithTimeout(reader, timeoutMillis, stalledMessage, signal) {
20
+ let emptyChunks = 0;
21
+ while (true) {
22
+ const result = await readRawStreamChunkWithTimeout(reader, timeoutMillis, stalledMessage, signal);
23
+ if (result.done || result.value.byteLength > 0) return result;
24
+ emptyChunks += 1;
25
+ if (emptyChunks > MAX_CONSECUTIVE_EMPTY_READ_CHUNKS) throw new Error(stalledMessage);
26
+ }
27
+ }
28
+ async function readRawStreamChunkWithTimeout(reader, timeoutMillis, stalledMessage, signal) {
29
+ signal?.throwIfAborted();
30
+ let timeout;
31
+ let removeAbortListener;
32
+ const readPromise = reader.read();
33
+ const timeoutPromise = timeoutMillis === Number.POSITIVE_INFINITY ? void 0 : new Promise((_, reject) => {
34
+ timeout = setTimeout(() => {
35
+ reject(new Error(stalledMessage));
36
+ }, timeoutMillis);
37
+ });
38
+ const abortPromise = signal === void 0 ? void 0 : new Promise((_, reject) => {
39
+ const onAbort = () => reject(signal.reason ?? /* @__PURE__ */ new Error("aborted"));
40
+ signal.addEventListener("abort", onAbort, { once: true });
41
+ removeAbortListener = () => signal.removeEventListener("abort", onAbort);
42
+ });
43
+ try {
44
+ if (timeoutPromise === void 0 && abortPromise === void 0) return await readPromise;
45
+ const candidates = [readPromise];
46
+ if (timeoutPromise !== void 0) candidates.push(timeoutPromise);
47
+ if (abortPromise !== void 0) candidates.push(abortPromise);
48
+ return await Promise.race(candidates);
49
+ } finally {
50
+ if (timeout !== void 0) clearTimeout(timeout);
51
+ removeAbortListener?.();
52
+ readPromise.catch(() => {});
53
+ }
54
+ }
55
+ /**
56
+ * Hashes a B2 response body as SHA-1 with idle timeout, abort, and size checks.
57
+ *
58
+ * @param body - Response body stream to hash.
59
+ * @param signal - Optional abort signal to observe while reading.
60
+ * @param options - Optional timeout and byte-count limits.
61
+ *
62
+ * @returns The computed SHA-1 and number of bytes read.
63
+ *
64
+ * @internal
65
+ */
66
+ async function hashReadableStreamSha1(body, signal, options) {
67
+ const hash = new require_hash.IncrementalSha1();
68
+ const reader = body.getReader();
69
+ const idleTimeoutMillis = options?.idleTimeoutMillis ?? require_sha1_options.normalizeSha1TimeoutMillis(void 0);
70
+ const maxBytes = options?.maxBytes ?? Number.POSITIVE_INFINITY;
71
+ const expectedBytes = options?.expectedBytes;
72
+ let bytesRead = 0;
73
+ try {
74
+ while (true) {
75
+ const { done, value } = await readStreamChunkWithTimeout(reader, idleTimeoutMillis, `sha1 B2 read stalled for ${idleTimeoutMillis} ms`, signal);
76
+ if (done) break;
77
+ bytesRead += value.byteLength;
78
+ if (bytesRead > maxBytes) throw new Error(`sha1 B2 read exceeded ${maxBytes} byte verification budget`);
79
+ await hash.update(value);
80
+ }
81
+ if (expectedBytes !== void 0 && bytesRead !== expectedBytes) throw new Error(`sha1 B2 read ended after ${bytesRead} bytes, expected ${expectedBytes}`);
82
+ return {
83
+ contentSha1: await hash.digest(),
84
+ bytesRead
85
+ };
86
+ } catch (err) {
87
+ reader.cancel(err).catch(() => {});
88
+ throw err;
89
+ } finally {
90
+ reader.releaseLock();
91
+ }
92
+ }
93
+ /**
94
+ * Applies an absolute verification deadline while forwarding parent aborts.
95
+ *
96
+ * @param signal - Optional parent abort signal.
97
+ * @param timeoutMillis - Absolute deadline in milliseconds.
98
+ * @param run - Operation to run with the derived deadline signal.
99
+ *
100
+ * @returns The operation result.
101
+ *
102
+ * @internal
103
+ */
104
+ async function withSha1VerificationDeadline(signal, timeoutMillis, run) {
105
+ const controller = new AbortController();
106
+ const abortFromParent = () => controller.abort(signal?.reason);
107
+ if (signal?.aborted) abortFromParent();
108
+ signal?.addEventListener("abort", abortFromParent, { once: true });
109
+ let timeout;
110
+ const timeoutPromise = new Promise((_, reject) => {
111
+ timeout = setTimeout(() => {
112
+ const error = /* @__PURE__ */ new Error(`sha1 B2 verification exceeded ${timeoutMillis} ms`);
113
+ controller.abort(error);
114
+ reject(error);
115
+ }, timeoutMillis);
116
+ });
117
+ const runPromise = run(controller.signal);
118
+ try {
119
+ return await Promise.race([runPromise, timeoutPromise]);
120
+ } finally {
121
+ if (timeout !== void 0) clearTimeout(timeout);
122
+ signal?.removeEventListener("abort", abortFromParent);
123
+ runPromise.catch(() => {});
124
+ }
125
+ }
126
+ /**
127
+ * Bounds B2 SHA-1 verification downloads to the selected object's size and optional ceiling.
128
+ *
129
+ * @param contentLength - Selected B2 object byte length.
130
+ * @param ceiling - Optional lower verification budget.
131
+ *
132
+ * @returns The byte budget to enforce.
133
+ *
134
+ * @internal
135
+ */
136
+ function normalizeSha1VerificationMaxBytes(contentLength, ceiling) {
137
+ const contentBudget = Math.max(0, Math.floor(contentLength));
138
+ if (ceiling === void 0) return contentBudget;
139
+ if (!Number.isFinite(ceiling) || ceiling < 0) return contentBudget;
140
+ return Math.min(contentBudget, Math.floor(ceiling));
141
+ }
142
+ //#endregion
143
+ exports.hashReadableStreamSha1 = hashReadableStreamSha1;
144
+ exports.normalizeSha1VerificationMaxBytes = normalizeSha1VerificationMaxBytes;
145
+ exports.readStreamChunkWithTimeout = readStreamChunkWithTimeout;
146
+ exports.withSha1VerificationDeadline = withSha1VerificationDeadline;
147
+
148
+ //# sourceMappingURL=b2-sha1-reader.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b2-sha1-reader.cjs","names":[],"sources":["../../src/sync/b2-sha1-reader.ts"],"sourcesContent":["import { IncrementalSha1 } from '../streams/hash.ts'\nimport { normalizeSha1TimeoutMillis } from './sha1-options.ts'\n\nconst MAX_CONSECUTIVE_EMPTY_READ_CHUNKS = 1024\n\n/**\n * Reads one non-empty stream chunk with an idle timeout and optional abort signal.\n * Empty chunks are not progress; too many consecutive empty chunks fail with the\n * same stalled-read diagnostic used for pending reads.\n *\n * @param reader - Locked reader to read from.\n * @param timeoutMillis - Idle timeout in milliseconds for this read.\n * @param stalledMessage - Error message used when the read makes no progress.\n * @param signal - Optional abort signal to observe while reading.\n *\n * @returns The next stream read result.\n *\n * @internal\n */\nexport async function readStreamChunkWithTimeout(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n timeoutMillis: number,\n stalledMessage: string,\n signal?: AbortSignal,\n): Promise<ReadableStreamReadResult<Uint8Array>> {\n let emptyChunks = 0\n while (true) {\n const result = await readRawStreamChunkWithTimeout(\n reader,\n timeoutMillis,\n stalledMessage,\n signal,\n )\n if (result.done || result.value.byteLength > 0) return result\n emptyChunks += 1\n if (emptyChunks > MAX_CONSECUTIVE_EMPTY_READ_CHUNKS) {\n throw new Error(stalledMessage)\n }\n }\n}\n\nasync function readRawStreamChunkWithTimeout(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n timeoutMillis: number,\n stalledMessage: string,\n signal?: AbortSignal,\n): Promise<ReadableStreamReadResult<Uint8Array>> {\n signal?.throwIfAborted()\n\n let timeout: ReturnType<typeof setTimeout> | undefined\n let removeAbortListener: (() => void) | undefined\n const readPromise = reader.read()\n const timeoutPromise =\n timeoutMillis === Number.POSITIVE_INFINITY\n ? undefined\n : new Promise<never>((_, reject) => {\n timeout = setTimeout(() => {\n reject(new Error(stalledMessage))\n }, timeoutMillis)\n })\n const abortPromise =\n signal === undefined\n ? undefined\n : new Promise<never>((_, reject) => {\n const onAbort = () => reject(signal.reason ?? new Error('aborted'))\n signal.addEventListener('abort', onAbort, { once: true })\n removeAbortListener = () => signal.removeEventListener('abort', onAbort)\n })\n\n try {\n if (timeoutPromise === undefined && abortPromise === undefined) return await readPromise\n const candidates = [readPromise]\n if (timeoutPromise !== undefined) candidates.push(timeoutPromise)\n if (abortPromise !== undefined) candidates.push(abortPromise)\n return await Promise.race(candidates)\n } finally {\n if (timeout !== undefined) clearTimeout(timeout)\n removeAbortListener?.()\n void readPromise.catch(() => {})\n }\n}\n\n/**\n * Hashes a B2 response body as SHA-1 with idle timeout, abort, and size checks.\n *\n * @param body - Response body stream to hash.\n * @param signal - Optional abort signal to observe while reading.\n * @param options - Optional timeout and byte-count limits.\n *\n * @returns The computed SHA-1 and number of bytes read.\n *\n * @internal\n */\nexport async function hashReadableStreamSha1(\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n options?: {\n readonly idleTimeoutMillis: number\n readonly maxBytes: number\n readonly expectedBytes: number\n },\n): Promise<{ readonly contentSha1: string; readonly bytesRead: number }> {\n const hash = new IncrementalSha1()\n const reader = body.getReader()\n const idleTimeoutMillis = options?.idleTimeoutMillis ?? normalizeSha1TimeoutMillis(undefined)\n const maxBytes = options?.maxBytes ?? Number.POSITIVE_INFINITY\n const expectedBytes = options?.expectedBytes\n let bytesRead = 0\n try {\n while (true) {\n const { done, value } = await readStreamChunkWithTimeout(\n reader,\n idleTimeoutMillis,\n `sha1 B2 read stalled for ${idleTimeoutMillis} ms`,\n signal,\n )\n if (done) break\n bytesRead += value.byteLength\n if (bytesRead > maxBytes) {\n throw new Error(`sha1 B2 read exceeded ${maxBytes} byte verification budget`)\n }\n await hash.update(value)\n }\n if (expectedBytes !== undefined && bytesRead !== expectedBytes) {\n throw new Error(`sha1 B2 read ended after ${bytesRead} bytes, expected ${expectedBytes}`)\n }\n return { contentSha1: await hash.digest(), bytesRead }\n } catch (err) {\n void reader.cancel(err).catch(() => {})\n throw err\n } finally {\n reader.releaseLock()\n }\n}\n\n/**\n * Applies an absolute verification deadline while forwarding parent aborts.\n *\n * @param signal - Optional parent abort signal.\n * @param timeoutMillis - Absolute deadline in milliseconds.\n * @param run - Operation to run with the derived deadline signal.\n *\n * @returns The operation result.\n *\n * @internal\n */\nexport async function withSha1VerificationDeadline<T>(\n signal: AbortSignal | undefined,\n timeoutMillis: number,\n run: (signal: AbortSignal) => Promise<T>,\n): Promise<T> {\n const controller = new AbortController()\n const abortFromParent = () => controller.abort(signal?.reason)\n if (signal?.aborted) abortFromParent()\n signal?.addEventListener('abort', abortFromParent, { once: true })\n\n let timeout: ReturnType<typeof setTimeout> | undefined\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeout = setTimeout(() => {\n const error = new Error(`sha1 B2 verification exceeded ${timeoutMillis} ms`)\n controller.abort(error)\n reject(error)\n }, timeoutMillis)\n })\n const runPromise = run(controller.signal)\n try {\n return await Promise.race([runPromise, timeoutPromise])\n } finally {\n if (timeout !== undefined) clearTimeout(timeout)\n signal?.removeEventListener('abort', abortFromParent)\n void runPromise.catch(() => {})\n }\n}\n\n/**\n * Bounds B2 SHA-1 verification downloads to the selected object's size and optional ceiling.\n *\n * @param contentLength - Selected B2 object byte length.\n * @param ceiling - Optional lower verification budget.\n *\n * @returns The byte budget to enforce.\n *\n * @internal\n */\nexport function normalizeSha1VerificationMaxBytes(\n contentLength: number,\n ceiling: number | undefined,\n): number {\n const contentBudget = Math.max(0, Math.floor(contentLength))\n if (ceiling === undefined) return contentBudget\n if (!Number.isFinite(ceiling) || ceiling < 0) return contentBudget\n return Math.min(contentBudget, Math.floor(ceiling))\n}\n"],"mappings":"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"}