@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,117 +1,343 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const encoding = require("../raw/encoding.cjs");
4
- const progress = require("../streams/progress.cjs");
5
- const ids = require("../types/ids.cjs");
6
- const bestEffort = require("../util/best-effort.cjs");
7
- const normalize = require("../util/normalize.cjs");
1
+ const require_ids = require("../types/ids.cjs");
2
+ const require_best_effort = require("../util/best-effort.cjs");
3
+ const require_encoding = require("../raw/encoding.cjs");
4
+ const require_progress = require("../streams/progress.cjs");
5
+ const require_download = require("../types/download.cjs");
6
+ const require_encryption = require("../types/encryption.cjs");
7
+ const require_lock = require("../types/lock.cjs");
8
+ const require_normalize = require("../util/normalize.cjs");
9
+ const require_checksum = require("./checksum.cjs");
10
+ //#region src/download/single.ts
11
+ /**
12
+ * Downloads a file by its unique ID in a single HTTP request.
13
+ *
14
+ * Returns a streaming body suitable for small-to-medium files. For large files
15
+ * that benefit from concurrent ranged fetches, use
16
+ * {@link createParallelDownloadStream} instead.
17
+ *
18
+ * @param raw - Low-level B2 API client.
19
+ * @param accountInfo - Authorized account state.
20
+ * @param options - Download parameters.
21
+ *
22
+ * @returns Parsed headers and a readable stream of file bytes.
23
+ */
8
24
  async function downloadById(raw, accountInfo, options) {
9
- const resp = await raw.downloadFileById(
10
- accountInfo.getDownloadUrl(),
11
- accountInfo.getAuthToken(),
12
- options.fileId,
13
- toRawDownloadOptions(options)
14
- );
15
- const headers = extractDownloadHeaders(resp.headers);
16
- return {
17
- headers,
18
- // HEAD requests legitimately have no body; return an empty stream so the
19
- // result shape stays consistent.
20
- body: instrumentProgress(resp.body ?? emptyStream(), headers.contentLength, options.onProgress)
21
- };
25
+ const resp = await raw.downloadFileById(accountInfo.getDownloadUrl(), accountInfo.getAuthToken(), options.fileId, toRawDownloadOptions(options));
26
+ const headers = extractDownloadHeaders(resp.headers);
27
+ return {
28
+ headers,
29
+ body: prepareDownloadBody(resp.body ?? emptyStream(), headers, options)
30
+ };
22
31
  }
32
+ /**
33
+ * Downloads a file by bucket name and file path in a single HTTP request.
34
+ *
35
+ * Returns a streaming body suitable for small-to-medium files. For large files
36
+ * that benefit from concurrent ranged fetches, use
37
+ * {@link createParallelDownloadStream} instead.
38
+ *
39
+ * @param raw - Low-level B2 API client.
40
+ * @param accountInfo - Authorized account state.
41
+ * @param options - Download parameters.
42
+ *
43
+ * @returns Parsed headers and a readable stream of file bytes.
44
+ */
23
45
  async function downloadByName(raw, accountInfo, options) {
24
- const resp = await raw.downloadFileByName(
25
- accountInfo.getDownloadUrl(),
26
- accountInfo.getAuthToken(),
27
- options.bucketName,
28
- options.fileName,
29
- toRawDownloadOptions(options)
30
- );
31
- const headers = extractDownloadHeaders(resp.headers);
32
- return {
33
- headers,
34
- body: instrumentProgress(resp.body ?? emptyStream(), headers.contentLength, options.onProgress)
35
- };
46
+ const resp = await raw.downloadFileByName(accountInfo.getDownloadUrl(), accountInfo.getAuthToken(), options.bucketName, options.fileName, toRawDownloadOptions(options));
47
+ const headers = extractDownloadHeaders(resp.headers);
48
+ return {
49
+ headers,
50
+ body: prepareDownloadBody(resp.body ?? emptyStream(), headers, options)
51
+ };
36
52
  }
53
+ /**
54
+ * Issues a HEAD-by-ID request and returns parsed headers only. Drains
55
+ * the (logically empty) response body internally so callers don't have
56
+ * to remember to `body.cancel()` themselves.
57
+ *
58
+ * Prefer this over `downloadById({ method: 'HEAD' })` — same wire-level
59
+ * effect, but the caller-facing result has no `body` field at all so
60
+ * there's nothing to clean up.
61
+ *
62
+ * @param raw - Low-level B2 API client.
63
+ * @param accountInfo - Authorized account state.
64
+ * @param options - HEAD parameters (file ID + the same response-header
65
+ * overrides and abort signal that `downloadById` accepts).
66
+ *
67
+ * @returns Parsed download headers (no body field).
68
+ */
37
69
  async function headById(raw, accountInfo, options) {
38
- const resp = await raw.downloadFileById(
39
- accountInfo.getDownloadUrl(),
40
- accountInfo.getAuthToken(),
41
- options.fileId,
42
- { ...toRawDownloadOptions(options), method: "HEAD" }
43
- );
44
- if (resp.body !== null) {
45
- const body = resp.body;
46
- await bestEffort.bestEffort(() => body.cancel());
47
- }
48
- return { headers: extractDownloadHeaders(resp.headers) };
70
+ const resp = await raw.downloadFileById(accountInfo.getDownloadUrl(), accountInfo.getAuthToken(), options.fileId, {
71
+ ...toRawDownloadOptions(options),
72
+ method: "HEAD"
73
+ });
74
+ if (resp.body !== null) {
75
+ const body = resp.body;
76
+ await require_best_effort.bestEffort(() => body.cancel());
77
+ }
78
+ return { headers: extractDownloadHeaders(resp.headers) };
49
79
  }
80
+ /**
81
+ * Issues a HEAD-by-name request and returns parsed headers only. Drains
82
+ * the (logically empty) response body internally so callers don't have
83
+ * to remember to `body.cancel()` themselves.
84
+ *
85
+ * Prefer this over `downloadByName({ method: 'HEAD' })` — same wire-level
86
+ * effect, but the caller-facing result has no `body` field at all so
87
+ * there's nothing to clean up.
88
+ *
89
+ * @param raw - Low-level B2 API client.
90
+ * @param accountInfo - Authorized account state.
91
+ * @param options - HEAD parameters (bucket + file name + the same
92
+ * response-header overrides and abort signal that `downloadByName`
93
+ * accepts).
94
+ *
95
+ * @returns Parsed download headers (no body field).
96
+ */
50
97
  async function headByName(raw, accountInfo, options) {
51
- const resp = await raw.downloadFileByName(
52
- accountInfo.getDownloadUrl(),
53
- accountInfo.getAuthToken(),
54
- options.bucketName,
55
- options.fileName,
56
- { ...toRawDownloadOptions(options), method: "HEAD" }
57
- );
58
- if (resp.body !== null) {
59
- const body = resp.body;
60
- await bestEffort.bestEffort(() => body.cancel());
61
- }
62
- return { headers: extractDownloadHeaders(resp.headers) };
98
+ const resp = await raw.downloadFileByName(accountInfo.getDownloadUrl(), accountInfo.getAuthToken(), options.bucketName, options.fileName, {
99
+ ...toRawDownloadOptions(options),
100
+ method: "HEAD"
101
+ });
102
+ if (resp.body !== null) {
103
+ const body = resp.body;
104
+ await require_best_effort.bestEffort(() => body.cancel());
105
+ }
106
+ return { headers: extractDownloadHeaders(resp.headers) };
63
107
  }
108
+ /**
109
+ * Translates the public download-options shape into the raw client's
110
+ * {@link DownloadFileOptions}, dropping the request-target fields (`fileId`,
111
+ * `bucketName`, `fileName`) that don't apply at the transport layer.
112
+ *
113
+ * @param options - Caller-supplied download options.
114
+ *
115
+ * @returns The raw transport-layer options.
116
+ */
64
117
  function toRawDownloadOptions(options) {
65
- return {
66
- ...options.method !== void 0 ? { method: options.method } : {},
67
- ...options.range !== void 0 ? { range: options.range } : {},
68
- ...options.serverSideEncryption !== void 0 ? { serverSideEncryption: options.serverSideEncryption } : {},
69
- ...options.b2ContentDisposition !== void 0 ? { b2ContentDisposition: options.b2ContentDisposition } : {},
70
- ...options.b2ContentLanguage !== void 0 ? { b2ContentLanguage: options.b2ContentLanguage } : {},
71
- ...options.b2ContentEncoding !== void 0 ? { b2ContentEncoding: options.b2ContentEncoding } : {},
72
- ...options.b2ContentType !== void 0 ? { b2ContentType: options.b2ContentType } : {},
73
- ...options.b2CacheControl !== void 0 ? { b2CacheControl: options.b2CacheControl } : {},
74
- ...options.b2Expires !== void 0 ? { b2Expires: options.b2Expires } : {},
75
- ...options.signal !== void 0 ? { signal: options.signal } : {}
76
- };
118
+ return {
119
+ ...options.method !== void 0 ? { method: options.method } : {},
120
+ ...options.range !== void 0 ? { range: options.range } : {},
121
+ ...options.serverSideEncryption !== void 0 ? { serverSideEncryption: options.serverSideEncryption } : {},
122
+ ...options.b2ContentDisposition !== void 0 ? { b2ContentDisposition: options.b2ContentDisposition } : {},
123
+ ...options.b2ContentLanguage !== void 0 ? { b2ContentLanguage: options.b2ContentLanguage } : {},
124
+ ...options.b2ContentEncoding !== void 0 ? { b2ContentEncoding: options.b2ContentEncoding } : {},
125
+ ...options.b2ContentType !== void 0 ? { b2ContentType: options.b2ContentType } : {},
126
+ ...options.b2CacheControl !== void 0 ? { b2CacheControl: options.b2CacheControl } : {},
127
+ ...options.b2Expires !== void 0 ? { b2Expires: options.b2Expires } : {},
128
+ ...options.signal !== void 0 ? { signal: options.signal } : {}
129
+ };
77
130
  }
131
+ /**
132
+ * Builds an immediately-closed empty ReadableStream. Used as the body of a
133
+ * HEAD download response so callers always get a stream they can `pipeTo`.
134
+ *
135
+ * @returns A ReadableStream that yields zero bytes and immediately closes.
136
+ */
78
137
  function emptyStream() {
79
- return new ReadableStream({
80
- start(controller) {
81
- controller.close();
82
- }
83
- });
138
+ return new ReadableStream({ start(controller) {
139
+ controller.close();
140
+ } });
84
141
  }
142
+ /**
143
+ * Applies stream wrappers common to single-request downloads.
144
+ *
145
+ * Full-body GET downloads are checksum-verified when B2 supplies a real
146
+ * whole-file SHA-1. HEAD requests and ranged GETs are skipped because the
147
+ * response body is empty or partial while `X-Bz-Content-Sha1` describes the
148
+ * full file version.
149
+ *
150
+ * @param body - Download response body.
151
+ * @param headers - Parsed download headers.
152
+ * @param options - Caller-supplied download options.
153
+ *
154
+ * @returns A stream wrapped for checksum verification and progress reporting.
155
+ */
156
+ function prepareDownloadBody(body, headers, options) {
157
+ return instrumentProgress(options.method !== "HEAD" && options.range === void 0 ? require_checksum.verifyDownloadStream(body, headers.contentSha1) : body, headers.contentLength, options.onProgress);
158
+ }
159
+ /**
160
+ * Wraps a body stream with a `TransformStream` that increments a
161
+ * {@link ProgressTracker} for each chunk and reports `partsCompleted: 1`
162
+ * when the stream finishes.
163
+ *
164
+ * When `listener` is undefined the function short-circuits and returns
165
+ * the original stream, so unobserved downloads pay no overhead.
166
+ *
167
+ * @param body - The download response body to wrap.
168
+ * @param totalBytes - Expected total bytes (response `Content-Length`).
169
+ * @param listener - Caller-supplied progress callback, or undefined.
170
+ *
171
+ * @returns A stream that emits the same bytes and reports progress.
172
+ */
85
173
  function instrumentProgress(body, totalBytes, listener) {
86
- if (listener === void 0) return body;
87
- const tracker = new progress.ProgressTracker(listener, totalBytes, 1);
88
- const transform = new TransformStream({
89
- transform(chunk, controller) {
90
- tracker.addBytes(chunk.byteLength);
91
- controller.enqueue(chunk);
92
- },
93
- flush() {
94
- tracker.completePart();
95
- }
96
- });
97
- return body.pipeThrough(transform);
174
+ if (listener === void 0) return body;
175
+ const tracker = new require_progress.ProgressTracker(listener, totalBytes, 1);
176
+ const transform = new TransformStream({
177
+ transform(chunk, controller) {
178
+ tracker.addBytes(chunk.byteLength);
179
+ controller.enqueue(chunk);
180
+ },
181
+ flush() {
182
+ tracker.completePart();
183
+ }
184
+ });
185
+ return body.pipeThrough(transform);
98
186
  }
187
+ /**
188
+ * Extracts B2-specific download headers into a structured object.
189
+ * @param headers - The HTTP response headers from the download.
190
+ *
191
+ * @returns The parsed download metadata.
192
+ */
99
193
  function extractDownloadHeaders(headers) {
100
- const fileInfo = encoding.parseFileInfoHeaders(headers);
101
- return {
102
- contentType: headers.get("Content-Type") ?? "application/octet-stream",
103
- contentLength: Number.parseInt(headers.get("Content-Length") ?? "0", 10),
104
- // B2 sends the literal `'none'` for multipart-finished files; collapse
105
- // to `null` so the typed `string | null` actually means "no SHA-1".
106
- contentSha1: normalize.normalizeSha1(headers.get("X-Bz-Content-Sha1")),
107
- fileId: ids.fileId(headers.get("X-Bz-File-Id") ?? ""),
108
- fileName: decodeURIComponent(headers.get("X-Bz-File-Name") ?? ""),
109
- fileInfo,
110
- uploadTimestamp: Number.parseInt(headers.get("X-Bz-Upload-Timestamp") ?? "0", 10)
111
- };
194
+ const headerParseIssues = [];
195
+ const fileInfo = require_encoding.parseFileInfoHeaders(headers);
196
+ const clientUnauthorizedToRead = parseClientUnauthorizedToRead(headers, headerParseIssues);
197
+ const contentDisposition = optionalHeader(headers, require_download.DownloadHeaderName.ContentDisposition);
198
+ const contentLanguage = optionalHeader(headers, require_download.DownloadHeaderName.ContentLanguage);
199
+ const contentEncoding = optionalHeader(headers, require_download.DownloadHeaderName.ContentEncoding);
200
+ const cacheControl = optionalHeader(headers, require_download.DownloadHeaderName.CacheControl);
201
+ const expires = optionalHeader(headers, require_download.DownloadHeaderName.Expires);
202
+ const contentRange = optionalHeader(headers, require_download.DownloadHeaderName.ContentRange);
203
+ const serverSideEncryption = parseDownloadServerSideEncryption(headers, headerParseIssues);
204
+ const fileRetention = parseDownloadFileRetention(headers, clientUnauthorizedToRead, headerParseIssues);
205
+ const legalHold = parseDownloadLegalHold(headers, clientUnauthorizedToRead, headerParseIssues);
206
+ return {
207
+ contentType: headers.get(require_download.DownloadHeaderName.ContentType) ?? "application/octet-stream",
208
+ contentLength: Number.parseInt(headers.get(require_download.DownloadHeaderName.ContentLength) ?? "0", 10),
209
+ ...contentDisposition !== void 0 ? { contentDisposition } : {},
210
+ ...contentLanguage !== void 0 ? { contentLanguage } : {},
211
+ ...contentEncoding !== void 0 ? { contentEncoding } : {},
212
+ ...cacheControl !== void 0 ? { cacheControl } : {},
213
+ ...expires !== void 0 ? { expires } : {},
214
+ ...contentRange !== void 0 ? { contentRange } : {},
215
+ contentSha1: require_normalize.normalizeSha1(headers.get(require_download.DownloadHeaderName.ContentSha1)),
216
+ fileId: require_ids.fileId(headers.get(require_download.DownloadHeaderName.FileId) ?? ""),
217
+ fileName: decodeURIComponent(headers.get(require_download.DownloadHeaderName.FileName) ?? ""),
218
+ fileInfo,
219
+ uploadTimestamp: Number.parseInt(headers.get(require_download.DownloadHeaderName.UploadTimestamp) ?? "0", 10),
220
+ ...serverSideEncryption !== void 0 ? { serverSideEncryption } : {},
221
+ ...fileRetention !== void 0 ? { fileRetention } : {},
222
+ ...legalHold !== void 0 ? { legalHold } : {},
223
+ ...clientUnauthorizedToRead !== void 0 ? { clientUnauthorizedToRead } : {},
224
+ ...headerParseIssues.length > 0 ? { headerParseIssues } : {}
225
+ };
226
+ }
227
+ function optionalHeader(headers, name) {
228
+ return headers.get(name) ?? void 0;
229
+ }
230
+ function parseDownloadServerSideEncryption(headers, headerParseIssues) {
231
+ const managedAlgorithm = optionalHeader(headers, require_download.DownloadHeaderName.ServerSideEncryption);
232
+ if (managedAlgorithm !== void 0) {
233
+ if (managedAlgorithm !== require_encryption.EncryptionAlgorithm.Aes256) {
234
+ headerParseIssues.push({
235
+ headerName: require_download.DownloadHeaderName.ServerSideEncryption,
236
+ value: managedAlgorithm
237
+ });
238
+ return;
239
+ }
240
+ return {
241
+ mode: require_encryption.EncryptionMode.SseB2,
242
+ algorithm: managedAlgorithm
243
+ };
244
+ }
245
+ const customerAlgorithm = optionalHeader(headers, require_download.DownloadHeaderName.ServerSideEncryptionCustomerAlgorithm);
246
+ const customerKeyMd5 = optionalHeader(headers, require_download.DownloadHeaderName.ServerSideEncryptionCustomerKeyMd5);
247
+ if (customerAlgorithm === void 0 || customerKeyMd5 === void 0) return void 0;
248
+ if (customerAlgorithm !== require_encryption.EncryptionAlgorithm.Aes256) {
249
+ headerParseIssues.push({
250
+ headerName: require_download.DownloadHeaderName.ServerSideEncryptionCustomerAlgorithm,
251
+ value: customerAlgorithm
252
+ });
253
+ return;
254
+ }
255
+ return {
256
+ mode: require_encryption.EncryptionMode.SseC,
257
+ algorithm: customerAlgorithm,
258
+ customerKeyMd5
259
+ };
260
+ }
261
+ function parseDownloadFileRetention(headers, clientUnauthorizedToRead, headerParseIssues) {
262
+ if (clientUnauthorizedToRead?.includes(require_download.DownloadClientUnauthorizedToReadMarker.FileRetentionMode) === true || clientUnauthorizedToRead?.includes(require_download.DownloadClientUnauthorizedToReadMarker.FileRetentionRetainUntilTimestamp) === true) return {
263
+ isClientAuthorizedToRead: false,
264
+ value: null
265
+ };
266
+ const rawMode = optionalHeader(headers, require_download.DownloadHeaderName.FileRetentionMode);
267
+ const rawRetainUntilTimestamp = optionalHeader(headers, require_download.DownloadHeaderName.FileRetentionRetainUntilTimestamp);
268
+ if (rawMode === void 0 && rawRetainUntilTimestamp === void 0) return void 0;
269
+ return {
270
+ isClientAuthorizedToRead: true,
271
+ value: {
272
+ mode: parseRetentionMode(rawMode, headerParseIssues),
273
+ retainUntilTimestamp: parseRetentionTimestamp(rawRetainUntilTimestamp, headerParseIssues)
274
+ }
275
+ };
276
+ }
277
+ function parseRetentionMode(rawMode, headerParseIssues) {
278
+ if (rawMode === void 0) return null;
279
+ if (rawMode === require_lock.RetentionMode.Compliance || rawMode === require_lock.RetentionMode.Governance) return rawMode;
280
+ headerParseIssues.push({
281
+ headerName: require_download.DownloadHeaderName.FileRetentionMode,
282
+ value: rawMode
283
+ });
284
+ return null;
285
+ }
286
+ function parseRetentionTimestamp(rawTimestamp, headerParseIssues) {
287
+ if (rawTimestamp === void 0) return null;
288
+ if (!/^\d+$/.test(rawTimestamp)) {
289
+ headerParseIssues.push({
290
+ headerName: require_download.DownloadHeaderName.FileRetentionRetainUntilTimestamp,
291
+ value: rawTimestamp
292
+ });
293
+ return null;
294
+ }
295
+ const parsed = Number.parseInt(rawTimestamp, 10);
296
+ if (Number.isFinite(parsed)) return parsed;
297
+ headerParseIssues.push({
298
+ headerName: require_download.DownloadHeaderName.FileRetentionRetainUntilTimestamp,
299
+ value: rawTimestamp
300
+ });
301
+ return null;
302
+ }
303
+ function parseDownloadLegalHold(headers, clientUnauthorizedToRead, headerParseIssues) {
304
+ if (clientUnauthorizedToRead?.includes(require_download.DownloadClientUnauthorizedToReadMarker.FileLegalHold)) return {
305
+ isClientAuthorizedToRead: false,
306
+ value: null
307
+ };
308
+ const rawLegalHold = optionalHeader(headers, require_download.DownloadHeaderName.FileLegalHold);
309
+ if (rawLegalHold === void 0) return void 0;
310
+ if (rawLegalHold === require_lock.LegalHoldValue.On || rawLegalHold === require_lock.LegalHoldValue.Off) return {
311
+ isClientAuthorizedToRead: true,
312
+ value: rawLegalHold
313
+ };
314
+ headerParseIssues.push({
315
+ headerName: require_download.DownloadHeaderName.FileLegalHold,
316
+ value: rawLegalHold
317
+ });
318
+ return {
319
+ isClientAuthorizedToRead: true,
320
+ value: null
321
+ };
322
+ }
323
+ function parseClientUnauthorizedToRead(headers, headerParseIssues) {
324
+ const value = optionalHeader(headers, require_download.DownloadHeaderName.ClientUnauthorizedToRead);
325
+ if (value === void 0) return void 0;
326
+ const headerNames = value.split(",").map((header) => header.trim()).filter((header) => header.length > 0);
327
+ const knownHeaderNames = headerNames.filter(isDownloadClientUnauthorizedToReadMarker);
328
+ for (const headerName of headerNames) if (!isDownloadClientUnauthorizedToReadMarker(headerName)) headerParseIssues.push({
329
+ headerName: require_download.DownloadHeaderName.ClientUnauthorizedToRead,
330
+ value: headerName
331
+ });
332
+ return knownHeaderNames.length > 0 ? knownHeaderNames : void 0;
333
+ }
334
+ function isDownloadClientUnauthorizedToReadMarker(headerName) {
335
+ return Object.values(require_download.DownloadClientUnauthorizedToReadMarker).includes(headerName);
112
336
  }
337
+ //#endregion
113
338
  exports.downloadById = downloadById;
114
339
  exports.downloadByName = downloadByName;
115
340
  exports.headById = headById;
116
341
  exports.headByName = headByName;
117
- //# sourceMappingURL=single.cjs.map
342
+
343
+ //# sourceMappingURL=single.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"single.cjs","sources":["../../src/download/single.ts"],"sourcesContent":["import type { AccountInfo } from '../auth/account-info.ts'\nimport { parseFileInfoHeaders } from '../raw/encoding.ts'\nimport type { DownloadFileOptions, RawClient, SseCDownloadKey } from '../raw/index.ts'\nimport { type ProgressListener, ProgressTracker } from '../streams/progress.ts'\nimport type { DownloadHeaders } from '../types/download.ts'\nimport { type FileId, fileId as fileIdOf } from '../types/ids.ts'\nimport { bestEffort } from '../util/best-effort.ts'\nimport { normalizeSha1 } from '../util/normalize.ts'\n\n/** Result of a single-request file download. */\nexport interface DownloadResult {\n /** Parsed B2 response headers (content type, SHA-1, file info, etc.). */\n readonly headers: DownloadHeaders\n /** Streaming body of the downloaded file. */\n readonly body: ReadableStream<Uint8Array>\n}\n\n/**\n * Result of a HEAD-style metadata fetch. Unlike {@link DownloadResult},\n * this shape has **no** `body` field — the SDK consumes and discards the\n * (logically empty) HEAD response body internally so callers never have\n * to remember to `body.cancel()` after a metadata-only fetch.\n */\nexport interface HeadResult {\n /** Parsed B2 response headers (content type, SHA-1, file info, etc.). */\n readonly headers: DownloadHeaders\n}\n\n/** Shared download options exposed at the high-level facade. */\ninterface DownloadCommonOptions {\n /** HTTP method. Defaults to `'GET'`. Use `'HEAD'` to fetch only response headers without streaming the body. */\n readonly method?: 'GET' | 'HEAD'\n /** Optional HTTP Range header value (e.g. `bytes=0-999`). */\n readonly range?: string\n /** SSE-C decryption parameters, required if the file was uploaded with SSE-C. */\n readonly serverSideEncryption?: SseCDownloadKey\n /** Override the response `Content-Disposition` header. */\n readonly b2ContentDisposition?: string\n /** Override the response `Content-Language` header. */\n readonly b2ContentLanguage?: string\n /** Override the response `Content-Encoding` header. */\n readonly b2ContentEncoding?: string\n /** Override the response `Content-Type` header. */\n readonly b2ContentType?: string\n /** Override the response `Cache-Control` header. */\n readonly b2CacheControl?: string\n /** Override the response `Expires` header. */\n readonly b2Expires?: string\n /** Signal to abort the download. */\n readonly signal?: AbortSignal\n /**\n * Callback invoked as bytes flow through the returned `body` stream.\n *\n * Wraps the response body in a `TransformStream` that increments a\n * `ProgressTracker` per chunk and emits a `partsCompleted: 1` event when\n * the stream finishes. `totalBytes` is the response's `Content-Length`\n * header (or `null` if the server didn't send one — rare for B2).\n *\n * If the caller does not read the returned body to completion, the\n * tracker's `completePart()` event will not fire. That is intentional:\n * progress is byte-driven, not request-driven.\n */\n readonly onProgress?: ProgressListener\n}\n\n/** Options for downloading a file by its unique ID. */\nexport interface DownloadByIdOptions extends DownloadCommonOptions {\n /** ID of the file version to download. */\n readonly fileId: FileId\n}\n\n/** Options for downloading a file by bucket name and file path. */\nexport interface DownloadByNameOptions extends DownloadCommonOptions {\n /** Name of the bucket containing the file. */\n readonly bucketName: string\n /** Full file name (path) within the bucket. */\n readonly fileName: string\n}\n\n/**\n * Shared HEAD options. Mirrors {@link DownloadCommonOptions} but omits\n * `method` (always HEAD) and `onProgress` (no body to track).\n */\ntype HeadCommonOptions = Omit<DownloadCommonOptions, 'method' | 'onProgress'>\n\n/** Options for a HEAD-by-ID request. */\nexport interface HeadByIdOptions extends HeadCommonOptions {\n /** ID of the file version to inspect. */\n readonly fileId: FileId\n}\n\n/** Options for a HEAD-by-name request. */\nexport interface HeadByNameOptions extends HeadCommonOptions {\n /** Name of the bucket containing the file. */\n readonly bucketName: string\n /** Full file name (path) within the bucket. */\n readonly fileName: string\n}\n\n/**\n * Downloads a file by its unique ID in a single HTTP request.\n *\n * Returns a streaming body suitable for small-to-medium files. For large files\n * that benefit from concurrent ranged fetches, use\n * {@link createParallelDownloadStream} instead.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - Download parameters.\n *\n * @returns Parsed headers and a readable stream of file bytes.\n */\nexport async function downloadById(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: DownloadByIdOptions,\n): Promise<DownloadResult> {\n const resp = await raw.downloadFileById(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.fileId,\n toRawDownloadOptions(options),\n )\n\n const headers = extractDownloadHeaders(resp.headers)\n return {\n headers,\n // HEAD requests legitimately have no body; return an empty stream so the\n // result shape stays consistent.\n body: instrumentProgress(resp.body ?? emptyStream(), headers.contentLength, options.onProgress),\n }\n}\n\n/**\n * Downloads a file by bucket name and file path in a single HTTP request.\n *\n * Returns a streaming body suitable for small-to-medium files. For large files\n * that benefit from concurrent ranged fetches, use\n * {@link createParallelDownloadStream} instead.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - Download parameters.\n *\n * @returns Parsed headers and a readable stream of file bytes.\n */\nexport async function downloadByName(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: DownloadByNameOptions,\n): Promise<DownloadResult> {\n const resp = await raw.downloadFileByName(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.bucketName,\n options.fileName,\n toRawDownloadOptions(options),\n )\n\n const headers = extractDownloadHeaders(resp.headers)\n return {\n headers,\n body: instrumentProgress(resp.body ?? emptyStream(), headers.contentLength, options.onProgress),\n }\n}\n\n/**\n * Issues a HEAD-by-ID request and returns parsed headers only. Drains\n * the (logically empty) response body internally so callers don't have\n * to remember to `body.cancel()` themselves.\n *\n * Prefer this over `downloadById({ method: 'HEAD' })` — same wire-level\n * effect, but the caller-facing result has no `body` field at all so\n * there's nothing to clean up.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - HEAD parameters (file ID + the same response-header\n * overrides and abort signal that `downloadById` accepts).\n *\n * @returns Parsed download headers (no body field).\n */\nexport async function headById(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: HeadByIdOptions,\n): Promise<HeadResult> {\n const resp = await raw.downloadFileById(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.fileId,\n { ...toRawDownloadOptions(options), method: 'HEAD' },\n )\n // Body for HEAD is normally `null` per the fetch spec. Some transports\n // (notably the SDK's `B2Simulator`) synthesize a non-null body for\n // shape consistency. In either case, cancelling is a no-op for the\n // caller; wrap in `bestEffort` so a stream-lifecycle quirk in a\n // future runtime can't fail an otherwise-successful HEAD.\n if (resp.body !== null) {\n // Bind to a local so the type narrowing carries into the closure;\n // bare `resp.body` in the lambda would re-broaden to `... | null`.\n const body = resp.body\n await bestEffort(() => body.cancel())\n }\n return { headers: extractDownloadHeaders(resp.headers) }\n}\n\n/**\n * Issues a HEAD-by-name request and returns parsed headers only. Drains\n * the (logically empty) response body internally so callers don't have\n * to remember to `body.cancel()` themselves.\n *\n * Prefer this over `downloadByName({ method: 'HEAD' })` — same wire-level\n * effect, but the caller-facing result has no `body` field at all so\n * there's nothing to clean up.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - HEAD parameters (bucket + file name + the same\n * response-header overrides and abort signal that `downloadByName`\n * accepts).\n *\n * @returns Parsed download headers (no body field).\n */\nexport async function headByName(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: HeadByNameOptions,\n): Promise<HeadResult> {\n const resp = await raw.downloadFileByName(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.bucketName,\n options.fileName,\n { ...toRawDownloadOptions(options), method: 'HEAD' },\n )\n if (resp.body !== null) {\n // Bind to a local so the type narrowing carries into the closure;\n // bare `resp.body` in the lambda would re-broaden to `... | null`.\n const body = resp.body\n await bestEffort(() => body.cancel())\n }\n return { headers: extractDownloadHeaders(resp.headers) }\n}\n\n/**\n * Translates the public download-options shape into the raw client's\n * {@link DownloadFileOptions}, dropping the request-target fields (`fileId`,\n * `bucketName`, `fileName`) that don't apply at the transport layer.\n *\n * @param options - Caller-supplied download options.\n *\n * @returns The raw transport-layer options.\n */\nfunction toRawDownloadOptions(options: DownloadCommonOptions): DownloadFileOptions {\n return {\n ...(options.method !== undefined ? { method: options.method } : {}),\n ...(options.range !== undefined ? { range: options.range } : {}),\n ...(options.serverSideEncryption !== undefined\n ? { serverSideEncryption: options.serverSideEncryption }\n : {}),\n ...(options.b2ContentDisposition !== undefined\n ? { b2ContentDisposition: options.b2ContentDisposition }\n : {}),\n ...(options.b2ContentLanguage !== undefined\n ? { b2ContentLanguage: options.b2ContentLanguage }\n : {}),\n ...(options.b2ContentEncoding !== undefined\n ? { b2ContentEncoding: options.b2ContentEncoding }\n : {}),\n ...(options.b2ContentType !== undefined ? { b2ContentType: options.b2ContentType } : {}),\n ...(options.b2CacheControl !== undefined ? { b2CacheControl: options.b2CacheControl } : {}),\n ...(options.b2Expires !== undefined ? { b2Expires: options.b2Expires } : {}),\n ...(options.signal !== undefined ? { signal: options.signal } : {}),\n }\n}\n\n/**\n * Builds an immediately-closed empty ReadableStream. Used as the body of a\n * HEAD download response so callers always get a stream they can `pipeTo`.\n *\n * @returns A ReadableStream that yields zero bytes and immediately closes.\n */\nfunction emptyStream(): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.close()\n },\n })\n}\n\n/**\n * Wraps a body stream with a `TransformStream` that increments a\n * {@link ProgressTracker} for each chunk and reports `partsCompleted: 1`\n * when the stream finishes.\n *\n * When `listener` is undefined the function short-circuits and returns\n * the original stream, so unobserved downloads pay no overhead.\n *\n * @param body - The download response body to wrap.\n * @param totalBytes - Expected total bytes (response `Content-Length`).\n * @param listener - Caller-supplied progress callback, or undefined.\n *\n * @returns A stream that emits the same bytes and reports progress.\n */\nfunction instrumentProgress(\n body: ReadableStream<Uint8Array>,\n totalBytes: number,\n listener: ProgressListener | undefined,\n): ReadableStream<Uint8Array> {\n if (listener === undefined) return body\n const tracker = new ProgressTracker(listener, totalBytes, 1)\n const transform = new TransformStream<Uint8Array, Uint8Array>({\n transform(chunk, controller) {\n tracker.addBytes(chunk.byteLength)\n controller.enqueue(chunk)\n },\n flush() {\n tracker.completePart()\n },\n })\n return body.pipeThrough(transform)\n}\n\n/**\n * Extracts B2-specific download headers into a structured object.\n * @param headers - The HTTP response headers from the download.\n *\n * @returns The parsed download metadata.\n */\nfunction extractDownloadHeaders(headers: Headers): DownloadHeaders {\n const fileInfo = parseFileInfoHeaders(headers)\n\n return {\n contentType: headers.get('Content-Type') ?? 'application/octet-stream',\n contentLength: Number.parseInt(headers.get('Content-Length') ?? '0', 10),\n // B2 sends the literal `'none'` for multipart-finished files; collapse\n // to `null` so the typed `string | null` actually means \"no SHA-1\".\n contentSha1: normalizeSha1(headers.get('X-Bz-Content-Sha1')),\n fileId: fileIdOf(headers.get('X-Bz-File-Id') ?? ''),\n fileName: decodeURIComponent(headers.get('X-Bz-File-Name') ?? ''),\n fileInfo,\n uploadTimestamp: Number.parseInt(headers.get('X-Bz-Upload-Timestamp') ?? '0', 10),\n }\n}\n"],"names":["bestEffort","ProgressTracker","parseFileInfoHeaders","normalizeSha1","fileIdOf"],"mappings":";;;;;;;AAgHA,eAAsB,aACpB,KACA,aACA,SACyB;AACzB,QAAM,OAAO,MAAM,IAAI;AAAA,IACrB,YAAY,eAAA;AAAA,IACZ,YAAY,aAAA;AAAA,IACZ,QAAQ;AAAA,IACR,qBAAqB,OAAO;AAAA,EAAA;AAG9B,QAAM,UAAU,uBAAuB,KAAK,OAAO;AACnD,SAAO;AAAA,IACL;AAAA;AAAA;AAAA,IAGA,MAAM,mBAAmB,KAAK,QAAQ,eAAe,QAAQ,eAAe,QAAQ,UAAU;AAAA,EAAA;AAElG;AAeA,eAAsB,eACpB,KACA,aACA,SACyB;AACzB,QAAM,OAAO,MAAM,IAAI;AAAA,IACrB,YAAY,eAAA;AAAA,IACZ,YAAY,aAAA;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,qBAAqB,OAAO;AAAA,EAAA;AAG9B,QAAM,UAAU,uBAAuB,KAAK,OAAO;AACnD,SAAO;AAAA,IACL;AAAA,IACA,MAAM,mBAAmB,KAAK,QAAQ,eAAe,QAAQ,eAAe,QAAQ,UAAU;AAAA,EAAA;AAElG;AAkBA,eAAsB,SACpB,KACA,aACA,SACqB;AACrB,QAAM,OAAO,MAAM,IAAI;AAAA,IACrB,YAAY,eAAA;AAAA,IACZ,YAAY,aAAA;AAAA,IACZ,QAAQ;AAAA,IACR,EAAE,GAAG,qBAAqB,OAAO,GAAG,QAAQ,OAAA;AAAA,EAAO;AAOrD,MAAI,KAAK,SAAS,MAAM;AAGtB,UAAM,OAAO,KAAK;AAClB,UAAMA,sBAAW,MAAM,KAAK,QAAQ;AAAA,EACtC;AACA,SAAO,EAAE,SAAS,uBAAuB,KAAK,OAAO,EAAA;AACvD;AAmBA,eAAsB,WACpB,KACA,aACA,SACqB;AACrB,QAAM,OAAO,MAAM,IAAI;AAAA,IACrB,YAAY,eAAA;AAAA,IACZ,YAAY,aAAA;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,EAAE,GAAG,qBAAqB,OAAO,GAAG,QAAQ,OAAA;AAAA,EAAO;AAErD,MAAI,KAAK,SAAS,MAAM;AAGtB,UAAM,OAAO,KAAK;AAClB,UAAMA,sBAAW,MAAM,KAAK,QAAQ;AAAA,EACtC;AACA,SAAO,EAAE,SAAS,uBAAuB,KAAK,OAAO,EAAA;AACvD;AAWA,SAAS,qBAAqB,SAAqD;AACjF,SAAO;AAAA,IACL,GAAI,QAAQ,WAAW,SAAY,EAAE,QAAQ,QAAQ,OAAA,IAAW,CAAA;AAAA,IAChE,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,QAAQ,MAAA,IAAU,CAAA;AAAA,IAC7D,GAAI,QAAQ,yBAAyB,SACjC,EAAE,sBAAsB,QAAQ,qBAAA,IAChC,CAAA;AAAA,IACJ,GAAI,QAAQ,yBAAyB,SACjC,EAAE,sBAAsB,QAAQ,qBAAA,IAChC,CAAA;AAAA,IACJ,GAAI,QAAQ,sBAAsB,SAC9B,EAAE,mBAAmB,QAAQ,kBAAA,IAC7B,CAAA;AAAA,IACJ,GAAI,QAAQ,sBAAsB,SAC9B,EAAE,mBAAmB,QAAQ,kBAAA,IAC7B,CAAA;AAAA,IACJ,GAAI,QAAQ,kBAAkB,SAAY,EAAE,eAAe,QAAQ,cAAA,IAAkB,CAAA;AAAA,IACrF,GAAI,QAAQ,mBAAmB,SAAY,EAAE,gBAAgB,QAAQ,eAAA,IAAmB,CAAA;AAAA,IACxF,GAAI,QAAQ,cAAc,SAAY,EAAE,WAAW,QAAQ,UAAA,IAAc,CAAA;AAAA,IACzE,GAAI,QAAQ,WAAW,SAAY,EAAE,QAAQ,QAAQ,WAAW,CAAA;AAAA,EAAC;AAErE;AAQA,SAAS,cAA0C;AACjD,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,YAAY;AAChB,iBAAW,MAAA;AAAA,IACb;AAAA,EAAA,CACD;AACH;AAgBA,SAAS,mBACP,MACA,YACA,UAC4B;AAC5B,MAAI,aAAa,OAAW,QAAO;AACnC,QAAM,UAAU,IAAIC,SAAAA,gBAAgB,UAAU,YAAY,CAAC;AAC3D,QAAM,YAAY,IAAI,gBAAwC;AAAA,IAC5D,UAAU,OAAO,YAAY;AAC3B,cAAQ,SAAS,MAAM,UAAU;AACjC,iBAAW,QAAQ,KAAK;AAAA,IAC1B;AAAA,IACA,QAAQ;AACN,cAAQ,aAAA;AAAA,IACV;AAAA,EAAA,CACD;AACD,SAAO,KAAK,YAAY,SAAS;AACnC;AAQA,SAAS,uBAAuB,SAAmC;AACjE,QAAM,WAAWC,SAAAA,qBAAqB,OAAO;AAE7C,SAAO;AAAA,IACL,aAAa,QAAQ,IAAI,cAAc,KAAK;AAAA,IAC5C,eAAe,OAAO,SAAS,QAAQ,IAAI,gBAAgB,KAAK,KAAK,EAAE;AAAA;AAAA;AAAA,IAGvE,aAAaC,UAAAA,cAAc,QAAQ,IAAI,mBAAmB,CAAC;AAAA,IAC3D,QAAQC,IAAAA,OAAS,QAAQ,IAAI,cAAc,KAAK,EAAE;AAAA,IAClD,UAAU,mBAAmB,QAAQ,IAAI,gBAAgB,KAAK,EAAE;AAAA,IAChE;AAAA,IACA,iBAAiB,OAAO,SAAS,QAAQ,IAAI,uBAAuB,KAAK,KAAK,EAAE;AAAA,EAAA;AAEpF;;;;;"}
1
+ {"version":3,"file":"single.cjs","names":[],"sources":["../../src/download/single.ts"],"sourcesContent":["import type { AccountInfo } from '../auth/account-info.ts'\nimport { parseFileInfoHeaders } from '../raw/encoding.ts'\nimport type { DownloadFileOptions, RawClient, SseCDownloadKey } from '../raw/index.ts'\nimport { type ProgressListener, ProgressTracker } from '../streams/progress.ts'\nimport {\n DownloadClientUnauthorizedToReadMarker,\n DownloadHeaderName,\n type DownloadHeaderParseIssue,\n type DownloadHeaders,\n type DownloadServerSideEncryption,\n} from '../types/download.ts'\nimport { EncryptionAlgorithm, EncryptionMode } from '../types/encryption.ts'\nimport { type FileId, fileId as fileIdOf } from '../types/ids.ts'\nimport { type FileRetentionValue, LegalHoldValue, RetentionMode } from '../types/lock.ts'\nimport { bestEffort } from '../util/best-effort.ts'\nimport { normalizeSha1 } from '../util/normalize.ts'\nimport { verifyDownloadStream } from './checksum.ts'\n\n/** Result of a single-request file download. */\nexport interface DownloadResult {\n /** Parsed B2 response headers (content type, SHA-1, file info, etc.). */\n readonly headers: DownloadHeaders\n /**\n * Streaming body of the downloaded file.\n *\n * If checksum verification fails, the stream errors after bytes have already\n * flowed; discard any partially written output on `ChecksumMismatchError`.\n */\n readonly body: ReadableStream<Uint8Array>\n}\n\n/**\n * Result of a HEAD-style metadata fetch. Unlike {@link DownloadResult},\n * this shape has **no** `body` field — the SDK consumes and discards the\n * (logically empty) HEAD response body internally so callers never have\n * to remember to `body.cancel()` after a metadata-only fetch.\n */\nexport interface HeadResult {\n /** Parsed B2 response headers (content type, SHA-1, file info, etc.). */\n readonly headers: DownloadHeaders\n}\n\n/** Shared download options exposed at the high-level facade. */\ninterface DownloadCommonOptions {\n /** HTTP method. Defaults to `'GET'`. Use `'HEAD'` to fetch only response headers without streaming the body. */\n readonly method?: 'GET' | 'HEAD'\n /** Optional HTTP Range header value (e.g. `bytes=0-999`). */\n readonly range?: string\n /** SSE-C decryption parameters, required if the file was uploaded with SSE-C. */\n readonly serverSideEncryption?: SseCDownloadKey\n /** Override the response `Content-Disposition` header. */\n readonly b2ContentDisposition?: string\n /** Override the response `Content-Language` header. */\n readonly b2ContentLanguage?: string\n /** Override the response `Content-Encoding` header. */\n readonly b2ContentEncoding?: string\n /** Override the response `Content-Type` header. */\n readonly b2ContentType?: string\n /** Override the response `Cache-Control` header. */\n readonly b2CacheControl?: string\n /** Override the response `Expires` header. */\n readonly b2Expires?: string\n /** Signal to abort the download. */\n readonly signal?: AbortSignal\n /**\n * Callback invoked as bytes flow through the returned `body` stream.\n *\n * Wraps the response body in a `TransformStream` that increments a\n * `ProgressTracker` per chunk and emits a `partsCompleted: 1` event when\n * the stream finishes. `totalBytes` is the response's `Content-Length`\n * header (or `null` if the server didn't send one — rare for B2).\n *\n * If the caller does not read the returned body to completion, the\n * tracker's `completePart()` event will not fire. That is intentional:\n * progress is byte-driven, not request-driven.\n */\n readonly onProgress?: ProgressListener\n}\n\n/** Options for downloading a file by its unique ID. */\nexport interface DownloadByIdOptions extends DownloadCommonOptions {\n /** ID of the file version to download. */\n readonly fileId: FileId\n}\n\n/** Options for downloading a file by bucket name and file path. */\nexport interface DownloadByNameOptions extends DownloadCommonOptions {\n /** Name of the bucket containing the file. */\n readonly bucketName: string\n /** Full file name (path) within the bucket. */\n readonly fileName: string\n}\n\n/**\n * Shared HEAD options. Mirrors {@link DownloadCommonOptions} but omits\n * `method` (always HEAD) and `onProgress` (no body to track).\n */\ntype HeadCommonOptions = Omit<DownloadCommonOptions, 'method' | 'onProgress'>\n\n/** Options for a HEAD-by-ID request. */\nexport interface HeadByIdOptions extends HeadCommonOptions {\n /** ID of the file version to inspect. */\n readonly fileId: FileId\n}\n\n/** Options for a HEAD-by-name request. */\nexport interface HeadByNameOptions extends HeadCommonOptions {\n /** Name of the bucket containing the file. */\n readonly bucketName: string\n /** Full file name (path) within the bucket. */\n readonly fileName: string\n}\n\n/**\n * Downloads a file by its unique ID in a single HTTP request.\n *\n * Returns a streaming body suitable for small-to-medium files. For large files\n * that benefit from concurrent ranged fetches, use\n * {@link createParallelDownloadStream} instead.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - Download parameters.\n *\n * @returns Parsed headers and a readable stream of file bytes.\n */\nexport async function downloadById(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: DownloadByIdOptions,\n): Promise<DownloadResult> {\n const resp = await raw.downloadFileById(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.fileId,\n toRawDownloadOptions(options),\n )\n\n const headers = extractDownloadHeaders(resp.headers)\n return {\n headers,\n // HEAD requests legitimately have no body; return an empty stream so the\n // result shape stays consistent.\n body: prepareDownloadBody(resp.body ?? emptyStream(), headers, options),\n }\n}\n\n/**\n * Downloads a file by bucket name and file path in a single HTTP request.\n *\n * Returns a streaming body suitable for small-to-medium files. For large files\n * that benefit from concurrent ranged fetches, use\n * {@link createParallelDownloadStream} instead.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - Download parameters.\n *\n * @returns Parsed headers and a readable stream of file bytes.\n */\nexport async function downloadByName(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: DownloadByNameOptions,\n): Promise<DownloadResult> {\n const resp = await raw.downloadFileByName(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.bucketName,\n options.fileName,\n toRawDownloadOptions(options),\n )\n\n const headers = extractDownloadHeaders(resp.headers)\n return {\n headers,\n body: prepareDownloadBody(resp.body ?? emptyStream(), headers, options),\n }\n}\n\n/**\n * Issues a HEAD-by-ID request and returns parsed headers only. Drains\n * the (logically empty) response body internally so callers don't have\n * to remember to `body.cancel()` themselves.\n *\n * Prefer this over `downloadById({ method: 'HEAD' })` — same wire-level\n * effect, but the caller-facing result has no `body` field at all so\n * there's nothing to clean up.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - HEAD parameters (file ID + the same response-header\n * overrides and abort signal that `downloadById` accepts).\n *\n * @returns Parsed download headers (no body field).\n */\nexport async function headById(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: HeadByIdOptions,\n): Promise<HeadResult> {\n const resp = await raw.downloadFileById(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.fileId,\n { ...toRawDownloadOptions(options), method: 'HEAD' },\n )\n // Body for HEAD is normally `null` per the fetch spec. Some transports\n // (notably the SDK's `B2Simulator`) synthesize a non-null body for\n // shape consistency. In either case, cancelling is a no-op for the\n // caller; wrap in `bestEffort` so a stream-lifecycle quirk in a\n // future runtime can't fail an otherwise-successful HEAD.\n if (resp.body !== null) {\n // Bind to a local so the type narrowing carries into the closure;\n // bare `resp.body` in the lambda would re-broaden to `... | null`.\n const body = resp.body\n await bestEffort(() => body.cancel())\n }\n return { headers: extractDownloadHeaders(resp.headers) }\n}\n\n/**\n * Issues a HEAD-by-name request and returns parsed headers only. Drains\n * the (logically empty) response body internally so callers don't have\n * to remember to `body.cancel()` themselves.\n *\n * Prefer this over `downloadByName({ method: 'HEAD' })` — same wire-level\n * effect, but the caller-facing result has no `body` field at all so\n * there's nothing to clean up.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - HEAD parameters (bucket + file name + the same\n * response-header overrides and abort signal that `downloadByName`\n * accepts).\n *\n * @returns Parsed download headers (no body field).\n */\nexport async function headByName(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: HeadByNameOptions,\n): Promise<HeadResult> {\n const resp = await raw.downloadFileByName(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.bucketName,\n options.fileName,\n { ...toRawDownloadOptions(options), method: 'HEAD' },\n )\n if (resp.body !== null) {\n // Bind to a local so the type narrowing carries into the closure;\n // bare `resp.body` in the lambda would re-broaden to `... | null`.\n const body = resp.body\n await bestEffort(() => body.cancel())\n }\n return { headers: extractDownloadHeaders(resp.headers) }\n}\n\n/**\n * Translates the public download-options shape into the raw client's\n * {@link DownloadFileOptions}, dropping the request-target fields (`fileId`,\n * `bucketName`, `fileName`) that don't apply at the transport layer.\n *\n * @param options - Caller-supplied download options.\n *\n * @returns The raw transport-layer options.\n */\nfunction toRawDownloadOptions(options: DownloadCommonOptions): DownloadFileOptions {\n return {\n ...(options.method !== undefined ? { method: options.method } : {}),\n ...(options.range !== undefined ? { range: options.range } : {}),\n ...(options.serverSideEncryption !== undefined\n ? { serverSideEncryption: options.serverSideEncryption }\n : {}),\n ...(options.b2ContentDisposition !== undefined\n ? { b2ContentDisposition: options.b2ContentDisposition }\n : {}),\n ...(options.b2ContentLanguage !== undefined\n ? { b2ContentLanguage: options.b2ContentLanguage }\n : {}),\n ...(options.b2ContentEncoding !== undefined\n ? { b2ContentEncoding: options.b2ContentEncoding }\n : {}),\n ...(options.b2ContentType !== undefined ? { b2ContentType: options.b2ContentType } : {}),\n ...(options.b2CacheControl !== undefined ? { b2CacheControl: options.b2CacheControl } : {}),\n ...(options.b2Expires !== undefined ? { b2Expires: options.b2Expires } : {}),\n ...(options.signal !== undefined ? { signal: options.signal } : {}),\n }\n}\n\n/**\n * Builds an immediately-closed empty ReadableStream. Used as the body of a\n * HEAD download response so callers always get a stream they can `pipeTo`.\n *\n * @returns A ReadableStream that yields zero bytes and immediately closes.\n */\nfunction emptyStream(): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.close()\n },\n })\n}\n\n/**\n * Applies stream wrappers common to single-request downloads.\n *\n * Full-body GET downloads are checksum-verified when B2 supplies a real\n * whole-file SHA-1. HEAD requests and ranged GETs are skipped because the\n * response body is empty or partial while `X-Bz-Content-Sha1` describes the\n * full file version.\n *\n * @param body - Download response body.\n * @param headers - Parsed download headers.\n * @param options - Caller-supplied download options.\n *\n * @returns A stream wrapped for checksum verification and progress reporting.\n */\nfunction prepareDownloadBody(\n body: ReadableStream<Uint8Array>,\n headers: DownloadHeaders,\n options: DownloadCommonOptions,\n): ReadableStream<Uint8Array> {\n const shouldVerify = options.method !== 'HEAD' && options.range === undefined\n const verifiedBody = shouldVerify ? verifyDownloadStream(body, headers.contentSha1) : body\n return instrumentProgress(verifiedBody, headers.contentLength, options.onProgress)\n}\n\n/**\n * Wraps a body stream with a `TransformStream` that increments a\n * {@link ProgressTracker} for each chunk and reports `partsCompleted: 1`\n * when the stream finishes.\n *\n * When `listener` is undefined the function short-circuits and returns\n * the original stream, so unobserved downloads pay no overhead.\n *\n * @param body - The download response body to wrap.\n * @param totalBytes - Expected total bytes (response `Content-Length`).\n * @param listener - Caller-supplied progress callback, or undefined.\n *\n * @returns A stream that emits the same bytes and reports progress.\n */\nfunction instrumentProgress(\n body: ReadableStream<Uint8Array>,\n totalBytes: number,\n listener: ProgressListener | undefined,\n): ReadableStream<Uint8Array> {\n if (listener === undefined) return body\n const tracker = new ProgressTracker(listener, totalBytes, 1)\n const transform = new TransformStream<Uint8Array, Uint8Array>({\n transform(chunk, controller) {\n tracker.addBytes(chunk.byteLength)\n controller.enqueue(chunk)\n },\n flush() {\n tracker.completePart()\n },\n })\n return body.pipeThrough(transform)\n}\n\n/**\n * Extracts B2-specific download headers into a structured object.\n * @param headers - The HTTP response headers from the download.\n *\n * @returns The parsed download metadata.\n */\nfunction extractDownloadHeaders(headers: Headers): DownloadHeaders {\n const headerParseIssues: DownloadHeaderParseIssue[] = []\n const fileInfo = parseFileInfoHeaders(headers)\n const clientUnauthorizedToRead = parseClientUnauthorizedToRead(headers, headerParseIssues)\n const contentDisposition = optionalHeader(headers, DownloadHeaderName.ContentDisposition)\n const contentLanguage = optionalHeader(headers, DownloadHeaderName.ContentLanguage)\n const contentEncoding = optionalHeader(headers, DownloadHeaderName.ContentEncoding)\n const cacheControl = optionalHeader(headers, DownloadHeaderName.CacheControl)\n const expires = optionalHeader(headers, DownloadHeaderName.Expires)\n const contentRange = optionalHeader(headers, DownloadHeaderName.ContentRange)\n const serverSideEncryption = parseDownloadServerSideEncryption(headers, headerParseIssues)\n const fileRetention = parseDownloadFileRetention(\n headers,\n clientUnauthorizedToRead,\n headerParseIssues,\n )\n const legalHold = parseDownloadLegalHold(headers, clientUnauthorizedToRead, headerParseIssues)\n\n return {\n contentType: headers.get(DownloadHeaderName.ContentType) ?? 'application/octet-stream',\n contentLength: Number.parseInt(headers.get(DownloadHeaderName.ContentLength) ?? '0', 10),\n ...(contentDisposition !== undefined ? { contentDisposition } : {}),\n ...(contentLanguage !== undefined ? { contentLanguage } : {}),\n ...(contentEncoding !== undefined ? { contentEncoding } : {}),\n ...(cacheControl !== undefined ? { cacheControl } : {}),\n ...(expires !== undefined ? { expires } : {}),\n ...(contentRange !== undefined ? { contentRange } : {}),\n // B2 sends the literal `'none'` for multipart-finished files; collapse\n // to `null` so the typed `string | null` actually means \"no SHA-1\".\n contentSha1: normalizeSha1(headers.get(DownloadHeaderName.ContentSha1)),\n fileId: fileIdOf(headers.get(DownloadHeaderName.FileId) ?? ''),\n fileName: decodeURIComponent(headers.get(DownloadHeaderName.FileName) ?? ''),\n fileInfo,\n uploadTimestamp: Number.parseInt(headers.get(DownloadHeaderName.UploadTimestamp) ?? '0', 10),\n ...(serverSideEncryption !== undefined ? { serverSideEncryption } : {}),\n ...(fileRetention !== undefined ? { fileRetention } : {}),\n ...(legalHold !== undefined ? { legalHold } : {}),\n ...(clientUnauthorizedToRead !== undefined ? { clientUnauthorizedToRead } : {}),\n ...(headerParseIssues.length > 0 ? { headerParseIssues } : {}),\n }\n}\n\nfunction optionalHeader(headers: Headers, name: string): string | undefined {\n return headers.get(name) ?? undefined\n}\n\nfunction parseDownloadServerSideEncryption(\n headers: Headers,\n headerParseIssues: DownloadHeaderParseIssue[],\n): DownloadServerSideEncryption | undefined {\n const managedAlgorithm = optionalHeader(headers, DownloadHeaderName.ServerSideEncryption)\n if (managedAlgorithm !== undefined) {\n if (managedAlgorithm !== EncryptionAlgorithm.Aes256) {\n headerParseIssues.push({\n headerName: DownloadHeaderName.ServerSideEncryption,\n value: managedAlgorithm,\n })\n return undefined\n }\n return { mode: EncryptionMode.SseB2, algorithm: managedAlgorithm }\n }\n\n const customerAlgorithm = optionalHeader(\n headers,\n DownloadHeaderName.ServerSideEncryptionCustomerAlgorithm,\n )\n const customerKeyMd5 = optionalHeader(\n headers,\n DownloadHeaderName.ServerSideEncryptionCustomerKeyMd5,\n )\n if (customerAlgorithm === undefined || customerKeyMd5 === undefined) return undefined\n if (customerAlgorithm !== EncryptionAlgorithm.Aes256) {\n headerParseIssues.push({\n headerName: DownloadHeaderName.ServerSideEncryptionCustomerAlgorithm,\n value: customerAlgorithm,\n })\n return undefined\n }\n return { mode: EncryptionMode.SseC, algorithm: customerAlgorithm, customerKeyMd5 }\n}\n\nfunction parseDownloadFileRetention(\n headers: Headers,\n clientUnauthorizedToRead: DownloadHeaders['clientUnauthorizedToRead'],\n headerParseIssues: DownloadHeaderParseIssue[],\n): DownloadHeaders['fileRetention'] {\n if (\n clientUnauthorizedToRead?.includes(DownloadClientUnauthorizedToReadMarker.FileRetentionMode) ===\n true ||\n clientUnauthorizedToRead?.includes(\n DownloadClientUnauthorizedToReadMarker.FileRetentionRetainUntilTimestamp,\n ) === true\n ) {\n return { isClientAuthorizedToRead: false, value: null }\n }\n\n const rawMode = optionalHeader(headers, DownloadHeaderName.FileRetentionMode)\n const rawRetainUntilTimestamp = optionalHeader(\n headers,\n DownloadHeaderName.FileRetentionRetainUntilTimestamp,\n )\n if (rawMode === undefined && rawRetainUntilTimestamp === undefined) return undefined\n return {\n isClientAuthorizedToRead: true,\n value: {\n mode: parseRetentionMode(rawMode, headerParseIssues),\n retainUntilTimestamp: parseRetentionTimestamp(rawRetainUntilTimestamp, headerParseIssues),\n },\n }\n}\n\nfunction parseRetentionMode(\n rawMode: string | undefined,\n headerParseIssues: DownloadHeaderParseIssue[],\n): FileRetentionValue['mode'] {\n if (rawMode === undefined) return null\n if (rawMode === RetentionMode.Compliance || rawMode === RetentionMode.Governance) {\n return rawMode\n }\n headerParseIssues.push({ headerName: DownloadHeaderName.FileRetentionMode, value: rawMode })\n return null\n}\n\nfunction parseRetentionTimestamp(\n rawTimestamp: string | undefined,\n headerParseIssues: DownloadHeaderParseIssue[],\n): number | null {\n if (rawTimestamp === undefined) return null\n if (!/^\\d+$/.test(rawTimestamp)) {\n headerParseIssues.push({\n headerName: DownloadHeaderName.FileRetentionRetainUntilTimestamp,\n value: rawTimestamp,\n })\n return null\n }\n const parsed = Number.parseInt(rawTimestamp, 10)\n if (Number.isFinite(parsed)) return parsed\n headerParseIssues.push({\n headerName: DownloadHeaderName.FileRetentionRetainUntilTimestamp,\n value: rawTimestamp,\n })\n return null\n}\n\nfunction parseDownloadLegalHold(\n headers: Headers,\n clientUnauthorizedToRead: DownloadHeaders['clientUnauthorizedToRead'],\n headerParseIssues: DownloadHeaderParseIssue[],\n): DownloadHeaders['legalHold'] {\n if (clientUnauthorizedToRead?.includes(DownloadClientUnauthorizedToReadMarker.FileLegalHold)) {\n return { isClientAuthorizedToRead: false, value: null }\n }\n\n const rawLegalHold = optionalHeader(headers, DownloadHeaderName.FileLegalHold)\n if (rawLegalHold === undefined) return undefined\n if (rawLegalHold === LegalHoldValue.On || rawLegalHold === LegalHoldValue.Off) {\n return { isClientAuthorizedToRead: true, value: rawLegalHold }\n }\n headerParseIssues.push({ headerName: DownloadHeaderName.FileLegalHold, value: rawLegalHold })\n return { isClientAuthorizedToRead: true, value: null }\n}\n\nfunction parseClientUnauthorizedToRead(\n headers: Headers,\n headerParseIssues: DownloadHeaderParseIssue[],\n): DownloadHeaders['clientUnauthorizedToRead'] {\n const value = optionalHeader(headers, DownloadHeaderName.ClientUnauthorizedToRead)\n if (value === undefined) return undefined\n const headerNames = value\n .split(',')\n .map((header) => header.trim())\n .filter((header) => header.length > 0)\n const knownHeaderNames = headerNames.filter(isDownloadClientUnauthorizedToReadMarker)\n for (const headerName of headerNames) {\n if (!isDownloadClientUnauthorizedToReadMarker(headerName)) {\n headerParseIssues.push({\n headerName: DownloadHeaderName.ClientUnauthorizedToRead,\n value: headerName,\n })\n }\n }\n return knownHeaderNames.length > 0 ? knownHeaderNames : undefined\n}\n\nfunction isDownloadClientUnauthorizedToReadMarker(\n headerName: string,\n): headerName is DownloadClientUnauthorizedToReadMarker {\n return Object.values(DownloadClientUnauthorizedToReadMarker).includes(\n headerName as DownloadClientUnauthorizedToReadMarker,\n )\n}\n"],"mappings":"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"}
@@ -7,7 +7,12 @@ import { FileId } from '../types/ids.js';
7
7
  export interface DownloadResult {
8
8
  /** Parsed B2 response headers (content type, SHA-1, file info, etc.). */
9
9
  readonly headers: DownloadHeaders;
10
- /** Streaming body of the downloaded file. */
10
+ /**
11
+ * Streaming body of the downloaded file.
12
+ *
13
+ * If checksum verification fails, the stream errors after bytes have already
14
+ * flowed; discard any partially written output on `ChecksumMismatchError`.
15
+ */
11
16
  readonly body: ReadableStream<Uint8Array>;
12
17
  }
13
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../src/download/single.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../src/download/single.js"],"names":[],"mappings":"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"}
@@ -7,7 +7,12 @@ import { FileId } from '../types/ids.js';
7
7
  export interface DownloadResult {
8
8
  /** Parsed B2 response headers (content type, SHA-1, file info, etc.). */
9
9
  readonly headers: DownloadHeaders;
10
- /** Streaming body of the downloaded file. */
10
+ /**
11
+ * Streaming body of the downloaded file.
12
+ *
13
+ * If checksum verification fails, the stream errors after bytes have already
14
+ * flowed; discard any partially written output on `ChecksumMismatchError`.
15
+ */
11
16
  readonly body: ReadableStream<Uint8Array>;
12
17
  }
13
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../src/download/single.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1D,OAAO,KAAK,EAAuB,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,KAAK,gBAAgB,EAAmB,MAAM,wBAAwB,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAsB,MAAM,iBAAiB,CAAA;AAIjE,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,CAAA;CAC1C;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CAClC;AAED,gEAAgE;AAChE,UAAU,qBAAqB;IAC7B,gHAAgH;IAChH,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IAChC,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,iFAAiF;IACjF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,eAAe,CAAA;IAC/C,0DAA0D;IAC1D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IACtC,uDAAuD;IACvD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,uDAAuD;IACvD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,mDAAmD;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,oDAAoD;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,oCAAoC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAA;CACvC;AAED,uDAAuD;AACvD,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,mEAAmE;AACnE,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED;;;GAGG;AACH,KAAK,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAA;AAE7E,wCAAwC;AACxC,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,0CAA0C;AAC1C,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,CAezB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAczB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,UAAU,CAAC,CAerB"}
1
+ {"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../src/download/single.js"],"names":[],"mappings":"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"}