@backblaze-labs/b2-sdk 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +86 -1
- package/README.md +38 -7
- package/dist/_virtual/_b2-sdk-version-json.cjs +1 -1
- package/dist/_virtual/_b2-sdk-version-json.js +1 -1
- package/dist/auth/file.cjs.map +1 -1
- package/dist/auth/reauth-coalescer.cjs +65 -0
- package/dist/auth/reauth-coalescer.cjs.map +1 -0
- package/dist/auth/reauth-coalescer.d.cts +34 -0
- package/dist/auth/reauth-coalescer.d.cts.map +1 -0
- package/dist/auth/reauth-coalescer.d.ts +34 -0
- package/dist/auth/reauth-coalescer.d.ts.map +1 -0
- package/dist/auth/reauth-coalescer.js +65 -0
- package/dist/auth/reauth-coalescer.js.map +1 -0
- package/dist/backup/client.cjs +206 -0
- package/dist/backup/client.cjs.map +1 -0
- package/dist/backup/client.d.cts +238 -0
- package/dist/backup/client.d.cts.map +1 -0
- package/dist/backup/client.d.ts +238 -0
- package/dist/backup/client.d.ts.map +1 -0
- package/dist/backup/client.js +206 -0
- package/dist/backup/client.js.map +1 -0
- package/dist/backup/index.cjs +15 -0
- package/dist/backup/index.d.cts +22 -0
- package/dist/backup/index.d.cts.map +1 -0
- package/dist/backup/index.d.ts +22 -0
- package/dist/backup/index.d.ts.map +1 -0
- package/dist/backup/index.js +7 -0
- package/dist/backup/raw.cjs +168 -0
- package/dist/backup/raw.cjs.map +1 -0
- package/dist/backup/raw.d.cts +122 -0
- package/dist/backup/raw.d.cts.map +1 -0
- package/dist/backup/raw.d.ts +122 -0
- package/dist/backup/raw.d.ts.map +1 -0
- package/dist/backup/raw.js +168 -0
- package/dist/backup/raw.js.map +1 -0
- package/dist/bucket-validation.cjs +111 -0
- package/dist/bucket-validation.cjs.map +1 -0
- package/dist/bucket-validation.d.cts +27 -0
- package/dist/bucket-validation.d.cts.map +1 -0
- package/dist/bucket-validation.d.ts +27 -0
- package/dist/bucket-validation.d.ts.map +1 -0
- package/dist/bucket-validation.js +109 -0
- package/dist/bucket-validation.js.map +1 -0
- package/dist/bucket.cjs +125 -74
- package/dist/bucket.cjs.map +1 -1
- package/dist/bucket.d.cts +156 -61
- package/dist/bucket.d.cts.map +1 -1
- package/dist/bucket.d.ts +156 -61
- package/dist/bucket.d.ts.map +1 -1
- package/dist/bucket.js +125 -74
- package/dist/bucket.js.map +1 -1
- package/dist/client.cjs +29 -8
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +30 -9
- package/dist/client.d.cts.map +1 -1
- package/dist/client.d.ts +30 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +29 -8
- package/dist/client.js.map +1 -1
- package/dist/copy/large.cjs +5 -3
- package/dist/copy/large.cjs.map +1 -1
- package/dist/copy/large.d.cts.map +1 -1
- package/dist/copy/large.d.ts.map +1 -1
- package/dist/copy/large.js +5 -3
- package/dist/copy/large.js.map +1 -1
- package/dist/download/checksum.cjs +6 -2
- package/dist/download/checksum.cjs.map +1 -1
- package/dist/download/checksum.js +6 -2
- package/dist/download/checksum.js.map +1 -1
- package/dist/download/parallel.cjs +52 -15
- package/dist/download/parallel.cjs.map +1 -1
- package/dist/download/parallel.d.cts +8 -1
- package/dist/download/parallel.d.cts.map +1 -1
- package/dist/download/parallel.d.ts +8 -1
- package/dist/download/parallel.d.ts.map +1 -1
- package/dist/download/parallel.js +52 -15
- package/dist/download/parallel.js.map +1 -1
- package/dist/download/single.cjs +179 -19
- package/dist/download/single.cjs.map +1 -1
- package/dist/download/single.d.cts +10 -4
- package/dist/download/single.d.cts.map +1 -1
- package/dist/download/single.d.ts +10 -4
- package/dist/download/single.d.ts.map +1 -1
- package/dist/download/single.js +179 -19
- package/dist/download/single.js.map +1 -1
- package/dist/errors/index.cjs +196 -3
- package/dist/errors/index.cjs.map +1 -1
- package/dist/errors/index.d.cts +134 -0
- package/dist/errors/index.d.cts.map +1 -1
- package/dist/errors/index.d.ts +134 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +183 -4
- package/dist/errors/index.js.map +1 -1
- package/dist/http/non-idempotent-mutations.cjs +38 -0
- package/dist/http/non-idempotent-mutations.cjs.map +1 -0
- package/dist/http/non-idempotent-mutations.d.cts +25 -0
- package/dist/http/non-idempotent-mutations.d.cts.map +1 -0
- package/dist/http/non-idempotent-mutations.d.ts +25 -0
- package/dist/http/non-idempotent-mutations.d.ts.map +1 -0
- package/dist/http/non-idempotent-mutations.js +35 -0
- package/dist/http/non-idempotent-mutations.js.map +1 -0
- package/dist/http/retry.cjs +1 -1
- package/dist/http/retry.cjs.map +1 -1
- package/dist/http/retry.js +1 -1
- package/dist/http/retry.js.map +1 -1
- package/dist/http/transport.cjs +62 -23
- package/dist/http/transport.cjs.map +1 -1
- package/dist/http/transport.d.cts +30 -3
- package/dist/http/transport.d.cts.map +1 -1
- package/dist/http/transport.d.ts +30 -3
- package/dist/http/transport.d.ts.map +1 -1
- package/dist/http/transport.js +60 -22
- package/dist/http/transport.js.map +1 -1
- package/dist/http/user-agent.cjs +12 -1
- package/dist/http/user-agent.cjs.map +1 -1
- package/dist/http/user-agent.d.cts +8 -0
- package/dist/http/user-agent.d.cts.map +1 -1
- package/dist/http/user-agent.d.ts +8 -0
- package/dist/http/user-agent.d.ts.map +1 -1
- package/dist/http/user-agent.js +13 -3
- package/dist/http/user-agent.js.map +1 -1
- package/dist/index.cjs +50 -2
- package/dist/index.d.cts +15 -12
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +15 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -10
- package/dist/notifications/index.cjs +3 -0
- package/dist/notifications/index.d.cts +2 -0
- package/dist/notifications/index.d.cts.map +1 -1
- package/dist/notifications/index.d.ts +2 -0
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +2 -1
- package/dist/object.cjs +13 -2
- package/dist/object.cjs.map +1 -1
- package/dist/object.d.cts +11 -3
- package/dist/object.d.cts.map +1 -1
- package/dist/object.d.ts +11 -3
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +13 -2
- package/dist/object.js.map +1 -1
- package/dist/partner/account-info.d.cts +43 -0
- package/dist/partner/account-info.d.cts.map +1 -0
- package/dist/partner/account-info.d.ts +43 -0
- package/dist/partner/account-info.d.ts.map +1 -0
- package/dist/partner/auth-clone.cjs +64 -0
- package/dist/partner/auth-clone.cjs.map +1 -0
- package/dist/partner/auth-clone.d.cts +27 -0
- package/dist/partner/auth-clone.d.cts.map +1 -0
- package/dist/partner/auth-clone.d.ts +27 -0
- package/dist/partner/auth-clone.d.ts.map +1 -0
- package/dist/partner/auth-clone.js +63 -0
- package/dist/partner/auth-clone.js.map +1 -0
- package/dist/partner/auth-core.cjs +156 -0
- package/dist/partner/auth-core.cjs.map +1 -0
- package/dist/partner/auth-core.d.cts +111 -0
- package/dist/partner/auth-core.d.cts.map +1 -0
- package/dist/partner/auth-core.d.ts +111 -0
- package/dist/partner/auth-core.d.ts.map +1 -0
- package/dist/partner/auth-core.js +156 -0
- package/dist/partner/auth-core.js.map +1 -0
- package/dist/partner/auth-shape.cjs +36 -0
- package/dist/partner/auth-shape.cjs.map +1 -0
- package/dist/partner/auth-shape.d.cts +12 -0
- package/dist/partner/auth-shape.d.cts.map +1 -0
- package/dist/partner/auth-shape.d.ts +12 -0
- package/dist/partner/auth-shape.d.ts.map +1 -0
- package/dist/partner/auth-shape.js +36 -0
- package/dist/partner/auth-shape.js.map +1 -0
- package/dist/partner/client.cjs +270 -0
- package/dist/partner/client.cjs.map +1 -0
- package/dist/partner/client.d.cts +357 -0
- package/dist/partner/client.d.cts.map +1 -0
- package/dist/partner/client.d.ts +357 -0
- package/dist/partner/client.d.ts.map +1 -0
- package/dist/partner/client.js +270 -0
- package/dist/partner/client.js.map +1 -0
- package/dist/partner/endpoint-url.cjs +109 -0
- package/dist/partner/endpoint-url.cjs.map +1 -0
- package/dist/partner/endpoint-url.d.cts +74 -0
- package/dist/partner/endpoint-url.d.cts.map +1 -0
- package/dist/partner/endpoint-url.d.ts +74 -0
- package/dist/partner/endpoint-url.d.ts.map +1 -0
- package/dist/partner/endpoint-url.js +106 -0
- package/dist/partner/endpoint-url.js.map +1 -0
- package/dist/partner/in-memory.cjs +135 -0
- package/dist/partner/in-memory.cjs.map +1 -0
- package/dist/partner/in-memory.d.cts +99 -0
- package/dist/partner/in-memory.d.cts.map +1 -0
- package/dist/partner/in-memory.d.ts +99 -0
- package/dist/partner/in-memory.d.ts.map +1 -0
- package/dist/partner/in-memory.js +135 -0
- package/dist/partner/in-memory.js.map +1 -0
- package/dist/partner/index.cjs +27 -0
- package/dist/partner/index.d.cts +32 -0
- package/dist/partner/index.d.cts.map +1 -0
- package/dist/partner/index.d.ts +32 -0
- package/dist/partner/index.d.ts.map +1 -0
- package/dist/partner/index.js +9 -0
- package/dist/partner/raw.cjs +400 -0
- package/dist/partner/raw.cjs.map +1 -0
- package/dist/partner/raw.d.cts +220 -0
- package/dist/partner/raw.d.cts.map +1 -0
- package/dist/partner/raw.d.ts +220 -0
- package/dist/partner/raw.d.ts.map +1 -0
- package/dist/partner/raw.js +398 -0
- package/dist/partner/raw.js.map +1 -0
- package/dist/partner/redaction-placeholders.cjs +10 -0
- package/dist/partner/redaction-placeholders.cjs.map +1 -0
- package/dist/partner/redaction-placeholders.d.cts +5 -0
- package/dist/partner/redaction-placeholders.d.cts.map +1 -0
- package/dist/partner/redaction-placeholders.d.ts +5 -0
- package/dist/partner/redaction-placeholders.d.ts.map +1 -0
- package/dist/partner/redaction-placeholders.js +9 -0
- package/dist/partner/redaction-placeholders.js.map +1 -0
- package/dist/partner/redaction.cjs +292 -0
- package/dist/partner/redaction.cjs.map +1 -0
- package/dist/partner/redaction.d.cts +158 -0
- package/dist/partner/redaction.d.cts.map +1 -0
- package/dist/partner/redaction.d.ts +158 -0
- package/dist/partner/redaction.d.ts.map +1 -0
- package/dist/partner/redaction.js +281 -0
- package/dist/partner/redaction.js.map +1 -0
- package/dist/raw/encoding.cjs +29 -10
- package/dist/raw/encoding.cjs.map +1 -1
- package/dist/raw/encoding.d.cts +3 -2
- package/dist/raw/encoding.d.cts.map +1 -1
- package/dist/raw/encoding.d.ts +3 -2
- package/dist/raw/encoding.d.ts.map +1 -1
- package/dist/raw/encoding.js +29 -10
- package/dist/raw/encoding.js.map +1 -1
- package/dist/raw/index.cjs +131 -44
- package/dist/raw/index.cjs.map +1 -1
- package/dist/raw/index.d.cts +21 -15
- package/dist/raw/index.d.cts.map +1 -1
- package/dist/raw/index.d.ts +21 -15
- package/dist/raw/index.d.ts.map +1 -1
- package/dist/raw/index.js +114 -45
- package/dist/raw/index.js.map +1 -1
- package/dist/raw/url.cjs +111 -0
- package/dist/raw/url.cjs.map +1 -0
- package/dist/raw/url.d.cts +41 -0
- package/dist/raw/url.d.cts.map +1 -0
- package/dist/raw/url.d.ts +41 -0
- package/dist/raw/url.d.ts.map +1 -0
- package/dist/raw/url.js +110 -0
- package/dist/raw/url.js.map +1 -0
- package/dist/s3/sigv4.cjs +15 -10
- package/dist/s3/sigv4.cjs.map +1 -1
- package/dist/s3/sigv4.js +15 -10
- package/dist/s3/sigv4.js.map +1 -1
- package/dist/simulator/index.cjs +1579 -257
- package/dist/simulator/index.cjs.map +1 -1
- package/dist/simulator/index.d.cts +124 -11
- package/dist/simulator/index.d.cts.map +1 -1
- package/dist/simulator/index.d.ts +124 -11
- package/dist/simulator/index.d.ts.map +1 -1
- package/dist/simulator/index.js +1568 -262
- package/dist/simulator/index.js.map +1 -1
- package/dist/simulator/partner-capabilities.cjs +77 -0
- package/dist/simulator/partner-capabilities.cjs.map +1 -0
- package/dist/simulator/partner-capabilities.d.cts +53 -0
- package/dist/simulator/partner-capabilities.d.cts.map +1 -0
- package/dist/simulator/partner-capabilities.d.ts +53 -0
- package/dist/simulator/partner-capabilities.d.ts.map +1 -0
- package/dist/simulator/partner-capabilities.js +73 -0
- package/dist/simulator/partner-capabilities.js.map +1 -0
- package/dist/simulator/partner.cjs +713 -0
- package/dist/simulator/partner.cjs.map +1 -0
- package/dist/simulator/partner.d.cts +186 -0
- package/dist/simulator/partner.d.cts.map +1 -0
- package/dist/simulator/partner.d.ts +186 -0
- package/dist/simulator/partner.d.ts.map +1 -0
- package/dist/simulator/partner.js +713 -0
- package/dist/simulator/partner.js.map +1 -0
- package/dist/simulator/validation.cjs +732 -25
- package/dist/simulator/validation.cjs.map +1 -1
- package/dist/simulator/validation.d.cts +145 -6
- package/dist/simulator/validation.d.cts.map +1 -1
- package/dist/simulator/validation.d.ts +145 -6
- package/dist/simulator/validation.d.ts.map +1 -1
- package/dist/simulator/validation.js +705 -26
- package/dist/simulator/validation.js.map +1 -1
- package/dist/streams/file-source.cjs +2 -2
- package/dist/streams/file-source.cjs.map +1 -1
- package/dist/streams/file-source.js +2 -2
- package/dist/streams/file-source.js.map +1 -1
- package/dist/streams/hash.cjs +246 -13
- package/dist/streams/hash.cjs.map +1 -1
- package/dist/streams/hash.d.cts +37 -12
- package/dist/streams/hash.d.cts.map +1 -1
- package/dist/streams/hash.d.ts +37 -12
- package/dist/streams/hash.d.ts.map +1 -1
- package/dist/streams/hash.js +246 -15
- package/dist/streams/hash.js.map +1 -1
- package/dist/streams/index.cjs +3 -1
- package/dist/streams/index.d.cts +1 -1
- package/dist/streams/index.d.cts.map +1 -1
- package/dist/streams/index.d.ts +1 -1
- package/dist/streams/index.d.ts.map +1 -1
- package/dist/streams/index.js +3 -3
- package/dist/streams/progress.cjs +63 -4
- package/dist/streams/progress.cjs.map +1 -1
- package/dist/streams/progress.d.cts +28 -2
- package/dist/streams/progress.d.cts.map +1 -1
- package/dist/streams/progress.d.ts +28 -2
- package/dist/streams/progress.d.ts.map +1 -1
- package/dist/streams/progress.js +63 -4
- package/dist/streams/progress.js.map +1 -1
- package/dist/streams/source.cjs +2 -1
- package/dist/streams/source.cjs.map +1 -1
- package/dist/streams/source.js +2 -1
- package/dist/streams/source.js.map +1 -1
- package/dist/sync/b2-sha1-reader.cjs +6 -2
- package/dist/sync/b2-sha1-reader.cjs.map +1 -1
- package/dist/sync/b2-sha1-reader.d.cts.map +1 -1
- package/dist/sync/b2-sha1-reader.d.ts.map +1 -1
- package/dist/sync/b2-sha1-reader.js +6 -2
- package/dist/sync/b2-sha1-reader.js.map +1 -1
- package/dist/sync/download-staging.cjs +156 -43
- package/dist/sync/download-staging.cjs.map +1 -1
- package/dist/sync/download-staging.d.cts +26 -2
- package/dist/sync/download-staging.d.cts.map +1 -1
- package/dist/sync/download-staging.d.ts +26 -2
- package/dist/sync/download-staging.d.ts.map +1 -1
- package/dist/sync/download-staging.js +155 -44
- package/dist/sync/download-staging.js.map +1 -1
- package/dist/sync/filters.cjs.map +1 -1
- package/dist/sync/filters.js.map +1 -1
- package/dist/sync/index.d.cts +1 -1
- package/dist/sync/index.d.cts.map +1 -1
- package/dist/sync/index.d.ts +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/local-file-io.cjs +15 -6
- package/dist/sync/local-file-io.cjs.map +1 -1
- package/dist/sync/local-file-io.d.cts +3 -0
- package/dist/sync/local-file-io.d.cts.map +1 -1
- package/dist/sync/local-file-io.d.ts +3 -0
- package/dist/sync/local-file-io.d.ts.map +1 -1
- package/dist/sync/local-file-io.js +15 -6
- package/dist/sync/local-file-io.js.map +1 -1
- package/dist/sync/local-sha1.cjs +6 -15
- package/dist/sync/local-sha1.cjs.map +1 -1
- package/dist/sync/local-sha1.d.cts +0 -8
- package/dist/sync/local-sha1.d.cts.map +1 -1
- package/dist/sync/local-sha1.d.ts +0 -8
- package/dist/sync/local-sha1.d.ts.map +1 -1
- package/dist/sync/local-sha1.js +7 -15
- package/dist/sync/local-sha1.js.map +1 -1
- package/dist/sync/pairing.cjs +1 -0
- package/dist/sync/pairing.cjs.map +1 -1
- package/dist/sync/pairing.js +1 -0
- package/dist/sync/pairing.js.map +1 -1
- package/dist/sync/policies/compare.cjs +5 -3
- package/dist/sync/policies/compare.cjs.map +1 -1
- package/dist/sync/policies/compare.d.cts.map +1 -1
- package/dist/sync/policies/compare.d.ts.map +1 -1
- package/dist/sync/policies/compare.js +6 -4
- package/dist/sync/policies/compare.js.map +1 -1
- package/dist/sync/policies/index.cjs +4 -10
- package/dist/sync/policies/index.cjs.map +1 -1
- package/dist/sync/policies/index.js +4 -10
- package/dist/sync/policies/index.js.map +1 -1
- package/dist/sync/scanners/b2.cjs +4 -2
- package/dist/sync/scanners/b2.cjs.map +1 -1
- package/dist/sync/scanners/b2.d.cts.map +1 -1
- package/dist/sync/scanners/b2.d.ts.map +1 -1
- package/dist/sync/scanners/b2.js +4 -2
- package/dist/sync/scanners/b2.js.map +1 -1
- package/dist/sync/scanners/local.cjs +150 -33
- package/dist/sync/scanners/local.cjs.map +1 -1
- package/dist/sync/scanners/local.d.cts +6 -0
- package/dist/sync/scanners/local.d.cts.map +1 -1
- package/dist/sync/scanners/local.d.ts +6 -0
- package/dist/sync/scanners/local.d.ts.map +1 -1
- package/dist/sync/scanners/local.js +150 -33
- package/dist/sync/scanners/local.js.map +1 -1
- package/dist/sync/synchronizer.cjs +79 -31
- package/dist/sync/synchronizer.cjs.map +1 -1
- package/dist/sync/synchronizer.d.cts +1 -0
- package/dist/sync/synchronizer.d.cts.map +1 -1
- package/dist/sync/synchronizer.d.ts +1 -0
- package/dist/sync/synchronizer.d.ts.map +1 -1
- package/dist/sync/synchronizer.js +79 -31
- package/dist/sync/synchronizer.js.map +1 -1
- package/dist/sync/types.d.cts +19 -3
- package/dist/sync/types.d.cts.map +1 -1
- package/dist/sync/types.d.ts +19 -3
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/types/auth.cjs +4 -0
- package/dist/types/auth.cjs.map +1 -1
- package/dist/types/auth.d.cts +4 -0
- package/dist/types/auth.d.cts.map +1 -1
- package/dist/types/auth.d.ts +4 -0
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/auth.js +4 -0
- package/dist/types/auth.js.map +1 -1
- package/dist/types/backup.d.cts +85 -0
- package/dist/types/backup.d.cts.map +1 -0
- package/dist/types/backup.d.ts +85 -0
- package/dist/types/backup.d.ts.map +1 -0
- package/dist/types/bucket.cjs +81 -11
- package/dist/types/bucket.cjs.map +1 -1
- package/dist/types/bucket.d.cts +194 -41
- package/dist/types/bucket.d.cts.map +1 -1
- package/dist/types/bucket.d.ts +194 -41
- package/dist/types/bucket.d.ts.map +1 -1
- package/dist/types/bucket.js +67 -12
- package/dist/types/bucket.js.map +1 -1
- package/dist/types/download.cjs +62 -0
- package/dist/types/download.cjs.map +1 -0
- package/dist/types/download.d.cts +100 -16
- package/dist/types/download.d.cts.map +1 -1
- package/dist/types/download.d.ts +100 -16
- package/dist/types/download.d.ts.map +1 -1
- package/dist/types/download.js +61 -0
- package/dist/types/download.js.map +1 -0
- package/dist/types/encryption.cjs +76 -229
- package/dist/types/encryption.cjs.map +1 -1
- package/dist/types/encryption.d.cts +48 -6
- package/dist/types/encryption.d.cts.map +1 -1
- package/dist/types/encryption.d.ts +48 -6
- package/dist/types/encryption.d.ts.map +1 -1
- package/dist/types/encryption.js +74 -229
- package/dist/types/encryption.js.map +1 -1
- package/dist/types/errors.cjs +9 -0
- package/dist/types/errors.cjs.map +1 -1
- package/dist/types/errors.d.cts +1 -1
- package/dist/types/errors.d.cts.map +1 -1
- package/dist/types/errors.d.ts +1 -1
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +9 -0
- package/dist/types/errors.js.map +1 -1
- package/dist/types/file.cjs +3 -0
- package/dist/types/file.cjs.map +1 -1
- package/dist/types/file.d.cts +140 -18
- package/dist/types/file.d.cts.map +1 -1
- package/dist/types/file.d.ts +140 -18
- package/dist/types/file.d.ts.map +1 -1
- package/dist/types/file.js +3 -1
- package/dist/types/file.js.map +1 -1
- package/dist/types/ids.cjs +30 -0
- package/dist/types/ids.cjs.map +1 -1
- package/dist/types/ids.d.cts +32 -0
- package/dist/types/ids.d.cts.map +1 -1
- package/dist/types/ids.d.ts +32 -0
- package/dist/types/ids.d.ts.map +1 -1
- package/dist/types/ids.js +28 -1
- package/dist/types/ids.js.map +1 -1
- package/dist/types/index.d.cts +16 -12
- package/dist/types/index.d.cts.map +1 -1
- package/dist/types/index.d.ts +16 -12
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/key.d.cts +4 -3
- package/dist/types/key.d.cts.map +1 -1
- package/dist/types/key.d.ts +4 -3
- package/dist/types/key.d.ts.map +1 -1
- package/dist/types/lock.cjs.map +1 -1
- package/dist/types/lock.d.cts +14 -0
- package/dist/types/lock.d.cts.map +1 -1
- package/dist/types/lock.d.ts +14 -0
- package/dist/types/lock.d.ts.map +1 -1
- package/dist/types/lock.js.map +1 -1
- package/dist/types/notifications.cjs +31 -1
- package/dist/types/notifications.cjs.map +1 -1
- package/dist/types/notifications.d.cts +31 -4
- package/dist/types/notifications.d.cts.map +1 -1
- package/dist/types/notifications.d.ts +31 -4
- package/dist/types/notifications.d.ts.map +1 -1
- package/dist/types/notifications.js +30 -2
- package/dist/types/notifications.js.map +1 -1
- package/dist/types/partner.cjs +32 -0
- package/dist/types/partner.cjs.map +1 -0
- package/dist/types/partner.d.cts +386 -0
- package/dist/types/partner.d.cts.map +1 -0
- package/dist/types/partner.d.ts +386 -0
- package/dist/types/partner.d.ts.map +1 -0
- package/dist/types/partner.js +29 -0
- package/dist/types/partner.js.map +1 -0
- package/dist/types/upload.d.cts +35 -18
- package/dist/types/upload.d.cts.map +1 -1
- package/dist/types/upload.d.ts +35 -18
- package/dist/types/upload.d.ts.map +1 -1
- package/dist/upload/abort-scope.cjs +0 -45
- package/dist/upload/abort-scope.cjs.map +1 -1
- package/dist/upload/abort-scope.d.cts +0 -22
- package/dist/upload/abort-scope.d.cts.map +1 -1
- package/dist/upload/abort-scope.d.ts +0 -22
- package/dist/upload/abort-scope.d.ts.map +1 -1
- package/dist/upload/abort-scope.js +1 -44
- package/dist/upload/abort-scope.js.map +1 -1
- package/dist/upload/finish.cjs +3 -8
- package/dist/upload/finish.cjs.map +1 -1
- package/dist/upload/finish.d.cts.map +1 -1
- package/dist/upload/finish.d.ts.map +1 -1
- package/dist/upload/finish.js +1 -6
- package/dist/upload/finish.js.map +1 -1
- package/dist/upload/large.cjs +15 -8
- package/dist/upload/large.cjs.map +1 -1
- package/dist/upload/large.d.cts +31 -8
- package/dist/upload/large.d.cts.map +1 -1
- package/dist/upload/large.d.ts +31 -8
- package/dist/upload/large.d.ts.map +1 -1
- package/dist/upload/large.js +15 -8
- package/dist/upload/large.js.map +1 -1
- package/dist/upload/options.cjs.map +1 -1
- package/dist/upload/options.d.cts +24 -0
- package/dist/upload/options.d.cts.map +1 -1
- package/dist/upload/options.d.ts +24 -0
- package/dist/upload/options.d.ts.map +1 -1
- package/dist/upload/options.js.map +1 -1
- package/dist/upload/resume.cjs +6 -4
- package/dist/upload/resume.cjs.map +1 -1
- package/dist/upload/resume.d.cts +9 -5
- package/dist/upload/resume.d.cts.map +1 -1
- package/dist/upload/resume.d.ts +9 -5
- package/dist/upload/resume.d.ts.map +1 -1
- package/dist/upload/resume.js +6 -4
- package/dist/upload/resume.js.map +1 -1
- package/dist/upload/retry.cjs +25 -13
- package/dist/upload/retry.cjs.map +1 -1
- package/dist/upload/retry.d.cts.map +1 -1
- package/dist/upload/retry.d.ts.map +1 -1
- package/dist/upload/retry.js +25 -13
- package/dist/upload/retry.js.map +1 -1
- package/dist/upload/single.cjs +35 -30
- package/dist/upload/single.cjs.map +1 -1
- package/dist/upload/single.d.cts +12 -0
- package/dist/upload/single.d.cts.map +1 -1
- package/dist/upload/single.d.ts +12 -0
- package/dist/upload/single.d.ts.map +1 -1
- package/dist/upload/single.js +35 -30
- package/dist/upload/single.js.map +1 -1
- package/dist/upload/stream.cjs +18 -5
- package/dist/upload/stream.cjs.map +1 -1
- package/dist/upload/stream.d.cts +12 -0
- package/dist/upload/stream.d.cts.map +1 -1
- package/dist/upload/stream.d.ts +12 -0
- package/dist/upload/stream.d.ts.map +1 -1
- package/dist/upload/stream.js +15 -2
- package/dist/upload/stream.js.map +1 -1
- package/dist/util/abort.cjs +114 -0
- package/dist/util/abort.cjs.map +1 -0
- package/dist/util/abort.d.cts +65 -0
- package/dist/util/abort.d.cts.map +1 -0
- package/dist/util/abort.d.ts +65 -0
- package/dist/util/abort.d.ts.map +1 -0
- package/dist/util/abort.js +109 -0
- package/dist/util/abort.js.map +1 -0
- package/dist/util/defaults.cjs +3 -0
- package/dist/util/defaults.cjs.map +1 -1
- package/dist/util/defaults.d.cts +2 -0
- package/dist/util/defaults.d.cts.map +1 -1
- package/dist/util/defaults.d.ts +2 -0
- package/dist/util/defaults.d.ts.map +1 -1
- package/dist/util/defaults.js +3 -1
- package/dist/util/defaults.js.map +1 -1
- package/dist/util/md5.cjs +211 -0
- package/dist/util/md5.cjs.map +1 -0
- package/dist/util/md5.d.cts +43 -0
- package/dist/util/md5.d.cts.map +1 -0
- package/dist/util/md5.d.ts +43 -0
- package/dist/util/md5.d.ts.map +1 -0
- package/dist/util/md5.js +209 -0
- package/dist/util/md5.js.map +1 -0
- package/dist/util/normalize.cjs +5 -5
- package/dist/util/normalize.cjs.map +1 -1
- package/dist/util/normalize.d.cts +7 -7
- package/dist/util/normalize.d.cts.map +1 -1
- package/dist/util/normalize.d.ts +7 -7
- package/dist/util/normalize.d.ts.map +1 -1
- package/dist/util/normalize.js +5 -5
- package/dist/util/normalize.js.map +1 -1
- package/dist/util/paginator.cjs +7 -1
- package/dist/util/paginator.cjs.map +1 -1
- package/dist/util/paginator.d.cts +3 -1
- package/dist/util/paginator.d.cts.map +1 -1
- package/dist/util/paginator.d.ts +3 -1
- package/dist/util/paginator.d.ts.map +1 -1
- package/dist/util/paginator.js +7 -1
- package/dist/util/paginator.js.map +1 -1
- package/dist/version.cjs +56 -4
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.cts +53 -4
- package/dist/version.d.cts.map +1 -1
- package/dist/version.d.ts +53 -4
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +52 -5
- package/dist/version.js.map +1 -1
- package/package.json +47 -18
package/dist/download/single.js
CHANGED
|
@@ -2,6 +2,9 @@ import { fileId } from "../types/ids.js";
|
|
|
2
2
|
import { bestEffort } from "../util/best-effort.js";
|
|
3
3
|
import { parseFileInfoHeaders } from "../raw/encoding.js";
|
|
4
4
|
import { ProgressTracker } from "../streams/progress.js";
|
|
5
|
+
import { DownloadClientUnauthorizedToReadMarker, DownloadHeaderName } from "../types/download.js";
|
|
6
|
+
import { EncryptionAlgorithm, EncryptionMode } from "../types/encryption.js";
|
|
7
|
+
import { LegalHoldValue, RetentionMode } from "../types/lock.js";
|
|
5
8
|
import { normalizeSha1 } from "../util/normalize.js";
|
|
6
9
|
import { verifyDownloadStream } from "./checksum.js";
|
|
7
10
|
//#region src/download/single.ts
|
|
@@ -151,12 +154,11 @@ function emptyStream() {
|
|
|
151
154
|
* @returns A stream wrapped for checksum verification and progress reporting.
|
|
152
155
|
*/
|
|
153
156
|
function prepareDownloadBody(body, headers, options) {
|
|
154
|
-
return instrumentProgress(options.method !== "HEAD" && options.range === void 0 ? verifyDownloadStream(body, headers.contentSha1) : body, headers.contentLength, options.onProgress);
|
|
157
|
+
return instrumentProgress(options.method !== "HEAD" && options.range === void 0 ? verifyDownloadStream(body, headers.contentSha1) : body, headers.contentLength, options.onProgress, options.progressIntervalMillis);
|
|
155
158
|
}
|
|
156
159
|
/**
|
|
157
|
-
* Wraps a body stream
|
|
158
|
-
*
|
|
159
|
-
* when the stream finishes.
|
|
160
|
+
* Wraps a body stream so the SDK increments a {@link ProgressTracker} for
|
|
161
|
+
* each chunk and reports `partsCompleted: 1` when the stream finishes.
|
|
160
162
|
*
|
|
161
163
|
* When `listener` is undefined the function short-circuits and returns
|
|
162
164
|
* the original stream, so unobserved downloads pay no overhead.
|
|
@@ -164,22 +166,48 @@ function prepareDownloadBody(body, headers, options) {
|
|
|
164
166
|
* @param body - The download response body to wrap.
|
|
165
167
|
* @param totalBytes - Expected total bytes (response `Content-Length`).
|
|
166
168
|
* @param listener - Caller-supplied progress callback, or undefined.
|
|
169
|
+
* @param progressIntervalMillis - Optional byte-progress throttle interval.
|
|
167
170
|
*
|
|
168
171
|
* @returns A stream that emits the same bytes and reports progress.
|
|
169
172
|
*/
|
|
170
|
-
function instrumentProgress(body, totalBytes, listener) {
|
|
173
|
+
function instrumentProgress(body, totalBytes, listener, progressIntervalMillis) {
|
|
171
174
|
if (listener === void 0) return body;
|
|
172
|
-
const tracker = new ProgressTracker(listener, totalBytes, 1);
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
175
|
+
const tracker = new ProgressTracker(listener, totalBytes, 1, { ...progressIntervalMillis !== void 0 ? { minIntervalMs: progressIntervalMillis } : {} });
|
|
176
|
+
const reader = body.getReader();
|
|
177
|
+
let released = false;
|
|
178
|
+
function releaseReader() {
|
|
179
|
+
if (released) return;
|
|
180
|
+
released = true;
|
|
181
|
+
reader.releaseLock();
|
|
182
|
+
}
|
|
183
|
+
return new ReadableStream({
|
|
184
|
+
async pull(controller) {
|
|
185
|
+
try {
|
|
186
|
+
const { done, value } = await reader.read();
|
|
187
|
+
if (done) {
|
|
188
|
+
tracker.completePart();
|
|
189
|
+
tracker.dispose();
|
|
190
|
+
releaseReader();
|
|
191
|
+
controller.close();
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
tracker.addBytes(value.byteLength);
|
|
195
|
+
controller.enqueue(value);
|
|
196
|
+
} catch (err) {
|
|
197
|
+
tracker.dispose();
|
|
198
|
+
releaseReader();
|
|
199
|
+
throw err;
|
|
200
|
+
}
|
|
177
201
|
},
|
|
178
|
-
|
|
179
|
-
tracker.
|
|
202
|
+
async cancel(reason) {
|
|
203
|
+
tracker.dispose();
|
|
204
|
+
try {
|
|
205
|
+
await reader.cancel(reason);
|
|
206
|
+
} finally {
|
|
207
|
+
releaseReader();
|
|
208
|
+
}
|
|
180
209
|
}
|
|
181
210
|
});
|
|
182
|
-
return body.pipeThrough(transform);
|
|
183
211
|
}
|
|
184
212
|
/**
|
|
185
213
|
* Extracts B2-specific download headers into a structured object.
|
|
@@ -188,16 +216,148 @@ function instrumentProgress(body, totalBytes, listener) {
|
|
|
188
216
|
* @returns The parsed download metadata.
|
|
189
217
|
*/
|
|
190
218
|
function extractDownloadHeaders(headers) {
|
|
219
|
+
const headerParseIssues = [];
|
|
191
220
|
const fileInfo = parseFileInfoHeaders(headers);
|
|
221
|
+
const clientUnauthorizedToRead = parseClientUnauthorizedToRead(headers, headerParseIssues);
|
|
222
|
+
const contentDisposition = optionalHeader(headers, DownloadHeaderName.ContentDisposition);
|
|
223
|
+
const contentLanguage = optionalHeader(headers, DownloadHeaderName.ContentLanguage);
|
|
224
|
+
const contentEncoding = optionalHeader(headers, DownloadHeaderName.ContentEncoding);
|
|
225
|
+
const cacheControl = optionalHeader(headers, DownloadHeaderName.CacheControl);
|
|
226
|
+
const expires = optionalHeader(headers, DownloadHeaderName.Expires);
|
|
227
|
+
const contentRange = optionalHeader(headers, DownloadHeaderName.ContentRange);
|
|
228
|
+
const serverSideEncryption = parseDownloadServerSideEncryption(headers, headerParseIssues);
|
|
229
|
+
const fileRetention = parseDownloadFileRetention(headers, clientUnauthorizedToRead, headerParseIssues);
|
|
230
|
+
const legalHold = parseDownloadLegalHold(headers, clientUnauthorizedToRead, headerParseIssues);
|
|
192
231
|
return {
|
|
193
|
-
contentType: headers.get(
|
|
194
|
-
contentLength: Number.parseInt(headers.get(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
232
|
+
contentType: headers.get(DownloadHeaderName.ContentType) ?? "application/octet-stream",
|
|
233
|
+
contentLength: Number.parseInt(headers.get(DownloadHeaderName.ContentLength) ?? "0", 10),
|
|
234
|
+
...contentDisposition !== void 0 ? { contentDisposition } : {},
|
|
235
|
+
...contentLanguage !== void 0 ? { contentLanguage } : {},
|
|
236
|
+
...contentEncoding !== void 0 ? { contentEncoding } : {},
|
|
237
|
+
...cacheControl !== void 0 ? { cacheControl } : {},
|
|
238
|
+
...expires !== void 0 ? { expires } : {},
|
|
239
|
+
...contentRange !== void 0 ? { contentRange } : {},
|
|
240
|
+
contentSha1: normalizeSha1(headers.get(DownloadHeaderName.ContentSha1)),
|
|
241
|
+
fileId: fileId(headers.get(DownloadHeaderName.FileId) ?? ""),
|
|
242
|
+
fileName: decodeURIComponent(headers.get(DownloadHeaderName.FileName) ?? ""),
|
|
198
243
|
fileInfo,
|
|
199
|
-
uploadTimestamp: Number.parseInt(headers.get(
|
|
244
|
+
uploadTimestamp: Number.parseInt(headers.get(DownloadHeaderName.UploadTimestamp) ?? "0", 10),
|
|
245
|
+
...serverSideEncryption !== void 0 ? { serverSideEncryption } : {},
|
|
246
|
+
...fileRetention !== void 0 ? { fileRetention } : {},
|
|
247
|
+
...legalHold !== void 0 ? { legalHold } : {},
|
|
248
|
+
...clientUnauthorizedToRead !== void 0 ? { clientUnauthorizedToRead } : {},
|
|
249
|
+
...headerParseIssues.length > 0 ? { headerParseIssues } : {}
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function optionalHeader(headers, name) {
|
|
253
|
+
return headers.get(name) ?? void 0;
|
|
254
|
+
}
|
|
255
|
+
function parseDownloadServerSideEncryption(headers, headerParseIssues) {
|
|
256
|
+
const managedAlgorithm = optionalHeader(headers, DownloadHeaderName.ServerSideEncryption);
|
|
257
|
+
if (managedAlgorithm !== void 0) {
|
|
258
|
+
if (managedAlgorithm !== EncryptionAlgorithm.Aes256) {
|
|
259
|
+
headerParseIssues.push({
|
|
260
|
+
headerName: DownloadHeaderName.ServerSideEncryption,
|
|
261
|
+
value: managedAlgorithm
|
|
262
|
+
});
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
mode: EncryptionMode.SseB2,
|
|
267
|
+
algorithm: managedAlgorithm
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
const customerAlgorithm = optionalHeader(headers, DownloadHeaderName.ServerSideEncryptionCustomerAlgorithm);
|
|
271
|
+
const customerKeyMd5 = optionalHeader(headers, DownloadHeaderName.ServerSideEncryptionCustomerKeyMd5);
|
|
272
|
+
if (customerAlgorithm === void 0 || customerKeyMd5 === void 0) return void 0;
|
|
273
|
+
if (customerAlgorithm !== EncryptionAlgorithm.Aes256) {
|
|
274
|
+
headerParseIssues.push({
|
|
275
|
+
headerName: DownloadHeaderName.ServerSideEncryptionCustomerAlgorithm,
|
|
276
|
+
value: customerAlgorithm
|
|
277
|
+
});
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
return {
|
|
281
|
+
mode: EncryptionMode.SseC,
|
|
282
|
+
algorithm: customerAlgorithm,
|
|
283
|
+
customerKeyMd5
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function parseDownloadFileRetention(headers, clientUnauthorizedToRead, headerParseIssues) {
|
|
287
|
+
if (clientUnauthorizedToRead?.includes(DownloadClientUnauthorizedToReadMarker.FileRetentionMode) === true || clientUnauthorizedToRead?.includes(DownloadClientUnauthorizedToReadMarker.FileRetentionRetainUntilTimestamp) === true) return {
|
|
288
|
+
isClientAuthorizedToRead: false,
|
|
289
|
+
value: null
|
|
200
290
|
};
|
|
291
|
+
const rawMode = optionalHeader(headers, DownloadHeaderName.FileRetentionMode);
|
|
292
|
+
const rawRetainUntilTimestamp = optionalHeader(headers, DownloadHeaderName.FileRetentionRetainUntilTimestamp);
|
|
293
|
+
if (rawMode === void 0 && rawRetainUntilTimestamp === void 0) return void 0;
|
|
294
|
+
return {
|
|
295
|
+
isClientAuthorizedToRead: true,
|
|
296
|
+
value: {
|
|
297
|
+
mode: parseRetentionMode(rawMode, headerParseIssues),
|
|
298
|
+
retainUntilTimestamp: parseRetentionTimestamp(rawRetainUntilTimestamp, headerParseIssues)
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
function parseRetentionMode(rawMode, headerParseIssues) {
|
|
303
|
+
if (rawMode === void 0) return null;
|
|
304
|
+
if (rawMode === RetentionMode.Compliance || rawMode === RetentionMode.Governance) return rawMode;
|
|
305
|
+
headerParseIssues.push({
|
|
306
|
+
headerName: DownloadHeaderName.FileRetentionMode,
|
|
307
|
+
value: rawMode
|
|
308
|
+
});
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
function parseRetentionTimestamp(rawTimestamp, headerParseIssues) {
|
|
312
|
+
if (rawTimestamp === void 0) return null;
|
|
313
|
+
if (!/^\d+$/.test(rawTimestamp)) {
|
|
314
|
+
headerParseIssues.push({
|
|
315
|
+
headerName: DownloadHeaderName.FileRetentionRetainUntilTimestamp,
|
|
316
|
+
value: rawTimestamp
|
|
317
|
+
});
|
|
318
|
+
return null;
|
|
319
|
+
}
|
|
320
|
+
const parsed = Number.parseInt(rawTimestamp, 10);
|
|
321
|
+
if (Number.isFinite(parsed)) return parsed;
|
|
322
|
+
headerParseIssues.push({
|
|
323
|
+
headerName: DownloadHeaderName.FileRetentionRetainUntilTimestamp,
|
|
324
|
+
value: rawTimestamp
|
|
325
|
+
});
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
function parseDownloadLegalHold(headers, clientUnauthorizedToRead, headerParseIssues) {
|
|
329
|
+
if (clientUnauthorizedToRead?.includes(DownloadClientUnauthorizedToReadMarker.FileLegalHold)) return {
|
|
330
|
+
isClientAuthorizedToRead: false,
|
|
331
|
+
value: null
|
|
332
|
+
};
|
|
333
|
+
const rawLegalHold = optionalHeader(headers, DownloadHeaderName.FileLegalHold);
|
|
334
|
+
if (rawLegalHold === void 0) return void 0;
|
|
335
|
+
if (rawLegalHold === LegalHoldValue.On || rawLegalHold === LegalHoldValue.Off) return {
|
|
336
|
+
isClientAuthorizedToRead: true,
|
|
337
|
+
value: rawLegalHold
|
|
338
|
+
};
|
|
339
|
+
headerParseIssues.push({
|
|
340
|
+
headerName: DownloadHeaderName.FileLegalHold,
|
|
341
|
+
value: rawLegalHold
|
|
342
|
+
});
|
|
343
|
+
return {
|
|
344
|
+
isClientAuthorizedToRead: true,
|
|
345
|
+
value: null
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
function parseClientUnauthorizedToRead(headers, headerParseIssues) {
|
|
349
|
+
const value = optionalHeader(headers, DownloadHeaderName.ClientUnauthorizedToRead);
|
|
350
|
+
if (value === void 0) return void 0;
|
|
351
|
+
const headerNames = value.split(",").map((header) => header.trim()).filter((header) => header.length > 0);
|
|
352
|
+
const knownHeaderNames = headerNames.filter(isDownloadClientUnauthorizedToReadMarker);
|
|
353
|
+
for (const headerName of headerNames) if (!isDownloadClientUnauthorizedToReadMarker(headerName)) headerParseIssues.push({
|
|
354
|
+
headerName: DownloadHeaderName.ClientUnauthorizedToRead,
|
|
355
|
+
value: headerName
|
|
356
|
+
});
|
|
357
|
+
return knownHeaderNames.length > 0 ? knownHeaderNames : void 0;
|
|
358
|
+
}
|
|
359
|
+
function isDownloadClientUnauthorizedToReadMarker(headerName) {
|
|
360
|
+
return Object.values(DownloadClientUnauthorizedToReadMarker).includes(headerName);
|
|
201
361
|
}
|
|
202
362
|
//#endregion
|
|
203
363
|
export { downloadById, downloadByName, headById, headByName };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single.js","names":[],"sources":["../../src/download/single.ts"],"sourcesContent":["import type { AccountInfo } from '../auth/account-info.ts'\nimport { parseFileInfoHeaders } from '../raw/encoding.ts'\nimport type { DownloadFileOptions, RawClient, SseCDownloadKey } from '../raw/index.ts'\nimport { type ProgressListener, ProgressTracker } from '../streams/progress.ts'\nimport type { DownloadHeaders } from '../types/download.ts'\nimport { type FileId, fileId as fileIdOf } from '../types/ids.ts'\nimport { bestEffort } from '../util/best-effort.ts'\nimport { normalizeSha1 } from '../util/normalize.ts'\nimport { verifyDownloadStream } from './checksum.ts'\n\n/** Result of a single-request file download. */\nexport interface DownloadResult {\n /** Parsed B2 response headers (content type, SHA-1, file info, etc.). */\n readonly headers: DownloadHeaders\n /**\n * Streaming body of the downloaded file.\n *\n * If checksum verification fails, the stream errors after bytes have already\n * flowed; discard any partially written output on `ChecksumMismatchError`.\n */\n readonly body: ReadableStream<Uint8Array>\n}\n\n/**\n * Result of a HEAD-style metadata fetch. Unlike {@link DownloadResult},\n * this shape has **no** `body` field — the SDK consumes and discards the\n * (logically empty) HEAD response body internally so callers never have\n * to remember to `body.cancel()` after a metadata-only fetch.\n */\nexport interface HeadResult {\n /** Parsed B2 response headers (content type, SHA-1, file info, etc.). */\n readonly headers: DownloadHeaders\n}\n\n/** Shared download options exposed at the high-level facade. */\ninterface DownloadCommonOptions {\n /** HTTP method. Defaults to `'GET'`. Use `'HEAD'` to fetch only response headers without streaming the body. */\n readonly method?: 'GET' | 'HEAD'\n /** Optional HTTP Range header value (e.g. `bytes=0-999`). */\n readonly range?: string\n /** SSE-C decryption parameters, required if the file was uploaded with SSE-C. */\n readonly serverSideEncryption?: SseCDownloadKey\n /** Override the response `Content-Disposition` header. */\n readonly b2ContentDisposition?: string\n /** Override the response `Content-Language` header. */\n readonly b2ContentLanguage?: string\n /** Override the response `Content-Encoding` header. */\n readonly b2ContentEncoding?: string\n /** Override the response `Content-Type` header. */\n readonly b2ContentType?: string\n /** Override the response `Cache-Control` header. */\n readonly b2CacheControl?: string\n /** Override the response `Expires` header. */\n readonly b2Expires?: string\n /** Signal to abort the download. */\n readonly signal?: AbortSignal\n /**\n * Callback invoked as bytes flow through the returned `body` stream.\n *\n * Wraps the response body in a `TransformStream` that increments a\n * `ProgressTracker` per chunk and emits a `partsCompleted: 1` event when\n * the stream finishes. `totalBytes` is the response's `Content-Length`\n * header (or `null` if the server didn't send one — rare for B2).\n *\n * If the caller does not read the returned body to completion, the\n * tracker's `completePart()` event will not fire. That is intentional:\n * progress is byte-driven, not request-driven.\n */\n readonly onProgress?: ProgressListener\n}\n\n/** Options for downloading a file by its unique ID. */\nexport interface DownloadByIdOptions extends DownloadCommonOptions {\n /** ID of the file version to download. */\n readonly fileId: FileId\n}\n\n/** Options for downloading a file by bucket name and file path. */\nexport interface DownloadByNameOptions extends DownloadCommonOptions {\n /** Name of the bucket containing the file. */\n readonly bucketName: string\n /** Full file name (path) within the bucket. */\n readonly fileName: string\n}\n\n/**\n * Shared HEAD options. Mirrors {@link DownloadCommonOptions} but omits\n * `method` (always HEAD) and `onProgress` (no body to track).\n */\ntype HeadCommonOptions = Omit<DownloadCommonOptions, 'method' | 'onProgress'>\n\n/** Options for a HEAD-by-ID request. */\nexport interface HeadByIdOptions extends HeadCommonOptions {\n /** ID of the file version to inspect. */\n readonly fileId: FileId\n}\n\n/** Options for a HEAD-by-name request. */\nexport interface HeadByNameOptions extends HeadCommonOptions {\n /** Name of the bucket containing the file. */\n readonly bucketName: string\n /** Full file name (path) within the bucket. */\n readonly fileName: string\n}\n\n/**\n * Downloads a file by its unique ID in a single HTTP request.\n *\n * Returns a streaming body suitable for small-to-medium files. For large files\n * that benefit from concurrent ranged fetches, use\n * {@link createParallelDownloadStream} instead.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - Download parameters.\n *\n * @returns Parsed headers and a readable stream of file bytes.\n */\nexport async function downloadById(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: DownloadByIdOptions,\n): Promise<DownloadResult> {\n const resp = await raw.downloadFileById(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.fileId,\n toRawDownloadOptions(options),\n )\n\n const headers = extractDownloadHeaders(resp.headers)\n return {\n headers,\n // HEAD requests legitimately have no body; return an empty stream so the\n // result shape stays consistent.\n body: prepareDownloadBody(resp.body ?? emptyStream(), headers, options),\n }\n}\n\n/**\n * Downloads a file by bucket name and file path in a single HTTP request.\n *\n * Returns a streaming body suitable for small-to-medium files. For large files\n * that benefit from concurrent ranged fetches, use\n * {@link createParallelDownloadStream} instead.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - Download parameters.\n *\n * @returns Parsed headers and a readable stream of file bytes.\n */\nexport async function downloadByName(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: DownloadByNameOptions,\n): Promise<DownloadResult> {\n const resp = await raw.downloadFileByName(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.bucketName,\n options.fileName,\n toRawDownloadOptions(options),\n )\n\n const headers = extractDownloadHeaders(resp.headers)\n return {\n headers,\n body: prepareDownloadBody(resp.body ?? emptyStream(), headers, options),\n }\n}\n\n/**\n * Issues a HEAD-by-ID request and returns parsed headers only. Drains\n * the (logically empty) response body internally so callers don't have\n * to remember to `body.cancel()` themselves.\n *\n * Prefer this over `downloadById({ method: 'HEAD' })` — same wire-level\n * effect, but the caller-facing result has no `body` field at all so\n * there's nothing to clean up.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - HEAD parameters (file ID + the same response-header\n * overrides and abort signal that `downloadById` accepts).\n *\n * @returns Parsed download headers (no body field).\n */\nexport async function headById(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: HeadByIdOptions,\n): Promise<HeadResult> {\n const resp = await raw.downloadFileById(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.fileId,\n { ...toRawDownloadOptions(options), method: 'HEAD' },\n )\n // Body for HEAD is normally `null` per the fetch spec. Some transports\n // (notably the SDK's `B2Simulator`) synthesize a non-null body for\n // shape consistency. In either case, cancelling is a no-op for the\n // caller; wrap in `bestEffort` so a stream-lifecycle quirk in a\n // future runtime can't fail an otherwise-successful HEAD.\n if (resp.body !== null) {\n // Bind to a local so the type narrowing carries into the closure;\n // bare `resp.body` in the lambda would re-broaden to `... | null`.\n const body = resp.body\n await bestEffort(() => body.cancel())\n }\n return { headers: extractDownloadHeaders(resp.headers) }\n}\n\n/**\n * Issues a HEAD-by-name request and returns parsed headers only. Drains\n * the (logically empty) response body internally so callers don't have\n * to remember to `body.cancel()` themselves.\n *\n * Prefer this over `downloadByName({ method: 'HEAD' })` — same wire-level\n * effect, but the caller-facing result has no `body` field at all so\n * there's nothing to clean up.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - HEAD parameters (bucket + file name + the same\n * response-header overrides and abort signal that `downloadByName`\n * accepts).\n *\n * @returns Parsed download headers (no body field).\n */\nexport async function headByName(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: HeadByNameOptions,\n): Promise<HeadResult> {\n const resp = await raw.downloadFileByName(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.bucketName,\n options.fileName,\n { ...toRawDownloadOptions(options), method: 'HEAD' },\n )\n if (resp.body !== null) {\n // Bind to a local so the type narrowing carries into the closure;\n // bare `resp.body` in the lambda would re-broaden to `... | null`.\n const body = resp.body\n await bestEffort(() => body.cancel())\n }\n return { headers: extractDownloadHeaders(resp.headers) }\n}\n\n/**\n * Translates the public download-options shape into the raw client's\n * {@link DownloadFileOptions}, dropping the request-target fields (`fileId`,\n * `bucketName`, `fileName`) that don't apply at the transport layer.\n *\n * @param options - Caller-supplied download options.\n *\n * @returns The raw transport-layer options.\n */\nfunction toRawDownloadOptions(options: DownloadCommonOptions): DownloadFileOptions {\n return {\n ...(options.method !== undefined ? { method: options.method } : {}),\n ...(options.range !== undefined ? { range: options.range } : {}),\n ...(options.serverSideEncryption !== undefined\n ? { serverSideEncryption: options.serverSideEncryption }\n : {}),\n ...(options.b2ContentDisposition !== undefined\n ? { b2ContentDisposition: options.b2ContentDisposition }\n : {}),\n ...(options.b2ContentLanguage !== undefined\n ? { b2ContentLanguage: options.b2ContentLanguage }\n : {}),\n ...(options.b2ContentEncoding !== undefined\n ? { b2ContentEncoding: options.b2ContentEncoding }\n : {}),\n ...(options.b2ContentType !== undefined ? { b2ContentType: options.b2ContentType } : {}),\n ...(options.b2CacheControl !== undefined ? { b2CacheControl: options.b2CacheControl } : {}),\n ...(options.b2Expires !== undefined ? { b2Expires: options.b2Expires } : {}),\n ...(options.signal !== undefined ? { signal: options.signal } : {}),\n }\n}\n\n/**\n * Builds an immediately-closed empty ReadableStream. Used as the body of a\n * HEAD download response so callers always get a stream they can `pipeTo`.\n *\n * @returns A ReadableStream that yields zero bytes and immediately closes.\n */\nfunction emptyStream(): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.close()\n },\n })\n}\n\n/**\n * Applies stream wrappers common to single-request downloads.\n *\n * Full-body GET downloads are checksum-verified when B2 supplies a real\n * whole-file SHA-1. HEAD requests and ranged GETs are skipped because the\n * response body is empty or partial while `X-Bz-Content-Sha1` describes the\n * full file version.\n *\n * @param body - Download response body.\n * @param headers - Parsed download headers.\n * @param options - Caller-supplied download options.\n *\n * @returns A stream wrapped for checksum verification and progress reporting.\n */\nfunction prepareDownloadBody(\n body: ReadableStream<Uint8Array>,\n headers: DownloadHeaders,\n options: DownloadCommonOptions,\n): ReadableStream<Uint8Array> {\n const shouldVerify = options.method !== 'HEAD' && options.range === undefined\n const verifiedBody = shouldVerify ? verifyDownloadStream(body, headers.contentSha1) : body\n return instrumentProgress(verifiedBody, headers.contentLength, options.onProgress)\n}\n\n/**\n * Wraps a body stream with a `TransformStream` that increments a\n * {@link ProgressTracker} for each chunk and reports `partsCompleted: 1`\n * when the stream finishes.\n *\n * When `listener` is undefined the function short-circuits and returns\n * the original stream, so unobserved downloads pay no overhead.\n *\n * @param body - The download response body to wrap.\n * @param totalBytes - Expected total bytes (response `Content-Length`).\n * @param listener - Caller-supplied progress callback, or undefined.\n *\n * @returns A stream that emits the same bytes and reports progress.\n */\nfunction instrumentProgress(\n body: ReadableStream<Uint8Array>,\n totalBytes: number,\n listener: ProgressListener | undefined,\n): ReadableStream<Uint8Array> {\n if (listener === undefined) return body\n const tracker = new ProgressTracker(listener, totalBytes, 1)\n const transform = new TransformStream<Uint8Array, Uint8Array>({\n transform(chunk, controller) {\n tracker.addBytes(chunk.byteLength)\n controller.enqueue(chunk)\n },\n flush() {\n tracker.completePart()\n },\n })\n return body.pipeThrough(transform)\n}\n\n/**\n * Extracts B2-specific download headers into a structured object.\n * @param headers - The HTTP response headers from the download.\n *\n * @returns The parsed download metadata.\n */\nfunction extractDownloadHeaders(headers: Headers): DownloadHeaders {\n const fileInfo = parseFileInfoHeaders(headers)\n\n return {\n contentType: headers.get('Content-Type') ?? 'application/octet-stream',\n contentLength: Number.parseInt(headers.get('Content-Length') ?? '0', 10),\n // B2 sends the literal `'none'` for multipart-finished files; collapse\n // to `null` so the typed `string | null` actually means \"no SHA-1\".\n contentSha1: normalizeSha1(headers.get('X-Bz-Content-Sha1')),\n fileId: fileIdOf(headers.get('X-Bz-File-Id') ?? ''),\n fileName: decodeURIComponent(headers.get('X-Bz-File-Name') ?? ''),\n fileInfo,\n uploadTimestamp: Number.parseInt(headers.get('X-Bz-Upload-Timestamp') ?? '0', 10),\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"single.js","names":[],"sources":["../../src/download/single.ts"],"sourcesContent":["import type { AccountInfo } from '../auth/account-info.ts'\nimport { parseFileInfoHeaders } from '../raw/encoding.ts'\nimport type { DownloadFileOptions, RawClient, SseCDownloadKey } from '../raw/index.ts'\nimport { type ProgressListener, ProgressTracker } from '../streams/progress.ts'\nimport {\n DownloadClientUnauthorizedToReadMarker,\n DownloadHeaderName,\n type DownloadHeaderParseIssue,\n type DownloadHeaders,\n type DownloadServerSideEncryption,\n} from '../types/download.ts'\nimport { EncryptionAlgorithm, EncryptionMode } from '../types/encryption.ts'\nimport { type FileId, fileId as fileIdOf } from '../types/ids.ts'\nimport { type FileRetentionValue, LegalHoldValue, RetentionMode } from '../types/lock.ts'\nimport { bestEffort } from '../util/best-effort.ts'\nimport { normalizeSha1 } from '../util/normalize.ts'\nimport { verifyDownloadStream } from './checksum.ts'\n\n/** Result of a single-request file download. */\nexport interface DownloadResult {\n /** Parsed B2 response headers (content type, SHA-1, file info, etc.). */\n readonly headers: DownloadHeaders\n /**\n * Streaming body of the downloaded file.\n *\n * If checksum verification fails, the stream errors after bytes have already\n * flowed; discard any partially written output on `ChecksumMismatchError`.\n */\n readonly body: ReadableStream<Uint8Array>\n}\n\n/**\n * Result of a HEAD-style metadata fetch. Unlike {@link DownloadResult},\n * this shape has **no** `body` field — the SDK consumes and discards the\n * (logically empty) HEAD response body internally so callers never have\n * to remember to `body.cancel()` after a metadata-only fetch.\n */\nexport interface HeadResult {\n /** Parsed B2 response headers (content type, SHA-1, file info, etc.). */\n readonly headers: DownloadHeaders\n}\n\n/** Shared download options exposed at the high-level facade. */\ninterface DownloadCommonOptions {\n /** HTTP method. Defaults to `'GET'`. Use `'HEAD'` to fetch only response headers without streaming the body. */\n readonly method?: 'GET' | 'HEAD'\n /** Optional HTTP Range header value (e.g. `bytes=0-999`). */\n readonly range?: string\n /** SSE-C decryption parameters, required if the file was uploaded with SSE-C. */\n readonly serverSideEncryption?: SseCDownloadKey\n /** Override the response `Content-Disposition` header. */\n readonly b2ContentDisposition?: string\n /** Override the response `Content-Language` header. */\n readonly b2ContentLanguage?: string\n /** Override the response `Content-Encoding` header. */\n readonly b2ContentEncoding?: string\n /** Override the response `Content-Type` header. */\n readonly b2ContentType?: string\n /** Override the response `Cache-Control` header. */\n readonly b2CacheControl?: string\n /** Override the response `Expires` header. */\n readonly b2Expires?: string\n /** Signal to abort the download. */\n readonly signal?: AbortSignal\n /**\n * Callback invoked as bytes flow through the returned `body` stream.\n *\n * Wraps the response body so the SDK increments a `ProgressTracker` per\n * chunk and emits a `partsCompleted: 1` event when the stream finishes.\n * `totalBytes` is the response's `Content-Length`\n * header (or `null` if the server didn't send one — rare for B2).\n *\n * If the caller does not read the returned body to completion, the\n * tracker's `completePart()` event will not fire. That is intentional:\n * progress is byte-driven, not request-driven.\n */\n readonly onProgress?: ProgressListener\n /**\n * Minimum milliseconds between byte-only progress callbacks. Defaults to\n * the SDK's 100 ms progress interval; set to 0 for per-chunk callbacks.\n * The final completion callback is always emitted immediately.\n */\n readonly progressIntervalMillis?: number\n}\n\n/** Options for downloading a file by its unique ID. */\nexport interface DownloadByIdOptions extends DownloadCommonOptions {\n /** ID of the file version to download. */\n readonly fileId: FileId\n}\n\n/** Options for downloading a file by bucket name and file path. */\nexport interface DownloadByNameOptions extends DownloadCommonOptions {\n /** Name of the bucket containing the file. */\n readonly bucketName: string\n /** Full file name (path) within the bucket. */\n readonly fileName: string\n}\n\n/**\n * Shared HEAD options. Mirrors {@link DownloadCommonOptions} but omits\n * `method` (always HEAD) and `onProgress` (no body to track).\n */\ntype HeadCommonOptions = Omit<\n DownloadCommonOptions,\n 'method' | 'onProgress' | 'progressIntervalMillis'\n>\n\n/** Options for a HEAD-by-ID request. */\nexport interface HeadByIdOptions extends HeadCommonOptions {\n /** ID of the file version to inspect. */\n readonly fileId: FileId\n}\n\n/** Options for a HEAD-by-name request. */\nexport interface HeadByNameOptions extends HeadCommonOptions {\n /** Name of the bucket containing the file. */\n readonly bucketName: string\n /** Full file name (path) within the bucket. */\n readonly fileName: string\n}\n\n/**\n * Downloads a file by its unique ID in a single HTTP request.\n *\n * Returns a streaming body suitable for small-to-medium files. For large files\n * that benefit from concurrent ranged fetches, use\n * {@link createParallelDownloadStream} instead.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - Download parameters.\n *\n * @returns Parsed headers and a readable stream of file bytes.\n */\nexport async function downloadById(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: DownloadByIdOptions,\n): Promise<DownloadResult> {\n const resp = await raw.downloadFileById(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.fileId,\n toRawDownloadOptions(options),\n )\n\n const headers = extractDownloadHeaders(resp.headers)\n return {\n headers,\n // HEAD requests legitimately have no body; return an empty stream so the\n // result shape stays consistent.\n body: prepareDownloadBody(resp.body ?? emptyStream(), headers, options),\n }\n}\n\n/**\n * Downloads a file by bucket name and file path in a single HTTP request.\n *\n * Returns a streaming body suitable for small-to-medium files. For large files\n * that benefit from concurrent ranged fetches, use\n * {@link createParallelDownloadStream} instead.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - Download parameters.\n *\n * @returns Parsed headers and a readable stream of file bytes.\n */\nexport async function downloadByName(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: DownloadByNameOptions,\n): Promise<DownloadResult> {\n const resp = await raw.downloadFileByName(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.bucketName,\n options.fileName,\n toRawDownloadOptions(options),\n )\n\n const headers = extractDownloadHeaders(resp.headers)\n return {\n headers,\n body: prepareDownloadBody(resp.body ?? emptyStream(), headers, options),\n }\n}\n\n/**\n * Issues a HEAD-by-ID request and returns parsed headers only. Drains\n * the (logically empty) response body internally so callers don't have\n * to remember to `body.cancel()` themselves.\n *\n * Prefer this over `downloadById({ method: 'HEAD' })` — same wire-level\n * effect, but the caller-facing result has no `body` field at all so\n * there's nothing to clean up.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - HEAD parameters (file ID + the same response-header\n * overrides and abort signal that `downloadById` accepts).\n *\n * @returns Parsed download headers (no body field).\n */\nexport async function headById(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: HeadByIdOptions,\n): Promise<HeadResult> {\n const resp = await raw.downloadFileById(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.fileId,\n { ...toRawDownloadOptions(options), method: 'HEAD' },\n )\n // Body for HEAD is normally `null` per the fetch spec. Some transports\n // (notably the SDK's `B2Simulator`) synthesize a non-null body for\n // shape consistency. In either case, cancelling is a no-op for the\n // caller; wrap in `bestEffort` so a stream-lifecycle quirk in a\n // future runtime can't fail an otherwise-successful HEAD.\n if (resp.body !== null) {\n // Bind to a local so the type narrowing carries into the closure;\n // bare `resp.body` in the lambda would re-broaden to `... | null`.\n const body = resp.body\n await bestEffort(() => body.cancel())\n }\n return { headers: extractDownloadHeaders(resp.headers) }\n}\n\n/**\n * Issues a HEAD-by-name request and returns parsed headers only. Drains\n * the (logically empty) response body internally so callers don't have\n * to remember to `body.cancel()` themselves.\n *\n * Prefer this over `downloadByName({ method: 'HEAD' })` — same wire-level\n * effect, but the caller-facing result has no `body` field at all so\n * there's nothing to clean up.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param options - HEAD parameters (bucket + file name + the same\n * response-header overrides and abort signal that `downloadByName`\n * accepts).\n *\n * @returns Parsed download headers (no body field).\n */\nexport async function headByName(\n raw: RawClient,\n accountInfo: AccountInfo,\n options: HeadByNameOptions,\n): Promise<HeadResult> {\n const resp = await raw.downloadFileByName(\n accountInfo.getDownloadUrl(),\n accountInfo.getAuthToken(),\n options.bucketName,\n options.fileName,\n { ...toRawDownloadOptions(options), method: 'HEAD' },\n )\n if (resp.body !== null) {\n // Bind to a local so the type narrowing carries into the closure;\n // bare `resp.body` in the lambda would re-broaden to `... | null`.\n const body = resp.body\n await bestEffort(() => body.cancel())\n }\n return { headers: extractDownloadHeaders(resp.headers) }\n}\n\n/**\n * Translates the public download-options shape into the raw client's\n * {@link DownloadFileOptions}, dropping the request-target fields (`fileId`,\n * `bucketName`, `fileName`) that don't apply at the transport layer.\n *\n * @param options - Caller-supplied download options.\n *\n * @returns The raw transport-layer options.\n */\nfunction toRawDownloadOptions(options: DownloadCommonOptions): DownloadFileOptions {\n return {\n ...(options.method !== undefined ? { method: options.method } : {}),\n ...(options.range !== undefined ? { range: options.range } : {}),\n ...(options.serverSideEncryption !== undefined\n ? { serverSideEncryption: options.serverSideEncryption }\n : {}),\n ...(options.b2ContentDisposition !== undefined\n ? { b2ContentDisposition: options.b2ContentDisposition }\n : {}),\n ...(options.b2ContentLanguage !== undefined\n ? { b2ContentLanguage: options.b2ContentLanguage }\n : {}),\n ...(options.b2ContentEncoding !== undefined\n ? { b2ContentEncoding: options.b2ContentEncoding }\n : {}),\n ...(options.b2ContentType !== undefined ? { b2ContentType: options.b2ContentType } : {}),\n ...(options.b2CacheControl !== undefined ? { b2CacheControl: options.b2CacheControl } : {}),\n ...(options.b2Expires !== undefined ? { b2Expires: options.b2Expires } : {}),\n ...(options.signal !== undefined ? { signal: options.signal } : {}),\n }\n}\n\n/**\n * Builds an immediately-closed empty ReadableStream. Used as the body of a\n * HEAD download response so callers always get a stream they can `pipeTo`.\n *\n * @returns A ReadableStream that yields zero bytes and immediately closes.\n */\nfunction emptyStream(): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.close()\n },\n })\n}\n\n/**\n * Applies stream wrappers common to single-request downloads.\n *\n * Full-body GET downloads are checksum-verified when B2 supplies a real\n * whole-file SHA-1. HEAD requests and ranged GETs are skipped because the\n * response body is empty or partial while `X-Bz-Content-Sha1` describes the\n * full file version.\n *\n * @param body - Download response body.\n * @param headers - Parsed download headers.\n * @param options - Caller-supplied download options.\n *\n * @returns A stream wrapped for checksum verification and progress reporting.\n */\nfunction prepareDownloadBody(\n body: ReadableStream<Uint8Array>,\n headers: DownloadHeaders,\n options: DownloadCommonOptions,\n): ReadableStream<Uint8Array> {\n const shouldVerify = options.method !== 'HEAD' && options.range === undefined\n const verifiedBody = shouldVerify ? verifyDownloadStream(body, headers.contentSha1) : body\n return instrumentProgress(\n verifiedBody,\n headers.contentLength,\n options.onProgress,\n options.progressIntervalMillis,\n )\n}\n\n/**\n * Wraps a body stream so the SDK increments a {@link ProgressTracker} for\n * each chunk and reports `partsCompleted: 1` when the stream finishes.\n *\n * When `listener` is undefined the function short-circuits and returns\n * the original stream, so unobserved downloads pay no overhead.\n *\n * @param body - The download response body to wrap.\n * @param totalBytes - Expected total bytes (response `Content-Length`).\n * @param listener - Caller-supplied progress callback, or undefined.\n * @param progressIntervalMillis - Optional byte-progress throttle interval.\n *\n * @returns A stream that emits the same bytes and reports progress.\n */\nfunction instrumentProgress(\n body: ReadableStream<Uint8Array>,\n totalBytes: number,\n listener: ProgressListener | undefined,\n progressIntervalMillis: number | undefined,\n): ReadableStream<Uint8Array> {\n if (listener === undefined) return body\n const tracker = new ProgressTracker(listener, totalBytes, 1, {\n ...(progressIntervalMillis !== undefined ? { minIntervalMs: progressIntervalMillis } : {}),\n })\n const reader = body.getReader()\n let released = false\n\n function releaseReader(): void {\n if (released) return\n released = true\n reader.releaseLock()\n }\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n const { done, value } = await reader.read()\n if (done) {\n tracker.completePart()\n tracker.dispose()\n releaseReader()\n controller.close()\n return\n }\n tracker.addBytes(value.byteLength)\n controller.enqueue(value)\n } catch (err) {\n tracker.dispose()\n releaseReader()\n throw err\n }\n },\n async cancel(reason) {\n tracker.dispose()\n try {\n await reader.cancel(reason)\n } finally {\n releaseReader()\n }\n },\n })\n}\n\n/**\n * Extracts B2-specific download headers into a structured object.\n * @param headers - The HTTP response headers from the download.\n *\n * @returns The parsed download metadata.\n */\nfunction extractDownloadHeaders(headers: Headers): DownloadHeaders {\n const headerParseIssues: DownloadHeaderParseIssue[] = []\n const fileInfo = parseFileInfoHeaders(headers)\n const clientUnauthorizedToRead = parseClientUnauthorizedToRead(headers, headerParseIssues)\n const contentDisposition = optionalHeader(headers, DownloadHeaderName.ContentDisposition)\n const contentLanguage = optionalHeader(headers, DownloadHeaderName.ContentLanguage)\n const contentEncoding = optionalHeader(headers, DownloadHeaderName.ContentEncoding)\n const cacheControl = optionalHeader(headers, DownloadHeaderName.CacheControl)\n const expires = optionalHeader(headers, DownloadHeaderName.Expires)\n const contentRange = optionalHeader(headers, DownloadHeaderName.ContentRange)\n const serverSideEncryption = parseDownloadServerSideEncryption(headers, headerParseIssues)\n const fileRetention = parseDownloadFileRetention(\n headers,\n clientUnauthorizedToRead,\n headerParseIssues,\n )\n const legalHold = parseDownloadLegalHold(headers, clientUnauthorizedToRead, headerParseIssues)\n\n return {\n contentType: headers.get(DownloadHeaderName.ContentType) ?? 'application/octet-stream',\n contentLength: Number.parseInt(headers.get(DownloadHeaderName.ContentLength) ?? '0', 10),\n ...(contentDisposition !== undefined ? { contentDisposition } : {}),\n ...(contentLanguage !== undefined ? { contentLanguage } : {}),\n ...(contentEncoding !== undefined ? { contentEncoding } : {}),\n ...(cacheControl !== undefined ? { cacheControl } : {}),\n ...(expires !== undefined ? { expires } : {}),\n ...(contentRange !== undefined ? { contentRange } : {}),\n // B2 sends the literal `'none'` for multipart-finished files; collapse\n // to `null` so the typed `string | null` actually means \"no SHA-1\".\n contentSha1: normalizeSha1(headers.get(DownloadHeaderName.ContentSha1)),\n fileId: fileIdOf(headers.get(DownloadHeaderName.FileId) ?? ''),\n fileName: decodeURIComponent(headers.get(DownloadHeaderName.FileName) ?? ''),\n fileInfo,\n uploadTimestamp: Number.parseInt(headers.get(DownloadHeaderName.UploadTimestamp) ?? '0', 10),\n ...(serverSideEncryption !== undefined ? { serverSideEncryption } : {}),\n ...(fileRetention !== undefined ? { fileRetention } : {}),\n ...(legalHold !== undefined ? { legalHold } : {}),\n ...(clientUnauthorizedToRead !== undefined ? { clientUnauthorizedToRead } : {}),\n ...(headerParseIssues.length > 0 ? { headerParseIssues } : {}),\n }\n}\n\nfunction optionalHeader(headers: Headers, name: string): string | undefined {\n return headers.get(name) ?? undefined\n}\n\nfunction parseDownloadServerSideEncryption(\n headers: Headers,\n headerParseIssues: DownloadHeaderParseIssue[],\n): DownloadServerSideEncryption | undefined {\n const managedAlgorithm = optionalHeader(headers, DownloadHeaderName.ServerSideEncryption)\n if (managedAlgorithm !== undefined) {\n if (managedAlgorithm !== EncryptionAlgorithm.Aes256) {\n headerParseIssues.push({\n headerName: DownloadHeaderName.ServerSideEncryption,\n value: managedAlgorithm,\n })\n return undefined\n }\n return { mode: EncryptionMode.SseB2, algorithm: managedAlgorithm }\n }\n\n const customerAlgorithm = optionalHeader(\n headers,\n DownloadHeaderName.ServerSideEncryptionCustomerAlgorithm,\n )\n const customerKeyMd5 = optionalHeader(\n headers,\n DownloadHeaderName.ServerSideEncryptionCustomerKeyMd5,\n )\n if (customerAlgorithm === undefined || customerKeyMd5 === undefined) return undefined\n if (customerAlgorithm !== EncryptionAlgorithm.Aes256) {\n headerParseIssues.push({\n headerName: DownloadHeaderName.ServerSideEncryptionCustomerAlgorithm,\n value: customerAlgorithm,\n })\n return undefined\n }\n return { mode: EncryptionMode.SseC, algorithm: customerAlgorithm, customerKeyMd5 }\n}\n\nfunction parseDownloadFileRetention(\n headers: Headers,\n clientUnauthorizedToRead: DownloadHeaders['clientUnauthorizedToRead'],\n headerParseIssues: DownloadHeaderParseIssue[],\n): DownloadHeaders['fileRetention'] {\n if (\n clientUnauthorizedToRead?.includes(DownloadClientUnauthorizedToReadMarker.FileRetentionMode) ===\n true ||\n clientUnauthorizedToRead?.includes(\n DownloadClientUnauthorizedToReadMarker.FileRetentionRetainUntilTimestamp,\n ) === true\n ) {\n return { isClientAuthorizedToRead: false, value: null }\n }\n\n const rawMode = optionalHeader(headers, DownloadHeaderName.FileRetentionMode)\n const rawRetainUntilTimestamp = optionalHeader(\n headers,\n DownloadHeaderName.FileRetentionRetainUntilTimestamp,\n )\n if (rawMode === undefined && rawRetainUntilTimestamp === undefined) return undefined\n return {\n isClientAuthorizedToRead: true,\n value: {\n mode: parseRetentionMode(rawMode, headerParseIssues),\n retainUntilTimestamp: parseRetentionTimestamp(rawRetainUntilTimestamp, headerParseIssues),\n },\n }\n}\n\nfunction parseRetentionMode(\n rawMode: string | undefined,\n headerParseIssues: DownloadHeaderParseIssue[],\n): FileRetentionValue['mode'] {\n if (rawMode === undefined) return null\n if (rawMode === RetentionMode.Compliance || rawMode === RetentionMode.Governance) {\n return rawMode\n }\n headerParseIssues.push({ headerName: DownloadHeaderName.FileRetentionMode, value: rawMode })\n return null\n}\n\nfunction parseRetentionTimestamp(\n rawTimestamp: string | undefined,\n headerParseIssues: DownloadHeaderParseIssue[],\n): number | null {\n if (rawTimestamp === undefined) return null\n if (!/^\\d+$/.test(rawTimestamp)) {\n headerParseIssues.push({\n headerName: DownloadHeaderName.FileRetentionRetainUntilTimestamp,\n value: rawTimestamp,\n })\n return null\n }\n const parsed = Number.parseInt(rawTimestamp, 10)\n if (Number.isFinite(parsed)) return parsed\n headerParseIssues.push({\n headerName: DownloadHeaderName.FileRetentionRetainUntilTimestamp,\n value: rawTimestamp,\n })\n return null\n}\n\nfunction parseDownloadLegalHold(\n headers: Headers,\n clientUnauthorizedToRead: DownloadHeaders['clientUnauthorizedToRead'],\n headerParseIssues: DownloadHeaderParseIssue[],\n): DownloadHeaders['legalHold'] {\n if (clientUnauthorizedToRead?.includes(DownloadClientUnauthorizedToReadMarker.FileLegalHold)) {\n return { isClientAuthorizedToRead: false, value: null }\n }\n\n const rawLegalHold = optionalHeader(headers, DownloadHeaderName.FileLegalHold)\n if (rawLegalHold === undefined) return undefined\n if (rawLegalHold === LegalHoldValue.On || rawLegalHold === LegalHoldValue.Off) {\n return { isClientAuthorizedToRead: true, value: rawLegalHold }\n }\n headerParseIssues.push({ headerName: DownloadHeaderName.FileLegalHold, value: rawLegalHold })\n return { isClientAuthorizedToRead: true, value: null }\n}\n\nfunction parseClientUnauthorizedToRead(\n headers: Headers,\n headerParseIssues: DownloadHeaderParseIssue[],\n): DownloadHeaders['clientUnauthorizedToRead'] {\n const value = optionalHeader(headers, DownloadHeaderName.ClientUnauthorizedToRead)\n if (value === undefined) return undefined\n const headerNames = value\n .split(',')\n .map((header) => header.trim())\n .filter((header) => header.length > 0)\n const knownHeaderNames = headerNames.filter(isDownloadClientUnauthorizedToReadMarker)\n for (const headerName of headerNames) {\n if (!isDownloadClientUnauthorizedToReadMarker(headerName)) {\n headerParseIssues.push({\n headerName: DownloadHeaderName.ClientUnauthorizedToRead,\n value: headerName,\n })\n }\n }\n return knownHeaderNames.length > 0 ? knownHeaderNames : undefined\n}\n\nfunction isDownloadClientUnauthorizedToReadMarker(\n headerName: string,\n): headerName is DownloadClientUnauthorizedToReadMarker {\n return Object.values(DownloadClientUnauthorizedToReadMarker).includes(\n headerName as DownloadClientUnauthorizedToReadMarker,\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuIA,eAAsB,aACpB,KACA,aACA,SACyB;CACzB,MAAM,OAAO,MAAM,IAAI,iBACrB,YAAY,eAAe,GAC3B,YAAY,aAAa,GACzB,QAAQ,QACR,qBAAqB,OAAO,CAC9B;CAEA,MAAM,UAAU,uBAAuB,KAAK,OAAO;CACnD,OAAO;EACL;EAGA,MAAM,oBAAoB,KAAK,QAAQ,YAAY,GAAG,SAAS,OAAO;CACxE;AACF;;;;;;;;;;;;;;AAeA,eAAsB,eACpB,KACA,aACA,SACyB;CACzB,MAAM,OAAO,MAAM,IAAI,mBACrB,YAAY,eAAe,GAC3B,YAAY,aAAa,GACzB,QAAQ,YACR,QAAQ,UACR,qBAAqB,OAAO,CAC9B;CAEA,MAAM,UAAU,uBAAuB,KAAK,OAAO;CACnD,OAAO;EACL;EACA,MAAM,oBAAoB,KAAK,QAAQ,YAAY,GAAG,SAAS,OAAO;CACxE;AACF;;;;;;;;;;;;;;;;;AAkBA,eAAsB,SACpB,KACA,aACA,SACqB;CACrB,MAAM,OAAO,MAAM,IAAI,iBACrB,YAAY,eAAe,GAC3B,YAAY,aAAa,GACzB,QAAQ,QACR;EAAE,GAAG,qBAAqB,OAAO;EAAG,QAAQ;CAAO,CACrD;CAMA,IAAI,KAAK,SAAS,MAAM;EAGtB,MAAM,OAAO,KAAK;EAClB,MAAM,iBAAiB,KAAK,OAAO,CAAC;CACtC;CACA,OAAO,EAAE,SAAS,uBAAuB,KAAK,OAAO,EAAE;AACzD;;;;;;;;;;;;;;;;;;AAmBA,eAAsB,WACpB,KACA,aACA,SACqB;CACrB,MAAM,OAAO,MAAM,IAAI,mBACrB,YAAY,eAAe,GAC3B,YAAY,aAAa,GACzB,QAAQ,YACR,QAAQ,UACR;EAAE,GAAG,qBAAqB,OAAO;EAAG,QAAQ;CAAO,CACrD;CACA,IAAI,KAAK,SAAS,MAAM;EAGtB,MAAM,OAAO,KAAK;EAClB,MAAM,iBAAiB,KAAK,OAAO,CAAC;CACtC;CACA,OAAO,EAAE,SAAS,uBAAuB,KAAK,OAAO,EAAE;AACzD;;;;;;;;;;AAWA,SAAS,qBAAqB,SAAqD;CACjF,OAAO;EACL,GAAI,QAAQ,WAAW,KAAA,IAAY,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;EACjE,GAAI,QAAQ,UAAU,KAAA,IAAY,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;EAC9D,GAAI,QAAQ,yBAAyB,KAAA,IACjC,EAAE,sBAAsB,QAAQ,qBAAqB,IACrD,CAAC;EACL,GAAI,QAAQ,yBAAyB,KAAA,IACjC,EAAE,sBAAsB,QAAQ,qBAAqB,IACrD,CAAC;EACL,GAAI,QAAQ,sBAAsB,KAAA,IAC9B,EAAE,mBAAmB,QAAQ,kBAAkB,IAC/C,CAAC;EACL,GAAI,QAAQ,sBAAsB,KAAA,IAC9B,EAAE,mBAAmB,QAAQ,kBAAkB,IAC/C,CAAC;EACL,GAAI,QAAQ,kBAAkB,KAAA,IAAY,EAAE,eAAe,QAAQ,cAAc,IAAI,CAAC;EACtF,GAAI,QAAQ,mBAAmB,KAAA,IAAY,EAAE,gBAAgB,QAAQ,eAAe,IAAI,CAAC;EACzF,GAAI,QAAQ,cAAc,KAAA,IAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;EAC1E,GAAI,QAAQ,WAAW,KAAA,IAAY,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;CACnE;AACF;;;;;;;AAQA,SAAS,cAA0C;CACjD,OAAO,IAAI,eAAe,EACxB,MAAM,YAAY;EAChB,WAAW,MAAM;CACnB,EACF,CAAC;AACH;;;;;;;;;;;;;;;AAgBA,SAAS,oBACP,MACA,SACA,SAC4B;CAG5B,OAAO,mBAFc,QAAQ,WAAW,UAAU,QAAQ,UAAU,KAAA,IAChC,qBAAqB,MAAM,QAAQ,WAAW,IAAI,MAGpF,QAAQ,eACR,QAAQ,YACR,QAAQ,sBACV;AACF;;;;;;;;;;;;;;;AAgBA,SAAS,mBACP,MACA,YACA,UACA,wBAC4B;CAC5B,IAAI,aAAa,KAAA,GAAW,OAAO;CACnC,MAAM,UAAU,IAAI,gBAAgB,UAAU,YAAY,GAAG,EAC3D,GAAI,2BAA2B,KAAA,IAAY,EAAE,eAAe,uBAAuB,IAAI,CAAC,EAC1F,CAAC;CACD,MAAM,SAAS,KAAK,UAAU;CAC9B,IAAI,WAAW;CAEf,SAAS,gBAAsB;EAC7B,IAAI,UAAU;EACd,WAAW;EACX,OAAO,YAAY;CACrB;CAEA,OAAO,IAAI,eAA2B;EACpC,MAAM,KAAK,YAAY;GACrB,IAAI;IACF,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,KAAK;IAC1C,IAAI,MAAM;KACR,QAAQ,aAAa;KACrB,QAAQ,QAAQ;KAChB,cAAc;KACd,WAAW,MAAM;KACjB;IACF;IACA,QAAQ,SAAS,MAAM,UAAU;IACjC,WAAW,QAAQ,KAAK;GAC1B,SAAS,KAAK;IACZ,QAAQ,QAAQ;IAChB,cAAc;IACd,MAAM;GACR;EACF;EACA,MAAM,OAAO,QAAQ;GACnB,QAAQ,QAAQ;GAChB,IAAI;IACF,MAAM,OAAO,OAAO,MAAM;GAC5B,UAAU;IACR,cAAc;GAChB;EACF;CACF,CAAC;AACH;;;;;;;AAQA,SAAS,uBAAuB,SAAmC;CACjE,MAAM,oBAAgD,CAAC;CACvD,MAAM,WAAW,qBAAqB,OAAO;CAC7C,MAAM,2BAA2B,8BAA8B,SAAS,iBAAiB;CACzF,MAAM,qBAAqB,eAAe,SAAS,mBAAmB,kBAAkB;CACxF,MAAM,kBAAkB,eAAe,SAAS,mBAAmB,eAAe;CAClF,MAAM,kBAAkB,eAAe,SAAS,mBAAmB,eAAe;CAClF,MAAM,eAAe,eAAe,SAAS,mBAAmB,YAAY;CAC5E,MAAM,UAAU,eAAe,SAAS,mBAAmB,OAAO;CAClE,MAAM,eAAe,eAAe,SAAS,mBAAmB,YAAY;CAC5E,MAAM,uBAAuB,kCAAkC,SAAS,iBAAiB;CACzF,MAAM,gBAAgB,2BACpB,SACA,0BACA,iBACF;CACA,MAAM,YAAY,uBAAuB,SAAS,0BAA0B,iBAAiB;CAE7F,OAAO;EACL,aAAa,QAAQ,IAAI,mBAAmB,WAAW,KAAK;EAC5D,eAAe,OAAO,SAAS,QAAQ,IAAI,mBAAmB,aAAa,KAAK,KAAK,EAAE;EACvF,GAAI,uBAAuB,KAAA,IAAY,EAAE,mBAAmB,IAAI,CAAC;EACjE,GAAI,oBAAoB,KAAA,IAAY,EAAE,gBAAgB,IAAI,CAAC;EAC3D,GAAI,oBAAoB,KAAA,IAAY,EAAE,gBAAgB,IAAI,CAAC;EAC3D,GAAI,iBAAiB,KAAA,IAAY,EAAE,aAAa,IAAI,CAAC;EACrD,GAAI,YAAY,KAAA,IAAY,EAAE,QAAQ,IAAI,CAAC;EAC3C,GAAI,iBAAiB,KAAA,IAAY,EAAE,aAAa,IAAI,CAAC;EAGrD,aAAa,cAAc,QAAQ,IAAI,mBAAmB,WAAW,CAAC;EACtE,QAAQ,OAAS,QAAQ,IAAI,mBAAmB,MAAM,KAAK,EAAE;EAC7D,UAAU,mBAAmB,QAAQ,IAAI,mBAAmB,QAAQ,KAAK,EAAE;EAC3E;EACA,iBAAiB,OAAO,SAAS,QAAQ,IAAI,mBAAmB,eAAe,KAAK,KAAK,EAAE;EAC3F,GAAI,yBAAyB,KAAA,IAAY,EAAE,qBAAqB,IAAI,CAAC;EACrE,GAAI,kBAAkB,KAAA,IAAY,EAAE,cAAc,IAAI,CAAC;EACvD,GAAI,cAAc,KAAA,IAAY,EAAE,UAAU,IAAI,CAAC;EAC/C,GAAI,6BAA6B,KAAA,IAAY,EAAE,yBAAyB,IAAI,CAAC;EAC7E,GAAI,kBAAkB,SAAS,IAAI,EAAE,kBAAkB,IAAI,CAAC;CAC9D;AACF;AAEA,SAAS,eAAe,SAAkB,MAAkC;CAC1E,OAAO,QAAQ,IAAI,IAAI,KAAK,KAAA;AAC9B;AAEA,SAAS,kCACP,SACA,mBAC0C;CAC1C,MAAM,mBAAmB,eAAe,SAAS,mBAAmB,oBAAoB;CACxF,IAAI,qBAAqB,KAAA,GAAW;EAClC,IAAI,qBAAqB,oBAAoB,QAAQ;GACnD,kBAAkB,KAAK;IACrB,YAAY,mBAAmB;IAC/B,OAAO;GACT,CAAC;GACD;EACF;EACA,OAAO;GAAE,MAAM,eAAe;GAAO,WAAW;EAAiB;CACnE;CAEA,MAAM,oBAAoB,eACxB,SACA,mBAAmB,qCACrB;CACA,MAAM,iBAAiB,eACrB,SACA,mBAAmB,kCACrB;CACA,IAAI,sBAAsB,KAAA,KAAa,mBAAmB,KAAA,GAAW,OAAO,KAAA;CAC5E,IAAI,sBAAsB,oBAAoB,QAAQ;EACpD,kBAAkB,KAAK;GACrB,YAAY,mBAAmB;GAC/B,OAAO;EACT,CAAC;EACD;CACF;CACA,OAAO;EAAE,MAAM,eAAe;EAAM,WAAW;EAAmB;CAAe;AACnF;AAEA,SAAS,2BACP,SACA,0BACA,mBACkC;CAClC,IACE,0BAA0B,SAAS,uCAAuC,iBAAiB,MACzF,QACF,0BAA0B,SACxB,uCAAuC,iCACzC,MAAM,MAEN,OAAO;EAAE,0BAA0B;EAAO,OAAO;CAAK;CAGxD,MAAM,UAAU,eAAe,SAAS,mBAAmB,iBAAiB;CAC5E,MAAM,0BAA0B,eAC9B,SACA,mBAAmB,iCACrB;CACA,IAAI,YAAY,KAAA,KAAa,4BAA4B,KAAA,GAAW,OAAO,KAAA;CAC3E,OAAO;EACL,0BAA0B;EAC1B,OAAO;GACL,MAAM,mBAAmB,SAAS,iBAAiB;GACnD,sBAAsB,wBAAwB,yBAAyB,iBAAiB;EAC1F;CACF;AACF;AAEA,SAAS,mBACP,SACA,mBAC4B;CAC5B,IAAI,YAAY,KAAA,GAAW,OAAO;CAClC,IAAI,YAAY,cAAc,cAAc,YAAY,cAAc,YACpE,OAAO;CAET,kBAAkB,KAAK;EAAE,YAAY,mBAAmB;EAAmB,OAAO;CAAQ,CAAC;CAC3F,OAAO;AACT;AAEA,SAAS,wBACP,cACA,mBACe;CACf,IAAI,iBAAiB,KAAA,GAAW,OAAO;CACvC,IAAI,CAAC,QAAQ,KAAK,YAAY,GAAG;EAC/B,kBAAkB,KAAK;GACrB,YAAY,mBAAmB;GAC/B,OAAO;EACT,CAAC;EACD,OAAO;CACT;CACA,MAAM,SAAS,OAAO,SAAS,cAAc,EAAE;CAC/C,IAAI,OAAO,SAAS,MAAM,GAAG,OAAO;CACpC,kBAAkB,KAAK;EACrB,YAAY,mBAAmB;EAC/B,OAAO;CACT,CAAC;CACD,OAAO;AACT;AAEA,SAAS,uBACP,SACA,0BACA,mBAC8B;CAC9B,IAAI,0BAA0B,SAAS,uCAAuC,aAAa,GACzF,OAAO;EAAE,0BAA0B;EAAO,OAAO;CAAK;CAGxD,MAAM,eAAe,eAAe,SAAS,mBAAmB,aAAa;CAC7E,IAAI,iBAAiB,KAAA,GAAW,OAAO,KAAA;CACvC,IAAI,iBAAiB,eAAe,MAAM,iBAAiB,eAAe,KACxE,OAAO;EAAE,0BAA0B;EAAM,OAAO;CAAa;CAE/D,kBAAkB,KAAK;EAAE,YAAY,mBAAmB;EAAe,OAAO;CAAa,CAAC;CAC5F,OAAO;EAAE,0BAA0B;EAAM,OAAO;CAAK;AACvD;AAEA,SAAS,8BACP,SACA,mBAC6C;CAC7C,MAAM,QAAQ,eAAe,SAAS,mBAAmB,wBAAwB;CACjF,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;CAChC,MAAM,cAAc,MACjB,MAAM,GAAG,CAAC,CACV,KAAK,WAAW,OAAO,KAAK,CAAC,CAAC,CAC9B,QAAQ,WAAW,OAAO,SAAS,CAAC;CACvC,MAAM,mBAAmB,YAAY,OAAO,wCAAwC;CACpF,KAAK,MAAM,cAAc,aACvB,IAAI,CAAC,yCAAyC,UAAU,GACtD,kBAAkB,KAAK;EACrB,YAAY,mBAAmB;EAC/B,OAAO;CACT,CAAC;CAGL,OAAO,iBAAiB,SAAS,IAAI,mBAAmB,KAAA;AAC1D;AAEA,SAAS,yCACP,YACsD;CACtD,OAAO,OAAO,OAAO,sCAAsC,CAAC,CAAC,SAC3D,UACF;AACF"}
|
package/dist/errors/index.cjs
CHANGED
|
@@ -12,9 +12,11 @@ const require_errors = require("../types/errors.cjs");
|
|
|
12
12
|
* appropriate subclass.
|
|
13
13
|
*
|
|
14
14
|
* Convention: most `B2Error` subclasses represent failures returned by the B2
|
|
15
|
-
* API. The client-side
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* API. The client-side exceptions are {@link B2BucketConfigurationError},
|
|
16
|
+
* {@link B2RealmConfigurationError}, and {@link B2PartnerAuthorizationError};
|
|
17
|
+
* they extend `B2Error` so validation, realm-, and Partner-authorization
|
|
18
|
+
* failures can be handled with the SDK error hierarchy before or without a
|
|
19
|
+
* server round-trip.
|
|
18
20
|
*
|
|
19
21
|
* Other programming errors and SDK preconditions, such as "not yet authorized",
|
|
20
22
|
* "stream consumed twice", or "called before init", use the native `Error`
|
|
@@ -443,6 +445,137 @@ var ChecksumMismatchError = class extends B2Error {
|
|
|
443
445
|
this.name = "ChecksumMismatchError";
|
|
444
446
|
}
|
|
445
447
|
};
|
|
448
|
+
/** Thrown when a Partner group has reached its maximum member count. */
|
|
449
|
+
var TooManyMembersError = class extends B2Error {
|
|
450
|
+
/**
|
|
451
|
+
* Creates a new TooManyMembersError instance.
|
|
452
|
+
* @param response - Parsed B2 error response body.
|
|
453
|
+
* @param options - Optional metadata from response headers.
|
|
454
|
+
*/
|
|
455
|
+
constructor(response, options) {
|
|
456
|
+
super(response, options);
|
|
457
|
+
this.name = "TooManyMembersError";
|
|
458
|
+
}
|
|
459
|
+
};
|
|
460
|
+
/**
|
|
461
|
+
* Compatibility alias for the issue #167 Partner member-limit error name.
|
|
462
|
+
* @deprecated Use {@link TooManyMembersError}.
|
|
463
|
+
*/
|
|
464
|
+
var TooManyGroupMembersError = TooManyMembersError;
|
|
465
|
+
/** Thrown when a Partner group ID is malformed or does not identify a valid group. */
|
|
466
|
+
var InvalidGroupIdError = class extends B2Error {
|
|
467
|
+
/**
|
|
468
|
+
* Creates a new InvalidGroupIdError instance.
|
|
469
|
+
* @param response - Parsed B2 error response body.
|
|
470
|
+
* @param options - Optional metadata from response headers.
|
|
471
|
+
*/
|
|
472
|
+
constructor(response, options) {
|
|
473
|
+
super(response, options);
|
|
474
|
+
this.name = "InvalidGroupIdError";
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
/** Thrown when a Partner member email address fails validation. */
|
|
478
|
+
var InvalidEmailError = class extends B2Error {
|
|
479
|
+
/**
|
|
480
|
+
* Creates a new InvalidEmailError instance.
|
|
481
|
+
* @param response - Parsed B2 error response body.
|
|
482
|
+
* @param options - Optional metadata from response headers.
|
|
483
|
+
*/
|
|
484
|
+
constructor(response, options) {
|
|
485
|
+
super(response, options);
|
|
486
|
+
this.name = "InvalidEmailError";
|
|
487
|
+
}
|
|
488
|
+
};
|
|
489
|
+
/** Thrown when a Partner API region value is unsupported or malformed. */
|
|
490
|
+
var InvalidRegionError = class extends B2Error {
|
|
491
|
+
/**
|
|
492
|
+
* Creates a new InvalidRegionError instance.
|
|
493
|
+
* @param response - Parsed B2 error response body.
|
|
494
|
+
* @param options - Optional metadata from response headers.
|
|
495
|
+
*/
|
|
496
|
+
constructor(response, options) {
|
|
497
|
+
super(response, options);
|
|
498
|
+
this.name = "InvalidRegionError";
|
|
499
|
+
}
|
|
500
|
+
};
|
|
501
|
+
/** Thrown when a Partner account SMS phone number fails validation. */
|
|
502
|
+
var InvalidSmsPhoneError = class extends B2Error {
|
|
503
|
+
/**
|
|
504
|
+
* Creates a new InvalidSmsPhoneError instance.
|
|
505
|
+
* @param response - Parsed B2 error response body.
|
|
506
|
+
* @param options - Optional metadata from response headers.
|
|
507
|
+
*/
|
|
508
|
+
constructor(response, options) {
|
|
509
|
+
super(response, options);
|
|
510
|
+
this.name = "InvalidSmsPhoneError";
|
|
511
|
+
}
|
|
512
|
+
};
|
|
513
|
+
/**
|
|
514
|
+
* Compatibility alias for the issue #167 Partner SMS-phone error name.
|
|
515
|
+
* @deprecated Use {@link InvalidSmsPhoneError}.
|
|
516
|
+
*/
|
|
517
|
+
var MissingSmsPhoneError = InvalidSmsPhoneError;
|
|
518
|
+
/**
|
|
519
|
+
* Thrown when B2 returns `method_failure`.
|
|
520
|
+
*
|
|
521
|
+
* The documented Partner group-member creation flow uses this code after
|
|
522
|
+
* server-side creation fails and Backblaze rolls back before callers retry.
|
|
523
|
+
* The code itself is classified globally, so this class stays endpoint-neutral.
|
|
524
|
+
*/
|
|
525
|
+
var MethodFailureError = class extends B2Error {
|
|
526
|
+
/** Always `false` because callers should decide when a documented operation-level retry is safe. */
|
|
527
|
+
retryable = false;
|
|
528
|
+
/**
|
|
529
|
+
* Creates a new MethodFailureError instance.
|
|
530
|
+
* @param response - Parsed B2 error response body.
|
|
531
|
+
* @param options - Optional metadata from response headers.
|
|
532
|
+
*/
|
|
533
|
+
constructor(response, options) {
|
|
534
|
+
super(response, options);
|
|
535
|
+
this.name = "MethodFailureError";
|
|
536
|
+
}
|
|
537
|
+
};
|
|
538
|
+
/**
|
|
539
|
+
* Compatibility alias for the issue #167 Partner group-member failure name.
|
|
540
|
+
* @deprecated Use {@link MethodFailureError}.
|
|
541
|
+
*/
|
|
542
|
+
var GroupMemberCreationFailedError = MethodFailureError;
|
|
543
|
+
/** Thrown when a Partner group member account ID fails validation. */
|
|
544
|
+
var InvalidMemberAccountIdError = class extends B2Error {
|
|
545
|
+
/**
|
|
546
|
+
* Creates a new InvalidMemberAccountIdError instance.
|
|
547
|
+
* @param response - Parsed B2 error response body.
|
|
548
|
+
* @param options - Optional metadata from response headers.
|
|
549
|
+
*/
|
|
550
|
+
constructor(response, options) {
|
|
551
|
+
super(response, options);
|
|
552
|
+
this.name = "InvalidMemberAccountIdError";
|
|
553
|
+
}
|
|
554
|
+
};
|
|
555
|
+
/** Thrown when an account ID fails Partner or Computer Backup API validation. */
|
|
556
|
+
var InvalidAccountIdError = class extends B2Error {
|
|
557
|
+
/**
|
|
558
|
+
* Creates a new InvalidAccountIdError instance.
|
|
559
|
+
* @param response - Parsed B2 error response body.
|
|
560
|
+
* @param options - Optional metadata from response headers.
|
|
561
|
+
*/
|
|
562
|
+
constructor(response, options) {
|
|
563
|
+
super(response, options);
|
|
564
|
+
this.name = "InvalidAccountIdError";
|
|
565
|
+
}
|
|
566
|
+
};
|
|
567
|
+
/** Thrown when a Computer Backup computer ID fails validation. */
|
|
568
|
+
var InvalidComputerIdError = class extends B2Error {
|
|
569
|
+
/**
|
|
570
|
+
* Creates a new InvalidComputerIdError instance.
|
|
571
|
+
* @param response - Parsed B2 error response body.
|
|
572
|
+
* @param options - Optional metadata from response headers.
|
|
573
|
+
*/
|
|
574
|
+
constructor(response, options) {
|
|
575
|
+
super(response, options);
|
|
576
|
+
this.name = "InvalidComputerIdError";
|
|
577
|
+
}
|
|
578
|
+
};
|
|
446
579
|
/**
|
|
447
580
|
* Thrown by client-side capability checks when the application key is missing
|
|
448
581
|
* capabilities required by an operation. Not raised by the server.
|
|
@@ -511,6 +644,43 @@ var B2RealmConfigurationError = class extends B2Error {
|
|
|
511
644
|
this.name = "B2RealmConfigurationError";
|
|
512
645
|
}
|
|
513
646
|
};
|
|
647
|
+
/** Thrown when Partner authorization returns unusable Partner/Backup auth data. */
|
|
648
|
+
var B2PartnerAuthorizationError = class extends B2Error {
|
|
649
|
+
/**
|
|
650
|
+
* Creates a new B2PartnerAuthorizationError instance.
|
|
651
|
+
*
|
|
652
|
+
* @param message - Human-readable description of the invalid Partner authorization state.
|
|
653
|
+
*/
|
|
654
|
+
constructor(message) {
|
|
655
|
+
super({
|
|
656
|
+
status: 400,
|
|
657
|
+
code: "bad_request",
|
|
658
|
+
message
|
|
659
|
+
});
|
|
660
|
+
this.name = "B2PartnerAuthorizationError";
|
|
661
|
+
}
|
|
662
|
+
};
|
|
663
|
+
/** Thrown when bucket create/update metadata fails SDK client-side validation. */
|
|
664
|
+
var B2BucketConfigurationError = class extends B2Error {
|
|
665
|
+
/** The request field that failed validation. */
|
|
666
|
+
field;
|
|
667
|
+
/**
|
|
668
|
+
* Creates a new B2BucketConfigurationError instance.
|
|
669
|
+
*
|
|
670
|
+
* @param field - The bucket configuration field that failed validation.
|
|
671
|
+
* @param message - Human-readable validation failure.
|
|
672
|
+
* @param code - B2-style error code for the rejected field.
|
|
673
|
+
*/
|
|
674
|
+
constructor(field, message, code = "bad_request") {
|
|
675
|
+
super({
|
|
676
|
+
status: 400,
|
|
677
|
+
code,
|
|
678
|
+
message
|
|
679
|
+
});
|
|
680
|
+
this.name = "B2BucketConfigurationError";
|
|
681
|
+
this.field = field;
|
|
682
|
+
}
|
|
683
|
+
};
|
|
514
684
|
/** Thrown when the SDK refuses to follow an HTTP redirect automatically. */
|
|
515
685
|
var B2RedirectError = class extends Error {
|
|
516
686
|
/** Always `false` because a blocked redirect is deterministic. */
|
|
@@ -630,6 +800,7 @@ function classifyKnownError(response, code, options) {
|
|
|
630
800
|
case "duplicate_bucket_name": return new DuplicateBucketNameError(response, options);
|
|
631
801
|
case "too_many_buckets": return new TooManyBucketsError(response, options);
|
|
632
802
|
case "too_many_files": return new TooManyFilesError(response, options);
|
|
803
|
+
case "too_many_members": return new TooManyMembersError(response, options);
|
|
633
804
|
case "cap_exceeded":
|
|
634
805
|
case "storage_cap_exceeded":
|
|
635
806
|
case "transaction_cap_exceeded":
|
|
@@ -638,8 +809,15 @@ function classifyKnownError(response, code, options) {
|
|
|
638
809
|
case "service_unavailable": return new ServiceUnavailableError(response, options);
|
|
639
810
|
case "internal_error": return new InternalError(response, options);
|
|
640
811
|
case "bad_json": return new BadJsonError(response, options);
|
|
812
|
+
case "invalid_account_id": return new InvalidAccountIdError(response, options);
|
|
641
813
|
case "invalid_bucket_id": return new InvalidBucketIdError(response, options);
|
|
642
814
|
case "invalid_bucket_info": return new InvalidBucketInfoError(response, options);
|
|
815
|
+
case "invalid_computer_id": return new InvalidComputerIdError(response, options);
|
|
816
|
+
case "invalid_email": return new InvalidEmailError(response, options);
|
|
817
|
+
case "invalid_group_id": return new InvalidGroupIdError(response, options);
|
|
818
|
+
case "invalid_member_account_id": return new InvalidMemberAccountIdError(response, options);
|
|
819
|
+
case "invalid_region": return new InvalidRegionError(response, options);
|
|
820
|
+
case "invalid_sms_phone": return new InvalidSmsPhoneError(response, options);
|
|
643
821
|
case "file_not_present":
|
|
644
822
|
case "no_such_file": return new FileNotPresentError(response, options);
|
|
645
823
|
case "out_of_range": return new OutOfRangeError(response, options);
|
|
@@ -648,6 +826,7 @@ function classifyKnownError(response, code, options) {
|
|
|
648
826
|
case "invalid_file_name": return new InvalidFileNameError(response, options);
|
|
649
827
|
case "invalid_file_info": return new InvalidFileInfoError(response, options);
|
|
650
828
|
case "invalid_part_number": return new InvalidPartNumberError(response, options);
|
|
829
|
+
case "method_failure": return new MethodFailureError(response, options);
|
|
651
830
|
case "bad_sha1_checksum": return new ChecksumMismatchError(response, options);
|
|
652
831
|
default: return assertNever(code);
|
|
653
832
|
}
|
|
@@ -682,8 +861,10 @@ function classifyError(response, options) {
|
|
|
682
861
|
}
|
|
683
862
|
//#endregion
|
|
684
863
|
exports.AccessDeniedError = AccessDeniedError;
|
|
864
|
+
exports.B2BucketConfigurationError = B2BucketConfigurationError;
|
|
685
865
|
exports.B2Error = B2Error;
|
|
686
866
|
exports.B2InsufficientCapabilityError = B2InsufficientCapabilityError;
|
|
867
|
+
exports.B2PartnerAuthorizationError = B2PartnerAuthorizationError;
|
|
687
868
|
exports.B2RealmConfigurationError = B2RealmConfigurationError;
|
|
688
869
|
exports.B2RedirectError = B2RedirectError;
|
|
689
870
|
exports.B2SsrfError = B2SsrfError;
|
|
@@ -699,15 +880,25 @@ exports.DuplicateBucketNameError = DuplicateBucketNameError;
|
|
|
699
880
|
exports.ExpiredAuthTokenError = ExpiredAuthTokenError;
|
|
700
881
|
exports.FileNotPresentError = FileNotPresentError;
|
|
701
882
|
exports.FinishLargeFileResponseBodyError = FinishLargeFileResponseBodyError;
|
|
883
|
+
exports.GroupMemberCreationFailedError = GroupMemberCreationFailedError;
|
|
702
884
|
exports.InternalError = InternalError;
|
|
885
|
+
exports.InvalidAccountIdError = InvalidAccountIdError;
|
|
703
886
|
exports.InvalidBucketIdError = InvalidBucketIdError;
|
|
704
887
|
exports.InvalidBucketInfoError = InvalidBucketInfoError;
|
|
705
888
|
exports.InvalidBucketNameError = InvalidBucketNameError;
|
|
889
|
+
exports.InvalidComputerIdError = InvalidComputerIdError;
|
|
890
|
+
exports.InvalidEmailError = InvalidEmailError;
|
|
706
891
|
exports.InvalidFileIdError = InvalidFileIdError;
|
|
707
892
|
exports.InvalidFileInfoError = InvalidFileInfoError;
|
|
708
893
|
exports.InvalidFileNameError = InvalidFileNameError;
|
|
894
|
+
exports.InvalidGroupIdError = InvalidGroupIdError;
|
|
895
|
+
exports.InvalidMemberAccountIdError = InvalidMemberAccountIdError;
|
|
709
896
|
exports.InvalidPartNumberError = InvalidPartNumberError;
|
|
897
|
+
exports.InvalidRegionError = InvalidRegionError;
|
|
898
|
+
exports.InvalidSmsPhoneError = InvalidSmsPhoneError;
|
|
899
|
+
exports.MethodFailureError = MethodFailureError;
|
|
710
900
|
exports.MethodNotAllowedError = MethodNotAllowedError;
|
|
901
|
+
exports.MissingSmsPhoneError = MissingSmsPhoneError;
|
|
711
902
|
exports.NetworkError = NetworkError;
|
|
712
903
|
exports.NotFoundError = NotFoundError;
|
|
713
904
|
exports.OutOfRangeError = OutOfRangeError;
|
|
@@ -717,6 +908,8 @@ exports.ResumeFileIdMismatchError = ResumeFileIdMismatchError;
|
|
|
717
908
|
exports.ServiceUnavailableError = ServiceUnavailableError;
|
|
718
909
|
exports.TooManyBucketsError = TooManyBucketsError;
|
|
719
910
|
exports.TooManyFilesError = TooManyFilesError;
|
|
911
|
+
exports.TooManyGroupMembersError = TooManyGroupMembersError;
|
|
912
|
+
exports.TooManyMembersError = TooManyMembersError;
|
|
720
913
|
exports.TooManyRequestsError = TooManyRequestsError;
|
|
721
914
|
exports.UploadResponseBodyError = UploadResponseBodyError;
|
|
722
915
|
exports.classifyError = classifyError;
|