@backblaze-labs/b2-sdk 0.2.0 → 0.3.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 +42 -1
- package/README.md +20 -2
- 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/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 +146 -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 +146 -0
- package/dist/backup/raw.js.map +1 -0
- package/dist/bucket.cjs +2 -1
- package/dist/bucket.cjs.map +1 -1
- package/dist/bucket.js +2 -1
- package/dist/bucket.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 +141 -6
- package/dist/download/single.cjs.map +1 -1
- package/dist/download/single.d.cts.map +1 -1
- package/dist/download/single.d.ts.map +1 -1
- package/dist/download/single.js +141 -6
- package/dist/download/single.js.map +1 -1
- package/dist/errors/index.cjs +173 -3
- package/dist/errors/index.cjs.map +1 -1
- package/dist/errors/index.d.cts +119 -0
- package/dist/errors/index.d.cts.map +1 -1
- package/dist/errors/index.d.ts +119 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +161 -4
- package/dist/errors/index.js.map +1 -1
- 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 +61 -23
- package/dist/http/transport.cjs.map +1 -1
- package/dist/http/transport.d.cts +25 -3
- package/dist/http/transport.d.cts.map +1 -1
- package/dist/http/transport.d.ts +25 -3
- package/dist/http/transport.d.ts.map +1 -1
- package/dist/http/transport.js +59 -22
- package/dist/http/transport.js.map +1 -1
- package/dist/index.cjs +25 -2
- package/dist/index.d.cts +6 -4
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -6
- package/dist/object.cjs +1 -1
- package/dist/object.cjs.map +1 -1
- package/dist/object.d.cts +4 -2
- package/dist/object.d.cts.map +1 -1
- package/dist/object.d.ts +4 -2
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +1 -1
- 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 +175 -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 +175 -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 +255 -0
- package/dist/partner/client.cjs.map +1 -0
- package/dist/partner/client.d.cts +335 -0
- package/dist/partner/client.d.cts.map +1 -0
- package/dist/partner/client.d.ts +335 -0
- package/dist/partner/client.d.ts.map +1 -0
- package/dist/partner/client.js +255 -0
- package/dist/partner/client.js.map +1 -0
- package/dist/partner/endpoint-url.cjs +108 -0
- package/dist/partner/endpoint-url.cjs.map +1 -0
- package/dist/partner/endpoint-url.d.cts +72 -0
- package/dist/partner/endpoint-url.d.cts.map +1 -0
- package/dist/partner/endpoint-url.d.ts +72 -0
- package/dist/partner/endpoint-url.d.ts.map +1 -0
- package/dist/partner/endpoint-url.js +105 -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 +18 -0
- package/dist/partner/index.d.cts +23 -0
- package/dist/partner/index.d.cts.map +1 -0
- package/dist/partner/index.d.ts +23 -0
- package/dist/partner/index.d.ts.map +1 -0
- package/dist/partner/index.js +7 -0
- package/dist/partner/raw.cjs +392 -0
- package/dist/partner/raw.cjs.map +1 -0
- package/dist/partner/raw.d.cts +223 -0
- package/dist/partner/raw.d.cts.map +1 -0
- package/dist/partner/raw.d.ts +223 -0
- package/dist/partner/raw.d.ts.map +1 -0
- package/dist/partner/raw.js +390 -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 +267 -0
- package/dist/partner/redaction.cjs.map +1 -0
- package/dist/partner/redaction.d.cts +124 -0
- package/dist/partner/redaction.d.cts.map +1 -0
- package/dist/partner/redaction.d.ts +124 -0
- package/dist/partner/redaction.d.ts.map +1 -0
- package/dist/partner/redaction.js +257 -0
- package/dist/partner/redaction.js.map +1 -0
- package/dist/raw/index.cjs +81 -19
- package/dist/raw/index.cjs.map +1 -1
- package/dist/raw/index.d.cts +6 -2
- package/dist/raw/index.d.cts.map +1 -1
- package/dist/raw/index.d.ts +6 -2
- package/dist/raw/index.d.ts.map +1 -1
- package/dist/raw/index.js +81 -19
- 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 +1197 -206
- package/dist/simulator/index.cjs.map +1 -1
- package/dist/simulator/index.d.cts +109 -11
- package/dist/simulator/index.d.cts.map +1 -1
- package/dist/simulator/index.d.ts +109 -11
- package/dist/simulator/index.d.ts.map +1 -1
- package/dist/simulator/index.js +1196 -209
- package/dist/simulator/index.js.map +1 -1
- package/dist/simulator/partner.cjs +719 -0
- package/dist/simulator/partner.cjs.map +1 -0
- package/dist/simulator/partner.d.cts +183 -0
- package/dist/simulator/partner.d.cts.map +1 -0
- package/dist/simulator/partner.d.ts +183 -0
- package/dist/simulator/partner.d.ts.map +1 -0
- package/dist/simulator/partner.js +718 -0
- package/dist/simulator/partner.js.map +1 -0
- package/dist/simulator/validation.cjs +577 -0
- package/dist/simulator/validation.cjs.map +1 -1
- package/dist/simulator/validation.d.cts +117 -0
- package/dist/simulator/validation.d.cts.map +1 -1
- package/dist/simulator/validation.d.ts +117 -0
- package/dist/simulator/validation.d.ts.map +1 -1
- package/dist/simulator/validation.js +563 -1
- package/dist/simulator/validation.js.map +1 -1
- package/dist/streams/file-source.cjs +1 -1
- package/dist/streams/file-source.cjs.map +1 -1
- package/dist/streams/file-source.js +1 -1
- package/dist/streams/file-source.js.map +1 -1
- package/dist/streams/index.cjs +1 -1
- package/dist/streams/index.js +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 +11 -10
- package/dist/sync/download-staging.cjs.map +1 -1
- package/dist/sync/download-staging.d.cts +2 -1
- package/dist/sync/download-staging.d.cts.map +1 -1
- package/dist/sync/download-staging.d.ts +2 -1
- package/dist/sync/download-staging.d.ts.map +1 -1
- package/dist/sync/download-staging.js +11 -10
- 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/local-file-io.cjs +11 -6
- package/dist/sync/local-file-io.cjs.map +1 -1
- package/dist/sync/local-file-io.d.cts +1 -0
- package/dist/sync/local-file-io.d.cts.map +1 -1
- package/dist/sync/local-file-io.d.ts +1 -0
- package/dist/sync/local-file-io.d.ts.map +1 -1
- package/dist/sync/local-file-io.js +11 -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/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 +2 -2
- package/dist/sync/scanners/b2.cjs.map +1 -1
- package/dist/sync/scanners/b2.js +2 -2
- package/dist/sync/scanners/b2.js.map +1 -1
- package/dist/sync/scanners/local.cjs.map +1 -1
- package/dist/sync/scanners/local.js.map +1 -1
- package/dist/sync/synchronizer.cjs +3 -2
- package/dist/sync/synchronizer.cjs.map +1 -1
- package/dist/sync/synchronizer.js +3 -2
- package/dist/sync/synchronizer.js.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 +80 -0
- package/dist/types/backup.d.cts.map +1 -0
- package/dist/types/backup.d.ts +80 -0
- package/dist/types/backup.d.ts.map +1 -0
- package/dist/types/bucket.cjs.map +1 -1
- package/dist/types/bucket.d.cts +4 -2
- package/dist/types/bucket.d.cts.map +1 -1
- package/dist/types/bucket.d.ts +4 -2
- package/dist/types/bucket.d.ts.map +1 -1
- 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 +98 -0
- package/dist/types/download.d.cts.map +1 -1
- package/dist/types/download.d.ts +98 -0
- 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 +58 -229
- package/dist/types/encryption.cjs.map +1 -1
- package/dist/types/encryption.d.cts +32 -0
- package/dist/types/encryption.d.cts.map +1 -1
- package/dist/types/encryption.d.ts +32 -0
- package/dist/types/encryption.d.ts.map +1 -1
- package/dist/types/encryption.js +56 -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.map +1 -1
- package/dist/types/file.d.cts +15 -2
- package/dist/types/file.d.cts.map +1 -1
- package/dist/types/file.d.ts +15 -2
- package/dist/types/file.d.ts.map +1 -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 +10 -6
- package/dist/types/index.d.cts.map +1 -1
- package/dist/types/index.d.ts +10 -6
- package/dist/types/index.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 +1 -1
- package/dist/types/notifications.cjs.map +1 -1
- package/dist/types/notifications.d.cts +5 -3
- package/dist/types/notifications.d.cts.map +1 -1
- package/dist/types/notifications.d.ts +5 -3
- package/dist/types/notifications.d.ts.map +1 -1
- package/dist/types/notifications.js +1 -1
- 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 +394 -0
- package/dist/types/partner.d.cts.map +1 -0
- package/dist/types/partner.d.ts +394 -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 +31 -18
- package/dist/types/upload.d.cts.map +1 -1
- package/dist/types/upload.d.ts +31 -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 +5 -1
- package/dist/upload/large.cjs.map +1 -1
- package/dist/upload/large.d.cts +16 -2
- package/dist/upload/large.d.cts.map +1 -1
- package/dist/upload/large.d.ts +16 -2
- package/dist/upload/large.d.ts.map +1 -1
- package/dist/upload/large.js +5 -1
- package/dist/upload/large.js.map +1 -1
- package/dist/upload/options.cjs.map +1 -1
- package/dist/upload/options.d.cts +12 -0
- package/dist/upload/options.d.cts.map +1 -1
- package/dist/upload/options.d.ts +12 -0
- package/dist/upload/options.d.ts.map +1 -1
- package/dist/upload/options.js.map +1 -1
- package/dist/upload/resume.cjs +2 -1
- package/dist/upload/resume.cjs.map +1 -1
- package/dist/upload/resume.d.cts +3 -1
- package/dist/upload/resume.d.cts.map +1 -1
- package/dist/upload/resume.d.ts +3 -1
- package/dist/upload/resume.d.ts.map +1 -1
- package/dist/upload/resume.js +2 -1
- package/dist/upload/resume.js.map +1 -1
- package/dist/upload/retry.cjs +8 -3
- package/dist/upload/retry.cjs.map +1 -1
- package/dist/upload/retry.js +8 -3
- package/dist/upload/retry.js.map +1 -1
- package/dist/upload/single.cjs +2 -1
- package/dist/upload/single.cjs.map +1 -1
- package/dist/upload/single.d.cts +6 -0
- package/dist/upload/single.d.cts.map +1 -1
- package/dist/upload/single.d.ts +6 -0
- package/dist/upload/single.d.ts.map +1 -1
- package/dist/upload/single.js +2 -1
- package/dist/upload/single.js.map +1 -1
- package/dist/upload/stream.cjs +6 -4
- package/dist/upload/stream.cjs.map +1 -1
- package/dist/upload/stream.d.cts +6 -0
- package/dist/upload/stream.d.cts.map +1 -1
- package/dist/upload/stream.d.ts +6 -0
- package/dist/upload/stream.d.ts.map +1 -1
- package/dist/upload/stream.js +3 -1
- 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/package.json +38 -16
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { B2PartnerAuthorizationError } from "../errors/index.js";
|
|
2
|
+
import { APPLICATION_KEY_REDACTED, PARTNER_TOKEN_REDACTED } from "./redaction-placeholders.js";
|
|
3
|
+
//#region src/partner/redaction.ts
|
|
4
|
+
var inspectSymbol = Symbol.for("nodejs.util.inspect.custom");
|
|
5
|
+
function installPortableJsonHook(target, toJson) {
|
|
6
|
+
const originalPrototype = Object.getPrototypeOf(target);
|
|
7
|
+
const redactionPrototype = Object.create(originalPrototype);
|
|
8
|
+
Object.defineProperty(redactionPrototype, "toJSON", {
|
|
9
|
+
value: toJson,
|
|
10
|
+
enumerable: false,
|
|
11
|
+
configurable: true
|
|
12
|
+
});
|
|
13
|
+
Object.setPrototypeOf(target, redactionPrototype);
|
|
14
|
+
Object.defineProperty(target, "toJSON", {
|
|
15
|
+
value: toJson,
|
|
16
|
+
enumerable: false,
|
|
17
|
+
configurable: true
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Returns a redacted copy for log serializers that intentionally hide tokens.
|
|
22
|
+
*
|
|
23
|
+
* @param auth - Partner authorization response to render safely.
|
|
24
|
+
*
|
|
25
|
+
* @returns A plain object with the Partner token replaced by a placeholder.
|
|
26
|
+
*/
|
|
27
|
+
function partnerAuthorizeResponseToRedactedJson(auth) {
|
|
28
|
+
return {
|
|
29
|
+
...auth,
|
|
30
|
+
authorizationToken: PARTNER_TOKEN_REDACTED
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns a redacted copy for log serializers that intentionally hide group-member keys.
|
|
35
|
+
*
|
|
36
|
+
* @param result - Create group member result to render safely.
|
|
37
|
+
*
|
|
38
|
+
* @returns A plain object with the application key secret replaced by a placeholder.
|
|
39
|
+
*/
|
|
40
|
+
function createGroupMemberResultToRedactedJson(result) {
|
|
41
|
+
return {
|
|
42
|
+
...result,
|
|
43
|
+
applicationKey: APPLICATION_KEY_REDACTED
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Returns a redacted copy for log serializers that intentionally hide group-member keys.
|
|
48
|
+
*
|
|
49
|
+
* @param response - Create group member response to render safely.
|
|
50
|
+
*
|
|
51
|
+
* @returns A plain array with every application key secret replaced by a placeholder.
|
|
52
|
+
*/
|
|
53
|
+
function createGroupMemberResponseToRedactedJson(response) {
|
|
54
|
+
return response.map((result) => createGroupMemberResultToRedactedJson(result));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Returns a redacted copy for log serializers that intentionally hide trial account keys.
|
|
58
|
+
*
|
|
59
|
+
* @param result - Reserve trial account result to render safely.
|
|
60
|
+
*
|
|
61
|
+
* @returns A plain object with the application key secret replaced by a placeholder.
|
|
62
|
+
*/
|
|
63
|
+
function reserveTrialCreateAccountResultToRedactedJson(result) {
|
|
64
|
+
return {
|
|
65
|
+
...result,
|
|
66
|
+
applicationKey: APPLICATION_KEY_REDACTED
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Returns a redacted copy for log serializers that intentionally hide trial account keys.
|
|
71
|
+
*
|
|
72
|
+
* @param response - Reserve trial account response to render safely.
|
|
73
|
+
*
|
|
74
|
+
* @returns A plain array with every application key secret replaced by a placeholder.
|
|
75
|
+
*/
|
|
76
|
+
function reserveTrialCreateAccountResponseToRedactedJson(response) {
|
|
77
|
+
return response.map((result) => reserveTrialCreateAccountResultToRedactedJson(result));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Adds non-enumerable serialization and inspection hooks that redact the
|
|
81
|
+
* Partner token through `JSON.stringify`, `toString`, and Node `util.inspect`
|
|
82
|
+
* while preserving direct property access.
|
|
83
|
+
*
|
|
84
|
+
* `JSON.stringify` no longer round-trips `authorizationToken` from protected
|
|
85
|
+
* authorize responses. Persist trusted auth caches with
|
|
86
|
+
* `partnerAuthorizeResponseForPersistence(auth)` only into encrypted or
|
|
87
|
+
* otherwise credential-grade storage, or read `authorizationToken` directly
|
|
88
|
+
* into secure storage before serializing.
|
|
89
|
+
*
|
|
90
|
+
* This does not make the object universally log-safe: object spread,
|
|
91
|
+
* `Object.assign`, `Object.entries`, `structuredClone`, and serializers that
|
|
92
|
+
* walk enumerable properties can still expose the raw token.
|
|
93
|
+
*
|
|
94
|
+
* @param auth - Partner authorization response to protect from accidental inspection.
|
|
95
|
+
*
|
|
96
|
+
* @returns The same auth object with inspection hooks installed when possible.
|
|
97
|
+
*/
|
|
98
|
+
function redactPartnerAuthorizeResponse(auth) {
|
|
99
|
+
const target = Object.isExtensible(auth) ? auth : { ...auth };
|
|
100
|
+
const toRedactedJson = () => partnerAuthorizeResponseToRedactedJson(target);
|
|
101
|
+
const toRedactedString = () => `[PartnerAuthorizeResponse ${PARTNER_TOKEN_REDACTED}]`;
|
|
102
|
+
installPortableJsonHook(target, toRedactedJson);
|
|
103
|
+
Object.defineProperties(target, {
|
|
104
|
+
toString: {
|
|
105
|
+
value: toRedactedString,
|
|
106
|
+
enumerable: false,
|
|
107
|
+
configurable: true
|
|
108
|
+
},
|
|
109
|
+
[inspectSymbol]: {
|
|
110
|
+
value: toRedactedJson,
|
|
111
|
+
enumerable: false,
|
|
112
|
+
configurable: true
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return target;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Adds non-enumerable serialization and inspection hooks that redact the
|
|
119
|
+
* application key secret while preserving direct property access.
|
|
120
|
+
*
|
|
121
|
+
* @param result - Create group member result to protect from accidental logging.
|
|
122
|
+
*
|
|
123
|
+
* @returns The same result object with redaction hooks installed when possible.
|
|
124
|
+
*/
|
|
125
|
+
function redactCreateGroupMemberResult(result) {
|
|
126
|
+
const target = Object.isExtensible(result) ? result : { ...result };
|
|
127
|
+
const toRedactedJson = () => createGroupMemberResultToRedactedJson(target);
|
|
128
|
+
const toRedactedString = () => `[CreateGroupMemberResult ${APPLICATION_KEY_REDACTED}]`;
|
|
129
|
+
installPortableJsonHook(target, toRedactedJson);
|
|
130
|
+
Object.defineProperties(target, {
|
|
131
|
+
toString: {
|
|
132
|
+
value: toRedactedString,
|
|
133
|
+
enumerable: false,
|
|
134
|
+
configurable: true
|
|
135
|
+
},
|
|
136
|
+
[inspectSymbol]: {
|
|
137
|
+
value: toRedactedJson,
|
|
138
|
+
enumerable: false,
|
|
139
|
+
configurable: true
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
return target;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Adds non-enumerable serialization and inspection hooks that redact all
|
|
146
|
+
* create-group-member application key secrets while preserving direct access.
|
|
147
|
+
*
|
|
148
|
+
* @param response - Create group member response to protect from accidental logging.
|
|
149
|
+
*
|
|
150
|
+
* @returns The same response array with redaction hooks installed when possible.
|
|
151
|
+
*
|
|
152
|
+
* @throws B2PartnerAuthorizationError if the response is not an array.
|
|
153
|
+
*/
|
|
154
|
+
function redactCreateGroupMemberResponse(response) {
|
|
155
|
+
if (!Array.isArray(response)) throw new B2PartnerAuthorizationError("b2_create_group_member response was not a JSON array");
|
|
156
|
+
const target = Object.isExtensible(response) ? response : [...response];
|
|
157
|
+
const writableTarget = target;
|
|
158
|
+
for (let i = 0; i < writableTarget.length; i++) {
|
|
159
|
+
const result = writableTarget[i];
|
|
160
|
+
if (result !== void 0) writableTarget[i] = redactCreateGroupMemberResult(result);
|
|
161
|
+
}
|
|
162
|
+
const toRedactedJson = () => createGroupMemberResponseToRedactedJson(target);
|
|
163
|
+
const toRedactedString = () => `[CreateGroupMemberResponse ${APPLICATION_KEY_REDACTED}]`;
|
|
164
|
+
Object.defineProperties(target, {
|
|
165
|
+
toJSON: {
|
|
166
|
+
value: toRedactedJson,
|
|
167
|
+
enumerable: false,
|
|
168
|
+
configurable: true
|
|
169
|
+
},
|
|
170
|
+
toString: {
|
|
171
|
+
value: toRedactedString,
|
|
172
|
+
enumerable: false,
|
|
173
|
+
configurable: true
|
|
174
|
+
},
|
|
175
|
+
[inspectSymbol]: {
|
|
176
|
+
value: toRedactedJson,
|
|
177
|
+
enumerable: false,
|
|
178
|
+
configurable: true
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
return target;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Adds non-enumerable serialization and inspection hooks that redact the
|
|
185
|
+
* application key secret while preserving direct property access.
|
|
186
|
+
*
|
|
187
|
+
* `JSON.stringify` redacts because the response contains newly minted
|
|
188
|
+
* application key secrets that are commonly logged as batch results. Callers
|
|
189
|
+
* that need to persist the key should read `applicationKey` directly into
|
|
190
|
+
* secure storage before serializing the object.
|
|
191
|
+
*
|
|
192
|
+
* @param result - Reserve trial account result to protect from accidental logging.
|
|
193
|
+
*
|
|
194
|
+
* @returns The same result object with redaction hooks installed when possible.
|
|
195
|
+
*/
|
|
196
|
+
function redactReserveTrialCreateAccountResult(result) {
|
|
197
|
+
const target = Object.isExtensible(result) ? result : { ...result };
|
|
198
|
+
const toRedactedJson = () => reserveTrialCreateAccountResultToRedactedJson(target);
|
|
199
|
+
const toRedactedString = () => `[ReserveTrialCreateAccountResult ${APPLICATION_KEY_REDACTED}]`;
|
|
200
|
+
installPortableJsonHook(target, toRedactedJson);
|
|
201
|
+
Object.defineProperties(target, {
|
|
202
|
+
toString: {
|
|
203
|
+
value: toRedactedString,
|
|
204
|
+
enumerable: false,
|
|
205
|
+
configurable: true
|
|
206
|
+
},
|
|
207
|
+
[inspectSymbol]: {
|
|
208
|
+
value: toRedactedJson,
|
|
209
|
+
enumerable: false,
|
|
210
|
+
configurable: true
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
return target;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Adds non-enumerable serialization and inspection hooks that redact all
|
|
217
|
+
* reserve-trial application key secrets while preserving direct property access.
|
|
218
|
+
*
|
|
219
|
+
* @param response - Reserve trial account response to protect from accidental logging.
|
|
220
|
+
*
|
|
221
|
+
* @returns The same response array with redaction hooks installed when possible.
|
|
222
|
+
*
|
|
223
|
+
* @throws B2PartnerAuthorizationError if the response is not an array.
|
|
224
|
+
*/
|
|
225
|
+
function redactReserveTrialCreateAccountResponse(response) {
|
|
226
|
+
if (!Array.isArray(response)) throw new B2PartnerAuthorizationError("b2_reserve_trial_create_account response was not a JSON array");
|
|
227
|
+
const target = Object.isExtensible(response) ? response : [...response];
|
|
228
|
+
const writableTarget = target;
|
|
229
|
+
for (let i = 0; i < writableTarget.length; i++) {
|
|
230
|
+
const result = writableTarget[i];
|
|
231
|
+
if (result !== void 0) writableTarget[i] = redactReserveTrialCreateAccountResult(result);
|
|
232
|
+
}
|
|
233
|
+
const toRedactedJson = () => reserveTrialCreateAccountResponseToRedactedJson(target);
|
|
234
|
+
const toRedactedString = () => `[ReserveTrialCreateAccountResponse ${APPLICATION_KEY_REDACTED}]`;
|
|
235
|
+
Object.defineProperties(target, {
|
|
236
|
+
toJSON: {
|
|
237
|
+
value: toRedactedJson,
|
|
238
|
+
enumerable: false,
|
|
239
|
+
configurable: true
|
|
240
|
+
},
|
|
241
|
+
toString: {
|
|
242
|
+
value: toRedactedString,
|
|
243
|
+
enumerable: false,
|
|
244
|
+
configurable: true
|
|
245
|
+
},
|
|
246
|
+
[inspectSymbol]: {
|
|
247
|
+
value: toRedactedJson,
|
|
248
|
+
enumerable: false,
|
|
249
|
+
configurable: true
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
return target;
|
|
253
|
+
}
|
|
254
|
+
//#endregion
|
|
255
|
+
export { PARTNER_TOKEN_REDACTED, createGroupMemberResponseToRedactedJson, createGroupMemberResultToRedactedJson, partnerAuthorizeResponseToRedactedJson, redactCreateGroupMemberResponse, redactCreateGroupMemberResult, redactPartnerAuthorizeResponse, redactReserveTrialCreateAccountResponse, redactReserveTrialCreateAccountResult, reserveTrialCreateAccountResponseToRedactedJson, reserveTrialCreateAccountResultToRedactedJson };
|
|
256
|
+
|
|
257
|
+
//# sourceMappingURL=redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.js","names":[],"sources":["../../src/partner/redaction.ts"],"sourcesContent":["import { B2PartnerAuthorizationError } from '../errors/index.ts'\nimport type {\n CreateGroupMemberResponse,\n CreateGroupMemberResult,\n PartnerAuthorizeResponse,\n ReserveTrialCreateAccountResponse,\n ReserveTrialCreateAccountResult,\n} from '../types/partner.ts'\nimport { APPLICATION_KEY_REDACTED, PARTNER_TOKEN_REDACTED } from './redaction-placeholders.ts'\n\nexport {\n APPLICATION_KEY_REDACTED,\n PARTNER_TOKEN_REDACTED,\n} from './redaction-placeholders.ts'\n\n/**\n * JSON-safe Partner authorize response with the Partner token replaced by a\n * placeholder string.\n */\nexport interface RedactedPartnerAuthorizeResponseJson\n extends Omit<PartnerAuthorizeResponse, 'authorizationToken'> {\n /** Redacted Partner authorization token placeholder. */\n readonly authorizationToken: string\n}\n\nexport type RedactedCreateGroupMemberResultJson = Omit<\n CreateGroupMemberResult,\n 'applicationKey'\n> & {\n readonly applicationKey: string\n}\n\nexport type RedactedCreateGroupMemberResponseJson = readonly RedactedCreateGroupMemberResultJson[]\n\nexport type RedactedReserveTrialCreateAccountResultJson = Omit<\n ReserveTrialCreateAccountResult,\n 'applicationKey'\n> & {\n readonly applicationKey: string\n}\n\nexport type RedactedReserveTrialCreateAccountResponseJson =\n readonly RedactedReserveTrialCreateAccountResultJson[]\n\nconst inspectSymbol = Symbol.for('nodejs.util.inspect.custom')\n\n// Bun/WebKit only honor object toJSON hooks when they are inherited, while Node\n// honors own hooks. Install both shapes so SDK safe serialization is portable.\nfunction installPortableJsonHook<T extends object>(target: T, toJson: () => unknown): void {\n const originalPrototype = Object.getPrototypeOf(target)\n const redactionPrototype = Object.create(originalPrototype) as object\n Object.defineProperty(redactionPrototype, 'toJSON', {\n value: toJson,\n enumerable: false,\n configurable: true,\n })\n Object.setPrototypeOf(target, redactionPrototype)\n Object.defineProperty(target, 'toJSON', {\n value: toJson,\n enumerable: false,\n configurable: true,\n })\n}\n\n/**\n * Returns a redacted copy for log serializers that intentionally hide tokens.\n *\n * @param auth - Partner authorization response to render safely.\n *\n * @returns A plain object with the Partner token replaced by a placeholder.\n */\nexport function partnerAuthorizeResponseToRedactedJson(\n auth: PartnerAuthorizeResponse,\n): RedactedPartnerAuthorizeResponseJson {\n return {\n ...auth,\n authorizationToken: PARTNER_TOKEN_REDACTED,\n }\n}\n\n/**\n * Returns a redacted copy for log serializers that intentionally hide group-member keys.\n *\n * @param result - Create group member result to render safely.\n *\n * @returns A plain object with the application key secret replaced by a placeholder.\n */\nexport function createGroupMemberResultToRedactedJson(\n result: CreateGroupMemberResult,\n): RedactedCreateGroupMemberResultJson {\n return {\n ...result,\n applicationKey: APPLICATION_KEY_REDACTED,\n }\n}\n\n/**\n * Returns a redacted copy for log serializers that intentionally hide group-member keys.\n *\n * @param response - Create group member response to render safely.\n *\n * @returns A plain array with every application key secret replaced by a placeholder.\n */\nexport function createGroupMemberResponseToRedactedJson(\n response: CreateGroupMemberResponse,\n): RedactedCreateGroupMemberResponseJson {\n return response.map((result) => createGroupMemberResultToRedactedJson(result))\n}\n\n/**\n * Returns a redacted copy for log serializers that intentionally hide trial account keys.\n *\n * @param result - Reserve trial account result to render safely.\n *\n * @returns A plain object with the application key secret replaced by a placeholder.\n */\nexport function reserveTrialCreateAccountResultToRedactedJson(\n result: ReserveTrialCreateAccountResult,\n): RedactedReserveTrialCreateAccountResultJson {\n return {\n ...result,\n applicationKey: APPLICATION_KEY_REDACTED,\n }\n}\n\n/**\n * Returns a redacted copy for log serializers that intentionally hide trial account keys.\n *\n * @param response - Reserve trial account response to render safely.\n *\n * @returns A plain array with every application key secret replaced by a placeholder.\n */\nexport function reserveTrialCreateAccountResponseToRedactedJson(\n response: ReserveTrialCreateAccountResponse,\n): RedactedReserveTrialCreateAccountResponseJson {\n return response.map((result) => reserveTrialCreateAccountResultToRedactedJson(result))\n}\n\n/**\n * Adds non-enumerable serialization and inspection hooks that redact the\n * Partner token through `JSON.stringify`, `toString`, and Node `util.inspect`\n * while preserving direct property access.\n *\n * `JSON.stringify` no longer round-trips `authorizationToken` from protected\n * authorize responses. Persist trusted auth caches with\n * `partnerAuthorizeResponseForPersistence(auth)` only into encrypted or\n * otherwise credential-grade storage, or read `authorizationToken` directly\n * into secure storage before serializing.\n *\n * This does not make the object universally log-safe: object spread,\n * `Object.assign`, `Object.entries`, `structuredClone`, and serializers that\n * walk enumerable properties can still expose the raw token.\n *\n * @param auth - Partner authorization response to protect from accidental inspection.\n *\n * @returns The same auth object with inspection hooks installed when possible.\n */\nexport function redactPartnerAuthorizeResponse(\n auth: PartnerAuthorizeResponse,\n): PartnerAuthorizeResponse {\n const target = Object.isExtensible(auth) ? auth : { ...auth }\n const toRedactedJson = (): RedactedPartnerAuthorizeResponseJson =>\n partnerAuthorizeResponseToRedactedJson(target)\n const toRedactedString = (): string => `[PartnerAuthorizeResponse ${PARTNER_TOKEN_REDACTED}]`\n\n installPortableJsonHook(target, toRedactedJson)\n Object.defineProperties(target, {\n toString: {\n value: toRedactedString,\n enumerable: false,\n configurable: true,\n },\n [inspectSymbol]: {\n value: toRedactedJson,\n enumerable: false,\n configurable: true,\n },\n })\n\n return target\n}\n\n/**\n * Adds non-enumerable serialization and inspection hooks that redact the\n * application key secret while preserving direct property access.\n *\n * @param result - Create group member result to protect from accidental logging.\n *\n * @returns The same result object with redaction hooks installed when possible.\n */\nexport function redactCreateGroupMemberResult(\n result: CreateGroupMemberResult,\n): CreateGroupMemberResult {\n const target = Object.isExtensible(result) ? result : { ...result }\n const toRedactedJson = (): RedactedCreateGroupMemberResultJson =>\n createGroupMemberResultToRedactedJson(target)\n const toRedactedString = (): string => `[CreateGroupMemberResult ${APPLICATION_KEY_REDACTED}]`\n\n installPortableJsonHook(target, toRedactedJson)\n Object.defineProperties(target, {\n toString: {\n value: toRedactedString,\n enumerable: false,\n configurable: true,\n },\n [inspectSymbol]: {\n value: toRedactedJson,\n enumerable: false,\n configurable: true,\n },\n })\n\n return target\n}\n\n/**\n * Adds non-enumerable serialization and inspection hooks that redact all\n * create-group-member application key secrets while preserving direct access.\n *\n * @param response - Create group member response to protect from accidental logging.\n *\n * @returns The same response array with redaction hooks installed when possible.\n *\n * @throws B2PartnerAuthorizationError if the response is not an array.\n */\nexport function redactCreateGroupMemberResponse(\n response: CreateGroupMemberResponse,\n): CreateGroupMemberResponse {\n if (!Array.isArray(response)) {\n throw new B2PartnerAuthorizationError('b2_create_group_member response was not a JSON array')\n }\n\n const target = Object.isExtensible(response) ? response : [...response]\n const writableTarget = target as CreateGroupMemberResult[]\n for (let i = 0; i < writableTarget.length; i++) {\n const result = writableTarget[i]\n if (result !== undefined) writableTarget[i] = redactCreateGroupMemberResult(result)\n }\n\n const toRedactedJson = (): RedactedCreateGroupMemberResponseJson =>\n createGroupMemberResponseToRedactedJson(target)\n const toRedactedString = (): string => `[CreateGroupMemberResponse ${APPLICATION_KEY_REDACTED}]`\n\n Object.defineProperties(target, {\n toJSON: {\n value: toRedactedJson,\n enumerable: false,\n configurable: true,\n },\n toString: {\n value: toRedactedString,\n enumerable: false,\n configurable: true,\n },\n [inspectSymbol]: {\n value: toRedactedJson,\n enumerable: false,\n configurable: true,\n },\n })\n\n return target\n}\n\n/**\n * Adds non-enumerable serialization and inspection hooks that redact the\n * application key secret while preserving direct property access.\n *\n * `JSON.stringify` redacts because the response contains newly minted\n * application key secrets that are commonly logged as batch results. Callers\n * that need to persist the key should read `applicationKey` directly into\n * secure storage before serializing the object.\n *\n * @param result - Reserve trial account result to protect from accidental logging.\n *\n * @returns The same result object with redaction hooks installed when possible.\n */\nexport function redactReserveTrialCreateAccountResult(\n result: ReserveTrialCreateAccountResult,\n): ReserveTrialCreateAccountResult {\n const target = Object.isExtensible(result) ? result : { ...result }\n const toRedactedJson = (): RedactedReserveTrialCreateAccountResultJson =>\n reserveTrialCreateAccountResultToRedactedJson(target)\n const toRedactedString = (): string =>\n `[ReserveTrialCreateAccountResult ${APPLICATION_KEY_REDACTED}]`\n\n installPortableJsonHook(target, toRedactedJson)\n Object.defineProperties(target, {\n toString: {\n value: toRedactedString,\n enumerable: false,\n configurable: true,\n },\n [inspectSymbol]: {\n value: toRedactedJson,\n enumerable: false,\n configurable: true,\n },\n })\n\n return target\n}\n\n/**\n * Adds non-enumerable serialization and inspection hooks that redact all\n * reserve-trial application key secrets while preserving direct property access.\n *\n * @param response - Reserve trial account response to protect from accidental logging.\n *\n * @returns The same response array with redaction hooks installed when possible.\n *\n * @throws B2PartnerAuthorizationError if the response is not an array.\n */\nexport function redactReserveTrialCreateAccountResponse(\n response: ReserveTrialCreateAccountResponse,\n): ReserveTrialCreateAccountResponse {\n if (!Array.isArray(response)) {\n throw new B2PartnerAuthorizationError(\n 'b2_reserve_trial_create_account response was not a JSON array',\n )\n }\n\n const target = Object.isExtensible(response) ? response : [...response]\n const writableTarget = target as ReserveTrialCreateAccountResult[]\n for (let i = 0; i < writableTarget.length; i++) {\n const result = writableTarget[i]\n if (result !== undefined) writableTarget[i] = redactReserveTrialCreateAccountResult(result)\n }\n\n const toRedactedJson = (): RedactedReserveTrialCreateAccountResponseJson =>\n reserveTrialCreateAccountResponseToRedactedJson(target)\n const toRedactedString = (): string =>\n `[ReserveTrialCreateAccountResponse ${APPLICATION_KEY_REDACTED}]`\n\n Object.defineProperties(target, {\n toJSON: {\n value: toRedactedJson,\n enumerable: false,\n configurable: true,\n },\n toString: {\n value: toRedactedString,\n enumerable: false,\n configurable: true,\n },\n [inspectSymbol]: {\n value: toRedactedJson,\n enumerable: false,\n configurable: true,\n },\n })\n\n return target\n}\n"],"mappings":"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"}
|
package/dist/raw/index.cjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_errors_index = require("../errors/index.cjs");
|
|
3
3
|
const require_encoding = require("./encoding.cjs");
|
|
4
|
-
const require_normalize = require("../util/normalize.cjs");
|
|
5
4
|
const require_encryption = require("../types/encryption.cjs");
|
|
5
|
+
const require_normalize = require("../util/normalize.cjs");
|
|
6
6
|
const require_realms = require("../auth/realms.cjs");
|
|
7
|
+
const require_url = require("./url.cjs");
|
|
7
8
|
//#region src/raw/index.ts
|
|
8
9
|
/**
|
|
9
10
|
* Low-level 1:1 bindings for every B2 native API endpoint.
|
|
@@ -15,6 +16,14 @@ const require_realms = require("../auth/realms.cjs");
|
|
|
15
16
|
*
|
|
16
17
|
* @packageDocumentation
|
|
17
18
|
*/
|
|
19
|
+
var B2_NATIVE_API_V3 = {
|
|
20
|
+
prefix: "b2api",
|
|
21
|
+
version: "v3"
|
|
22
|
+
};
|
|
23
|
+
var B2_NATIVE_API_V4 = {
|
|
24
|
+
prefix: "b2api",
|
|
25
|
+
version: "v4"
|
|
26
|
+
};
|
|
18
27
|
function normalizeRawRequestOptions(optionsOrSignal, retry) {
|
|
19
28
|
if (optionsOrSignal === void 0) return retry === void 0 ? void 0 : { retry };
|
|
20
29
|
if (isAbortSignal(optionsOrSignal)) return {
|
|
@@ -29,6 +38,19 @@ function normalizeRawRequestOptions(optionsOrSignal, retry) {
|
|
|
29
38
|
function isAbortSignal(value) {
|
|
30
39
|
return typeof value === "object" && value !== null && "aborted" in value && typeof value.addEventListener === "function";
|
|
31
40
|
}
|
|
41
|
+
function assertCustomUploadTimestamp(value) {
|
|
42
|
+
if (value === void 0) return;
|
|
43
|
+
if (typeof value === "number" && Number.isSafeInteger(value) && value >= 0) return;
|
|
44
|
+
throw new TypeError("customUploadTimestamp must be a non-negative safe integer");
|
|
45
|
+
}
|
|
46
|
+
function assertRawCustomUploadTimestamp(value) {
|
|
47
|
+
if (value === void 0 || value === null) return;
|
|
48
|
+
if (typeof value === "string" && /^\d+$/.test(value)) {
|
|
49
|
+
const timestamp = Number(value);
|
|
50
|
+
if (Number.isSafeInteger(timestamp)) return;
|
|
51
|
+
}
|
|
52
|
+
throw new TypeError("customUploadTimestamp must be a non-negative safe integer string or null");
|
|
53
|
+
}
|
|
32
54
|
function normalizeCreateKeyRequest(request) {
|
|
33
55
|
const { bucketId, ...withoutDeprecatedBucketId } = request;
|
|
34
56
|
if (bucketId !== void 0 && withoutDeprecatedBucketId.bucketIds !== void 0) throw new TypeError("createKey accepts either bucketIds or deprecated bucketId, not both");
|
|
@@ -92,7 +114,8 @@ function normalizeAuthorizeAccountResponse(response) {
|
|
|
92
114
|
}
|
|
93
115
|
function uploadResponseBodyError(err, signal) {
|
|
94
116
|
if (signal?.aborted === true) throw signal.reason ?? new DOMException("Aborted", "AbortError");
|
|
95
|
-
|
|
117
|
+
const message = err instanceof Error ? err.message : "Upload response body could not be read";
|
|
118
|
+
return new require_errors_index.UploadResponseBodyError(message, { cause: err });
|
|
96
119
|
}
|
|
97
120
|
/**
|
|
98
121
|
* Low-level client providing 1:1 bindings to all B2 native API endpoints.
|
|
@@ -122,7 +145,10 @@ var RawClient = class {
|
|
|
122
145
|
async authorizeAccount(applicationKeyId, applicationKey, realmUrl = "https://api.backblazeb2.com") {
|
|
123
146
|
require_realms.assertSecureRealmUrl(realmUrl);
|
|
124
147
|
return normalizeAuthorizeAccountResponse(await (await this.transport.send({
|
|
125
|
-
url:
|
|
148
|
+
url: require_url.b2Url(realmUrl, {
|
|
149
|
+
...B2_NATIVE_API_V4,
|
|
150
|
+
endpoint: "b2_authorize_account"
|
|
151
|
+
}),
|
|
126
152
|
method: "GET",
|
|
127
153
|
headers: { Authorization: `Basic ${btoa(`${applicationKeyId}:${applicationKey}`)}` }
|
|
128
154
|
})).json());
|
|
@@ -205,6 +231,10 @@ var RawClient = class {
|
|
|
205
231
|
...require_encoding.buildFileInfoHeaders(headers.fileInfo)
|
|
206
232
|
};
|
|
207
233
|
if (headers.lastModifiedMillis !== void 0) reqHeaders["X-Bz-Info-src_last_modified_millis"] = String(headers.lastModifiedMillis);
|
|
234
|
+
if (headers.customUploadTimestamp !== void 0) {
|
|
235
|
+
assertCustomUploadTimestamp(headers.customUploadTimestamp);
|
|
236
|
+
reqHeaders["X-Bz-Custom-Upload-Timestamp"] = String(headers.customUploadTimestamp);
|
|
237
|
+
}
|
|
208
238
|
if (headers.contentDisposition) reqHeaders["X-Bz-Info-b2-content-disposition"] = headers.contentDisposition;
|
|
209
239
|
if (headers.contentLanguage) reqHeaders["X-Bz-Info-b2-content-language"] = headers.contentLanguage;
|
|
210
240
|
if (headers.expires) reqHeaders["X-Bz-Info-b2-expires"] = headers.expires;
|
|
@@ -296,7 +326,7 @@ var RawClient = class {
|
|
|
296
326
|
* @returns The copied file version metadata.
|
|
297
327
|
*/
|
|
298
328
|
async copyFile(apiUrl, authToken, request, options) {
|
|
299
|
-
return require_normalize.normalizeFileVersionSha1(await this.postJson(apiUrl, authToken, "b2_copy_file", request, options));
|
|
329
|
+
return require_normalize.normalizeFileVersionSha1(await this.postJson(apiUrl, authToken, "b2_copy_file", withJsonBodyWireSseC(request), options));
|
|
300
330
|
}
|
|
301
331
|
/**
|
|
302
332
|
* Calls {@link https://www.backblaze.com/apidocs/b2-copy-part | b2_copy_part}.
|
|
@@ -308,7 +338,7 @@ var RawClient = class {
|
|
|
308
338
|
* @returns The copied part metadata.
|
|
309
339
|
*/
|
|
310
340
|
async copyPart(apiUrl, authToken, request, options) {
|
|
311
|
-
return this.postJson(apiUrl, authToken, "b2_copy_part", request, options);
|
|
341
|
+
return this.postJson(apiUrl, authToken, "b2_copy_part", withJsonBodyWireSseC(request), options);
|
|
312
342
|
}
|
|
313
343
|
/**
|
|
314
344
|
* Calls {@link https://www.backblaze.com/apidocs/b2-start-large-file | b2_start_large_file}.
|
|
@@ -320,7 +350,8 @@ var RawClient = class {
|
|
|
320
350
|
* @returns The started large file metadata with file ID.
|
|
321
351
|
*/
|
|
322
352
|
async startLargeFile(apiUrl, authToken, request, options) {
|
|
323
|
-
|
|
353
|
+
assertRawCustomUploadTimestamp(request.customUploadTimestamp);
|
|
354
|
+
return require_normalize.normalizeFileVersionSha1(await this.postJson(apiUrl, authToken, "b2_start_large_file", withJsonBodyWireSseC(request), options));
|
|
324
355
|
}
|
|
325
356
|
/**
|
|
326
357
|
* Implementation for both upload part URL request-control signatures.
|
|
@@ -379,7 +410,10 @@ var RawClient = class {
|
|
|
379
410
|
*/
|
|
380
411
|
async finishLargeFile(apiUrl, authToken, request, options) {
|
|
381
412
|
const response = await this.transport.send({
|
|
382
|
-
url:
|
|
413
|
+
url: require_url.b2Url(apiUrl, {
|
|
414
|
+
...B2_NATIVE_API_V3,
|
|
415
|
+
endpoint: "b2_finish_large_file"
|
|
416
|
+
}),
|
|
383
417
|
method: "POST",
|
|
384
418
|
headers: {
|
|
385
419
|
Authorization: authToken,
|
|
@@ -422,7 +456,7 @@ var RawClient = class {
|
|
|
422
456
|
* @returns The list of unfinished large files and optional continuation token.
|
|
423
457
|
*/
|
|
424
458
|
async listUnfinishedLargeFiles(apiUrl, authToken, request, options) {
|
|
425
|
-
return this.postJson(apiUrl, authToken, "b2_list_unfinished_large_files", request, options);
|
|
459
|
+
return require_normalize.normalizeFileVersionListSha1(await this.postJson(apiUrl, authToken, "b2_list_unfinished_large_files", request, options));
|
|
426
460
|
}
|
|
427
461
|
/**
|
|
428
462
|
* Calls {@link https://www.backblaze.com/apidocs/b2-list-parts | b2_list_parts}.
|
|
@@ -447,7 +481,10 @@ var RawClient = class {
|
|
|
447
481
|
*/
|
|
448
482
|
async downloadFileById(downloadUrl, authToken, fileId, options) {
|
|
449
483
|
const headers = buildDownloadRequestHeaders(authToken, options);
|
|
450
|
-
const url = appendDownloadOverrides(`${downloadUrl
|
|
484
|
+
const url = appendDownloadOverrides(`${require_url.b2Url(downloadUrl, {
|
|
485
|
+
...B2_NATIVE_API_V3,
|
|
486
|
+
endpoint: "b2_download_file_by_id"
|
|
487
|
+
})}?fileId=${encodeURIComponent(fileId)}`, options);
|
|
451
488
|
const response = await this.transport.send({
|
|
452
489
|
url,
|
|
453
490
|
method: options?.method ?? "GET",
|
|
@@ -505,7 +542,7 @@ var RawClient = class {
|
|
|
505
542
|
* @returns The newly created application key with secret.
|
|
506
543
|
*/
|
|
507
544
|
async createKey(apiUrl, authToken, request) {
|
|
508
|
-
return normalizeKeyResponse(await this.postJson(apiUrl, authToken, "b2_create_key", normalizeCreateKeyRequest(request), void 0,
|
|
545
|
+
return normalizeKeyResponse(await this.postJson(apiUrl, authToken, "b2_create_key", normalizeCreateKeyRequest(request), void 0, B2_NATIVE_API_V4));
|
|
509
546
|
}
|
|
510
547
|
/**
|
|
511
548
|
* Calls {@link https://www.backblaze.com/apidocs/b2-list-keys | b2_list_keys}.
|
|
@@ -516,7 +553,7 @@ var RawClient = class {
|
|
|
516
553
|
* @returns The list of application keys and optional continuation token.
|
|
517
554
|
*/
|
|
518
555
|
async listKeys(apiUrl, authToken, request) {
|
|
519
|
-
const response = await this.postJson(apiUrl, authToken, "b2_list_keys", request, void 0,
|
|
556
|
+
const response = await this.postJson(apiUrl, authToken, "b2_list_keys", request, void 0, B2_NATIVE_API_V4);
|
|
520
557
|
return {
|
|
521
558
|
...response,
|
|
522
559
|
keys: response.keys.map((key) => normalizeKeyResponse(key))
|
|
@@ -531,7 +568,7 @@ var RawClient = class {
|
|
|
531
568
|
* @returns The deleted application key metadata.
|
|
532
569
|
*/
|
|
533
570
|
async deleteKey(apiUrl, authToken, request) {
|
|
534
|
-
return normalizeKeyResponse(await this.postJson(apiUrl, authToken, "b2_delete_key", request, void 0,
|
|
571
|
+
return normalizeKeyResponse(await this.postJson(apiUrl, authToken, "b2_delete_key", request, void 0, B2_NATIVE_API_V4));
|
|
535
572
|
}
|
|
536
573
|
/**
|
|
537
574
|
* Calls {@link https://www.backblaze.com/apidocs/b2-update-file-retention | b2_update_file_retention}.
|
|
@@ -584,13 +621,16 @@ var RawClient = class {
|
|
|
584
621
|
* @param endpoint - The B2 API endpoint name.
|
|
585
622
|
* @param body - The JSON request body.
|
|
586
623
|
* @param options - Optional abort and per-request retry settings.
|
|
587
|
-
* @param
|
|
624
|
+
* @param urlOptions - B2 endpoint path prefix and version settings.
|
|
588
625
|
*
|
|
589
626
|
* @returns The parsed JSON response.
|
|
590
627
|
*/
|
|
591
|
-
async postJson(apiUrl, authToken, endpoint, body, options,
|
|
628
|
+
async postJson(apiUrl, authToken, endpoint, body, options, urlOptions = B2_NATIVE_API_V3) {
|
|
592
629
|
return (await this.transport.send({
|
|
593
|
-
url:
|
|
630
|
+
url: require_url.b2Url(apiUrl, {
|
|
631
|
+
...urlOptions,
|
|
632
|
+
endpoint
|
|
633
|
+
}),
|
|
594
634
|
method: "POST",
|
|
595
635
|
headers: {
|
|
596
636
|
Authorization: authToken,
|
|
@@ -602,6 +642,23 @@ var RawClient = class {
|
|
|
602
642
|
})).json();
|
|
603
643
|
}
|
|
604
644
|
};
|
|
645
|
+
function withJsonBodyWireSseC(request) {
|
|
646
|
+
return {
|
|
647
|
+
...request,
|
|
648
|
+
...request.serverSideEncryption !== void 0 ? { serverSideEncryption: toWireSseC(request.serverSideEncryption) } : {},
|
|
649
|
+
...request.sourceServerSideEncryption !== void 0 ? { sourceServerSideEncryption: toWireSseC(request.sourceServerSideEncryption) } : {},
|
|
650
|
+
...request.destinationServerSideEncryption !== void 0 ? { destinationServerSideEncryption: toWireSseC(request.destinationServerSideEncryption) } : {}
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
function toWireSseC(setting) {
|
|
654
|
+
if (setting.mode !== require_encryption.EncryptionMode.SseC) return setting;
|
|
655
|
+
return {
|
|
656
|
+
mode: require_encryption.EncryptionMode.SseC,
|
|
657
|
+
algorithm: setting.algorithm,
|
|
658
|
+
customerKey: setting.customerKey,
|
|
659
|
+
customerKeyMd5: setting.customerKeyMd5
|
|
660
|
+
};
|
|
661
|
+
}
|
|
605
662
|
/**
|
|
606
663
|
* Applies server-side encryption headers to the request.
|
|
607
664
|
* @param headers - The mutable headers object to populate.
|
|
@@ -636,10 +693,15 @@ var DOWNLOAD_OVERRIDE_PARAMS = [
|
|
|
636
693
|
function buildDownloadRequestHeaders(authToken, options) {
|
|
637
694
|
const headers = { Authorization: authToken };
|
|
638
695
|
if (options?.range) headers["Range"] = options.range;
|
|
639
|
-
if (options?.serverSideEncryption)
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
696
|
+
if (options?.serverSideEncryption) {
|
|
697
|
+
const encryption = options.serverSideEncryption;
|
|
698
|
+
applyEncryptionHeaders(headers, {
|
|
699
|
+
mode: require_encryption.EncryptionMode.SseC,
|
|
700
|
+
algorithm: encryption.algorithm,
|
|
701
|
+
customerKey: encryption.customerKey,
|
|
702
|
+
customerKeyMd5: encryption.customerKeyMd5
|
|
703
|
+
});
|
|
704
|
+
}
|
|
643
705
|
return headers;
|
|
644
706
|
}
|
|
645
707
|
/**
|