@backblaze-labs/b2-sdk 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (885) hide show
  1. package/CHANGELOG.md +151 -5
  2. package/README.md +163 -34
  3. package/dist/_virtual/_b2-sdk-version-json.cjs +4 -0
  4. package/dist/_virtual/_b2-sdk-version-json.js +4 -0
  5. package/dist/auth/account-info.d.cts +32 -0
  6. package/dist/auth/account-info.d.cts.map +1 -1
  7. package/dist/auth/account-info.d.ts +32 -0
  8. package/dist/auth/account-info.d.ts.map +1 -1
  9. package/dist/auth/file.cjs +408 -207
  10. package/dist/auth/file.cjs.map +1 -1
  11. package/dist/auth/file.d.cts +77 -3
  12. package/dist/auth/file.d.cts.map +1 -1
  13. package/dist/auth/file.d.ts +77 -3
  14. package/dist/auth/file.d.ts.map +1 -1
  15. package/dist/auth/file.js +407 -207
  16. package/dist/auth/file.js.map +1 -1
  17. package/dist/auth/in-memory.cjs +212 -183
  18. package/dist/auth/in-memory.cjs.map +1 -1
  19. package/dist/auth/in-memory.d.cts +8 -0
  20. package/dist/auth/in-memory.d.cts.map +1 -1
  21. package/dist/auth/in-memory.d.ts +8 -0
  22. package/dist/auth/in-memory.d.ts.map +1 -1
  23. package/dist/auth/in-memory.js +211 -182
  24. package/dist/auth/in-memory.js.map +1 -1
  25. package/dist/auth/index.cjs +7 -9
  26. package/dist/auth/index.d.cts +3 -2
  27. package/dist/auth/index.d.cts.map +1 -1
  28. package/dist/auth/index.d.ts +3 -2
  29. package/dist/auth/index.d.ts.map +1 -1
  30. package/dist/auth/index.js +2 -8
  31. package/dist/auth/realms.cjs +80 -7
  32. package/dist/auth/realms.cjs.map +1 -1
  33. package/dist/auth/realms.d.cts +27 -4
  34. package/dist/auth/realms.d.cts.map +1 -1
  35. package/dist/auth/realms.d.ts +27 -4
  36. package/dist/auth/realms.d.ts.map +1 -1
  37. package/dist/auth/realms.js +80 -9
  38. package/dist/auth/realms.js.map +1 -1
  39. package/dist/auth/upload-url-pool.cjs +55 -51
  40. package/dist/auth/upload-url-pool.cjs.map +1 -1
  41. package/dist/auth/upload-url-pool.js +55 -51
  42. package/dist/auth/upload-url-pool.js.map +1 -1
  43. package/dist/backup/client.cjs +206 -0
  44. package/dist/backup/client.cjs.map +1 -0
  45. package/dist/backup/client.d.cts +238 -0
  46. package/dist/backup/client.d.cts.map +1 -0
  47. package/dist/backup/client.d.ts +238 -0
  48. package/dist/backup/client.d.ts.map +1 -0
  49. package/dist/backup/client.js +206 -0
  50. package/dist/backup/client.js.map +1 -0
  51. package/dist/backup/index.cjs +15 -0
  52. package/dist/backup/index.d.cts +22 -0
  53. package/dist/backup/index.d.cts.map +1 -0
  54. package/dist/backup/index.d.ts +22 -0
  55. package/dist/backup/index.d.ts.map +1 -0
  56. package/dist/backup/index.js +7 -0
  57. package/dist/backup/raw.cjs +146 -0
  58. package/dist/backup/raw.cjs.map +1 -0
  59. package/dist/backup/raw.d.cts +122 -0
  60. package/dist/backup/raw.d.cts.map +1 -0
  61. package/dist/backup/raw.d.ts +122 -0
  62. package/dist/backup/raw.d.ts.map +1 -0
  63. package/dist/backup/raw.js +146 -0
  64. package/dist/backup/raw.js.map +1 -0
  65. package/dist/bucket.cjs +786 -787
  66. package/dist/bucket.cjs.map +1 -1
  67. package/dist/bucket.d.cts +35 -47
  68. package/dist/bucket.d.cts.map +1 -1
  69. package/dist/bucket.d.ts +35 -47
  70. package/dist/bucket.d.ts.map +1 -1
  71. package/dist/bucket.js +781 -782
  72. package/dist/bucket.js.map +1 -1
  73. package/dist/client.cjs +246 -228
  74. package/dist/client.cjs.map +1 -1
  75. package/dist/client.d.cts +25 -17
  76. package/dist/client.d.cts.map +1 -1
  77. package/dist/client.d.ts +25 -17
  78. package/dist/client.d.ts.map +1 -1
  79. package/dist/client.js +243 -225
  80. package/dist/client.js.map +1 -1
  81. package/dist/copy/large.cjs +116 -71
  82. package/dist/copy/large.cjs.map +1 -1
  83. package/dist/copy/large.d.cts +6 -0
  84. package/dist/copy/large.d.cts.map +1 -1
  85. package/dist/copy/large.d.ts +6 -0
  86. package/dist/copy/large.d.ts.map +1 -1
  87. package/dist/copy/large.js +114 -69
  88. package/dist/copy/large.js.map +1 -1
  89. package/dist/download/checksum.cjs +93 -0
  90. package/dist/download/checksum.cjs.map +1 -0
  91. package/dist/download/checksum.d.cts +40 -0
  92. package/dist/download/checksum.d.cts.map +1 -0
  93. package/dist/download/checksum.d.ts +40 -0
  94. package/dist/download/checksum.d.ts.map +1 -0
  95. package/dist/download/checksum.js +91 -0
  96. package/dist/download/checksum.js.map +1 -0
  97. package/dist/download/parallel.cjs +251 -118
  98. package/dist/download/parallel.cjs.map +1 -1
  99. package/dist/download/parallel.d.cts +13 -2
  100. package/dist/download/parallel.d.cts.map +1 -1
  101. package/dist/download/parallel.d.ts +13 -2
  102. package/dist/download/parallel.d.ts.map +1 -1
  103. package/dist/download/parallel.js +249 -116
  104. package/dist/download/parallel.js.map +1 -1
  105. package/dist/download/single.cjs +323 -97
  106. package/dist/download/single.cjs.map +1 -1
  107. package/dist/download/single.d.cts +6 -1
  108. package/dist/download/single.d.cts.map +1 -1
  109. package/dist/download/single.d.ts +6 -1
  110. package/dist/download/single.d.ts.map +1 -1
  111. package/dist/download/single.js +322 -99
  112. package/dist/download/single.js.map +1 -1
  113. package/dist/errors/index.cjs +869 -243
  114. package/dist/errors/index.cjs.map +1 -1
  115. package/dist/errors/index.d.cts +404 -82
  116. package/dist/errors/index.d.cts.map +1 -1
  117. package/dist/errors/index.d.ts +404 -82
  118. package/dist/errors/index.d.ts.map +1 -1
  119. package/dist/errors/index.js +835 -261
  120. package/dist/errors/index.js.map +1 -1
  121. package/dist/http/retry.cjs +45 -28
  122. package/dist/http/retry.cjs.map +1 -1
  123. package/dist/http/retry.d.cts +15 -2
  124. package/dist/http/retry.d.cts.map +1 -1
  125. package/dist/http/retry.d.ts +15 -2
  126. package/dist/http/retry.d.ts.map +1 -1
  127. package/dist/http/retry.js +46 -31
  128. package/dist/http/retry.js.map +1 -1
  129. package/dist/http/transport.cjs +476 -140
  130. package/dist/http/transport.cjs.map +1 -1
  131. package/dist/http/transport.d.cts +46 -5
  132. package/dist/http/transport.d.cts.map +1 -1
  133. package/dist/http/transport.d.ts +46 -5
  134. package/dist/http/transport.d.ts.map +1 -1
  135. package/dist/http/transport.js +474 -140
  136. package/dist/http/transport.js.map +1 -1
  137. package/dist/http/url-guard.cjs +154 -89
  138. package/dist/http/url-guard.cjs.map +1 -1
  139. package/dist/http/url-guard.d.cts +25 -3
  140. package/dist/http/url-guard.d.cts.map +1 -1
  141. package/dist/http/url-guard.d.ts +25 -3
  142. package/dist/http/url-guard.d.ts.map +1 -1
  143. package/dist/http/url-guard.js +152 -90
  144. package/dist/http/url-guard.js.map +1 -1
  145. package/dist/http/user-agent.cjs +84 -44
  146. package/dist/http/user-agent.cjs.map +1 -1
  147. package/dist/http/user-agent.js +84 -46
  148. package/dist/http/user-agent.js.map +1 -1
  149. package/dist/index.cjs +124 -77
  150. package/dist/index.d.cts +29 -21
  151. package/dist/index.d.cts.map +1 -1
  152. package/dist/index.d.ts +29 -21
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.js +18 -72
  155. package/dist/internal/b2-naming.cjs +66 -0
  156. package/dist/internal/b2-naming.cjs.map +1 -0
  157. package/dist/internal/b2-naming.d.cts +43 -0
  158. package/dist/internal/b2-naming.d.cts.map +1 -0
  159. package/dist/internal/b2-naming.d.ts +43 -0
  160. package/dist/internal/b2-naming.d.ts.map +1 -0
  161. package/dist/internal/b2-naming.js +60 -0
  162. package/dist/internal/b2-naming.js.map +1 -0
  163. package/dist/internal/upload-retry-options.cjs +21 -0
  164. package/dist/internal/upload-retry-options.cjs.map +1 -0
  165. package/dist/internal/upload-retry-options.d.cts +12 -0
  166. package/dist/internal/upload-retry-options.d.cts.map +1 -0
  167. package/dist/internal/upload-retry-options.d.ts +12 -0
  168. package/dist/internal/upload-retry-options.d.ts.map +1 -0
  169. package/dist/internal/upload-retry-options.js +21 -0
  170. package/dist/internal/upload-retry-options.js.map +1 -0
  171. package/dist/internal/url-redaction.cjs +31 -0
  172. package/dist/internal/url-redaction.cjs.map +1 -0
  173. package/dist/internal/url-redaction.d.cts +17 -0
  174. package/dist/internal/url-redaction.d.cts.map +1 -0
  175. package/dist/internal/url-redaction.d.ts +17 -0
  176. package/dist/internal/url-redaction.d.ts.map +1 -0
  177. package/dist/internal/url-redaction.js +31 -0
  178. package/dist/internal/url-redaction.js.map +1 -0
  179. package/dist/notifications/index.cjs +4 -6
  180. package/dist/notifications/index.d.cts +1 -1
  181. package/dist/notifications/index.d.cts.map +1 -1
  182. package/dist/notifications/index.d.ts +1 -1
  183. package/dist/notifications/index.d.ts.map +1 -1
  184. package/dist/notifications/index.js +1 -6
  185. package/dist/notifications/webhook.cjs +195 -85
  186. package/dist/notifications/webhook.cjs.map +1 -1
  187. package/dist/notifications/webhook.d.cts.map +1 -1
  188. package/dist/notifications/webhook.d.ts.map +1 -1
  189. package/dist/notifications/webhook.js +195 -87
  190. package/dist/notifications/webhook.js.map +1 -1
  191. package/dist/object.cjs +253 -210
  192. package/dist/object.cjs.map +1 -1
  193. package/dist/object.d.cts +13 -57
  194. package/dist/object.d.cts.map +1 -1
  195. package/dist/object.d.ts +13 -57
  196. package/dist/object.d.ts.map +1 -1
  197. package/dist/object.js +249 -206
  198. package/dist/object.js.map +1 -1
  199. package/dist/partner/account-info.d.cts +43 -0
  200. package/dist/partner/account-info.d.cts.map +1 -0
  201. package/dist/partner/account-info.d.ts +43 -0
  202. package/dist/partner/account-info.d.ts.map +1 -0
  203. package/dist/partner/auth-clone.cjs +64 -0
  204. package/dist/partner/auth-clone.cjs.map +1 -0
  205. package/dist/partner/auth-clone.d.cts +27 -0
  206. package/dist/partner/auth-clone.d.cts.map +1 -0
  207. package/dist/partner/auth-clone.d.ts +27 -0
  208. package/dist/partner/auth-clone.d.ts.map +1 -0
  209. package/dist/partner/auth-clone.js +63 -0
  210. package/dist/partner/auth-clone.js.map +1 -0
  211. package/dist/partner/auth-core.cjs +175 -0
  212. package/dist/partner/auth-core.cjs.map +1 -0
  213. package/dist/partner/auth-core.d.cts +111 -0
  214. package/dist/partner/auth-core.d.cts.map +1 -0
  215. package/dist/partner/auth-core.d.ts +111 -0
  216. package/dist/partner/auth-core.d.ts.map +1 -0
  217. package/dist/partner/auth-core.js +175 -0
  218. package/dist/partner/auth-core.js.map +1 -0
  219. package/dist/partner/auth-shape.cjs +36 -0
  220. package/dist/partner/auth-shape.cjs.map +1 -0
  221. package/dist/partner/auth-shape.d.cts +12 -0
  222. package/dist/partner/auth-shape.d.cts.map +1 -0
  223. package/dist/partner/auth-shape.d.ts +12 -0
  224. package/dist/partner/auth-shape.d.ts.map +1 -0
  225. package/dist/partner/auth-shape.js +36 -0
  226. package/dist/partner/auth-shape.js.map +1 -0
  227. package/dist/partner/client.cjs +255 -0
  228. package/dist/partner/client.cjs.map +1 -0
  229. package/dist/partner/client.d.cts +335 -0
  230. package/dist/partner/client.d.cts.map +1 -0
  231. package/dist/partner/client.d.ts +335 -0
  232. package/dist/partner/client.d.ts.map +1 -0
  233. package/dist/partner/client.js +255 -0
  234. package/dist/partner/client.js.map +1 -0
  235. package/dist/partner/endpoint-url.cjs +108 -0
  236. package/dist/partner/endpoint-url.cjs.map +1 -0
  237. package/dist/partner/endpoint-url.d.cts +72 -0
  238. package/dist/partner/endpoint-url.d.cts.map +1 -0
  239. package/dist/partner/endpoint-url.d.ts +72 -0
  240. package/dist/partner/endpoint-url.d.ts.map +1 -0
  241. package/dist/partner/endpoint-url.js +105 -0
  242. package/dist/partner/endpoint-url.js.map +1 -0
  243. package/dist/partner/in-memory.cjs +135 -0
  244. package/dist/partner/in-memory.cjs.map +1 -0
  245. package/dist/partner/in-memory.d.cts +99 -0
  246. package/dist/partner/in-memory.d.cts.map +1 -0
  247. package/dist/partner/in-memory.d.ts +99 -0
  248. package/dist/partner/in-memory.d.ts.map +1 -0
  249. package/dist/partner/in-memory.js +135 -0
  250. package/dist/partner/in-memory.js.map +1 -0
  251. package/dist/partner/index.cjs +18 -0
  252. package/dist/partner/index.d.cts +23 -0
  253. package/dist/partner/index.d.cts.map +1 -0
  254. package/dist/partner/index.d.ts +23 -0
  255. package/dist/partner/index.d.ts.map +1 -0
  256. package/dist/partner/index.js +7 -0
  257. package/dist/partner/raw.cjs +392 -0
  258. package/dist/partner/raw.cjs.map +1 -0
  259. package/dist/partner/raw.d.cts +223 -0
  260. package/dist/partner/raw.d.cts.map +1 -0
  261. package/dist/partner/raw.d.ts +223 -0
  262. package/dist/partner/raw.d.ts.map +1 -0
  263. package/dist/partner/raw.js +390 -0
  264. package/dist/partner/raw.js.map +1 -0
  265. package/dist/partner/redaction-placeholders.cjs +10 -0
  266. package/dist/partner/redaction-placeholders.cjs.map +1 -0
  267. package/dist/partner/redaction-placeholders.d.cts +5 -0
  268. package/dist/partner/redaction-placeholders.d.cts.map +1 -0
  269. package/dist/partner/redaction-placeholders.d.ts +5 -0
  270. package/dist/partner/redaction-placeholders.d.ts.map +1 -0
  271. package/dist/partner/redaction-placeholders.js +9 -0
  272. package/dist/partner/redaction-placeholders.js.map +1 -0
  273. package/dist/partner/redaction.cjs +267 -0
  274. package/dist/partner/redaction.cjs.map +1 -0
  275. package/dist/partner/redaction.d.cts +124 -0
  276. package/dist/partner/redaction.d.cts.map +1 -0
  277. package/dist/partner/redaction.d.ts +124 -0
  278. package/dist/partner/redaction.d.ts.map +1 -0
  279. package/dist/partner/redaction.js +257 -0
  280. package/dist/partner/redaction.js.map +1 -0
  281. package/dist/raw/encoding.cjs +74 -35
  282. package/dist/raw/encoding.cjs.map +1 -1
  283. package/dist/raw/encoding.js +74 -38
  284. package/dist/raw/encoding.js.map +1 -1
  285. package/dist/raw/index.cjs +740 -587
  286. package/dist/raw/index.cjs.map +1 -1
  287. package/dist/raw/index.d.cts +126 -19
  288. package/dist/raw/index.d.cts.map +1 -1
  289. package/dist/raw/index.d.ts +126 -19
  290. package/dist/raw/index.d.ts.map +1 -1
  291. package/dist/raw/index.js +736 -589
  292. package/dist/raw/index.js.map +1 -1
  293. package/dist/raw/url.cjs +111 -0
  294. package/dist/raw/url.cjs.map +1 -0
  295. package/dist/raw/url.d.cts +41 -0
  296. package/dist/raw/url.d.cts.map +1 -0
  297. package/dist/raw/url.d.ts +41 -0
  298. package/dist/raw/url.d.ts.map +1 -0
  299. package/dist/raw/url.js +110 -0
  300. package/dist/raw/url.js.map +1 -0
  301. package/dist/s3/index.cjs +355 -18
  302. package/dist/s3/index.cjs.map +1 -1
  303. package/dist/s3/index.d.cts +233 -5
  304. package/dist/s3/index.d.cts.map +1 -1
  305. package/dist/s3/index.d.ts +233 -5
  306. package/dist/s3/index.d.ts.map +1 -1
  307. package/dist/s3/index.js +351 -22
  308. package/dist/s3/index.js.map +1 -1
  309. package/dist/s3/sigv4.cjs +154 -0
  310. package/dist/s3/sigv4.cjs.map +1 -0
  311. package/dist/s3/sigv4.d.cts +43 -0
  312. package/dist/s3/sigv4.d.cts.map +1 -0
  313. package/dist/s3/sigv4.d.ts +43 -0
  314. package/dist/s3/sigv4.d.ts.map +1 -0
  315. package/dist/s3/sigv4.js +153 -0
  316. package/dist/s3/sigv4.js.map +1 -0
  317. package/dist/s3/validation.cjs +69 -0
  318. package/dist/s3/validation.cjs.map +1 -0
  319. package/dist/s3/validation.d.cts +43 -0
  320. package/dist/s3/validation.d.cts.map +1 -0
  321. package/dist/s3/validation.d.ts +43 -0
  322. package/dist/s3/validation.d.ts.map +1 -0
  323. package/dist/s3/validation.js +66 -0
  324. package/dist/s3/validation.js.map +1 -0
  325. package/dist/simulator/capabilities.cjs +63 -48
  326. package/dist/simulator/capabilities.cjs.map +1 -1
  327. package/dist/simulator/capabilities.js +63 -49
  328. package/dist/simulator/capabilities.js.map +1 -1
  329. package/dist/simulator/index.cjs +3114 -1547
  330. package/dist/simulator/index.cjs.map +1 -1
  331. package/dist/simulator/index.d.cts +186 -20
  332. package/dist/simulator/index.d.cts.map +1 -1
  333. package/dist/simulator/index.d.ts +186 -20
  334. package/dist/simulator/index.d.ts.map +1 -1
  335. package/dist/simulator/index.js +3098 -1545
  336. package/dist/simulator/index.js.map +1 -1
  337. package/dist/simulator/partner.cjs +719 -0
  338. package/dist/simulator/partner.cjs.map +1 -0
  339. package/dist/simulator/partner.d.cts +183 -0
  340. package/dist/simulator/partner.d.cts.map +1 -0
  341. package/dist/simulator/partner.d.ts +183 -0
  342. package/dist/simulator/partner.d.ts.map +1 -0
  343. package/dist/simulator/partner.js +718 -0
  344. package/dist/simulator/partner.js.map +1 -0
  345. package/dist/simulator/validation.cjs +772 -157
  346. package/dist/simulator/validation.cjs.map +1 -1
  347. package/dist/simulator/validation.d.cts +120 -21
  348. package/dist/simulator/validation.d.cts.map +1 -1
  349. package/dist/simulator/validation.d.ts +120 -21
  350. package/dist/simulator/validation.d.ts.map +1 -1
  351. package/dist/simulator/validation.js +755 -167
  352. package/dist/simulator/validation.js.map +1 -1
  353. package/dist/streams/collect.cjs +74 -24
  354. package/dist/streams/collect.cjs.map +1 -1
  355. package/dist/streams/collect.d.cts +14 -1
  356. package/dist/streams/collect.d.cts.map +1 -1
  357. package/dist/streams/collect.d.ts +14 -1
  358. package/dist/streams/collect.d.ts.map +1 -1
  359. package/dist/streams/collect.js +74 -25
  360. package/dist/streams/collect.js.map +1 -1
  361. package/dist/streams/file-source.cjs +287 -0
  362. package/dist/streams/file-source.cjs.map +1 -0
  363. package/dist/streams/file-source.d.cts +96 -0
  364. package/dist/streams/file-source.d.cts.map +1 -0
  365. package/dist/streams/file-source.d.ts +96 -0
  366. package/dist/streams/file-source.d.ts.map +1 -0
  367. package/dist/streams/file-source.js +286 -0
  368. package/dist/streams/file-source.js.map +1 -0
  369. package/dist/streams/hash.cjs +207 -115
  370. package/dist/streams/hash.cjs.map +1 -1
  371. package/dist/streams/hash.d.cts +5 -4
  372. package/dist/streams/hash.d.cts.map +1 -1
  373. package/dist/streams/hash.d.ts +5 -4
  374. package/dist/streams/hash.d.ts.map +1 -1
  375. package/dist/streams/hash.js +208 -95
  376. package/dist/streams/hash.js.map +1 -1
  377. package/dist/streams/index.cjs +12 -12
  378. package/dist/streams/index.d.cts +3 -3
  379. package/dist/streams/index.d.cts.map +1 -1
  380. package/dist/streams/index.d.ts +3 -3
  381. package/dist/streams/index.d.ts.map +1 -1
  382. package/dist/streams/index.js +3 -11
  383. package/dist/streams/progress.cjs +60 -46
  384. package/dist/streams/progress.cjs.map +1 -1
  385. package/dist/streams/progress.js +60 -46
  386. package/dist/streams/progress.js.map +1 -1
  387. package/dist/streams/source.cjs +317 -146
  388. package/dist/streams/source.cjs.map +1 -1
  389. package/dist/streams/source.d.cts +56 -18
  390. package/dist/streams/source.d.cts.map +1 -1
  391. package/dist/streams/source.d.ts +56 -18
  392. package/dist/streams/source.d.ts.map +1 -1
  393. package/dist/streams/source.js +313 -149
  394. package/dist/streams/source.js.map +1 -1
  395. package/dist/sync/actions/index.cjs +236 -184
  396. package/dist/sync/actions/index.cjs.map +1 -1
  397. package/dist/sync/actions/index.d.cts +29 -21
  398. package/dist/sync/actions/index.d.cts.map +1 -1
  399. package/dist/sync/actions/index.d.ts +29 -21
  400. package/dist/sync/actions/index.d.ts.map +1 -1
  401. package/dist/sync/actions/index.js +236 -190
  402. package/dist/sync/actions/index.js.map +1 -1
  403. package/dist/sync/b2-sha1-reader.cjs +152 -0
  404. package/dist/sync/b2-sha1-reader.cjs.map +1 -0
  405. package/dist/sync/b2-sha1-reader.d.cts +58 -0
  406. package/dist/sync/b2-sha1-reader.d.cts.map +1 -0
  407. package/dist/sync/b2-sha1-reader.d.ts +58 -0
  408. package/dist/sync/b2-sha1-reader.d.ts.map +1 -0
  409. package/dist/sync/b2-sha1-reader.js +149 -0
  410. package/dist/sync/b2-sha1-reader.js.map +1 -0
  411. package/dist/sync/download-staging.cjs +266 -0
  412. package/dist/sync/download-staging.cjs.map +1 -0
  413. package/dist/sync/download-staging.d.cts +55 -0
  414. package/dist/sync/download-staging.d.cts.map +1 -0
  415. package/dist/sync/download-staging.d.ts +55 -0
  416. package/dist/sync/download-staging.d.ts.map +1 -0
  417. package/dist/sync/download-staging.js +260 -0
  418. package/dist/sync/download-staging.js.map +1 -0
  419. package/dist/sync/filesystem-errors.cjs +32 -0
  420. package/dist/sync/filesystem-errors.cjs.map +1 -0
  421. package/dist/sync/filesystem-errors.d.cts +8 -0
  422. package/dist/sync/filesystem-errors.d.cts.map +1 -0
  423. package/dist/sync/filesystem-errors.d.ts +8 -0
  424. package/dist/sync/filesystem-errors.d.ts.map +1 -0
  425. package/dist/sync/filesystem-errors.js +32 -0
  426. package/dist/sync/filesystem-errors.js.map +1 -0
  427. package/dist/sync/filters.cjs +217 -0
  428. package/dist/sync/filters.cjs.map +1 -0
  429. package/dist/sync/filters.d.cts +51 -0
  430. package/dist/sync/filters.d.cts.map +1 -0
  431. package/dist/sync/filters.d.ts +51 -0
  432. package/dist/sync/filters.d.ts.map +1 -0
  433. package/dist/sync/filters.js +213 -0
  434. package/dist/sync/filters.js.map +1 -0
  435. package/dist/sync/index.cjs +39 -22
  436. package/dist/sync/index.d.cts +14 -9
  437. package/dist/sync/index.d.cts.map +1 -1
  438. package/dist/sync/index.d.ts +14 -9
  439. package/dist/sync/index.d.ts.map +1 -1
  440. package/dist/sync/index.js +9 -20
  441. package/dist/sync/local-file-identity.cjs +61 -0
  442. package/dist/sync/local-file-identity.cjs.map +1 -0
  443. package/dist/sync/local-file-identity.d.cts +37 -0
  444. package/dist/sync/local-file-identity.d.cts.map +1 -0
  445. package/dist/sync/local-file-identity.d.ts +37 -0
  446. package/dist/sync/local-file-identity.d.ts.map +1 -0
  447. package/dist/sync/local-file-identity.js +60 -0
  448. package/dist/sync/local-file-identity.js.map +1 -0
  449. package/dist/sync/local-file-io.cjs +369 -0
  450. package/dist/sync/local-file-io.cjs.map +1 -0
  451. package/dist/sync/local-file-io.d.cts +76 -0
  452. package/dist/sync/local-file-io.d.cts.map +1 -0
  453. package/dist/sync/local-file-io.d.ts +76 -0
  454. package/dist/sync/local-file-io.d.ts.map +1 -0
  455. package/dist/sync/local-file-io.js +365 -0
  456. package/dist/sync/local-file-io.js.map +1 -0
  457. package/dist/sync/local-filesystem-root.cjs +27 -0
  458. package/dist/sync/local-filesystem-root.cjs.map +1 -0
  459. package/dist/sync/local-filesystem-root.d.cts +18 -0
  460. package/dist/sync/local-filesystem-root.d.cts.map +1 -0
  461. package/dist/sync/local-filesystem-root.d.ts +18 -0
  462. package/dist/sync/local-filesystem-root.d.ts.map +1 -0
  463. package/dist/sync/local-filesystem-root.js +26 -0
  464. package/dist/sync/local-filesystem-root.js.map +1 -0
  465. package/dist/sync/local-sha1.cjs +110 -0
  466. package/dist/sync/local-sha1.cjs.map +1 -0
  467. package/dist/sync/local-sha1.d.cts +31 -0
  468. package/dist/sync/local-sha1.d.cts.map +1 -0
  469. package/dist/sync/local-sha1.d.ts +31 -0
  470. package/dist/sync/local-sha1.d.ts.map +1 -0
  471. package/dist/sync/local-sha1.js +109 -0
  472. package/dist/sync/local-sha1.js.map +1 -0
  473. package/dist/sync/pairing.cjs +118 -29
  474. package/dist/sync/pairing.cjs.map +1 -1
  475. package/dist/sync/pairing.d.cts +7 -2
  476. package/dist/sync/pairing.d.cts.map +1 -1
  477. package/dist/sync/pairing.d.ts +7 -2
  478. package/dist/sync/pairing.d.ts.map +1 -1
  479. package/dist/sync/pairing.js +120 -31
  480. package/dist/sync/pairing.js.map +1 -1
  481. package/dist/sync/path-order.cjs +30 -0
  482. package/dist/sync/path-order.cjs.map +1 -0
  483. package/dist/sync/path-order.d.cts +28 -0
  484. package/dist/sync/path-order.d.cts.map +1 -0
  485. package/dist/sync/path-order.d.ts +28 -0
  486. package/dist/sync/path-order.d.ts.map +1 -0
  487. package/dist/sync/path-order.js +29 -0
  488. package/dist/sync/path-order.js.map +1 -0
  489. package/dist/sync/path-safety.cjs +111 -0
  490. package/dist/sync/path-safety.cjs.map +1 -0
  491. package/dist/sync/path-safety.d.cts +78 -0
  492. package/dist/sync/path-safety.d.cts.map +1 -0
  493. package/dist/sync/path-safety.d.ts +78 -0
  494. package/dist/sync/path-safety.d.ts.map +1 -0
  495. package/dist/sync/path-safety.js +105 -0
  496. package/dist/sync/path-safety.js.map +1 -0
  497. package/dist/sync/paths.d.cts +19 -0
  498. package/dist/sync/paths.d.cts.map +1 -0
  499. package/dist/sync/paths.d.ts +19 -0
  500. package/dist/sync/paths.d.ts.map +1 -0
  501. package/dist/sync/policies/compare.cjs +391 -11
  502. package/dist/sync/policies/compare.cjs.map +1 -1
  503. package/dist/sync/policies/compare.d.cts +100 -2
  504. package/dist/sync/policies/compare.d.cts.map +1 -1
  505. package/dist/sync/policies/compare.d.ts +100 -2
  506. package/dist/sync/policies/compare.d.ts.map +1 -1
  507. package/dist/sync/policies/compare.js +389 -13
  508. package/dist/sync/policies/compare.js.map +1 -1
  509. package/dist/sync/policies/index.cjs +70 -65
  510. package/dist/sync/policies/index.cjs.map +1 -1
  511. package/dist/sync/policies/index.d.cts +35 -6
  512. package/dist/sync/policies/index.d.cts.map +1 -1
  513. package/dist/sync/policies/index.d.ts +35 -6
  514. package/dist/sync/policies/index.d.ts.map +1 -1
  515. package/dist/sync/policies/index.js +70 -65
  516. package/dist/sync/policies/index.js.map +1 -1
  517. package/dist/sync/prefix.cjs +96 -0
  518. package/dist/sync/prefix.cjs.map +1 -0
  519. package/dist/sync/prefix.d.cts +55 -0
  520. package/dist/sync/prefix.d.cts.map +1 -0
  521. package/dist/sync/prefix.d.ts +55 -0
  522. package/dist/sync/prefix.d.ts.map +1 -0
  523. package/dist/sync/prefix.js +92 -0
  524. package/dist/sync/prefix.js.map +1 -0
  525. package/dist/sync/regexp-safety.cjs +192 -0
  526. package/dist/sync/regexp-safety.cjs.map +1 -0
  527. package/dist/sync/regexp-safety.d.cts +29 -0
  528. package/dist/sync/regexp-safety.d.cts.map +1 -0
  529. package/dist/sync/regexp-safety.d.ts +29 -0
  530. package/dist/sync/regexp-safety.d.ts.map +1 -0
  531. package/dist/sync/regexp-safety.js +190 -0
  532. package/dist/sync/regexp-safety.js.map +1 -0
  533. package/dist/sync/scan-events.cjs +33 -0
  534. package/dist/sync/scan-events.cjs.map +1 -0
  535. package/dist/sync/scan-events.d.cts +17 -0
  536. package/dist/sync/scan-events.d.cts.map +1 -0
  537. package/dist/sync/scan-events.d.ts +17 -0
  538. package/dist/sync/scan-events.d.ts.map +1 -0
  539. package/dist/sync/scan-events.js +32 -0
  540. package/dist/sync/scan-events.js.map +1 -0
  541. package/dist/sync/scan-limit.cjs +33 -0
  542. package/dist/sync/scan-limit.cjs.map +1 -0
  543. package/dist/sync/scan-limit.d.cts +21 -0
  544. package/dist/sync/scan-limit.d.cts.map +1 -0
  545. package/dist/sync/scan-limit.d.ts +21 -0
  546. package/dist/sync/scan-limit.d.ts.map +1 -0
  547. package/dist/sync/scan-limit.js +31 -0
  548. package/dist/sync/scan-limit.js.map +1 -0
  549. package/dist/sync/scanners/b2.cjs +239 -55
  550. package/dist/sync/scanners/b2.cjs.map +1 -1
  551. package/dist/sync/scanners/b2.d.cts +26 -7
  552. package/dist/sync/scanners/b2.d.cts.map +1 -1
  553. package/dist/sync/scanners/b2.d.ts +26 -7
  554. package/dist/sync/scanners/b2.d.ts.map +1 -1
  555. package/dist/sync/scanners/b2.js +239 -55
  556. package/dist/sync/scanners/b2.js.map +1 -1
  557. package/dist/sync/scanners/local.cjs +215 -56
  558. package/dist/sync/scanners/local.cjs.map +1 -1
  559. package/dist/sync/scanners/local.d.cts +22 -7
  560. package/dist/sync/scanners/local.d.cts.map +1 -1
  561. package/dist/sync/scanners/local.d.ts +22 -7
  562. package/dist/sync/scanners/local.d.ts.map +1 -1
  563. package/dist/sync/scanners/local.js +216 -57
  564. package/dist/sync/scanners/local.js.map +1 -1
  565. package/dist/sync/sha1-metadata.cjs +94 -0
  566. package/dist/sync/sha1-metadata.cjs.map +1 -0
  567. package/dist/sync/sha1-metadata.d.cts +82 -0
  568. package/dist/sync/sha1-metadata.d.cts.map +1 -0
  569. package/dist/sync/sha1-metadata.d.ts +82 -0
  570. package/dist/sync/sha1-metadata.d.ts.map +1 -0
  571. package/dist/sync/sha1-metadata.js +89 -0
  572. package/dist/sync/sha1-metadata.js.map +1 -0
  573. package/dist/sync/sha1-options.cjs +23 -0
  574. package/dist/sync/sha1-options.cjs.map +1 -0
  575. package/dist/sync/sha1-options.d.cts +14 -0
  576. package/dist/sync/sha1-options.d.cts.map +1 -0
  577. package/dist/sync/sha1-options.d.ts +14 -0
  578. package/dist/sync/sha1-options.d.ts.map +1 -0
  579. package/dist/sync/sha1-options.js +21 -0
  580. package/dist/sync/sha1-options.js.map +1 -0
  581. package/dist/sync/synchronizer.cjs +783 -197
  582. package/dist/sync/synchronizer.cjs.map +1 -1
  583. package/dist/sync/synchronizer.d.cts +47 -1
  584. package/dist/sync/synchronizer.d.cts.map +1 -1
  585. package/dist/sync/synchronizer.d.ts +47 -1
  586. package/dist/sync/synchronizer.d.ts.map +1 -1
  587. package/dist/sync/synchronizer.js +780 -173
  588. package/dist/sync/synchronizer.js.map +1 -1
  589. package/dist/sync/types.d.cts +208 -16
  590. package/dist/sync/types.d.cts.map +1 -1
  591. package/dist/sync/types.d.ts +208 -16
  592. package/dist/sync/types.d.ts.map +1 -1
  593. package/dist/types/auth.cjs +80 -56
  594. package/dist/types/auth.cjs.map +1 -1
  595. package/dist/types/auth.d.cts +71 -9
  596. package/dist/types/auth.d.cts.map +1 -1
  597. package/dist/types/auth.d.ts +71 -9
  598. package/dist/types/auth.d.ts.map +1 -1
  599. package/dist/types/auth.js +81 -57
  600. package/dist/types/auth.js.map +1 -1
  601. package/dist/types/backup.d.cts +80 -0
  602. package/dist/types/backup.d.cts.map +1 -0
  603. package/dist/types/backup.d.ts +80 -0
  604. package/dist/types/backup.d.ts.map +1 -0
  605. package/dist/types/bucket.cjs +74 -38
  606. package/dist/types/bucket.cjs.map +1 -1
  607. package/dist/types/bucket.d.cts +4 -2
  608. package/dist/types/bucket.d.cts.map +1 -1
  609. package/dist/types/bucket.d.ts +4 -2
  610. package/dist/types/bucket.d.ts.map +1 -1
  611. package/dist/types/bucket.js +75 -41
  612. package/dist/types/bucket.js.map +1 -1
  613. package/dist/types/download.cjs +62 -0
  614. package/dist/types/download.cjs.map +1 -0
  615. package/dist/types/download.d.cts +98 -0
  616. package/dist/types/download.d.cts.map +1 -1
  617. package/dist/types/download.d.ts +98 -0
  618. package/dist/types/download.d.ts.map +1 -1
  619. package/dist/types/download.js +61 -0
  620. package/dist/types/download.js.map +1 -0
  621. package/dist/types/encryption.cjs +194 -328
  622. package/dist/types/encryption.cjs.map +1 -1
  623. package/dist/types/encryption.d.cts +48 -0
  624. package/dist/types/encryption.d.cts.map +1 -1
  625. package/dist/types/encryption.d.ts +48 -0
  626. package/dist/types/encryption.d.ts.map +1 -1
  627. package/dist/types/encryption.js +192 -311
  628. package/dist/types/encryption.js.map +1 -1
  629. package/dist/types/errors.cjs +56 -0
  630. package/dist/types/errors.cjs.map +1 -0
  631. package/dist/types/errors.d.cts +13 -4
  632. package/dist/types/errors.d.cts.map +1 -1
  633. package/dist/types/errors.d.ts +13 -4
  634. package/dist/types/errors.d.ts.map +1 -1
  635. package/dist/types/errors.js +56 -0
  636. package/dist/types/errors.js.map +1 -0
  637. package/dist/types/file.cjs +36 -19
  638. package/dist/types/file.cjs.map +1 -1
  639. package/dist/types/file.d.cts +17 -4
  640. package/dist/types/file.d.cts.map +1 -1
  641. package/dist/types/file.d.ts +17 -4
  642. package/dist/types/file.d.ts.map +1 -1
  643. package/dist/types/file.js +37 -21
  644. package/dist/types/file.js.map +1 -1
  645. package/dist/types/ids.cjs +83 -9
  646. package/dist/types/ids.cjs.map +1 -1
  647. package/dist/types/ids.d.cts +32 -0
  648. package/dist/types/ids.d.cts.map +1 -1
  649. package/dist/types/ids.d.ts +32 -0
  650. package/dist/types/ids.d.ts.map +1 -1
  651. package/dist/types/ids.js +82 -16
  652. package/dist/types/ids.js.map +1 -1
  653. package/dist/types/index.d.cts +18 -13
  654. package/dist/types/index.d.cts.map +1 -1
  655. package/dist/types/index.d.ts +18 -13
  656. package/dist/types/index.d.ts.map +1 -1
  657. package/dist/types/key.d.cts +44 -8
  658. package/dist/types/key.d.cts.map +1 -1
  659. package/dist/types/key.d.ts +44 -8
  660. package/dist/types/key.d.ts.map +1 -1
  661. package/dist/types/lock.cjs +33 -13
  662. package/dist/types/lock.cjs.map +1 -1
  663. package/dist/types/lock.d.cts +14 -0
  664. package/dist/types/lock.d.cts.map +1 -1
  665. package/dist/types/lock.d.ts +14 -0
  666. package/dist/types/lock.d.ts.map +1 -1
  667. package/dist/types/lock.js +34 -15
  668. package/dist/types/lock.js.map +1 -1
  669. package/dist/types/notifications.cjs +44 -22
  670. package/dist/types/notifications.cjs.map +1 -1
  671. package/dist/types/notifications.d.cts +5 -3
  672. package/dist/types/notifications.d.cts.map +1 -1
  673. package/dist/types/notifications.d.ts +5 -3
  674. package/dist/types/notifications.d.ts.map +1 -1
  675. package/dist/types/notifications.js +45 -23
  676. package/dist/types/notifications.js.map +1 -1
  677. package/dist/types/partner.cjs +32 -0
  678. package/dist/types/partner.cjs.map +1 -0
  679. package/dist/types/partner.d.cts +394 -0
  680. package/dist/types/partner.d.cts.map +1 -0
  681. package/dist/types/partner.d.ts +394 -0
  682. package/dist/types/partner.d.ts.map +1 -0
  683. package/dist/types/partner.js +29 -0
  684. package/dist/types/partner.js.map +1 -0
  685. package/dist/types/upload.d.cts +53 -6
  686. package/dist/types/upload.d.cts.map +1 -1
  687. package/dist/types/upload.d.ts +53 -6
  688. package/dist/types/upload.d.ts.map +1 -1
  689. package/dist/upload/abort-scope.cjs +46 -0
  690. package/dist/upload/abort-scope.cjs.map +1 -0
  691. package/dist/upload/abort-scope.d.cts +26 -0
  692. package/dist/upload/abort-scope.d.cts.map +1 -0
  693. package/dist/upload/abort-scope.d.ts +26 -0
  694. package/dist/upload/abort-scope.d.ts.map +1 -0
  695. package/dist/upload/abort-scope.js +45 -0
  696. package/dist/upload/abort-scope.js.map +1 -0
  697. package/dist/upload/cancel.cjs +183 -8
  698. package/dist/upload/cancel.cjs.map +1 -1
  699. package/dist/upload/cancel.d.cts +110 -2
  700. package/dist/upload/cancel.d.cts.map +1 -1
  701. package/dist/upload/cancel.d.ts +110 -2
  702. package/dist/upload/cancel.d.ts.map +1 -1
  703. package/dist/upload/cancel.js +178 -9
  704. package/dist/upload/cancel.js.map +1 -1
  705. package/dist/upload/concurrency.cjs +79 -52
  706. package/dist/upload/concurrency.cjs.map +1 -1
  707. package/dist/upload/concurrency.js +79 -53
  708. package/dist/upload/concurrency.js.map +1 -1
  709. package/dist/upload/finish.cjs +54 -0
  710. package/dist/upload/finish.cjs.map +1 -0
  711. package/dist/upload/finish.d.cts +26 -0
  712. package/dist/upload/finish.d.cts.map +1 -0
  713. package/dist/upload/finish.d.ts +26 -0
  714. package/dist/upload/finish.d.ts.map +1 -0
  715. package/dist/upload/finish.js +54 -0
  716. package/dist/upload/finish.js.map +1 -0
  717. package/dist/upload/large.cjs +305 -218
  718. package/dist/upload/large.cjs.map +1 -1
  719. package/dist/upload/large.d.cts +90 -9
  720. package/dist/upload/large.d.cts.map +1 -1
  721. package/dist/upload/large.d.ts +90 -9
  722. package/dist/upload/large.d.ts.map +1 -1
  723. package/dist/upload/large.js +305 -218
  724. package/dist/upload/large.js.map +1 -1
  725. package/dist/upload/options.cjs +28 -0
  726. package/dist/upload/options.cjs.map +1 -0
  727. package/dist/upload/options.d.cts +116 -0
  728. package/dist/upload/options.d.cts.map +1 -0
  729. package/dist/upload/options.d.ts +116 -0
  730. package/dist/upload/options.d.ts.map +1 -0
  731. package/dist/upload/options.js +27 -0
  732. package/dist/upload/options.js.map +1 -0
  733. package/dist/upload/resume.cjs +334 -33
  734. package/dist/upload/resume.cjs.map +1 -1
  735. package/dist/upload/resume.d.cts +84 -12
  736. package/dist/upload/resume.d.cts.map +1 -1
  737. package/dist/upload/resume.d.ts +84 -12
  738. package/dist/upload/resume.d.ts.map +1 -1
  739. package/dist/upload/resume.js +331 -33
  740. package/dist/upload/resume.js.map +1 -1
  741. package/dist/upload/retry.cjs +191 -0
  742. package/dist/upload/retry.cjs.map +1 -0
  743. package/dist/upload/retry.d.cts +127 -0
  744. package/dist/upload/retry.d.cts.map +1 -0
  745. package/dist/upload/retry.d.ts +127 -0
  746. package/dist/upload/retry.d.ts.map +1 -0
  747. package/dist/upload/retry.js +187 -0
  748. package/dist/upload/retry.js.map +1 -0
  749. package/dist/upload/single.cjs +69 -44
  750. package/dist/upload/single.cjs.map +1 -1
  751. package/dist/upload/single.d.cts +8 -1
  752. package/dist/upload/single.d.cts.map +1 -1
  753. package/dist/upload/single.d.ts +8 -1
  754. package/dist/upload/single.d.ts.map +1 -1
  755. package/dist/upload/single.js +69 -44
  756. package/dist/upload/single.js.map +1 -1
  757. package/dist/upload/stream.cjs +319 -193
  758. package/dist/upload/stream.cjs.map +1 -1
  759. package/dist/upload/stream.d.cts +9 -1
  760. package/dist/upload/stream.d.cts.map +1 -1
  761. package/dist/upload/stream.d.ts +9 -1
  762. package/dist/upload/stream.d.ts.map +1 -1
  763. package/dist/upload/stream.js +318 -192
  764. package/dist/upload/stream.js.map +1 -1
  765. package/dist/util/abort.cjs +114 -0
  766. package/dist/util/abort.cjs.map +1 -0
  767. package/dist/util/abort.d.cts +65 -0
  768. package/dist/util/abort.d.cts.map +1 -0
  769. package/dist/util/abort.d.ts +65 -0
  770. package/dist/util/abort.d.ts.map +1 -0
  771. package/dist/util/abort.js +109 -0
  772. package/dist/util/abort.js.map +1 -0
  773. package/dist/util/best-effort.cjs +42 -8
  774. package/dist/util/best-effort.cjs.map +1 -1
  775. package/dist/util/best-effort.d.cts +2 -1
  776. package/dist/util/best-effort.d.cts.map +1 -1
  777. package/dist/util/best-effort.d.ts +2 -1
  778. package/dist/util/best-effort.d.ts.map +1 -1
  779. package/dist/util/best-effort.js +43 -9
  780. package/dist/util/best-effort.js.map +1 -1
  781. package/dist/util/bytes.cjs +23 -0
  782. package/dist/util/bytes.cjs.map +1 -0
  783. package/dist/util/bytes.d.cts +15 -0
  784. package/dist/util/bytes.d.cts.map +1 -0
  785. package/dist/util/bytes.d.ts +15 -0
  786. package/dist/util/bytes.d.ts.map +1 -0
  787. package/dist/util/bytes.js +23 -0
  788. package/dist/util/bytes.js.map +1 -0
  789. package/dist/util/crypto.cjs +68 -0
  790. package/dist/util/crypto.cjs.map +1 -0
  791. package/dist/util/crypto.d.cts +26 -0
  792. package/dist/util/crypto.d.cts.map +1 -0
  793. package/dist/util/crypto.d.ts +26 -0
  794. package/dist/util/crypto.d.ts.map +1 -0
  795. package/dist/util/crypto.js +66 -0
  796. package/dist/util/crypto.js.map +1 -0
  797. package/dist/util/defaults.cjs +28 -9
  798. package/dist/util/defaults.cjs.map +1 -1
  799. package/dist/util/defaults.d.cts +2 -0
  800. package/dist/util/defaults.d.cts.map +1 -1
  801. package/dist/util/defaults.d.ts +2 -0
  802. package/dist/util/defaults.d.ts.map +1 -1
  803. package/dist/util/defaults.js +28 -11
  804. package/dist/util/defaults.js.map +1 -1
  805. package/dist/util/error-reason.cjs +41 -0
  806. package/dist/util/error-reason.cjs.map +1 -0
  807. package/dist/util/error-reason.d.cts +9 -0
  808. package/dist/util/error-reason.d.cts.map +1 -0
  809. package/dist/util/error-reason.d.ts +9 -0
  810. package/dist/util/error-reason.d.ts.map +1 -0
  811. package/dist/util/error-reason.js +41 -0
  812. package/dist/util/error-reason.js.map +1 -0
  813. package/dist/util/http.cjs +23 -0
  814. package/dist/util/http.cjs.map +1 -0
  815. package/dist/util/http.d.cts +13 -0
  816. package/dist/util/http.d.cts.map +1 -0
  817. package/dist/util/http.d.ts +13 -0
  818. package/dist/util/http.d.ts.map +1 -0
  819. package/dist/util/http.js +23 -0
  820. package/dist/util/http.js.map +1 -0
  821. package/dist/util/md5.cjs +211 -0
  822. package/dist/util/md5.cjs.map +1 -0
  823. package/dist/util/md5.d.cts +43 -0
  824. package/dist/util/md5.d.cts.map +1 -0
  825. package/dist/util/md5.d.ts +43 -0
  826. package/dist/util/md5.d.ts.map +1 -0
  827. package/dist/util/md5.js +209 -0
  828. package/dist/util/md5.js.map +1 -0
  829. package/dist/util/normalize.cjs +66 -7
  830. package/dist/util/normalize.cjs.map +1 -1
  831. package/dist/util/normalize.d.cts +7 -7
  832. package/dist/util/normalize.d.cts.map +1 -1
  833. package/dist/util/normalize.d.ts +7 -7
  834. package/dist/util/normalize.d.ts.map +1 -1
  835. package/dist/util/normalize.js +67 -10
  836. package/dist/util/normalize.js.map +1 -1
  837. package/dist/util/paginator.cjs +69 -14
  838. package/dist/util/paginator.cjs.map +1 -1
  839. package/dist/util/paginator.d.cts +3 -1
  840. package/dist/util/paginator.d.cts.map +1 -1
  841. package/dist/util/paginator.d.ts +3 -1
  842. package/dist/util/paginator.d.ts.map +1 -1
  843. package/dist/util/paginator.js +70 -16
  844. package/dist/util/paginator.js.map +1 -1
  845. package/dist/util/plan-ranges.cjs +47 -22
  846. package/dist/util/plan-ranges.cjs.map +1 -1
  847. package/dist/util/plan-ranges.js +48 -24
  848. package/dist/util/plan-ranges.js.map +1 -1
  849. package/dist/util/sha1.cjs +27 -0
  850. package/dist/util/sha1.cjs.map +1 -0
  851. package/dist/util/sha1.d.cts +17 -0
  852. package/dist/util/sha1.d.cts.map +1 -0
  853. package/dist/util/sha1.d.ts +17 -0
  854. package/dist/util/sha1.d.ts.map +1 -0
  855. package/dist/util/sha1.js +26 -0
  856. package/dist/util/sha1.js.map +1 -0
  857. package/dist/util/text-codec.cjs +29 -5
  858. package/dist/util/text-codec.cjs.map +1 -1
  859. package/dist/util/text-codec.js +30 -7
  860. package/dist/util/text-codec.js.map +1 -1
  861. package/dist/util/to-error.cjs +18 -4
  862. package/dist/util/to-error.cjs.map +1 -1
  863. package/dist/util/to-error.js +19 -5
  864. package/dist/util/to-error.js.map +1 -1
  865. package/dist/version.cjs +17 -5
  866. package/dist/version.cjs.map +1 -1
  867. package/dist/version.d.cts +3 -3
  868. package/dist/version.d.ts +3 -3
  869. package/dist/version.js +19 -6
  870. package/dist/version.js.map +1 -1
  871. package/package.json +45 -20
  872. package/dist/auth/index.cjs.map +0 -1
  873. package/dist/auth/index.js.map +0 -1
  874. package/dist/index.cjs.map +0 -1
  875. package/dist/index.js.map +0 -1
  876. package/dist/notifications/index.cjs.map +0 -1
  877. package/dist/notifications/index.js.map +0 -1
  878. package/dist/package.json.cjs +0 -9
  879. package/dist/package.json.cjs.map +0 -1
  880. package/dist/package.json.js +0 -9
  881. package/dist/package.json.js.map +0 -1
  882. package/dist/streams/index.cjs.map +0 -1
  883. package/dist/streams/index.js.map +0 -1
  884. package/dist/sync/index.cjs.map +0 -1
  885. package/dist/sync/index.js.map +0 -1
@@ -1,14 +1,394 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
1
+ const require_concurrency = require("../../upload/concurrency.cjs");
2
+ const require_abort = require("../../util/abort.cjs");
3
+ const require_sha1 = require("../../util/sha1.cjs");
4
+ const require_to_error = require("../../util/to-error.cjs");
5
+ const require_local_sha1 = require("../local-sha1.cjs");
6
+ const require_sha1_metadata = require("../sha1-metadata.cjs");
7
+ //#region src/sync/policies/compare.ts
8
+ /**
9
+ * Determines whether two files should be considered different based on the compare mode.
10
+ * For `sha1`, callers that use the low-level policy helpers should first prepare the pair so
11
+ * local hashes and comparable B2 hashes are populated.
12
+ *
13
+ * @param source - The source file metadata.
14
+ * @param dest - The destination file metadata.
15
+ * @param compareMode - The comparison strategy: 'modtime', 'size', 'sha1', or 'none'.
16
+ * @param threshold - Tolerance for the comparison (bytes for size, milliseconds for modtime).
17
+ *
18
+ * @returns `true` if the files are considered different.
19
+ *
20
+ * @throws When `compareMode` is not one of the supported compare modes.
21
+ */
3
22
  function filesAreDifferent(source, dest, compareMode, threshold = 0) {
4
- switch (compareMode) {
5
- case "none":
6
- return false;
7
- case "size":
8
- return Math.abs(source.size - dest.size) > threshold;
9
- case "modtime":
10
- return Math.abs(source.modTimeMillis - dest.modTimeMillis) > threshold;
11
- }
23
+ switch (compareMode) {
24
+ case "none": return false;
25
+ case "size": return Math.abs(source.size - dest.size) > threshold;
26
+ case "sha1": return sha1ValuesAreDifferent(source, dest);
27
+ case "modtime": return Math.abs(source.modTimeMillis - dest.modTimeMillis) > threshold;
28
+ default: throw new Error(`Unsupported compare mode: ${String(compareMode)}`);
29
+ }
12
30
  }
31
+ /**
32
+ * Throws when a runtime compare mode value is unsupported.
33
+ *
34
+ * @param compareMode - User-supplied compare mode.
35
+ *
36
+ * @throws When `compareMode` is not one of the supported values.
37
+ */
38
+ function assertSupportedCompareMode(compareMode) {
39
+ switch (compareMode) {
40
+ case "none":
41
+ case "size":
42
+ case "sha1":
43
+ case "modtime": return;
44
+ default: throw new Error(`Unsupported compare mode: ${String(compareMode)}`);
45
+ }
46
+ }
47
+ function sha1ValuesAreDifferent(source, dest) {
48
+ if (source.size !== dest.size) return true;
49
+ const sourceSha1 = comparableSha1(source);
50
+ const destSha1 = comparableSha1(dest);
51
+ if (sourceSha1.kind === "untrusted" || destSha1.kind === "untrusted") return true;
52
+ if (sourceSha1.kind === "unavailable" || destSha1.kind === "unavailable") return true;
53
+ return sourceSha1.value !== destSha1.value;
54
+ }
55
+ /**
56
+ * Prepares a pair for the selected compare mode.
57
+ *
58
+ * For `sha1`, this fills missing B2 hashes from comparable metadata and, when an explicit local
59
+ * reader is supplied, hashes the local side only when size cannot already prove a difference.
60
+ * Reader failures are converted into per-file sync events instead of aborting the whole run.
61
+ *
62
+ * @param pair - Source/destination pair from {@link zipFolders}.
63
+ * @param compareMode - The comparison strategy.
64
+ * @param options - Optional hashing dependencies and cancellation signal.
65
+ *
66
+ * @returns The prepared pair plus any preparation events.
67
+ */
68
+ async function preparePairForCompare(pair, compareMode, options = {}) {
69
+ assertSupportedCompareMode(compareMode);
70
+ if (compareMode !== "sha1") return readyComparePair(pair);
71
+ const [source, dest] = pair;
72
+ if (source === null || dest === null) return readyComparePair(pair);
73
+ if (source.size !== dest.size) return readyComparePair(pair);
74
+ const metadataPair = [withB2ContentSha1(source), withB2ContentSha1(dest)];
75
+ if (hasUnavailableB2Sha1(metadataPair)) return skipped(metadataPair, unavailableSha1Event(metadataPair));
76
+ if (options.readB2Sha1 === void 0 && hasUntrustedSha1(metadataPair) && !hasVerifiableUntrustedSha1(metadataPair)) return readyComparePair(metadataPair);
77
+ const [metadataSource, metadataDest] = metadataPair;
78
+ if (metadataSource === null || metadataDest === null) return readyComparePair(metadataPair);
79
+ const sourceResult = await prepareLocalPathSha1(metadataSource, options);
80
+ if (sourceResult.aborted) return aborted(metadataPair);
81
+ if (sourceResult.event) return skipped(metadataPair, sourceResult.event, sourceResult.error, sourceResult.bytesHashed);
82
+ const destResult = await prepareLocalPathSha1(metadataDest, options);
83
+ if (destResult.aborted) return aborted([sourceResult.path, destResult.path]);
84
+ if (destResult.event) return skipped([sourceResult.path, destResult.path], destResult.event, destResult.error, sourceResult.bytesHashed);
85
+ const preparedPair = [sourceResult.path, destResult.path];
86
+ const sourceState = comparableSha1(sourceResult.path);
87
+ const destState = comparableSha1(destResult.path);
88
+ const bytesHashed = sourceResult.bytesHashed + destResult.bytesHashed;
89
+ if (sourceState.kind === "unavailable" || destState.kind === "unavailable") return skipped(preparedPair, unavailableSha1Event(preparedPair), void 0, bytesHashed);
90
+ const shouldVerifyB2Bytes = untrustedSha1CouldSuppressTransfer(sourceState, destState);
91
+ const readB2Sha1 = options.readB2Sha1;
92
+ if (shouldVerifyB2Bytes && hasB2Path(preparedPair) && readB2Sha1 !== void 0) return verifyB2Sha1Bytes(preparedPair, {
93
+ ...options,
94
+ readB2Sha1
95
+ }, bytesHashed);
96
+ return readyComparePair(preparedPair, bytesHashed);
97
+ }
98
+ /**
99
+ * Prepares a list of pairs for the selected compare mode with bounded concurrency.
100
+ *
101
+ * @param pairs - Source/destination pairs from {@link zipFolders}.
102
+ * @param compareMode - The comparison strategy.
103
+ * @param options - Optional hashing dependencies, cancellation signal, and concurrency.
104
+ *
105
+ * @returns Prepared results in the same order as the input pairs.
106
+ */
107
+ async function preparePairsForCompare(pairs, compareMode, options = {}) {
108
+ assertSupportedCompareMode(compareMode);
109
+ if (compareMode !== "sha1") return pairs.map((pair) => ({
110
+ originalPair: pair,
111
+ prepared: readyComparePair(pair)
112
+ }));
113
+ const concurrency = normalizeConcurrency(options.concurrency);
114
+ return require_concurrency.mapConcurrent(pairs, concurrency, async (pair) => {
115
+ if (options.signal?.aborted) return {
116
+ originalPair: pair,
117
+ prepared: aborted(pair)
118
+ };
119
+ return {
120
+ originalPair: pair,
121
+ prepared: await preparePairForCompare(pair, compareMode, options)
122
+ };
123
+ });
124
+ }
125
+ async function prepareLocalPathSha1(path, options) {
126
+ if (!isLocalSyncPath(path)) return {
127
+ path,
128
+ bytesHashed: 0,
129
+ bytesVerified: 0,
130
+ aborted: false
131
+ };
132
+ if (options.signal?.aborted) return {
133
+ path,
134
+ bytesHashed: 0,
135
+ bytesVerified: 0,
136
+ aborted: true
137
+ };
138
+ try {
139
+ const state = require_sha1_metadata.syncSha1StateOf(path);
140
+ if (state.kind === "verified") return {
141
+ path: {
142
+ ...path,
143
+ contentSha1: state.value
144
+ },
145
+ bytesHashed: 0,
146
+ bytesVerified: 0,
147
+ aborted: false
148
+ };
149
+ if (state.kind === "unavailable") return {
150
+ path: {
151
+ ...path,
152
+ contentSha1: null
153
+ },
154
+ bytesHashed: 0,
155
+ bytesVerified: 0,
156
+ aborted: false
157
+ };
158
+ const readLocalSha1 = options.readLocalSha1;
159
+ if (readLocalSha1 === void 0) return {
160
+ path: {
161
+ ...path,
162
+ contentSha1: path.contentSha1 ?? null
163
+ },
164
+ bytesHashed: 0,
165
+ bytesVerified: 0,
166
+ aborted: false
167
+ };
168
+ const contentSha1 = await readLocalSha1(path, options.signal, { ...options.sha1ReadTimeoutMillis !== void 0 ? { timeoutMillis: options.sha1ReadTimeoutMillis } : {} });
169
+ return {
170
+ path: {
171
+ ...path,
172
+ contentSha1
173
+ },
174
+ bytesHashed: require_sha1.normalizeVerifiableSha1(contentSha1) === null ? 0 : path.size,
175
+ bytesVerified: 0,
176
+ aborted: false
177
+ };
178
+ } catch (err) {
179
+ if (require_abort.isSignalAbortError(options.signal, err)) return {
180
+ path,
181
+ bytesHashed: 0,
182
+ bytesVerified: 0,
183
+ aborted: true
184
+ };
185
+ const error = require_to_error.toError(err);
186
+ return {
187
+ path,
188
+ bytesHashed: 0,
189
+ event: {
190
+ type: "error",
191
+ path: path.relativePath,
192
+ size: 0,
193
+ message: `failed to hash local file for sha1 comparison: ${require_local_sha1.formatHashError(error)}`
194
+ },
195
+ error,
196
+ bytesVerified: 0,
197
+ aborted: false
198
+ };
199
+ }
200
+ }
201
+ async function verifyB2Sha1Bytes(pair, options, bytesHashed) {
202
+ const [source, dest] = pair;
203
+ /* v8 ignore next -- callers only verify B2 bytes for paired compare results */
204
+ if (source === null || dest === null) return readyComparePair(pair, bytesHashed);
205
+ const sourceResult = await prepareUntrustedB2PathSha1(source, options);
206
+ const sourceBytesVerified = sourceResult.bytesVerified;
207
+ if (sourceResult.aborted) return aborted(pair);
208
+ if (sourceResult.event) return skipped([sourceResult.path, dest], sourceResult.event, sourceResult.error, bytesHashed, sourceBytesVerified);
209
+ const destResult = await prepareUntrustedB2PathSha1(dest, options);
210
+ const bytesVerified = sourceBytesVerified + destResult.bytesVerified;
211
+ /* v8 ignore next -- destination abort mirrors the covered source abort path */
212
+ if (destResult.aborted) return aborted([sourceResult.path, destResult.path]);
213
+ if (destResult.event) return skipped([sourceResult.path, destResult.path], destResult.event, destResult.error, bytesHashed, bytesVerified);
214
+ return readyComparePair([sourceResult.path, destResult.path], bytesHashed, bytesVerified);
215
+ }
216
+ async function prepareUntrustedB2PathSha1(path, options) {
217
+ if (!isB2SyncPath(path) || comparableSha1(path).kind !== "untrusted") return {
218
+ path,
219
+ bytesHashed: 0,
220
+ bytesVerified: 0,
221
+ aborted: false
222
+ };
223
+ return prepareB2PathSha1(path, options);
224
+ }
225
+ async function prepareB2PathSha1(path, options) {
226
+ /* v8 ignore next -- pre-aborted B2 reads are covered at pair level */
227
+ if (options.signal?.aborted) return {
228
+ path,
229
+ bytesHashed: 0,
230
+ bytesVerified: 0,
231
+ aborted: true
232
+ };
233
+ try {
234
+ const result = await options.readB2Sha1(path, options.signal);
235
+ const contentSha1 = typeof result === "object" && result !== null ? result.contentSha1 : result;
236
+ const bytesVerified = typeof result === "object" && result !== null ? Math.max(0, result.bytesRead) : 0;
237
+ const preparedPath = {
238
+ ...path,
239
+ contentSha1,
240
+ contentSha1State: require_sha1_metadata.syncSha1StateOf({ contentSha1 })
241
+ };
242
+ if (contentSha1 === null) return {
243
+ path: preparedPath,
244
+ bytesHashed: 0,
245
+ bytesVerified,
246
+ event: unavailableSha1PathEvent(path),
247
+ aborted: false
248
+ };
249
+ return {
250
+ path: preparedPath,
251
+ bytesHashed: 0,
252
+ bytesVerified,
253
+ aborted: false
254
+ };
255
+ } catch (err) {
256
+ if (require_abort.isSignalAbortError(options.signal, err)) return {
257
+ path,
258
+ bytesHashed: 0,
259
+ bytesVerified: 0,
260
+ aborted: true
261
+ };
262
+ const error = require_to_error.toError(err);
263
+ return {
264
+ path,
265
+ bytesHashed: 0,
266
+ bytesVerified: 0,
267
+ event: {
268
+ type: "skip",
269
+ path: path.relativePath,
270
+ size: 0,
271
+ message: `sha1 comparison skipped because B2 verification failed: ${require_local_sha1.formatHashError(error)}`
272
+ },
273
+ aborted: false
274
+ };
275
+ }
276
+ }
277
+ function comparableSha1(path) {
278
+ const state = require_sha1_metadata.syncSha1StateOf(path);
279
+ if (state.kind === "verified") return {
280
+ kind: "verified",
281
+ value: state.value
282
+ };
283
+ if (state.kind === "untrusted") return {
284
+ kind: "untrusted",
285
+ value: state.value
286
+ };
287
+ return { kind: "unavailable" };
288
+ }
289
+ function untrustedSha1CouldSuppressTransfer(source, dest) {
290
+ if (source.kind === "untrusted" && dest.kind === "verified") return source.value === dest.value;
291
+ if (dest.kind === "untrusted" && source.kind === "verified") return dest.value === source.value;
292
+ if (source.kind === "untrusted" && dest.kind === "untrusted") return source.value !== null && source.value === dest.value;
293
+ return false;
294
+ }
295
+ function withB2ContentSha1(path) {
296
+ if (!isB2SyncPath(path) || path.contentSha1 !== void 0 || path.contentSha1State !== void 0) return path;
297
+ const contentSha1 = require_sha1_metadata.selectB2ComparableSha1(path.selectedVersion);
298
+ return {
299
+ ...path,
300
+ contentSha1,
301
+ contentSha1State: require_sha1_metadata.syncSha1StateOf({ contentSha1 })
302
+ };
303
+ }
304
+ function hasUnavailableB2Sha1(pair) {
305
+ const [source, dest] = pair;
306
+ return source !== null && isB2SyncPath(source) && comparableSha1(source).kind === "unavailable" || dest !== null && isB2SyncPath(dest) && comparableSha1(dest).kind === "unavailable";
307
+ }
308
+ function hasUntrustedSha1(pair) {
309
+ const [source, dest] = pair;
310
+ return source !== null && comparableSha1(source).kind === "untrusted" || dest !== null && comparableSha1(dest).kind === "untrusted";
311
+ }
312
+ function hasVerifiableUntrustedSha1(pair) {
313
+ const [source, dest] = pair;
314
+ return source !== null && verifiableUntrustedSha1(source) || dest !== null && verifiableUntrustedSha1(dest);
315
+ }
316
+ function verifiableUntrustedSha1(path) {
317
+ const state = comparableSha1(path);
318
+ return state.kind === "untrusted" && state.value !== null;
319
+ }
320
+ function hasB2Path(pair) {
321
+ const [source, dest] = pair;
322
+ return source !== null && isB2SyncPath(source) || dest !== null && isB2SyncPath(dest);
323
+ }
324
+ function isB2SyncPath(path) {
325
+ return "selectedVersion" in path;
326
+ }
327
+ function isLocalSyncPath(path) {
328
+ return "absolutePath" in path;
329
+ }
330
+ /**
331
+ * Creates a successful no-op compare preparation result for a pair.
332
+ *
333
+ * @param pair - Source/destination pair from {@link zipFolders}.
334
+ * @param bytesHashed - Local file bytes read while preparing the pair.
335
+ * @param bytesVerified - B2 bytes read while verifying untrusted SHA-1 metadata.
336
+ *
337
+ * @returns A ready preparation result that allows action generation.
338
+ */
339
+ function readyComparePair(pair, bytesHashed = 0, bytesVerified = 0) {
340
+ return {
341
+ pair,
342
+ events: [],
343
+ errors: [],
344
+ bytesHashed,
345
+ bytesVerified,
346
+ skipActionGeneration: false,
347
+ aborted: false
348
+ };
349
+ }
350
+ function skipped(pair, event, error, bytesHashed = 0, bytesVerified = 0) {
351
+ return {
352
+ pair,
353
+ events: [event],
354
+ errors: error !== void 0 ? [error] : [],
355
+ bytesHashed,
356
+ bytesVerified,
357
+ skipActionGeneration: true,
358
+ aborted: false
359
+ };
360
+ }
361
+ function aborted(pair) {
362
+ return {
363
+ pair,
364
+ events: [],
365
+ errors: [],
366
+ bytesHashed: 0,
367
+ bytesVerified: 0,
368
+ skipActionGeneration: true,
369
+ aborted: true
370
+ };
371
+ }
372
+ function unavailableSha1Event(pair) {
373
+ return unavailableSha1PathEvent({ relativePath: (pair[0] ?? pair[1])?.relativePath ?? "" });
374
+ }
375
+ function unavailableSha1PathEvent(path) {
376
+ return {
377
+ type: "skip",
378
+ path: path.relativePath,
379
+ size: 0,
380
+ message: "sha1 comparison skipped because a verifiable SHA-1 is unavailable"
381
+ };
382
+ }
383
+ function normalizeConcurrency(value) {
384
+ if (value === void 0 || !Number.isFinite(value) || value < 1) return 1;
385
+ return Math.max(1, Math.floor(value));
386
+ }
387
+ //#endregion
388
+ exports.assertSupportedCompareMode = assertSupportedCompareMode;
13
389
  exports.filesAreDifferent = filesAreDifferent;
14
- //# sourceMappingURL=compare.cjs.map
390
+ exports.preparePairForCompare = preparePairForCompare;
391
+ exports.preparePairsForCompare = preparePairsForCompare;
392
+ exports.readyComparePair = readyComparePair;
393
+
394
+ //# sourceMappingURL=compare.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"compare.cjs","sources":["../../../src/sync/policies/compare.ts"],"sourcesContent":["import type { CompareMode, SyncPath } from '../types.ts'\n\n/**\n * Determines whether two files should be considered different based on the compare mode.\n *\n * @param source - The source file metadata.\n * @param dest - The destination file metadata.\n * @param compareMode - The comparison strategy: 'modtime', 'size', or 'none'.\n * @param threshold - Tolerance for the comparison (bytes for size, milliseconds for modtime).\n *\n * @returns `true` if the files are considered different.\n */\nexport function filesAreDifferent(\n source: SyncPath,\n dest: SyncPath,\n compareMode: CompareMode,\n threshold = 0,\n): boolean {\n switch (compareMode) {\n case 'none':\n return false\n case 'size':\n return Math.abs(source.size - dest.size) > threshold\n case 'modtime':\n return Math.abs(source.modTimeMillis - dest.modTimeMillis) > threshold\n }\n}\n"],"names":[],"mappings":";;AAYO,SAAS,kBACd,QACA,MACA,aACA,YAAY,GACH;AACT,UAAQ,aAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,KAAK,IAAI,OAAO,OAAO,KAAK,IAAI,IAAI;AAAA,IAC7C,KAAK;AACH,aAAO,KAAK,IAAI,OAAO,gBAAgB,KAAK,aAAa,IAAI;AAAA,EAAA;AAEnE;;"}
1
+ {"version":3,"file":"compare.cjs","names":[],"sources":["../../../src/sync/policies/compare.ts"],"sourcesContent":["import { mapConcurrent } from '../../upload/concurrency.ts'\nimport { isSignalAbortError } from '../../util/abort.ts'\nimport { normalizeVerifiableSha1 } from '../../util/sha1.ts'\nimport { toError } from '../../util/to-error.ts'\nimport { formatHashError, type LocalSha1Reader } from '../local-sha1.ts'\nimport type { SyncPair } from '../pairing.ts'\nimport { selectB2ComparableSha1, syncSha1StateOf } from '../sha1-metadata.ts'\nimport type {\n B2SyncPath,\n CompareMode,\n LocalSyncPath,\n SyncEvent,\n SyncPath,\n SyncSkipEvent,\n} from '../types.ts'\n\nexport { selectB2ComparableSha1 } from '../sha1-metadata.ts'\n\n/** Result from a B2 SHA-1 verification read. */\nexport interface B2Sha1ReadResult {\n /** SHA-1 digest of the selected B2 bytes, or null when unavailable. */\n readonly contentSha1: string | null\n /** Number of B2 bytes downloaded and hashed while verifying. */\n readonly bytesRead: number\n}\n\n/** Reads a B2 file and returns the SHA-1 digest of its actual bytes, or null when unavailable. */\nexport type B2Sha1Reader = (\n path: B2SyncPath,\n signal?: AbortSignal,\n) => Promise<string | null | B2Sha1ReadResult>\n\n/** Options for preparing a file pair before comparison. */\nexport interface PreparePairForCompareOptions {\n /** Signal used to abort local file hashing. */\n readonly signal?: AbortSignal\n /** Optional idle/no-progress timeout for local SHA-1 reads. */\n readonly sha1ReadTimeoutMillis?: number\n /** Optional local hashing override for tests or custom runtimes. */\n readonly readLocalSha1?: LocalSha1Reader\n /** Optional B2 hashing override used to verify metadata matches before skipping. */\n readonly readB2Sha1?: B2Sha1Reader\n}\n\n/** Options for preparing multiple file pairs before comparison. */\nexport interface PreparePairsForCompareOptions extends PreparePairForCompareOptions {\n /** Maximum number of file pairs to prepare concurrently. */\n readonly concurrency?: number\n}\n\n/** Result of preparing a file pair before policy comparison. */\nexport interface ComparePreparationResult {\n /** The pair with compare-mode metadata populated where possible. */\n readonly pair: SyncPair\n /** Events surfaced while preparing the pair, such as per-file hash errors or skips. */\n readonly events: readonly SyncEvent[]\n /** Errors surfaced while preparing the pair. These contribute to the final summary. */\n readonly errors: readonly Error[]\n /** Local file bytes read for hashing while preparing this pair. */\n readonly bytesHashed: number\n /** B2 bytes read for untrusted metadata verification while preparing this pair. */\n readonly bytesVerified: number\n /** Whether action generation should be skipped for this pair. */\n readonly skipActionGeneration: boolean\n /** Whether preparation stopped because the abort signal fired. */\n readonly aborted: boolean\n}\n\n/** A prepared pair result with the original pair retained for event context. */\nexport interface PreparedComparePair {\n /** Original pair from {@link zipFolders}. */\n readonly originalPair: SyncPair\n /** Preparation result for the original pair. */\n readonly prepared: ComparePreparationResult\n}\n\n/**\n * Determines whether two files should be considered different based on the compare mode.\n * For `sha1`, callers that use the low-level policy helpers should first prepare the pair so\n * local hashes and comparable B2 hashes are populated.\n *\n * @param source - The source file metadata.\n * @param dest - The destination file metadata.\n * @param compareMode - The comparison strategy: 'modtime', 'size', 'sha1', or 'none'.\n * @param threshold - Tolerance for the comparison (bytes for size, milliseconds for modtime).\n *\n * @returns `true` if the files are considered different.\n *\n * @throws When `compareMode` is not one of the supported compare modes.\n */\nexport function filesAreDifferent(\n source: SyncPath,\n dest: SyncPath,\n compareMode: CompareMode,\n threshold = 0,\n): boolean {\n switch (compareMode) {\n case 'none':\n return false\n case 'size':\n return Math.abs(source.size - dest.size) > threshold\n case 'sha1':\n return sha1ValuesAreDifferent(source, dest)\n case 'modtime':\n return Math.abs(source.modTimeMillis - dest.modTimeMillis) > threshold\n default:\n throw new Error(`Unsupported compare mode: ${String(compareMode)}`)\n }\n}\n\n/**\n * Throws when a runtime compare mode value is unsupported.\n *\n * @param compareMode - User-supplied compare mode.\n *\n * @throws When `compareMode` is not one of the supported values.\n */\nexport function assertSupportedCompareMode(\n compareMode: unknown,\n): asserts compareMode is CompareMode {\n switch (compareMode) {\n case 'none':\n case 'size':\n case 'sha1':\n case 'modtime':\n return\n default:\n throw new Error(`Unsupported compare mode: ${String(compareMode)}`)\n }\n}\n\nfunction sha1ValuesAreDifferent(source: SyncPath, dest: SyncPath): boolean {\n if (source.size !== dest.size) return true\n\n const sourceSha1 = comparableSha1(source)\n const destSha1 = comparableSha1(dest)\n if (sourceSha1.kind === 'untrusted' || destSha1.kind === 'untrusted') return true\n if (sourceSha1.kind === 'unavailable' || destSha1.kind === 'unavailable') return true\n return sourceSha1.value !== destSha1.value\n}\n\n/**\n * Prepares a pair for the selected compare mode.\n *\n * For `sha1`, this fills missing B2 hashes from comparable metadata and, when an explicit local\n * reader is supplied, hashes the local side only when size cannot already prove a difference.\n * Reader failures are converted into per-file sync events instead of aborting the whole run.\n *\n * @param pair - Source/destination pair from {@link zipFolders}.\n * @param compareMode - The comparison strategy.\n * @param options - Optional hashing dependencies and cancellation signal.\n *\n * @returns The prepared pair plus any preparation events.\n */\nexport async function preparePairForCompare(\n pair: SyncPair,\n compareMode: CompareMode,\n options: PreparePairForCompareOptions = {},\n): Promise<ComparePreparationResult> {\n assertSupportedCompareMode(compareMode)\n if (compareMode !== 'sha1') return readyComparePair(pair)\n\n const [source, dest] = pair\n if (source === null || dest === null) return readyComparePair(pair)\n if (source.size !== dest.size) return readyComparePair(pair)\n\n const metadataPair: SyncPair = [withB2ContentSha1(source), withB2ContentSha1(dest)]\n if (hasUnavailableB2Sha1(metadataPair)) {\n return skipped(metadataPair, unavailableSha1Event(metadataPair))\n }\n if (\n options.readB2Sha1 === undefined &&\n hasUntrustedSha1(metadataPair) &&\n !hasVerifiableUntrustedSha1(metadataPair)\n ) {\n return readyComparePair(metadataPair)\n }\n\n const [metadataSource, metadataDest] = metadataPair\n if (metadataSource === null || metadataDest === null) return readyComparePair(metadataPair)\n\n const sourceResult = await prepareLocalPathSha1(metadataSource, options)\n if (sourceResult.aborted) return aborted(metadataPair)\n if (sourceResult.event) {\n return skipped(metadataPair, sourceResult.event, sourceResult.error, sourceResult.bytesHashed)\n }\n\n const destResult = await prepareLocalPathSha1(metadataDest, options)\n if (destResult.aborted) return aborted([sourceResult.path, destResult.path])\n if (destResult.event) {\n return skipped(\n [sourceResult.path, destResult.path],\n destResult.event,\n destResult.error,\n sourceResult.bytesHashed,\n )\n }\n\n const preparedPair: SyncPair = [sourceResult.path, destResult.path]\n const sourceState = comparableSha1(sourceResult.path)\n const destState = comparableSha1(destResult.path)\n const bytesHashed = sourceResult.bytesHashed + destResult.bytesHashed\n\n if (sourceState.kind === 'unavailable' || destState.kind === 'unavailable') {\n return skipped(preparedPair, unavailableSha1Event(preparedPair), undefined, bytesHashed)\n }\n\n const shouldVerifyB2Bytes = untrustedSha1CouldSuppressTransfer(sourceState, destState)\n const readB2Sha1 = options.readB2Sha1\n if (shouldVerifyB2Bytes && hasB2Path(preparedPair) && readB2Sha1 !== undefined) {\n return verifyB2Sha1Bytes(preparedPair, { ...options, readB2Sha1 }, bytesHashed)\n }\n\n return readyComparePair(preparedPair, bytesHashed)\n}\n\n/**\n * Prepares a list of pairs for the selected compare mode with bounded concurrency.\n *\n * @param pairs - Source/destination pairs from {@link zipFolders}.\n * @param compareMode - The comparison strategy.\n * @param options - Optional hashing dependencies, cancellation signal, and concurrency.\n *\n * @returns Prepared results in the same order as the input pairs.\n */\nexport async function preparePairsForCompare(\n pairs: readonly SyncPair[],\n compareMode: CompareMode,\n options: PreparePairsForCompareOptions = {},\n): Promise<PreparedComparePair[]> {\n assertSupportedCompareMode(compareMode)\n if (compareMode !== 'sha1') {\n return pairs.map((pair) => ({ originalPair: pair, prepared: readyComparePair(pair) }))\n }\n\n const concurrency = normalizeConcurrency(options.concurrency)\n return mapConcurrent(pairs, concurrency, async (pair): Promise<PreparedComparePair> => {\n if (options.signal?.aborted) return { originalPair: pair, prepared: aborted(pair) }\n return {\n originalPair: pair,\n prepared: await preparePairForCompare(pair, compareMode, options),\n }\n })\n}\n\ntype Sha1State =\n | { readonly kind: 'verified'; readonly value: string }\n | { readonly kind: 'untrusted'; readonly value: string | null }\n | { readonly kind: 'unavailable' }\n\ninterface PreparedPath {\n readonly path: SyncPath\n readonly bytesHashed: number\n readonly bytesVerified: number\n readonly event?: SyncEvent\n readonly error?: Error\n readonly aborted: boolean\n}\n\nasync function prepareLocalPathSha1(\n path: SyncPath,\n options: PreparePairForCompareOptions,\n): Promise<PreparedPath> {\n if (!isLocalSyncPath(path)) {\n return { path, bytesHashed: 0, bytesVerified: 0, aborted: false }\n }\n\n if (options.signal?.aborted) return { path, bytesHashed: 0, bytesVerified: 0, aborted: true }\n\n try {\n const state = syncSha1StateOf(path)\n if (state.kind === 'verified') {\n return {\n path: { ...path, contentSha1: state.value },\n bytesHashed: 0,\n bytesVerified: 0,\n aborted: false,\n }\n }\n if (state.kind === 'unavailable') {\n return {\n path: { ...path, contentSha1: null },\n bytesHashed: 0,\n bytesVerified: 0,\n aborted: false,\n }\n }\n\n const readLocalSha1 = options.readLocalSha1\n if (readLocalSha1 === undefined) {\n return {\n path: { ...path, contentSha1: path.contentSha1 ?? null },\n bytesHashed: 0,\n bytesVerified: 0,\n aborted: false,\n }\n }\n const contentSha1 = await readLocalSha1(path, options.signal, {\n ...(options.sha1ReadTimeoutMillis !== undefined\n ? { timeoutMillis: options.sha1ReadTimeoutMillis }\n : {}),\n })\n return {\n path: {\n ...path,\n contentSha1,\n },\n bytesHashed: normalizeVerifiableSha1(contentSha1) === null ? 0 : path.size,\n bytesVerified: 0,\n aborted: false,\n }\n } catch (err) {\n if (isSignalAbortError(options.signal, err)) {\n return { path, bytesHashed: 0, bytesVerified: 0, aborted: true }\n }\n const error = toError(err)\n return {\n path,\n bytesHashed: 0,\n event: {\n type: 'error',\n path: path.relativePath,\n size: 0,\n message: `failed to hash local file for sha1 comparison: ${formatHashError(error)}`,\n },\n error,\n bytesVerified: 0,\n aborted: false,\n }\n }\n}\n\nasync function verifyB2Sha1Bytes(\n pair: SyncPair,\n options: PreparePairForCompareOptions & { readonly readB2Sha1: B2Sha1Reader },\n bytesHashed: number,\n): Promise<ComparePreparationResult> {\n const [source, dest] = pair\n /* v8 ignore next -- callers only verify B2 bytes for paired compare results */\n if (source === null || dest === null) return readyComparePair(pair, bytesHashed)\n\n const sourceResult = await prepareUntrustedB2PathSha1(source, options)\n const sourceBytesVerified = sourceResult.bytesVerified\n if (sourceResult.aborted) return aborted(pair)\n if (sourceResult.event) {\n return skipped(\n [sourceResult.path, dest],\n sourceResult.event,\n sourceResult.error,\n bytesHashed,\n sourceBytesVerified,\n )\n }\n\n const destResult = await prepareUntrustedB2PathSha1(dest, options)\n const bytesVerified = sourceBytesVerified + destResult.bytesVerified\n /* v8 ignore next -- destination abort mirrors the covered source abort path */\n if (destResult.aborted) return aborted([sourceResult.path, destResult.path])\n if (destResult.event) {\n return skipped(\n [sourceResult.path, destResult.path],\n destResult.event,\n destResult.error,\n bytesHashed,\n bytesVerified,\n )\n }\n\n return readyComparePair([sourceResult.path, destResult.path], bytesHashed, bytesVerified)\n}\n\nasync function prepareUntrustedB2PathSha1(\n path: SyncPath,\n options: PreparePairForCompareOptions & { readonly readB2Sha1: B2Sha1Reader },\n): Promise<PreparedPath> {\n if (!isB2SyncPath(path) || comparableSha1(path).kind !== 'untrusted') {\n return { path, bytesHashed: 0, bytesVerified: 0, aborted: false }\n }\n return prepareB2PathSha1(path, options)\n}\n\nasync function prepareB2PathSha1(\n path: B2SyncPath,\n options: PreparePairForCompareOptions & { readonly readB2Sha1: B2Sha1Reader },\n): Promise<PreparedPath> {\n /* v8 ignore next -- pre-aborted B2 reads are covered at pair level */\n if (options.signal?.aborted) return { path, bytesHashed: 0, bytesVerified: 0, aborted: true }\n\n try {\n const result = await options.readB2Sha1(path, options.signal)\n const contentSha1 = typeof result === 'object' && result !== null ? result.contentSha1 : result\n const bytesVerified =\n typeof result === 'object' && result !== null ? Math.max(0, result.bytesRead) : 0\n const preparedPath = {\n ...path,\n contentSha1,\n contentSha1State: syncSha1StateOf({ contentSha1 }),\n }\n if (contentSha1 === null) {\n return {\n path: preparedPath,\n bytesHashed: 0,\n bytesVerified,\n event: unavailableSha1PathEvent(path),\n aborted: false,\n }\n }\n return {\n path: preparedPath,\n bytesHashed: 0,\n bytesVerified,\n aborted: false,\n }\n } catch (err) {\n if (isSignalAbortError(options.signal, err)) {\n return { path, bytesHashed: 0, bytesVerified: 0, aborted: true }\n }\n const error = toError(err)\n return {\n path,\n bytesHashed: 0,\n bytesVerified: 0,\n event: {\n type: 'skip',\n path: path.relativePath,\n size: 0,\n message: `sha1 comparison skipped because B2 verification failed: ${formatHashError(error)}`,\n },\n aborted: false,\n }\n }\n}\n\nfunction comparableSha1(path: SyncPath): Sha1State {\n const state = syncSha1StateOf(path)\n if (state.kind === 'verified') return { kind: 'verified', value: state.value }\n if (state.kind === 'untrusted') return { kind: 'untrusted', value: state.value }\n return { kind: 'unavailable' }\n}\n\nfunction untrustedSha1CouldSuppressTransfer(source: Sha1State, dest: Sha1State): boolean {\n if (source.kind === 'untrusted' && dest.kind === 'verified') return source.value === dest.value\n if (dest.kind === 'untrusted' && source.kind === 'verified') return dest.value === source.value\n if (source.kind === 'untrusted' && dest.kind === 'untrusted') {\n return source.value !== null && source.value === dest.value\n }\n return false\n}\n\nfunction withB2ContentSha1(path: SyncPath): SyncPath {\n if (\n !isB2SyncPath(path) ||\n path.contentSha1 !== undefined ||\n path.contentSha1State !== undefined\n ) {\n return path\n }\n const contentSha1 = selectB2ComparableSha1(path.selectedVersion)\n return { ...path, contentSha1, contentSha1State: syncSha1StateOf({ contentSha1 }) }\n}\n\nfunction hasUnavailableB2Sha1(pair: SyncPair): boolean {\n const [source, dest] = pair\n return (\n (source !== null && isB2SyncPath(source) && comparableSha1(source).kind === 'unavailable') ||\n (dest !== null && isB2SyncPath(dest) && comparableSha1(dest).kind === 'unavailable')\n )\n}\n\nfunction hasUntrustedSha1(pair: SyncPair): boolean {\n const [source, dest] = pair\n return (\n (source !== null && comparableSha1(source).kind === 'untrusted') ||\n (dest !== null && comparableSha1(dest).kind === 'untrusted')\n )\n}\n\nfunction hasVerifiableUntrustedSha1(pair: SyncPair): boolean {\n const [source, dest] = pair\n return (\n (source !== null && verifiableUntrustedSha1(source)) ||\n (dest !== null && verifiableUntrustedSha1(dest))\n )\n}\n\nfunction verifiableUntrustedSha1(path: SyncPath): boolean {\n const state = comparableSha1(path)\n return state.kind === 'untrusted' && state.value !== null\n}\n\nfunction hasB2Path(pair: SyncPair): boolean {\n const [source, dest] = pair\n return (source !== null && isB2SyncPath(source)) || (dest !== null && isB2SyncPath(dest))\n}\n\nfunction isB2SyncPath(path: SyncPath): path is B2SyncPath {\n return 'selectedVersion' in path\n}\n\nfunction isLocalSyncPath(path: SyncPath): path is LocalSyncPath {\n return 'absolutePath' in path\n}\n\n/**\n * Creates a successful no-op compare preparation result for a pair.\n *\n * @param pair - Source/destination pair from {@link zipFolders}.\n * @param bytesHashed - Local file bytes read while preparing the pair.\n * @param bytesVerified - B2 bytes read while verifying untrusted SHA-1 metadata.\n *\n * @returns A ready preparation result that allows action generation.\n */\nexport function readyComparePair(\n pair: SyncPair,\n bytesHashed = 0,\n bytesVerified = 0,\n): ComparePreparationResult {\n return {\n pair,\n events: [],\n errors: [],\n bytesHashed,\n bytesVerified,\n skipActionGeneration: false,\n aborted: false,\n }\n}\n\nfunction skipped(\n pair: SyncPair,\n event: SyncEvent,\n error?: Error,\n bytesHashed = 0,\n bytesVerified = 0,\n): ComparePreparationResult {\n return {\n pair,\n events: [event],\n errors: error !== undefined ? [error] : [],\n bytesHashed,\n bytesVerified,\n skipActionGeneration: true,\n aborted: false,\n }\n}\n\nfunction aborted(pair: SyncPair): ComparePreparationResult {\n return {\n pair,\n events: [],\n errors: [],\n bytesHashed: 0,\n bytesVerified: 0,\n skipActionGeneration: true,\n aborted: true,\n }\n}\n\nfunction unavailableSha1Event(pair: SyncPair): SyncSkipEvent {\n /* v8 ignore next -- unavailable SHA-1 events always have at least one side */\n const path = (pair[0] ?? pair[1])?.relativePath ?? ''\n return unavailableSha1PathEvent({ relativePath: path })\n}\n\nfunction unavailableSha1PathEvent(path: Pick<SyncPath, 'relativePath'>): SyncSkipEvent {\n return {\n type: 'skip',\n path: path.relativePath,\n size: 0,\n message: 'sha1 comparison skipped because a verifiable SHA-1 is unavailable',\n }\n}\n\nfunction normalizeConcurrency(value: number | undefined): number {\n if (value === undefined || !Number.isFinite(value) || value < 1) return 1\n return Math.max(1, Math.floor(value))\n}\n"],"mappings":"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"}
@@ -1,13 +1,111 @@
1
- import { CompareMode, SyncPath } from '../types.js';
1
+ import { LocalSha1Reader } from '../local-sha1.js';
2
+ import { SyncPair } from '../pairing.js';
3
+ import { B2SyncPath, CompareMode, SyncEvent, SyncPath } from '../types.js';
4
+ export { selectB2ComparableSha1 } from '../sha1-metadata.js';
5
+ /** Result from a B2 SHA-1 verification read. */
6
+ export interface B2Sha1ReadResult {
7
+ /** SHA-1 digest of the selected B2 bytes, or null when unavailable. */
8
+ readonly contentSha1: string | null;
9
+ /** Number of B2 bytes downloaded and hashed while verifying. */
10
+ readonly bytesRead: number;
11
+ }
12
+ /** Reads a B2 file and returns the SHA-1 digest of its actual bytes, or null when unavailable. */
13
+ export type B2Sha1Reader = (path: B2SyncPath, signal?: AbortSignal) => Promise<string | null | B2Sha1ReadResult>;
14
+ /** Options for preparing a file pair before comparison. */
15
+ export interface PreparePairForCompareOptions {
16
+ /** Signal used to abort local file hashing. */
17
+ readonly signal?: AbortSignal;
18
+ /** Optional idle/no-progress timeout for local SHA-1 reads. */
19
+ readonly sha1ReadTimeoutMillis?: number;
20
+ /** Optional local hashing override for tests or custom runtimes. */
21
+ readonly readLocalSha1?: LocalSha1Reader;
22
+ /** Optional B2 hashing override used to verify metadata matches before skipping. */
23
+ readonly readB2Sha1?: B2Sha1Reader;
24
+ }
25
+ /** Options for preparing multiple file pairs before comparison. */
26
+ export interface PreparePairsForCompareOptions extends PreparePairForCompareOptions {
27
+ /** Maximum number of file pairs to prepare concurrently. */
28
+ readonly concurrency?: number;
29
+ }
30
+ /** Result of preparing a file pair before policy comparison. */
31
+ export interface ComparePreparationResult {
32
+ /** The pair with compare-mode metadata populated where possible. */
33
+ readonly pair: SyncPair;
34
+ /** Events surfaced while preparing the pair, such as per-file hash errors or skips. */
35
+ readonly events: readonly SyncEvent[];
36
+ /** Errors surfaced while preparing the pair. These contribute to the final summary. */
37
+ readonly errors: readonly Error[];
38
+ /** Local file bytes read for hashing while preparing this pair. */
39
+ readonly bytesHashed: number;
40
+ /** B2 bytes read for untrusted metadata verification while preparing this pair. */
41
+ readonly bytesVerified: number;
42
+ /** Whether action generation should be skipped for this pair. */
43
+ readonly skipActionGeneration: boolean;
44
+ /** Whether preparation stopped because the abort signal fired. */
45
+ readonly aborted: boolean;
46
+ }
47
+ /** A prepared pair result with the original pair retained for event context. */
48
+ export interface PreparedComparePair {
49
+ /** Original pair from {@link zipFolders}. */
50
+ readonly originalPair: SyncPair;
51
+ /** Preparation result for the original pair. */
52
+ readonly prepared: ComparePreparationResult;
53
+ }
2
54
  /**
3
55
  * Determines whether two files should be considered different based on the compare mode.
56
+ * For `sha1`, callers that use the low-level policy helpers should first prepare the pair so
57
+ * local hashes and comparable B2 hashes are populated.
4
58
  *
5
59
  * @param source - The source file metadata.
6
60
  * @param dest - The destination file metadata.
7
- * @param compareMode - The comparison strategy: 'modtime', 'size', or 'none'.
61
+ * @param compareMode - The comparison strategy: 'modtime', 'size', 'sha1', or 'none'.
8
62
  * @param threshold - Tolerance for the comparison (bytes for size, milliseconds for modtime).
9
63
  *
10
64
  * @returns `true` if the files are considered different.
65
+ *
66
+ * @throws When `compareMode` is not one of the supported compare modes.
11
67
  */
12
68
  export declare function filesAreDifferent(source: SyncPath, dest: SyncPath, compareMode: CompareMode, threshold?: number): boolean;
69
+ /**
70
+ * Throws when a runtime compare mode value is unsupported.
71
+ *
72
+ * @param compareMode - User-supplied compare mode.
73
+ *
74
+ * @throws When `compareMode` is not one of the supported values.
75
+ */
76
+ export declare function assertSupportedCompareMode(compareMode: unknown): asserts compareMode is CompareMode;
77
+ /**
78
+ * Prepares a pair for the selected compare mode.
79
+ *
80
+ * For `sha1`, this fills missing B2 hashes from comparable metadata and, when an explicit local
81
+ * reader is supplied, hashes the local side only when size cannot already prove a difference.
82
+ * Reader failures are converted into per-file sync events instead of aborting the whole run.
83
+ *
84
+ * @param pair - Source/destination pair from {@link zipFolders}.
85
+ * @param compareMode - The comparison strategy.
86
+ * @param options - Optional hashing dependencies and cancellation signal.
87
+ *
88
+ * @returns The prepared pair plus any preparation events.
89
+ */
90
+ export declare function preparePairForCompare(pair: SyncPair, compareMode: CompareMode, options?: PreparePairForCompareOptions): Promise<ComparePreparationResult>;
91
+ /**
92
+ * Prepares a list of pairs for the selected compare mode with bounded concurrency.
93
+ *
94
+ * @param pairs - Source/destination pairs from {@link zipFolders}.
95
+ * @param compareMode - The comparison strategy.
96
+ * @param options - Optional hashing dependencies, cancellation signal, and concurrency.
97
+ *
98
+ * @returns Prepared results in the same order as the input pairs.
99
+ */
100
+ export declare function preparePairsForCompare(pairs: readonly SyncPair[], compareMode: CompareMode, options?: PreparePairsForCompareOptions): Promise<PreparedComparePair[]>;
101
+ /**
102
+ * Creates a successful no-op compare preparation result for a pair.
103
+ *
104
+ * @param pair - Source/destination pair from {@link zipFolders}.
105
+ * @param bytesHashed - Local file bytes read while preparing the pair.
106
+ * @param bytesVerified - B2 bytes read while verifying untrusted SHA-1 metadata.
107
+ *
108
+ * @returns A ready preparation result that allows action generation.
109
+ */
110
+ export declare function readyComparePair(pair: SyncPair, bytesHashed?: number, bytesVerified?: number): ComparePreparationResult;
13
111
  //# sourceMappingURL=compare.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/sync/policies/compare.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAExD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,QAAQ,EAChB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,WAAW,EACxB,SAAS,SAAI,GACZ,OAAO,CAST"}
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/sync/policies/compare.js"],"names":[],"mappings":"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"}