@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/auth/realms.d.cts
CHANGED
|
@@ -1,12 +1,35 @@
|
|
|
1
|
-
/**
|
|
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
|
-
*
|
|
5
|
-
*
|
|
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
|
|
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":"
|
|
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"}
|
package/dist/auth/realms.d.ts
CHANGED
|
@@ -1,12 +1,35 @@
|
|
|
1
|
-
/**
|
|
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
|
-
*
|
|
5
|
-
*
|
|
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
|
|
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":"
|
|
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"}
|
package/dist/auth/realms.js
CHANGED
|
@@ -1,12 +1,83 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
78
|
+
return isRealmName(realm) ? VERIFIED_REALM_URLS[realm] : realm;
|
|
7
79
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
//# sourceMappingURL=realms.js.map
|
|
80
|
+
//#endregion
|
|
81
|
+
export { REALM_URLS, assertSecureRealmUrl, getRealmUrl };
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=realms.js.map
|
package/dist/auth/realms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realms.js","sources":["../../src/auth/realms.ts"],"sourcesContent":["/**
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"],"
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
//#
|
|
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"],"
|
|
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"}
|