@backblaze-labs/b2-sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. package/CHANGELOG.md +110 -5
  2. package/README.md +144 -33
  3. package/dist/_virtual/_b2-sdk-version-json.cjs +4 -0
  4. package/dist/_virtual/_b2-sdk-version-json.js +4 -0
  5. package/dist/auth/account-info.d.cts +32 -0
  6. package/dist/auth/account-info.d.cts.map +1 -1
  7. package/dist/auth/account-info.d.ts +32 -0
  8. package/dist/auth/account-info.d.ts.map +1 -1
  9. package/dist/auth/file.cjs +408 -207
  10. package/dist/auth/file.cjs.map +1 -1
  11. package/dist/auth/file.d.cts +77 -3
  12. package/dist/auth/file.d.cts.map +1 -1
  13. package/dist/auth/file.d.ts +77 -3
  14. package/dist/auth/file.d.ts.map +1 -1
  15. package/dist/auth/file.js +407 -207
  16. package/dist/auth/file.js.map +1 -1
  17. package/dist/auth/in-memory.cjs +212 -183
  18. package/dist/auth/in-memory.cjs.map +1 -1
  19. package/dist/auth/in-memory.d.cts +8 -0
  20. package/dist/auth/in-memory.d.cts.map +1 -1
  21. package/dist/auth/in-memory.d.ts +8 -0
  22. package/dist/auth/in-memory.d.ts.map +1 -1
  23. package/dist/auth/in-memory.js +211 -182
  24. package/dist/auth/in-memory.js.map +1 -1
  25. package/dist/auth/index.cjs +7 -9
  26. package/dist/auth/index.d.cts +3 -2
  27. package/dist/auth/index.d.cts.map +1 -1
  28. package/dist/auth/index.d.ts +3 -2
  29. package/dist/auth/index.d.ts.map +1 -1
  30. package/dist/auth/index.js +2 -8
  31. package/dist/auth/realms.cjs +80 -7
  32. package/dist/auth/realms.cjs.map +1 -1
  33. package/dist/auth/realms.d.cts +27 -4
  34. package/dist/auth/realms.d.cts.map +1 -1
  35. package/dist/auth/realms.d.ts +27 -4
  36. package/dist/auth/realms.d.ts.map +1 -1
  37. package/dist/auth/realms.js +80 -9
  38. package/dist/auth/realms.js.map +1 -1
  39. package/dist/auth/upload-url-pool.cjs +55 -51
  40. package/dist/auth/upload-url-pool.cjs.map +1 -1
  41. package/dist/auth/upload-url-pool.js +55 -51
  42. package/dist/auth/upload-url-pool.js.map +1 -1
  43. package/dist/bucket.cjs +785 -787
  44. package/dist/bucket.cjs.map +1 -1
  45. package/dist/bucket.d.cts +35 -47
  46. package/dist/bucket.d.cts.map +1 -1
  47. package/dist/bucket.d.ts +35 -47
  48. package/dist/bucket.d.ts.map +1 -1
  49. package/dist/bucket.js +780 -782
  50. package/dist/bucket.js.map +1 -1
  51. package/dist/client.cjs +246 -228
  52. package/dist/client.cjs.map +1 -1
  53. package/dist/client.d.cts +25 -17
  54. package/dist/client.d.cts.map +1 -1
  55. package/dist/client.d.ts +25 -17
  56. package/dist/client.d.ts.map +1 -1
  57. package/dist/client.js +243 -225
  58. package/dist/client.js.map +1 -1
  59. package/dist/copy/large.cjs +114 -71
  60. package/dist/copy/large.cjs.map +1 -1
  61. package/dist/copy/large.d.cts +6 -0
  62. package/dist/copy/large.d.cts.map +1 -1
  63. package/dist/copy/large.d.ts +6 -0
  64. package/dist/copy/large.d.ts.map +1 -1
  65. package/dist/copy/large.js +112 -69
  66. package/dist/copy/large.js.map +1 -1
  67. package/dist/download/checksum.cjs +89 -0
  68. package/dist/download/checksum.cjs.map +1 -0
  69. package/dist/download/checksum.d.cts +40 -0
  70. package/dist/download/checksum.d.cts.map +1 -0
  71. package/dist/download/checksum.d.ts +40 -0
  72. package/dist/download/checksum.d.ts.map +1 -0
  73. package/dist/download/checksum.js +87 -0
  74. package/dist/download/checksum.js.map +1 -0
  75. package/dist/download/parallel.cjs +214 -118
  76. package/dist/download/parallel.cjs.map +1 -1
  77. package/dist/download/parallel.d.cts +5 -1
  78. package/dist/download/parallel.d.cts.map +1 -1
  79. package/dist/download/parallel.d.ts +5 -1
  80. package/dist/download/parallel.d.ts.map +1 -1
  81. package/dist/download/parallel.js +212 -116
  82. package/dist/download/parallel.js.map +1 -1
  83. package/dist/download/single.cjs +188 -97
  84. package/dist/download/single.cjs.map +1 -1
  85. package/dist/download/single.d.cts +6 -1
  86. package/dist/download/single.d.cts.map +1 -1
  87. package/dist/download/single.d.ts +6 -1
  88. package/dist/download/single.d.ts.map +1 -1
  89. package/dist/download/single.js +186 -98
  90. package/dist/download/single.js.map +1 -1
  91. package/dist/errors/index.cjs +699 -243
  92. package/dist/errors/index.cjs.map +1 -1
  93. package/dist/errors/index.d.cts +285 -82
  94. package/dist/errors/index.d.cts.map +1 -1
  95. package/dist/errors/index.d.ts +285 -82
  96. package/dist/errors/index.d.ts.map +1 -1
  97. package/dist/errors/index.js +678 -261
  98. package/dist/errors/index.js.map +1 -1
  99. package/dist/http/retry.cjs +45 -28
  100. package/dist/http/retry.cjs.map +1 -1
  101. package/dist/http/retry.d.cts +15 -2
  102. package/dist/http/retry.d.cts.map +1 -1
  103. package/dist/http/retry.d.ts +15 -2
  104. package/dist/http/retry.d.ts.map +1 -1
  105. package/dist/http/retry.js +46 -31
  106. package/dist/http/retry.js.map +1 -1
  107. package/dist/http/transport.cjs +438 -140
  108. package/dist/http/transport.cjs.map +1 -1
  109. package/dist/http/transport.d.cts +21 -2
  110. package/dist/http/transport.d.cts.map +1 -1
  111. package/dist/http/transport.d.ts +21 -2
  112. package/dist/http/transport.d.ts.map +1 -1
  113. package/dist/http/transport.js +437 -140
  114. package/dist/http/transport.js.map +1 -1
  115. package/dist/http/url-guard.cjs +154 -89
  116. package/dist/http/url-guard.cjs.map +1 -1
  117. package/dist/http/url-guard.d.cts +25 -3
  118. package/dist/http/url-guard.d.cts.map +1 -1
  119. package/dist/http/url-guard.d.ts +25 -3
  120. package/dist/http/url-guard.d.ts.map +1 -1
  121. package/dist/http/url-guard.js +152 -90
  122. package/dist/http/url-guard.js.map +1 -1
  123. package/dist/http/user-agent.cjs +84 -44
  124. package/dist/http/user-agent.cjs.map +1 -1
  125. package/dist/http/user-agent.js +84 -46
  126. package/dist/http/user-agent.js.map +1 -1
  127. package/dist/index.cjs +101 -77
  128. package/dist/index.d.cts +27 -21
  129. package/dist/index.d.cts.map +1 -1
  130. package/dist/index.d.ts +27 -21
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +15 -71
  133. package/dist/internal/b2-naming.cjs +66 -0
  134. package/dist/internal/b2-naming.cjs.map +1 -0
  135. package/dist/internal/b2-naming.d.cts +43 -0
  136. package/dist/internal/b2-naming.d.cts.map +1 -0
  137. package/dist/internal/b2-naming.d.ts +43 -0
  138. package/dist/internal/b2-naming.d.ts.map +1 -0
  139. package/dist/internal/b2-naming.js +60 -0
  140. package/dist/internal/b2-naming.js.map +1 -0
  141. package/dist/internal/upload-retry-options.cjs +21 -0
  142. package/dist/internal/upload-retry-options.cjs.map +1 -0
  143. package/dist/internal/upload-retry-options.d.cts +12 -0
  144. package/dist/internal/upload-retry-options.d.cts.map +1 -0
  145. package/dist/internal/upload-retry-options.d.ts +12 -0
  146. package/dist/internal/upload-retry-options.d.ts.map +1 -0
  147. package/dist/internal/upload-retry-options.js +21 -0
  148. package/dist/internal/upload-retry-options.js.map +1 -0
  149. package/dist/internal/url-redaction.cjs +31 -0
  150. package/dist/internal/url-redaction.cjs.map +1 -0
  151. package/dist/internal/url-redaction.d.cts +17 -0
  152. package/dist/internal/url-redaction.d.cts.map +1 -0
  153. package/dist/internal/url-redaction.d.ts +17 -0
  154. package/dist/internal/url-redaction.d.ts.map +1 -0
  155. package/dist/internal/url-redaction.js +31 -0
  156. package/dist/internal/url-redaction.js.map +1 -0
  157. package/dist/notifications/index.cjs +4 -6
  158. package/dist/notifications/index.d.cts +1 -1
  159. package/dist/notifications/index.d.cts.map +1 -1
  160. package/dist/notifications/index.d.ts +1 -1
  161. package/dist/notifications/index.d.ts.map +1 -1
  162. package/dist/notifications/index.js +1 -6
  163. package/dist/notifications/webhook.cjs +195 -85
  164. package/dist/notifications/webhook.cjs.map +1 -1
  165. package/dist/notifications/webhook.d.cts.map +1 -1
  166. package/dist/notifications/webhook.d.ts.map +1 -1
  167. package/dist/notifications/webhook.js +195 -87
  168. package/dist/notifications/webhook.js.map +1 -1
  169. package/dist/object.cjs +253 -210
  170. package/dist/object.cjs.map +1 -1
  171. package/dist/object.d.cts +9 -55
  172. package/dist/object.d.cts.map +1 -1
  173. package/dist/object.d.ts +9 -55
  174. package/dist/object.d.ts.map +1 -1
  175. package/dist/object.js +249 -206
  176. package/dist/object.js.map +1 -1
  177. package/dist/raw/encoding.cjs +74 -35
  178. package/dist/raw/encoding.cjs.map +1 -1
  179. package/dist/raw/encoding.js +74 -38
  180. package/dist/raw/encoding.js.map +1 -1
  181. package/dist/raw/index.cjs +678 -587
  182. package/dist/raw/index.cjs.map +1 -1
  183. package/dist/raw/index.d.cts +121 -18
  184. package/dist/raw/index.d.cts.map +1 -1
  185. package/dist/raw/index.d.ts +121 -18
  186. package/dist/raw/index.d.ts.map +1 -1
  187. package/dist/raw/index.js +674 -589
  188. package/dist/raw/index.js.map +1 -1
  189. package/dist/s3/index.cjs +355 -18
  190. package/dist/s3/index.cjs.map +1 -1
  191. package/dist/s3/index.d.cts +233 -5
  192. package/dist/s3/index.d.cts.map +1 -1
  193. package/dist/s3/index.d.ts +233 -5
  194. package/dist/s3/index.d.ts.map +1 -1
  195. package/dist/s3/index.js +351 -22
  196. package/dist/s3/index.js.map +1 -1
  197. package/dist/s3/sigv4.cjs +149 -0
  198. package/dist/s3/sigv4.cjs.map +1 -0
  199. package/dist/s3/sigv4.d.cts +43 -0
  200. package/dist/s3/sigv4.d.cts.map +1 -0
  201. package/dist/s3/sigv4.d.ts +43 -0
  202. package/dist/s3/sigv4.d.ts.map +1 -0
  203. package/dist/s3/sigv4.js +148 -0
  204. package/dist/s3/sigv4.js.map +1 -0
  205. package/dist/s3/validation.cjs +69 -0
  206. package/dist/s3/validation.cjs.map +1 -0
  207. package/dist/s3/validation.d.cts +43 -0
  208. package/dist/s3/validation.d.cts.map +1 -0
  209. package/dist/s3/validation.d.ts +43 -0
  210. package/dist/s3/validation.d.ts.map +1 -0
  211. package/dist/s3/validation.js +66 -0
  212. package/dist/s3/validation.js.map +1 -0
  213. package/dist/simulator/capabilities.cjs +63 -48
  214. package/dist/simulator/capabilities.cjs.map +1 -1
  215. package/dist/simulator/capabilities.js +63 -49
  216. package/dist/simulator/capabilities.js.map +1 -1
  217. package/dist/simulator/index.cjs +2124 -1548
  218. package/dist/simulator/index.cjs.map +1 -1
  219. package/dist/simulator/index.d.cts +79 -11
  220. package/dist/simulator/index.d.cts.map +1 -1
  221. package/dist/simulator/index.d.ts +79 -11
  222. package/dist/simulator/index.d.ts.map +1 -1
  223. package/dist/simulator/index.js +2112 -1546
  224. package/dist/simulator/index.js.map +1 -1
  225. package/dist/simulator/validation.cjs +191 -153
  226. package/dist/simulator/validation.cjs.map +1 -1
  227. package/dist/simulator/validation.d.cts +3 -21
  228. package/dist/simulator/validation.d.cts.map +1 -1
  229. package/dist/simulator/validation.d.ts +3 -21
  230. package/dist/simulator/validation.d.ts.map +1 -1
  231. package/dist/simulator/validation.js +188 -162
  232. package/dist/simulator/validation.js.map +1 -1
  233. package/dist/streams/collect.cjs +74 -24
  234. package/dist/streams/collect.cjs.map +1 -1
  235. package/dist/streams/collect.d.cts +14 -1
  236. package/dist/streams/collect.d.cts.map +1 -1
  237. package/dist/streams/collect.d.ts +14 -1
  238. package/dist/streams/collect.d.ts.map +1 -1
  239. package/dist/streams/collect.js +74 -25
  240. package/dist/streams/collect.js.map +1 -1
  241. package/dist/streams/file-source.cjs +287 -0
  242. package/dist/streams/file-source.cjs.map +1 -0
  243. package/dist/streams/file-source.d.cts +96 -0
  244. package/dist/streams/file-source.d.cts.map +1 -0
  245. package/dist/streams/file-source.d.ts +96 -0
  246. package/dist/streams/file-source.d.ts.map +1 -0
  247. package/dist/streams/file-source.js +286 -0
  248. package/dist/streams/file-source.js.map +1 -0
  249. package/dist/streams/hash.cjs +207 -115
  250. package/dist/streams/hash.cjs.map +1 -1
  251. package/dist/streams/hash.d.cts +5 -4
  252. package/dist/streams/hash.d.cts.map +1 -1
  253. package/dist/streams/hash.d.ts +5 -4
  254. package/dist/streams/hash.d.ts.map +1 -1
  255. package/dist/streams/hash.js +208 -95
  256. package/dist/streams/hash.js.map +1 -1
  257. package/dist/streams/index.cjs +12 -12
  258. package/dist/streams/index.d.cts +3 -3
  259. package/dist/streams/index.d.cts.map +1 -1
  260. package/dist/streams/index.d.ts +3 -3
  261. package/dist/streams/index.d.ts.map +1 -1
  262. package/dist/streams/index.js +2 -10
  263. package/dist/streams/progress.cjs +60 -46
  264. package/dist/streams/progress.cjs.map +1 -1
  265. package/dist/streams/progress.js +60 -46
  266. package/dist/streams/progress.js.map +1 -1
  267. package/dist/streams/source.cjs +316 -146
  268. package/dist/streams/source.cjs.map +1 -1
  269. package/dist/streams/source.d.cts +56 -18
  270. package/dist/streams/source.d.cts.map +1 -1
  271. package/dist/streams/source.d.ts +56 -18
  272. package/dist/streams/source.d.ts.map +1 -1
  273. package/dist/streams/source.js +312 -149
  274. package/dist/streams/source.js.map +1 -1
  275. package/dist/sync/actions/index.cjs +236 -184
  276. package/dist/sync/actions/index.cjs.map +1 -1
  277. package/dist/sync/actions/index.d.cts +29 -21
  278. package/dist/sync/actions/index.d.cts.map +1 -1
  279. package/dist/sync/actions/index.d.ts +29 -21
  280. package/dist/sync/actions/index.d.ts.map +1 -1
  281. package/dist/sync/actions/index.js +236 -190
  282. package/dist/sync/actions/index.js.map +1 -1
  283. package/dist/sync/b2-sha1-reader.cjs +148 -0
  284. package/dist/sync/b2-sha1-reader.cjs.map +1 -0
  285. package/dist/sync/b2-sha1-reader.d.cts +58 -0
  286. package/dist/sync/b2-sha1-reader.d.cts.map +1 -0
  287. package/dist/sync/b2-sha1-reader.d.ts +58 -0
  288. package/dist/sync/b2-sha1-reader.d.ts.map +1 -0
  289. package/dist/sync/b2-sha1-reader.js +145 -0
  290. package/dist/sync/b2-sha1-reader.js.map +1 -0
  291. package/dist/sync/download-staging.cjs +265 -0
  292. package/dist/sync/download-staging.cjs.map +1 -0
  293. package/dist/sync/download-staging.d.cts +54 -0
  294. package/dist/sync/download-staging.d.cts.map +1 -0
  295. package/dist/sync/download-staging.d.ts +54 -0
  296. package/dist/sync/download-staging.d.ts.map +1 -0
  297. package/dist/sync/download-staging.js +259 -0
  298. package/dist/sync/download-staging.js.map +1 -0
  299. package/dist/sync/filesystem-errors.cjs +32 -0
  300. package/dist/sync/filesystem-errors.cjs.map +1 -0
  301. package/dist/sync/filesystem-errors.d.cts +8 -0
  302. package/dist/sync/filesystem-errors.d.cts.map +1 -0
  303. package/dist/sync/filesystem-errors.d.ts +8 -0
  304. package/dist/sync/filesystem-errors.d.ts.map +1 -0
  305. package/dist/sync/filesystem-errors.js +32 -0
  306. package/dist/sync/filesystem-errors.js.map +1 -0
  307. package/dist/sync/filters.cjs +217 -0
  308. package/dist/sync/filters.cjs.map +1 -0
  309. package/dist/sync/filters.d.cts +51 -0
  310. package/dist/sync/filters.d.cts.map +1 -0
  311. package/dist/sync/filters.d.ts +51 -0
  312. package/dist/sync/filters.d.ts.map +1 -0
  313. package/dist/sync/filters.js +213 -0
  314. package/dist/sync/filters.js.map +1 -0
  315. package/dist/sync/index.cjs +39 -22
  316. package/dist/sync/index.d.cts +14 -9
  317. package/dist/sync/index.d.cts.map +1 -1
  318. package/dist/sync/index.d.ts +14 -9
  319. package/dist/sync/index.d.ts.map +1 -1
  320. package/dist/sync/index.js +9 -20
  321. package/dist/sync/local-file-identity.cjs +61 -0
  322. package/dist/sync/local-file-identity.cjs.map +1 -0
  323. package/dist/sync/local-file-identity.d.cts +37 -0
  324. package/dist/sync/local-file-identity.d.cts.map +1 -0
  325. package/dist/sync/local-file-identity.d.ts +37 -0
  326. package/dist/sync/local-file-identity.d.ts.map +1 -0
  327. package/dist/sync/local-file-identity.js +60 -0
  328. package/dist/sync/local-file-identity.js.map +1 -0
  329. package/dist/sync/local-file-io.cjs +364 -0
  330. package/dist/sync/local-file-io.cjs.map +1 -0
  331. package/dist/sync/local-file-io.d.cts +75 -0
  332. package/dist/sync/local-file-io.d.cts.map +1 -0
  333. package/dist/sync/local-file-io.d.ts +75 -0
  334. package/dist/sync/local-file-io.d.ts.map +1 -0
  335. package/dist/sync/local-file-io.js +360 -0
  336. package/dist/sync/local-file-io.js.map +1 -0
  337. package/dist/sync/local-filesystem-root.cjs +27 -0
  338. package/dist/sync/local-filesystem-root.cjs.map +1 -0
  339. package/dist/sync/local-filesystem-root.d.cts +18 -0
  340. package/dist/sync/local-filesystem-root.d.cts.map +1 -0
  341. package/dist/sync/local-filesystem-root.d.ts +18 -0
  342. package/dist/sync/local-filesystem-root.d.ts.map +1 -0
  343. package/dist/sync/local-filesystem-root.js +26 -0
  344. package/dist/sync/local-filesystem-root.js.map +1 -0
  345. package/dist/sync/local-sha1.cjs +119 -0
  346. package/dist/sync/local-sha1.cjs.map +1 -0
  347. package/dist/sync/local-sha1.d.cts +39 -0
  348. package/dist/sync/local-sha1.d.cts.map +1 -0
  349. package/dist/sync/local-sha1.d.ts +39 -0
  350. package/dist/sync/local-sha1.d.ts.map +1 -0
  351. package/dist/sync/local-sha1.js +117 -0
  352. package/dist/sync/local-sha1.js.map +1 -0
  353. package/dist/sync/pairing.cjs +118 -29
  354. package/dist/sync/pairing.cjs.map +1 -1
  355. package/dist/sync/pairing.d.cts +7 -2
  356. package/dist/sync/pairing.d.cts.map +1 -1
  357. package/dist/sync/pairing.d.ts +7 -2
  358. package/dist/sync/pairing.d.ts.map +1 -1
  359. package/dist/sync/pairing.js +120 -31
  360. package/dist/sync/pairing.js.map +1 -1
  361. package/dist/sync/path-order.cjs +30 -0
  362. package/dist/sync/path-order.cjs.map +1 -0
  363. package/dist/sync/path-order.d.cts +28 -0
  364. package/dist/sync/path-order.d.cts.map +1 -0
  365. package/dist/sync/path-order.d.ts +28 -0
  366. package/dist/sync/path-order.d.ts.map +1 -0
  367. package/dist/sync/path-order.js +29 -0
  368. package/dist/sync/path-order.js.map +1 -0
  369. package/dist/sync/path-safety.cjs +111 -0
  370. package/dist/sync/path-safety.cjs.map +1 -0
  371. package/dist/sync/path-safety.d.cts +78 -0
  372. package/dist/sync/path-safety.d.cts.map +1 -0
  373. package/dist/sync/path-safety.d.ts +78 -0
  374. package/dist/sync/path-safety.d.ts.map +1 -0
  375. package/dist/sync/path-safety.js +105 -0
  376. package/dist/sync/path-safety.js.map +1 -0
  377. package/dist/sync/paths.d.cts +19 -0
  378. package/dist/sync/paths.d.cts.map +1 -0
  379. package/dist/sync/paths.d.ts +19 -0
  380. package/dist/sync/paths.d.ts.map +1 -0
  381. package/dist/sync/policies/compare.cjs +389 -11
  382. package/dist/sync/policies/compare.cjs.map +1 -1
  383. package/dist/sync/policies/compare.d.cts +100 -2
  384. package/dist/sync/policies/compare.d.cts.map +1 -1
  385. package/dist/sync/policies/compare.d.ts +100 -2
  386. package/dist/sync/policies/compare.d.ts.map +1 -1
  387. package/dist/sync/policies/compare.js +387 -13
  388. package/dist/sync/policies/compare.js.map +1 -1
  389. package/dist/sync/policies/index.cjs +76 -65
  390. package/dist/sync/policies/index.cjs.map +1 -1
  391. package/dist/sync/policies/index.d.cts +35 -6
  392. package/dist/sync/policies/index.d.cts.map +1 -1
  393. package/dist/sync/policies/index.d.ts +35 -6
  394. package/dist/sync/policies/index.d.ts.map +1 -1
  395. package/dist/sync/policies/index.js +76 -65
  396. package/dist/sync/policies/index.js.map +1 -1
  397. package/dist/sync/prefix.cjs +96 -0
  398. package/dist/sync/prefix.cjs.map +1 -0
  399. package/dist/sync/prefix.d.cts +55 -0
  400. package/dist/sync/prefix.d.cts.map +1 -0
  401. package/dist/sync/prefix.d.ts +55 -0
  402. package/dist/sync/prefix.d.ts.map +1 -0
  403. package/dist/sync/prefix.js +92 -0
  404. package/dist/sync/prefix.js.map +1 -0
  405. package/dist/sync/regexp-safety.cjs +192 -0
  406. package/dist/sync/regexp-safety.cjs.map +1 -0
  407. package/dist/sync/regexp-safety.d.cts +29 -0
  408. package/dist/sync/regexp-safety.d.cts.map +1 -0
  409. package/dist/sync/regexp-safety.d.ts +29 -0
  410. package/dist/sync/regexp-safety.d.ts.map +1 -0
  411. package/dist/sync/regexp-safety.js +190 -0
  412. package/dist/sync/regexp-safety.js.map +1 -0
  413. package/dist/sync/scan-events.cjs +33 -0
  414. package/dist/sync/scan-events.cjs.map +1 -0
  415. package/dist/sync/scan-events.d.cts +17 -0
  416. package/dist/sync/scan-events.d.cts.map +1 -0
  417. package/dist/sync/scan-events.d.ts +17 -0
  418. package/dist/sync/scan-events.d.ts.map +1 -0
  419. package/dist/sync/scan-events.js +32 -0
  420. package/dist/sync/scan-events.js.map +1 -0
  421. package/dist/sync/scan-limit.cjs +33 -0
  422. package/dist/sync/scan-limit.cjs.map +1 -0
  423. package/dist/sync/scan-limit.d.cts +21 -0
  424. package/dist/sync/scan-limit.d.cts.map +1 -0
  425. package/dist/sync/scan-limit.d.ts +21 -0
  426. package/dist/sync/scan-limit.d.ts.map +1 -0
  427. package/dist/sync/scan-limit.js +31 -0
  428. package/dist/sync/scan-limit.js.map +1 -0
  429. package/dist/sync/scanners/b2.cjs +239 -55
  430. package/dist/sync/scanners/b2.cjs.map +1 -1
  431. package/dist/sync/scanners/b2.d.cts +26 -7
  432. package/dist/sync/scanners/b2.d.cts.map +1 -1
  433. package/dist/sync/scanners/b2.d.ts +26 -7
  434. package/dist/sync/scanners/b2.d.ts.map +1 -1
  435. package/dist/sync/scanners/b2.js +239 -55
  436. package/dist/sync/scanners/b2.js.map +1 -1
  437. package/dist/sync/scanners/local.cjs +215 -56
  438. package/dist/sync/scanners/local.cjs.map +1 -1
  439. package/dist/sync/scanners/local.d.cts +22 -7
  440. package/dist/sync/scanners/local.d.cts.map +1 -1
  441. package/dist/sync/scanners/local.d.ts +22 -7
  442. package/dist/sync/scanners/local.d.ts.map +1 -1
  443. package/dist/sync/scanners/local.js +216 -57
  444. package/dist/sync/scanners/local.js.map +1 -1
  445. package/dist/sync/sha1-metadata.cjs +94 -0
  446. package/dist/sync/sha1-metadata.cjs.map +1 -0
  447. package/dist/sync/sha1-metadata.d.cts +82 -0
  448. package/dist/sync/sha1-metadata.d.cts.map +1 -0
  449. package/dist/sync/sha1-metadata.d.ts +82 -0
  450. package/dist/sync/sha1-metadata.d.ts.map +1 -0
  451. package/dist/sync/sha1-metadata.js +89 -0
  452. package/dist/sync/sha1-metadata.js.map +1 -0
  453. package/dist/sync/sha1-options.cjs +23 -0
  454. package/dist/sync/sha1-options.cjs.map +1 -0
  455. package/dist/sync/sha1-options.d.cts +14 -0
  456. package/dist/sync/sha1-options.d.cts.map +1 -0
  457. package/dist/sync/sha1-options.d.ts +14 -0
  458. package/dist/sync/sha1-options.d.ts.map +1 -0
  459. package/dist/sync/sha1-options.js +21 -0
  460. package/dist/sync/sha1-options.js.map +1 -0
  461. package/dist/sync/synchronizer.cjs +782 -197
  462. package/dist/sync/synchronizer.cjs.map +1 -1
  463. package/dist/sync/synchronizer.d.cts +47 -1
  464. package/dist/sync/synchronizer.d.cts.map +1 -1
  465. package/dist/sync/synchronizer.d.ts +47 -1
  466. package/dist/sync/synchronizer.d.ts.map +1 -1
  467. package/dist/sync/synchronizer.js +779 -173
  468. package/dist/sync/synchronizer.js.map +1 -1
  469. package/dist/sync/types.d.cts +208 -16
  470. package/dist/sync/types.d.cts.map +1 -1
  471. package/dist/sync/types.d.ts +208 -16
  472. package/dist/sync/types.d.ts.map +1 -1
  473. package/dist/types/auth.cjs +76 -56
  474. package/dist/types/auth.cjs.map +1 -1
  475. package/dist/types/auth.d.cts +67 -9
  476. package/dist/types/auth.d.cts.map +1 -1
  477. package/dist/types/auth.d.ts +67 -9
  478. package/dist/types/auth.d.ts.map +1 -1
  479. package/dist/types/auth.js +77 -57
  480. package/dist/types/auth.js.map +1 -1
  481. package/dist/types/bucket.cjs +74 -38
  482. package/dist/types/bucket.cjs.map +1 -1
  483. package/dist/types/bucket.js +75 -41
  484. package/dist/types/bucket.js.map +1 -1
  485. package/dist/types/encryption.cjs +364 -327
  486. package/dist/types/encryption.cjs.map +1 -1
  487. package/dist/types/encryption.d.cts +16 -0
  488. package/dist/types/encryption.d.cts.map +1 -1
  489. package/dist/types/encryption.d.ts +16 -0
  490. package/dist/types/encryption.d.ts.map +1 -1
  491. package/dist/types/encryption.js +364 -310
  492. package/dist/types/encryption.js.map +1 -1
  493. package/dist/types/errors.cjs +47 -0
  494. package/dist/types/errors.cjs.map +1 -0
  495. package/dist/types/errors.d.cts +13 -4
  496. package/dist/types/errors.d.cts.map +1 -1
  497. package/dist/types/errors.d.ts +13 -4
  498. package/dist/types/errors.d.ts.map +1 -1
  499. package/dist/types/errors.js +47 -0
  500. package/dist/types/errors.js.map +1 -0
  501. package/dist/types/file.cjs +36 -19
  502. package/dist/types/file.cjs.map +1 -1
  503. package/dist/types/file.d.cts +2 -2
  504. package/dist/types/file.d.cts.map +1 -1
  505. package/dist/types/file.d.ts +2 -2
  506. package/dist/types/file.d.ts.map +1 -1
  507. package/dist/types/file.js +37 -21
  508. package/dist/types/file.js.map +1 -1
  509. package/dist/types/ids.cjs +53 -9
  510. package/dist/types/ids.cjs.map +1 -1
  511. package/dist/types/ids.js +54 -15
  512. package/dist/types/ids.js.map +1 -1
  513. package/dist/types/index.d.cts +12 -11
  514. package/dist/types/index.d.cts.map +1 -1
  515. package/dist/types/index.d.ts +12 -11
  516. package/dist/types/index.d.ts.map +1 -1
  517. package/dist/types/key.d.cts +44 -8
  518. package/dist/types/key.d.cts.map +1 -1
  519. package/dist/types/key.d.ts +44 -8
  520. package/dist/types/key.d.ts.map +1 -1
  521. package/dist/types/lock.cjs +33 -13
  522. package/dist/types/lock.cjs.map +1 -1
  523. package/dist/types/lock.js +34 -15
  524. package/dist/types/lock.js.map +1 -1
  525. package/dist/types/notifications.cjs +44 -22
  526. package/dist/types/notifications.cjs.map +1 -1
  527. package/dist/types/notifications.js +45 -23
  528. package/dist/types/notifications.js.map +1 -1
  529. package/dist/types/upload.d.cts +39 -5
  530. package/dist/types/upload.d.cts.map +1 -1
  531. package/dist/types/upload.d.ts +39 -5
  532. package/dist/types/upload.d.ts.map +1 -1
  533. package/dist/upload/abort-scope.cjs +91 -0
  534. package/dist/upload/abort-scope.cjs.map +1 -0
  535. package/dist/upload/abort-scope.d.cts +48 -0
  536. package/dist/upload/abort-scope.d.cts.map +1 -0
  537. package/dist/upload/abort-scope.d.ts +48 -0
  538. package/dist/upload/abort-scope.d.ts.map +1 -0
  539. package/dist/upload/abort-scope.js +88 -0
  540. package/dist/upload/abort-scope.js.map +1 -0
  541. package/dist/upload/cancel.cjs +183 -8
  542. package/dist/upload/cancel.cjs.map +1 -1
  543. package/dist/upload/cancel.d.cts +110 -2
  544. package/dist/upload/cancel.d.cts.map +1 -1
  545. package/dist/upload/cancel.d.ts +110 -2
  546. package/dist/upload/cancel.d.ts.map +1 -1
  547. package/dist/upload/cancel.js +178 -9
  548. package/dist/upload/cancel.js.map +1 -1
  549. package/dist/upload/concurrency.cjs +79 -52
  550. package/dist/upload/concurrency.cjs.map +1 -1
  551. package/dist/upload/concurrency.js +79 -53
  552. package/dist/upload/concurrency.js.map +1 -1
  553. package/dist/upload/finish.cjs +59 -0
  554. package/dist/upload/finish.cjs.map +1 -0
  555. package/dist/upload/finish.d.cts +26 -0
  556. package/dist/upload/finish.d.cts.map +1 -0
  557. package/dist/upload/finish.d.ts +26 -0
  558. package/dist/upload/finish.d.ts.map +1 -0
  559. package/dist/upload/finish.js +59 -0
  560. package/dist/upload/finish.js.map +1 -0
  561. package/dist/upload/large.cjs +301 -218
  562. package/dist/upload/large.cjs.map +1 -1
  563. package/dist/upload/large.d.cts +76 -9
  564. package/dist/upload/large.d.cts.map +1 -1
  565. package/dist/upload/large.d.ts +76 -9
  566. package/dist/upload/large.d.ts.map +1 -1
  567. package/dist/upload/large.js +301 -218
  568. package/dist/upload/large.js.map +1 -1
  569. package/dist/upload/options.cjs +28 -0
  570. package/dist/upload/options.cjs.map +1 -0
  571. package/dist/upload/options.d.cts +104 -0
  572. package/dist/upload/options.d.cts.map +1 -0
  573. package/dist/upload/options.d.ts +104 -0
  574. package/dist/upload/options.d.ts.map +1 -0
  575. package/dist/upload/options.js +27 -0
  576. package/dist/upload/options.js.map +1 -0
  577. package/dist/upload/resume.cjs +333 -33
  578. package/dist/upload/resume.cjs.map +1 -1
  579. package/dist/upload/resume.d.cts +82 -12
  580. package/dist/upload/resume.d.cts.map +1 -1
  581. package/dist/upload/resume.d.ts +82 -12
  582. package/dist/upload/resume.d.ts.map +1 -1
  583. package/dist/upload/resume.js +330 -33
  584. package/dist/upload/resume.js.map +1 -1
  585. package/dist/upload/retry.cjs +186 -0
  586. package/dist/upload/retry.cjs.map +1 -0
  587. package/dist/upload/retry.d.cts +127 -0
  588. package/dist/upload/retry.d.cts.map +1 -0
  589. package/dist/upload/retry.d.ts +127 -0
  590. package/dist/upload/retry.d.ts.map +1 -0
  591. package/dist/upload/retry.js +182 -0
  592. package/dist/upload/retry.js.map +1 -0
  593. package/dist/upload/single.cjs +68 -44
  594. package/dist/upload/single.cjs.map +1 -1
  595. package/dist/upload/single.d.cts +2 -1
  596. package/dist/upload/single.d.cts.map +1 -1
  597. package/dist/upload/single.d.ts +2 -1
  598. package/dist/upload/single.d.ts.map +1 -1
  599. package/dist/upload/single.js +68 -44
  600. package/dist/upload/single.js.map +1 -1
  601. package/dist/upload/stream.cjs +317 -193
  602. package/dist/upload/stream.cjs.map +1 -1
  603. package/dist/upload/stream.d.cts +3 -1
  604. package/dist/upload/stream.d.cts.map +1 -1
  605. package/dist/upload/stream.d.ts +3 -1
  606. package/dist/upload/stream.d.ts.map +1 -1
  607. package/dist/upload/stream.js +316 -192
  608. package/dist/upload/stream.js.map +1 -1
  609. package/dist/util/best-effort.cjs +42 -8
  610. package/dist/util/best-effort.cjs.map +1 -1
  611. package/dist/util/best-effort.d.cts +2 -1
  612. package/dist/util/best-effort.d.cts.map +1 -1
  613. package/dist/util/best-effort.d.ts +2 -1
  614. package/dist/util/best-effort.d.ts.map +1 -1
  615. package/dist/util/best-effort.js +43 -9
  616. package/dist/util/best-effort.js.map +1 -1
  617. package/dist/util/bytes.cjs +23 -0
  618. package/dist/util/bytes.cjs.map +1 -0
  619. package/dist/util/bytes.d.cts +15 -0
  620. package/dist/util/bytes.d.cts.map +1 -0
  621. package/dist/util/bytes.d.ts +15 -0
  622. package/dist/util/bytes.d.ts.map +1 -0
  623. package/dist/util/bytes.js +23 -0
  624. package/dist/util/bytes.js.map +1 -0
  625. package/dist/util/crypto.cjs +68 -0
  626. package/dist/util/crypto.cjs.map +1 -0
  627. package/dist/util/crypto.d.cts +26 -0
  628. package/dist/util/crypto.d.cts.map +1 -0
  629. package/dist/util/crypto.d.ts +26 -0
  630. package/dist/util/crypto.d.ts.map +1 -0
  631. package/dist/util/crypto.js +66 -0
  632. package/dist/util/crypto.js.map +1 -0
  633. package/dist/util/defaults.cjs +25 -9
  634. package/dist/util/defaults.cjs.map +1 -1
  635. package/dist/util/defaults.js +26 -11
  636. package/dist/util/defaults.js.map +1 -1
  637. package/dist/util/error-reason.cjs +41 -0
  638. package/dist/util/error-reason.cjs.map +1 -0
  639. package/dist/util/error-reason.d.cts +9 -0
  640. package/dist/util/error-reason.d.cts.map +1 -0
  641. package/dist/util/error-reason.d.ts +9 -0
  642. package/dist/util/error-reason.d.ts.map +1 -0
  643. package/dist/util/error-reason.js +41 -0
  644. package/dist/util/error-reason.js.map +1 -0
  645. package/dist/util/http.cjs +23 -0
  646. package/dist/util/http.cjs.map +1 -0
  647. package/dist/util/http.d.cts +13 -0
  648. package/dist/util/http.d.cts.map +1 -0
  649. package/dist/util/http.d.ts +13 -0
  650. package/dist/util/http.d.ts.map +1 -0
  651. package/dist/util/http.js +23 -0
  652. package/dist/util/http.js.map +1 -0
  653. package/dist/util/normalize.cjs +66 -7
  654. package/dist/util/normalize.cjs.map +1 -1
  655. package/dist/util/normalize.js +67 -10
  656. package/dist/util/normalize.js.map +1 -1
  657. package/dist/util/paginator.cjs +63 -14
  658. package/dist/util/paginator.cjs.map +1 -1
  659. package/dist/util/paginator.js +64 -16
  660. package/dist/util/paginator.js.map +1 -1
  661. package/dist/util/plan-ranges.cjs +47 -22
  662. package/dist/util/plan-ranges.cjs.map +1 -1
  663. package/dist/util/plan-ranges.js +48 -24
  664. package/dist/util/plan-ranges.js.map +1 -1
  665. package/dist/util/sha1.cjs +27 -0
  666. package/dist/util/sha1.cjs.map +1 -0
  667. package/dist/util/sha1.d.cts +17 -0
  668. package/dist/util/sha1.d.cts.map +1 -0
  669. package/dist/util/sha1.d.ts +17 -0
  670. package/dist/util/sha1.d.ts.map +1 -0
  671. package/dist/util/sha1.js +26 -0
  672. package/dist/util/sha1.js.map +1 -0
  673. package/dist/util/text-codec.cjs +29 -5
  674. package/dist/util/text-codec.cjs.map +1 -1
  675. package/dist/util/text-codec.js +30 -7
  676. package/dist/util/text-codec.js.map +1 -1
  677. package/dist/util/to-error.cjs +18 -4
  678. package/dist/util/to-error.cjs.map +1 -1
  679. package/dist/util/to-error.js +19 -5
  680. package/dist/util/to-error.js.map +1 -1
  681. package/dist/version.cjs +17 -5
  682. package/dist/version.cjs.map +1 -1
  683. package/dist/version.d.cts +3 -3
  684. package/dist/version.d.ts +3 -3
  685. package/dist/version.js +19 -6
  686. package/dist/version.js.map +1 -1
  687. package/package.json +19 -16
  688. package/dist/auth/index.cjs.map +0 -1
  689. package/dist/auth/index.js.map +0 -1
  690. package/dist/index.cjs.map +0 -1
  691. package/dist/index.js.map +0 -1
  692. package/dist/notifications/index.cjs.map +0 -1
  693. package/dist/notifications/index.js.map +0 -1
  694. package/dist/package.json.cjs +0 -9
  695. package/dist/package.json.cjs.map +0 -1
  696. package/dist/package.json.js +0 -9
  697. package/dist/package.json.js.map +0 -1
  698. package/dist/streams/index.cjs.map +0 -1
  699. package/dist/streams/index.js.map +0 -1
  700. package/dist/sync/index.cjs.map +0 -1
  701. package/dist/sync/index.js.map +0 -1
@@ -1,12 +1,35 @@
1
- /** Map of known realm names to their base API URLs. */
1
+ /** Name of a verified built-in auth realm alias. */
2
+ export type RealmName = 'production' | 'staging';
3
+ /**
4
+ * Built-in realm aliases to their `b2_authorize_account` base API URLs.
5
+ * The object remains a mutable `Record<string, string>` for source
6
+ * compatibility with earlier SDK versions that let applications add local
7
+ * aliases. SDK internals validate only the built-in aliases in
8
+ * `VERIFIED_REALM_URLS`; pass direct custom realm URLs to `B2Client` instead
9
+ * of relying on mutation for new code.
10
+ */
2
11
  export declare const REALM_URLS: Record<string, string>;
3
12
  /**
4
- * Resolve a realm name to its base API URL.
5
- * If the realm is not a known name, it is returned as-is (assumed to be a URL).
13
+ * Validate a realm URL before it is used for credential-bearing authorization.
14
+ * Any accepted custom HTTPS host receives the application key during authorize;
15
+ * do not derive custom realm URLs from untrusted input. Realm URLs must be base
16
+ * URLs without userinfo, query strings, or fragments.
17
+ *
18
+ * @param realmUrl - The resolved realm URL to validate.
19
+ *
20
+ * @throws B2RealmConfigurationError when the realm URL is not absolute, is not
21
+ * a base URL, uses an unsupported scheme, or uses non-loopback plaintext HTTP.
22
+ * Loopback IP HTTP is accepted only for local testing and sends the application
23
+ * key unencrypted to whichever process is listening on that address and port.
24
+ */
25
+ export declare function assertSecureRealmUrl(realmUrl: string): void;
26
+ /**
27
+ * Resolve a realm name to its base API URL. Unknown strings are returned
28
+ * unchanged so callers can resolve custom aliases before authorization.
6
29
  *
7
30
  * @param realm - The realm name or direct URL to resolve.
8
31
  *
9
- * @returns The base API URL for the given realm.
32
+ * @returns The mapped base API URL for a known realm, otherwise `realm`.
10
33
  */
11
34
  export declare function getRealmUrl(realm: string): string;
12
35
  //# sourceMappingURL=realms.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"realms.d.ts","sourceRoot":"","sources":["../../src/auth/realms.js"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG7C,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD"}
1
+ {"version":3,"file":"realms.d.ts","sourceRoot":"","sources":["../../src/auth/realms.js"],"names":[],"mappings":"AAGA,oDAAoD;AACpD,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,SAAS,CAAA;AAShD;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAA8B,CAAA;AA4D5E;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAU3D;AAMD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD"}
@@ -1,12 +1,35 @@
1
- /** Map of known realm names to their base API URLs. */
1
+ /** Name of a verified built-in auth realm alias. */
2
+ export type RealmName = 'production' | 'staging';
3
+ /**
4
+ * Built-in realm aliases to their `b2_authorize_account` base API URLs.
5
+ * The object remains a mutable `Record<string, string>` for source
6
+ * compatibility with earlier SDK versions that let applications add local
7
+ * aliases. SDK internals validate only the built-in aliases in
8
+ * `VERIFIED_REALM_URLS`; pass direct custom realm URLs to `B2Client` instead
9
+ * of relying on mutation for new code.
10
+ */
2
11
  export declare const REALM_URLS: Record<string, string>;
3
12
  /**
4
- * Resolve a realm name to its base API URL.
5
- * If the realm is not a known name, it is returned as-is (assumed to be a URL).
13
+ * Validate a realm URL before it is used for credential-bearing authorization.
14
+ * Any accepted custom HTTPS host receives the application key during authorize;
15
+ * do not derive custom realm URLs from untrusted input. Realm URLs must be base
16
+ * URLs without userinfo, query strings, or fragments.
17
+ *
18
+ * @param realmUrl - The resolved realm URL to validate.
19
+ *
20
+ * @throws B2RealmConfigurationError when the realm URL is not absolute, is not
21
+ * a base URL, uses an unsupported scheme, or uses non-loopback plaintext HTTP.
22
+ * Loopback IP HTTP is accepted only for local testing and sends the application
23
+ * key unencrypted to whichever process is listening on that address and port.
24
+ */
25
+ export declare function assertSecureRealmUrl(realmUrl: string): void;
26
+ /**
27
+ * Resolve a realm name to its base API URL. Unknown strings are returned
28
+ * unchanged so callers can resolve custom aliases before authorization.
6
29
  *
7
30
  * @param realm - The realm name or direct URL to resolve.
8
31
  *
9
- * @returns The base API URL for the given realm.
32
+ * @returns The mapped base API URL for a known realm, otherwise `realm`.
10
33
  */
11
34
  export declare function getRealmUrl(realm: string): string;
12
35
  //# sourceMappingURL=realms.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"realms.d.ts","sourceRoot":"","sources":["../../src/auth/realms.js"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG7C,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD"}
1
+ {"version":3,"file":"realms.d.ts","sourceRoot":"","sources":["../../src/auth/realms.js"],"names":[],"mappings":"AAGA,oDAAoD;AACpD,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,SAAS,CAAA;AAShD;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAA8B,CAAA;AA4D5E;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAU3D;AAMD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD"}
@@ -1,12 +1,83 @@
1
- const REALM_URLS = {
2
- production: "https://api.backblazeb2.com",
3
- staging: "https://api.backblazeb2.com"
1
+ import { redactUrlForError } from "../internal/url-redaction.js";
2
+ import { B2RealmConfigurationError } from "../errors/index.js";
3
+ //#region src/auth/realms.ts
4
+ var VERIFIED_REALM_URLS = {
5
+ /** Public production B2 Native API authorize endpoint. */
6
+ production: "https://api.backblazeb2.com",
7
+ /** Backblaze staging authorize endpoint from the official Python SDK realm map. */
8
+ staging: "https://api.backblaze.net"
4
9
  };
10
+ /**
11
+ * Built-in realm aliases to their `b2_authorize_account` base API URLs.
12
+ * The object remains a mutable `Record<string, string>` for source
13
+ * compatibility with earlier SDK versions that let applications add local
14
+ * aliases. SDK internals validate only the built-in aliases in
15
+ * `VERIFIED_REALM_URLS`; pass direct custom realm URLs to `B2Client` instead
16
+ * of relying on mutation for new code.
17
+ */
18
+ var REALM_URLS = { ...VERIFIED_REALM_URLS };
19
+ var HTTP_REALM_URL_WITH_HOST = /^https?:\/\/[^/?#]/i;
20
+ function parseAbsoluteRealmUrl(realmUrl) {
21
+ try {
22
+ return new URL(realmUrl);
23
+ } catch {
24
+ return null;
25
+ }
26
+ }
27
+ function realmUrlForError(realmUrl, url = parseAbsoluteRealmUrl(realmUrl)) {
28
+ return redactUrlForError(url ?? realmUrl, { invalidUrlLabel: "<invalid realm URL>" });
29
+ }
30
+ function isLoopbackHost(hostname) {
31
+ const host = hostname.toLowerCase();
32
+ if (host === "[::1]" || host === "::1") return true;
33
+ const parts = host.split(".");
34
+ return parts.length === 4 && parts[0] === "127" && parts.every((part) => /^\d+$/.test(part) && Number(part) <= 255);
35
+ }
36
+ function assertAuthorizableRealmScheme(realmUrl, url) {
37
+ if ((url.protocol === "https:" || url.protocol === "http:") && (!HTTP_REALM_URL_WITH_HOST.test(realmUrl) || url.hostname === "")) throw new B2RealmConfigurationError(`realm URL must be an absolute HTTP(S) URL with a hostname for authorization: ${realmUrlForError(realmUrl, url)}`);
38
+ if (url.protocol === "https:") return;
39
+ if (url.protocol === "http:" && isLoopbackHost(url.hostname)) return;
40
+ if (url.protocol === "http:") throw new B2RealmConfigurationError(`refusing to send credentials over plaintext HTTP realm: ${realmUrlForError(realmUrl, url)}`);
41
+ throw new B2RealmConfigurationError(`realm URL must use HTTPS or loopback IP HTTP for authorization: ${realmUrlForError(realmUrl, url)}`);
42
+ }
43
+ function assertRealmBaseUrl(realmUrl, url) {
44
+ if (url.username === "" && url.password === "" && url.search === "" && url.hash === "") return;
45
+ throw new B2RealmConfigurationError(`realm URL must not include credentials, query, or fragment for authorization: ${realmUrlForError(realmUrl, url)}`);
46
+ }
47
+ /**
48
+ * Validate a realm URL before it is used for credential-bearing authorization.
49
+ * Any accepted custom HTTPS host receives the application key during authorize;
50
+ * do not derive custom realm URLs from untrusted input. Realm URLs must be base
51
+ * URLs without userinfo, query strings, or fragments.
52
+ *
53
+ * @param realmUrl - The resolved realm URL to validate.
54
+ *
55
+ * @throws B2RealmConfigurationError when the realm URL is not absolute, is not
56
+ * a base URL, uses an unsupported scheme, or uses non-loopback plaintext HTTP.
57
+ * Loopback IP HTTP is accepted only for local testing and sends the application
58
+ * key unencrypted to whichever process is listening on that address and port.
59
+ */
60
+ function assertSecureRealmUrl(realmUrl) {
61
+ const url = parseAbsoluteRealmUrl(realmUrl);
62
+ if (url === null) throw new B2RealmConfigurationError(`realm URL must be absolute for authorization: ${realmUrlForError(realmUrl, url)}`);
63
+ assertRealmBaseUrl(realmUrl, url);
64
+ assertAuthorizableRealmScheme(realmUrl, url);
65
+ }
66
+ function isRealmName(realm) {
67
+ return Object.hasOwn(VERIFIED_REALM_URLS, realm);
68
+ }
69
+ /**
70
+ * Resolve a realm name to its base API URL. Unknown strings are returned
71
+ * unchanged so callers can resolve custom aliases before authorization.
72
+ *
73
+ * @param realm - The realm name or direct URL to resolve.
74
+ *
75
+ * @returns The mapped base API URL for a known realm, otherwise `realm`.
76
+ */
5
77
  function getRealmUrl(realm) {
6
- return REALM_URLS[realm] ?? realm;
78
+ return isRealmName(realm) ? VERIFIED_REALM_URLS[realm] : realm;
7
79
  }
8
- export {
9
- REALM_URLS,
10
- getRealmUrl
11
- };
12
- //# sourceMappingURL=realms.js.map
80
+ //#endregion
81
+ export { REALM_URLS, assertSecureRealmUrl, getRealmUrl };
82
+
83
+ //# sourceMappingURL=realms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"realms.js","sources":["../../src/auth/realms.ts"],"sourcesContent":["/** Map of known realm names to their base API URLs. */\nexport const REALM_URLS: Record<string, string> = {\n production: 'https://api.backblazeb2.com',\n staging: 'https://api.backblazeb2.com',\n}\n\n/**\n * Resolve a realm name to its base API URL.\n * If the realm is not a known name, it is returned as-is (assumed to be a URL).\n *\n * @param realm - The realm name or direct URL to resolve.\n *\n * @returns The base API URL for the given realm.\n */\nexport function getRealmUrl(realm: string): string {\n return REALM_URLS[realm] ?? realm\n}\n"],"names":[],"mappings":"AACO,MAAM,aAAqC;AAAA,EAChD,YAAY;AAAA,EACZ,SAAS;AACX;AAUO,SAAS,YAAY,OAAuB;AACjD,SAAO,WAAW,KAAK,KAAK;AAC9B;"}
1
+ {"version":3,"file":"realms.js","names":[],"sources":["../../src/auth/realms.ts"],"sourcesContent":["import { B2RealmConfigurationError } from '../errors/index.ts'\nimport { redactUrlForError } from '../internal/url-redaction.ts'\n\n/** Name of a verified built-in auth realm alias. */\nexport type RealmName = 'production' | 'staging'\n\nconst VERIFIED_REALM_URLS = {\n /** Public production B2 Native API authorize endpoint. */\n production: 'https://api.backblazeb2.com',\n /** Backblaze staging authorize endpoint from the official Python SDK realm map. */\n staging: 'https://api.backblaze.net',\n} as const satisfies Record<RealmName, string>\n\n/**\n * Built-in realm aliases to their `b2_authorize_account` base API URLs.\n * The object remains a mutable `Record<string, string>` for source\n * compatibility with earlier SDK versions that let applications add local\n * aliases. SDK internals validate only the built-in aliases in\n * `VERIFIED_REALM_URLS`; pass direct custom realm URLs to `B2Client` instead\n * of relying on mutation for new code.\n */\nexport const REALM_URLS: Record<string, string> = { ...VERIFIED_REALM_URLS }\n\n// `new URL('https:example.com')` normalizes to `https://example.com/`;\n// require the raw URL to use authority syntax before credentials are sent.\nconst HTTP_REALM_URL_WITH_HOST = /^https?:\\/\\/[^/?#]/i\n\nfunction parseAbsoluteRealmUrl(realmUrl: string): URL | null {\n try {\n return new URL(realmUrl)\n } catch {\n return null\n }\n}\n\nfunction realmUrlForError(realmUrl: string, url = parseAbsoluteRealmUrl(realmUrl)): string {\n return redactUrlForError(url ?? realmUrl, { invalidUrlLabel: '<invalid realm URL>' })\n}\n\nfunction isLoopbackHost(hostname: string): boolean {\n const host = hostname.toLowerCase()\n if (host === '[::1]' || host === '::1') return true\n\n // Intentionally excludes `localhost`: it is resolver-controlled, while this\n // gate decides whether application-key credentials may be sent over HTTP.\n const parts = host.split('.')\n return (\n parts.length === 4 &&\n parts[0] === '127' &&\n parts.every((part) => /^\\d+$/.test(part) && Number(part) <= 255)\n )\n}\n\nfunction assertAuthorizableRealmScheme(realmUrl: string, url: URL): void {\n if (\n (url.protocol === 'https:' || url.protocol === 'http:') &&\n (!HTTP_REALM_URL_WITH_HOST.test(realmUrl) || url.hostname === '')\n ) {\n throw new B2RealmConfigurationError(\n `realm URL must be an absolute HTTP(S) URL with a hostname for authorization: ${realmUrlForError(realmUrl, url)}`,\n )\n }\n if (url.protocol === 'https:') return\n if (url.protocol === 'http:' && isLoopbackHost(url.hostname)) return\n if (url.protocol === 'http:') {\n throw new B2RealmConfigurationError(\n `refusing to send credentials over plaintext HTTP realm: ${realmUrlForError(realmUrl, url)}`,\n )\n }\n throw new B2RealmConfigurationError(\n `realm URL must use HTTPS or loopback IP HTTP for authorization: ${realmUrlForError(realmUrl, url)}`,\n )\n}\n\nfunction assertRealmBaseUrl(realmUrl: string, url: URL): void {\n if (url.username === '' && url.password === '' && url.search === '' && url.hash === '') return\n throw new B2RealmConfigurationError(\n `realm URL must not include credentials, query, or fragment for authorization: ${realmUrlForError(realmUrl, url)}`,\n )\n}\n\n/**\n * Validate a realm URL before it is used for credential-bearing authorization.\n * Any accepted custom HTTPS host receives the application key during authorize;\n * do not derive custom realm URLs from untrusted input. Realm URLs must be base\n * URLs without userinfo, query strings, or fragments.\n *\n * @param realmUrl - The resolved realm URL to validate.\n *\n * @throws B2RealmConfigurationError when the realm URL is not absolute, is not\n * a base URL, uses an unsupported scheme, or uses non-loopback plaintext HTTP.\n * Loopback IP HTTP is accepted only for local testing and sends the application\n * key unencrypted to whichever process is listening on that address and port.\n */\nexport function assertSecureRealmUrl(realmUrl: string): void {\n const url = parseAbsoluteRealmUrl(realmUrl)\n if (url === null) {\n throw new B2RealmConfigurationError(\n `realm URL must be absolute for authorization: ${realmUrlForError(realmUrl, url)}`,\n )\n }\n\n assertRealmBaseUrl(realmUrl, url)\n assertAuthorizableRealmScheme(realmUrl, url)\n}\n\nfunction isRealmName(realm: string): realm is RealmName {\n return Object.hasOwn(VERIFIED_REALM_URLS, realm)\n}\n\n/**\n * Resolve a realm name to its base API URL. Unknown strings are returned\n * unchanged so callers can resolve custom aliases before authorization.\n *\n * @param realm - The realm name or direct URL to resolve.\n *\n * @returns The mapped base API URL for a known realm, otherwise `realm`.\n */\nexport function getRealmUrl(realm: string): string {\n return isRealmName(realm) ? VERIFIED_REALM_URLS[realm] : realm\n}\n"],"mappings":";;;AAMA,IAAM,sBAAsB;;CAE1B,YAAY;;CAEZ,SAAS;AACX;;;;;;;;;AAUA,IAAa,aAAqC,EAAE,GAAG,oBAAoB;AAI3E,IAAM,2BAA2B;AAEjC,SAAS,sBAAsB,UAA8B;CAC3D,IAAI;EACF,OAAO,IAAI,IAAI,QAAQ;CACzB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,iBAAiB,UAAkB,MAAM,sBAAsB,QAAQ,GAAW;CACzF,OAAO,kBAAkB,OAAO,UAAU,EAAE,iBAAiB,sBAAsB,CAAC;AACtF;AAEA,SAAS,eAAe,UAA2B;CACjD,MAAM,OAAO,SAAS,YAAY;CAClC,IAAI,SAAS,WAAW,SAAS,OAAO,OAAO;CAI/C,MAAM,QAAQ,KAAK,MAAM,GAAG;CAC5B,OACE,MAAM,WAAW,KACjB,MAAM,OAAO,SACb,MAAM,OAAO,SAAS,QAAQ,KAAK,IAAI,KAAK,OAAO,IAAI,KAAK,GAAG;AAEnE;AAEA,SAAS,8BAA8B,UAAkB,KAAgB;CACvE,KACG,IAAI,aAAa,YAAY,IAAI,aAAa,aAC9C,CAAC,yBAAyB,KAAK,QAAQ,KAAK,IAAI,aAAa,KAE9D,MAAM,IAAI,0BACR,gFAAgF,iBAAiB,UAAU,GAAG,GAChH;CAEF,IAAI,IAAI,aAAa,UAAU;CAC/B,IAAI,IAAI,aAAa,WAAW,eAAe,IAAI,QAAQ,GAAG;CAC9D,IAAI,IAAI,aAAa,SACnB,MAAM,IAAI,0BACR,2DAA2D,iBAAiB,UAAU,GAAG,GAC3F;CAEF,MAAM,IAAI,0BACR,mEAAmE,iBAAiB,UAAU,GAAG,GACnG;AACF;AAEA,SAAS,mBAAmB,UAAkB,KAAgB;CAC5D,IAAI,IAAI,aAAa,MAAM,IAAI,aAAa,MAAM,IAAI,WAAW,MAAM,IAAI,SAAS,IAAI;CACxF,MAAM,IAAI,0BACR,iFAAiF,iBAAiB,UAAU,GAAG,GACjH;AACF;;;;;;;;;;;;;;AAeA,SAAgB,qBAAqB,UAAwB;CAC3D,MAAM,MAAM,sBAAsB,QAAQ;CAC1C,IAAI,QAAQ,MACV,MAAM,IAAI,0BACR,iDAAiD,iBAAiB,UAAU,GAAG,GACjF;CAGF,mBAAmB,UAAU,GAAG;CAChC,8BAA8B,UAAU,GAAG;AAC7C;AAEA,SAAS,YAAY,OAAmC;CACtD,OAAO,OAAO,OAAO,qBAAqB,KAAK;AACjD;;;;;;;;;AAUA,SAAgB,YAAY,OAAuB;CACjD,OAAO,YAAY,KAAK,IAAI,oBAAoB,SAAS;AAC3D"}
@@ -1,52 +1,56 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- class UploadUrlPool {
4
- /** Map from key (bucket ID or file ID) to a stack of available entries. */
5
- pools = /* @__PURE__ */ new Map();
6
- /**
7
- * Take an upload URL from the pool, or return null if none are available.
8
- *
9
- * @param key - The bucket ID or file ID to look up.
10
- *
11
- * @returns An upload URL entry, or null if the pool is empty for the given key.
12
- */
13
- checkout(key) {
14
- const pool = this.pools.get(key);
15
- if (!pool || pool.length === 0) return null;
16
- return pool.pop() ?? null;
17
- }
18
- /**
19
- * Return a still-valid upload URL to the pool for future reuse.
20
- *
21
- * @param key - The bucket ID or file ID the entry belongs to.
22
- * @param entry - The upload URL entry to return to the pool.
23
- */
24
- checkin(key, entry) {
25
- let pool = this.pools.get(key);
26
- if (!pool) {
27
- pool = [];
28
- this.pools.set(key, pool);
29
- }
30
- pool.push(entry);
31
- }
32
- /**
33
- * Remove a specific upload URL from the pool (e.g. after an upload error).
34
- *
35
- * @param key - The bucket ID or file ID the entry belongs to.
36
- * @param entry - The failed upload URL entry to remove.
37
- */
38
- evict(key, entry) {
39
- const pool = this.pools.get(key);
40
- if (!pool) return;
41
- const idx = pool.findIndex((e) => e.uploadUrl === entry.uploadUrl);
42
- if (idx !== -1) {
43
- pool.splice(idx, 1);
44
- }
45
- }
46
- /** Remove all entries from every key in the pool. */
47
- clear() {
48
- this.pools.clear();
49
- }
50
- }
1
+ //#region src/auth/upload-url-pool.ts
2
+ /**
3
+ * Manages a pool of reusable upload URLs keyed by bucket ID or file ID.
4
+ * URLs are checked out before an upload, checked back in on success, and
5
+ * evicted on error so they are not reused.
6
+ */
7
+ var UploadUrlPool = class {
8
+ /** Map from key (bucket ID or file ID) to a stack of available entries. */
9
+ pools = /* @__PURE__ */ new Map();
10
+ /**
11
+ * Take an upload URL from the pool, or return null if none are available.
12
+ *
13
+ * @param key - The bucket ID or file ID to look up.
14
+ *
15
+ * @returns An upload URL entry, or null if the pool is empty for the given key.
16
+ */
17
+ checkout(key) {
18
+ const pool = this.pools.get(key);
19
+ if (!pool || pool.length === 0) return null;
20
+ return pool.pop() ?? null;
21
+ }
22
+ /**
23
+ * Return a still-valid upload URL to the pool for future reuse.
24
+ *
25
+ * @param key - The bucket ID or file ID the entry belongs to.
26
+ * @param entry - The upload URL entry to return to the pool.
27
+ */
28
+ checkin(key, entry) {
29
+ let pool = this.pools.get(key);
30
+ if (!pool) {
31
+ pool = [];
32
+ this.pools.set(key, pool);
33
+ }
34
+ pool.push(entry);
35
+ }
36
+ /**
37
+ * Remove a specific upload URL from the pool (e.g. after an upload error).
38
+ *
39
+ * @param key - The bucket ID or file ID the entry belongs to.
40
+ * @param entry - The failed upload URL entry to remove.
41
+ */
42
+ evict(key, entry) {
43
+ const pool = this.pools.get(key);
44
+ if (!pool) return;
45
+ const idx = pool.findIndex((e) => e.uploadUrl === entry.uploadUrl);
46
+ if (idx !== -1) pool.splice(idx, 1);
47
+ }
48
+ /** Remove all entries from every key in the pool. */
49
+ clear() {
50
+ this.pools.clear();
51
+ }
52
+ };
53
+ //#endregion
51
54
  exports.UploadUrlPool = UploadUrlPool;
52
- //# sourceMappingURL=upload-url-pool.cjs.map
55
+
56
+ //# sourceMappingURL=upload-url-pool.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-url-pool.cjs","sources":["../../src/auth/upload-url-pool.ts"],"sourcesContent":["import type { UploadUrlEntry } from './account-info.ts'\n\n/**\n * Manages a pool of reusable upload URLs keyed by bucket ID or file ID.\n * URLs are checked out before an upload, checked back in on success, and\n * evicted on error so they are not reused.\n */\nexport class UploadUrlPool {\n /** Map from key (bucket ID or file ID) to a stack of available entries. */\n private readonly pools = new Map<string, UploadUrlEntry[]>()\n\n /**\n * Take an upload URL from the pool, or return null if none are available.\n *\n * @param key - The bucket ID or file ID to look up.\n *\n * @returns An upload URL entry, or null if the pool is empty for the given key.\n */\n checkout(key: string): UploadUrlEntry | null {\n const pool = this.pools.get(key)\n if (!pool || pool.length === 0) return null\n return pool.pop() ?? null\n }\n\n /**\n * Return a still-valid upload URL to the pool for future reuse.\n *\n * @param key - The bucket ID or file ID the entry belongs to.\n * @param entry - The upload URL entry to return to the pool.\n */\n checkin(key: string, entry: UploadUrlEntry): void {\n let pool = this.pools.get(key)\n if (!pool) {\n pool = []\n this.pools.set(key, pool)\n }\n pool.push(entry)\n }\n\n /**\n * Remove a specific upload URL from the pool (e.g. after an upload error).\n *\n * @param key - The bucket ID or file ID the entry belongs to.\n * @param entry - The failed upload URL entry to remove.\n */\n evict(key: string, entry: UploadUrlEntry): void {\n const pool = this.pools.get(key)\n if (!pool) return\n const idx = pool.findIndex((e) => e.uploadUrl === entry.uploadUrl)\n if (idx !== -1) {\n pool.splice(idx, 1)\n }\n }\n\n /** Remove all entries from every key in the pool. */\n clear(): void {\n this.pools.clear()\n }\n}\n"],"names":[],"mappings":";;AAOO,MAAM,cAAc;AAAA;AAAA,EAER,4BAAY,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS7B,SAAS,KAAoC;AAC3C,UAAM,OAAO,KAAK,MAAM,IAAI,GAAG;AAC/B,QAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO;AACvC,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,KAAa,OAA6B;AAChD,QAAI,OAAO,KAAK,MAAM,IAAI,GAAG;AAC7B,QAAI,CAAC,MAAM;AACT,aAAO,CAAA;AACP,WAAK,MAAM,IAAI,KAAK,IAAI;AAAA,IAC1B;AACA,SAAK,KAAK,KAAK;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAa,OAA6B;AAC9C,UAAM,OAAO,KAAK,MAAM,IAAI,GAAG;AAC/B,QAAI,CAAC,KAAM;AACX,UAAM,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,cAAc,MAAM,SAAS;AACjE,QAAI,QAAQ,IAAI;AACd,WAAK,OAAO,KAAK,CAAC;AAAA,IACpB;AAAA,EACF;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,MAAM,MAAA;AAAA,EACb;AACF;;"}
1
+ {"version":3,"file":"upload-url-pool.cjs","names":[],"sources":["../../src/auth/upload-url-pool.ts"],"sourcesContent":["import type { UploadUrlEntry } from './account-info.ts'\n\n/**\n * Manages a pool of reusable upload URLs keyed by bucket ID or file ID.\n * URLs are checked out before an upload, checked back in on success, and\n * evicted on error so they are not reused.\n */\nexport class UploadUrlPool {\n /** Map from key (bucket ID or file ID) to a stack of available entries. */\n private readonly pools = new Map<string, UploadUrlEntry[]>()\n\n /**\n * Take an upload URL from the pool, or return null if none are available.\n *\n * @param key - The bucket ID or file ID to look up.\n *\n * @returns An upload URL entry, or null if the pool is empty for the given key.\n */\n checkout(key: string): UploadUrlEntry | null {\n const pool = this.pools.get(key)\n if (!pool || pool.length === 0) return null\n return pool.pop() ?? null\n }\n\n /**\n * Return a still-valid upload URL to the pool for future reuse.\n *\n * @param key - The bucket ID or file ID the entry belongs to.\n * @param entry - The upload URL entry to return to the pool.\n */\n checkin(key: string, entry: UploadUrlEntry): void {\n let pool = this.pools.get(key)\n if (!pool) {\n pool = []\n this.pools.set(key, pool)\n }\n pool.push(entry)\n }\n\n /**\n * Remove a specific upload URL from the pool (e.g. after an upload error).\n *\n * @param key - The bucket ID or file ID the entry belongs to.\n * @param entry - The failed upload URL entry to remove.\n */\n evict(key: string, entry: UploadUrlEntry): void {\n const pool = this.pools.get(key)\n if (!pool) return\n const idx = pool.findIndex((e) => e.uploadUrl === entry.uploadUrl)\n if (idx !== -1) {\n pool.splice(idx, 1)\n }\n }\n\n /** Remove all entries from every key in the pool. */\n clear(): void {\n this.pools.clear()\n }\n}\n"],"mappings":";;;;;;AAOA,IAAa,gBAAb,MAA2B;;CAEzB,wBAAyB,IAAI,IAA8B;;;;;;;;CAS3D,SAAS,KAAoC;EAC3C,MAAM,OAAO,KAAK,MAAM,IAAI,GAAG;EAC/B,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,OAAO;EACvC,OAAO,KAAK,IAAI,KAAK;CACvB;;;;;;;CAQA,QAAQ,KAAa,OAA6B;EAChD,IAAI,OAAO,KAAK,MAAM,IAAI,GAAG;EAC7B,IAAI,CAAC,MAAM;GACT,OAAO,CAAC;GACR,KAAK,MAAM,IAAI,KAAK,IAAI;EAC1B;EACA,KAAK,KAAK,KAAK;CACjB;;;;;;;CAQA,MAAM,KAAa,OAA6B;EAC9C,MAAM,OAAO,KAAK,MAAM,IAAI,GAAG;EAC/B,IAAI,CAAC,MAAM;EACX,MAAM,MAAM,KAAK,WAAW,MAAM,EAAE,cAAc,MAAM,SAAS;EACjE,IAAI,QAAQ,IACV,KAAK,OAAO,KAAK,CAAC;CAEtB;;CAGA,QAAc;EACZ,KAAK,MAAM,MAAM;CACnB;AACF"}
@@ -1,52 +1,56 @@
1
- class UploadUrlPool {
2
- /** Map from key (bucket ID or file ID) to a stack of available entries. */
3
- pools = /* @__PURE__ */ new Map();
4
- /**
5
- * Take an upload URL from the pool, or return null if none are available.
6
- *
7
- * @param key - The bucket ID or file ID to look up.
8
- *
9
- * @returns An upload URL entry, or null if the pool is empty for the given key.
10
- */
11
- checkout(key) {
12
- const pool = this.pools.get(key);
13
- if (!pool || pool.length === 0) return null;
14
- return pool.pop() ?? null;
15
- }
16
- /**
17
- * Return a still-valid upload URL to the pool for future reuse.
18
- *
19
- * @param key - The bucket ID or file ID the entry belongs to.
20
- * @param entry - The upload URL entry to return to the pool.
21
- */
22
- checkin(key, entry) {
23
- let pool = this.pools.get(key);
24
- if (!pool) {
25
- pool = [];
26
- this.pools.set(key, pool);
27
- }
28
- pool.push(entry);
29
- }
30
- /**
31
- * Remove a specific upload URL from the pool (e.g. after an upload error).
32
- *
33
- * @param key - The bucket ID or file ID the entry belongs to.
34
- * @param entry - The failed upload URL entry to remove.
35
- */
36
- evict(key, entry) {
37
- const pool = this.pools.get(key);
38
- if (!pool) return;
39
- const idx = pool.findIndex((e) => e.uploadUrl === entry.uploadUrl);
40
- if (idx !== -1) {
41
- pool.splice(idx, 1);
42
- }
43
- }
44
- /** Remove all entries from every key in the pool. */
45
- clear() {
46
- this.pools.clear();
47
- }
48
- }
49
- export {
50
- UploadUrlPool
1
+ //#region src/auth/upload-url-pool.ts
2
+ /**
3
+ * Manages a pool of reusable upload URLs keyed by bucket ID or file ID.
4
+ * URLs are checked out before an upload, checked back in on success, and
5
+ * evicted on error so they are not reused.
6
+ */
7
+ var UploadUrlPool = class {
8
+ /** Map from key (bucket ID or file ID) to a stack of available entries. */
9
+ pools = /* @__PURE__ */ new Map();
10
+ /**
11
+ * Take an upload URL from the pool, or return null if none are available.
12
+ *
13
+ * @param key - The bucket ID or file ID to look up.
14
+ *
15
+ * @returns An upload URL entry, or null if the pool is empty for the given key.
16
+ */
17
+ checkout(key) {
18
+ const pool = this.pools.get(key);
19
+ if (!pool || pool.length === 0) return null;
20
+ return pool.pop() ?? null;
21
+ }
22
+ /**
23
+ * Return a still-valid upload URL to the pool for future reuse.
24
+ *
25
+ * @param key - The bucket ID or file ID the entry belongs to.
26
+ * @param entry - The upload URL entry to return to the pool.
27
+ */
28
+ checkin(key, entry) {
29
+ let pool = this.pools.get(key);
30
+ if (!pool) {
31
+ pool = [];
32
+ this.pools.set(key, pool);
33
+ }
34
+ pool.push(entry);
35
+ }
36
+ /**
37
+ * Remove a specific upload URL from the pool (e.g. after an upload error).
38
+ *
39
+ * @param key - The bucket ID or file ID the entry belongs to.
40
+ * @param entry - The failed upload URL entry to remove.
41
+ */
42
+ evict(key, entry) {
43
+ const pool = this.pools.get(key);
44
+ if (!pool) return;
45
+ const idx = pool.findIndex((e) => e.uploadUrl === entry.uploadUrl);
46
+ if (idx !== -1) pool.splice(idx, 1);
47
+ }
48
+ /** Remove all entries from every key in the pool. */
49
+ clear() {
50
+ this.pools.clear();
51
+ }
51
52
  };
52
- //# sourceMappingURL=upload-url-pool.js.map
53
+ //#endregion
54
+ export { UploadUrlPool };
55
+
56
+ //# sourceMappingURL=upload-url-pool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-url-pool.js","sources":["../../src/auth/upload-url-pool.ts"],"sourcesContent":["import type { UploadUrlEntry } from './account-info.ts'\n\n/**\n * Manages a pool of reusable upload URLs keyed by bucket ID or file ID.\n * URLs are checked out before an upload, checked back in on success, and\n * evicted on error so they are not reused.\n */\nexport class UploadUrlPool {\n /** Map from key (bucket ID or file ID) to a stack of available entries. */\n private readonly pools = new Map<string, UploadUrlEntry[]>()\n\n /**\n * Take an upload URL from the pool, or return null if none are available.\n *\n * @param key - The bucket ID or file ID to look up.\n *\n * @returns An upload URL entry, or null if the pool is empty for the given key.\n */\n checkout(key: string): UploadUrlEntry | null {\n const pool = this.pools.get(key)\n if (!pool || pool.length === 0) return null\n return pool.pop() ?? null\n }\n\n /**\n * Return a still-valid upload URL to the pool for future reuse.\n *\n * @param key - The bucket ID or file ID the entry belongs to.\n * @param entry - The upload URL entry to return to the pool.\n */\n checkin(key: string, entry: UploadUrlEntry): void {\n let pool = this.pools.get(key)\n if (!pool) {\n pool = []\n this.pools.set(key, pool)\n }\n pool.push(entry)\n }\n\n /**\n * Remove a specific upload URL from the pool (e.g. after an upload error).\n *\n * @param key - The bucket ID or file ID the entry belongs to.\n * @param entry - The failed upload URL entry to remove.\n */\n evict(key: string, entry: UploadUrlEntry): void {\n const pool = this.pools.get(key)\n if (!pool) return\n const idx = pool.findIndex((e) => e.uploadUrl === entry.uploadUrl)\n if (idx !== -1) {\n pool.splice(idx, 1)\n }\n }\n\n /** Remove all entries from every key in the pool. */\n clear(): void {\n this.pools.clear()\n }\n}\n"],"names":[],"mappings":"AAOO,MAAM,cAAc;AAAA;AAAA,EAER,4BAAY,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS7B,SAAS,KAAoC;AAC3C,UAAM,OAAO,KAAK,MAAM,IAAI,GAAG;AAC/B,QAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO;AACvC,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,KAAa,OAA6B;AAChD,QAAI,OAAO,KAAK,MAAM,IAAI,GAAG;AAC7B,QAAI,CAAC,MAAM;AACT,aAAO,CAAA;AACP,WAAK,MAAM,IAAI,KAAK,IAAI;AAAA,IAC1B;AACA,SAAK,KAAK,KAAK;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAa,OAA6B;AAC9C,UAAM,OAAO,KAAK,MAAM,IAAI,GAAG;AAC/B,QAAI,CAAC,KAAM;AACX,UAAM,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,cAAc,MAAM,SAAS;AACjE,QAAI,QAAQ,IAAI;AACd,WAAK,OAAO,KAAK,CAAC;AAAA,IACpB;AAAA,EACF;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,MAAM,MAAA;AAAA,EACb;AACF;"}
1
+ {"version":3,"file":"upload-url-pool.js","names":[],"sources":["../../src/auth/upload-url-pool.ts"],"sourcesContent":["import type { UploadUrlEntry } from './account-info.ts'\n\n/**\n * Manages a pool of reusable upload URLs keyed by bucket ID or file ID.\n * URLs are checked out before an upload, checked back in on success, and\n * evicted on error so they are not reused.\n */\nexport class UploadUrlPool {\n /** Map from key (bucket ID or file ID) to a stack of available entries. */\n private readonly pools = new Map<string, UploadUrlEntry[]>()\n\n /**\n * Take an upload URL from the pool, or return null if none are available.\n *\n * @param key - The bucket ID or file ID to look up.\n *\n * @returns An upload URL entry, or null if the pool is empty for the given key.\n */\n checkout(key: string): UploadUrlEntry | null {\n const pool = this.pools.get(key)\n if (!pool || pool.length === 0) return null\n return pool.pop() ?? null\n }\n\n /**\n * Return a still-valid upload URL to the pool for future reuse.\n *\n * @param key - The bucket ID or file ID the entry belongs to.\n * @param entry - The upload URL entry to return to the pool.\n */\n checkin(key: string, entry: UploadUrlEntry): void {\n let pool = this.pools.get(key)\n if (!pool) {\n pool = []\n this.pools.set(key, pool)\n }\n pool.push(entry)\n }\n\n /**\n * Remove a specific upload URL from the pool (e.g. after an upload error).\n *\n * @param key - The bucket ID or file ID the entry belongs to.\n * @param entry - The failed upload URL entry to remove.\n */\n evict(key: string, entry: UploadUrlEntry): void {\n const pool = this.pools.get(key)\n if (!pool) return\n const idx = pool.findIndex((e) => e.uploadUrl === entry.uploadUrl)\n if (idx !== -1) {\n pool.splice(idx, 1)\n }\n }\n\n /** Remove all entries from every key in the pool. */\n clear(): void {\n this.pools.clear()\n }\n}\n"],"mappings":";;;;;;AAOA,IAAa,gBAAb,MAA2B;;CAEzB,wBAAyB,IAAI,IAA8B;;;;;;;;CAS3D,SAAS,KAAoC;EAC3C,MAAM,OAAO,KAAK,MAAM,IAAI,GAAG;EAC/B,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,OAAO;EACvC,OAAO,KAAK,IAAI,KAAK;CACvB;;;;;;;CAQA,QAAQ,KAAa,OAA6B;EAChD,IAAI,OAAO,KAAK,MAAM,IAAI,GAAG;EAC7B,IAAI,CAAC,MAAM;GACT,OAAO,CAAC;GACR,KAAK,MAAM,IAAI,KAAK,IAAI;EAC1B;EACA,KAAK,KAAK,KAAK;CACjB;;;;;;;CAQA,MAAM,KAAa,OAA6B;EAC9C,MAAM,OAAO,KAAK,MAAM,IAAI,GAAG;EAC/B,IAAI,CAAC,MAAM;EACX,MAAM,MAAM,KAAK,WAAW,MAAM,EAAE,cAAc,MAAM,SAAS;EACjE,IAAI,QAAQ,IACV,KAAK,OAAO,KAAK,CAAC;CAEtB;;CAGA,QAAc;EACZ,KAAK,MAAM,MAAM;CACnB;AACF"}