@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.
- package/CHANGELOG.md +110 -5
- package/README.md +144 -33
- package/dist/_virtual/_b2-sdk-version-json.cjs +4 -0
- package/dist/_virtual/_b2-sdk-version-json.js +4 -0
- package/dist/auth/account-info.d.cts +32 -0
- package/dist/auth/account-info.d.cts.map +1 -1
- package/dist/auth/account-info.d.ts +32 -0
- package/dist/auth/account-info.d.ts.map +1 -1
- package/dist/auth/file.cjs +408 -207
- package/dist/auth/file.cjs.map +1 -1
- package/dist/auth/file.d.cts +77 -3
- package/dist/auth/file.d.cts.map +1 -1
- package/dist/auth/file.d.ts +77 -3
- package/dist/auth/file.d.ts.map +1 -1
- package/dist/auth/file.js +407 -207
- package/dist/auth/file.js.map +1 -1
- package/dist/auth/in-memory.cjs +212 -183
- package/dist/auth/in-memory.cjs.map +1 -1
- package/dist/auth/in-memory.d.cts +8 -0
- package/dist/auth/in-memory.d.cts.map +1 -1
- package/dist/auth/in-memory.d.ts +8 -0
- package/dist/auth/in-memory.d.ts.map +1 -1
- package/dist/auth/in-memory.js +211 -182
- package/dist/auth/in-memory.js.map +1 -1
- package/dist/auth/index.cjs +7 -9
- package/dist/auth/index.d.cts +3 -2
- package/dist/auth/index.d.cts.map +1 -1
- package/dist/auth/index.d.ts +3 -2
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +2 -8
- package/dist/auth/realms.cjs +80 -7
- package/dist/auth/realms.cjs.map +1 -1
- package/dist/auth/realms.d.cts +27 -4
- package/dist/auth/realms.d.cts.map +1 -1
- package/dist/auth/realms.d.ts +27 -4
- package/dist/auth/realms.d.ts.map +1 -1
- package/dist/auth/realms.js +80 -9
- package/dist/auth/realms.js.map +1 -1
- package/dist/auth/upload-url-pool.cjs +55 -51
- package/dist/auth/upload-url-pool.cjs.map +1 -1
- package/dist/auth/upload-url-pool.js +55 -51
- package/dist/auth/upload-url-pool.js.map +1 -1
- package/dist/bucket.cjs +785 -787
- package/dist/bucket.cjs.map +1 -1
- package/dist/bucket.d.cts +35 -47
- package/dist/bucket.d.cts.map +1 -1
- package/dist/bucket.d.ts +35 -47
- package/dist/bucket.d.ts.map +1 -1
- package/dist/bucket.js +780 -782
- package/dist/bucket.js.map +1 -1
- package/dist/client.cjs +246 -228
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +25 -17
- package/dist/client.d.cts.map +1 -1
- package/dist/client.d.ts +25 -17
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +243 -225
- package/dist/client.js.map +1 -1
- package/dist/copy/large.cjs +114 -71
- package/dist/copy/large.cjs.map +1 -1
- package/dist/copy/large.d.cts +6 -0
- package/dist/copy/large.d.cts.map +1 -1
- package/dist/copy/large.d.ts +6 -0
- package/dist/copy/large.d.ts.map +1 -1
- package/dist/copy/large.js +112 -69
- package/dist/copy/large.js.map +1 -1
- package/dist/download/checksum.cjs +89 -0
- package/dist/download/checksum.cjs.map +1 -0
- package/dist/download/checksum.d.cts +40 -0
- package/dist/download/checksum.d.cts.map +1 -0
- package/dist/download/checksum.d.ts +40 -0
- package/dist/download/checksum.d.ts.map +1 -0
- package/dist/download/checksum.js +87 -0
- package/dist/download/checksum.js.map +1 -0
- package/dist/download/parallel.cjs +214 -118
- package/dist/download/parallel.cjs.map +1 -1
- package/dist/download/parallel.d.cts +5 -1
- package/dist/download/parallel.d.cts.map +1 -1
- package/dist/download/parallel.d.ts +5 -1
- package/dist/download/parallel.d.ts.map +1 -1
- package/dist/download/parallel.js +212 -116
- package/dist/download/parallel.js.map +1 -1
- package/dist/download/single.cjs +188 -97
- package/dist/download/single.cjs.map +1 -1
- package/dist/download/single.d.cts +6 -1
- package/dist/download/single.d.cts.map +1 -1
- package/dist/download/single.d.ts +6 -1
- package/dist/download/single.d.ts.map +1 -1
- package/dist/download/single.js +186 -98
- package/dist/download/single.js.map +1 -1
- package/dist/errors/index.cjs +699 -243
- package/dist/errors/index.cjs.map +1 -1
- package/dist/errors/index.d.cts +285 -82
- package/dist/errors/index.d.cts.map +1 -1
- package/dist/errors/index.d.ts +285 -82
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +678 -261
- package/dist/errors/index.js.map +1 -1
- package/dist/http/retry.cjs +45 -28
- package/dist/http/retry.cjs.map +1 -1
- package/dist/http/retry.d.cts +15 -2
- package/dist/http/retry.d.cts.map +1 -1
- package/dist/http/retry.d.ts +15 -2
- package/dist/http/retry.d.ts.map +1 -1
- package/dist/http/retry.js +46 -31
- package/dist/http/retry.js.map +1 -1
- package/dist/http/transport.cjs +438 -140
- package/dist/http/transport.cjs.map +1 -1
- package/dist/http/transport.d.cts +21 -2
- package/dist/http/transport.d.cts.map +1 -1
- package/dist/http/transport.d.ts +21 -2
- package/dist/http/transport.d.ts.map +1 -1
- package/dist/http/transport.js +437 -140
- package/dist/http/transport.js.map +1 -1
- package/dist/http/url-guard.cjs +154 -89
- package/dist/http/url-guard.cjs.map +1 -1
- package/dist/http/url-guard.d.cts +25 -3
- package/dist/http/url-guard.d.cts.map +1 -1
- package/dist/http/url-guard.d.ts +25 -3
- package/dist/http/url-guard.d.ts.map +1 -1
- package/dist/http/url-guard.js +152 -90
- package/dist/http/url-guard.js.map +1 -1
- package/dist/http/user-agent.cjs +84 -44
- package/dist/http/user-agent.cjs.map +1 -1
- package/dist/http/user-agent.js +84 -46
- package/dist/http/user-agent.js.map +1 -1
- package/dist/index.cjs +101 -77
- package/dist/index.d.cts +27 -21
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +27 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -71
- package/dist/internal/b2-naming.cjs +66 -0
- package/dist/internal/b2-naming.cjs.map +1 -0
- package/dist/internal/b2-naming.d.cts +43 -0
- package/dist/internal/b2-naming.d.cts.map +1 -0
- package/dist/internal/b2-naming.d.ts +43 -0
- package/dist/internal/b2-naming.d.ts.map +1 -0
- package/dist/internal/b2-naming.js +60 -0
- package/dist/internal/b2-naming.js.map +1 -0
- package/dist/internal/upload-retry-options.cjs +21 -0
- package/dist/internal/upload-retry-options.cjs.map +1 -0
- package/dist/internal/upload-retry-options.d.cts +12 -0
- package/dist/internal/upload-retry-options.d.cts.map +1 -0
- package/dist/internal/upload-retry-options.d.ts +12 -0
- package/dist/internal/upload-retry-options.d.ts.map +1 -0
- package/dist/internal/upload-retry-options.js +21 -0
- package/dist/internal/upload-retry-options.js.map +1 -0
- package/dist/internal/url-redaction.cjs +31 -0
- package/dist/internal/url-redaction.cjs.map +1 -0
- package/dist/internal/url-redaction.d.cts +17 -0
- package/dist/internal/url-redaction.d.cts.map +1 -0
- package/dist/internal/url-redaction.d.ts +17 -0
- package/dist/internal/url-redaction.d.ts.map +1 -0
- package/dist/internal/url-redaction.js +31 -0
- package/dist/internal/url-redaction.js.map +1 -0
- package/dist/notifications/index.cjs +4 -6
- package/dist/notifications/index.d.cts +1 -1
- package/dist/notifications/index.d.cts.map +1 -1
- package/dist/notifications/index.d.ts +1 -1
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +1 -6
- package/dist/notifications/webhook.cjs +195 -85
- package/dist/notifications/webhook.cjs.map +1 -1
- package/dist/notifications/webhook.d.cts.map +1 -1
- package/dist/notifications/webhook.d.ts.map +1 -1
- package/dist/notifications/webhook.js +195 -87
- package/dist/notifications/webhook.js.map +1 -1
- package/dist/object.cjs +253 -210
- package/dist/object.cjs.map +1 -1
- package/dist/object.d.cts +9 -55
- package/dist/object.d.cts.map +1 -1
- package/dist/object.d.ts +9 -55
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +249 -206
- package/dist/object.js.map +1 -1
- package/dist/raw/encoding.cjs +74 -35
- package/dist/raw/encoding.cjs.map +1 -1
- package/dist/raw/encoding.js +74 -38
- package/dist/raw/encoding.js.map +1 -1
- package/dist/raw/index.cjs +678 -587
- package/dist/raw/index.cjs.map +1 -1
- package/dist/raw/index.d.cts +121 -18
- package/dist/raw/index.d.cts.map +1 -1
- package/dist/raw/index.d.ts +121 -18
- package/dist/raw/index.d.ts.map +1 -1
- package/dist/raw/index.js +674 -589
- package/dist/raw/index.js.map +1 -1
- package/dist/s3/index.cjs +355 -18
- package/dist/s3/index.cjs.map +1 -1
- package/dist/s3/index.d.cts +233 -5
- package/dist/s3/index.d.cts.map +1 -1
- package/dist/s3/index.d.ts +233 -5
- package/dist/s3/index.d.ts.map +1 -1
- package/dist/s3/index.js +351 -22
- package/dist/s3/index.js.map +1 -1
- package/dist/s3/sigv4.cjs +149 -0
- package/dist/s3/sigv4.cjs.map +1 -0
- package/dist/s3/sigv4.d.cts +43 -0
- package/dist/s3/sigv4.d.cts.map +1 -0
- package/dist/s3/sigv4.d.ts +43 -0
- package/dist/s3/sigv4.d.ts.map +1 -0
- package/dist/s3/sigv4.js +148 -0
- package/dist/s3/sigv4.js.map +1 -0
- package/dist/s3/validation.cjs +69 -0
- package/dist/s3/validation.cjs.map +1 -0
- package/dist/s3/validation.d.cts +43 -0
- package/dist/s3/validation.d.cts.map +1 -0
- package/dist/s3/validation.d.ts +43 -0
- package/dist/s3/validation.d.ts.map +1 -0
- package/dist/s3/validation.js +66 -0
- package/dist/s3/validation.js.map +1 -0
- package/dist/simulator/capabilities.cjs +63 -48
- package/dist/simulator/capabilities.cjs.map +1 -1
- package/dist/simulator/capabilities.js +63 -49
- package/dist/simulator/capabilities.js.map +1 -1
- package/dist/simulator/index.cjs +2124 -1548
- package/dist/simulator/index.cjs.map +1 -1
- package/dist/simulator/index.d.cts +79 -11
- package/dist/simulator/index.d.cts.map +1 -1
- package/dist/simulator/index.d.ts +79 -11
- package/dist/simulator/index.d.ts.map +1 -1
- package/dist/simulator/index.js +2112 -1546
- package/dist/simulator/index.js.map +1 -1
- package/dist/simulator/validation.cjs +191 -153
- package/dist/simulator/validation.cjs.map +1 -1
- package/dist/simulator/validation.d.cts +3 -21
- package/dist/simulator/validation.d.cts.map +1 -1
- package/dist/simulator/validation.d.ts +3 -21
- package/dist/simulator/validation.d.ts.map +1 -1
- package/dist/simulator/validation.js +188 -162
- package/dist/simulator/validation.js.map +1 -1
- package/dist/streams/collect.cjs +74 -24
- package/dist/streams/collect.cjs.map +1 -1
- package/dist/streams/collect.d.cts +14 -1
- package/dist/streams/collect.d.cts.map +1 -1
- package/dist/streams/collect.d.ts +14 -1
- package/dist/streams/collect.d.ts.map +1 -1
- package/dist/streams/collect.js +74 -25
- package/dist/streams/collect.js.map +1 -1
- package/dist/streams/file-source.cjs +287 -0
- package/dist/streams/file-source.cjs.map +1 -0
- package/dist/streams/file-source.d.cts +96 -0
- package/dist/streams/file-source.d.cts.map +1 -0
- package/dist/streams/file-source.d.ts +96 -0
- package/dist/streams/file-source.d.ts.map +1 -0
- package/dist/streams/file-source.js +286 -0
- package/dist/streams/file-source.js.map +1 -0
- package/dist/streams/hash.cjs +207 -115
- package/dist/streams/hash.cjs.map +1 -1
- package/dist/streams/hash.d.cts +5 -4
- package/dist/streams/hash.d.cts.map +1 -1
- package/dist/streams/hash.d.ts +5 -4
- package/dist/streams/hash.d.ts.map +1 -1
- package/dist/streams/hash.js +208 -95
- package/dist/streams/hash.js.map +1 -1
- package/dist/streams/index.cjs +12 -12
- package/dist/streams/index.d.cts +3 -3
- package/dist/streams/index.d.cts.map +1 -1
- package/dist/streams/index.d.ts +3 -3
- package/dist/streams/index.d.ts.map +1 -1
- package/dist/streams/index.js +2 -10
- package/dist/streams/progress.cjs +60 -46
- package/dist/streams/progress.cjs.map +1 -1
- package/dist/streams/progress.js +60 -46
- package/dist/streams/progress.js.map +1 -1
- package/dist/streams/source.cjs +316 -146
- package/dist/streams/source.cjs.map +1 -1
- package/dist/streams/source.d.cts +56 -18
- package/dist/streams/source.d.cts.map +1 -1
- package/dist/streams/source.d.ts +56 -18
- package/dist/streams/source.d.ts.map +1 -1
- package/dist/streams/source.js +312 -149
- package/dist/streams/source.js.map +1 -1
- package/dist/sync/actions/index.cjs +236 -184
- package/dist/sync/actions/index.cjs.map +1 -1
- package/dist/sync/actions/index.d.cts +29 -21
- package/dist/sync/actions/index.d.cts.map +1 -1
- package/dist/sync/actions/index.d.ts +29 -21
- package/dist/sync/actions/index.d.ts.map +1 -1
- package/dist/sync/actions/index.js +236 -190
- package/dist/sync/actions/index.js.map +1 -1
- package/dist/sync/b2-sha1-reader.cjs +148 -0
- package/dist/sync/b2-sha1-reader.cjs.map +1 -0
- package/dist/sync/b2-sha1-reader.d.cts +58 -0
- package/dist/sync/b2-sha1-reader.d.cts.map +1 -0
- package/dist/sync/b2-sha1-reader.d.ts +58 -0
- package/dist/sync/b2-sha1-reader.d.ts.map +1 -0
- package/dist/sync/b2-sha1-reader.js +145 -0
- package/dist/sync/b2-sha1-reader.js.map +1 -0
- package/dist/sync/download-staging.cjs +265 -0
- package/dist/sync/download-staging.cjs.map +1 -0
- package/dist/sync/download-staging.d.cts +54 -0
- package/dist/sync/download-staging.d.cts.map +1 -0
- package/dist/sync/download-staging.d.ts +54 -0
- package/dist/sync/download-staging.d.ts.map +1 -0
- package/dist/sync/download-staging.js +259 -0
- package/dist/sync/download-staging.js.map +1 -0
- package/dist/sync/filesystem-errors.cjs +32 -0
- package/dist/sync/filesystem-errors.cjs.map +1 -0
- package/dist/sync/filesystem-errors.d.cts +8 -0
- package/dist/sync/filesystem-errors.d.cts.map +1 -0
- package/dist/sync/filesystem-errors.d.ts +8 -0
- package/dist/sync/filesystem-errors.d.ts.map +1 -0
- package/dist/sync/filesystem-errors.js +32 -0
- package/dist/sync/filesystem-errors.js.map +1 -0
- package/dist/sync/filters.cjs +217 -0
- package/dist/sync/filters.cjs.map +1 -0
- package/dist/sync/filters.d.cts +51 -0
- package/dist/sync/filters.d.cts.map +1 -0
- package/dist/sync/filters.d.ts +51 -0
- package/dist/sync/filters.d.ts.map +1 -0
- package/dist/sync/filters.js +213 -0
- package/dist/sync/filters.js.map +1 -0
- package/dist/sync/index.cjs +39 -22
- package/dist/sync/index.d.cts +14 -9
- package/dist/sync/index.d.cts.map +1 -1
- package/dist/sync/index.d.ts +14 -9
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +9 -20
- package/dist/sync/local-file-identity.cjs +61 -0
- package/dist/sync/local-file-identity.cjs.map +1 -0
- package/dist/sync/local-file-identity.d.cts +37 -0
- package/dist/sync/local-file-identity.d.cts.map +1 -0
- package/dist/sync/local-file-identity.d.ts +37 -0
- package/dist/sync/local-file-identity.d.ts.map +1 -0
- package/dist/sync/local-file-identity.js +60 -0
- package/dist/sync/local-file-identity.js.map +1 -0
- package/dist/sync/local-file-io.cjs +364 -0
- package/dist/sync/local-file-io.cjs.map +1 -0
- package/dist/sync/local-file-io.d.cts +75 -0
- package/dist/sync/local-file-io.d.cts.map +1 -0
- package/dist/sync/local-file-io.d.ts +75 -0
- package/dist/sync/local-file-io.d.ts.map +1 -0
- package/dist/sync/local-file-io.js +360 -0
- package/dist/sync/local-file-io.js.map +1 -0
- package/dist/sync/local-filesystem-root.cjs +27 -0
- package/dist/sync/local-filesystem-root.cjs.map +1 -0
- package/dist/sync/local-filesystem-root.d.cts +18 -0
- package/dist/sync/local-filesystem-root.d.cts.map +1 -0
- package/dist/sync/local-filesystem-root.d.ts +18 -0
- package/dist/sync/local-filesystem-root.d.ts.map +1 -0
- package/dist/sync/local-filesystem-root.js +26 -0
- package/dist/sync/local-filesystem-root.js.map +1 -0
- package/dist/sync/local-sha1.cjs +119 -0
- package/dist/sync/local-sha1.cjs.map +1 -0
- package/dist/sync/local-sha1.d.cts +39 -0
- package/dist/sync/local-sha1.d.cts.map +1 -0
- package/dist/sync/local-sha1.d.ts +39 -0
- package/dist/sync/local-sha1.d.ts.map +1 -0
- package/dist/sync/local-sha1.js +117 -0
- package/dist/sync/local-sha1.js.map +1 -0
- package/dist/sync/pairing.cjs +118 -29
- package/dist/sync/pairing.cjs.map +1 -1
- package/dist/sync/pairing.d.cts +7 -2
- package/dist/sync/pairing.d.cts.map +1 -1
- package/dist/sync/pairing.d.ts +7 -2
- package/dist/sync/pairing.d.ts.map +1 -1
- package/dist/sync/pairing.js +120 -31
- package/dist/sync/pairing.js.map +1 -1
- package/dist/sync/path-order.cjs +30 -0
- package/dist/sync/path-order.cjs.map +1 -0
- package/dist/sync/path-order.d.cts +28 -0
- package/dist/sync/path-order.d.cts.map +1 -0
- package/dist/sync/path-order.d.ts +28 -0
- package/dist/sync/path-order.d.ts.map +1 -0
- package/dist/sync/path-order.js +29 -0
- package/dist/sync/path-order.js.map +1 -0
- package/dist/sync/path-safety.cjs +111 -0
- package/dist/sync/path-safety.cjs.map +1 -0
- package/dist/sync/path-safety.d.cts +78 -0
- package/dist/sync/path-safety.d.cts.map +1 -0
- package/dist/sync/path-safety.d.ts +78 -0
- package/dist/sync/path-safety.d.ts.map +1 -0
- package/dist/sync/path-safety.js +105 -0
- package/dist/sync/path-safety.js.map +1 -0
- package/dist/sync/paths.d.cts +19 -0
- package/dist/sync/paths.d.cts.map +1 -0
- package/dist/sync/paths.d.ts +19 -0
- package/dist/sync/paths.d.ts.map +1 -0
- package/dist/sync/policies/compare.cjs +389 -11
- package/dist/sync/policies/compare.cjs.map +1 -1
- package/dist/sync/policies/compare.d.cts +100 -2
- package/dist/sync/policies/compare.d.cts.map +1 -1
- package/dist/sync/policies/compare.d.ts +100 -2
- package/dist/sync/policies/compare.d.ts.map +1 -1
- package/dist/sync/policies/compare.js +387 -13
- package/dist/sync/policies/compare.js.map +1 -1
- package/dist/sync/policies/index.cjs +76 -65
- package/dist/sync/policies/index.cjs.map +1 -1
- package/dist/sync/policies/index.d.cts +35 -6
- package/dist/sync/policies/index.d.cts.map +1 -1
- package/dist/sync/policies/index.d.ts +35 -6
- package/dist/sync/policies/index.d.ts.map +1 -1
- package/dist/sync/policies/index.js +76 -65
- package/dist/sync/policies/index.js.map +1 -1
- package/dist/sync/prefix.cjs +96 -0
- package/dist/sync/prefix.cjs.map +1 -0
- package/dist/sync/prefix.d.cts +55 -0
- package/dist/sync/prefix.d.cts.map +1 -0
- package/dist/sync/prefix.d.ts +55 -0
- package/dist/sync/prefix.d.ts.map +1 -0
- package/dist/sync/prefix.js +92 -0
- package/dist/sync/prefix.js.map +1 -0
- package/dist/sync/regexp-safety.cjs +192 -0
- package/dist/sync/regexp-safety.cjs.map +1 -0
- package/dist/sync/regexp-safety.d.cts +29 -0
- package/dist/sync/regexp-safety.d.cts.map +1 -0
- package/dist/sync/regexp-safety.d.ts +29 -0
- package/dist/sync/regexp-safety.d.ts.map +1 -0
- package/dist/sync/regexp-safety.js +190 -0
- package/dist/sync/regexp-safety.js.map +1 -0
- package/dist/sync/scan-events.cjs +33 -0
- package/dist/sync/scan-events.cjs.map +1 -0
- package/dist/sync/scan-events.d.cts +17 -0
- package/dist/sync/scan-events.d.cts.map +1 -0
- package/dist/sync/scan-events.d.ts +17 -0
- package/dist/sync/scan-events.d.ts.map +1 -0
- package/dist/sync/scan-events.js +32 -0
- package/dist/sync/scan-events.js.map +1 -0
- package/dist/sync/scan-limit.cjs +33 -0
- package/dist/sync/scan-limit.cjs.map +1 -0
- package/dist/sync/scan-limit.d.cts +21 -0
- package/dist/sync/scan-limit.d.cts.map +1 -0
- package/dist/sync/scan-limit.d.ts +21 -0
- package/dist/sync/scan-limit.d.ts.map +1 -0
- package/dist/sync/scan-limit.js +31 -0
- package/dist/sync/scan-limit.js.map +1 -0
- package/dist/sync/scanners/b2.cjs +239 -55
- package/dist/sync/scanners/b2.cjs.map +1 -1
- package/dist/sync/scanners/b2.d.cts +26 -7
- package/dist/sync/scanners/b2.d.cts.map +1 -1
- package/dist/sync/scanners/b2.d.ts +26 -7
- package/dist/sync/scanners/b2.d.ts.map +1 -1
- package/dist/sync/scanners/b2.js +239 -55
- package/dist/sync/scanners/b2.js.map +1 -1
- package/dist/sync/scanners/local.cjs +215 -56
- package/dist/sync/scanners/local.cjs.map +1 -1
- package/dist/sync/scanners/local.d.cts +22 -7
- package/dist/sync/scanners/local.d.cts.map +1 -1
- package/dist/sync/scanners/local.d.ts +22 -7
- package/dist/sync/scanners/local.d.ts.map +1 -1
- package/dist/sync/scanners/local.js +216 -57
- package/dist/sync/scanners/local.js.map +1 -1
- package/dist/sync/sha1-metadata.cjs +94 -0
- package/dist/sync/sha1-metadata.cjs.map +1 -0
- package/dist/sync/sha1-metadata.d.cts +82 -0
- package/dist/sync/sha1-metadata.d.cts.map +1 -0
- package/dist/sync/sha1-metadata.d.ts +82 -0
- package/dist/sync/sha1-metadata.d.ts.map +1 -0
- package/dist/sync/sha1-metadata.js +89 -0
- package/dist/sync/sha1-metadata.js.map +1 -0
- package/dist/sync/sha1-options.cjs +23 -0
- package/dist/sync/sha1-options.cjs.map +1 -0
- package/dist/sync/sha1-options.d.cts +14 -0
- package/dist/sync/sha1-options.d.cts.map +1 -0
- package/dist/sync/sha1-options.d.ts +14 -0
- package/dist/sync/sha1-options.d.ts.map +1 -0
- package/dist/sync/sha1-options.js +21 -0
- package/dist/sync/sha1-options.js.map +1 -0
- package/dist/sync/synchronizer.cjs +782 -197
- package/dist/sync/synchronizer.cjs.map +1 -1
- package/dist/sync/synchronizer.d.cts +47 -1
- package/dist/sync/synchronizer.d.cts.map +1 -1
- package/dist/sync/synchronizer.d.ts +47 -1
- package/dist/sync/synchronizer.d.ts.map +1 -1
- package/dist/sync/synchronizer.js +779 -173
- package/dist/sync/synchronizer.js.map +1 -1
- package/dist/sync/types.d.cts +208 -16
- package/dist/sync/types.d.cts.map +1 -1
- package/dist/sync/types.d.ts +208 -16
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/types/auth.cjs +76 -56
- package/dist/types/auth.cjs.map +1 -1
- package/dist/types/auth.d.cts +67 -9
- package/dist/types/auth.d.cts.map +1 -1
- package/dist/types/auth.d.ts +67 -9
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/auth.js +77 -57
- package/dist/types/auth.js.map +1 -1
- package/dist/types/bucket.cjs +74 -38
- package/dist/types/bucket.cjs.map +1 -1
- package/dist/types/bucket.js +75 -41
- package/dist/types/bucket.js.map +1 -1
- package/dist/types/encryption.cjs +364 -327
- package/dist/types/encryption.cjs.map +1 -1
- package/dist/types/encryption.d.cts +16 -0
- package/dist/types/encryption.d.cts.map +1 -1
- package/dist/types/encryption.d.ts +16 -0
- package/dist/types/encryption.d.ts.map +1 -1
- package/dist/types/encryption.js +364 -310
- package/dist/types/encryption.js.map +1 -1
- package/dist/types/errors.cjs +47 -0
- package/dist/types/errors.cjs.map +1 -0
- package/dist/types/errors.d.cts +13 -4
- package/dist/types/errors.d.cts.map +1 -1
- package/dist/types/errors.d.ts +13 -4
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +47 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/file.cjs +36 -19
- package/dist/types/file.cjs.map +1 -1
- package/dist/types/file.d.cts +2 -2
- package/dist/types/file.d.cts.map +1 -1
- package/dist/types/file.d.ts +2 -2
- package/dist/types/file.d.ts.map +1 -1
- package/dist/types/file.js +37 -21
- package/dist/types/file.js.map +1 -1
- package/dist/types/ids.cjs +53 -9
- package/dist/types/ids.cjs.map +1 -1
- package/dist/types/ids.js +54 -15
- package/dist/types/ids.js.map +1 -1
- package/dist/types/index.d.cts +12 -11
- package/dist/types/index.d.cts.map +1 -1
- package/dist/types/index.d.ts +12 -11
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/key.d.cts +44 -8
- package/dist/types/key.d.cts.map +1 -1
- package/dist/types/key.d.ts +44 -8
- package/dist/types/key.d.ts.map +1 -1
- package/dist/types/lock.cjs +33 -13
- package/dist/types/lock.cjs.map +1 -1
- package/dist/types/lock.js +34 -15
- package/dist/types/lock.js.map +1 -1
- package/dist/types/notifications.cjs +44 -22
- package/dist/types/notifications.cjs.map +1 -1
- package/dist/types/notifications.js +45 -23
- package/dist/types/notifications.js.map +1 -1
- package/dist/types/upload.d.cts +39 -5
- package/dist/types/upload.d.cts.map +1 -1
- package/dist/types/upload.d.ts +39 -5
- package/dist/types/upload.d.ts.map +1 -1
- package/dist/upload/abort-scope.cjs +91 -0
- package/dist/upload/abort-scope.cjs.map +1 -0
- package/dist/upload/abort-scope.d.cts +48 -0
- package/dist/upload/abort-scope.d.cts.map +1 -0
- package/dist/upload/abort-scope.d.ts +48 -0
- package/dist/upload/abort-scope.d.ts.map +1 -0
- package/dist/upload/abort-scope.js +88 -0
- package/dist/upload/abort-scope.js.map +1 -0
- package/dist/upload/cancel.cjs +183 -8
- package/dist/upload/cancel.cjs.map +1 -1
- package/dist/upload/cancel.d.cts +110 -2
- package/dist/upload/cancel.d.cts.map +1 -1
- package/dist/upload/cancel.d.ts +110 -2
- package/dist/upload/cancel.d.ts.map +1 -1
- package/dist/upload/cancel.js +178 -9
- package/dist/upload/cancel.js.map +1 -1
- package/dist/upload/concurrency.cjs +79 -52
- package/dist/upload/concurrency.cjs.map +1 -1
- package/dist/upload/concurrency.js +79 -53
- package/dist/upload/concurrency.js.map +1 -1
- package/dist/upload/finish.cjs +59 -0
- package/dist/upload/finish.cjs.map +1 -0
- package/dist/upload/finish.d.cts +26 -0
- package/dist/upload/finish.d.cts.map +1 -0
- package/dist/upload/finish.d.ts +26 -0
- package/dist/upload/finish.d.ts.map +1 -0
- package/dist/upload/finish.js +59 -0
- package/dist/upload/finish.js.map +1 -0
- package/dist/upload/large.cjs +301 -218
- package/dist/upload/large.cjs.map +1 -1
- package/dist/upload/large.d.cts +76 -9
- package/dist/upload/large.d.cts.map +1 -1
- package/dist/upload/large.d.ts +76 -9
- package/dist/upload/large.d.ts.map +1 -1
- package/dist/upload/large.js +301 -218
- package/dist/upload/large.js.map +1 -1
- package/dist/upload/options.cjs +28 -0
- package/dist/upload/options.cjs.map +1 -0
- package/dist/upload/options.d.cts +104 -0
- package/dist/upload/options.d.cts.map +1 -0
- package/dist/upload/options.d.ts +104 -0
- package/dist/upload/options.d.ts.map +1 -0
- package/dist/upload/options.js +27 -0
- package/dist/upload/options.js.map +1 -0
- package/dist/upload/resume.cjs +333 -33
- package/dist/upload/resume.cjs.map +1 -1
- package/dist/upload/resume.d.cts +82 -12
- package/dist/upload/resume.d.cts.map +1 -1
- package/dist/upload/resume.d.ts +82 -12
- package/dist/upload/resume.d.ts.map +1 -1
- package/dist/upload/resume.js +330 -33
- package/dist/upload/resume.js.map +1 -1
- package/dist/upload/retry.cjs +186 -0
- package/dist/upload/retry.cjs.map +1 -0
- package/dist/upload/retry.d.cts +127 -0
- package/dist/upload/retry.d.cts.map +1 -0
- package/dist/upload/retry.d.ts +127 -0
- package/dist/upload/retry.d.ts.map +1 -0
- package/dist/upload/retry.js +182 -0
- package/dist/upload/retry.js.map +1 -0
- package/dist/upload/single.cjs +68 -44
- package/dist/upload/single.cjs.map +1 -1
- package/dist/upload/single.d.cts +2 -1
- package/dist/upload/single.d.cts.map +1 -1
- package/dist/upload/single.d.ts +2 -1
- package/dist/upload/single.d.ts.map +1 -1
- package/dist/upload/single.js +68 -44
- package/dist/upload/single.js.map +1 -1
- package/dist/upload/stream.cjs +317 -193
- package/dist/upload/stream.cjs.map +1 -1
- package/dist/upload/stream.d.cts +3 -1
- package/dist/upload/stream.d.cts.map +1 -1
- package/dist/upload/stream.d.ts +3 -1
- package/dist/upload/stream.d.ts.map +1 -1
- package/dist/upload/stream.js +316 -192
- package/dist/upload/stream.js.map +1 -1
- package/dist/util/best-effort.cjs +42 -8
- package/dist/util/best-effort.cjs.map +1 -1
- package/dist/util/best-effort.d.cts +2 -1
- package/dist/util/best-effort.d.cts.map +1 -1
- package/dist/util/best-effort.d.ts +2 -1
- package/dist/util/best-effort.d.ts.map +1 -1
- package/dist/util/best-effort.js +43 -9
- package/dist/util/best-effort.js.map +1 -1
- package/dist/util/bytes.cjs +23 -0
- package/dist/util/bytes.cjs.map +1 -0
- package/dist/util/bytes.d.cts +15 -0
- package/dist/util/bytes.d.cts.map +1 -0
- package/dist/util/bytes.d.ts +15 -0
- package/dist/util/bytes.d.ts.map +1 -0
- package/dist/util/bytes.js +23 -0
- package/dist/util/bytes.js.map +1 -0
- package/dist/util/crypto.cjs +68 -0
- package/dist/util/crypto.cjs.map +1 -0
- package/dist/util/crypto.d.cts +26 -0
- package/dist/util/crypto.d.cts.map +1 -0
- package/dist/util/crypto.d.ts +26 -0
- package/dist/util/crypto.d.ts.map +1 -0
- package/dist/util/crypto.js +66 -0
- package/dist/util/crypto.js.map +1 -0
- package/dist/util/defaults.cjs +25 -9
- package/dist/util/defaults.cjs.map +1 -1
- package/dist/util/defaults.js +26 -11
- package/dist/util/defaults.js.map +1 -1
- package/dist/util/error-reason.cjs +41 -0
- package/dist/util/error-reason.cjs.map +1 -0
- package/dist/util/error-reason.d.cts +9 -0
- package/dist/util/error-reason.d.cts.map +1 -0
- package/dist/util/error-reason.d.ts +9 -0
- package/dist/util/error-reason.d.ts.map +1 -0
- package/dist/util/error-reason.js +41 -0
- package/dist/util/error-reason.js.map +1 -0
- package/dist/util/http.cjs +23 -0
- package/dist/util/http.cjs.map +1 -0
- package/dist/util/http.d.cts +13 -0
- package/dist/util/http.d.cts.map +1 -0
- package/dist/util/http.d.ts +13 -0
- package/dist/util/http.d.ts.map +1 -0
- package/dist/util/http.js +23 -0
- package/dist/util/http.js.map +1 -0
- package/dist/util/normalize.cjs +66 -7
- package/dist/util/normalize.cjs.map +1 -1
- package/dist/util/normalize.js +67 -10
- package/dist/util/normalize.js.map +1 -1
- package/dist/util/paginator.cjs +63 -14
- package/dist/util/paginator.cjs.map +1 -1
- package/dist/util/paginator.js +64 -16
- package/dist/util/paginator.js.map +1 -1
- package/dist/util/plan-ranges.cjs +47 -22
- package/dist/util/plan-ranges.cjs.map +1 -1
- package/dist/util/plan-ranges.js +48 -24
- package/dist/util/plan-ranges.js.map +1 -1
- package/dist/util/sha1.cjs +27 -0
- package/dist/util/sha1.cjs.map +1 -0
- package/dist/util/sha1.d.cts +17 -0
- package/dist/util/sha1.d.cts.map +1 -0
- package/dist/util/sha1.d.ts +17 -0
- package/dist/util/sha1.d.ts.map +1 -0
- package/dist/util/sha1.js +26 -0
- package/dist/util/sha1.js.map +1 -0
- package/dist/util/text-codec.cjs +29 -5
- package/dist/util/text-codec.cjs.map +1 -1
- package/dist/util/text-codec.js +30 -7
- package/dist/util/text-codec.js.map +1 -1
- package/dist/util/to-error.cjs +18 -4
- package/dist/util/to-error.cjs.map +1 -1
- package/dist/util/to-error.js +19 -5
- package/dist/util/to-error.js.map +1 -1
- package/dist/version.cjs +17 -5
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.cts +3 -3
- package/dist/version.d.ts +3 -3
- package/dist/version.js +19 -6
- package/dist/version.js.map +1 -1
- package/package.json +19 -16
- package/dist/auth/index.cjs.map +0 -1
- package/dist/auth/index.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/notifications/index.cjs.map +0 -1
- package/dist/notifications/index.js.map +0 -1
- package/dist/package.json.cjs +0 -9
- package/dist/package.json.cjs.map +0 -1
- package/dist/package.json.js +0 -9
- package/dist/package.json.js.map +0 -1
- package/dist/streams/index.cjs.map +0 -1
- package/dist/streams/index.js.map +0 -1
- package/dist/sync/index.cjs.map +0 -1
- package/dist/sync/index.js.map +0 -1
package/dist/client.cjs
CHANGED
|
@@ -1,230 +1,248 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
1
|
+
const require_in_memory = require("./auth/in-memory.cjs");
|
|
2
|
+
const require_ids = require("./types/ids.cjs");
|
|
3
|
+
require("./util/defaults.cjs");
|
|
4
|
+
const require_retry = require("./http/retry.cjs");
|
|
5
|
+
const require_paginator = require("./util/paginator.cjs");
|
|
6
|
+
const require_bucket = require("./bucket.cjs");
|
|
7
|
+
const require_realms = require("./auth/realms.cjs");
|
|
8
|
+
const require_url_guard = require("./http/url-guard.cjs");
|
|
9
|
+
const require_transport = require("./http/transport.cjs");
|
|
10
|
+
const require_raw_index = require("./raw/index.cjs");
|
|
11
|
+
//#region src/client.ts
|
|
12
|
+
/**
|
|
13
|
+
* High-level B2 client providing ergonomic access to buckets, files, and keys.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* const client = new B2Client({
|
|
18
|
+
* applicationKeyId: process.env.B2_APPLICATION_KEY_ID,
|
|
19
|
+
* applicationKey: process.env.B2_APPLICATION_KEY,
|
|
20
|
+
* })
|
|
21
|
+
* await client.authorize()
|
|
22
|
+
* const buckets = await client.listBuckets()
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
var B2Client = class {
|
|
26
|
+
/** Low-level client for direct B2 API calls. */
|
|
27
|
+
raw;
|
|
28
|
+
/** Authorization state storage (tokens, URLs, capabilities). */
|
|
29
|
+
accountInfo;
|
|
30
|
+
/**
|
|
31
|
+
* SSRF allow-list applied by the default {@link FetchTransport}. `null` when
|
|
32
|
+
* a custom transport was supplied — in that case the SDK does not own the
|
|
33
|
+
* guard. Locked down by {@link B2Client.authorize}.
|
|
34
|
+
*/
|
|
35
|
+
urlGuard;
|
|
36
|
+
applicationKeyId;
|
|
37
|
+
applicationKey;
|
|
38
|
+
realmUrl;
|
|
39
|
+
userAllowedSuffixes;
|
|
40
|
+
resolvedUploadRetryOptions;
|
|
41
|
+
/**
|
|
42
|
+
* Creates a new B2Client. Call {@link authorize} before making API requests.
|
|
43
|
+
* @param options - Configuration including credentials, realm, and transport settings.
|
|
44
|
+
*/
|
|
45
|
+
constructor(options) {
|
|
46
|
+
this.applicationKeyId = options.applicationKeyId;
|
|
47
|
+
this.applicationKey = options.applicationKey;
|
|
48
|
+
this.realmUrl = require_realms.getRealmUrl(options.realm ?? "production");
|
|
49
|
+
this.accountInfo = options.accountInfo ?? new require_in_memory.InMemoryAccountInfo();
|
|
50
|
+
bindAccountInfoAuthContext(this.accountInfo, this.realmUrl, this.applicationKeyId);
|
|
51
|
+
this.userAllowedSuffixes = options.allowedHostSuffixes;
|
|
52
|
+
this.resolvedUploadRetryOptions = {
|
|
53
|
+
...require_retry.DEFAULT_RETRY_OPTIONS,
|
|
54
|
+
...options.retry
|
|
55
|
+
};
|
|
56
|
+
let baseTransport;
|
|
57
|
+
if (options.transport !== void 0) {
|
|
58
|
+
baseTransport = options.transport;
|
|
59
|
+
this.urlGuard = null;
|
|
60
|
+
} else {
|
|
61
|
+
const urlGuard = new require_url_guard.UrlGuard();
|
|
62
|
+
baseTransport = new require_transport.FetchTransport({
|
|
63
|
+
urlGuard,
|
|
64
|
+
...options.userAgent !== void 0 ? { userAgent: options.userAgent } : {},
|
|
65
|
+
...options.followSameOriginRedirects !== void 0 ? { followSameOriginRedirects: options.followSameOriginRedirects } : {}
|
|
66
|
+
});
|
|
67
|
+
this.urlGuard = urlGuard;
|
|
68
|
+
}
|
|
69
|
+
const retryTransport = new require_transport.RetryTransport({
|
|
70
|
+
transport: baseTransport,
|
|
71
|
+
retry: this.resolvedUploadRetryOptions,
|
|
72
|
+
onReauth: () => this.reauthorize()
|
|
73
|
+
});
|
|
74
|
+
const cachedAuth = this.accountInfo.getAuth();
|
|
75
|
+
if (cachedAuth !== null) this.lockUrlGuard(cachedAuth);
|
|
76
|
+
this.raw = new require_raw_index.RawClient({ transport: retryTransport });
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Authenticates with B2 and stores the authorization state. Must be called before other methods.
|
|
80
|
+
*
|
|
81
|
+
* @returns The authorization response containing tokens, URLs, and capabilities.
|
|
82
|
+
*/
|
|
83
|
+
async authorize() {
|
|
84
|
+
const auth = await this.raw.authorizeAccount(this.applicationKeyId, this.applicationKey, this.realmUrl);
|
|
85
|
+
this.accountInfo.setAuth(auth);
|
|
86
|
+
this.lockUrlGuard(auth);
|
|
87
|
+
return auth;
|
|
88
|
+
}
|
|
89
|
+
lockUrlGuard(auth) {
|
|
90
|
+
if (this.urlGuard !== null) {
|
|
91
|
+
const derived = require_url_guard.deriveAllowedSuffixes(auth.apiInfo.storageApi);
|
|
92
|
+
const merged = this.userAllowedSuffixes !== void 0 ? this.userAllowedSuffixes.length === 0 ? [] : Array.from(/* @__PURE__ */ new Set([...derived, ...this.userAllowedSuffixes])) : derived;
|
|
93
|
+
this.urlGuard.setAllowedSuffixes(merged);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Refresh credentials after a 401. Returns the fresh auth token so
|
|
98
|
+
* {@link RetryTransport} can rewrite the in-flight request's
|
|
99
|
+
* Authorization header before retrying.
|
|
100
|
+
*
|
|
101
|
+
* @returns The fresh authorization token.
|
|
102
|
+
*/
|
|
103
|
+
async reauthorize() {
|
|
104
|
+
this.accountInfo.clear();
|
|
105
|
+
return (await this.authorize()).authorizationToken;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Creates a new B2 bucket.
|
|
109
|
+
* @param options - Bucket configuration including name, type, and optional settings.
|
|
110
|
+
*
|
|
111
|
+
* @returns A {@link Bucket} handle for the newly created bucket.
|
|
112
|
+
*/
|
|
113
|
+
async createBucket(options) {
|
|
114
|
+
const request = {
|
|
115
|
+
accountId: require_ids.accountId(this.accountInfo.getAccountId()),
|
|
116
|
+
...options
|
|
117
|
+
};
|
|
118
|
+
const info = await this.raw.createBucket(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), request);
|
|
119
|
+
return new require_bucket.Bucket(this, info, this.resolvedUploadRetryOptions);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Lists buckets in the account, optionally filtered by ID, name, or type.
|
|
123
|
+
* @param options - Optional filters for bucket ID, name, or type.
|
|
124
|
+
*
|
|
125
|
+
* @returns An array of {@link Bucket} handles.
|
|
126
|
+
*/
|
|
127
|
+
async listBuckets(options) {
|
|
128
|
+
return (await this.raw.listBuckets(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {
|
|
129
|
+
accountId: require_ids.accountId(this.accountInfo.getAccountId()),
|
|
130
|
+
...options
|
|
131
|
+
})).buckets.map((info) => new require_bucket.Bucket(this, info, this.resolvedUploadRetryOptions));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Looks up a single bucket by name.
|
|
135
|
+
* @param bucketName - The name of the bucket to find.
|
|
136
|
+
*
|
|
137
|
+
* @returns The {@link Bucket} handle, or `null` if not found.
|
|
138
|
+
*/
|
|
139
|
+
async getBucket(bucketName) {
|
|
140
|
+
const filteredMatch = (await this.listBuckets({ bucketName }))[0];
|
|
141
|
+
if (filteredMatch !== void 0) return filteredMatch;
|
|
142
|
+
return (await this.listBuckets()).find((bucket) => bucket.name === bucketName) ?? null;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Permanently deletes a bucket. The bucket must be empty.
|
|
146
|
+
* @param id - The unique identifier of the bucket to delete.
|
|
147
|
+
*
|
|
148
|
+
* @returns The deleted bucket metadata.
|
|
149
|
+
*/
|
|
150
|
+
async deleteBucket(id) {
|
|
151
|
+
return this.raw.deleteBucket(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {
|
|
152
|
+
accountId: require_ids.accountId(this.accountInfo.getAccountId()),
|
|
153
|
+
bucketId: id
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Creates a new application key with the specified capabilities.
|
|
158
|
+
* @param options - Key configuration including capabilities, name, and optional restrictions.
|
|
159
|
+
*
|
|
160
|
+
* @returns The full key including the secret (only returned at creation time).
|
|
161
|
+
*/
|
|
162
|
+
async createKey(options) {
|
|
163
|
+
return this.raw.createKey(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {
|
|
164
|
+
accountId: require_ids.accountId(this.accountInfo.getAccountId()),
|
|
165
|
+
...options
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Lists application keys in the account.
|
|
170
|
+
* @param options - Optional pagination settings.
|
|
171
|
+
*
|
|
172
|
+
* @returns A page of application keys with an optional continuation token.
|
|
173
|
+
*/
|
|
174
|
+
async listKeys(options) {
|
|
175
|
+
return this.raw.listKeys(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {
|
|
176
|
+
accountId: require_ids.accountId(this.accountInfo.getAccountId()),
|
|
177
|
+
...options?.pageSize !== void 0 ? { maxKeyCount: options.pageSize } : {},
|
|
178
|
+
...options?.startApplicationKeyId !== void 0 ? { startApplicationKeyId: options.startApplicationKeyId } : {}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Async iterator that yields every application key on the account,
|
|
183
|
+
* automatically handling pagination via `listKeys`.
|
|
184
|
+
*
|
|
185
|
+
* @param options - Pagination + abort options. `pageSize` is forwarded
|
|
186
|
+
* to `maxKeyCount`; the default is 1000.
|
|
187
|
+
*
|
|
188
|
+
* @returns An async iterable of {@link ApplicationKey} entries.
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```ts
|
|
192
|
+
* for await (const key of client.paginateKeys()) {
|
|
193
|
+
* console.log(key.keyName, key.capabilities)
|
|
194
|
+
* }
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
paginateKeys(options) {
|
|
198
|
+
return require_paginator.paginateItems(async (cursor) => {
|
|
199
|
+
const resp = await this.listKeys({
|
|
200
|
+
pageSize: options?.pageSize ?? 1e3,
|
|
201
|
+
...cursor !== void 0 ? { startApplicationKeyId: cursor } : {}
|
|
202
|
+
});
|
|
203
|
+
return {
|
|
204
|
+
page: resp,
|
|
205
|
+
nextCursor: resp.nextApplicationKeyId ?? void 0
|
|
206
|
+
};
|
|
207
|
+
}, (page) => page.keys, options?.signal);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Permanently deletes an application key.
|
|
211
|
+
* @param applicationKeyId - The unique identifier of the key to delete.
|
|
212
|
+
*
|
|
213
|
+
* @returns The deleted application key metadata.
|
|
214
|
+
*/
|
|
215
|
+
async deleteKey(applicationKeyId) {
|
|
216
|
+
return this.raw.deleteKey(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), { applicationKeyId });
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Checks whether the authorized application key carries every capability in
|
|
220
|
+
* `needed`. Returns the missing capabilities so callers can fail fast with a
|
|
221
|
+
* clear error instead of a generic 401/403 from the server.
|
|
222
|
+
*
|
|
223
|
+
* @param needed - The capabilities required by the planned operation.
|
|
224
|
+
*
|
|
225
|
+
* @returns An object with `ok: true` when every needed capability is
|
|
226
|
+
* present, otherwise `{ ok: false, missing: [...] }`.
|
|
227
|
+
*
|
|
228
|
+
* @throws If {@link authorize} has not been called yet.
|
|
229
|
+
*/
|
|
230
|
+
hasCapabilities(needed) {
|
|
231
|
+
const auth = this.accountInfo.getAuth();
|
|
232
|
+
if (!auth) throw new Error("Not authorized. Call authorize() first.");
|
|
233
|
+
const available = new Set(auth.apiInfo.storageApi.allowed.capabilities);
|
|
234
|
+
const missing = needed.filter((cap) => !available.has(cap));
|
|
235
|
+
return {
|
|
236
|
+
ok: missing.length === 0,
|
|
237
|
+
missing
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
function bindAccountInfoAuthContext(accountInfo, realmUrl, applicationKeyId) {
|
|
242
|
+
accountInfo.setApplicationKeyId?.(applicationKeyId);
|
|
243
|
+
accountInfo.setRealmUrl?.(realmUrl);
|
|
228
244
|
}
|
|
245
|
+
//#endregion
|
|
229
246
|
exports.B2Client = B2Client;
|
|
230
|
-
|
|
247
|
+
|
|
248
|
+
//# sourceMappingURL=client.cjs.map
|
package/dist/client.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.cjs","sources":["../src/client.ts"],"sourcesContent":["import type { AccountInfo } from './auth/account-info.ts'\nimport { InMemoryAccountInfo } from './auth/in-memory.ts'\nimport { getRealmUrl } from './auth/realms.ts'\nimport { Bucket } from './bucket.ts'\nimport type { RetryOptions } from './http/retry.ts'\nimport type { HttpTransport } from './http/transport.ts'\nimport { FetchTransport, RetryTransport } from './http/transport.ts'\nimport { UrlGuard, deriveAllowedSuffixes } from './http/url-guard.ts'\nimport { RawClient } from './raw/index.ts'\nimport type { AuthorizeAccountResponse, Capability } from './types/auth.ts'\nimport type {\n BucketInfo,\n BucketType,\n CorsRule,\n CreateBucketRequest,\n LifecycleRule,\n} from './types/bucket.ts'\nimport type { BucketRetentionPolicy } from './types/bucket.ts'\nimport type { EncryptionSetting } from './types/encryption.ts'\nimport type { ApplicationKeyId, BucketId } from './types/ids.ts'\nimport { accountId } from './types/ids.ts'\nimport type { ApplicationKey, FullApplicationKey, ListKeysResponse } from './types/key.ts'\nimport type { ReplicationConfiguration } from './types/replication.ts'\nimport { DEFAULT_PAGE_SIZE } from './util/defaults.ts'\nimport { type PaginatorOptions, paginateItems } from './util/paginator.ts'\n\n/** Result of {@link B2Client.hasCapabilities}. */\nexport interface CapabilityCheckResult {\n /** `true` when the key carries every requested capability. */\n readonly ok: boolean\n /** Capabilities the call requested that the current key does not hold. Empty when `ok` is `true`. */\n readonly missing: readonly Capability[]\n}\n\n/** Configuration options for creating a {@link B2Client}. */\nexport interface B2ClientOptions {\n /** The application key ID from the B2 dashboard or `b2_create_key`. */\n readonly applicationKeyId: string\n /** The application key secret. */\n readonly applicationKey: string\n /** B2 realm to authenticate against. Defaults to `\"production\"`. */\n readonly realm?: string\n /** Storage backend for authorization state. Defaults to {@link InMemoryAccountInfo}. */\n readonly accountInfo?: AccountInfo\n /** Custom HTTP transport. Defaults to {@link FetchTransport}. Wrapped by {@link RetryTransport}. */\n readonly transport?: HttpTransport\n /** Override retry behavior (max retries, backoff, jitter). */\n readonly retry?: Partial<RetryOptions>\n /** Custom user-agent string prepended to the SDK default. */\n readonly userAgent?: string\n /**\n * Override the SSRF allow-list. By default the SDK locks the\n * {@link FetchTransport} to host suffixes derived from the realm's authorize\n * response (e.g. `backblazeb2.com`, `backblaze.com`) so a compromised B2\n * endpoint cannot redirect the SDK to internal services. Pass an explicit\n * list to add hosts (e.g. when testing against a self-hosted proxy) or set\n * to an empty array to disable the guard entirely (not recommended).\n *\n * Only consulted when {@link B2ClientOptions.transport} is unset; a custom\n * transport is the user's responsibility to harden.\n */\n readonly allowedHostSuffixes?: readonly string[]\n}\n\n/**\n * High-level B2 client providing ergonomic access to buckets, files, and keys.\n *\n * @example\n * ```ts\n * const client = new B2Client({\n * applicationKeyId: process.env.B2_APPLICATION_KEY_ID,\n * applicationKey: process.env.B2_APPLICATION_KEY,\n * })\n * await client.authorize()\n * const buckets = await client.listBuckets()\n * ```\n */\nexport class B2Client {\n /** Low-level client for direct B2 API calls. */\n readonly raw: RawClient\n /** Authorization state storage (tokens, URLs, capabilities). */\n readonly accountInfo: AccountInfo\n /**\n * SSRF allow-list applied by the default {@link FetchTransport}. `null` when\n * a custom transport was supplied — in that case the SDK does not own the\n * guard. Locked down by {@link B2Client.authorize}.\n */\n readonly urlGuard: UrlGuard | null\n private readonly applicationKeyId: string\n private readonly applicationKey: string\n private readonly realmUrl: string\n private readonly userAllowedSuffixes: readonly string[] | undefined\n\n /**\n * Creates a new B2Client. Call {@link authorize} before making API requests.\n * @param options - Configuration including credentials, realm, and transport settings.\n */\n constructor(options: B2ClientOptions) {\n this.applicationKeyId = options.applicationKeyId\n this.applicationKey = options.applicationKey\n this.realmUrl = getRealmUrl(options.realm ?? 'production')\n this.accountInfo = options.accountInfo ?? new InMemoryAccountInfo()\n this.userAllowedSuffixes = options.allowedHostSuffixes\n\n let baseTransport: HttpTransport\n if (options.transport !== undefined) {\n baseTransport = options.transport\n this.urlGuard = null\n } else {\n const urlGuard = new UrlGuard()\n baseTransport = new FetchTransport({\n urlGuard,\n ...(options.userAgent !== undefined ? { userAgent: options.userAgent } : {}),\n })\n this.urlGuard = urlGuard\n }\n\n const retryTransport = new RetryTransport({\n transport: baseTransport,\n ...(options.retry !== undefined ? { retry: options.retry } : {}),\n onReauth: () => this.reauthorize(),\n })\n\n this.raw = new RawClient({ transport: retryTransport })\n }\n\n /**\n * Authenticates with B2 and stores the authorization state. Must be called before other methods.\n *\n * @returns The authorization response containing tokens, URLs, and capabilities.\n */\n async authorize(): Promise<AuthorizeAccountResponse> {\n const auth = await this.raw.authorizeAccount(\n this.applicationKeyId,\n this.applicationKey,\n this.realmUrl,\n )\n this.accountInfo.setAuth(auth)\n // Lock the SSRF guard to the realm's hosts (plus any user additions).\n // No-op when the caller supplied a custom transport: their threat model.\n if (this.urlGuard !== null) {\n const derived = deriveAllowedSuffixes(auth.apiInfo.storageApi)\n const merged =\n this.userAllowedSuffixes !== undefined\n ? Array.from(new Set([...derived, ...this.userAllowedSuffixes]))\n : derived\n this.urlGuard.setAllowedSuffixes(merged)\n }\n return auth\n }\n\n /**\n * Refresh credentials after a 401. Returns the fresh auth token so\n * {@link RetryTransport} can rewrite the in-flight request's\n * Authorization header before retrying.\n *\n * @returns The fresh authorization token.\n */\n private async reauthorize(): Promise<string> {\n this.accountInfo.clear()\n const auth = await this.authorize()\n return auth.authorizationToken\n }\n\n /**\n * Creates a new B2 bucket.\n * @param options - Bucket configuration including name, type, and optional settings.\n *\n * @returns A {@link Bucket} handle for the newly created bucket.\n */\n async createBucket(options: {\n /** Globally unique bucket name (6-50 chars, letters, digits, hyphens). */\n bucketName: string\n /** Access level: `\"allPrivate\"` or `\"allPublic\"`. */\n bucketType: BucketType\n /** Custom key-value metadata stored with the bucket. */\n bucketInfo?: Record<string, string>\n /** CORS rules for browser-based access. */\n corsRules?: CorsRule[]\n /** Default server-side encryption for new files. */\n defaultServerSideEncryption?: EncryptionSetting\n /** Default retention policy for new files (requires file lock). */\n defaultRetention?: BucketRetentionPolicy\n /** Enable file lock (Object Lock) on the bucket. Cannot be disabled once set. */\n fileLockEnabled?: boolean\n /** Lifecycle rules for automatic file deletion or hiding. */\n lifecycleRules?: LifecycleRule[]\n /** Cross-region replication configuration. */\n replicationConfiguration?: ReplicationConfiguration\n }): Promise<Bucket> {\n const request: CreateBucketRequest = {\n accountId: accountId(this.accountInfo.getAccountId()),\n ...options,\n }\n const info = await this.raw.createBucket(\n this.accountInfo.getApiUrl(),\n this.accountInfo.getAuthToken(),\n request,\n )\n return new Bucket(this, info)\n }\n\n /**\n * Lists buckets in the account, optionally filtered by ID, name, or type.\n * @param options - Optional filters for bucket ID, name, or type.\n *\n * @returns An array of {@link Bucket} handles.\n */\n async listBuckets(options?: {\n /** Filter to a specific bucket by ID. */\n bucketId?: BucketId\n /** Filter to a specific bucket by name. */\n bucketName?: string\n /** Filter by bucket types (e.g., `[\"allPrivate\"]`). */\n bucketTypes?: BucketType[]\n }): Promise<Bucket[]> {\n const resp = await this.raw.listBuckets(\n this.accountInfo.getApiUrl(),\n this.accountInfo.getAuthToken(),\n {\n accountId: accountId(this.accountInfo.getAccountId()),\n ...options,\n },\n )\n return resp.buckets.map((info) => new Bucket(this, info))\n }\n\n /**\n * Looks up a single bucket by name.\n * @param bucketName - The name of the bucket to find.\n *\n * @returns The {@link Bucket} handle, or `null` if not found.\n */\n async getBucket(bucketName: string): Promise<Bucket | null> {\n const buckets = await this.listBuckets({ bucketName })\n return buckets[0] ?? null\n }\n\n /**\n * Permanently deletes a bucket. The bucket must be empty.\n * @param id - The unique identifier of the bucket to delete.\n *\n * @returns The deleted bucket metadata.\n */\n async deleteBucket(id: BucketId): Promise<BucketInfo> {\n return this.raw.deleteBucket(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {\n accountId: accountId(this.accountInfo.getAccountId()),\n bucketId: id,\n })\n }\n\n /**\n * Creates a new application key with the specified capabilities.\n * @param options - Key configuration including capabilities, name, and optional restrictions.\n *\n * @returns The full key including the secret (only returned at creation time).\n */\n async createKey(options: {\n /** Capabilities to grant (e.g., `[\"readFiles\", \"writeFiles\"]`). */\n capabilities: Capability[]\n /** Human-readable name for the key. */\n keyName: string\n /** Key expiration in seconds from now. Omit for non-expiring keys. */\n validDurationInSeconds?: number\n /** Restrict the key to a single bucket. */\n bucketId?: BucketId\n /** Restrict the key to files with this name prefix. */\n namePrefix?: string\n }): Promise<FullApplicationKey> {\n return this.raw.createKey(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {\n accountId: accountId(this.accountInfo.getAccountId()),\n ...options,\n })\n }\n\n /**\n * Lists application keys in the account.\n * @param options - Optional pagination settings.\n *\n * @returns A page of application keys with an optional continuation token.\n */\n async listKeys(options?: {\n /**\n * Maximum number of keys to return per request. Forwarded to the\n * raw API's `maxKeyCount` parameter.\n */\n pageSize?: number\n /** Start listing after this key ID (for pagination). */\n startApplicationKeyId?: ApplicationKeyId\n }): Promise<ListKeysResponse> {\n return this.raw.listKeys(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {\n accountId: accountId(this.accountInfo.getAccountId()),\n ...(options?.pageSize !== undefined ? { maxKeyCount: options.pageSize } : {}),\n ...(options?.startApplicationKeyId !== undefined\n ? { startApplicationKeyId: options.startApplicationKeyId }\n : {}),\n })\n }\n\n /**\n * Async iterator that yields every application key on the account,\n * automatically handling pagination via `listKeys`.\n *\n * @param options - Pagination + abort options. `pageSize` is forwarded\n * to `maxKeyCount`; the default is 1000.\n *\n * @returns An async iterable of {@link ApplicationKey} entries.\n *\n * @example\n * ```ts\n * for await (const key of client.paginateKeys()) {\n * console.log(key.keyName, key.capabilities)\n * }\n * ```\n */\n paginateKeys(options?: PaginatorOptions): AsyncIterableIterator<ApplicationKey> {\n return paginateItems(\n async (cursor: ApplicationKeyId | undefined) => {\n const resp = await this.listKeys({\n pageSize: options?.pageSize ?? DEFAULT_PAGE_SIZE,\n ...(cursor !== undefined ? { startApplicationKeyId: cursor } : {}),\n })\n return { page: resp, nextCursor: resp.nextApplicationKeyId ?? undefined }\n },\n (page) => page.keys,\n options?.signal,\n )\n }\n\n /**\n * Permanently deletes an application key.\n * @param applicationKeyId - The unique identifier of the key to delete.\n *\n * @returns The deleted application key metadata.\n */\n async deleteKey(applicationKeyId: ApplicationKeyId): Promise<ApplicationKey> {\n return this.raw.deleteKey(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {\n applicationKeyId,\n })\n }\n\n /**\n * Checks whether the authorized application key carries every capability in\n * `needed`. Returns the missing capabilities so callers can fail fast with a\n * clear error instead of a generic 401/403 from the server.\n *\n * @param needed - The capabilities required by the planned operation.\n *\n * @returns An object with `ok: true` when every needed capability is\n * present, otherwise `{ ok: false, missing: [...] }`.\n *\n * @throws If {@link authorize} has not been called yet.\n */\n hasCapabilities(needed: readonly Capability[]): CapabilityCheckResult {\n const auth = this.accountInfo.getAuth()\n if (!auth) throw new Error('Not authorized. Call authorize() first.')\n const available = new Set<string>(auth.apiInfo.storageApi.allowed.capabilities)\n const missing = needed.filter((cap) => !available.has(cap as string))\n return { ok: missing.length === 0, missing }\n }\n}\n"],"names":["getRealmUrl","InMemoryAccountInfo","urlGuard","UrlGuard","FetchTransport","RetryTransport","RawClient","deriveAllowedSuffixes","accountId","Bucket","paginateItems","DEFAULT_PAGE_SIZE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.cjs","names":[],"sources":["../src/client.ts"],"sourcesContent":["import type { AccountInfo } from './auth/account-info.ts'\nimport { InMemoryAccountInfo } from './auth/in-memory.ts'\nimport { getRealmUrl } from './auth/realms.ts'\nimport { Bucket } from './bucket.ts'\nimport { DEFAULT_RETRY_OPTIONS, type RetryOptions } from './http/retry.ts'\nimport type { HttpTransport } from './http/transport.ts'\nimport { FetchTransport, RetryTransport } from './http/transport.ts'\nimport { deriveAllowedSuffixes, UrlGuard } from './http/url-guard.ts'\nimport { RawClient } from './raw/index.ts'\nimport type { AuthorizeAccountResponse, Capability } from './types/auth.ts'\nimport type {\n BucketInfo,\n BucketRetentionPolicy,\n BucketType,\n CorsRule,\n CreateBucketRequest,\n LifecycleRule,\n} from './types/bucket.ts'\nimport type { EncryptionSetting } from './types/encryption.ts'\nimport type { ApplicationKeyId, BucketId } from './types/ids.ts'\nimport { accountId } from './types/ids.ts'\nimport type {\n ApplicationKey,\n CreateKeyOptions,\n FullApplicationKey,\n ListKeysResponse,\n} from './types/key.ts'\nimport type { ReplicationConfiguration } from './types/replication.ts'\nimport { DEFAULT_PAGE_SIZE } from './util/defaults.ts'\nimport { type PaginatorOptions, paginateItems } from './util/paginator.ts'\n\n/** Result of {@link B2Client.hasCapabilities}. */\nexport interface CapabilityCheckResult {\n /** `true` when the key carries every requested capability. */\n readonly ok: boolean\n /** Capabilities the call requested that the current key does not hold. Empty when `ok` is `true`. */\n readonly missing: readonly Capability[]\n}\n\n/** Configuration options for creating a {@link B2Client}. */\nexport interface B2ClientOptions {\n /** The application key ID from the B2 dashboard or `b2_create_key`. */\n readonly applicationKeyId: string\n /** The application key secret. */\n readonly applicationKey: string\n /**\n * B2 realm to authenticate against. Accepts a known realm-map key\n * (`\"production\"` or `\"staging\"`) or a direct base URL. Custom HTTPS hosts\n * are trusted with the application key during authorize, so never derive\n * `realm` from untrusted input. URL values must use HTTPS, or loopback IP\n * literal HTTP for local testing only; application-key credentials are sent\n * unencrypted over loopback HTTP. Unsupported schemes, malformed URLs,\n * non-URL strings, plaintext HTTP hostnames such as `localhost`, and\n * non-loopback plaintext HTTP are rejected before credentials are sent. URL\n * values must not include userinfo, query strings, or fragments. Defaults to\n * `\"production\"`.\n */\n readonly realm?: string\n /** Storage backend for authorization state. Defaults to {@link InMemoryAccountInfo}. */\n readonly accountInfo?: AccountInfo\n /** Custom HTTP transport. Defaults to {@link FetchTransport}. Wrapped by {@link RetryTransport}. */\n readonly transport?: HttpTransport\n /** Override retry behavior (max retries, backoff, and per-attempt timeout). */\n readonly retry?: Partial<RetryOptions>\n /** Custom user-agent string prepended to the SDK default. */\n readonly userAgent?: string\n /**\n * Override the SSRF allow-list. By default the SDK locks the\n * {@link FetchTransport} to host suffixes derived from the realm's authorize\n * response (e.g. `backblazeb2.com`, `backblaze.com`) so a compromised B2\n * endpoint cannot redirect the SDK to internal services. Pass an explicit\n * list to add hosts (e.g. when testing against a self-hosted proxy) or set\n * to an empty array to disable the guard entirely (not recommended).\n *\n * Only consulted when {@link B2ClientOptions.transport} is unset; a custom\n * transport is the user's responsibility to harden.\n */\n readonly allowedHostSuffixes?: readonly string[]\n /**\n * Follow same-origin GET/HEAD redirects in the default fetch transport after\n * checking each target with the SSRF guard. POST redirects remain blocked.\n * Defaults to true.\n */\n readonly followSameOriginRedirects?: boolean\n}\n\n/**\n * High-level B2 client providing ergonomic access to buckets, files, and keys.\n *\n * @example\n * ```ts\n * const client = new B2Client({\n * applicationKeyId: process.env.B2_APPLICATION_KEY_ID,\n * applicationKey: process.env.B2_APPLICATION_KEY,\n * })\n * await client.authorize()\n * const buckets = await client.listBuckets()\n * ```\n */\nexport class B2Client {\n /** Low-level client for direct B2 API calls. */\n readonly raw: RawClient\n /** Authorization state storage (tokens, URLs, capabilities). */\n readonly accountInfo: AccountInfo\n /**\n * SSRF allow-list applied by the default {@link FetchTransport}. `null` when\n * a custom transport was supplied — in that case the SDK does not own the\n * guard. Locked down by {@link B2Client.authorize}.\n */\n readonly urlGuard: UrlGuard | null\n private readonly applicationKeyId: string\n private readonly applicationKey: string\n private readonly realmUrl: string\n private readonly userAllowedSuffixes: readonly string[] | undefined\n private readonly resolvedUploadRetryOptions: RetryOptions\n\n /**\n * Creates a new B2Client. Call {@link authorize} before making API requests.\n * @param options - Configuration including credentials, realm, and transport settings.\n */\n constructor(options: B2ClientOptions) {\n this.applicationKeyId = options.applicationKeyId\n this.applicationKey = options.applicationKey\n this.realmUrl = getRealmUrl(options.realm ?? 'production')\n this.accountInfo = options.accountInfo ?? new InMemoryAccountInfo()\n bindAccountInfoAuthContext(this.accountInfo, this.realmUrl, this.applicationKeyId)\n this.userAllowedSuffixes = options.allowedHostSuffixes\n this.resolvedUploadRetryOptions = { ...DEFAULT_RETRY_OPTIONS, ...options.retry }\n\n let baseTransport: HttpTransport\n if (options.transport !== undefined) {\n baseTransport = options.transport\n this.urlGuard = null\n } else {\n const urlGuard = new UrlGuard()\n baseTransport = new FetchTransport({\n urlGuard,\n ...(options.userAgent !== undefined ? { userAgent: options.userAgent } : {}),\n ...(options.followSameOriginRedirects !== undefined\n ? { followSameOriginRedirects: options.followSameOriginRedirects }\n : {}),\n })\n this.urlGuard = urlGuard\n }\n\n const retryTransport = new RetryTransport({\n transport: baseTransport,\n retry: this.resolvedUploadRetryOptions,\n onReauth: () => this.reauthorize(),\n })\n\n const cachedAuth = this.accountInfo.getAuth()\n if (cachedAuth !== null) this.lockUrlGuard(cachedAuth)\n\n this.raw = new RawClient({ transport: retryTransport })\n }\n\n /**\n * Authenticates with B2 and stores the authorization state. Must be called before other methods.\n *\n * @returns The authorization response containing tokens, URLs, and capabilities.\n */\n async authorize(): Promise<AuthorizeAccountResponse> {\n const auth = await this.raw.authorizeAccount(\n this.applicationKeyId,\n this.applicationKey,\n this.realmUrl,\n )\n this.accountInfo.setAuth(auth)\n this.lockUrlGuard(auth)\n return auth\n }\n\n private lockUrlGuard(auth: AuthorizeAccountResponse): void {\n if (this.urlGuard !== null) {\n const derived = deriveAllowedSuffixes(auth.apiInfo.storageApi)\n const merged =\n this.userAllowedSuffixes !== undefined\n ? this.userAllowedSuffixes.length === 0\n ? []\n : Array.from(new Set([...derived, ...this.userAllowedSuffixes]))\n : derived\n this.urlGuard.setAllowedSuffixes(merged)\n }\n }\n\n /**\n * Refresh credentials after a 401. Returns the fresh auth token so\n * {@link RetryTransport} can rewrite the in-flight request's\n * Authorization header before retrying.\n *\n * @returns The fresh authorization token.\n */\n private async reauthorize(): Promise<string> {\n this.accountInfo.clear()\n const auth = await this.authorize()\n return auth.authorizationToken\n }\n\n /**\n * Creates a new B2 bucket.\n * @param options - Bucket configuration including name, type, and optional settings.\n *\n * @returns A {@link Bucket} handle for the newly created bucket.\n */\n async createBucket(options: {\n /** Globally unique bucket name (6-63 chars; letters, digits, hyphens, periods). */\n bucketName: string\n /** Access level: `\"allPrivate\"` or `\"allPublic\"`. */\n bucketType: BucketType\n /** Custom key-value metadata stored with the bucket. */\n bucketInfo?: Record<string, string>\n /** CORS rules for browser-based access. */\n corsRules?: CorsRule[]\n /** Default server-side encryption for new files. */\n defaultServerSideEncryption?: EncryptionSetting\n /** Default retention policy for new files (requires file lock). */\n defaultRetention?: BucketRetentionPolicy\n /** Enable file lock (Object Lock) on the bucket. Cannot be disabled once set. */\n fileLockEnabled?: boolean\n /** Lifecycle rules for automatic file deletion or hiding. */\n lifecycleRules?: LifecycleRule[]\n /** Cross-region replication configuration. */\n replicationConfiguration?: ReplicationConfiguration\n }): Promise<Bucket> {\n const request: CreateBucketRequest = {\n accountId: accountId(this.accountInfo.getAccountId()),\n ...options,\n }\n const info = await this.raw.createBucket(\n this.accountInfo.getApiUrl(),\n this.accountInfo.getAuthToken(),\n request,\n )\n return new Bucket(this, info, this.resolvedUploadRetryOptions)\n }\n\n /**\n * Lists buckets in the account, optionally filtered by ID, name, or type.\n * @param options - Optional filters for bucket ID, name, or type.\n *\n * @returns An array of {@link Bucket} handles.\n */\n async listBuckets(options?: {\n /** Filter to a specific bucket by ID. */\n bucketId?: BucketId\n /** Filter to a specific bucket by name. */\n bucketName?: string\n /** Filter by bucket types (e.g., `[\"allPrivate\"]`). */\n bucketTypes?: BucketType[]\n }): Promise<Bucket[]> {\n const resp = await this.raw.listBuckets(\n this.accountInfo.getApiUrl(),\n this.accountInfo.getAuthToken(),\n {\n accountId: accountId(this.accountInfo.getAccountId()),\n ...options,\n },\n )\n return resp.buckets.map((info) => new Bucket(this, info, this.resolvedUploadRetryOptions))\n }\n\n /**\n * Looks up a single bucket by name.\n * @param bucketName - The name of the bucket to find.\n *\n * @returns The {@link Bucket} handle, or `null` if not found.\n */\n async getBucket(bucketName: string): Promise<Bucket | null> {\n const buckets = await this.listBuckets({ bucketName })\n const filteredMatch = buckets[0]\n if (filteredMatch !== undefined) return filteredMatch\n\n const unfilteredBuckets = await this.listBuckets()\n return unfilteredBuckets.find((bucket) => bucket.name === bucketName) ?? null\n }\n\n /**\n * Permanently deletes a bucket. The bucket must be empty.\n * @param id - The unique identifier of the bucket to delete.\n *\n * @returns The deleted bucket metadata.\n */\n async deleteBucket(id: BucketId): Promise<BucketInfo> {\n return this.raw.deleteBucket(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {\n accountId: accountId(this.accountInfo.getAccountId()),\n bucketId: id,\n })\n }\n\n /**\n * Creates a new application key with the specified capabilities.\n * @param options - Key configuration including capabilities, name, and optional restrictions.\n *\n * @returns The full key including the secret (only returned at creation time).\n */\n async createKey(options: CreateKeyOptions): Promise<FullApplicationKey> {\n return this.raw.createKey(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {\n accountId: accountId(this.accountInfo.getAccountId()),\n ...options,\n })\n }\n\n /**\n * Lists application keys in the account.\n * @param options - Optional pagination settings.\n *\n * @returns A page of application keys with an optional continuation token.\n */\n async listKeys(options?: {\n /**\n * Maximum number of keys to return per request. Forwarded to the\n * raw API's `maxKeyCount` parameter.\n */\n pageSize?: number\n /** Start listing after this key ID (for pagination). */\n startApplicationKeyId?: ApplicationKeyId\n }): Promise<ListKeysResponse> {\n return this.raw.listKeys(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {\n accountId: accountId(this.accountInfo.getAccountId()),\n ...(options?.pageSize !== undefined ? { maxKeyCount: options.pageSize } : {}),\n ...(options?.startApplicationKeyId !== undefined\n ? { startApplicationKeyId: options.startApplicationKeyId }\n : {}),\n })\n }\n\n /**\n * Async iterator that yields every application key on the account,\n * automatically handling pagination via `listKeys`.\n *\n * @param options - Pagination + abort options. `pageSize` is forwarded\n * to `maxKeyCount`; the default is 1000.\n *\n * @returns An async iterable of {@link ApplicationKey} entries.\n *\n * @example\n * ```ts\n * for await (const key of client.paginateKeys()) {\n * console.log(key.keyName, key.capabilities)\n * }\n * ```\n */\n paginateKeys(options?: PaginatorOptions): AsyncIterableIterator<ApplicationKey> {\n return paginateItems(\n async (cursor: ApplicationKeyId | undefined) => {\n const resp = await this.listKeys({\n pageSize: options?.pageSize ?? DEFAULT_PAGE_SIZE,\n ...(cursor !== undefined ? { startApplicationKeyId: cursor } : {}),\n })\n return { page: resp, nextCursor: resp.nextApplicationKeyId ?? undefined }\n },\n (page) => page.keys,\n options?.signal,\n )\n }\n\n /**\n * Permanently deletes an application key.\n * @param applicationKeyId - The unique identifier of the key to delete.\n *\n * @returns The deleted application key metadata.\n */\n async deleteKey(applicationKeyId: ApplicationKeyId): Promise<ApplicationKey> {\n return this.raw.deleteKey(this.accountInfo.getApiUrl(), this.accountInfo.getAuthToken(), {\n applicationKeyId,\n })\n }\n\n /**\n * Checks whether the authorized application key carries every capability in\n * `needed`. Returns the missing capabilities so callers can fail fast with a\n * clear error instead of a generic 401/403 from the server.\n *\n * @param needed - The capabilities required by the planned operation.\n *\n * @returns An object with `ok: true` when every needed capability is\n * present, otherwise `{ ok: false, missing: [...] }`.\n *\n * @throws If {@link authorize} has not been called yet.\n */\n hasCapabilities(needed: readonly Capability[]): CapabilityCheckResult {\n const auth = this.accountInfo.getAuth()\n if (!auth) throw new Error('Not authorized. Call authorize() first.')\n const available = new Set<string>(auth.apiInfo.storageApi.allowed.capabilities)\n const missing = needed.filter((cap) => !available.has(cap as string))\n return { ok: missing.length === 0, missing }\n }\n}\n\nfunction bindAccountInfoAuthContext(\n accountInfo: AccountInfo,\n realmUrl: string,\n applicationKeyId: string,\n): void {\n accountInfo.setApplicationKeyId?.(applicationKeyId)\n accountInfo.setRealmUrl?.(realmUrl)\n}\n"],"mappings":"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"}
|