@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
|
@@ -1,10 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
async
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
//#region src/util/best-effort.ts
|
|
2
|
+
/**
|
|
3
|
+
* Runs an async cleanup operation and swallows any rejection.
|
|
4
|
+
*
|
|
5
|
+
* Used at error-handling boundaries (e.g. after a multipart upload fails,
|
|
6
|
+
* when trying to `cancelLargeFile` on the orphaned upload). The primary
|
|
7
|
+
* error is what the caller wants to see; a secondary failure during
|
|
8
|
+
* cleanup must not shadow it.
|
|
9
|
+
*
|
|
10
|
+
* Naming the pattern instead of inlining a try/catch with an empty catch
|
|
11
|
+
* makes the intent explicit at the call site: this is best-effort cleanup,
|
|
12
|
+
* not a silent error swallow.
|
|
13
|
+
*
|
|
14
|
+
* @param fn - Cleanup async function. Its return value is ignored; any
|
|
15
|
+
* thrown error or rejected promise is caught and discarded.
|
|
16
|
+
* @param onError - Optional observer called with the swallowed cleanup error.
|
|
17
|
+
*
|
|
18
|
+
* @returns A promise that always resolves, regardless of `fn`'s outcome.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* try {
|
|
23
|
+
* await uploadParts(...)
|
|
24
|
+
* } catch (err) {
|
|
25
|
+
* await bestEffort(() =>
|
|
26
|
+
* raw.cancelLargeFile(apiUrl, authToken, { fileId: largeFileId }),
|
|
27
|
+
* )
|
|
28
|
+
* throw err
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
async function bestEffort(fn, onError) {
|
|
33
|
+
try {
|
|
34
|
+
await fn();
|
|
35
|
+
} catch (error) {
|
|
36
|
+
try {
|
|
37
|
+
onError?.(error);
|
|
38
|
+
} catch {}
|
|
39
|
+
}
|
|
8
40
|
}
|
|
41
|
+
//#endregion
|
|
9
42
|
exports.bestEffort = bestEffort;
|
|
10
|
-
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=best-effort.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"best-effort.cjs","sources":["../../src/util/best-effort.ts"],"sourcesContent":["/**\n * Runs an async cleanup operation and swallows any rejection.\n *\n * Used at error-handling boundaries (e.g. after a multipart upload fails,\n * when trying to `cancelLargeFile` on the orphaned upload). The primary\n * error is what the caller wants to see; a secondary failure during\n * cleanup must not shadow it.\n *\n * Naming the pattern instead of inlining a try/catch with an empty catch\n * makes the intent explicit at the call site: this is best-effort cleanup,\n * not a silent error swallow.\n *\n * @param fn - Cleanup async function. Its return value is ignored; any\n * thrown error or rejected promise is caught and discarded.\n *\n * @returns A promise that always resolves, regardless of `fn`'s outcome.\n *\n * @example\n * ```ts\n * try {\n * await uploadParts(...)\n * } catch (err) {\n * await bestEffort(() =>\n * raw.cancelLargeFile(apiUrl, authToken, { fileId: largeFileId }),\n * )\n * throw err\n * }\n * ```\n */\nexport async function bestEffort(fn: () => Promise<unknown
|
|
1
|
+
{"version":3,"file":"best-effort.cjs","names":[],"sources":["../../src/util/best-effort.ts"],"sourcesContent":["/**\n * Runs an async cleanup operation and swallows any rejection.\n *\n * Used at error-handling boundaries (e.g. after a multipart upload fails,\n * when trying to `cancelLargeFile` on the orphaned upload). The primary\n * error is what the caller wants to see; a secondary failure during\n * cleanup must not shadow it.\n *\n * Naming the pattern instead of inlining a try/catch with an empty catch\n * makes the intent explicit at the call site: this is best-effort cleanup,\n * not a silent error swallow.\n *\n * @param fn - Cleanup async function. Its return value is ignored; any\n * thrown error or rejected promise is caught and discarded.\n * @param onError - Optional observer called with the swallowed cleanup error.\n *\n * @returns A promise that always resolves, regardless of `fn`'s outcome.\n *\n * @example\n * ```ts\n * try {\n * await uploadParts(...)\n * } catch (err) {\n * await bestEffort(() =>\n * raw.cancelLargeFile(apiUrl, authToken, { fileId: largeFileId }),\n * )\n * throw err\n * }\n * ```\n */\nexport async function bestEffort(\n fn: () => Promise<unknown>,\n onError?: (error: unknown) => void,\n): Promise<void> {\n try {\n await fn()\n } catch (error) {\n try {\n onError?.(error)\n } catch {\n // Observer failures are also secondary cleanup failures.\n }\n // Intentional swallow: this helper exists for cleanup paths where a\n // secondary failure must not shadow the primary error.\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,eAAsB,WACpB,IACA,SACe;CACf,IAAI;EACF,MAAM,GAAG;CACX,SAAS,OAAO;EACd,IAAI;GACF,UAAU,KAAK;EACjB,QAAQ,CAER;CAGF;AACF"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @param fn - Cleanup async function. Its return value is ignored; any
|
|
14
14
|
* thrown error or rejected promise is caught and discarded.
|
|
15
|
+
* @param onError - Optional observer called with the swallowed cleanup error.
|
|
15
16
|
*
|
|
16
17
|
* @returns A promise that always resolves, regardless of `fn`'s outcome.
|
|
17
18
|
*
|
|
@@ -27,5 +28,5 @@
|
|
|
27
28
|
* }
|
|
28
29
|
* ```
|
|
29
30
|
*/
|
|
30
|
-
export declare function bestEffort(fn: () => Promise<unknown
|
|
31
|
+
export declare function bestEffort(fn: () => Promise<unknown>, onError?: (error: unknown) => void): Promise<void>;
|
|
31
32
|
//# sourceMappingURL=best-effort.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"best-effort.d.ts","sourceRoot":"","sources":["../../src/util/best-effort.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"best-effort.d.ts","sourceRoot":"","sources":["../../src/util/best-effort.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,UAAU,CAC9B,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACjC,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @param fn - Cleanup async function. Its return value is ignored; any
|
|
14
14
|
* thrown error or rejected promise is caught and discarded.
|
|
15
|
+
* @param onError - Optional observer called with the swallowed cleanup error.
|
|
15
16
|
*
|
|
16
17
|
* @returns A promise that always resolves, regardless of `fn`'s outcome.
|
|
17
18
|
*
|
|
@@ -27,5 +28,5 @@
|
|
|
27
28
|
* }
|
|
28
29
|
* ```
|
|
29
30
|
*/
|
|
30
|
-
export declare function bestEffort(fn: () => Promise<unknown
|
|
31
|
+
export declare function bestEffort(fn: () => Promise<unknown>, onError?: (error: unknown) => void): Promise<void>;
|
|
31
32
|
//# sourceMappingURL=best-effort.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"best-effort.d.ts","sourceRoot":"","sources":["../../src/util/best-effort.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"best-effort.d.ts","sourceRoot":"","sources":["../../src/util/best-effort.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,UAAU,CAC9B,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACjC,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
package/dist/util/best-effort.js
CHANGED
|
@@ -1,10 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
//#region src/util/best-effort.ts
|
|
2
|
+
/**
|
|
3
|
+
* Runs an async cleanup operation and swallows any rejection.
|
|
4
|
+
*
|
|
5
|
+
* Used at error-handling boundaries (e.g. after a multipart upload fails,
|
|
6
|
+
* when trying to `cancelLargeFile` on the orphaned upload). The primary
|
|
7
|
+
* error is what the caller wants to see; a secondary failure during
|
|
8
|
+
* cleanup must not shadow it.
|
|
9
|
+
*
|
|
10
|
+
* Naming the pattern instead of inlining a try/catch with an empty catch
|
|
11
|
+
* makes the intent explicit at the call site: this is best-effort cleanup,
|
|
12
|
+
* not a silent error swallow.
|
|
13
|
+
*
|
|
14
|
+
* @param fn - Cleanup async function. Its return value is ignored; any
|
|
15
|
+
* thrown error or rejected promise is caught and discarded.
|
|
16
|
+
* @param onError - Optional observer called with the swallowed cleanup error.
|
|
17
|
+
*
|
|
18
|
+
* @returns A promise that always resolves, regardless of `fn`'s outcome.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* try {
|
|
23
|
+
* await uploadParts(...)
|
|
24
|
+
* } catch (err) {
|
|
25
|
+
* await bestEffort(() =>
|
|
26
|
+
* raw.cancelLargeFile(apiUrl, authToken, { fileId: largeFileId }),
|
|
27
|
+
* )
|
|
28
|
+
* throw err
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
async function bestEffort(fn, onError) {
|
|
33
|
+
try {
|
|
34
|
+
await fn();
|
|
35
|
+
} catch (error) {
|
|
36
|
+
try {
|
|
37
|
+
onError?.(error);
|
|
38
|
+
} catch {}
|
|
39
|
+
}
|
|
6
40
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
//# sourceMappingURL=best-effort.js.map
|
|
41
|
+
//#endregion
|
|
42
|
+
export { bestEffort };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=best-effort.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"best-effort.js","sources":["../../src/util/best-effort.ts"],"sourcesContent":["/**\n * Runs an async cleanup operation and swallows any rejection.\n *\n * Used at error-handling boundaries (e.g. after a multipart upload fails,\n * when trying to `cancelLargeFile` on the orphaned upload). The primary\n * error is what the caller wants to see; a secondary failure during\n * cleanup must not shadow it.\n *\n * Naming the pattern instead of inlining a try/catch with an empty catch\n * makes the intent explicit at the call site: this is best-effort cleanup,\n * not a silent error swallow.\n *\n * @param fn - Cleanup async function. Its return value is ignored; any\n * thrown error or rejected promise is caught and discarded.\n *\n * @returns A promise that always resolves, regardless of `fn`'s outcome.\n *\n * @example\n * ```ts\n * try {\n * await uploadParts(...)\n * } catch (err) {\n * await bestEffort(() =>\n * raw.cancelLargeFile(apiUrl, authToken, { fileId: largeFileId }),\n * )\n * throw err\n * }\n * ```\n */\nexport async function bestEffort(fn: () => Promise<unknown
|
|
1
|
+
{"version":3,"file":"best-effort.js","names":[],"sources":["../../src/util/best-effort.ts"],"sourcesContent":["/**\n * Runs an async cleanup operation and swallows any rejection.\n *\n * Used at error-handling boundaries (e.g. after a multipart upload fails,\n * when trying to `cancelLargeFile` on the orphaned upload). The primary\n * error is what the caller wants to see; a secondary failure during\n * cleanup must not shadow it.\n *\n * Naming the pattern instead of inlining a try/catch with an empty catch\n * makes the intent explicit at the call site: this is best-effort cleanup,\n * not a silent error swallow.\n *\n * @param fn - Cleanup async function. Its return value is ignored; any\n * thrown error or rejected promise is caught and discarded.\n * @param onError - Optional observer called with the swallowed cleanup error.\n *\n * @returns A promise that always resolves, regardless of `fn`'s outcome.\n *\n * @example\n * ```ts\n * try {\n * await uploadParts(...)\n * } catch (err) {\n * await bestEffort(() =>\n * raw.cancelLargeFile(apiUrl, authToken, { fileId: largeFileId }),\n * )\n * throw err\n * }\n * ```\n */\nexport async function bestEffort(\n fn: () => Promise<unknown>,\n onError?: (error: unknown) => void,\n): Promise<void> {\n try {\n await fn()\n } catch (error) {\n try {\n onError?.(error)\n } catch {\n // Observer failures are also secondary cleanup failures.\n }\n // Intentional swallow: this helper exists for cleanup paths where a\n // secondary failure must not shadow the primary error.\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,eAAsB,WACpB,IACA,SACe;CACf,IAAI;EACF,MAAM,GAAG;CACX,SAAS,OAAO;EACd,IAAI;GACF,UAAU,KAAK;EACjB,QAAQ,CAER;CAGF;AACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/util/bytes.ts
|
|
2
|
+
/**
|
|
3
|
+
* Return an ArrayBuffer containing exactly the bytes visible through a
|
|
4
|
+
* Uint8Array view.
|
|
5
|
+
*
|
|
6
|
+
* Exact `ArrayBuffer` views are returned directly. Other `ArrayBuffer` views
|
|
7
|
+
* are copied with `ArrayBuffer.prototype.slice()` so Node `Buffer` instances do
|
|
8
|
+
* not expose slab bytes. `SharedArrayBuffer`-backed views are copied through a
|
|
9
|
+
* fresh `Uint8Array` so Web Crypto receives a plain `ArrayBuffer`.
|
|
10
|
+
*
|
|
11
|
+
* @param bytes - The byte view to copy.
|
|
12
|
+
*
|
|
13
|
+
* @returns An ArrayBuffer containing exactly `bytes`.
|
|
14
|
+
*/
|
|
15
|
+
function arrayBufferFor(bytes) {
|
|
16
|
+
if (bytes.buffer instanceof ArrayBuffer && bytes.byteOffset === 0 && bytes.byteLength === bytes.buffer.byteLength) return bytes.buffer;
|
|
17
|
+
if (bytes.buffer instanceof ArrayBuffer) return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
18
|
+
return new Uint8Array(bytes).buffer;
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
exports.arrayBufferFor = arrayBufferFor;
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=bytes.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.cjs","names":[],"sources":["../../src/util/bytes.ts"],"sourcesContent":["/**\n * Return an ArrayBuffer containing exactly the bytes visible through a\n * Uint8Array view.\n *\n * Exact `ArrayBuffer` views are returned directly. Other `ArrayBuffer` views\n * are copied with `ArrayBuffer.prototype.slice()` so Node `Buffer` instances do\n * not expose slab bytes. `SharedArrayBuffer`-backed views are copied through a\n * fresh `Uint8Array` so Web Crypto receives a plain `ArrayBuffer`.\n *\n * @param bytes - The byte view to copy.\n *\n * @returns An ArrayBuffer containing exactly `bytes`.\n */\nexport function arrayBufferFor(bytes: Uint8Array): ArrayBuffer {\n if (\n bytes.buffer instanceof ArrayBuffer &&\n bytes.byteOffset === 0 &&\n bytes.byteLength === bytes.buffer.byteLength\n ) {\n return bytes.buffer\n }\n if (bytes.buffer instanceof ArrayBuffer) {\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)\n }\n\n return new Uint8Array(bytes).buffer\n}\n"],"mappings":";;;;;;;;;;;;;;AAaA,SAAgB,eAAe,OAAgC;CAC7D,IACE,MAAM,kBAAkB,eACxB,MAAM,eAAe,KACrB,MAAM,eAAe,MAAM,OAAO,YAElC,OAAO,MAAM;CAEf,IAAI,MAAM,kBAAkB,aAC1B,OAAO,MAAM,OAAO,MAAM,MAAM,YAAY,MAAM,aAAa,MAAM,UAAU;CAGjF,OAAO,IAAI,WAAW,KAAK,CAAC,CAAC;AAC/B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return an ArrayBuffer containing exactly the bytes visible through a
|
|
3
|
+
* Uint8Array view.
|
|
4
|
+
*
|
|
5
|
+
* Exact `ArrayBuffer` views are returned directly. Other `ArrayBuffer` views
|
|
6
|
+
* are copied with `ArrayBuffer.prototype.slice()` so Node `Buffer` instances do
|
|
7
|
+
* not expose slab bytes. `SharedArrayBuffer`-backed views are copied through a
|
|
8
|
+
* fresh `Uint8Array` so Web Crypto receives a plain `ArrayBuffer`.
|
|
9
|
+
*
|
|
10
|
+
* @param bytes - The byte view to copy.
|
|
11
|
+
*
|
|
12
|
+
* @returns An ArrayBuffer containing exactly `bytes`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function arrayBufferFor(bytes: Uint8Array): ArrayBuffer;
|
|
15
|
+
//# sourceMappingURL=bytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../src/util/bytes.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAa7D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return an ArrayBuffer containing exactly the bytes visible through a
|
|
3
|
+
* Uint8Array view.
|
|
4
|
+
*
|
|
5
|
+
* Exact `ArrayBuffer` views are returned directly. Other `ArrayBuffer` views
|
|
6
|
+
* are copied with `ArrayBuffer.prototype.slice()` so Node `Buffer` instances do
|
|
7
|
+
* not expose slab bytes. `SharedArrayBuffer`-backed views are copied through a
|
|
8
|
+
* fresh `Uint8Array` so Web Crypto receives a plain `ArrayBuffer`.
|
|
9
|
+
*
|
|
10
|
+
* @param bytes - The byte view to copy.
|
|
11
|
+
*
|
|
12
|
+
* @returns An ArrayBuffer containing exactly `bytes`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function arrayBufferFor(bytes: Uint8Array): ArrayBuffer;
|
|
15
|
+
//# sourceMappingURL=bytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../src/util/bytes.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAa7D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/util/bytes.ts
|
|
2
|
+
/**
|
|
3
|
+
* Return an ArrayBuffer containing exactly the bytes visible through a
|
|
4
|
+
* Uint8Array view.
|
|
5
|
+
*
|
|
6
|
+
* Exact `ArrayBuffer` views are returned directly. Other `ArrayBuffer` views
|
|
7
|
+
* are copied with `ArrayBuffer.prototype.slice()` so Node `Buffer` instances do
|
|
8
|
+
* not expose slab bytes. `SharedArrayBuffer`-backed views are copied through a
|
|
9
|
+
* fresh `Uint8Array` so Web Crypto receives a plain `ArrayBuffer`.
|
|
10
|
+
*
|
|
11
|
+
* @param bytes - The byte view to copy.
|
|
12
|
+
*
|
|
13
|
+
* @returns An ArrayBuffer containing exactly `bytes`.
|
|
14
|
+
*/
|
|
15
|
+
function arrayBufferFor(bytes) {
|
|
16
|
+
if (bytes.buffer instanceof ArrayBuffer && bytes.byteOffset === 0 && bytes.byteLength === bytes.buffer.byteLength) return bytes.buffer;
|
|
17
|
+
if (bytes.buffer instanceof ArrayBuffer) return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
18
|
+
return new Uint8Array(bytes).buffer;
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { arrayBufferFor };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=bytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.js","names":[],"sources":["../../src/util/bytes.ts"],"sourcesContent":["/**\n * Return an ArrayBuffer containing exactly the bytes visible through a\n * Uint8Array view.\n *\n * Exact `ArrayBuffer` views are returned directly. Other `ArrayBuffer` views\n * are copied with `ArrayBuffer.prototype.slice()` so Node `Buffer` instances do\n * not expose slab bytes. `SharedArrayBuffer`-backed views are copied through a\n * fresh `Uint8Array` so Web Crypto receives a plain `ArrayBuffer`.\n *\n * @param bytes - The byte view to copy.\n *\n * @returns An ArrayBuffer containing exactly `bytes`.\n */\nexport function arrayBufferFor(bytes: Uint8Array): ArrayBuffer {\n if (\n bytes.buffer instanceof ArrayBuffer &&\n bytes.byteOffset === 0 &&\n bytes.byteLength === bytes.buffer.byteLength\n ) {\n return bytes.buffer\n }\n if (bytes.buffer instanceof ArrayBuffer) {\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)\n }\n\n return new Uint8Array(bytes).buffer\n}\n"],"mappings":";;;;;;;;;;;;;;AAaA,SAAgB,eAAe,OAAgC;CAC7D,IACE,MAAM,kBAAkB,eACxB,MAAM,eAAe,KACrB,MAAM,eAAe,MAAM,OAAO,YAElC,OAAO,MAAM;CAEf,IAAI,MAAM,kBAAkB,aAC1B,OAAO,MAAM,OAAO,MAAM,MAAM,YAAY,MAAM,aAAa,MAAM,UAAU;CAGjF,OAAO,IAAI,WAAW,KAAK,CAAC,CAAC;AAC/B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const require_text_codec = require("./text-codec.cjs");
|
|
2
|
+
const require_bytes = require("./bytes.cjs");
|
|
3
|
+
//#region src/util/crypto.ts
|
|
4
|
+
var CRYPTO_UNAVAILABLE_MESSAGE = "SHA-256 and HMAC-SHA256 require globalThis.crypto.subtle or Node.js node:crypto.";
|
|
5
|
+
/**
|
|
6
|
+
* Convert bytes to a lowercase hex string.
|
|
7
|
+
*
|
|
8
|
+
* @param bytes - The raw bytes to encode as hexadecimal characters.
|
|
9
|
+
*
|
|
10
|
+
* @returns The lowercase hex-encoded string representation of the input bytes.
|
|
11
|
+
*/
|
|
12
|
+
function hexEncode(bytes) {
|
|
13
|
+
return [...bytes].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Compute a SHA-256 digest and return it as lowercase hex.
|
|
17
|
+
*
|
|
18
|
+
* @param data - UTF-8 string or raw bytes to digest.
|
|
19
|
+
*
|
|
20
|
+
* @returns The lowercase hex-encoded SHA-256 digest.
|
|
21
|
+
*/
|
|
22
|
+
async function sha256Hex(data) {
|
|
23
|
+
const bytes = bytesFor(data);
|
|
24
|
+
if (globalThis.crypto?.subtle) {
|
|
25
|
+
const digest = await globalThis.crypto.subtle.digest("SHA-256", require_bytes.arrayBufferFor(bytes));
|
|
26
|
+
return hexEncode(new Uint8Array(digest));
|
|
27
|
+
}
|
|
28
|
+
const { createHash } = await importNodeCrypto();
|
|
29
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Compute an HMAC-SHA256 digest.
|
|
33
|
+
*
|
|
34
|
+
* @param key - UTF-8 string or raw bytes for the HMAC key.
|
|
35
|
+
* @param data - UTF-8 string or raw bytes to sign.
|
|
36
|
+
*
|
|
37
|
+
* @returns The raw HMAC-SHA256 digest bytes.
|
|
38
|
+
*/
|
|
39
|
+
async function hmacSha256(key, data) {
|
|
40
|
+
const keyBytes = bytesFor(key);
|
|
41
|
+
const dataBytes = bytesFor(data);
|
|
42
|
+
if (globalThis.crypto?.subtle) {
|
|
43
|
+
const cryptoKey = await globalThis.crypto.subtle.importKey("raw", require_bytes.arrayBufferFor(keyBytes), {
|
|
44
|
+
name: "HMAC",
|
|
45
|
+
hash: "SHA-256"
|
|
46
|
+
}, false, ["sign"]);
|
|
47
|
+
const signature = await globalThis.crypto.subtle.sign("HMAC", cryptoKey, require_bytes.arrayBufferFor(dataBytes));
|
|
48
|
+
return new Uint8Array(signature);
|
|
49
|
+
}
|
|
50
|
+
const { createHmac } = await importNodeCrypto();
|
|
51
|
+
return new Uint8Array(createHmac("sha256", keyBytes).update(dataBytes).digest());
|
|
52
|
+
}
|
|
53
|
+
function bytesFor(data) {
|
|
54
|
+
return typeof data === "string" ? require_text_codec.utf8Encoder.encode(data) : data;
|
|
55
|
+
}
|
|
56
|
+
async function importNodeCrypto() {
|
|
57
|
+
try {
|
|
58
|
+
return await import("node:crypto");
|
|
59
|
+
} catch (err) {
|
|
60
|
+
throw new Error(CRYPTO_UNAVAILABLE_MESSAGE, { cause: err });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//#endregion
|
|
64
|
+
exports.hexEncode = hexEncode;
|
|
65
|
+
exports.hmacSha256 = hmacSha256;
|
|
66
|
+
exports.sha256Hex = sha256Hex;
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=crypto.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.cjs","names":[],"sources":["../../src/util/crypto.ts"],"sourcesContent":["import { arrayBufferFor } from './bytes.ts'\nimport { utf8Encoder } from './text-codec.ts'\n\nconst CRYPTO_UNAVAILABLE_MESSAGE =\n 'SHA-256 and HMAC-SHA256 require globalThis.crypto.subtle or Node.js node:crypto.'\n\ntype NodeHash = {\n update(data: Uint8Array): NodeHash\n digest(encoding: 'hex'): string\n}\n\ntype NodeHmac = {\n update(data: Uint8Array): NodeHmac\n digest(): Uint8Array\n}\n\ntype NodeCrypto = {\n createHash(algorithm: string): NodeHash\n createHmac(algorithm: string, key: Uint8Array): NodeHmac\n}\n\n/**\n * Convert bytes to a lowercase hex string.\n *\n * @param bytes - The raw bytes to encode as hexadecimal characters.\n *\n * @returns The lowercase hex-encoded string representation of the input bytes.\n */\nexport function hexEncode(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('')\n}\n\n/**\n * Compute a SHA-256 digest and return it as lowercase hex.\n *\n * @param data - UTF-8 string or raw bytes to digest.\n *\n * @returns The lowercase hex-encoded SHA-256 digest.\n */\nexport async function sha256Hex(data: string | Uint8Array): Promise<string> {\n const bytes = bytesFor(data)\n if (globalThis.crypto?.subtle) {\n const digest = await globalThis.crypto.subtle.digest('SHA-256', arrayBufferFor(bytes))\n return hexEncode(new Uint8Array(digest))\n }\n\n const { createHash } = await importNodeCrypto()\n return createHash('sha256').update(bytes).digest('hex')\n}\n\n/**\n * Compute an HMAC-SHA256 digest.\n *\n * @param key - UTF-8 string or raw bytes for the HMAC key.\n * @param data - UTF-8 string or raw bytes to sign.\n *\n * @returns The raw HMAC-SHA256 digest bytes.\n */\nexport async function hmacSha256(\n key: string | Uint8Array,\n data: string | Uint8Array,\n): Promise<Uint8Array> {\n const keyBytes = bytesFor(key)\n const dataBytes = bytesFor(data)\n\n if (globalThis.crypto?.subtle) {\n const cryptoKey = await globalThis.crypto.subtle.importKey(\n 'raw',\n arrayBufferFor(keyBytes),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n )\n const signature = await globalThis.crypto.subtle.sign(\n 'HMAC',\n cryptoKey,\n arrayBufferFor(dataBytes),\n )\n return new Uint8Array(signature)\n }\n\n const { createHmac } = await importNodeCrypto()\n return new Uint8Array(createHmac('sha256', keyBytes).update(dataBytes).digest())\n}\n\nfunction bytesFor(data: string | Uint8Array): Uint8Array {\n return typeof data === 'string' ? utf8Encoder.encode(data) : data\n}\n\nasync function importNodeCrypto(): Promise<NodeCrypto> {\n try {\n // biome-ignore lint/suspicious/noTsIgnore: isomorphic import -- @ts-ignore is silent when node:crypto resolves and suppresses the error when it does not\n // @ts-ignore -- node:crypto may not exist in browser/edge runtimes\n return (await import('node:crypto')) as NodeCrypto\n } catch (err) {\n throw new Error(CRYPTO_UNAVAILABLE_MESSAGE, { cause: err })\n }\n}\n"],"mappings":";;;AAGA,IAAM,6BACJ;;;;;;;;AAwBF,SAAgB,UAAU,OAA2B;CACnD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;AAC7E;;;;;;;;AASA,eAAsB,UAAU,MAA4C;CAC1E,MAAM,QAAQ,SAAS,IAAI;CAC3B,IAAI,WAAW,QAAQ,QAAQ;EAC7B,MAAM,SAAS,MAAM,WAAW,OAAO,OAAO,OAAO,WAAW,cAAA,eAAe,KAAK,CAAC;EACrF,OAAO,UAAU,IAAI,WAAW,MAAM,CAAC;CACzC;CAEA,MAAM,EAAE,eAAe,MAAM,iBAAiB;CAC9C,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,KAAK;AACxD;;;;;;;;;AAUA,eAAsB,WACpB,KACA,MACqB;CACrB,MAAM,WAAW,SAAS,GAAG;CAC7B,MAAM,YAAY,SAAS,IAAI;CAE/B,IAAI,WAAW,QAAQ,QAAQ;EAC7B,MAAM,YAAY,MAAM,WAAW,OAAO,OAAO,UAC/C,OACA,cAAA,eAAe,QAAQ,GACvB;GAAE,MAAM;GAAQ,MAAM;EAAU,GAChC,OACA,CAAC,MAAM,CACT;EACA,MAAM,YAAY,MAAM,WAAW,OAAO,OAAO,KAC/C,QACA,WACA,cAAA,eAAe,SAAS,CAC1B;EACA,OAAO,IAAI,WAAW,SAAS;CACjC;CAEA,MAAM,EAAE,eAAe,MAAM,iBAAiB;CAC9C,OAAO,IAAI,WAAW,WAAW,UAAU,QAAQ,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC;AACjF;AAEA,SAAS,SAAS,MAAuC;CACvD,OAAO,OAAO,SAAS,WAAW,mBAAA,YAAY,OAAO,IAAI,IAAI;AAC/D;AAEA,eAAe,mBAAwC;CACrD,IAAI;EAGF,OAAQ,MAAM,OAAO;CACvB,SAAS,KAAK;EACZ,MAAM,IAAI,MAAM,4BAA4B,EAAE,OAAO,IAAI,CAAC;CAC5D;AACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert bytes to a lowercase hex string.
|
|
3
|
+
*
|
|
4
|
+
* @param bytes - The raw bytes to encode as hexadecimal characters.
|
|
5
|
+
*
|
|
6
|
+
* @returns The lowercase hex-encoded string representation of the input bytes.
|
|
7
|
+
*/
|
|
8
|
+
export declare function hexEncode(bytes: Uint8Array): string;
|
|
9
|
+
/**
|
|
10
|
+
* Compute a SHA-256 digest and return it as lowercase hex.
|
|
11
|
+
*
|
|
12
|
+
* @param data - UTF-8 string or raw bytes to digest.
|
|
13
|
+
*
|
|
14
|
+
* @returns The lowercase hex-encoded SHA-256 digest.
|
|
15
|
+
*/
|
|
16
|
+
export declare function sha256Hex(data: string | Uint8Array): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Compute an HMAC-SHA256 digest.
|
|
19
|
+
*
|
|
20
|
+
* @param key - UTF-8 string or raw bytes for the HMAC key.
|
|
21
|
+
* @param data - UTF-8 string or raw bytes to sign.
|
|
22
|
+
*
|
|
23
|
+
* @returns The raw HMAC-SHA256 digest bytes.
|
|
24
|
+
*/
|
|
25
|
+
export declare function hmacSha256(key: string | Uint8Array, data: string | Uint8Array): Promise<Uint8Array>;
|
|
26
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/util/crypto.js"],"names":[],"mappings":"AAqBA;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEnD;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1E;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,GAAG,UAAU,EACxB,IAAI,EAAE,MAAM,GAAG,UAAU,GACxB,OAAO,CAAC,UAAU,CAAC,CAsBrB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert bytes to a lowercase hex string.
|
|
3
|
+
*
|
|
4
|
+
* @param bytes - The raw bytes to encode as hexadecimal characters.
|
|
5
|
+
*
|
|
6
|
+
* @returns The lowercase hex-encoded string representation of the input bytes.
|
|
7
|
+
*/
|
|
8
|
+
export declare function hexEncode(bytes: Uint8Array): string;
|
|
9
|
+
/**
|
|
10
|
+
* Compute a SHA-256 digest and return it as lowercase hex.
|
|
11
|
+
*
|
|
12
|
+
* @param data - UTF-8 string or raw bytes to digest.
|
|
13
|
+
*
|
|
14
|
+
* @returns The lowercase hex-encoded SHA-256 digest.
|
|
15
|
+
*/
|
|
16
|
+
export declare function sha256Hex(data: string | Uint8Array): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Compute an HMAC-SHA256 digest.
|
|
19
|
+
*
|
|
20
|
+
* @param key - UTF-8 string or raw bytes for the HMAC key.
|
|
21
|
+
* @param data - UTF-8 string or raw bytes to sign.
|
|
22
|
+
*
|
|
23
|
+
* @returns The raw HMAC-SHA256 digest bytes.
|
|
24
|
+
*/
|
|
25
|
+
export declare function hmacSha256(key: string | Uint8Array, data: string | Uint8Array): Promise<Uint8Array>;
|
|
26
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/util/crypto.js"],"names":[],"mappings":"AAqBA;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEnD;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1E;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,GAAG,UAAU,EACxB,IAAI,EAAE,MAAM,GAAG,UAAU,GACxB,OAAO,CAAC,UAAU,CAAC,CAsBrB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { utf8Encoder } from "./text-codec.js";
|
|
2
|
+
import { arrayBufferFor } from "./bytes.js";
|
|
3
|
+
//#region src/util/crypto.ts
|
|
4
|
+
var CRYPTO_UNAVAILABLE_MESSAGE = "SHA-256 and HMAC-SHA256 require globalThis.crypto.subtle or Node.js node:crypto.";
|
|
5
|
+
/**
|
|
6
|
+
* Convert bytes to a lowercase hex string.
|
|
7
|
+
*
|
|
8
|
+
* @param bytes - The raw bytes to encode as hexadecimal characters.
|
|
9
|
+
*
|
|
10
|
+
* @returns The lowercase hex-encoded string representation of the input bytes.
|
|
11
|
+
*/
|
|
12
|
+
function hexEncode(bytes) {
|
|
13
|
+
return [...bytes].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Compute a SHA-256 digest and return it as lowercase hex.
|
|
17
|
+
*
|
|
18
|
+
* @param data - UTF-8 string or raw bytes to digest.
|
|
19
|
+
*
|
|
20
|
+
* @returns The lowercase hex-encoded SHA-256 digest.
|
|
21
|
+
*/
|
|
22
|
+
async function sha256Hex(data) {
|
|
23
|
+
const bytes = bytesFor(data);
|
|
24
|
+
if (globalThis.crypto?.subtle) {
|
|
25
|
+
const digest = await globalThis.crypto.subtle.digest("SHA-256", arrayBufferFor(bytes));
|
|
26
|
+
return hexEncode(new Uint8Array(digest));
|
|
27
|
+
}
|
|
28
|
+
const { createHash } = await importNodeCrypto();
|
|
29
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Compute an HMAC-SHA256 digest.
|
|
33
|
+
*
|
|
34
|
+
* @param key - UTF-8 string or raw bytes for the HMAC key.
|
|
35
|
+
* @param data - UTF-8 string or raw bytes to sign.
|
|
36
|
+
*
|
|
37
|
+
* @returns The raw HMAC-SHA256 digest bytes.
|
|
38
|
+
*/
|
|
39
|
+
async function hmacSha256(key, data) {
|
|
40
|
+
const keyBytes = bytesFor(key);
|
|
41
|
+
const dataBytes = bytesFor(data);
|
|
42
|
+
if (globalThis.crypto?.subtle) {
|
|
43
|
+
const cryptoKey = await globalThis.crypto.subtle.importKey("raw", arrayBufferFor(keyBytes), {
|
|
44
|
+
name: "HMAC",
|
|
45
|
+
hash: "SHA-256"
|
|
46
|
+
}, false, ["sign"]);
|
|
47
|
+
const signature = await globalThis.crypto.subtle.sign("HMAC", cryptoKey, arrayBufferFor(dataBytes));
|
|
48
|
+
return new Uint8Array(signature);
|
|
49
|
+
}
|
|
50
|
+
const { createHmac } = await importNodeCrypto();
|
|
51
|
+
return new Uint8Array(createHmac("sha256", keyBytes).update(dataBytes).digest());
|
|
52
|
+
}
|
|
53
|
+
function bytesFor(data) {
|
|
54
|
+
return typeof data === "string" ? utf8Encoder.encode(data) : data;
|
|
55
|
+
}
|
|
56
|
+
async function importNodeCrypto() {
|
|
57
|
+
try {
|
|
58
|
+
return await import("node:crypto");
|
|
59
|
+
} catch (err) {
|
|
60
|
+
throw new Error(CRYPTO_UNAVAILABLE_MESSAGE, { cause: err });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//#endregion
|
|
64
|
+
export { hexEncode, hmacSha256, sha256Hex };
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","names":[],"sources":["../../src/util/crypto.ts"],"sourcesContent":["import { arrayBufferFor } from './bytes.ts'\nimport { utf8Encoder } from './text-codec.ts'\n\nconst CRYPTO_UNAVAILABLE_MESSAGE =\n 'SHA-256 and HMAC-SHA256 require globalThis.crypto.subtle or Node.js node:crypto.'\n\ntype NodeHash = {\n update(data: Uint8Array): NodeHash\n digest(encoding: 'hex'): string\n}\n\ntype NodeHmac = {\n update(data: Uint8Array): NodeHmac\n digest(): Uint8Array\n}\n\ntype NodeCrypto = {\n createHash(algorithm: string): NodeHash\n createHmac(algorithm: string, key: Uint8Array): NodeHmac\n}\n\n/**\n * Convert bytes to a lowercase hex string.\n *\n * @param bytes - The raw bytes to encode as hexadecimal characters.\n *\n * @returns The lowercase hex-encoded string representation of the input bytes.\n */\nexport function hexEncode(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('')\n}\n\n/**\n * Compute a SHA-256 digest and return it as lowercase hex.\n *\n * @param data - UTF-8 string or raw bytes to digest.\n *\n * @returns The lowercase hex-encoded SHA-256 digest.\n */\nexport async function sha256Hex(data: string | Uint8Array): Promise<string> {\n const bytes = bytesFor(data)\n if (globalThis.crypto?.subtle) {\n const digest = await globalThis.crypto.subtle.digest('SHA-256', arrayBufferFor(bytes))\n return hexEncode(new Uint8Array(digest))\n }\n\n const { createHash } = await importNodeCrypto()\n return createHash('sha256').update(bytes).digest('hex')\n}\n\n/**\n * Compute an HMAC-SHA256 digest.\n *\n * @param key - UTF-8 string or raw bytes for the HMAC key.\n * @param data - UTF-8 string or raw bytes to sign.\n *\n * @returns The raw HMAC-SHA256 digest bytes.\n */\nexport async function hmacSha256(\n key: string | Uint8Array,\n data: string | Uint8Array,\n): Promise<Uint8Array> {\n const keyBytes = bytesFor(key)\n const dataBytes = bytesFor(data)\n\n if (globalThis.crypto?.subtle) {\n const cryptoKey = await globalThis.crypto.subtle.importKey(\n 'raw',\n arrayBufferFor(keyBytes),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n )\n const signature = await globalThis.crypto.subtle.sign(\n 'HMAC',\n cryptoKey,\n arrayBufferFor(dataBytes),\n )\n return new Uint8Array(signature)\n }\n\n const { createHmac } = await importNodeCrypto()\n return new Uint8Array(createHmac('sha256', keyBytes).update(dataBytes).digest())\n}\n\nfunction bytesFor(data: string | Uint8Array): Uint8Array {\n return typeof data === 'string' ? utf8Encoder.encode(data) : data\n}\n\nasync function importNodeCrypto(): Promise<NodeCrypto> {\n try {\n // biome-ignore lint/suspicious/noTsIgnore: isomorphic import -- @ts-ignore is silent when node:crypto resolves and suppresses the error when it does not\n // @ts-ignore -- node:crypto may not exist in browser/edge runtimes\n return (await import('node:crypto')) as NodeCrypto\n } catch (err) {\n throw new Error(CRYPTO_UNAVAILABLE_MESSAGE, { cause: err })\n }\n}\n"],"mappings":";;;AAGA,IAAM,6BACJ;;;;;;;;AAwBF,SAAgB,UAAU,OAA2B;CACnD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;AAC7E;;;;;;;;AASA,eAAsB,UAAU,MAA4C;CAC1E,MAAM,QAAQ,SAAS,IAAI;CAC3B,IAAI,WAAW,QAAQ,QAAQ;EAC7B,MAAM,SAAS,MAAM,WAAW,OAAO,OAAO,OAAO,WAAW,eAAe,KAAK,CAAC;EACrF,OAAO,UAAU,IAAI,WAAW,MAAM,CAAC;CACzC;CAEA,MAAM,EAAE,eAAe,MAAM,iBAAiB;CAC9C,OAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,KAAK;AACxD;;;;;;;;;AAUA,eAAsB,WACpB,KACA,MACqB;CACrB,MAAM,WAAW,SAAS,GAAG;CAC7B,MAAM,YAAY,SAAS,IAAI;CAE/B,IAAI,WAAW,QAAQ,QAAQ;EAC7B,MAAM,YAAY,MAAM,WAAW,OAAO,OAAO,UAC/C,OACA,eAAe,QAAQ,GACvB;GAAE,MAAM;GAAQ,MAAM;EAAU,GAChC,OACA,CAAC,MAAM,CACT;EACA,MAAM,YAAY,MAAM,WAAW,OAAO,OAAO,KAC/C,QACA,WACA,eAAe,SAAS,CAC1B;EACA,OAAO,IAAI,WAAW,SAAS;CACjC;CAEA,MAAM,EAAE,eAAe,MAAM,iBAAiB;CAC9C,OAAO,IAAI,WAAW,WAAW,UAAU,QAAQ,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC;AACjF;AAEA,SAAS,SAAS,MAAuC;CACvD,OAAO,OAAO,SAAS,WAAW,YAAY,OAAO,IAAI,IAAI;AAC/D;AAEA,eAAe,mBAAwC;CACrD,IAAI;EAGF,OAAQ,MAAM,OAAO;CACvB,SAAS,KAAK;EACZ,MAAM,IAAI,MAAM,4BAA4B,EAAE,OAAO,IAAI,CAAC;CAC5D;AACF"}
|
package/dist/util/defaults.cjs
CHANGED
|
@@ -1,11 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
//#region src/util/defaults.ts
|
|
2
|
+
/**
|
|
3
|
+
* Default `maxFileCount` for list-style endpoints
|
|
4
|
+
* (`b2_list_file_names`, `b2_list_file_versions`, `b2_list_parts`). B2
|
|
5
|
+
* caps `maxFileCount` at `10000` for these endpoints; the SDK requests
|
|
6
|
+
* `1000` per page so a single network blip doesn't lose 10× the work and
|
|
7
|
+
* so callers see results sooner.
|
|
8
|
+
*
|
|
9
|
+
* `b2_list_unfinished_large_files` is capped at `100` server-side and is
|
|
10
|
+
* not affected by this constant.
|
|
11
|
+
*/
|
|
12
|
+
var DEFAULT_PAGE_SIZE = 1e3;
|
|
13
|
+
/**
|
|
14
|
+
* Default MIME type for uploads when the caller omits `contentType`.
|
|
15
|
+
* B2 documents `b2/x-auto` as the magic value that asks the service to
|
|
16
|
+
* sniff the file's content and pick a sensible `Content-Type` itself.
|
|
17
|
+
* Centralising the literal here keeps the upload, copy, and create-write
|
|
18
|
+
* paths in sync.
|
|
19
|
+
*
|
|
20
|
+
* @see https://www.backblaze.com/apidocs/b2-upload-file
|
|
21
|
+
*/
|
|
22
|
+
var DEFAULT_CONTENT_TYPE = "b2/x-auto";
|
|
23
|
+
//#endregion
|
|
8
24
|
exports.DEFAULT_CONTENT_TYPE = DEFAULT_CONTENT_TYPE;
|
|
9
25
|
exports.DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;
|
|
10
|
-
|
|
11
|
-
//# sourceMappingURL=defaults.cjs.map
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=defaults.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.cjs","sources":["../../src/util/defaults.ts"],"sourcesContent":["/**\n * Shared SDK-wide default values.\n *\n * Centralising defaults here makes the trade-offs visible and prevents the\n * drift that creeps in when each module hard-codes its own magic number.\n *\n * @packageDocumentation\n */\n\n/**\n * Default parallel-task count for **data-transfer** operations: uploads\n * (multipart parts), downloads (byte ranges), server-side copies (parts),\n * and sync (file-by-file). Each in-flight task occupies one transport\n * slot and at least one part-worth of memory, so we keep this\n * conservative.\n *\n * Empirically `4` saturates a typical home / office uplink without\n * starving the event loop or risking B2's per-account upload-URL\n * rate-limit. Callers that have measured their environment can override\n * via the `concurrency` option on every transfer method.\n */\nexport const DEFAULT_TRANSFER_CONCURRENCY = 4\n\n/**\n * Default parallel-task count for **bulk metadata** operations:\n * `Bucket.deleteMany` (per-version delete calls), and the action loop in\n * `synchronize` when it dispatches mixed actions in batches.\n *\n * Higher than the transfer default because each task is a tiny API\n * round-trip (no payload), so concurrency is bound by API latency rather\n * than bandwidth or local memory. `10` keeps a delete-of-thousands\n * snappy without overwhelming a single account's request budget.\n */\nexport const DEFAULT_BULK_CONCURRENCY = 10\n\n/**\n * Default `maxFileCount` for list-style endpoints\n * (`b2_list_file_names`, `b2_list_file_versions`, `b2_list_parts`). B2\n * caps `maxFileCount` at `10000` for these endpoints; the SDK requests\n * `1000` per page so a single network blip doesn't lose 10× the work and\n * so callers see results sooner.\n *\n * `b2_list_unfinished_large_files` is capped at `100` server-side and is\n * not affected by this constant.\n */\nexport const DEFAULT_PAGE_SIZE = 1000\n\n/**\n * Default MIME type for uploads when the caller omits `contentType`.\n * B2 documents `b2/x-auto` as the magic value that asks the service to\n * sniff the file's content and pick a sensible `Content-Type` itself.\n * Centralising the literal here keeps the upload, copy, and create-write\n * paths in sync.\n *\n * @see https://www.backblaze.com/apidocs/b2-upload-file\n */\nexport const DEFAULT_CONTENT_TYPE = 'b2/x-auto'\n"],"
|
|
1
|
+
{"version":3,"file":"defaults.cjs","names":[],"sources":["../../src/util/defaults.ts"],"sourcesContent":["/**\n * Shared SDK-wide default values.\n *\n * Centralising defaults here makes the trade-offs visible and prevents the\n * drift that creeps in when each module hard-codes its own magic number.\n *\n * @packageDocumentation\n */\n\n/**\n * Default parallel-task count for **data-transfer** operations: uploads\n * (multipart parts), downloads (byte ranges), server-side copies (parts),\n * and sync (file-by-file). Each in-flight task occupies one transport\n * slot and at least one part-worth of memory, so we keep this\n * conservative.\n *\n * Empirically `4` saturates a typical home / office uplink without\n * starving the event loop or risking B2's per-account upload-URL\n * rate-limit. Callers that have measured their environment can override\n * via the `concurrency` option on every transfer method.\n */\nexport const DEFAULT_TRANSFER_CONCURRENCY = 4\n\n/**\n * Default parallel-task count for **bulk metadata** operations:\n * `Bucket.deleteMany` (per-version delete calls), and the action loop in\n * `synchronize` when it dispatches mixed actions in batches.\n *\n * Higher than the transfer default because each task is a tiny API\n * round-trip (no payload), so concurrency is bound by API latency rather\n * than bandwidth or local memory. `10` keeps a delete-of-thousands\n * snappy without overwhelming a single account's request budget.\n */\nexport const DEFAULT_BULK_CONCURRENCY = 10\n\n/**\n * Default `maxFileCount` for list-style endpoints\n * (`b2_list_file_names`, `b2_list_file_versions`, `b2_list_parts`). B2\n * caps `maxFileCount` at `10000` for these endpoints; the SDK requests\n * `1000` per page so a single network blip doesn't lose 10× the work and\n * so callers see results sooner.\n *\n * `b2_list_unfinished_large_files` is capped at `100` server-side and is\n * not affected by this constant.\n */\nexport const DEFAULT_PAGE_SIZE = 1000\n\n/**\n * Default MIME type for uploads when the caller omits `contentType`.\n * B2 documents `b2/x-auto` as the magic value that asks the service to\n * sniff the file's content and pick a sensible `Content-Type` itself.\n * Centralising the literal here keeps the upload, copy, and create-write\n * paths in sync.\n *\n * @see https://www.backblaze.com/apidocs/b2-upload-file\n */\nexport const DEFAULT_CONTENT_TYPE = 'b2/x-auto'\n"],"mappings":";;;;;;;;;;;AA6CA,IAAa,oBAAoB;;;;;;;;;;AAWjC,IAAa,uBAAuB"}
|
package/dist/util/defaults.js
CHANGED
|
@@ -1,11 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
//#region src/util/defaults.ts
|
|
2
|
+
/**
|
|
3
|
+
* Default `maxFileCount` for list-style endpoints
|
|
4
|
+
* (`b2_list_file_names`, `b2_list_file_versions`, `b2_list_parts`). B2
|
|
5
|
+
* caps `maxFileCount` at `10000` for these endpoints; the SDK requests
|
|
6
|
+
* `1000` per page so a single network blip doesn't lose 10× the work and
|
|
7
|
+
* so callers see results sooner.
|
|
8
|
+
*
|
|
9
|
+
* `b2_list_unfinished_large_files` is capped at `100` server-side and is
|
|
10
|
+
* not affected by this constant.
|
|
11
|
+
*/
|
|
12
|
+
var DEFAULT_PAGE_SIZE = 1e3;
|
|
13
|
+
/**
|
|
14
|
+
* Default MIME type for uploads when the caller omits `contentType`.
|
|
15
|
+
* B2 documents `b2/x-auto` as the magic value that asks the service to
|
|
16
|
+
* sniff the file's content and pick a sensible `Content-Type` itself.
|
|
17
|
+
* Centralising the literal here keeps the upload, copy, and create-write
|
|
18
|
+
* paths in sync.
|
|
19
|
+
*
|
|
20
|
+
* @see https://www.backblaze.com/apidocs/b2-upload-file
|
|
21
|
+
*/
|
|
22
|
+
var DEFAULT_CONTENT_TYPE = "b2/x-auto";
|
|
23
|
+
//#endregion
|
|
24
|
+
export { DEFAULT_CONTENT_TYPE, DEFAULT_PAGE_SIZE };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sources":["../../src/util/defaults.ts"],"sourcesContent":["/**\n * Shared SDK-wide default values.\n *\n * Centralising defaults here makes the trade-offs visible and prevents the\n * drift that creeps in when each module hard-codes its own magic number.\n *\n * @packageDocumentation\n */\n\n/**\n * Default parallel-task count for **data-transfer** operations: uploads\n * (multipart parts), downloads (byte ranges), server-side copies (parts),\n * and sync (file-by-file). Each in-flight task occupies one transport\n * slot and at least one part-worth of memory, so we keep this\n * conservative.\n *\n * Empirically `4` saturates a typical home / office uplink without\n * starving the event loop or risking B2's per-account upload-URL\n * rate-limit. Callers that have measured their environment can override\n * via the `concurrency` option on every transfer method.\n */\nexport const DEFAULT_TRANSFER_CONCURRENCY = 4\n\n/**\n * Default parallel-task count for **bulk metadata** operations:\n * `Bucket.deleteMany` (per-version delete calls), and the action loop in\n * `synchronize` when it dispatches mixed actions in batches.\n *\n * Higher than the transfer default because each task is a tiny API\n * round-trip (no payload), so concurrency is bound by API latency rather\n * than bandwidth or local memory. `10` keeps a delete-of-thousands\n * snappy without overwhelming a single account's request budget.\n */\nexport const DEFAULT_BULK_CONCURRENCY = 10\n\n/**\n * Default `maxFileCount` for list-style endpoints\n * (`b2_list_file_names`, `b2_list_file_versions`, `b2_list_parts`). B2\n * caps `maxFileCount` at `10000` for these endpoints; the SDK requests\n * `1000` per page so a single network blip doesn't lose 10× the work and\n * so callers see results sooner.\n *\n * `b2_list_unfinished_large_files` is capped at `100` server-side and is\n * not affected by this constant.\n */\nexport const DEFAULT_PAGE_SIZE = 1000\n\n/**\n * Default MIME type for uploads when the caller omits `contentType`.\n * B2 documents `b2/x-auto` as the magic value that asks the service to\n * sniff the file's content and pick a sensible `Content-Type` itself.\n * Centralising the literal here keeps the upload, copy, and create-write\n * paths in sync.\n *\n * @see https://www.backblaze.com/apidocs/b2-upload-file\n */\nexport const DEFAULT_CONTENT_TYPE = 'b2/x-auto'\n"],"
|
|
1
|
+
{"version":3,"file":"defaults.js","names":[],"sources":["../../src/util/defaults.ts"],"sourcesContent":["/**\n * Shared SDK-wide default values.\n *\n * Centralising defaults here makes the trade-offs visible and prevents the\n * drift that creeps in when each module hard-codes its own magic number.\n *\n * @packageDocumentation\n */\n\n/**\n * Default parallel-task count for **data-transfer** operations: uploads\n * (multipart parts), downloads (byte ranges), server-side copies (parts),\n * and sync (file-by-file). Each in-flight task occupies one transport\n * slot and at least one part-worth of memory, so we keep this\n * conservative.\n *\n * Empirically `4` saturates a typical home / office uplink without\n * starving the event loop or risking B2's per-account upload-URL\n * rate-limit. Callers that have measured their environment can override\n * via the `concurrency` option on every transfer method.\n */\nexport const DEFAULT_TRANSFER_CONCURRENCY = 4\n\n/**\n * Default parallel-task count for **bulk metadata** operations:\n * `Bucket.deleteMany` (per-version delete calls), and the action loop in\n * `synchronize` when it dispatches mixed actions in batches.\n *\n * Higher than the transfer default because each task is a tiny API\n * round-trip (no payload), so concurrency is bound by API latency rather\n * than bandwidth or local memory. `10` keeps a delete-of-thousands\n * snappy without overwhelming a single account's request budget.\n */\nexport const DEFAULT_BULK_CONCURRENCY = 10\n\n/**\n * Default `maxFileCount` for list-style endpoints\n * (`b2_list_file_names`, `b2_list_file_versions`, `b2_list_parts`). B2\n * caps `maxFileCount` at `10000` for these endpoints; the SDK requests\n * `1000` per page so a single network blip doesn't lose 10× the work and\n * so callers see results sooner.\n *\n * `b2_list_unfinished_large_files` is capped at `100` server-side and is\n * not affected by this constant.\n */\nexport const DEFAULT_PAGE_SIZE = 1000\n\n/**\n * Default MIME type for uploads when the caller omits `contentType`.\n * B2 documents `b2/x-auto` as the magic value that asks the service to\n * sniff the file's content and pick a sensible `Content-Type` itself.\n * Centralising the literal here keeps the upload, copy, and create-write\n * paths in sync.\n *\n * @see https://www.backblaze.com/apidocs/b2-upload-file\n */\nexport const DEFAULT_CONTENT_TYPE = 'b2/x-auto'\n"],"mappings":";;;;;;;;;;;AA6CA,IAAa,oBAAoB;;;;;;;;;;AAWjC,IAAa,uBAAuB"}
|