@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/streams/hash.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { arrayBufferFor } from "../util/bytes.js";
|
|
2
|
-
import { hexEncode } from "../util/crypto.js";
|
|
2
|
+
import { hexEncode, sha256Hex as sha256Hex$1 } from "../util/crypto.js";
|
|
3
3
|
//#region src/streams/hash.ts
|
|
4
4
|
var nodeCreateHash;
|
|
5
5
|
/**
|
|
@@ -29,24 +29,20 @@ async function getNodeCreateHash() {
|
|
|
29
29
|
}
|
|
30
30
|
return nodeCreateHash;
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
* incremental JavaScript implementation.
|
|
36
|
-
*/
|
|
37
|
-
var IncrementalSha1 = class {
|
|
32
|
+
var IncrementalHash = class {
|
|
33
|
+
algorithm;
|
|
34
|
+
jsHash;
|
|
38
35
|
/** Total bytes fed into the hash so far. */
|
|
39
36
|
totalLength = 0;
|
|
40
37
|
/** Node.js hash instance, or null if using the JavaScript fallback. */
|
|
41
38
|
nodeHash = null;
|
|
42
|
-
/** Streaming JavaScript fallback used when Node crypto is unavailable. */
|
|
43
|
-
jsHash = new JsSha1Hasher();
|
|
44
39
|
/** Resolves once the crypto backend has been loaded. */
|
|
45
40
|
initPromise;
|
|
46
|
-
|
|
47
|
-
|
|
41
|
+
constructor(algorithm, jsHash) {
|
|
42
|
+
this.algorithm = algorithm;
|
|
43
|
+
this.jsHash = jsHash;
|
|
48
44
|
this.initPromise = getNodeCreateHash().then((factory) => {
|
|
49
|
-
if (factory) this.nodeHash = factory(
|
|
45
|
+
if (factory) this.nodeHash = factory(this.algorithm);
|
|
50
46
|
});
|
|
51
47
|
}
|
|
52
48
|
/**
|
|
@@ -64,8 +60,8 @@ var IncrementalSha1 = class {
|
|
|
64
60
|
this.totalLength += data.byteLength;
|
|
65
61
|
}
|
|
66
62
|
/**
|
|
67
|
-
* Finalize the hash and return the hex-encoded
|
|
68
|
-
* @returns The lowercase hex-encoded
|
|
63
|
+
* Finalize the hash and return the hex-encoded digest.
|
|
64
|
+
* @returns The lowercase hex-encoded digest of all data fed so far.
|
|
69
65
|
*/
|
|
70
66
|
async digest() {
|
|
71
67
|
await this.initPromise;
|
|
@@ -82,6 +78,28 @@ var IncrementalSha1 = class {
|
|
|
82
78
|
return this.totalLength;
|
|
83
79
|
}
|
|
84
80
|
};
|
|
81
|
+
/**
|
|
82
|
+
* Incrementally computes SHA-1 hashes over streaming data.
|
|
83
|
+
* Uses Node.js `crypto` when available, falling back to a dependency-free
|
|
84
|
+
* incremental JavaScript implementation.
|
|
85
|
+
*/
|
|
86
|
+
var IncrementalSha1 = class extends IncrementalHash {
|
|
87
|
+
/** Creates a new IncrementalSha1 and lazily initializes the crypto backend. */
|
|
88
|
+
constructor() {
|
|
89
|
+
super("sha1", new JsSha1Hasher());
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Incrementally computes SHA-256 hashes over streaming data.
|
|
94
|
+
* Uses Node.js `crypto` when available, falling back to a dependency-free
|
|
95
|
+
* incremental JavaScript implementation.
|
|
96
|
+
*/
|
|
97
|
+
var IncrementalSha256 = class extends IncrementalHash {
|
|
98
|
+
/** Creates a new IncrementalSha256 and lazily initializes the crypto backend. */
|
|
99
|
+
constructor() {
|
|
100
|
+
super("sha256", new JsSha256Hasher());
|
|
101
|
+
}
|
|
102
|
+
};
|
|
85
103
|
/* v8 ignore start -- JavaScript fallback path, exercised by browser-mode tests */
|
|
86
104
|
var JsSha1Hasher = class {
|
|
87
105
|
h0 = 1732584193;
|
|
@@ -189,6 +207,210 @@ function rotateLeft(value, bits) {
|
|
|
189
207
|
function wordToHex(word) {
|
|
190
208
|
return word.toString(16).padStart(8, "0");
|
|
191
209
|
}
|
|
210
|
+
var SHA256_INITIAL_STATE = [
|
|
211
|
+
1779033703,
|
|
212
|
+
3144134277,
|
|
213
|
+
1013904242,
|
|
214
|
+
2773480762,
|
|
215
|
+
1359893119,
|
|
216
|
+
2600822924,
|
|
217
|
+
528734635,
|
|
218
|
+
1541459225
|
|
219
|
+
];
|
|
220
|
+
var SHA256_K = [
|
|
221
|
+
1116352408,
|
|
222
|
+
1899447441,
|
|
223
|
+
3049323471,
|
|
224
|
+
3921009573,
|
|
225
|
+
961987163,
|
|
226
|
+
1508970993,
|
|
227
|
+
2453635748,
|
|
228
|
+
2870763221,
|
|
229
|
+
3624381080,
|
|
230
|
+
310598401,
|
|
231
|
+
607225278,
|
|
232
|
+
1426881987,
|
|
233
|
+
1925078388,
|
|
234
|
+
2162078206,
|
|
235
|
+
2614888103,
|
|
236
|
+
3248222580,
|
|
237
|
+
3835390401,
|
|
238
|
+
4022224774,
|
|
239
|
+
264347078,
|
|
240
|
+
604807628,
|
|
241
|
+
770255983,
|
|
242
|
+
1249150122,
|
|
243
|
+
1555081692,
|
|
244
|
+
1996064986,
|
|
245
|
+
2554220882,
|
|
246
|
+
2821834349,
|
|
247
|
+
2952996808,
|
|
248
|
+
3210313671,
|
|
249
|
+
3336571891,
|
|
250
|
+
3584528711,
|
|
251
|
+
113926993,
|
|
252
|
+
338241895,
|
|
253
|
+
666307205,
|
|
254
|
+
773529912,
|
|
255
|
+
1294757372,
|
|
256
|
+
1396182291,
|
|
257
|
+
1695183700,
|
|
258
|
+
1986661051,
|
|
259
|
+
2177026350,
|
|
260
|
+
2456956037,
|
|
261
|
+
2730485921,
|
|
262
|
+
2820302411,
|
|
263
|
+
3259730800,
|
|
264
|
+
3345764771,
|
|
265
|
+
3516065817,
|
|
266
|
+
3600352804,
|
|
267
|
+
4094571909,
|
|
268
|
+
275423344,
|
|
269
|
+
430227734,
|
|
270
|
+
506948616,
|
|
271
|
+
659060556,
|
|
272
|
+
883997877,
|
|
273
|
+
958139571,
|
|
274
|
+
1322822218,
|
|
275
|
+
1537002063,
|
|
276
|
+
1747873779,
|
|
277
|
+
1955562222,
|
|
278
|
+
2024104815,
|
|
279
|
+
2227730452,
|
|
280
|
+
2361852424,
|
|
281
|
+
2428436474,
|
|
282
|
+
2756734187,
|
|
283
|
+
3204031479,
|
|
284
|
+
3329325298
|
|
285
|
+
];
|
|
286
|
+
var JsSha256Hasher = class {
|
|
287
|
+
h0 = SHA256_INITIAL_STATE[0];
|
|
288
|
+
h1 = SHA256_INITIAL_STATE[1];
|
|
289
|
+
h2 = SHA256_INITIAL_STATE[2];
|
|
290
|
+
h3 = SHA256_INITIAL_STATE[3];
|
|
291
|
+
h4 = SHA256_INITIAL_STATE[4];
|
|
292
|
+
h5 = SHA256_INITIAL_STATE[5];
|
|
293
|
+
h6 = SHA256_INITIAL_STATE[6];
|
|
294
|
+
h7 = SHA256_INITIAL_STATE[7];
|
|
295
|
+
block = /* @__PURE__ */ new Uint8Array(64);
|
|
296
|
+
blockLength = 0;
|
|
297
|
+
bytesProcessed = 0;
|
|
298
|
+
digested = false;
|
|
299
|
+
words = /* @__PURE__ */ new Uint32Array(64);
|
|
300
|
+
update(data) {
|
|
301
|
+
if (this.digested) throw new Error("SHA-256 digest has already been finalized");
|
|
302
|
+
this.bytesProcessed += data.byteLength;
|
|
303
|
+
let offset = 0;
|
|
304
|
+
if (this.blockLength > 0) {
|
|
305
|
+
const toCopy = Math.min(64 - this.blockLength, data.byteLength);
|
|
306
|
+
this.block.set(data.subarray(0, toCopy), this.blockLength);
|
|
307
|
+
this.blockLength += toCopy;
|
|
308
|
+
offset = toCopy;
|
|
309
|
+
if (this.blockLength === 64) {
|
|
310
|
+
this.processBlock(this.block, 0);
|
|
311
|
+
this.blockLength = 0;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
while (offset + 64 <= data.byteLength) {
|
|
315
|
+
this.processBlock(data, offset);
|
|
316
|
+
offset += 64;
|
|
317
|
+
}
|
|
318
|
+
if (offset < data.byteLength) {
|
|
319
|
+
this.block.set(data.subarray(offset), 0);
|
|
320
|
+
this.blockLength = data.byteLength - offset;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
digest() {
|
|
324
|
+
if (this.digested) throw new Error("SHA-256 digest has already been finalized");
|
|
325
|
+
this.digested = true;
|
|
326
|
+
const bitLengthHigh = Math.floor(this.bytesProcessed / 536870912);
|
|
327
|
+
const bitLengthLow = this.bytesProcessed << 3 >>> 0;
|
|
328
|
+
this.block[this.blockLength] = 128;
|
|
329
|
+
this.blockLength++;
|
|
330
|
+
if (this.blockLength > 56) {
|
|
331
|
+
this.block.fill(0, this.blockLength, 64);
|
|
332
|
+
this.processBlock(this.block, 0);
|
|
333
|
+
this.blockLength = 0;
|
|
334
|
+
}
|
|
335
|
+
this.block.fill(0, this.blockLength, 56);
|
|
336
|
+
writeUint32(this.block, 56, bitLengthHigh);
|
|
337
|
+
writeUint32(this.block, 60, bitLengthLow);
|
|
338
|
+
this.processBlock(this.block, 0);
|
|
339
|
+
return [
|
|
340
|
+
this.h0,
|
|
341
|
+
this.h1,
|
|
342
|
+
this.h2,
|
|
343
|
+
this.h3,
|
|
344
|
+
this.h4,
|
|
345
|
+
this.h5,
|
|
346
|
+
this.h6,
|
|
347
|
+
this.h7
|
|
348
|
+
].map(wordToHex).join("");
|
|
349
|
+
}
|
|
350
|
+
processBlock(block, offset) {
|
|
351
|
+
const words = this.words;
|
|
352
|
+
for (let i = 0; i < 16; i++) {
|
|
353
|
+
const j = offset + i * 4;
|
|
354
|
+
words[i] = (block[j] ?? 0) << 24 | (block[j + 1] ?? 0) << 16 | (block[j + 2] ?? 0) << 8 | (block[j + 3] ?? 0);
|
|
355
|
+
}
|
|
356
|
+
for (let i = 16; i < 64; i++) words[i] = smallSigma1(words[i - 2] ?? 0) + (words[i - 7] ?? 0) + smallSigma0(words[i - 15] ?? 0) + (words[i - 16] ?? 0) >>> 0;
|
|
357
|
+
let a = this.h0;
|
|
358
|
+
let b = this.h1;
|
|
359
|
+
let c = this.h2;
|
|
360
|
+
let d = this.h3;
|
|
361
|
+
let e = this.h4;
|
|
362
|
+
let f = this.h5;
|
|
363
|
+
let g = this.h6;
|
|
364
|
+
let h = this.h7;
|
|
365
|
+
for (let i = 0; i < 64; i++) {
|
|
366
|
+
const t1 = h + bigSigma1(e) + sha256Choose(e, f, g) + (SHA256_K[i] ?? 0) + (words[i] ?? 0) >>> 0;
|
|
367
|
+
const t2 = bigSigma0(a) + sha256Majority(a, b, c) >>> 0;
|
|
368
|
+
h = g;
|
|
369
|
+
g = f;
|
|
370
|
+
f = e;
|
|
371
|
+
e = d + t1 >>> 0;
|
|
372
|
+
d = c;
|
|
373
|
+
c = b;
|
|
374
|
+
b = a;
|
|
375
|
+
a = t1 + t2 >>> 0;
|
|
376
|
+
}
|
|
377
|
+
this.h0 = this.h0 + a >>> 0;
|
|
378
|
+
this.h1 = this.h1 + b >>> 0;
|
|
379
|
+
this.h2 = this.h2 + c >>> 0;
|
|
380
|
+
this.h3 = this.h3 + d >>> 0;
|
|
381
|
+
this.h4 = this.h4 + e >>> 0;
|
|
382
|
+
this.h5 = this.h5 + f >>> 0;
|
|
383
|
+
this.h6 = this.h6 + g >>> 0;
|
|
384
|
+
this.h7 = this.h7 + h >>> 0;
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
function writeUint32(block, offset, value) {
|
|
388
|
+
block[offset] = value >>> 24 & 255;
|
|
389
|
+
block[offset + 1] = value >>> 16 & 255;
|
|
390
|
+
block[offset + 2] = value >>> 8 & 255;
|
|
391
|
+
block[offset + 3] = value & 255;
|
|
392
|
+
}
|
|
393
|
+
function rotateRight(value, bits) {
|
|
394
|
+
return (value >>> bits | value << 32 - bits) >>> 0;
|
|
395
|
+
}
|
|
396
|
+
function smallSigma0(value) {
|
|
397
|
+
return rotateRight(value, 7) ^ rotateRight(value, 18) ^ value >>> 3;
|
|
398
|
+
}
|
|
399
|
+
function smallSigma1(value) {
|
|
400
|
+
return rotateRight(value, 17) ^ rotateRight(value, 19) ^ value >>> 10;
|
|
401
|
+
}
|
|
402
|
+
function bigSigma0(value) {
|
|
403
|
+
return rotateRight(value, 2) ^ rotateRight(value, 13) ^ rotateRight(value, 22);
|
|
404
|
+
}
|
|
405
|
+
function bigSigma1(value) {
|
|
406
|
+
return rotateRight(value, 6) ^ rotateRight(value, 11) ^ rotateRight(value, 25);
|
|
407
|
+
}
|
|
408
|
+
function sha256Choose(x, y, z) {
|
|
409
|
+
return x & y ^ ~x & z;
|
|
410
|
+
}
|
|
411
|
+
function sha256Majority(x, y, z) {
|
|
412
|
+
return x & y ^ x & z ^ y & z;
|
|
413
|
+
}
|
|
192
414
|
/* v8 ignore stop */
|
|
193
415
|
/**
|
|
194
416
|
* Compute the SHA-1 hex digest of a complete byte array in one shot.
|
|
@@ -208,7 +430,16 @@ async function sha1Hex(data) {
|
|
|
208
430
|
return hexEncode(new Uint8Array(hashBuffer));
|
|
209
431
|
/* v8 ignore stop */
|
|
210
432
|
}
|
|
433
|
+
/**
|
|
434
|
+
* Compute the SHA-256 hex digest of a complete byte array in one shot.
|
|
435
|
+
* @param data - The byte array to hash.
|
|
436
|
+
*
|
|
437
|
+
* @returns The lowercase hex-encoded SHA-256 digest of the input.
|
|
438
|
+
*/
|
|
439
|
+
async function sha256Hex(data) {
|
|
440
|
+
return sha256Hex$1(data);
|
|
441
|
+
}
|
|
211
442
|
//#endregion
|
|
212
|
-
export { IncrementalSha1, sha1Hex };
|
|
443
|
+
export { IncrementalSha1, IncrementalSha256, sha1Hex, sha256Hex };
|
|
213
444
|
|
|
214
445
|
//# sourceMappingURL=hash.js.map
|
package/dist/streams/hash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.js","names":[],"sources":["../../src/streams/hash.ts"],"sourcesContent":["import { arrayBufferFor } from '../util/bytes.ts'\nimport { hexEncode } from '../util/crypto.ts'\n\n/** Internal wrapper around a Node.js Hash instance. */\ntype NodeHasher = { update(data: Uint8Array): void; digest(encoding: string): string }\n\n/** Factory that creates a NodeHasher for a given algorithm name. */\ntype NodeHashFactory = (algorithm: string) => NodeHasher\n\nlet nodeCreateHash: NodeHashFactory | null | undefined\n\n/**\n * Lazily loads `node:crypto` and caches the factory. Returns null in non-Node runtimes.\n *\n * @returns The cached hash factory, or null if Node crypto is unavailable.\n */\nasync function getNodeCreateHash(): Promise<NodeHashFactory | null> {\n if (nodeCreateHash !== undefined) return nodeCreateHash\n try {\n // biome-ignore lint/suspicious/noTsIgnore: isomorphic import — @ts-ignore is silent when node:crypto resolves (Node) and suppresses the error when it doesn't (Deno/browser); @ts-expect-error can't do both\n // @ts-ignore -- node:crypto may not exist in browser/edge runtimes\n const crypto = await import('node:crypto')\n // Vite's browser shim resolves the import but does not implement\n // `createHash`. Probe explicitly so we fall through to the WebCrypto\n // path instead of returning a broken factory.\n if (typeof crypto.createHash !== 'function') throw new Error('createHash unavailable')\n nodeCreateHash = (algo: string) => {\n const h = crypto.createHash(algo)\n return {\n update(data: Uint8Array) {\n h.update(data)\n },\n digest(encoding: string) {\n return h.digest(encoding as 'hex') as string\n },\n }\n }\n } catch {\n /* v8 ignore next -- non-Node runtime fallback, unreachable in Node coverage. */\n nodeCreateHash = null\n }\n return nodeCreateHash\n}\n\n/**\n * Incrementally computes SHA-1 hashes over streaming data.\n * Uses Node.js `crypto` when available, falling back to a dependency-free\n * incremental JavaScript implementation.\n */\nexport class IncrementalSha1 {\n /** Total bytes fed into the hash so far. */\n private totalLength = 0\n /** Node.js hash instance, or null if using the JavaScript fallback. */\n private nodeHash: NodeHasher | null = null\n /** Streaming JavaScript fallback used when Node crypto is unavailable. */\n private jsHash = new JsSha1Hasher()\n /** Resolves once the crypto backend has been loaded. */\n private initPromise: Promise<void>\n\n /** Creates a new IncrementalSha1 and lazily initializes the crypto backend. */\n constructor() {\n this.initPromise = getNodeCreateHash().then((factory) => {\n if (factory) this.nodeHash = factory('sha1')\n })\n }\n\n /**\n * Feed data into the hash. Async because it lazily initializes the crypto backend.\n * @param data - The bytes to include in the hash computation.\n *\n * @returns A promise that resolves once the data has been consumed.\n */\n async update(data: Uint8Array): Promise<void> {\n await this.initPromise\n if (this.nodeHash) {\n this.nodeHash.update(data)\n } else {\n /* v8 ignore next -- WebCrypto fallback is exercised by browser-mode tests. */\n this.jsHash.update(data)\n }\n this.totalLength += data.byteLength\n }\n\n /**\n * Finalize the hash and return the hex-encoded SHA-1 digest.\n * @returns The lowercase hex-encoded SHA-1 digest of all data fed so far.\n */\n async digest(): Promise<string> {\n await this.initPromise\n if (this.nodeHash) {\n return this.nodeHash.digest('hex')\n }\n\n /* v8 ignore next -- non-Node runtime fallback, exercised by browser-mode tests */\n return this.jsHash.digest()\n }\n\n /**\n * Total number of bytes fed into the hash so far.\n *\n * @returns The cumulative byte count across all update calls.\n */\n get bytesProcessed(): number {\n return this.totalLength\n }\n}\n\n/* v8 ignore start -- JavaScript fallback path, exercised by browser-mode tests */\nclass JsSha1Hasher {\n private h0 = 0x67452301\n private h1 = 0xefcdab89\n private h2 = 0x98badcfe\n private h3 = 0x10325476\n private h4 = 0xc3d2e1f0\n private readonly block = new Uint8Array(64)\n private blockLength = 0\n private bytesProcessed = 0\n private digested = false\n private readonly words = new Uint32Array(80)\n\n update(data: Uint8Array): void {\n if (this.digested) throw new Error('SHA-1 digest has already been finalized')\n this.bytesProcessed += data.byteLength\n\n let offset = 0\n if (this.blockLength > 0) {\n const toCopy = Math.min(64 - this.blockLength, data.byteLength)\n this.block.set(data.subarray(0, toCopy), this.blockLength)\n this.blockLength += toCopy\n offset = toCopy\n if (this.blockLength === 64) {\n this.processBlock(this.block, 0)\n this.blockLength = 0\n }\n }\n\n while (offset + 64 <= data.byteLength) {\n this.processBlock(data, offset)\n offset += 64\n }\n\n if (offset < data.byteLength) {\n this.block.set(data.subarray(offset), 0)\n this.blockLength = data.byteLength - offset\n }\n }\n\n digest(): string {\n if (this.digested) throw new Error('SHA-1 digest has already been finalized')\n this.digested = true\n\n const bitLengthHigh = Math.floor(this.bytesProcessed / 0x20000000)\n const bitLengthLow = (this.bytesProcessed << 3) >>> 0\n\n this.block[this.blockLength] = 0x80\n this.blockLength++\n\n if (this.blockLength > 56) {\n this.block.fill(0, this.blockLength, 64)\n this.processBlock(this.block, 0)\n this.blockLength = 0\n }\n\n this.block.fill(0, this.blockLength, 56)\n this.writeUint32(56, bitLengthHigh)\n this.writeUint32(60, bitLengthLow)\n this.processBlock(this.block, 0)\n\n return (\n wordToHex(this.h0) +\n wordToHex(this.h1) +\n wordToHex(this.h2) +\n wordToHex(this.h3) +\n wordToHex(this.h4)\n )\n }\n\n private writeUint32(offset: number, value: number): void {\n this.block[offset] = (value >>> 24) & 0xff\n this.block[offset + 1] = (value >>> 16) & 0xff\n this.block[offset + 2] = (value >>> 8) & 0xff\n this.block[offset + 3] = value & 0xff\n }\n\n private processBlock(block: Uint8Array, offset: number): void {\n const words = this.words\n for (let i = 0; i < 16; i++) {\n const j = offset + i * 4\n words[i] =\n ((block[j] ?? 0) << 24) |\n ((block[j + 1] ?? 0) << 16) |\n ((block[j + 2] ?? 0) << 8) |\n (block[j + 3] ?? 0)\n }\n\n for (let i = 16; i < 80; i++) {\n words[i] = rotateLeft(\n (words[i - 3] ?? 0) ^ (words[i - 8] ?? 0) ^ (words[i - 14] ?? 0) ^ (words[i - 16] ?? 0),\n 1,\n )\n }\n\n let a = this.h0\n let b = this.h1\n let c = this.h2\n let d = this.h3\n let e = this.h4\n\n for (let i = 0; i < 80; i++) {\n let f: number\n let k: number\n if (i < 20) {\n f = (b & c) | (~b & d)\n k = 0x5a827999\n } else if (i < 40) {\n f = b ^ c ^ d\n k = 0x6ed9eba1\n } else if (i < 60) {\n f = (b & c) | (b & d) | (c & d)\n k = 0x8f1bbcdc\n } else {\n f = b ^ c ^ d\n k = 0xca62c1d6\n }\n\n const temp = (rotateLeft(a, 5) + f + e + k + (words[i] ?? 0)) >>> 0\n e = d\n d = c\n c = rotateLeft(b, 30)\n b = a\n a = temp\n }\n\n this.h0 = (this.h0 + a) >>> 0\n this.h1 = (this.h1 + b) >>> 0\n this.h2 = (this.h2 + c) >>> 0\n this.h3 = (this.h3 + d) >>> 0\n this.h4 = (this.h4 + e) >>> 0\n }\n}\n\nfunction rotateLeft(value: number, bits: number): number {\n return ((value << bits) | (value >>> (32 - bits))) >>> 0\n}\n\nfunction wordToHex(word: number): string {\n return word.toString(16).padStart(8, '0')\n}\n/* v8 ignore stop */\n\n/**\n * Compute the SHA-1 hex digest of a complete byte array in one shot.\n * @param data - The byte array to hash.\n *\n * @returns The lowercase hex-encoded SHA-1 digest of the input.\n */\nexport async function sha1Hex(data: Uint8Array): Promise<string> {\n const factory = await getNodeCreateHash()\n if (factory) {\n const h = factory('sha1')\n h.update(data)\n return h.digest('hex')\n }\n // Copy subarray and SharedArrayBuffer-backed views so WebCrypto hashes\n // exactly `data`'s visible bytes with a plain ArrayBuffer.\n /* v8 ignore start -- WebCrypto fallback, only reachable when node:crypto is unavailable */\n const hashBuffer = await crypto.subtle.digest('SHA-1', arrayBufferFor(data))\n return hexEncode(new Uint8Array(hashBuffer))\n /* v8 ignore stop */\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hash.js","names":[],"sources":["../../src/streams/hash.ts"],"sourcesContent":["import { arrayBufferFor } from '../util/bytes.ts'\nimport { hexEncode, sha256Hex as utilSha256Hex } from '../util/crypto.ts'\n\n/** Internal wrapper around a Node.js Hash instance. */\ntype NodeHasher = { update(data: Uint8Array): void; digest(encoding: string): string }\n\n/** Factory that creates a NodeHasher for a given algorithm name. */\ntype NodeHashFactory = (algorithm: string) => NodeHasher\n\n/** Shared interface for dependency-free streaming hash fallbacks. */\ntype JsHasher = { update(data: Uint8Array): void; digest(): string }\n\nlet nodeCreateHash: NodeHashFactory | null | undefined\n\n/**\n * Lazily loads `node:crypto` and caches the factory. Returns null in non-Node runtimes.\n *\n * @returns The cached hash factory, or null if Node crypto is unavailable.\n */\nasync function getNodeCreateHash(): Promise<NodeHashFactory | null> {\n if (nodeCreateHash !== undefined) return nodeCreateHash\n try {\n // biome-ignore lint/suspicious/noTsIgnore: isomorphic import — @ts-ignore is silent when node:crypto resolves (Node) and suppresses the error when it doesn't (Deno/browser); @ts-expect-error can't do both\n // @ts-ignore -- node:crypto may not exist in browser/edge runtimes\n const crypto = await import('node:crypto')\n // Vite's browser shim resolves the import but does not implement\n // `createHash`. Probe explicitly so we fall through to the WebCrypto\n // path instead of returning a broken factory.\n if (typeof crypto.createHash !== 'function') throw new Error('createHash unavailable')\n nodeCreateHash = (algo: string) => {\n const h = crypto.createHash(algo)\n return {\n update(data: Uint8Array) {\n h.update(data)\n },\n digest(encoding: string) {\n return h.digest(encoding as 'hex') as string\n },\n }\n }\n } catch {\n /* v8 ignore next -- non-Node runtime fallback, unreachable in Node coverage. */\n nodeCreateHash = null\n }\n return nodeCreateHash\n}\n\nclass IncrementalHash {\n /** Total bytes fed into the hash so far. */\n private totalLength = 0\n /** Node.js hash instance, or null if using the JavaScript fallback. */\n private nodeHash: NodeHasher | null = null\n /** Resolves once the crypto backend has been loaded. */\n private initPromise: Promise<void>\n\n constructor(\n private readonly algorithm: 'sha1' | 'sha256',\n private readonly jsHash: JsHasher,\n ) {\n this.initPromise = getNodeCreateHash().then((factory) => {\n if (factory) this.nodeHash = factory(this.algorithm)\n })\n }\n\n /**\n * Feed data into the hash. Async because it lazily initializes the crypto backend.\n * @param data - The bytes to include in the hash computation.\n *\n * @returns A promise that resolves once the data has been consumed.\n */\n async update(data: Uint8Array): Promise<void> {\n await this.initPromise\n if (this.nodeHash) {\n this.nodeHash.update(data)\n } else {\n /* v8 ignore next -- WebCrypto fallback is exercised by browser-mode tests. */\n this.jsHash.update(data)\n }\n this.totalLength += data.byteLength\n }\n\n /**\n * Finalize the hash and return the hex-encoded digest.\n * @returns The lowercase hex-encoded digest of all data fed so far.\n */\n async digest(): Promise<string> {\n await this.initPromise\n if (this.nodeHash) {\n return this.nodeHash.digest('hex')\n }\n\n /* v8 ignore next -- non-Node runtime fallback, exercised by browser-mode tests */\n return this.jsHash.digest()\n }\n\n /**\n * Total number of bytes fed into the hash so far.\n *\n * @returns The cumulative byte count across all update calls.\n */\n get bytesProcessed(): number {\n return this.totalLength\n }\n}\n\n/**\n * Incrementally computes SHA-1 hashes over streaming data.\n * Uses Node.js `crypto` when available, falling back to a dependency-free\n * incremental JavaScript implementation.\n */\nexport class IncrementalSha1 extends IncrementalHash {\n /** Creates a new IncrementalSha1 and lazily initializes the crypto backend. */\n constructor() {\n super('sha1', new JsSha1Hasher())\n }\n}\n\n/**\n * Incrementally computes SHA-256 hashes over streaming data.\n * Uses Node.js `crypto` when available, falling back to a dependency-free\n * incremental JavaScript implementation.\n */\nexport class IncrementalSha256 extends IncrementalHash {\n /** Creates a new IncrementalSha256 and lazily initializes the crypto backend. */\n constructor() {\n super('sha256', new JsSha256Hasher())\n }\n}\n\n/* v8 ignore start -- JavaScript fallback path, exercised by browser-mode tests */\nclass JsSha1Hasher {\n private h0 = 0x67452301\n private h1 = 0xefcdab89\n private h2 = 0x98badcfe\n private h3 = 0x10325476\n private h4 = 0xc3d2e1f0\n private readonly block = new Uint8Array(64)\n private blockLength = 0\n private bytesProcessed = 0\n private digested = false\n private readonly words = new Uint32Array(80)\n\n update(data: Uint8Array): void {\n if (this.digested) throw new Error('SHA-1 digest has already been finalized')\n this.bytesProcessed += data.byteLength\n\n let offset = 0\n if (this.blockLength > 0) {\n const toCopy = Math.min(64 - this.blockLength, data.byteLength)\n this.block.set(data.subarray(0, toCopy), this.blockLength)\n this.blockLength += toCopy\n offset = toCopy\n if (this.blockLength === 64) {\n this.processBlock(this.block, 0)\n this.blockLength = 0\n }\n }\n\n while (offset + 64 <= data.byteLength) {\n this.processBlock(data, offset)\n offset += 64\n }\n\n if (offset < data.byteLength) {\n this.block.set(data.subarray(offset), 0)\n this.blockLength = data.byteLength - offset\n }\n }\n\n digest(): string {\n if (this.digested) throw new Error('SHA-1 digest has already been finalized')\n this.digested = true\n\n const bitLengthHigh = Math.floor(this.bytesProcessed / 0x20000000)\n const bitLengthLow = (this.bytesProcessed << 3) >>> 0\n\n this.block[this.blockLength] = 0x80\n this.blockLength++\n\n if (this.blockLength > 56) {\n this.block.fill(0, this.blockLength, 64)\n this.processBlock(this.block, 0)\n this.blockLength = 0\n }\n\n this.block.fill(0, this.blockLength, 56)\n this.writeUint32(56, bitLengthHigh)\n this.writeUint32(60, bitLengthLow)\n this.processBlock(this.block, 0)\n\n return (\n wordToHex(this.h0) +\n wordToHex(this.h1) +\n wordToHex(this.h2) +\n wordToHex(this.h3) +\n wordToHex(this.h4)\n )\n }\n\n private writeUint32(offset: number, value: number): void {\n this.block[offset] = (value >>> 24) & 0xff\n this.block[offset + 1] = (value >>> 16) & 0xff\n this.block[offset + 2] = (value >>> 8) & 0xff\n this.block[offset + 3] = value & 0xff\n }\n\n private processBlock(block: Uint8Array, offset: number): void {\n const words = this.words\n for (let i = 0; i < 16; i++) {\n const j = offset + i * 4\n words[i] =\n ((block[j] ?? 0) << 24) |\n ((block[j + 1] ?? 0) << 16) |\n ((block[j + 2] ?? 0) << 8) |\n (block[j + 3] ?? 0)\n }\n\n for (let i = 16; i < 80; i++) {\n words[i] = rotateLeft(\n (words[i - 3] ?? 0) ^ (words[i - 8] ?? 0) ^ (words[i - 14] ?? 0) ^ (words[i - 16] ?? 0),\n 1,\n )\n }\n\n let a = this.h0\n let b = this.h1\n let c = this.h2\n let d = this.h3\n let e = this.h4\n\n for (let i = 0; i < 80; i++) {\n let f: number\n let k: number\n if (i < 20) {\n f = (b & c) | (~b & d)\n k = 0x5a827999\n } else if (i < 40) {\n f = b ^ c ^ d\n k = 0x6ed9eba1\n } else if (i < 60) {\n f = (b & c) | (b & d) | (c & d)\n k = 0x8f1bbcdc\n } else {\n f = b ^ c ^ d\n k = 0xca62c1d6\n }\n\n const temp = (rotateLeft(a, 5) + f + e + k + (words[i] ?? 0)) >>> 0\n e = d\n d = c\n c = rotateLeft(b, 30)\n b = a\n a = temp\n }\n\n this.h0 = (this.h0 + a) >>> 0\n this.h1 = (this.h1 + b) >>> 0\n this.h2 = (this.h2 + c) >>> 0\n this.h3 = (this.h3 + d) >>> 0\n this.h4 = (this.h4 + e) >>> 0\n }\n}\n\nfunction rotateLeft(value: number, bits: number): number {\n return ((value << bits) | (value >>> (32 - bits))) >>> 0\n}\n\nfunction wordToHex(word: number): string {\n return word.toString(16).padStart(8, '0')\n}\n\nconst SHA256_INITIAL_STATE = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n] as const\n\nconst SHA256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n] as const\n\nclass JsSha256Hasher {\n private h0: number = SHA256_INITIAL_STATE[0]\n private h1: number = SHA256_INITIAL_STATE[1]\n private h2: number = SHA256_INITIAL_STATE[2]\n private h3: number = SHA256_INITIAL_STATE[3]\n private h4: number = SHA256_INITIAL_STATE[4]\n private h5: number = SHA256_INITIAL_STATE[5]\n private h6: number = SHA256_INITIAL_STATE[6]\n private h7: number = SHA256_INITIAL_STATE[7]\n private readonly block = new Uint8Array(64)\n private blockLength = 0\n private bytesProcessed = 0\n private digested = false\n private readonly words = new Uint32Array(64)\n\n update(data: Uint8Array): void {\n if (this.digested) throw new Error('SHA-256 digest has already been finalized')\n this.bytesProcessed += data.byteLength\n\n let offset = 0\n if (this.blockLength > 0) {\n const toCopy = Math.min(64 - this.blockLength, data.byteLength)\n this.block.set(data.subarray(0, toCopy), this.blockLength)\n this.blockLength += toCopy\n offset = toCopy\n if (this.blockLength === 64) {\n this.processBlock(this.block, 0)\n this.blockLength = 0\n }\n }\n\n while (offset + 64 <= data.byteLength) {\n this.processBlock(data, offset)\n offset += 64\n }\n\n if (offset < data.byteLength) {\n this.block.set(data.subarray(offset), 0)\n this.blockLength = data.byteLength - offset\n }\n }\n\n digest(): string {\n if (this.digested) throw new Error('SHA-256 digest has already been finalized')\n this.digested = true\n\n const bitLengthHigh = Math.floor(this.bytesProcessed / 0x20000000)\n const bitLengthLow = (this.bytesProcessed << 3) >>> 0\n\n this.block[this.blockLength] = 0x80\n this.blockLength++\n\n if (this.blockLength > 56) {\n this.block.fill(0, this.blockLength, 64)\n this.processBlock(this.block, 0)\n this.blockLength = 0\n }\n\n this.block.fill(0, this.blockLength, 56)\n writeUint32(this.block, 56, bitLengthHigh)\n writeUint32(this.block, 60, bitLengthLow)\n this.processBlock(this.block, 0)\n\n return [this.h0, this.h1, this.h2, this.h3, this.h4, this.h5, this.h6, this.h7]\n .map(wordToHex)\n .join('')\n }\n\n private processBlock(block: Uint8Array, offset: number): void {\n const words = this.words\n for (let i = 0; i < 16; i++) {\n const j = offset + i * 4\n words[i] =\n ((block[j] ?? 0) << 24) |\n ((block[j + 1] ?? 0) << 16) |\n ((block[j + 2] ?? 0) << 8) |\n (block[j + 3] ?? 0)\n }\n\n for (let i = 16; i < 64; i++) {\n words[i] =\n (smallSigma1(words[i - 2] ?? 0) +\n (words[i - 7] ?? 0) +\n smallSigma0(words[i - 15] ?? 0) +\n (words[i - 16] ?? 0)) >>>\n 0\n }\n\n let a = this.h0\n let b = this.h1\n let c = this.h2\n let d = this.h3\n let e = this.h4\n let f = this.h5\n let g = this.h6\n let h = this.h7\n\n for (let i = 0; i < 64; i++) {\n const t1 =\n (h + bigSigma1(e) + sha256Choose(e, f, g) + (SHA256_K[i] ?? 0) + (words[i] ?? 0)) >>> 0\n const t2 = (bigSigma0(a) + sha256Majority(a, b, c)) >>> 0\n h = g\n g = f\n f = e\n e = (d + t1) >>> 0\n d = c\n c = b\n b = a\n a = (t1 + t2) >>> 0\n }\n\n this.h0 = (this.h0 + a) >>> 0\n this.h1 = (this.h1 + b) >>> 0\n this.h2 = (this.h2 + c) >>> 0\n this.h3 = (this.h3 + d) >>> 0\n this.h4 = (this.h4 + e) >>> 0\n this.h5 = (this.h5 + f) >>> 0\n this.h6 = (this.h6 + g) >>> 0\n this.h7 = (this.h7 + h) >>> 0\n }\n}\n\nfunction writeUint32(block: Uint8Array, offset: number, value: number): void {\n block[offset] = (value >>> 24) & 0xff\n block[offset + 1] = (value >>> 16) & 0xff\n block[offset + 2] = (value >>> 8) & 0xff\n block[offset + 3] = value & 0xff\n}\n\nfunction rotateRight(value: number, bits: number): number {\n return ((value >>> bits) | (value << (32 - bits))) >>> 0\n}\n\nfunction smallSigma0(value: number): number {\n return rotateRight(value, 7) ^ rotateRight(value, 18) ^ (value >>> 3)\n}\n\nfunction smallSigma1(value: number): number {\n return rotateRight(value, 17) ^ rotateRight(value, 19) ^ (value >>> 10)\n}\n\nfunction bigSigma0(value: number): number {\n return rotateRight(value, 2) ^ rotateRight(value, 13) ^ rotateRight(value, 22)\n}\n\nfunction bigSigma1(value: number): number {\n return rotateRight(value, 6) ^ rotateRight(value, 11) ^ rotateRight(value, 25)\n}\n\nfunction sha256Choose(x: number, y: number, z: number): number {\n return (x & y) ^ (~x & z)\n}\n\nfunction sha256Majority(x: number, y: number, z: number): number {\n return (x & y) ^ (x & z) ^ (y & z)\n}\n/* v8 ignore stop */\n\n/**\n * Compute the SHA-1 hex digest of a complete byte array in one shot.\n * @param data - The byte array to hash.\n *\n * @returns The lowercase hex-encoded SHA-1 digest of the input.\n */\nexport async function sha1Hex(data: Uint8Array): Promise<string> {\n const factory = await getNodeCreateHash()\n if (factory) {\n const h = factory('sha1')\n h.update(data)\n return h.digest('hex')\n }\n // Copy subarray and SharedArrayBuffer-backed views so WebCrypto hashes\n // exactly `data`'s visible bytes with a plain ArrayBuffer.\n /* v8 ignore start -- WebCrypto fallback, only reachable when node:crypto is unavailable */\n const hashBuffer = await crypto.subtle.digest('SHA-1', arrayBufferFor(data))\n return hexEncode(new Uint8Array(hashBuffer))\n /* v8 ignore stop */\n}\n\n/**\n * Compute the SHA-256 hex digest of a complete byte array in one shot.\n * @param data - The byte array to hash.\n *\n * @returns The lowercase hex-encoded SHA-256 digest of the input.\n */\nexport async function sha256Hex(data: Uint8Array): Promise<string> {\n return utilSha256Hex(data)\n}\n"],"mappings":"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"}
|
package/dist/streams/index.cjs
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_encryption = require("../types/encryption.cjs");
|
|
2
3
|
const require_hash = require("./hash.cjs");
|
|
3
4
|
const require_file_source = require("./file-source.cjs");
|
|
4
5
|
const require_source = require("./source.cjs");
|
|
5
|
-
const require_encryption = require("../types/encryption.cjs");
|
|
6
6
|
exports.BlobSource = require_source.BlobSource;
|
|
7
7
|
exports.BufferSource = require_source.BufferSource;
|
|
8
8
|
exports.EncryptionKey = require_encryption.EncryptionKey;
|
|
9
9
|
exports.FileSource = require_file_source.FileSource;
|
|
10
10
|
exports.IncrementalSha1 = require_hash.IncrementalSha1;
|
|
11
|
+
exports.IncrementalSha256 = require_hash.IncrementalSha256;
|
|
11
12
|
exports.StreamSource = require_source.StreamSource;
|
|
12
13
|
exports.sha1Hex = require_hash.sha1Hex;
|
|
14
|
+
exports.sha256Hex = require_hash.sha256Hex;
|
|
13
15
|
exports.toContentSource = require_source.toContentSource;
|
package/dist/streams/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @packageDocumentation */
|
|
2
2
|
export { EncryptionKey } from '../types/encryption.js';
|
|
3
|
-
export { IncrementalSha1, sha1Hex } from './hash.js';
|
|
3
|
+
export { IncrementalSha1, IncrementalSha256, sha1Hex, sha256Hex } from './hash.js';
|
|
4
4
|
export type { ProgressEvent, ProgressListener } from './progress.js';
|
|
5
5
|
export type { ContentSource, FileSourcePath } from './source.js';
|
|
6
6
|
export { BlobSource, BufferSource, FileSource, StreamSource, toContentSource, } from './source.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/streams/index.js"],"names":[],"mappings":"AAAA,4BAA4B;AAO5B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/streams/index.js"],"names":[],"mappings":"AAAA,4BAA4B;AAO5B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAClF,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACpE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAA"}
|
package/dist/streams/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @packageDocumentation */
|
|
2
2
|
export { EncryptionKey } from '../types/encryption.js';
|
|
3
|
-
export { IncrementalSha1, sha1Hex } from './hash.js';
|
|
3
|
+
export { IncrementalSha1, IncrementalSha256, sha1Hex, sha256Hex } from './hash.js';
|
|
4
4
|
export type { ProgressEvent, ProgressListener } from './progress.js';
|
|
5
5
|
export type { ContentSource, FileSourcePath } from './source.js';
|
|
6
6
|
export { BlobSource, BufferSource, FileSource, StreamSource, toContentSource, } from './source.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/streams/index.js"],"names":[],"mappings":"AAAA,4BAA4B;AAO5B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/streams/index.js"],"names":[],"mappings":"AAAA,4BAA4B;AAO5B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAClF,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACpE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAA"}
|
package/dist/streams/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EncryptionKey } from "../types/encryption.js";
|
|
2
|
+
import { IncrementalSha1, IncrementalSha256, sha1Hex, sha256Hex } from "./hash.js";
|
|
2
3
|
import { FileSource } from "./file-source.js";
|
|
3
4
|
import { BlobSource, BufferSource, StreamSource, toContentSource } from "./source.js";
|
|
4
|
-
|
|
5
|
-
export { BlobSource, BufferSource, EncryptionKey, FileSource, IncrementalSha1, StreamSource, sha1Hex, toContentSource };
|
|
5
|
+
export { BlobSource, BufferSource, EncryptionKey, FileSource, IncrementalSha1, IncrementalSha256, StreamSource, sha1Hex, sha256Hex, toContentSource };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
//#region src/streams/progress.ts
|
|
2
1
|
/**
|
|
3
2
|
* Accumulates byte and part counts and emits {@link ProgressEvent}s to a listener.
|
|
4
3
|
*
|
|
@@ -19,31 +18,91 @@ var ProgressTracker = class {
|
|
|
19
18
|
partsCompleted = 0;
|
|
20
19
|
/** Timestamp when tracking began. */
|
|
21
20
|
startTime;
|
|
21
|
+
/** Minimum milliseconds between byte-only emissions. */
|
|
22
|
+
minIntervalMs;
|
|
23
|
+
/** Timestamp of the most recent emitted snapshot. */
|
|
24
|
+
lastEmitTime = null;
|
|
25
|
+
/** Timer scheduled for a coalesced byte-only emission. */
|
|
26
|
+
pendingEmitTimer;
|
|
27
|
+
/** Listener error captured from a detached timer callback. */
|
|
28
|
+
listenerError;
|
|
22
29
|
/**
|
|
23
30
|
* Creates a new ProgressTracker.
|
|
24
31
|
* @param listener - Callback to receive progress events, or undefined to disable.
|
|
25
32
|
* @param totalBytes - Expected total bytes, or null if unknown.
|
|
26
33
|
* @param totalParts - Expected total parts, or null if not a multipart transfer.
|
|
34
|
+
* @param options - Optional emission controls.
|
|
27
35
|
*/
|
|
28
|
-
constructor(listener, totalBytes, totalParts) {
|
|
36
|
+
constructor(listener, totalBytes, totalParts, options = {}) {
|
|
29
37
|
this.listener = listener;
|
|
30
38
|
this.totalBytes = totalBytes;
|
|
31
39
|
this.totalParts = totalParts;
|
|
32
40
|
this.startTime = Date.now();
|
|
41
|
+
this.minIntervalMs = Math.max(0, options.minIntervalMs ?? 100);
|
|
33
42
|
}
|
|
34
43
|
/**
|
|
35
|
-
* Record that additional bytes have been transferred and
|
|
44
|
+
* Record that additional bytes have been transferred and schedule listener notification.
|
|
36
45
|
* @param count - The number of additional bytes that were transferred.
|
|
37
46
|
*/
|
|
38
47
|
addBytes(count) {
|
|
48
|
+
this.throwPendingListenerError();
|
|
39
49
|
this.bytesTransferred += count;
|
|
40
|
-
this.
|
|
50
|
+
this.emitThrottled();
|
|
41
51
|
}
|
|
42
52
|
/** Record that a multipart part has completed and notify the listener. */
|
|
43
53
|
completePart() {
|
|
54
|
+
this.throwPendingListenerError();
|
|
55
|
+
this.flushPendingEmit();
|
|
44
56
|
this.partsCompleted++;
|
|
57
|
+
this.emitNow();
|
|
58
|
+
}
|
|
59
|
+
/** Cancel any pending coalesced progress emission. */
|
|
60
|
+
dispose() {
|
|
61
|
+
this.clearPendingEmit();
|
|
62
|
+
this.listenerError = void 0;
|
|
63
|
+
}
|
|
64
|
+
emitThrottled() {
|
|
65
|
+
if (this.listener === void 0) return;
|
|
66
|
+
if (this.minIntervalMs === 0) {
|
|
67
|
+
this.emitNow();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const now = Date.now();
|
|
71
|
+
if (this.lastEmitTime === null || now - this.lastEmitTime >= this.minIntervalMs) {
|
|
72
|
+
this.emitNow(now);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (this.pendingEmitTimer !== void 0) return;
|
|
76
|
+
const delay = Math.max(0, this.minIntervalMs - (now - this.lastEmitTime));
|
|
77
|
+
this.pendingEmitTimer = setTimeout(() => {
|
|
78
|
+
this.pendingEmitTimer = void 0;
|
|
79
|
+
try {
|
|
80
|
+
this.emitNow();
|
|
81
|
+
} catch (err) {
|
|
82
|
+
this.listenerError = err;
|
|
83
|
+
}
|
|
84
|
+
}, delay);
|
|
85
|
+
this.pendingEmitTimer.unref?.();
|
|
86
|
+
}
|
|
87
|
+
flushPendingEmit() {
|
|
88
|
+
if (this.pendingEmitTimer !== void 0) this.emitNow();
|
|
89
|
+
}
|
|
90
|
+
clearPendingEmit() {
|
|
91
|
+
if (this.pendingEmitTimer === void 0) return;
|
|
92
|
+
clearTimeout(this.pendingEmitTimer);
|
|
93
|
+
this.pendingEmitTimer = void 0;
|
|
94
|
+
}
|
|
95
|
+
emitNow(now = Date.now()) {
|
|
96
|
+
this.clearPendingEmit();
|
|
97
|
+
this.lastEmitTime = now;
|
|
45
98
|
this.emit();
|
|
46
99
|
}
|
|
100
|
+
throwPendingListenerError() {
|
|
101
|
+
if (this.listenerError === void 0) return;
|
|
102
|
+
const err = this.listenerError;
|
|
103
|
+
this.listenerError = void 0;
|
|
104
|
+
throw err;
|
|
105
|
+
}
|
|
47
106
|
/** Emit the current progress snapshot to the listener, if one is registered. */
|
|
48
107
|
emit() {
|
|
49
108
|
this.listener?.({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.cjs","names":[],"sources":["../../src/streams/progress.ts"],"sourcesContent":["/** Snapshot of upload or download progress at a point in time. */\nexport interface ProgressEvent {\n /** Number of bytes transferred so far. */\n readonly bytesTransferred: number\n /** Total bytes expected, or null if unknown. */\n readonly totalBytes: number | null\n /** Number of multipart parts completed so far. */\n readonly partsCompleted: number\n /** Total number of parts expected, or null if unknown. */\n readonly totalParts: number | null\n /** Milliseconds elapsed since the operation started. */\n readonly elapsedMs: number\n}\n\n/** Callback invoked each time transfer progress changes. */\nexport type ProgressListener = (event: ProgressEvent) => void\n\n/**\n * Accumulates byte and part counts and emits {@link ProgressEvent}s to a listener.\n *\n * Internal building block. The SDK wires one of these inside every\n * transfer that accepts an `onProgress` option; users supply the\n * listener callback, not the tracker. Exported only so SDK source\n * modules can import it; not re-exported through any subpath.\n *\n * @internal\n */\nexport class ProgressTracker {\n /** Running total of bytes transferred. */\n private bytesTransferred = 0\n /** Running count of completed parts. */\n private partsCompleted = 0\n /** Timestamp when tracking began. */\n private readonly startTime: number\n\n /**\n * Creates a new ProgressTracker.\n * @param listener - Callback to receive progress events, or undefined to disable.\n * @param totalBytes - Expected total bytes, or null if unknown.\n * @param totalParts - Expected total parts, or null if not a multipart transfer.\n */\n constructor(\n private readonly listener: ProgressListener | undefined,\n private readonly totalBytes: number | null,\n private readonly totalParts: number | null,\n ) {\n this.startTime = Date.now()\n }\n\n /**\n * Record that additional bytes have been transferred and
|
|
1
|
+
{"version":3,"file":"progress.cjs","names":[],"sources":["../../src/streams/progress.ts"],"sourcesContent":["/** Snapshot of upload or download progress at a point in time. */\nexport interface ProgressEvent {\n /** Number of bytes transferred so far. */\n readonly bytesTransferred: number\n /** Total bytes expected, or null if unknown. */\n readonly totalBytes: number | null\n /** Number of multipart parts completed so far. */\n readonly partsCompleted: number\n /** Total number of parts expected, or null if unknown. */\n readonly totalParts: number | null\n /** Milliseconds elapsed since the operation started. */\n readonly elapsedMs: number\n}\n\n/** Callback invoked each time transfer progress changes. */\nexport type ProgressListener = (event: ProgressEvent) => void\n\n/** Default minimum time between byte-progress emissions. */\nexport const DEFAULT_PROGRESS_EMIT_INTERVAL_MS = 100\n\n/** Internal controls for ProgressTracker emission behavior. */\nexport interface ProgressTrackerOptions {\n /**\n * Minimum milliseconds between byte-only progress emissions.\n * Set to 0 to emit every change.\n */\n readonly minIntervalMs?: number\n}\n\n/**\n * Accumulates byte and part counts and emits {@link ProgressEvent}s to a listener.\n *\n * Internal building block. The SDK wires one of these inside every\n * transfer that accepts an `onProgress` option; users supply the\n * listener callback, not the tracker. Exported only so SDK source\n * modules can import it; not re-exported through any subpath.\n *\n * @internal\n */\nexport class ProgressTracker {\n /** Running total of bytes transferred. */\n private bytesTransferred = 0\n /** Running count of completed parts. */\n private partsCompleted = 0\n /** Timestamp when tracking began. */\n private readonly startTime: number\n /** Minimum milliseconds between byte-only emissions. */\n private readonly minIntervalMs: number\n /** Timestamp of the most recent emitted snapshot. */\n private lastEmitTime: number | null = null\n /** Timer scheduled for a coalesced byte-only emission. */\n private pendingEmitTimer: ReturnType<typeof setTimeout> | undefined\n /** Listener error captured from a detached timer callback. */\n private listenerError: unknown\n\n /**\n * Creates a new ProgressTracker.\n * @param listener - Callback to receive progress events, or undefined to disable.\n * @param totalBytes - Expected total bytes, or null if unknown.\n * @param totalParts - Expected total parts, or null if not a multipart transfer.\n * @param options - Optional emission controls.\n */\n constructor(\n private readonly listener: ProgressListener | undefined,\n private readonly totalBytes: number | null,\n private readonly totalParts: number | null,\n options: ProgressTrackerOptions = {},\n ) {\n this.startTime = Date.now()\n this.minIntervalMs = Math.max(0, options.minIntervalMs ?? DEFAULT_PROGRESS_EMIT_INTERVAL_MS)\n }\n\n /**\n * Record that additional bytes have been transferred and schedule listener notification.\n * @param count - The number of additional bytes that were transferred.\n */\n addBytes(count: number): void {\n this.throwPendingListenerError()\n this.bytesTransferred += count\n this.emitThrottled()\n }\n\n /** Record that a multipart part has completed and notify the listener. */\n completePart(): void {\n this.throwPendingListenerError()\n this.flushPendingEmit()\n this.partsCompleted++\n this.emitNow()\n }\n\n /** Cancel any pending coalesced progress emission. */\n dispose(): void {\n this.clearPendingEmit()\n this.listenerError = undefined\n }\n\n private emitThrottled(): void {\n if (this.listener === undefined) return\n if (this.minIntervalMs === 0) {\n this.emitNow()\n return\n }\n\n const now = Date.now()\n if (this.lastEmitTime === null || now - this.lastEmitTime >= this.minIntervalMs) {\n this.emitNow(now)\n return\n }\n\n if (this.pendingEmitTimer !== undefined) return\n\n const delay = Math.max(0, this.minIntervalMs - (now - this.lastEmitTime))\n this.pendingEmitTimer = setTimeout(() => {\n this.pendingEmitTimer = undefined\n try {\n this.emitNow()\n } catch (err) {\n this.listenerError = err\n }\n }, delay)\n ;(this.pendingEmitTimer as { unref?: () => void }).unref?.()\n }\n\n private flushPendingEmit(): void {\n if (this.pendingEmitTimer !== undefined) {\n this.emitNow()\n }\n }\n\n private clearPendingEmit(): void {\n if (this.pendingEmitTimer === undefined) return\n clearTimeout(this.pendingEmitTimer)\n this.pendingEmitTimer = undefined\n }\n\n private emitNow(now = Date.now()): void {\n this.clearPendingEmit()\n this.lastEmitTime = now\n this.emit()\n }\n\n private throwPendingListenerError(): void {\n if (this.listenerError === undefined) return\n const err = this.listenerError\n this.listenerError = undefined\n throw err\n }\n\n /** Emit the current progress snapshot to the listener, if one is registered. */\n private emit(): void {\n this.listener?.({\n bytesTransferred: this.bytesTransferred,\n totalBytes: this.totalBytes,\n partsCompleted: this.partsCompleted,\n totalParts: this.totalParts,\n elapsedMs: Date.now() - this.startTime,\n })\n }\n}\n"],"mappings":";;;;;;;;;;AAuCA,IAAa,kBAAb,MAA6B;CAwBR;CACA;CACA;;CAxBnB,mBAA2B;;CAE3B,iBAAyB;;CAEzB;;CAEA;;CAEA,eAAsC;;CAEtC;;CAEA;;;;;;;;CASA,YACE,UACA,YACA,YACA,UAAkC,CAAC,GACnC;EAJiB,KAAA,WAAA;EACA,KAAA,aAAA;EACA,KAAA,aAAA;EAGjB,KAAK,YAAY,KAAK,IAAI;EAC1B,KAAK,gBAAgB,KAAK,IAAI,GAAG,QAAQ,iBAAA,GAAkD;CAC7F;;;;;CAMA,SAAS,OAAqB;EAC5B,KAAK,0BAA0B;EAC/B,KAAK,oBAAoB;EACzB,KAAK,cAAc;CACrB;;CAGA,eAAqB;EACnB,KAAK,0BAA0B;EAC/B,KAAK,iBAAiB;EACtB,KAAK;EACL,KAAK,QAAQ;CACf;;CAGA,UAAgB;EACd,KAAK,iBAAiB;EACtB,KAAK,gBAAgB,KAAA;CACvB;CAEA,gBAA8B;EAC5B,IAAI,KAAK,aAAa,KAAA,GAAW;EACjC,IAAI,KAAK,kBAAkB,GAAG;GAC5B,KAAK,QAAQ;GACb;EACF;EAEA,MAAM,MAAM,KAAK,IAAI;EACrB,IAAI,KAAK,iBAAiB,QAAQ,MAAM,KAAK,gBAAgB,KAAK,eAAe;GAC/E,KAAK,QAAQ,GAAG;GAChB;EACF;EAEA,IAAI,KAAK,qBAAqB,KAAA,GAAW;EAEzC,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,iBAAiB,MAAM,KAAK,aAAa;EACxE,KAAK,mBAAmB,iBAAiB;GACvC,KAAK,mBAAmB,KAAA;GACxB,IAAI;IACF,KAAK,QAAQ;GACf,SAAS,KAAK;IACZ,KAAK,gBAAgB;GACvB;EACF,GAAG,KAAK;EACP,KAAM,iBAA4C,QAAQ;CAC7D;CAEA,mBAAiC;EAC/B,IAAI,KAAK,qBAAqB,KAAA,GAC5B,KAAK,QAAQ;CAEjB;CAEA,mBAAiC;EAC/B,IAAI,KAAK,qBAAqB,KAAA,GAAW;EACzC,aAAa,KAAK,gBAAgB;EAClC,KAAK,mBAAmB,KAAA;CAC1B;CAEA,QAAgB,MAAM,KAAK,IAAI,GAAS;EACtC,KAAK,iBAAiB;EACtB,KAAK,eAAe;EACpB,KAAK,KAAK;CACZ;CAEA,4BAA0C;EACxC,IAAI,KAAK,kBAAkB,KAAA,GAAW;EACtC,MAAM,MAAM,KAAK;EACjB,KAAK,gBAAgB,KAAA;EACrB,MAAM;CACR;;CAGA,OAAqB;EACnB,KAAK,WAAW;GACd,kBAAkB,KAAK;GACvB,YAAY,KAAK;GACjB,gBAAgB,KAAK;GACrB,YAAY,KAAK;GACjB,WAAW,KAAK,IAAI,IAAI,KAAK;EAC/B,CAAC;CACH;AACF"}
|
|
@@ -13,6 +13,16 @@ export interface ProgressEvent {
|
|
|
13
13
|
}
|
|
14
14
|
/** Callback invoked each time transfer progress changes. */
|
|
15
15
|
export type ProgressListener = (event: ProgressEvent) => void;
|
|
16
|
+
/** Default minimum time between byte-progress emissions. */
|
|
17
|
+
export declare const DEFAULT_PROGRESS_EMIT_INTERVAL_MS = 100;
|
|
18
|
+
/** Internal controls for ProgressTracker emission behavior. */
|
|
19
|
+
export interface ProgressTrackerOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Minimum milliseconds between byte-only progress emissions.
|
|
22
|
+
* Set to 0 to emit every change.
|
|
23
|
+
*/
|
|
24
|
+
readonly minIntervalMs?: number;
|
|
25
|
+
}
|
|
16
26
|
/**
|
|
17
27
|
* Accumulates byte and part counts and emits {@link ProgressEvent}s to a listener.
|
|
18
28
|
*
|
|
@@ -33,20 +43,36 @@ export declare class ProgressTracker {
|
|
|
33
43
|
private partsCompleted;
|
|
34
44
|
/** Timestamp when tracking began. */
|
|
35
45
|
private readonly startTime;
|
|
46
|
+
/** Minimum milliseconds between byte-only emissions. */
|
|
47
|
+
private readonly minIntervalMs;
|
|
48
|
+
/** Timestamp of the most recent emitted snapshot. */
|
|
49
|
+
private lastEmitTime;
|
|
50
|
+
/** Timer scheduled for a coalesced byte-only emission. */
|
|
51
|
+
private pendingEmitTimer;
|
|
52
|
+
/** Listener error captured from a detached timer callback. */
|
|
53
|
+
private listenerError;
|
|
36
54
|
/**
|
|
37
55
|
* Creates a new ProgressTracker.
|
|
38
56
|
* @param listener - Callback to receive progress events, or undefined to disable.
|
|
39
57
|
* @param totalBytes - Expected total bytes, or null if unknown.
|
|
40
58
|
* @param totalParts - Expected total parts, or null if not a multipart transfer.
|
|
59
|
+
* @param options - Optional emission controls.
|
|
41
60
|
*/
|
|
42
|
-
constructor(listener: ProgressListener | undefined, totalBytes: number | null, totalParts: number | null);
|
|
61
|
+
constructor(listener: ProgressListener | undefined, totalBytes: number | null, totalParts: number | null, options?: ProgressTrackerOptions);
|
|
43
62
|
/**
|
|
44
|
-
* Record that additional bytes have been transferred and
|
|
63
|
+
* Record that additional bytes have been transferred and schedule listener notification.
|
|
45
64
|
* @param count - The number of additional bytes that were transferred.
|
|
46
65
|
*/
|
|
47
66
|
addBytes(count: number): void;
|
|
48
67
|
/** Record that a multipart part has completed and notify the listener. */
|
|
49
68
|
completePart(): void;
|
|
69
|
+
/** Cancel any pending coalesced progress emission. */
|
|
70
|
+
dispose(): void;
|
|
71
|
+
private emitThrottled;
|
|
72
|
+
private flushPendingEmit;
|
|
73
|
+
private clearPendingEmit;
|
|
74
|
+
private emitNow;
|
|
75
|
+
private throwPendingListenerError;
|
|
50
76
|
/** Emit the current progress snapshot to the listener, if one is registered. */
|
|
51
77
|
private emit;
|
|
52
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/streams/progress.js"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,gDAAgD;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,kDAAkD;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;AAE7D;;;;;;;;;GASG;AACH,qBAAa,eAAe;
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/streams/progress.js"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,gDAAgD;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,kDAAkD;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;AAE7D,4DAA4D;AAC5D,eAAO,MAAM,iCAAiC,MAAM,CAAA;AAEpD,+DAA+D;AAC/D,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAwBxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAzB7B,0CAA0C;IAC1C,OAAO,CAAC,gBAAgB,CAAI;IAC5B,wCAAwC;IACxC,OAAO,CAAC,cAAc,CAAI;IAC1B,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,qDAAqD;IACrD,OAAO,CAAC,YAAY,CAAsB;IAC1C,0DAA0D;IAC1D,OAAO,CAAC,gBAAgB,CAA2C;IACnE,8DAA8D;IAC9D,OAAO,CAAC,aAAa,CAAS;IAE9B;;;;;;OAMG;gBAEgB,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,MAAM,GAAG,IAAI,EAC1C,OAAO,GAAE,sBAA2B;IAMtC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B,0EAA0E;IAC1E,YAAY,IAAI,IAAI;IAOpB,sDAAsD;IACtD,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,yBAAyB;IAOjC,gFAAgF;IAChF,OAAO,CAAC,IAAI;CASb"}
|