@backblaze-labs/b2-sdk 0.3.0 → 0.4.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 (393) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/README.md +18 -5
  3. package/dist/_virtual/_b2-sdk-version-json.cjs +1 -1
  4. package/dist/_virtual/_b2-sdk-version-json.js +1 -1
  5. package/dist/auth/reauth-coalescer.cjs +65 -0
  6. package/dist/auth/reauth-coalescer.cjs.map +1 -0
  7. package/dist/auth/reauth-coalescer.d.cts +34 -0
  8. package/dist/auth/reauth-coalescer.d.cts.map +1 -0
  9. package/dist/auth/reauth-coalescer.d.ts +34 -0
  10. package/dist/auth/reauth-coalescer.d.ts.map +1 -0
  11. package/dist/auth/reauth-coalescer.js +65 -0
  12. package/dist/auth/reauth-coalescer.js.map +1 -0
  13. package/dist/backup/raw.cjs +37 -15
  14. package/dist/backup/raw.cjs.map +1 -1
  15. package/dist/backup/raw.d.cts +2 -2
  16. package/dist/backup/raw.d.cts.map +1 -1
  17. package/dist/backup/raw.d.ts +2 -2
  18. package/dist/backup/raw.d.ts.map +1 -1
  19. package/dist/backup/raw.js +37 -15
  20. package/dist/backup/raw.js.map +1 -1
  21. package/dist/bucket-validation.cjs +111 -0
  22. package/dist/bucket-validation.cjs.map +1 -0
  23. package/dist/bucket-validation.d.cts +27 -0
  24. package/dist/bucket-validation.d.cts.map +1 -0
  25. package/dist/bucket-validation.d.ts +27 -0
  26. package/dist/bucket-validation.d.ts.map +1 -0
  27. package/dist/bucket-validation.js +109 -0
  28. package/dist/bucket-validation.js.map +1 -0
  29. package/dist/bucket.cjs +123 -73
  30. package/dist/bucket.cjs.map +1 -1
  31. package/dist/bucket.d.cts +156 -61
  32. package/dist/bucket.d.cts.map +1 -1
  33. package/dist/bucket.d.ts +156 -61
  34. package/dist/bucket.d.ts.map +1 -1
  35. package/dist/bucket.js +123 -73
  36. package/dist/bucket.js.map +1 -1
  37. package/dist/client.cjs +29 -8
  38. package/dist/client.cjs.map +1 -1
  39. package/dist/client.d.cts +30 -9
  40. package/dist/client.d.cts.map +1 -1
  41. package/dist/client.d.ts +30 -9
  42. package/dist/client.d.ts.map +1 -1
  43. package/dist/client.js +29 -8
  44. package/dist/client.js.map +1 -1
  45. package/dist/download/single.cjs +38 -13
  46. package/dist/download/single.cjs.map +1 -1
  47. package/dist/download/single.d.cts +10 -4
  48. package/dist/download/single.d.cts.map +1 -1
  49. package/dist/download/single.d.ts +10 -4
  50. package/dist/download/single.d.ts.map +1 -1
  51. package/dist/download/single.js +38 -13
  52. package/dist/download/single.js.map +1 -1
  53. package/dist/errors/index.cjs +27 -4
  54. package/dist/errors/index.cjs.map +1 -1
  55. package/dist/errors/index.d.cts +15 -0
  56. package/dist/errors/index.d.cts.map +1 -1
  57. package/dist/errors/index.d.ts +15 -0
  58. package/dist/errors/index.d.ts.map +1 -1
  59. package/dist/errors/index.js +27 -5
  60. package/dist/errors/index.js.map +1 -1
  61. package/dist/http/non-idempotent-mutations.cjs +38 -0
  62. package/dist/http/non-idempotent-mutations.cjs.map +1 -0
  63. package/dist/http/non-idempotent-mutations.d.cts +25 -0
  64. package/dist/http/non-idempotent-mutations.d.cts.map +1 -0
  65. package/dist/http/non-idempotent-mutations.d.ts +25 -0
  66. package/dist/http/non-idempotent-mutations.d.ts.map +1 -0
  67. package/dist/http/non-idempotent-mutations.js +35 -0
  68. package/dist/http/non-idempotent-mutations.js.map +1 -0
  69. package/dist/http/transport.cjs +9 -8
  70. package/dist/http/transport.cjs.map +1 -1
  71. package/dist/http/transport.d.cts +5 -0
  72. package/dist/http/transport.d.cts.map +1 -1
  73. package/dist/http/transport.d.ts +5 -0
  74. package/dist/http/transport.d.ts.map +1 -1
  75. package/dist/http/transport.js +9 -8
  76. package/dist/http/transport.js.map +1 -1
  77. package/dist/http/user-agent.cjs +12 -1
  78. package/dist/http/user-agent.cjs.map +1 -1
  79. package/dist/http/user-agent.d.cts +8 -0
  80. package/dist/http/user-agent.d.cts.map +1 -1
  81. package/dist/http/user-agent.d.ts +8 -0
  82. package/dist/http/user-agent.d.ts.map +1 -1
  83. package/dist/http/user-agent.js +13 -3
  84. package/dist/http/user-agent.js.map +1 -1
  85. package/dist/index.cjs +25 -0
  86. package/dist/index.d.cts +10 -9
  87. package/dist/index.d.cts.map +1 -1
  88. package/dist/index.d.ts +10 -9
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +7 -6
  91. package/dist/notifications/index.cjs +3 -0
  92. package/dist/notifications/index.d.cts +2 -0
  93. package/dist/notifications/index.d.cts.map +1 -1
  94. package/dist/notifications/index.d.ts +2 -0
  95. package/dist/notifications/index.d.ts.map +1 -1
  96. package/dist/notifications/index.js +2 -1
  97. package/dist/object.cjs +12 -1
  98. package/dist/object.cjs.map +1 -1
  99. package/dist/object.d.cts +7 -1
  100. package/dist/object.d.cts.map +1 -1
  101. package/dist/object.d.ts +7 -1
  102. package/dist/object.d.ts.map +1 -1
  103. package/dist/object.js +12 -1
  104. package/dist/object.js.map +1 -1
  105. package/dist/partner/auth-core.cjs +4 -23
  106. package/dist/partner/auth-core.cjs.map +1 -1
  107. package/dist/partner/auth-core.d.cts +1 -1
  108. package/dist/partner/auth-core.d.cts.map +1 -1
  109. package/dist/partner/auth-core.d.ts +1 -1
  110. package/dist/partner/auth-core.d.ts.map +1 -1
  111. package/dist/partner/auth-core.js +5 -24
  112. package/dist/partner/auth-core.js.map +1 -1
  113. package/dist/partner/client.cjs +25 -10
  114. package/dist/partner/client.cjs.map +1 -1
  115. package/dist/partner/client.d.cts +32 -10
  116. package/dist/partner/client.d.cts.map +1 -1
  117. package/dist/partner/client.d.ts +32 -10
  118. package/dist/partner/client.d.ts.map +1 -1
  119. package/dist/partner/client.js +25 -10
  120. package/dist/partner/client.js.map +1 -1
  121. package/dist/partner/endpoint-url.cjs +1 -0
  122. package/dist/partner/endpoint-url.cjs.map +1 -1
  123. package/dist/partner/endpoint-url.d.cts +2 -0
  124. package/dist/partner/endpoint-url.d.cts.map +1 -1
  125. package/dist/partner/endpoint-url.d.ts +2 -0
  126. package/dist/partner/endpoint-url.d.ts.map +1 -1
  127. package/dist/partner/endpoint-url.js +1 -0
  128. package/dist/partner/endpoint-url.js.map +1 -1
  129. package/dist/partner/in-memory.cjs.map +1 -1
  130. package/dist/partner/in-memory.js.map +1 -1
  131. package/dist/partner/index.cjs +9 -0
  132. package/dist/partner/index.d.cts +11 -2
  133. package/dist/partner/index.d.cts.map +1 -1
  134. package/dist/partner/index.d.ts +11 -2
  135. package/dist/partner/index.d.ts.map +1 -1
  136. package/dist/partner/index.js +3 -1
  137. package/dist/partner/raw.cjs +52 -44
  138. package/dist/partner/raw.cjs.map +1 -1
  139. package/dist/partner/raw.d.cts +16 -19
  140. package/dist/partner/raw.d.cts.map +1 -1
  141. package/dist/partner/raw.d.ts +16 -19
  142. package/dist/partner/raw.d.ts.map +1 -1
  143. package/dist/partner/raw.js +52 -44
  144. package/dist/partner/raw.js.map +1 -1
  145. package/dist/partner/redaction.cjs +133 -108
  146. package/dist/partner/redaction.cjs.map +1 -1
  147. package/dist/partner/redaction.d.cts +47 -13
  148. package/dist/partner/redaction.d.cts.map +1 -1
  149. package/dist/partner/redaction.d.ts +47 -13
  150. package/dist/partner/redaction.d.ts.map +1 -1
  151. package/dist/partner/redaction.js +133 -109
  152. package/dist/partner/redaction.js.map +1 -1
  153. package/dist/raw/encoding.cjs +29 -10
  154. package/dist/raw/encoding.cjs.map +1 -1
  155. package/dist/raw/encoding.d.cts +3 -2
  156. package/dist/raw/encoding.d.cts.map +1 -1
  157. package/dist/raw/encoding.d.ts +3 -2
  158. package/dist/raw/encoding.d.ts.map +1 -1
  159. package/dist/raw/encoding.js +29 -10
  160. package/dist/raw/encoding.js.map +1 -1
  161. package/dist/raw/index.cjs +64 -39
  162. package/dist/raw/index.cjs.map +1 -1
  163. package/dist/raw/index.d.cts +21 -19
  164. package/dist/raw/index.d.cts.map +1 -1
  165. package/dist/raw/index.d.ts +21 -19
  166. package/dist/raw/index.d.ts.map +1 -1
  167. package/dist/raw/index.js +47 -40
  168. package/dist/raw/index.js.map +1 -1
  169. package/dist/raw/url.cjs.map +1 -1
  170. package/dist/raw/url.d.cts +3 -3
  171. package/dist/raw/url.d.ts +3 -3
  172. package/dist/raw/url.js.map +1 -1
  173. package/dist/simulator/index.cjs +456 -125
  174. package/dist/simulator/index.cjs.map +1 -1
  175. package/dist/simulator/index.d.cts +16 -1
  176. package/dist/simulator/index.d.cts.map +1 -1
  177. package/dist/simulator/index.d.ts +16 -1
  178. package/dist/simulator/index.d.ts.map +1 -1
  179. package/dist/simulator/index.js +449 -130
  180. package/dist/simulator/index.js.map +1 -1
  181. package/dist/simulator/partner-capabilities.cjs +77 -0
  182. package/dist/simulator/partner-capabilities.cjs.map +1 -0
  183. package/dist/simulator/partner-capabilities.d.cts +53 -0
  184. package/dist/simulator/partner-capabilities.d.cts.map +1 -0
  185. package/dist/simulator/partner-capabilities.d.ts +53 -0
  186. package/dist/simulator/partner-capabilities.d.ts.map +1 -0
  187. package/dist/simulator/partner-capabilities.js +73 -0
  188. package/dist/simulator/partner-capabilities.js.map +1 -0
  189. package/dist/simulator/partner.cjs +55 -61
  190. package/dist/simulator/partner.cjs.map +1 -1
  191. package/dist/simulator/partner.d.cts +5 -2
  192. package/dist/simulator/partner.d.cts.map +1 -1
  193. package/dist/simulator/partner.d.ts +5 -2
  194. package/dist/simulator/partner.d.ts.map +1 -1
  195. package/dist/simulator/partner.js +56 -61
  196. package/dist/simulator/partner.js.map +1 -1
  197. package/dist/simulator/validation.cjs +160 -30
  198. package/dist/simulator/validation.cjs.map +1 -1
  199. package/dist/simulator/validation.d.cts +28 -6
  200. package/dist/simulator/validation.d.cts.map +1 -1
  201. package/dist/simulator/validation.d.ts +28 -6
  202. package/dist/simulator/validation.d.ts.map +1 -1
  203. package/dist/simulator/validation.js +148 -31
  204. package/dist/simulator/validation.js.map +1 -1
  205. package/dist/streams/file-source.cjs +1 -1
  206. package/dist/streams/file-source.cjs.map +1 -1
  207. package/dist/streams/file-source.js +1 -1
  208. package/dist/streams/file-source.js.map +1 -1
  209. package/dist/streams/hash.cjs +246 -13
  210. package/dist/streams/hash.cjs.map +1 -1
  211. package/dist/streams/hash.d.cts +37 -12
  212. package/dist/streams/hash.d.cts.map +1 -1
  213. package/dist/streams/hash.d.ts +37 -12
  214. package/dist/streams/hash.d.ts.map +1 -1
  215. package/dist/streams/hash.js +246 -15
  216. package/dist/streams/hash.js.map +1 -1
  217. package/dist/streams/index.cjs +2 -0
  218. package/dist/streams/index.d.cts +1 -1
  219. package/dist/streams/index.d.cts.map +1 -1
  220. package/dist/streams/index.d.ts +1 -1
  221. package/dist/streams/index.d.ts.map +1 -1
  222. package/dist/streams/index.js +2 -2
  223. package/dist/streams/progress.cjs +63 -4
  224. package/dist/streams/progress.cjs.map +1 -1
  225. package/dist/streams/progress.d.cts +28 -2
  226. package/dist/streams/progress.d.cts.map +1 -1
  227. package/dist/streams/progress.d.ts +28 -2
  228. package/dist/streams/progress.d.ts.map +1 -1
  229. package/dist/streams/progress.js +63 -4
  230. package/dist/streams/progress.js.map +1 -1
  231. package/dist/sync/download-staging.cjs +147 -35
  232. package/dist/sync/download-staging.cjs.map +1 -1
  233. package/dist/sync/download-staging.d.cts +25 -2
  234. package/dist/sync/download-staging.d.cts.map +1 -1
  235. package/dist/sync/download-staging.d.ts +25 -2
  236. package/dist/sync/download-staging.d.ts.map +1 -1
  237. package/dist/sync/download-staging.js +146 -36
  238. package/dist/sync/download-staging.js.map +1 -1
  239. package/dist/sync/index.d.cts +1 -1
  240. package/dist/sync/index.d.cts.map +1 -1
  241. package/dist/sync/index.d.ts +1 -1
  242. package/dist/sync/index.d.ts.map +1 -1
  243. package/dist/sync/local-file-io.cjs +5 -1
  244. package/dist/sync/local-file-io.cjs.map +1 -1
  245. package/dist/sync/local-file-io.d.cts +2 -0
  246. package/dist/sync/local-file-io.d.cts.map +1 -1
  247. package/dist/sync/local-file-io.d.ts +2 -0
  248. package/dist/sync/local-file-io.d.ts.map +1 -1
  249. package/dist/sync/local-file-io.js +5 -1
  250. package/dist/sync/local-file-io.js.map +1 -1
  251. package/dist/sync/pairing.cjs +1 -0
  252. package/dist/sync/pairing.cjs.map +1 -1
  253. package/dist/sync/pairing.js +1 -0
  254. package/dist/sync/pairing.js.map +1 -1
  255. package/dist/sync/scanners/b2.cjs +2 -0
  256. package/dist/sync/scanners/b2.cjs.map +1 -1
  257. package/dist/sync/scanners/b2.d.cts.map +1 -1
  258. package/dist/sync/scanners/b2.d.ts.map +1 -1
  259. package/dist/sync/scanners/b2.js +2 -0
  260. package/dist/sync/scanners/b2.js.map +1 -1
  261. package/dist/sync/scanners/local.cjs +150 -33
  262. package/dist/sync/scanners/local.cjs.map +1 -1
  263. package/dist/sync/scanners/local.d.cts +6 -0
  264. package/dist/sync/scanners/local.d.cts.map +1 -1
  265. package/dist/sync/scanners/local.d.ts +6 -0
  266. package/dist/sync/scanners/local.d.ts.map +1 -1
  267. package/dist/sync/scanners/local.js +150 -33
  268. package/dist/sync/scanners/local.js.map +1 -1
  269. package/dist/sync/synchronizer.cjs +76 -29
  270. package/dist/sync/synchronizer.cjs.map +1 -1
  271. package/dist/sync/synchronizer.d.cts +1 -0
  272. package/dist/sync/synchronizer.d.cts.map +1 -1
  273. package/dist/sync/synchronizer.d.ts +1 -0
  274. package/dist/sync/synchronizer.d.ts.map +1 -1
  275. package/dist/sync/synchronizer.js +76 -29
  276. package/dist/sync/synchronizer.js.map +1 -1
  277. package/dist/sync/types.d.cts +19 -3
  278. package/dist/sync/types.d.cts.map +1 -1
  279. package/dist/sync/types.d.ts +19 -3
  280. package/dist/sync/types.d.ts.map +1 -1
  281. package/dist/types/backup.d.cts +6 -1
  282. package/dist/types/backup.d.cts.map +1 -1
  283. package/dist/types/backup.d.ts +6 -1
  284. package/dist/types/backup.d.ts.map +1 -1
  285. package/dist/types/bucket.cjs +81 -11
  286. package/dist/types/bucket.cjs.map +1 -1
  287. package/dist/types/bucket.d.cts +190 -39
  288. package/dist/types/bucket.d.cts.map +1 -1
  289. package/dist/types/bucket.d.ts +190 -39
  290. package/dist/types/bucket.d.ts.map +1 -1
  291. package/dist/types/bucket.js +67 -12
  292. package/dist/types/bucket.js.map +1 -1
  293. package/dist/types/download.cjs.map +1 -1
  294. package/dist/types/download.d.cts +3 -17
  295. package/dist/types/download.d.cts.map +1 -1
  296. package/dist/types/download.d.ts +3 -17
  297. package/dist/types/download.d.ts.map +1 -1
  298. package/dist/types/download.js.map +1 -1
  299. package/dist/types/encryption.cjs +18 -0
  300. package/dist/types/encryption.cjs.map +1 -1
  301. package/dist/types/encryption.d.cts +21 -11
  302. package/dist/types/encryption.d.cts.map +1 -1
  303. package/dist/types/encryption.d.ts +21 -11
  304. package/dist/types/encryption.d.ts.map +1 -1
  305. package/dist/types/encryption.js +18 -0
  306. package/dist/types/encryption.js.map +1 -1
  307. package/dist/types/file.cjs +3 -0
  308. package/dist/types/file.cjs.map +1 -1
  309. package/dist/types/file.d.cts +125 -16
  310. package/dist/types/file.d.cts.map +1 -1
  311. package/dist/types/file.d.ts +125 -16
  312. package/dist/types/file.d.ts.map +1 -1
  313. package/dist/types/file.js +3 -1
  314. package/dist/types/file.js.map +1 -1
  315. package/dist/types/index.d.cts +7 -7
  316. package/dist/types/index.d.cts.map +1 -1
  317. package/dist/types/index.d.ts +7 -7
  318. package/dist/types/index.d.ts.map +1 -1
  319. package/dist/types/key.d.cts +4 -3
  320. package/dist/types/key.d.cts.map +1 -1
  321. package/dist/types/key.d.ts +4 -3
  322. package/dist/types/key.d.ts.map +1 -1
  323. package/dist/types/notifications.cjs +30 -0
  324. package/dist/types/notifications.cjs.map +1 -1
  325. package/dist/types/notifications.d.cts +26 -1
  326. package/dist/types/notifications.d.cts.map +1 -1
  327. package/dist/types/notifications.d.ts +26 -1
  328. package/dist/types/notifications.d.ts.map +1 -1
  329. package/dist/types/notifications.js +29 -1
  330. package/dist/types/notifications.js.map +1 -1
  331. package/dist/types/partner.cjs.map +1 -1
  332. package/dist/types/partner.d.cts +28 -36
  333. package/dist/types/partner.d.cts.map +1 -1
  334. package/dist/types/partner.d.ts +28 -36
  335. package/dist/types/partner.d.ts.map +1 -1
  336. package/dist/types/partner.js.map +1 -1
  337. package/dist/types/upload.d.cts +4 -0
  338. package/dist/types/upload.d.cts.map +1 -1
  339. package/dist/types/upload.d.ts +4 -0
  340. package/dist/types/upload.d.ts.map +1 -1
  341. package/dist/upload/large.cjs +10 -7
  342. package/dist/upload/large.cjs.map +1 -1
  343. package/dist/upload/large.d.cts +15 -6
  344. package/dist/upload/large.d.cts.map +1 -1
  345. package/dist/upload/large.d.ts +15 -6
  346. package/dist/upload/large.d.ts.map +1 -1
  347. package/dist/upload/large.js +10 -7
  348. package/dist/upload/large.js.map +1 -1
  349. package/dist/upload/options.cjs.map +1 -1
  350. package/dist/upload/options.d.cts +12 -0
  351. package/dist/upload/options.d.cts.map +1 -1
  352. package/dist/upload/options.d.ts +12 -0
  353. package/dist/upload/options.d.ts.map +1 -1
  354. package/dist/upload/options.js.map +1 -1
  355. package/dist/upload/resume.cjs +4 -3
  356. package/dist/upload/resume.cjs.map +1 -1
  357. package/dist/upload/resume.d.cts +6 -4
  358. package/dist/upload/resume.d.cts.map +1 -1
  359. package/dist/upload/resume.d.ts +6 -4
  360. package/dist/upload/resume.d.ts.map +1 -1
  361. package/dist/upload/resume.js +4 -3
  362. package/dist/upload/resume.js.map +1 -1
  363. package/dist/upload/retry.cjs +17 -10
  364. package/dist/upload/retry.cjs.map +1 -1
  365. package/dist/upload/retry.d.cts.map +1 -1
  366. package/dist/upload/retry.d.ts.map +1 -1
  367. package/dist/upload/retry.js +17 -10
  368. package/dist/upload/retry.js.map +1 -1
  369. package/dist/upload/single.cjs +35 -31
  370. package/dist/upload/single.cjs.map +1 -1
  371. package/dist/upload/single.d.cts +6 -0
  372. package/dist/upload/single.d.cts.map +1 -1
  373. package/dist/upload/single.d.ts +6 -0
  374. package/dist/upload/single.d.ts.map +1 -1
  375. package/dist/upload/single.js +35 -31
  376. package/dist/upload/single.js.map +1 -1
  377. package/dist/upload/stream.cjs +12 -1
  378. package/dist/upload/stream.cjs.map +1 -1
  379. package/dist/upload/stream.d.cts +6 -0
  380. package/dist/upload/stream.d.cts.map +1 -1
  381. package/dist/upload/stream.d.ts +6 -0
  382. package/dist/upload/stream.d.ts.map +1 -1
  383. package/dist/upload/stream.js +12 -1
  384. package/dist/upload/stream.js.map +1 -1
  385. package/dist/version.cjs +56 -4
  386. package/dist/version.cjs.map +1 -1
  387. package/dist/version.d.cts +53 -4
  388. package/dist/version.d.cts.map +1 -1
  389. package/dist/version.d.ts +53 -4
  390. package/dist/version.d.ts.map +1 -1
  391. package/dist/version.js +52 -5
  392. package/dist/version.js.map +1 -1
  393. package/package.json +11 -4
package/dist/bucket.cjs CHANGED
@@ -1,3 +1,4 @@
1
+ const require_file = require("./types/file.cjs");
1
2
  const require_ids = require("./types/ids.cjs");
2
3
  const require_concurrency = require("./upload/concurrency.cjs");
3
4
  require("./util/defaults.cjs");
@@ -11,6 +12,14 @@ const require_to_error = require("./util/to-error.cjs");
11
12
  const require_object = require("./object.cjs");
12
13
  const require_paginator = require("./util/paginator.cjs");
13
14
  //#region src/bucket.ts
15
+ var EMPTY_REPLICATION_CONFIGURATION = {
16
+ asReplicationSource: null,
17
+ asReplicationDestination: null
18
+ };
19
+ function readableReplicationConfigurationOrEmpty(response, operation) {
20
+ if (!response.isClientAuthorizedToRead) throw new Error(`${operation}: replication configuration is not readable; grant readBucketReplications before composing replication updates`);
21
+ return response.value ?? EMPTY_REPLICATION_CONFIGURATION;
22
+ }
14
23
  function bucketDefaultRetentionSnapshot(info) {
15
24
  const fileLock = info.fileLockConfiguration;
16
25
  if (!fileLock.isClientAuthorizedToRead) return { unreadable: true };
@@ -20,9 +29,69 @@ function bucketDefaultRetentionSnapshot(info) {
20
29
  unreadable: false
21
30
  };
22
31
  }
32
+ function bucketDefaultServerSideEncryptionSnapshot(info) {
33
+ const encryption = info.defaultServerSideEncryption;
34
+ if (!encryption.isClientAuthorizedToRead) return { unreadable: true };
35
+ if (encryption.value === null) return { unreadable: false };
36
+ return {
37
+ encryption: encryption.value,
38
+ unreadable: false
39
+ };
40
+ }
23
41
  function resumeNeedsFreshBucketDefaults(options) {
24
42
  return (options.resume === true || options.resumeFileId !== void 0) && (options.serverSideEncryption === void 0 || options.fileRetention === void 0);
25
43
  }
44
+ function listedVersionFileIdOrThrow(version) {
45
+ const fileId = version.fileId;
46
+ if (typeof fileId === "string") return fileId;
47
+ throw new Error(`deleteAll: listFileVersions returned a row without a fileId for ${JSON.stringify(version.fileName)}; delimiter folder rows are invalid because deleteAll does not request delimiter grouping`);
48
+ }
49
+ function listedFileIdOrThrow(version, operation) {
50
+ if (typeof version.fileId === "string") return version.fileId;
51
+ throw new Error(`${operation}: list response returned a row without a string fileId for ${JSON.stringify(version.fileName)}`);
52
+ }
53
+ function assertNotFolderListEntry(version, operation) {
54
+ if (version.action !== require_file.FileAction.Folder) return;
55
+ throw new Error(`${operation}: list response returned a delimiter folder row for ${JSON.stringify(version.fileName)} without requesting delimiter grouping`);
56
+ }
57
+ function validateListedConcreteEntry(version, operation) {
58
+ assertNotFolderListEntry(version, operation);
59
+ listedFileIdOrThrow(version, operation);
60
+ return version;
61
+ }
62
+ function validateListedNameEntry(version, operation, options) {
63
+ if (version.action === require_file.FileAction.Folder) {
64
+ if (options.allowFolder) return version;
65
+ throw new Error(`${operation}: list response returned a delimiter folder row for ${JSON.stringify(version.fileName)} without requesting delimiter grouping`);
66
+ }
67
+ if (version.action === require_file.FileAction.Hide) throw new Error(`${operation}: list response returned a hide marker for ${JSON.stringify(version.fileName)}; b2_list_file_names only returns visible file versions`);
68
+ listedFileIdOrThrow(version, operation);
69
+ return version;
70
+ }
71
+ function validateListFileNamesResponse(response, options) {
72
+ const files = response.files.map((version) => validateListedNameEntry(version, "listFileNames", options));
73
+ return {
74
+ ...response,
75
+ files
76
+ };
77
+ }
78
+ function validateListFileVersionsResponse(response, options) {
79
+ if (options.allowFolder) {
80
+ const files = response.files.map((version) => {
81
+ if (version.action === require_file.FileAction.Folder) return version;
82
+ return validateListedConcreteEntry(version, "listFileVersions");
83
+ });
84
+ return {
85
+ ...response,
86
+ files
87
+ };
88
+ }
89
+ const files = response.files.map((version) => validateListedConcreteEntry(version, "listFileVersions"));
90
+ return {
91
+ ...response,
92
+ files
93
+ };
94
+ }
26
95
  /**
27
96
  * Handle to a B2 bucket providing upload, download, listing, and management operations.
28
97
  *
@@ -80,11 +149,13 @@ var Bucket = class {
80
149
  if (isLarge) {
81
150
  const bucketInfo = resumeNeedsFreshBucketDefaults(options) ? await this.refresh() : this.info;
82
151
  const bucketDefaultRetention = bucketDefaultRetentionSnapshot(bucketInfo);
152
+ const bucketDefaultSse = bucketDefaultServerSideEncryptionSnapshot(bucketInfo);
83
153
  return require_large$1.uploadLargeFile(this.client.raw, this.client.accountInfo, {
84
154
  ...options,
85
155
  bucketId: this.id,
86
156
  retry: uploadRetryOptions,
87
- bucketDefaultServerSideEncryption: bucketInfo.defaultServerSideEncryption,
157
+ ...bucketDefaultSse.encryption !== void 0 ? { bucketDefaultServerSideEncryption: bucketDefaultSse.encryption } : {},
158
+ ...bucketDefaultSse.unreadable ? { bucketDefaultServerSideEncryptionUnreadable: true } : {},
88
159
  ...bucketDefaultRetention.retention !== void 0 ? { bucketDefaultRetention: bucketDefaultRetention.retention } : {},
89
160
  ...bucketDefaultRetention.unreadable ? { bucketDefaultRetentionUnreadable: true } : {}
90
161
  });
@@ -142,29 +213,18 @@ var Bucket = class {
142
213
  ...options
143
214
  });
144
215
  }
145
- /**
146
- * Lists file names in this bucket (most recent versions only).
147
- * @param options - Optional filtering and pagination settings.
148
- *
149
- * @returns A page of file versions with an optional continuation token.
150
- */
151
216
  async listFileNames(options) {
152
- return this.client.raw.listFileNames(this.client.accountInfo.getApiUrl(), this.client.accountInfo.getAuthToken(), {
217
+ const response = await this.client.raw.listFileNames(this.client.accountInfo.getApiUrl(), this.client.accountInfo.getAuthToken(), {
153
218
  bucketId: this.id,
154
219
  ...options?.startFileName !== void 0 ? { startFileName: options.startFileName } : {},
155
220
  ...options?.pageSize !== void 0 ? { maxFileCount: options.pageSize } : {},
156
221
  ...options?.prefix !== void 0 ? { prefix: options.prefix } : {},
157
222
  ...options?.delimiter !== void 0 ? { delimiter: options.delimiter } : {}
158
223
  }, { ...options?.signal !== void 0 ? { signal: options.signal } : {} });
224
+ return options?.delimiter !== void 0 ? validateListFileNamesResponse(response, { allowFolder: true }) : validateListFileNamesResponse(response, { allowFolder: false });
159
225
  }
160
- /**
161
- * Lists all file versions in this bucket, including hidden files.
162
- * @param options - Optional filtering and pagination settings.
163
- *
164
- * @returns A page of file versions with an optional continuation token.
165
- */
166
226
  async listFileVersions(options) {
167
- return this.client.raw.listFileVersions(this.client.accountInfo.getApiUrl(), this.client.accountInfo.getAuthToken(), {
227
+ const response = await this.client.raw.listFileVersions(this.client.accountInfo.getApiUrl(), this.client.accountInfo.getAuthToken(), {
168
228
  bucketId: this.id,
169
229
  ...options?.startFileName !== void 0 ? { startFileName: options.startFileName } : {},
170
230
  ...options?.startFileId !== void 0 ? { startFileId: options.startFileId } : {},
@@ -172,65 +232,39 @@ var Bucket = class {
172
232
  ...options?.prefix !== void 0 ? { prefix: options.prefix } : {},
173
233
  ...options?.delimiter !== void 0 ? { delimiter: options.delimiter } : {}
174
234
  }, { ...options?.signal !== void 0 ? { signal: options.signal } : {} });
235
+ return options?.delimiter !== void 0 ? validateListFileVersionsResponse(response, { allowFolder: true }) : validateListFileVersionsResponse(response, { allowFolder: false });
175
236
  }
176
- /**
177
- * Async iterator that yields the latest visible version of every file in
178
- * the bucket, automatically handling pagination via `listFileNames`.
179
- *
180
- * Hidden files (those whose latest version is a hide marker) are NOT
181
- * yielded by this iterator. Use {@link paginateFileVersions} when you
182
- * need full version history.
183
- *
184
- * @param options - Filter + pagination + abort options. `pageSize` is
185
- * forwarded to `b2_list_file_names`'s `maxFileCount` (default 1000,
186
- * B2-capped at 10000).
187
- *
188
- * @returns An async iterable of {@link FileVersion} entries.
189
- *
190
- * @example
191
- * ```ts
192
- * for await (const file of bucket.paginateFileNames({ prefix: 'photos/' })) {
193
- * console.log(file.fileName, file.contentLength)
194
- * }
195
- * ```
196
- */
197
237
  paginateFileNames(options) {
198
238
  return require_paginator.paginateItems(async (cursor) => {
199
- const resp = await this.listFileNames({
239
+ const request = {
200
240
  pageSize: options?.pageSize ?? 1e3,
201
241
  ...cursor !== void 0 ? { startFileName: cursor } : {},
202
242
  ...options?.prefix !== void 0 ? { prefix: options.prefix } : {},
203
- ...options?.delimiter !== void 0 ? { delimiter: options.delimiter } : {},
204
243
  ...options?.signal !== void 0 ? { signal: options.signal } : {}
205
- });
244
+ };
245
+ const resp = options?.delimiter !== void 0 ? await this.listFileNames({
246
+ ...request,
247
+ delimiter: options.delimiter
248
+ }) : await this.listFileNames(request);
206
249
  return {
207
250
  page: resp,
208
251
  nextCursor: resp.nextFileName ?? void 0
209
252
  };
210
- }, (page) => page.files.filter((f) => f.action !== "hide"), options?.signal);
253
+ }, (page) => page.files, options?.signal);
211
254
  }
212
- /**
213
- * Async iterator that yields every version of every file in the bucket,
214
- * including hidden files and historical versions, automatically handling
215
- * pagination via `listFileVersions`.
216
- *
217
- * The two-cursor `(nextFileName, nextFileId)` continuation that the raw
218
- * endpoint exposes is threaded internally; callers iterate flat.
219
- *
220
- * @param options - Filter + pagination + abort options.
221
- *
222
- * @returns An async iterable of {@link FileVersion} entries.
223
- */
224
255
  paginateFileVersions(options) {
225
256
  return require_paginator.paginateItems(async (cursor) => {
226
- const resp = await this.listFileVersions({
257
+ const request = {
227
258
  pageSize: options?.pageSize ?? 1e3,
228
259
  ...cursor !== void 0 ? { startFileName: cursor.fileName } : {},
229
260
  ...cursor?.fileId !== void 0 ? { startFileId: cursor.fileId } : {},
230
261
  ...options?.prefix !== void 0 ? { prefix: options.prefix } : {},
231
- ...options?.delimiter !== void 0 ? { delimiter: options.delimiter } : {},
232
262
  ...options?.signal !== void 0 ? { signal: options.signal } : {}
233
- });
263
+ };
264
+ const resp = options?.delimiter !== void 0 ? await this.listFileVersions({
265
+ ...request,
266
+ delimiter: options.delimiter
267
+ }) : await this.listFileVersions(request);
234
268
  return {
235
269
  page: resp,
236
270
  nextCursor: resp.nextFileName !== null ? {
@@ -293,7 +327,7 @@ var Bucket = class {
293
327
  /**
294
328
  * Looks up the latest visible version of a file by name.
295
329
  * Uses `listFileNames` under the hood; returns `null` when the file does not
296
- * exist or its latest version is a hide marker.
330
+ * exist or is hidden.
297
331
  * @param fileName - The exact file path to look up.
298
332
  *
299
333
  * @returns The latest {@link FileVersion}, or `null` if not found.
@@ -303,7 +337,7 @@ var Bucket = class {
303
337
  prefix: fileName,
304
338
  pageSize: 1
305
339
  })).files.find((f) => f.fileName === fileName);
306
- if (!match || match.action === "hide") return null;
340
+ if (!match) return null;
307
341
  return match;
308
342
  }
309
343
  /**
@@ -312,7 +346,7 @@ var Bucket = class {
312
346
  * no hide marker to remove (file is already visible or does not exist).
313
347
  * @param fileName - The file path to unhide.
314
348
  *
315
- * @returns The deleted hide marker version, or `null` if nothing was hidden.
349
+ * @returns The deleted listed hide-marker row, or `null` if nothing was hidden.
316
350
  */
317
351
  async unhideFile(fileName) {
318
352
  const versions = (await this.listFileVersions({
@@ -321,8 +355,10 @@ var Bucket = class {
321
355
  })).files.filter((f) => f.fileName === fileName);
322
356
  if (versions.length === 0) return null;
323
357
  const latest = versions[0];
324
- if (latest?.action !== "hide") return null;
325
- await this.deleteFileVersion(fileName, latest.fileId);
358
+ if (latest?.action !== require_file.FileAction.Hide) return null;
359
+ const latestFileId = latest.fileId;
360
+ if (typeof latestFileId !== "string") throw new Error(`unhideFile: listFileVersions returned a hide marker without a fileId for ${JSON.stringify(fileName)}`);
361
+ await this.deleteFileVersion(fileName, latestFileId);
326
362
  return latest;
327
363
  }
328
364
  /**
@@ -455,26 +491,27 @@ var Bucket = class {
455
491
  ...startFileId !== void 0 ? { startFileId } : {}
456
492
  });
457
493
  for (const version of page.files) {
494
+ const fileId = listedVersionFileIdOrThrow(version);
458
495
  if (dryRun) {
459
496
  yield {
460
497
  type: "skip",
461
498
  fileName: version.fileName,
462
- fileId: version.fileId
499
+ fileId
463
500
  };
464
501
  continue;
465
502
  }
466
503
  try {
467
- await this.deleteFileVersion(version.fileName, version.fileId);
504
+ await this.deleteFileVersion(version.fileName, fileId);
468
505
  yield {
469
506
  type: "delete",
470
507
  fileName: version.fileName,
471
- fileId: version.fileId
508
+ fileId
472
509
  };
473
510
  } catch (err) {
474
511
  yield {
475
512
  type: "error",
476
513
  fileName: version.fileName,
477
- fileId: version.fileId,
514
+ fileId,
478
515
  message: require_to_error.toError(err).message
479
516
  };
480
517
  }
@@ -528,10 +565,18 @@ var Bucket = class {
528
565
  * @returns Updated bucket metadata.
529
566
  */
530
567
  async update(options) {
568
+ const { bucketInfo, bucketType, corsRules, defaultRetention, defaultServerSideEncryption, ifRevisionIs, lifecycleRules, replicationConfiguration } = options;
531
569
  return this.client.raw.updateBucket(this.client.accountInfo.getApiUrl(), this.client.accountInfo.getAuthToken(), {
570
+ ...bucketType !== void 0 ? { bucketType } : {},
571
+ ...bucketInfo !== void 0 ? { bucketInfo } : {},
572
+ ...corsRules !== void 0 ? { corsRules } : {},
573
+ ...defaultServerSideEncryption !== void 0 ? { defaultServerSideEncryption } : {},
574
+ ...defaultRetention !== void 0 ? { defaultRetention } : {},
575
+ ...lifecycleRules !== void 0 ? { lifecycleRules } : {},
576
+ ...replicationConfiguration !== void 0 ? { replicationConfiguration } : {},
577
+ ...ifRevisionIs !== void 0 ? { ifRevisionIs } : {},
532
578
  accountId: require_ids.accountId(this.client.accountInfo.getAccountId()),
533
- bucketId: this.id,
534
- ...options
579
+ bucketId: this.id
535
580
  });
536
581
  }
537
582
  /**
@@ -638,7 +683,9 @@ var Bucket = class {
638
683
  * write. For add/remove flows the helper methods below handle the
639
684
  * refresh-then-set sequence for you.
640
685
  *
641
- * @returns The current {@link ReplicationConfiguration}.
686
+ * @returns The current readable replication wrapper. Its `value` is null
687
+ * when no replication is configured or when the caller is not authorized
688
+ * to read replication settings.
642
689
  */
643
690
  async getReplication() {
644
691
  return (await this.refresh()).replicationConfiguration;
@@ -672,9 +719,10 @@ var Bucket = class {
672
719
  *
673
720
  * @throws If no source-side replication exists yet and the caller did
674
721
  * not supply `sourceApplicationKeyId`.
722
+ * @throws If the caller is not authorized to read current replication settings.
675
723
  */
676
724
  async addReplicationRule(rule, options) {
677
- const current = (await this.refresh()).replicationConfiguration;
725
+ const current = readableReplicationConfigurationOrEmpty((await this.refresh()).replicationConfiguration, "addReplicationRule");
678
726
  const existingSource = current.asReplicationSource;
679
727
  const sourceKey = options?.sourceApplicationKeyId ?? existingSource?.sourceApplicationKeyId;
680
728
  if (!sourceKey) throw new Error("addReplicationRule: no existing source-side replication; pass options.sourceApplicationKeyId");
@@ -694,9 +742,11 @@ var Bucket = class {
694
742
  * @param replicationRuleName - Name of the rule to remove.
695
743
  *
696
744
  * @returns The updated bucket metadata.
745
+ *
746
+ * @throws If the caller is not authorized to read current replication settings.
697
747
  */
698
748
  async removeReplicationRule(replicationRuleName) {
699
- const current = (await this.refresh()).replicationConfiguration;
749
+ const current = readableReplicationConfigurationOrEmpty((await this.refresh()).replicationConfiguration, "removeReplicationRule");
700
750
  const existingSource = current.asReplicationSource;
701
751
  if (!existingSource) return this.setReplication(current);
702
752
  const filtered = existingSource.replicationRules.filter((r) => r.replicationRuleName !== replicationRuleName);
@@ -759,12 +809,12 @@ var Bucket = class {
759
809
  * Returns the current default Object Lock retention policy for new
760
810
  * uploads to this bucket, refetched from B2.
761
811
  *
762
- * @returns The default {@link BucketRetentionPolicy} (which may be
763
- * `{ mode: 'none', period: null }` when Object Lock is enabled on the
764
- * bucket but no default is set).
812
+ * @returns The default {@link BucketDefaultRetention}, or `undefined` if
813
+ * the file lock configuration is not readable. B2 represents no bucket
814
+ * default retention as `{ mode: null, period: null }`.
765
815
  */
766
816
  async getDefaultRetention() {
767
- return (await this.refresh()).defaultRetention;
817
+ return bucketDefaultRetentionSnapshot(await this.refresh()).retention;
768
818
  }
769
819
  /**
770
820
  * Sets (or clears, by passing `{ mode: 'none', period: null }`) the