@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/types/upload.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { EncryptionSetting, PublicEncryptionSetting } from './encryption.js';
|
|
2
|
-
import { FileAction } from './file.js';
|
|
2
|
+
import { FileAction, ReplicationStatus } from './file.js';
|
|
3
3
|
import { BucketId, LargeFileId } from './ids.js';
|
|
4
|
-
import { FileRetentionValue, LegalHoldValue } from './lock.js';
|
|
4
|
+
import { FileRetentionValue, LegalHoldValue, ReadableFileRetention, ReadableLegalHold } from './lock.js';
|
|
5
|
+
export type { ReadableFileRetention, ReadableLegalHold } from './lock.js';
|
|
5
6
|
/** Request parameters for the `b2_get_upload_url` API call. */
|
|
6
7
|
export interface GetUploadUrlRequest {
|
|
7
8
|
/** Bucket to get an upload URL for. */
|
|
@@ -19,6 +20,10 @@ export interface GetUploadUrlResponse {
|
|
|
19
20
|
/**
|
|
20
21
|
* Headers required when uploading a file via `b2_upload_file`.
|
|
21
22
|
* Sent as HTTP headers on the upload POST request.
|
|
23
|
+
*
|
|
24
|
+
* Pass `contentDisposition`, `contentLanguage`, `expires`, `cacheControl`, and
|
|
25
|
+
* `contentEncoding` as raw (unencoded) download-header values. The SDK
|
|
26
|
+
* percent-encodes them as B2 file-info metadata when uploading.
|
|
22
27
|
*/
|
|
23
28
|
export interface UploadFileHeaders {
|
|
24
29
|
/** Authorization token from `b2_get_upload_url`. */
|
|
@@ -41,6 +46,12 @@ export interface UploadFileHeaders {
|
|
|
41
46
|
readonly legalHold?: LegalHoldValue;
|
|
42
47
|
/** Optional last-modified timestamp in milliseconds (stored as `src_last_modified_millis` in file info). */
|
|
43
48
|
readonly lastModifiedMillis?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Optional B2 upload timestamp override in milliseconds since epoch.
|
|
51
|
+
* Sets the file version `uploadTimestamp`; distinct from `lastModifiedMillis` metadata.
|
|
52
|
+
* Requires B2 account enablement for Custom Upload Timestamp.
|
|
53
|
+
*/
|
|
54
|
+
readonly customUploadTimestamp?: number;
|
|
44
55
|
/** Optional Content-Disposition header value for downloads. */
|
|
45
56
|
readonly contentDisposition?: string;
|
|
46
57
|
/** Optional Content-Language header value for downloads. */
|
|
@@ -62,6 +73,13 @@ export interface StartLargeFileRequest {
|
|
|
62
73
|
readonly contentType: string;
|
|
63
74
|
/** Optional user-defined key-value metadata for the file. */
|
|
64
75
|
readonly fileInfo?: Record<string, string>;
|
|
76
|
+
/**
|
|
77
|
+
* Optional B2 upload timestamp override in milliseconds since epoch, as a decimal string.
|
|
78
|
+
* `null` is accepted and ignored by B2.
|
|
79
|
+
* Sets the file version `uploadTimestamp`; distinct from `src_last_modified_millis` metadata.
|
|
80
|
+
* Requires B2 account enablement for Custom Upload Timestamp.
|
|
81
|
+
*/
|
|
82
|
+
readonly customUploadTimestamp?: string | null;
|
|
65
83
|
/** Optional server-side encryption setting. */
|
|
66
84
|
readonly serverSideEncryption?: EncryptionSetting;
|
|
67
85
|
/** Optional Object Lock retention for the file. */
|
|
@@ -69,34 +87,27 @@ export interface StartLargeFileRequest {
|
|
|
69
87
|
/** Optional legal hold for the file. */
|
|
70
88
|
readonly legalHold?: LegalHoldValue;
|
|
71
89
|
}
|
|
72
|
-
/** Object Lock retention settings as returned by B2 response objects. */
|
|
73
|
-
export interface ReadableFileRetention {
|
|
74
|
-
/** Whether the caller is authorized to read retention settings. */
|
|
75
|
-
readonly isClientAuthorizedToRead: boolean;
|
|
76
|
-
/** Retention settings, or null when none are set or unreadable. */
|
|
77
|
-
readonly value: FileRetentionValue | null;
|
|
78
|
-
}
|
|
79
|
-
/** Legal hold status as returned by B2 response objects. */
|
|
80
|
-
export interface ReadableLegalHold {
|
|
81
|
-
/** Whether the caller is authorized to read legal hold status. */
|
|
82
|
-
readonly isClientAuthorizedToRead: boolean;
|
|
83
|
-
/** Legal hold value, or null when none is set or unreadable. */
|
|
84
|
-
readonly value: LegalHoldValue | null;
|
|
85
|
-
}
|
|
86
90
|
/** Optional metadata fields B2 may return for unfinished large-file records. */
|
|
87
91
|
export interface UnfinishedLargeFileMetadata {
|
|
88
92
|
/** Action that created this unfinished file version. */
|
|
89
93
|
readonly action?: FileAction;
|
|
90
94
|
/** When present, always 0 for unfinished large files. */
|
|
91
95
|
readonly contentLength?: number;
|
|
92
|
-
/**
|
|
93
|
-
|
|
96
|
+
/**
|
|
97
|
+
* When present for documented B2 unfinished large files, this is `null`:
|
|
98
|
+
* B2's `'none'` wire sentinel is normalized to `null`. If B2 omits the
|
|
99
|
+
* field, it remains `undefined`; the `string` arm is retained for
|
|
100
|
+
* forward-compatible or non-standard response values.
|
|
101
|
+
*/
|
|
102
|
+
readonly contentSha1?: string | null;
|
|
94
103
|
/** When present, always null for unfinished large files. */
|
|
95
104
|
readonly contentMd5?: string | null;
|
|
96
105
|
/** Object Lock retention settings for this unfinished file, when readable. */
|
|
97
106
|
readonly fileRetention?: ReadableFileRetention;
|
|
98
107
|
/** Legal hold status for this unfinished file, when readable. */
|
|
99
108
|
readonly legalHold?: ReadableLegalHold;
|
|
109
|
+
/** Uppercase B2 replication status when this unfinished file is covered by a replication rule. */
|
|
110
|
+
readonly replicationStatus?: ReplicationStatus;
|
|
100
111
|
/** Server-side encryption applied to this unfinished file. */
|
|
101
112
|
readonly serverSideEncryption?: PublicEncryptionSetting;
|
|
102
113
|
/** UTC timestamp (milliseconds) when this unfinished upload was started. */
|
|
@@ -157,6 +168,8 @@ export interface UploadPartResponse {
|
|
|
157
168
|
readonly contentLength: number;
|
|
158
169
|
/** SHA-1 checksum of the uploaded part content. */
|
|
159
170
|
readonly contentSha1: string;
|
|
171
|
+
/** MD5 checksum of the uploaded part content, or null if not available. */
|
|
172
|
+
readonly contentMd5: string | null;
|
|
160
173
|
/** Server-side encryption applied to this part. */
|
|
161
174
|
readonly serverSideEncryption: PublicEncryptionSetting;
|
|
162
175
|
/** UTC timestamp (milliseconds) when this part was uploaded. */
|
|
@@ -240,6 +253,10 @@ export interface PartInfo {
|
|
|
240
253
|
readonly contentLength: number;
|
|
241
254
|
/** SHA-1 checksum of this part's content. */
|
|
242
255
|
readonly contentSha1: string;
|
|
256
|
+
/** MD5 checksum of this part's content, or null if not available. */
|
|
257
|
+
readonly contentMd5: string | null;
|
|
258
|
+
/** Server-side encryption applied to this part. */
|
|
259
|
+
readonly serverSideEncryption: PublicEncryptionSetting;
|
|
243
260
|
/** UTC timestamp (milliseconds) when this part was uploaded. */
|
|
244
261
|
readonly uploadTimestamp: number;
|
|
245
262
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/types/upload.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/types/upload.js"],"names":[],"mappings":"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"}
|
|
@@ -39,53 +39,8 @@ function throwRejectedOrAbortReason(settled, abortScope) {
|
|
|
39
39
|
/* v8 ignore next -- Defensive fallback for unexpected task rejections outside the abort scope. */
|
|
40
40
|
throw rejected.reason;
|
|
41
41
|
}
|
|
42
|
-
/**
|
|
43
|
-
* Returns the observable reason for an aborted signal.
|
|
44
|
-
* @param signal - Aborted signal to inspect.
|
|
45
|
-
*
|
|
46
|
-
* @returns The signal's reason, or a standard AbortError when the runtime did not provide one.
|
|
47
|
-
*/
|
|
48
|
-
function abortReason(signal) {
|
|
49
|
-
return signal.reason ?? new DOMException("Aborted", "AbortError");
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Races a request promise against an abort signal.
|
|
53
|
-
*
|
|
54
|
-
* The underlying request must still receive the same signal so transports can
|
|
55
|
-
* cancel their network work. This helper makes callers stop waiting promptly
|
|
56
|
-
* even when a test double or custom transport ignores the signal.
|
|
57
|
-
*
|
|
58
|
-
* @param promise - Request promise to observe.
|
|
59
|
-
* @param signal - Signal that should stop waiting for the request.
|
|
60
|
-
*
|
|
61
|
-
* @returns The request result if it settles before the signal aborts.
|
|
62
|
-
*
|
|
63
|
-
* @throws The abort reason if the signal aborts first, or the request rejection.
|
|
64
|
-
*/
|
|
65
|
-
async function raceWithAbort(promise, signal) {
|
|
66
|
-
if (signal.aborted) {
|
|
67
|
-
promise.catch(() => {});
|
|
68
|
-
throw abortReason(signal);
|
|
69
|
-
}
|
|
70
|
-
let removeAbortListener;
|
|
71
|
-
const abort = new Promise((_, reject) => {
|
|
72
|
-
const onAbort = () => reject(abortReason(signal));
|
|
73
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
74
|
-
removeAbortListener = () => signal.removeEventListener("abort", onAbort);
|
|
75
|
-
});
|
|
76
|
-
try {
|
|
77
|
-
return await Promise.race([promise, abort]);
|
|
78
|
-
} catch (err) {
|
|
79
|
-
if (signal.aborted) promise.catch(() => {});
|
|
80
|
-
throw err;
|
|
81
|
-
} finally {
|
|
82
|
-
removeAbortListener?.();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
42
|
//#endregion
|
|
86
|
-
exports.abortReason = abortReason;
|
|
87
43
|
exports.createAbortScope = createAbortScope;
|
|
88
|
-
exports.raceWithAbort = raceWithAbort;
|
|
89
44
|
exports.throwRejectedOrAbortReason = throwRejectedOrAbortReason;
|
|
90
45
|
|
|
91
46
|
//# sourceMappingURL=abort-scope.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abort-scope.cjs","names":[],"sources":["../../src/upload/abort-scope.ts"],"sourcesContent":["/** Shared abort scope for multipart work that fans out into concurrent tasks. */\nexport interface AbortScope {\n /** Signal linked to the caller signal and to task-level failures. */\n readonly signal: AbortSignal\n /** Abort the scope if it has not already been aborted. */\n abort(reason: unknown): void\n /** Detach any upstream abort listener. */\n dispose(): void\n}\n\n/**\n * Creates an abort scope linked to an optional upstream signal.\n * Task failures can abort the same scope so sibling tasks stop promptly.\n * @param upstream - Caller-provided abort signal, if any.\n *\n * @returns A linked abort scope.\n */\nexport function createAbortScope(upstream: AbortSignal | undefined): AbortScope {\n const controller = new AbortController()\n let upstreamAbort: (() => void) | undefined\n const abort = (reason: unknown): void => {\n if (!controller.signal.aborted) controller.abort(reason)\n }\n\n if (upstream?.aborted === true) {\n abort(upstream.reason)\n } else if (upstream !== undefined) {\n upstreamAbort = () => abort(upstream.reason)\n upstream.addEventListener('abort', upstreamAbort, { once: true })\n }\n\n return {\n signal: controller.signal,\n abort,\n dispose() {\n if (upstreamAbort !== undefined) upstream?.removeEventListener('abort', upstreamAbort)\n },\n }\n}\n\n/**\n * Throws the abort reason or first task rejection from a settled task set.\n * @param settled - Results from `Promise.allSettled`.\n * @param abortScope - Scope that coordinated the tasks.\n *\n * @throws The abort reason or first rejected task reason.\n */\nexport function throwRejectedOrAbortReason(\n settled: readonly PromiseSettledResult<unknown>[],\n abortScope: AbortScope,\n): void {\n const rejected = settled.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n )\n if (rejected === undefined) return\n if (abortScope.signal.aborted && abortScope.signal.reason !== undefined) {\n throw abortScope.signal.reason\n }\n /* v8 ignore next -- Defensive fallback for unexpected task rejections outside the abort scope. */\n throw rejected.reason\n}\n
|
|
1
|
+
{"version":3,"file":"abort-scope.cjs","names":[],"sources":["../../src/upload/abort-scope.ts"],"sourcesContent":["/** Shared abort scope for multipart work that fans out into concurrent tasks. */\nexport interface AbortScope {\n /** Signal linked to the caller signal and to task-level failures. */\n readonly signal: AbortSignal\n /** Abort the scope if it has not already been aborted. */\n abort(reason: unknown): void\n /** Detach any upstream abort listener. */\n dispose(): void\n}\n\n/**\n * Creates an abort scope linked to an optional upstream signal.\n * Task failures can abort the same scope so sibling tasks stop promptly.\n * @param upstream - Caller-provided abort signal, if any.\n *\n * @returns A linked abort scope.\n */\nexport function createAbortScope(upstream: AbortSignal | undefined): AbortScope {\n const controller = new AbortController()\n let upstreamAbort: (() => void) | undefined\n const abort = (reason: unknown): void => {\n if (!controller.signal.aborted) controller.abort(reason)\n }\n\n if (upstream?.aborted === true) {\n abort(upstream.reason)\n } else if (upstream !== undefined) {\n upstreamAbort = () => abort(upstream.reason)\n upstream.addEventListener('abort', upstreamAbort, { once: true })\n }\n\n return {\n signal: controller.signal,\n abort,\n dispose() {\n if (upstreamAbort !== undefined) upstream?.removeEventListener('abort', upstreamAbort)\n },\n }\n}\n\n/**\n * Throws the abort reason or first task rejection from a settled task set.\n * @param settled - Results from `Promise.allSettled`.\n * @param abortScope - Scope that coordinated the tasks.\n *\n * @throws The abort reason or first rejected task reason.\n */\nexport function throwRejectedOrAbortReason(\n settled: readonly PromiseSettledResult<unknown>[],\n abortScope: AbortScope,\n): void {\n const rejected = settled.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n )\n if (rejected === undefined) return\n if (abortScope.signal.aborted && abortScope.signal.reason !== undefined) {\n throw abortScope.signal.reason\n }\n /* v8 ignore next -- Defensive fallback for unexpected task rejections outside the abort scope. */\n throw rejected.reason\n}\n"],"mappings":";;;;;;;;AAiBA,SAAgB,iBAAiB,UAA+C;CAC9E,MAAM,aAAa,IAAI,gBAAgB;CACvC,IAAI;CACJ,MAAM,SAAS,WAA0B;EACvC,IAAI,CAAC,WAAW,OAAO,SAAS,WAAW,MAAM,MAAM;CACzD;CAEA,IAAI,UAAU,YAAY,MACxB,MAAM,SAAS,MAAM;MAChB,IAAI,aAAa,KAAA,GAAW;EACjC,sBAAsB,MAAM,SAAS,MAAM;EAC3C,SAAS,iBAAiB,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;CAClE;CAEA,OAAO;EACL,QAAQ,WAAW;EACnB;EACA,UAAU;GACR,IAAI,kBAAkB,KAAA,GAAW,UAAU,oBAAoB,SAAS,aAAa;EACvF;CACF;AACF;;;;;;;;AASA,SAAgB,2BACd,SACA,YACM;CACN,MAAM,WAAW,QAAQ,MACtB,WAA4C,OAAO,WAAW,UACjE;CACA,IAAI,aAAa,KAAA,GAAW;CAC5B,IAAI,WAAW,OAAO,WAAW,WAAW,OAAO,WAAW,KAAA,GAC5D,MAAM,WAAW,OAAO;;CAG1B,MAAM,SAAS;AACjB"}
|
|
@@ -23,26 +23,4 @@ export declare function createAbortScope(upstream: AbortSignal | undefined): Abo
|
|
|
23
23
|
* @throws The abort reason or first rejected task reason.
|
|
24
24
|
*/
|
|
25
25
|
export declare function throwRejectedOrAbortReason(settled: readonly PromiseSettledResult<unknown>[], abortScope: AbortScope): void;
|
|
26
|
-
/**
|
|
27
|
-
* Returns the observable reason for an aborted signal.
|
|
28
|
-
* @param signal - Aborted signal to inspect.
|
|
29
|
-
*
|
|
30
|
-
* @returns The signal's reason, or a standard AbortError when the runtime did not provide one.
|
|
31
|
-
*/
|
|
32
|
-
export declare function abortReason(signal: AbortSignal): unknown;
|
|
33
|
-
/**
|
|
34
|
-
* Races a request promise against an abort signal.
|
|
35
|
-
*
|
|
36
|
-
* The underlying request must still receive the same signal so transports can
|
|
37
|
-
* cancel their network work. This helper makes callers stop waiting promptly
|
|
38
|
-
* even when a test double or custom transport ignores the signal.
|
|
39
|
-
*
|
|
40
|
-
* @param promise - Request promise to observe.
|
|
41
|
-
* @param signal - Signal that should stop waiting for the request.
|
|
42
|
-
*
|
|
43
|
-
* @returns The request result if it settles before the signal aborts.
|
|
44
|
-
*
|
|
45
|
-
* @throws The abort reason if the signal aborts first, or the request rejection.
|
|
46
|
-
*/
|
|
47
|
-
export declare function raceWithAbort<T>(promise: Promise<T>, signal: AbortSignal): Promise<T>;
|
|
48
26
|
//# sourceMappingURL=abort-scope.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abort-scope.d.ts","sourceRoot":"","sources":["../../src/upload/abort-scope.js"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,0DAA0D;IAC1D,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,CAqB9E;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,oBAAoB,CAAC,OAAO,CAAC,EAAE,EACjD,UAAU,EAAE,UAAU,GACrB,IAAI,CAUN
|
|
1
|
+
{"version":3,"file":"abort-scope.d.ts","sourceRoot":"","sources":["../../src/upload/abort-scope.js"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,0DAA0D;IAC1D,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,CAqB9E;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,oBAAoB,CAAC,OAAO,CAAC,EAAE,EACjD,UAAU,EAAE,UAAU,GACrB,IAAI,CAUN"}
|
|
@@ -23,26 +23,4 @@ export declare function createAbortScope(upstream: AbortSignal | undefined): Abo
|
|
|
23
23
|
* @throws The abort reason or first rejected task reason.
|
|
24
24
|
*/
|
|
25
25
|
export declare function throwRejectedOrAbortReason(settled: readonly PromiseSettledResult<unknown>[], abortScope: AbortScope): void;
|
|
26
|
-
/**
|
|
27
|
-
* Returns the observable reason for an aborted signal.
|
|
28
|
-
* @param signal - Aborted signal to inspect.
|
|
29
|
-
*
|
|
30
|
-
* @returns The signal's reason, or a standard AbortError when the runtime did not provide one.
|
|
31
|
-
*/
|
|
32
|
-
export declare function abortReason(signal: AbortSignal): unknown;
|
|
33
|
-
/**
|
|
34
|
-
* Races a request promise against an abort signal.
|
|
35
|
-
*
|
|
36
|
-
* The underlying request must still receive the same signal so transports can
|
|
37
|
-
* cancel their network work. This helper makes callers stop waiting promptly
|
|
38
|
-
* even when a test double or custom transport ignores the signal.
|
|
39
|
-
*
|
|
40
|
-
* @param promise - Request promise to observe.
|
|
41
|
-
* @param signal - Signal that should stop waiting for the request.
|
|
42
|
-
*
|
|
43
|
-
* @returns The request result if it settles before the signal aborts.
|
|
44
|
-
*
|
|
45
|
-
* @throws The abort reason if the signal aborts first, or the request rejection.
|
|
46
|
-
*/
|
|
47
|
-
export declare function raceWithAbort<T>(promise: Promise<T>, signal: AbortSignal): Promise<T>;
|
|
48
26
|
//# sourceMappingURL=abort-scope.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abort-scope.d.ts","sourceRoot":"","sources":["../../src/upload/abort-scope.js"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,0DAA0D;IAC1D,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,CAqB9E;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,oBAAoB,CAAC,OAAO,CAAC,EAAE,EACjD,UAAU,EAAE,UAAU,GACrB,IAAI,CAUN
|
|
1
|
+
{"version":3,"file":"abort-scope.d.ts","sourceRoot":"","sources":["../../src/upload/abort-scope.js"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,0DAA0D;IAC1D,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,0CAA0C;IAC1C,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,CAqB9E;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,oBAAoB,CAAC,OAAO,CAAC,EAAE,EACjD,UAAU,EAAE,UAAU,GACrB,IAAI,CAUN"}
|
|
@@ -39,50 +39,7 @@ function throwRejectedOrAbortReason(settled, abortScope) {
|
|
|
39
39
|
/* v8 ignore next -- Defensive fallback for unexpected task rejections outside the abort scope. */
|
|
40
40
|
throw rejected.reason;
|
|
41
41
|
}
|
|
42
|
-
/**
|
|
43
|
-
* Returns the observable reason for an aborted signal.
|
|
44
|
-
* @param signal - Aborted signal to inspect.
|
|
45
|
-
*
|
|
46
|
-
* @returns The signal's reason, or a standard AbortError when the runtime did not provide one.
|
|
47
|
-
*/
|
|
48
|
-
function abortReason(signal) {
|
|
49
|
-
return signal.reason ?? new DOMException("Aborted", "AbortError");
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Races a request promise against an abort signal.
|
|
53
|
-
*
|
|
54
|
-
* The underlying request must still receive the same signal so transports can
|
|
55
|
-
* cancel their network work. This helper makes callers stop waiting promptly
|
|
56
|
-
* even when a test double or custom transport ignores the signal.
|
|
57
|
-
*
|
|
58
|
-
* @param promise - Request promise to observe.
|
|
59
|
-
* @param signal - Signal that should stop waiting for the request.
|
|
60
|
-
*
|
|
61
|
-
* @returns The request result if it settles before the signal aborts.
|
|
62
|
-
*
|
|
63
|
-
* @throws The abort reason if the signal aborts first, or the request rejection.
|
|
64
|
-
*/
|
|
65
|
-
async function raceWithAbort(promise, signal) {
|
|
66
|
-
if (signal.aborted) {
|
|
67
|
-
promise.catch(() => {});
|
|
68
|
-
throw abortReason(signal);
|
|
69
|
-
}
|
|
70
|
-
let removeAbortListener;
|
|
71
|
-
const abort = new Promise((_, reject) => {
|
|
72
|
-
const onAbort = () => reject(abortReason(signal));
|
|
73
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
74
|
-
removeAbortListener = () => signal.removeEventListener("abort", onAbort);
|
|
75
|
-
});
|
|
76
|
-
try {
|
|
77
|
-
return await Promise.race([promise, abort]);
|
|
78
|
-
} catch (err) {
|
|
79
|
-
if (signal.aborted) promise.catch(() => {});
|
|
80
|
-
throw err;
|
|
81
|
-
} finally {
|
|
82
|
-
removeAbortListener?.();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
42
|
//#endregion
|
|
86
|
-
export {
|
|
43
|
+
export { createAbortScope, throwRejectedOrAbortReason };
|
|
87
44
|
|
|
88
45
|
//# sourceMappingURL=abort-scope.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abort-scope.js","names":[],"sources":["../../src/upload/abort-scope.ts"],"sourcesContent":["/** Shared abort scope for multipart work that fans out into concurrent tasks. */\nexport interface AbortScope {\n /** Signal linked to the caller signal and to task-level failures. */\n readonly signal: AbortSignal\n /** Abort the scope if it has not already been aborted. */\n abort(reason: unknown): void\n /** Detach any upstream abort listener. */\n dispose(): void\n}\n\n/**\n * Creates an abort scope linked to an optional upstream signal.\n * Task failures can abort the same scope so sibling tasks stop promptly.\n * @param upstream - Caller-provided abort signal, if any.\n *\n * @returns A linked abort scope.\n */\nexport function createAbortScope(upstream: AbortSignal | undefined): AbortScope {\n const controller = new AbortController()\n let upstreamAbort: (() => void) | undefined\n const abort = (reason: unknown): void => {\n if (!controller.signal.aborted) controller.abort(reason)\n }\n\n if (upstream?.aborted === true) {\n abort(upstream.reason)\n } else if (upstream !== undefined) {\n upstreamAbort = () => abort(upstream.reason)\n upstream.addEventListener('abort', upstreamAbort, { once: true })\n }\n\n return {\n signal: controller.signal,\n abort,\n dispose() {\n if (upstreamAbort !== undefined) upstream?.removeEventListener('abort', upstreamAbort)\n },\n }\n}\n\n/**\n * Throws the abort reason or first task rejection from a settled task set.\n * @param settled - Results from `Promise.allSettled`.\n * @param abortScope - Scope that coordinated the tasks.\n *\n * @throws The abort reason or first rejected task reason.\n */\nexport function throwRejectedOrAbortReason(\n settled: readonly PromiseSettledResult<unknown>[],\n abortScope: AbortScope,\n): void {\n const rejected = settled.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n )\n if (rejected === undefined) return\n if (abortScope.signal.aborted && abortScope.signal.reason !== undefined) {\n throw abortScope.signal.reason\n }\n /* v8 ignore next -- Defensive fallback for unexpected task rejections outside the abort scope. */\n throw rejected.reason\n}\n
|
|
1
|
+
{"version":3,"file":"abort-scope.js","names":[],"sources":["../../src/upload/abort-scope.ts"],"sourcesContent":["/** Shared abort scope for multipart work that fans out into concurrent tasks. */\nexport interface AbortScope {\n /** Signal linked to the caller signal and to task-level failures. */\n readonly signal: AbortSignal\n /** Abort the scope if it has not already been aborted. */\n abort(reason: unknown): void\n /** Detach any upstream abort listener. */\n dispose(): void\n}\n\n/**\n * Creates an abort scope linked to an optional upstream signal.\n * Task failures can abort the same scope so sibling tasks stop promptly.\n * @param upstream - Caller-provided abort signal, if any.\n *\n * @returns A linked abort scope.\n */\nexport function createAbortScope(upstream: AbortSignal | undefined): AbortScope {\n const controller = new AbortController()\n let upstreamAbort: (() => void) | undefined\n const abort = (reason: unknown): void => {\n if (!controller.signal.aborted) controller.abort(reason)\n }\n\n if (upstream?.aborted === true) {\n abort(upstream.reason)\n } else if (upstream !== undefined) {\n upstreamAbort = () => abort(upstream.reason)\n upstream.addEventListener('abort', upstreamAbort, { once: true })\n }\n\n return {\n signal: controller.signal,\n abort,\n dispose() {\n if (upstreamAbort !== undefined) upstream?.removeEventListener('abort', upstreamAbort)\n },\n }\n}\n\n/**\n * Throws the abort reason or first task rejection from a settled task set.\n * @param settled - Results from `Promise.allSettled`.\n * @param abortScope - Scope that coordinated the tasks.\n *\n * @throws The abort reason or first rejected task reason.\n */\nexport function throwRejectedOrAbortReason(\n settled: readonly PromiseSettledResult<unknown>[],\n abortScope: AbortScope,\n): void {\n const rejected = settled.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n )\n if (rejected === undefined) return\n if (abortScope.signal.aborted && abortScope.signal.reason !== undefined) {\n throw abortScope.signal.reason\n }\n /* v8 ignore next -- Defensive fallback for unexpected task rejections outside the abort scope. */\n throw rejected.reason\n}\n"],"mappings":";;;;;;;;AAiBA,SAAgB,iBAAiB,UAA+C;CAC9E,MAAM,aAAa,IAAI,gBAAgB;CACvC,IAAI;CACJ,MAAM,SAAS,WAA0B;EACvC,IAAI,CAAC,WAAW,OAAO,SAAS,WAAW,MAAM,MAAM;CACzD;CAEA,IAAI,UAAU,YAAY,MACxB,MAAM,SAAS,MAAM;MAChB,IAAI,aAAa,KAAA,GAAW;EACjC,sBAAsB,MAAM,SAAS,MAAM;EAC3C,SAAS,iBAAiB,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;CAClE;CAEA,OAAO;EACL,QAAQ,WAAW;EACnB;EACA,UAAU;GACR,IAAI,kBAAkB,KAAA,GAAW,UAAU,oBAAoB,SAAS,aAAa;EACvF;CACF;AACF;;;;;;;;AASA,SAAgB,2BACd,SACA,YACM;CACN,MAAM,WAAW,QAAQ,MACtB,WAA4C,OAAO,WAAW,UACjE;CACA,IAAI,aAAa,KAAA,GAAW;CAC5B,IAAI,WAAW,OAAO,WAAW,WAAW,OAAO,WAAW,KAAA,GAC5D,MAAM,WAAW,OAAO;;CAG1B,MAAM,SAAS;AACjB"}
|
package/dist/upload/finish.cjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const require_errors_index = require("../errors/index.cjs");
|
|
2
|
+
const require_abort = require("../util/abort.cjs");
|
|
2
3
|
//#region src/upload/finish.ts
|
|
3
4
|
/**
|
|
4
5
|
* Calls `b2_finish_large_file` and classifies failures after dispatch that can
|
|
@@ -42,16 +43,10 @@ function finishLargeFileResponseBodyErrorWithContext(err, context) {
|
|
|
42
43
|
}
|
|
43
44
|
function isAmbiguousFinishDispatchFailure(err, signal) {
|
|
44
45
|
if (err instanceof require_errors_index.NetworkError) return true;
|
|
45
|
-
if (isTimeoutError(err)) return true;
|
|
46
|
+
if (require_abort.isTimeoutError(err)) return true;
|
|
46
47
|
if (signal?.aborted !== true) return false;
|
|
47
48
|
if (signal.reason !== void 0 && Object.is(err, signal.reason)) return true;
|
|
48
|
-
return isAbortError(err);
|
|
49
|
-
}
|
|
50
|
-
function isAbortError(err) {
|
|
51
|
-
return err instanceof DOMException && err.name === "AbortError" || err instanceof Error && err.name === "AbortError";
|
|
52
|
-
}
|
|
53
|
-
function isTimeoutError(err) {
|
|
54
|
-
return err instanceof DOMException && err.name === "TimeoutError" || err instanceof Error && err.name === "TimeoutError";
|
|
49
|
+
return require_abort.isAbortError(err);
|
|
55
50
|
}
|
|
56
51
|
//#endregion
|
|
57
52
|
exports.finishLargeFileWithAbortReconciliation = finishLargeFileWithAbortReconciliation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finish.cjs","names":[],"sources":["../../src/upload/finish.ts"],"sourcesContent":["import type { AccountInfo } from '../auth/account-info.ts'\nimport { FinishLargeFileResponseBodyError, NetworkError } from '../errors/index.ts'\nimport type { RetryOptions } from '../http/retry.ts'\nimport type { RawClient } from '../raw/index.ts'\nimport type { FileVersion } from '../types/file.ts'\nimport type { BucketId, LargeFileId } from '../types/ids.ts'\n\n/** Context for safely finalizing a large file. */\nexport interface FinishLargeFileContext {\n readonly fileId: LargeFileId\n readonly bucketId: BucketId\n readonly fileName: string\n readonly partSha1s: readonly string[]\n readonly signal?: AbortSignal\n readonly retry?: Partial<RetryOptions>\n}\n\n/**\n * Calls `b2_finish_large_file` and classifies failures after dispatch that can\n * hide an already-committed file as ambiguous finish failures.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param context - Finish request data and reconciliation metadata.\n *\n * @returns The completed file version metadata.\n */\nexport async function finishLargeFileWithAbortReconciliation(\n raw: RawClient,\n accountInfo: AccountInfo,\n context: FinishLargeFileContext,\n): Promise<FileVersion> {\n context.signal?.throwIfAborted()\n try {\n return await raw.finishLargeFile(\n accountInfo.getApiUrl(),\n accountInfo.getAuthToken(),\n {\n fileId: context.fileId,\n partSha1Array: context.partSha1s,\n },\n context.signal === undefined && context.retry === undefined\n ? undefined\n : {\n ...(context.signal !== undefined ? { signal: context.signal } : {}),\n ...(context.retry !== undefined ? { retry: context.retry } : {}),\n },\n )\n } catch (err) {\n if (err instanceof FinishLargeFileResponseBodyError) {\n throw finishLargeFileResponseBodyErrorWithContext(err, context)\n }\n if (isAmbiguousFinishDispatchFailure(err, context.signal)) {\n throw new FinishLargeFileResponseBodyError(\n 'b2_finish_large_file failed after dispatch; final file state is ambiguous.',\n {\n cause: err,\n fileId: context.fileId,\n bucketId: context.bucketId,\n fileName: context.fileName,\n },\n )\n }\n throw err\n }\n}\n\nfunction finishLargeFileResponseBodyErrorWithContext(\n err: FinishLargeFileResponseBodyError,\n context: FinishLargeFileContext,\n): FinishLargeFileResponseBodyError {\n if (\n err.fileId === context.fileId &&\n err.bucketId === context.bucketId &&\n err.fileName === context.fileName\n ) {\n return err\n }\n return new FinishLargeFileResponseBodyError(err.message, {\n cause: err.cause ?? err,\n fileId: context.fileId,\n bucketId: context.bucketId,\n fileName: context.fileName,\n })\n}\n\nfunction isAmbiguousFinishDispatchFailure(err: unknown, signal: AbortSignal | undefined): boolean {\n if (err instanceof NetworkError) return true\n if (isTimeoutError(err)) return true\n if (signal?.aborted !== true) return false\n if (signal.reason !== undefined && Object.is(err, signal.reason)) return true\n return isAbortError(err)\n}\n
|
|
1
|
+
{"version":3,"file":"finish.cjs","names":[],"sources":["../../src/upload/finish.ts"],"sourcesContent":["import type { AccountInfo } from '../auth/account-info.ts'\nimport { FinishLargeFileResponseBodyError, NetworkError } from '../errors/index.ts'\nimport type { RetryOptions } from '../http/retry.ts'\nimport type { RawClient } from '../raw/index.ts'\nimport type { FileVersion } from '../types/file.ts'\nimport type { BucketId, LargeFileId } from '../types/ids.ts'\nimport { isAbortError, isTimeoutError } from '../util/abort.ts'\n\n/** Context for safely finalizing a large file. */\nexport interface FinishLargeFileContext {\n readonly fileId: LargeFileId\n readonly bucketId: BucketId\n readonly fileName: string\n readonly partSha1s: readonly string[]\n readonly signal?: AbortSignal\n readonly retry?: Partial<RetryOptions>\n}\n\n/**\n * Calls `b2_finish_large_file` and classifies failures after dispatch that can\n * hide an already-committed file as ambiguous finish failures.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param context - Finish request data and reconciliation metadata.\n *\n * @returns The completed file version metadata.\n */\nexport async function finishLargeFileWithAbortReconciliation(\n raw: RawClient,\n accountInfo: AccountInfo,\n context: FinishLargeFileContext,\n): Promise<FileVersion> {\n context.signal?.throwIfAborted()\n try {\n return await raw.finishLargeFile(\n accountInfo.getApiUrl(),\n accountInfo.getAuthToken(),\n {\n fileId: context.fileId,\n partSha1Array: context.partSha1s,\n },\n context.signal === undefined && context.retry === undefined\n ? undefined\n : {\n ...(context.signal !== undefined ? { signal: context.signal } : {}),\n ...(context.retry !== undefined ? { retry: context.retry } : {}),\n },\n )\n } catch (err) {\n if (err instanceof FinishLargeFileResponseBodyError) {\n throw finishLargeFileResponseBodyErrorWithContext(err, context)\n }\n if (isAmbiguousFinishDispatchFailure(err, context.signal)) {\n throw new FinishLargeFileResponseBodyError(\n 'b2_finish_large_file failed after dispatch; final file state is ambiguous.',\n {\n cause: err,\n fileId: context.fileId,\n bucketId: context.bucketId,\n fileName: context.fileName,\n },\n )\n }\n throw err\n }\n}\n\nfunction finishLargeFileResponseBodyErrorWithContext(\n err: FinishLargeFileResponseBodyError,\n context: FinishLargeFileContext,\n): FinishLargeFileResponseBodyError {\n if (\n err.fileId === context.fileId &&\n err.bucketId === context.bucketId &&\n err.fileName === context.fileName\n ) {\n return err\n }\n return new FinishLargeFileResponseBodyError(err.message, {\n cause: err.cause ?? err,\n fileId: context.fileId,\n bucketId: context.bucketId,\n fileName: context.fileName,\n })\n}\n\nfunction isAmbiguousFinishDispatchFailure(err: unknown, signal: AbortSignal | undefined): boolean {\n if (err instanceof NetworkError) return true\n if (isTimeoutError(err)) return true\n if (signal?.aborted !== true) return false\n if (signal.reason !== undefined && Object.is(err, signal.reason)) return true\n return isAbortError(err)\n}\n"],"mappings":";;;;;;;;;;;;;AA4BA,eAAsB,uCACpB,KACA,aACA,SACsB;CACtB,QAAQ,QAAQ,eAAe;CAC/B,IAAI;EACF,OAAO,MAAM,IAAI,gBACf,YAAY,UAAU,GACtB,YAAY,aAAa,GACzB;GACE,QAAQ,QAAQ;GAChB,eAAe,QAAQ;EACzB,GACA,QAAQ,WAAW,KAAA,KAAa,QAAQ,UAAU,KAAA,IAC9C,KAAA,IACA;GACE,GAAI,QAAQ,WAAW,KAAA,IAAY,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;GACjE,GAAI,QAAQ,UAAU,KAAA,IAAY,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;EAChE,CACN;CACF,SAAS,KAAK;EACZ,IAAI,eAAe,qBAAA,kCACjB,MAAM,4CAA4C,KAAK,OAAO;EAEhE,IAAI,iCAAiC,KAAK,QAAQ,MAAM,GACtD,MAAM,IAAI,qBAAA,iCACR,8EACA;GACE,OAAO;GACP,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,UAAU,QAAQ;EACpB,CACF;EAEF,MAAM;CACR;AACF;AAEA,SAAS,4CACP,KACA,SACkC;CAClC,IACE,IAAI,WAAW,QAAQ,UACvB,IAAI,aAAa,QAAQ,YACzB,IAAI,aAAa,QAAQ,UAEzB,OAAO;CAET,OAAO,IAAI,qBAAA,iCAAiC,IAAI,SAAS;EACvD,OAAO,IAAI,SAAS;EACpB,QAAQ,QAAQ;EAChB,UAAU,QAAQ;EAClB,UAAU,QAAQ;CACpB,CAAC;AACH;AAEA,SAAS,iCAAiC,KAAc,QAA0C;CAChG,IAAI,eAAe,qBAAA,cAAc,OAAO;CACxC,IAAI,cAAA,eAAe,GAAG,GAAG,OAAO;CAChC,IAAI,QAAQ,YAAY,MAAM,OAAO;CACrC,IAAI,OAAO,WAAW,KAAA,KAAa,OAAO,GAAG,KAAK,OAAO,MAAM,GAAG,OAAO;CACzE,OAAO,cAAA,aAAa,GAAG;AACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finish.d.ts","sourceRoot":"","sources":["../../src/upload/finish.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"finish.d.ts","sourceRoot":"","sources":["../../src/upload/finish.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAG5D,kDAAkD;AAClD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CACvC;AAED;;;;;;;;;GASG;AACH,wBAAsB,sCAAsC,CAC1D,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC,CAkCtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finish.d.ts","sourceRoot":"","sources":["../../src/upload/finish.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"finish.d.ts","sourceRoot":"","sources":["../../src/upload/finish.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAG5D,kDAAkD;AAClD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CACvC;AAED;;;;;;;;;GASG;AACH,wBAAsB,sCAAsC,CAC1D,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC,CAkCtB"}
|
package/dist/upload/finish.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FinishLargeFileResponseBodyError, NetworkError } from "../errors/index.js";
|
|
2
|
+
import { isAbortError, isTimeoutError } from "../util/abort.js";
|
|
2
3
|
//#region src/upload/finish.ts
|
|
3
4
|
/**
|
|
4
5
|
* Calls `b2_finish_large_file` and classifies failures after dispatch that can
|
|
@@ -47,12 +48,6 @@ function isAmbiguousFinishDispatchFailure(err, signal) {
|
|
|
47
48
|
if (signal.reason !== void 0 && Object.is(err, signal.reason)) return true;
|
|
48
49
|
return isAbortError(err);
|
|
49
50
|
}
|
|
50
|
-
function isAbortError(err) {
|
|
51
|
-
return err instanceof DOMException && err.name === "AbortError" || err instanceof Error && err.name === "AbortError";
|
|
52
|
-
}
|
|
53
|
-
function isTimeoutError(err) {
|
|
54
|
-
return err instanceof DOMException && err.name === "TimeoutError" || err instanceof Error && err.name === "TimeoutError";
|
|
55
|
-
}
|
|
56
51
|
//#endregion
|
|
57
52
|
export { finishLargeFileWithAbortReconciliation };
|
|
58
53
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finish.js","names":[],"sources":["../../src/upload/finish.ts"],"sourcesContent":["import type { AccountInfo } from '../auth/account-info.ts'\nimport { FinishLargeFileResponseBodyError, NetworkError } from '../errors/index.ts'\nimport type { RetryOptions } from '../http/retry.ts'\nimport type { RawClient } from '../raw/index.ts'\nimport type { FileVersion } from '../types/file.ts'\nimport type { BucketId, LargeFileId } from '../types/ids.ts'\n\n/** Context for safely finalizing a large file. */\nexport interface FinishLargeFileContext {\n readonly fileId: LargeFileId\n readonly bucketId: BucketId\n readonly fileName: string\n readonly partSha1s: readonly string[]\n readonly signal?: AbortSignal\n readonly retry?: Partial<RetryOptions>\n}\n\n/**\n * Calls `b2_finish_large_file` and classifies failures after dispatch that can\n * hide an already-committed file as ambiguous finish failures.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param context - Finish request data and reconciliation metadata.\n *\n * @returns The completed file version metadata.\n */\nexport async function finishLargeFileWithAbortReconciliation(\n raw: RawClient,\n accountInfo: AccountInfo,\n context: FinishLargeFileContext,\n): Promise<FileVersion> {\n context.signal?.throwIfAborted()\n try {\n return await raw.finishLargeFile(\n accountInfo.getApiUrl(),\n accountInfo.getAuthToken(),\n {\n fileId: context.fileId,\n partSha1Array: context.partSha1s,\n },\n context.signal === undefined && context.retry === undefined\n ? undefined\n : {\n ...(context.signal !== undefined ? { signal: context.signal } : {}),\n ...(context.retry !== undefined ? { retry: context.retry } : {}),\n },\n )\n } catch (err) {\n if (err instanceof FinishLargeFileResponseBodyError) {\n throw finishLargeFileResponseBodyErrorWithContext(err, context)\n }\n if (isAmbiguousFinishDispatchFailure(err, context.signal)) {\n throw new FinishLargeFileResponseBodyError(\n 'b2_finish_large_file failed after dispatch; final file state is ambiguous.',\n {\n cause: err,\n fileId: context.fileId,\n bucketId: context.bucketId,\n fileName: context.fileName,\n },\n )\n }\n throw err\n }\n}\n\nfunction finishLargeFileResponseBodyErrorWithContext(\n err: FinishLargeFileResponseBodyError,\n context: FinishLargeFileContext,\n): FinishLargeFileResponseBodyError {\n if (\n err.fileId === context.fileId &&\n err.bucketId === context.bucketId &&\n err.fileName === context.fileName\n ) {\n return err\n }\n return new FinishLargeFileResponseBodyError(err.message, {\n cause: err.cause ?? err,\n fileId: context.fileId,\n bucketId: context.bucketId,\n fileName: context.fileName,\n })\n}\n\nfunction isAmbiguousFinishDispatchFailure(err: unknown, signal: AbortSignal | undefined): boolean {\n if (err instanceof NetworkError) return true\n if (isTimeoutError(err)) return true\n if (signal?.aborted !== true) return false\n if (signal.reason !== undefined && Object.is(err, signal.reason)) return true\n return isAbortError(err)\n}\n
|
|
1
|
+
{"version":3,"file":"finish.js","names":[],"sources":["../../src/upload/finish.ts"],"sourcesContent":["import type { AccountInfo } from '../auth/account-info.ts'\nimport { FinishLargeFileResponseBodyError, NetworkError } from '../errors/index.ts'\nimport type { RetryOptions } from '../http/retry.ts'\nimport type { RawClient } from '../raw/index.ts'\nimport type { FileVersion } from '../types/file.ts'\nimport type { BucketId, LargeFileId } from '../types/ids.ts'\nimport { isAbortError, isTimeoutError } from '../util/abort.ts'\n\n/** Context for safely finalizing a large file. */\nexport interface FinishLargeFileContext {\n readonly fileId: LargeFileId\n readonly bucketId: BucketId\n readonly fileName: string\n readonly partSha1s: readonly string[]\n readonly signal?: AbortSignal\n readonly retry?: Partial<RetryOptions>\n}\n\n/**\n * Calls `b2_finish_large_file` and classifies failures after dispatch that can\n * hide an already-committed file as ambiguous finish failures.\n *\n * @param raw - Low-level B2 API client.\n * @param accountInfo - Authorized account state.\n * @param context - Finish request data and reconciliation metadata.\n *\n * @returns The completed file version metadata.\n */\nexport async function finishLargeFileWithAbortReconciliation(\n raw: RawClient,\n accountInfo: AccountInfo,\n context: FinishLargeFileContext,\n): Promise<FileVersion> {\n context.signal?.throwIfAborted()\n try {\n return await raw.finishLargeFile(\n accountInfo.getApiUrl(),\n accountInfo.getAuthToken(),\n {\n fileId: context.fileId,\n partSha1Array: context.partSha1s,\n },\n context.signal === undefined && context.retry === undefined\n ? undefined\n : {\n ...(context.signal !== undefined ? { signal: context.signal } : {}),\n ...(context.retry !== undefined ? { retry: context.retry } : {}),\n },\n )\n } catch (err) {\n if (err instanceof FinishLargeFileResponseBodyError) {\n throw finishLargeFileResponseBodyErrorWithContext(err, context)\n }\n if (isAmbiguousFinishDispatchFailure(err, context.signal)) {\n throw new FinishLargeFileResponseBodyError(\n 'b2_finish_large_file failed after dispatch; final file state is ambiguous.',\n {\n cause: err,\n fileId: context.fileId,\n bucketId: context.bucketId,\n fileName: context.fileName,\n },\n )\n }\n throw err\n }\n}\n\nfunction finishLargeFileResponseBodyErrorWithContext(\n err: FinishLargeFileResponseBodyError,\n context: FinishLargeFileContext,\n): FinishLargeFileResponseBodyError {\n if (\n err.fileId === context.fileId &&\n err.bucketId === context.bucketId &&\n err.fileName === context.fileName\n ) {\n return err\n }\n return new FinishLargeFileResponseBodyError(err.message, {\n cause: err.cause ?? err,\n fileId: context.fileId,\n bucketId: context.bucketId,\n fileName: context.fileName,\n })\n}\n\nfunction isAmbiguousFinishDispatchFailure(err: unknown, signal: AbortSignal | undefined): boolean {\n if (err instanceof NetworkError) return true\n if (isTimeoutError(err)) return true\n if (signal?.aborted !== true) return false\n if (signal.reason !== undefined && Object.is(err, signal.reason)) return true\n return isAbortError(err)\n}\n"],"mappings":";;;;;;;;;;;;;AA4BA,eAAsB,uCACpB,KACA,aACA,SACsB;CACtB,QAAQ,QAAQ,eAAe;CAC/B,IAAI;EACF,OAAO,MAAM,IAAI,gBACf,YAAY,UAAU,GACtB,YAAY,aAAa,GACzB;GACE,QAAQ,QAAQ;GAChB,eAAe,QAAQ;EACzB,GACA,QAAQ,WAAW,KAAA,KAAa,QAAQ,UAAU,KAAA,IAC9C,KAAA,IACA;GACE,GAAI,QAAQ,WAAW,KAAA,IAAY,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;GACjE,GAAI,QAAQ,UAAU,KAAA,IAAY,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;EAChE,CACN;CACF,SAAS,KAAK;EACZ,IAAI,eAAe,kCACjB,MAAM,4CAA4C,KAAK,OAAO;EAEhE,IAAI,iCAAiC,KAAK,QAAQ,MAAM,GACtD,MAAM,IAAI,iCACR,8EACA;GACE,OAAO;GACP,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,UAAU,QAAQ;EACpB,CACF;EAEF,MAAM;CACR;AACF;AAEA,SAAS,4CACP,KACA,SACkC;CAClC,IACE,IAAI,WAAW,QAAQ,UACvB,IAAI,aAAa,QAAQ,YACzB,IAAI,aAAa,QAAQ,UAEzB,OAAO;CAET,OAAO,IAAI,iCAAiC,IAAI,SAAS;EACvD,OAAO,IAAI,SAAS;EACpB,QAAQ,QAAQ;EAChB,UAAU,QAAQ;EAClB,UAAU,QAAQ;CACpB,CAAC;AACH;AAEA,SAAS,iCAAiC,KAAc,QAA0C;CAChG,IAAI,eAAe,cAAc,OAAO;CACxC,IAAI,eAAe,GAAG,GAAG,OAAO;CAChC,IAAI,QAAQ,YAAY,MAAM,OAAO;CACrC,IAAI,OAAO,WAAW,KAAA,KAAa,OAAO,GAAG,KAAK,OAAO,MAAM,GAAG,OAAO;CACzE,OAAO,aAAa,GAAG;AACzB"}
|
package/dist/upload/large.cjs
CHANGED
|
@@ -2,6 +2,7 @@ const require_abort_scope = require("./abort-scope.cjs");
|
|
|
2
2
|
const require_errors_index = require("../errors/index.cjs");
|
|
3
3
|
const require_cancel = require("./cancel.cjs");
|
|
4
4
|
const require_concurrency = require("./concurrency.cjs");
|
|
5
|
+
const require_abort = require("../util/abort.cjs");
|
|
5
6
|
const require_finish = require("./finish.cjs");
|
|
6
7
|
require("../util/defaults.cjs");
|
|
7
8
|
const require_plan_ranges = require("../util/plan-ranges.cjs");
|
|
@@ -19,8 +20,9 @@ function createResumeCandidateCriteria(options, request, totalSize, partSize, pa
|
|
|
19
20
|
sourceSize: totalSize,
|
|
20
21
|
partSize,
|
|
21
22
|
parts,
|
|
23
|
+
...options.customUploadTimestamp !== void 0 ? { customUploadTimestamp: options.customUploadTimestamp } : {},
|
|
22
24
|
...options.signal !== void 0 ? { signal: options.signal } : {},
|
|
23
|
-
...request.serverSideEncryption !== void 0 ? { serverSideEncryption: request.serverSideEncryption } : options.bucketDefaultServerSideEncryption !== void 0 ? { serverSideEncryption: options.bucketDefaultServerSideEncryption } : {},
|
|
25
|
+
...request.serverSideEncryption !== void 0 ? { serverSideEncryption: request.serverSideEncryption } : options.bucketDefaultServerSideEncryption !== void 0 ? { serverSideEncryption: options.bucketDefaultServerSideEncryption } : options.bucketDefaultServerSideEncryptionUnreadable === true ? { defaultServerSideEncryptionUnreadable: true } : {},
|
|
24
26
|
...request.fileRetention !== void 0 ? { fileRetention: request.fileRetention } : options.bucketDefaultRetention !== void 0 ? { defaultFileRetention: options.bucketDefaultRetention } : options.bucketDefaultRetentionUnreadable === true ? { defaultFileRetentionUnreadable: true } : {},
|
|
25
27
|
...request.legalHold !== void 0 ? { legalHold: request.legalHold } : {},
|
|
26
28
|
...options.resumeDiscoveryTimeoutMs !== void 0 ? { discoveryTimeoutMs: options.resumeDiscoveryTimeoutMs } : {},
|
|
@@ -55,11 +57,13 @@ async function uploadLargeFile(raw, accountInfo, options) {
|
|
|
55
57
|
const parts = require_plan_ranges.planRanges(totalSize, partSize);
|
|
56
58
|
const fileInfo = Object.create(null);
|
|
57
59
|
if (options.fileInfo !== void 0) for (const [key, value] of Object.entries(options.fileInfo)) fileInfo[key] = value;
|
|
60
|
+
if (options.lastModifiedMillis !== void 0) fileInfo["src_last_modified_millis"] = String(options.lastModifiedMillis);
|
|
58
61
|
const startLargeFileRequest = {
|
|
59
62
|
bucketId: options.bucketId,
|
|
60
63
|
fileName: options.fileName,
|
|
61
64
|
contentType: options.contentType ?? "b2/x-auto",
|
|
62
65
|
fileInfo,
|
|
66
|
+
...options.customUploadTimestamp !== void 0 ? { customUploadTimestamp: String(options.customUploadTimestamp) } : {},
|
|
63
67
|
...options.serverSideEncryption !== void 0 ? { serverSideEncryption: options.serverSideEncryption } : {},
|
|
64
68
|
...options.fileRetention !== void 0 ? { fileRetention: options.fileRetention } : {},
|
|
65
69
|
...options.legalHold !== void 0 ? { legalHold: options.legalHold } : {}
|
|
@@ -69,6 +73,7 @@ async function uploadLargeFile(raw, accountInfo, options) {
|
|
|
69
73
|
let largeFileId;
|
|
70
74
|
let preUploaded = /* @__PURE__ */ new Map();
|
|
71
75
|
let createdLargeFile = false;
|
|
76
|
+
let tracker;
|
|
72
77
|
const abortScope = require_abort_scope.createAbortScope(options.signal);
|
|
73
78
|
const startFreshLargeFile = async () => {
|
|
74
79
|
if (abortScope.signal.aborted && !options.source.canSlice) await cancelForwardOnlySource(options.source, abortScope.signal.reason);
|
|
@@ -78,7 +83,7 @@ async function uploadLargeFile(raw, accountInfo, options) {
|
|
|
78
83
|
...options.retry !== void 0 ? { retry: options.retry } : {}
|
|
79
84
|
});
|
|
80
85
|
try {
|
|
81
|
-
largeFileId = (await
|
|
86
|
+
largeFileId = (await require_abort.raceWithAbort(startPromise, abortScope.signal)).fileId;
|
|
82
87
|
} catch (err) {
|
|
83
88
|
if (abortScope.signal.aborted) {
|
|
84
89
|
if (!options.source.canSlice) await cancelForwardOnlySource(options.source, abortScope.signal.reason).catch(() => {});
|
|
@@ -110,10 +115,11 @@ async function uploadLargeFile(raw, accountInfo, options) {
|
|
|
110
115
|
const activeLargeFileId = largeFileId;
|
|
111
116
|
if (activeLargeFileId === void 0) throw new Error("uploadLargeFile: start did not return a large file ID.");
|
|
112
117
|
const partSha1s = new Array(parts.length);
|
|
113
|
-
const
|
|
118
|
+
const uploadTracker = new require_progress.ProgressTracker(options.onProgress, totalSize, parts.length, { ...options.progressIntervalMillis !== void 0 ? { minIntervalMs: options.progressIntervalMillis } : {} });
|
|
119
|
+
tracker = uploadTracker;
|
|
114
120
|
const sem = new require_concurrency.Semaphore(concurrency);
|
|
115
121
|
if (!options.source.canSlice) {
|
|
116
|
-
await uploadPartsSequentially(raw, accountInfo, options, activeLargeFileId, parts, partSha1s,
|
|
122
|
+
await uploadPartsSequentially(raw, accountInfo, options, activeLargeFileId, parts, partSha1s, uploadTracker, abortScope.signal);
|
|
117
123
|
return await require_finish.finishLargeFileWithAbortReconciliation(raw, accountInfo, {
|
|
118
124
|
fileId: activeLargeFileId,
|
|
119
125
|
bucketId: options.bucketId,
|
|
@@ -144,8 +150,8 @@ async function uploadLargeFile(raw, accountInfo, options) {
|
|
|
144
150
|
contentSha1: serverSha1
|
|
145
151
|
});
|
|
146
152
|
partSha1s[part.partNumber - 1] = serverSha1;
|
|
147
|
-
|
|
148
|
-
|
|
153
|
+
uploadTracker.addBytes(data.byteLength);
|
|
154
|
+
uploadTracker.completePart();
|
|
149
155
|
return;
|
|
150
156
|
}
|
|
151
157
|
const result = await require_retry.uploadPartWithFreshUrl(raw, accountInfo, activeLargeFileId, {
|
|
@@ -161,8 +167,8 @@ async function uploadLargeFile(raw, accountInfo, options) {
|
|
|
161
167
|
...options.serverSideEncryption !== void 0 ? { serverSideEncryption: options.serverSideEncryption } : {}
|
|
162
168
|
});
|
|
163
169
|
partSha1s[part.partNumber - 1] = result.contentSha1;
|
|
164
|
-
|
|
165
|
-
|
|
170
|
+
uploadTracker.addBytes(data.byteLength);
|
|
171
|
+
uploadTracker.completePart();
|
|
166
172
|
} catch (err) {
|
|
167
173
|
abortScope.abort(err);
|
|
168
174
|
throw err;
|
|
@@ -184,6 +190,7 @@ async function uploadLargeFile(raw, accountInfo, options) {
|
|
|
184
190
|
if (largeFileId === void 0) throw err;
|
|
185
191
|
return await cleanupAfterUploadLargeFileError(err, raw, accountInfo, options, largeFileId, createdLargeFile);
|
|
186
192
|
} finally {
|
|
193
|
+
tracker?.dispose();
|
|
187
194
|
abortScope.dispose();
|
|
188
195
|
}
|
|
189
196
|
}
|