@backblaze-labs/b2-sdk 0.3.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 +45 -1
- package/README.md +18 -5
- package/dist/_virtual/_b2-sdk-version-json.cjs +1 -1
- package/dist/_virtual/_b2-sdk-version-json.js +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/raw.cjs +37 -15
- package/dist/backup/raw.cjs.map +1 -1
- package/dist/backup/raw.d.cts +2 -2
- package/dist/backup/raw.d.cts.map +1 -1
- package/dist/backup/raw.d.ts +2 -2
- package/dist/backup/raw.d.ts.map +1 -1
- package/dist/backup/raw.js +37 -15
- package/dist/backup/raw.js.map +1 -1
- 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 +123 -73
- 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 +123 -73
- 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/download/single.cjs +38 -13
- 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 +38 -13
- package/dist/download/single.js.map +1 -1
- package/dist/errors/index.cjs +27 -4
- package/dist/errors/index.cjs.map +1 -1
- package/dist/errors/index.d.cts +15 -0
- package/dist/errors/index.d.cts.map +1 -1
- package/dist/errors/index.d.ts +15 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +27 -5
- 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/transport.cjs +9 -8
- package/dist/http/transport.cjs.map +1 -1
- package/dist/http/transport.d.cts +5 -0
- package/dist/http/transport.d.cts.map +1 -1
- package/dist/http/transport.d.ts +5 -0
- package/dist/http/transport.d.ts.map +1 -1
- package/dist/http/transport.js +9 -8
- 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 +25 -0
- package/dist/index.d.cts +10 -9
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +10 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -6
- 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 +12 -1
- package/dist/object.cjs.map +1 -1
- package/dist/object.d.cts +7 -1
- package/dist/object.d.cts.map +1 -1
- package/dist/object.d.ts +7 -1
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +12 -1
- package/dist/object.js.map +1 -1
- package/dist/partner/auth-core.cjs +4 -23
- package/dist/partner/auth-core.cjs.map +1 -1
- package/dist/partner/auth-core.d.cts +1 -1
- package/dist/partner/auth-core.d.cts.map +1 -1
- package/dist/partner/auth-core.d.ts +1 -1
- package/dist/partner/auth-core.d.ts.map +1 -1
- package/dist/partner/auth-core.js +5 -24
- package/dist/partner/auth-core.js.map +1 -1
- package/dist/partner/client.cjs +25 -10
- package/dist/partner/client.cjs.map +1 -1
- package/dist/partner/client.d.cts +32 -10
- package/dist/partner/client.d.cts.map +1 -1
- package/dist/partner/client.d.ts +32 -10
- package/dist/partner/client.d.ts.map +1 -1
- package/dist/partner/client.js +25 -10
- package/dist/partner/client.js.map +1 -1
- package/dist/partner/endpoint-url.cjs +1 -0
- package/dist/partner/endpoint-url.cjs.map +1 -1
- package/dist/partner/endpoint-url.d.cts +2 -0
- package/dist/partner/endpoint-url.d.cts.map +1 -1
- package/dist/partner/endpoint-url.d.ts +2 -0
- package/dist/partner/endpoint-url.d.ts.map +1 -1
- package/dist/partner/endpoint-url.js +1 -0
- package/dist/partner/endpoint-url.js.map +1 -1
- package/dist/partner/in-memory.cjs.map +1 -1
- package/dist/partner/in-memory.js.map +1 -1
- package/dist/partner/index.cjs +9 -0
- package/dist/partner/index.d.cts +11 -2
- package/dist/partner/index.d.cts.map +1 -1
- package/dist/partner/index.d.ts +11 -2
- package/dist/partner/index.d.ts.map +1 -1
- package/dist/partner/index.js +3 -1
- package/dist/partner/raw.cjs +52 -44
- package/dist/partner/raw.cjs.map +1 -1
- package/dist/partner/raw.d.cts +16 -19
- package/dist/partner/raw.d.cts.map +1 -1
- package/dist/partner/raw.d.ts +16 -19
- package/dist/partner/raw.d.ts.map +1 -1
- package/dist/partner/raw.js +52 -44
- package/dist/partner/raw.js.map +1 -1
- package/dist/partner/redaction.cjs +133 -108
- package/dist/partner/redaction.cjs.map +1 -1
- package/dist/partner/redaction.d.cts +47 -13
- package/dist/partner/redaction.d.cts.map +1 -1
- package/dist/partner/redaction.d.ts +47 -13
- package/dist/partner/redaction.d.ts.map +1 -1
- package/dist/partner/redaction.js +133 -109
- package/dist/partner/redaction.js.map +1 -1
- 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 +64 -39
- package/dist/raw/index.cjs.map +1 -1
- package/dist/raw/index.d.cts +21 -19
- package/dist/raw/index.d.cts.map +1 -1
- package/dist/raw/index.d.ts +21 -19
- package/dist/raw/index.d.ts.map +1 -1
- package/dist/raw/index.js +47 -40
- package/dist/raw/index.js.map +1 -1
- package/dist/raw/url.cjs.map +1 -1
- package/dist/raw/url.d.cts +3 -3
- package/dist/raw/url.d.ts +3 -3
- package/dist/raw/url.js.map +1 -1
- package/dist/simulator/index.cjs +456 -125
- package/dist/simulator/index.cjs.map +1 -1
- package/dist/simulator/index.d.cts +16 -1
- package/dist/simulator/index.d.cts.map +1 -1
- package/dist/simulator/index.d.ts +16 -1
- package/dist/simulator/index.d.ts.map +1 -1
- package/dist/simulator/index.js +449 -130
- 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 +55 -61
- package/dist/simulator/partner.cjs.map +1 -1
- package/dist/simulator/partner.d.cts +5 -2
- package/dist/simulator/partner.d.cts.map +1 -1
- package/dist/simulator/partner.d.ts +5 -2
- package/dist/simulator/partner.d.ts.map +1 -1
- package/dist/simulator/partner.js +56 -61
- package/dist/simulator/partner.js.map +1 -1
- package/dist/simulator/validation.cjs +160 -30
- package/dist/simulator/validation.cjs.map +1 -1
- package/dist/simulator/validation.d.cts +28 -6
- package/dist/simulator/validation.d.cts.map +1 -1
- package/dist/simulator/validation.d.ts +28 -6
- package/dist/simulator/validation.d.ts.map +1 -1
- package/dist/simulator/validation.js +148 -31
- 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/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 +2 -0
- 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 +2 -2
- 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/sync/download-staging.cjs +147 -35
- package/dist/sync/download-staging.cjs.map +1 -1
- package/dist/sync/download-staging.d.cts +25 -2
- package/dist/sync/download-staging.d.cts.map +1 -1
- package/dist/sync/download-staging.d.ts +25 -2
- package/dist/sync/download-staging.d.ts.map +1 -1
- package/dist/sync/download-staging.js +146 -36
- package/dist/sync/download-staging.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 +5 -1
- package/dist/sync/local-file-io.cjs.map +1 -1
- package/dist/sync/local-file-io.d.cts +2 -0
- package/dist/sync/local-file-io.d.cts.map +1 -1
- package/dist/sync/local-file-io.d.ts +2 -0
- package/dist/sync/local-file-io.d.ts.map +1 -1
- package/dist/sync/local-file-io.js +5 -1
- package/dist/sync/local-file-io.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/scanners/b2.cjs +2 -0
- 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 +2 -0
- 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 +76 -29
- 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 +76 -29
- 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/backup.d.cts +6 -1
- package/dist/types/backup.d.cts.map +1 -1
- package/dist/types/backup.d.ts +6 -1
- package/dist/types/backup.d.ts.map +1 -1
- package/dist/types/bucket.cjs +81 -11
- package/dist/types/bucket.cjs.map +1 -1
- package/dist/types/bucket.d.cts +190 -39
- package/dist/types/bucket.d.cts.map +1 -1
- package/dist/types/bucket.d.ts +190 -39
- 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.map +1 -1
- package/dist/types/download.d.cts +3 -17
- package/dist/types/download.d.cts.map +1 -1
- package/dist/types/download.d.ts +3 -17
- package/dist/types/download.d.ts.map +1 -1
- package/dist/types/download.js.map +1 -1
- package/dist/types/encryption.cjs +18 -0
- package/dist/types/encryption.cjs.map +1 -1
- package/dist/types/encryption.d.cts +21 -11
- package/dist/types/encryption.d.cts.map +1 -1
- package/dist/types/encryption.d.ts +21 -11
- package/dist/types/encryption.d.ts.map +1 -1
- package/dist/types/encryption.js +18 -0
- package/dist/types/encryption.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 +125 -16
- package/dist/types/file.d.cts.map +1 -1
- package/dist/types/file.d.ts +125 -16
- 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/index.d.cts +7 -7
- package/dist/types/index.d.cts.map +1 -1
- package/dist/types/index.d.ts +7 -7
- 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/notifications.cjs +30 -0
- package/dist/types/notifications.cjs.map +1 -1
- package/dist/types/notifications.d.cts +26 -1
- package/dist/types/notifications.d.cts.map +1 -1
- package/dist/types/notifications.d.ts +26 -1
- package/dist/types/notifications.d.ts.map +1 -1
- package/dist/types/notifications.js +29 -1
- package/dist/types/notifications.js.map +1 -1
- package/dist/types/partner.cjs.map +1 -1
- package/dist/types/partner.d.cts +28 -36
- package/dist/types/partner.d.cts.map +1 -1
- package/dist/types/partner.d.ts +28 -36
- package/dist/types/partner.d.ts.map +1 -1
- package/dist/types/partner.js.map +1 -1
- package/dist/types/upload.d.cts +4 -0
- package/dist/types/upload.d.cts.map +1 -1
- package/dist/types/upload.d.ts +4 -0
- package/dist/types/upload.d.ts.map +1 -1
- package/dist/upload/large.cjs +10 -7
- package/dist/upload/large.cjs.map +1 -1
- package/dist/upload/large.d.cts +15 -6
- package/dist/upload/large.d.cts.map +1 -1
- package/dist/upload/large.d.ts +15 -6
- package/dist/upload/large.d.ts.map +1 -1
- package/dist/upload/large.js +10 -7
- 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 +4 -3
- package/dist/upload/resume.cjs.map +1 -1
- package/dist/upload/resume.d.cts +6 -4
- package/dist/upload/resume.d.cts.map +1 -1
- package/dist/upload/resume.d.ts +6 -4
- package/dist/upload/resume.d.ts.map +1 -1
- package/dist/upload/resume.js +4 -3
- package/dist/upload/resume.js.map +1 -1
- package/dist/upload/retry.cjs +17 -10
- 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 +17 -10
- package/dist/upload/retry.js.map +1 -1
- package/dist/upload/single.cjs +35 -31
- 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 +35 -31
- package/dist/upload/single.js.map +1 -1
- package/dist/upload/stream.cjs +12 -1
- 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 +12 -1
- package/dist/upload/stream.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 +11 -4
package/dist/bucket.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { FileAction } from "./types/file.js";
|
|
1
2
|
import { accountId } from "./types/ids.js";
|
|
2
3
|
import { Semaphore } from "./upload/concurrency.js";
|
|
3
4
|
import "./util/defaults.js";
|
|
@@ -11,6 +12,14 @@ import { toError } from "./util/to-error.js";
|
|
|
11
12
|
import { B2Object } from "./object.js";
|
|
12
13
|
import { paginateItems } from "./util/paginator.js";
|
|
13
14
|
//#region src/bucket.ts
|
|
15
|
+
var EMPTY_REPLICATION_CONFIGURATION = {
|
|
16
|
+
asReplicationSource: null,
|
|
17
|
+
asReplicationDestination: null
|
|
18
|
+
};
|
|
19
|
+
function readableReplicationConfigurationOrEmpty(response, operation) {
|
|
20
|
+
if (!response.isClientAuthorizedToRead) throw new Error(`${operation}: replication configuration is not readable; grant readBucketReplications before composing replication updates`);
|
|
21
|
+
return response.value ?? EMPTY_REPLICATION_CONFIGURATION;
|
|
22
|
+
}
|
|
14
23
|
function bucketDefaultRetentionSnapshot(info) {
|
|
15
24
|
const fileLock = info.fileLockConfiguration;
|
|
16
25
|
if (!fileLock.isClientAuthorizedToRead) return { unreadable: true };
|
|
@@ -20,9 +29,69 @@ function bucketDefaultRetentionSnapshot(info) {
|
|
|
20
29
|
unreadable: false
|
|
21
30
|
};
|
|
22
31
|
}
|
|
32
|
+
function bucketDefaultServerSideEncryptionSnapshot(info) {
|
|
33
|
+
const encryption = info.defaultServerSideEncryption;
|
|
34
|
+
if (!encryption.isClientAuthorizedToRead) return { unreadable: true };
|
|
35
|
+
if (encryption.value === null) return { unreadable: false };
|
|
36
|
+
return {
|
|
37
|
+
encryption: encryption.value,
|
|
38
|
+
unreadable: false
|
|
39
|
+
};
|
|
40
|
+
}
|
|
23
41
|
function resumeNeedsFreshBucketDefaults(options) {
|
|
24
42
|
return (options.resume === true || options.resumeFileId !== void 0) && (options.serverSideEncryption === void 0 || options.fileRetention === void 0);
|
|
25
43
|
}
|
|
44
|
+
function listedVersionFileIdOrThrow(version) {
|
|
45
|
+
const fileId = version.fileId;
|
|
46
|
+
if (typeof fileId === "string") return fileId;
|
|
47
|
+
throw new Error(`deleteAll: listFileVersions returned a row without a fileId for ${JSON.stringify(version.fileName)}; delimiter folder rows are invalid because deleteAll does not request delimiter grouping`);
|
|
48
|
+
}
|
|
49
|
+
function listedFileIdOrThrow(version, operation) {
|
|
50
|
+
if (typeof version.fileId === "string") return version.fileId;
|
|
51
|
+
throw new Error(`${operation}: list response returned a row without a string fileId for ${JSON.stringify(version.fileName)}`);
|
|
52
|
+
}
|
|
53
|
+
function assertNotFolderListEntry(version, operation) {
|
|
54
|
+
if (version.action !== FileAction.Folder) return;
|
|
55
|
+
throw new Error(`${operation}: list response returned a delimiter folder row for ${JSON.stringify(version.fileName)} without requesting delimiter grouping`);
|
|
56
|
+
}
|
|
57
|
+
function validateListedConcreteEntry(version, operation) {
|
|
58
|
+
assertNotFolderListEntry(version, operation);
|
|
59
|
+
listedFileIdOrThrow(version, operation);
|
|
60
|
+
return version;
|
|
61
|
+
}
|
|
62
|
+
function validateListedNameEntry(version, operation, options) {
|
|
63
|
+
if (version.action === FileAction.Folder) {
|
|
64
|
+
if (options.allowFolder) return version;
|
|
65
|
+
throw new Error(`${operation}: list response returned a delimiter folder row for ${JSON.stringify(version.fileName)} without requesting delimiter grouping`);
|
|
66
|
+
}
|
|
67
|
+
if (version.action === FileAction.Hide) throw new Error(`${operation}: list response returned a hide marker for ${JSON.stringify(version.fileName)}; b2_list_file_names only returns visible file versions`);
|
|
68
|
+
listedFileIdOrThrow(version, operation);
|
|
69
|
+
return version;
|
|
70
|
+
}
|
|
71
|
+
function validateListFileNamesResponse(response, options) {
|
|
72
|
+
const files = response.files.map((version) => validateListedNameEntry(version, "listFileNames", options));
|
|
73
|
+
return {
|
|
74
|
+
...response,
|
|
75
|
+
files
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function validateListFileVersionsResponse(response, options) {
|
|
79
|
+
if (options.allowFolder) {
|
|
80
|
+
const files = response.files.map((version) => {
|
|
81
|
+
if (version.action === FileAction.Folder) return version;
|
|
82
|
+
return validateListedConcreteEntry(version, "listFileVersions");
|
|
83
|
+
});
|
|
84
|
+
return {
|
|
85
|
+
...response,
|
|
86
|
+
files
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const files = response.files.map((version) => validateListedConcreteEntry(version, "listFileVersions"));
|
|
90
|
+
return {
|
|
91
|
+
...response,
|
|
92
|
+
files
|
|
93
|
+
};
|
|
94
|
+
}
|
|
26
95
|
/**
|
|
27
96
|
* Handle to a B2 bucket providing upload, download, listing, and management operations.
|
|
28
97
|
*
|
|
@@ -80,11 +149,13 @@ var Bucket = class {
|
|
|
80
149
|
if (isLarge) {
|
|
81
150
|
const bucketInfo = resumeNeedsFreshBucketDefaults(options) ? await this.refresh() : this.info;
|
|
82
151
|
const bucketDefaultRetention = bucketDefaultRetentionSnapshot(bucketInfo);
|
|
152
|
+
const bucketDefaultSse = bucketDefaultServerSideEncryptionSnapshot(bucketInfo);
|
|
83
153
|
return uploadLargeFile(this.client.raw, this.client.accountInfo, {
|
|
84
154
|
...options,
|
|
85
155
|
bucketId: this.id,
|
|
86
156
|
retry: uploadRetryOptions,
|
|
87
|
-
bucketDefaultServerSideEncryption:
|
|
157
|
+
...bucketDefaultSse.encryption !== void 0 ? { bucketDefaultServerSideEncryption: bucketDefaultSse.encryption } : {},
|
|
158
|
+
...bucketDefaultSse.unreadable ? { bucketDefaultServerSideEncryptionUnreadable: true } : {},
|
|
88
159
|
...bucketDefaultRetention.retention !== void 0 ? { bucketDefaultRetention: bucketDefaultRetention.retention } : {},
|
|
89
160
|
...bucketDefaultRetention.unreadable ? { bucketDefaultRetentionUnreadable: true } : {}
|
|
90
161
|
});
|
|
@@ -142,29 +213,18 @@ var Bucket = class {
|
|
|
142
213
|
...options
|
|
143
214
|
});
|
|
144
215
|
}
|
|
145
|
-
/**
|
|
146
|
-
* Lists file names in this bucket (most recent versions only).
|
|
147
|
-
* @param options - Optional filtering and pagination settings.
|
|
148
|
-
*
|
|
149
|
-
* @returns A page of file versions with an optional continuation token.
|
|
150
|
-
*/
|
|
151
216
|
async listFileNames(options) {
|
|
152
|
-
|
|
217
|
+
const response = await this.client.raw.listFileNames(this.client.accountInfo.getApiUrl(), this.client.accountInfo.getAuthToken(), {
|
|
153
218
|
bucketId: this.id,
|
|
154
219
|
...options?.startFileName !== void 0 ? { startFileName: options.startFileName } : {},
|
|
155
220
|
...options?.pageSize !== void 0 ? { maxFileCount: options.pageSize } : {},
|
|
156
221
|
...options?.prefix !== void 0 ? { prefix: options.prefix } : {},
|
|
157
222
|
...options?.delimiter !== void 0 ? { delimiter: options.delimiter } : {}
|
|
158
223
|
}, { ...options?.signal !== void 0 ? { signal: options.signal } : {} });
|
|
224
|
+
return options?.delimiter !== void 0 ? validateListFileNamesResponse(response, { allowFolder: true }) : validateListFileNamesResponse(response, { allowFolder: false });
|
|
159
225
|
}
|
|
160
|
-
/**
|
|
161
|
-
* Lists all file versions in this bucket, including hidden files.
|
|
162
|
-
* @param options - Optional filtering and pagination settings.
|
|
163
|
-
*
|
|
164
|
-
* @returns A page of file versions with an optional continuation token.
|
|
165
|
-
*/
|
|
166
226
|
async listFileVersions(options) {
|
|
167
|
-
|
|
227
|
+
const response = await this.client.raw.listFileVersions(this.client.accountInfo.getApiUrl(), this.client.accountInfo.getAuthToken(), {
|
|
168
228
|
bucketId: this.id,
|
|
169
229
|
...options?.startFileName !== void 0 ? { startFileName: options.startFileName } : {},
|
|
170
230
|
...options?.startFileId !== void 0 ? { startFileId: options.startFileId } : {},
|
|
@@ -172,65 +232,39 @@ var Bucket = class {
|
|
|
172
232
|
...options?.prefix !== void 0 ? { prefix: options.prefix } : {},
|
|
173
233
|
...options?.delimiter !== void 0 ? { delimiter: options.delimiter } : {}
|
|
174
234
|
}, { ...options?.signal !== void 0 ? { signal: options.signal } : {} });
|
|
235
|
+
return options?.delimiter !== void 0 ? validateListFileVersionsResponse(response, { allowFolder: true }) : validateListFileVersionsResponse(response, { allowFolder: false });
|
|
175
236
|
}
|
|
176
|
-
/**
|
|
177
|
-
* Async iterator that yields the latest visible version of every file in
|
|
178
|
-
* the bucket, automatically handling pagination via `listFileNames`.
|
|
179
|
-
*
|
|
180
|
-
* Hidden files (those whose latest version is a hide marker) are NOT
|
|
181
|
-
* yielded by this iterator. Use {@link paginateFileVersions} when you
|
|
182
|
-
* need full version history.
|
|
183
|
-
*
|
|
184
|
-
* @param options - Filter + pagination + abort options. `pageSize` is
|
|
185
|
-
* forwarded to `b2_list_file_names`'s `maxFileCount` (default 1000,
|
|
186
|
-
* B2-capped at 10000).
|
|
187
|
-
*
|
|
188
|
-
* @returns An async iterable of {@link FileVersion} entries.
|
|
189
|
-
*
|
|
190
|
-
* @example
|
|
191
|
-
* ```ts
|
|
192
|
-
* for await (const file of bucket.paginateFileNames({ prefix: 'photos/' })) {
|
|
193
|
-
* console.log(file.fileName, file.contentLength)
|
|
194
|
-
* }
|
|
195
|
-
* ```
|
|
196
|
-
*/
|
|
197
237
|
paginateFileNames(options) {
|
|
198
238
|
return paginateItems(async (cursor) => {
|
|
199
|
-
const
|
|
239
|
+
const request = {
|
|
200
240
|
pageSize: options?.pageSize ?? 1e3,
|
|
201
241
|
...cursor !== void 0 ? { startFileName: cursor } : {},
|
|
202
242
|
...options?.prefix !== void 0 ? { prefix: options.prefix } : {},
|
|
203
|
-
...options?.delimiter !== void 0 ? { delimiter: options.delimiter } : {},
|
|
204
243
|
...options?.signal !== void 0 ? { signal: options.signal } : {}
|
|
205
|
-
}
|
|
244
|
+
};
|
|
245
|
+
const resp = options?.delimiter !== void 0 ? await this.listFileNames({
|
|
246
|
+
...request,
|
|
247
|
+
delimiter: options.delimiter
|
|
248
|
+
}) : await this.listFileNames(request);
|
|
206
249
|
return {
|
|
207
250
|
page: resp,
|
|
208
251
|
nextCursor: resp.nextFileName ?? void 0
|
|
209
252
|
};
|
|
210
|
-
}, (page) => page.files
|
|
253
|
+
}, (page) => page.files, options?.signal);
|
|
211
254
|
}
|
|
212
|
-
/**
|
|
213
|
-
* Async iterator that yields every version of every file in the bucket,
|
|
214
|
-
* including hidden files and historical versions, automatically handling
|
|
215
|
-
* pagination via `listFileVersions`.
|
|
216
|
-
*
|
|
217
|
-
* The two-cursor `(nextFileName, nextFileId)` continuation that the raw
|
|
218
|
-
* endpoint exposes is threaded internally; callers iterate flat.
|
|
219
|
-
*
|
|
220
|
-
* @param options - Filter + pagination + abort options.
|
|
221
|
-
*
|
|
222
|
-
* @returns An async iterable of {@link FileVersion} entries.
|
|
223
|
-
*/
|
|
224
255
|
paginateFileVersions(options) {
|
|
225
256
|
return paginateItems(async (cursor) => {
|
|
226
|
-
const
|
|
257
|
+
const request = {
|
|
227
258
|
pageSize: options?.pageSize ?? 1e3,
|
|
228
259
|
...cursor !== void 0 ? { startFileName: cursor.fileName } : {},
|
|
229
260
|
...cursor?.fileId !== void 0 ? { startFileId: cursor.fileId } : {},
|
|
230
261
|
...options?.prefix !== void 0 ? { prefix: options.prefix } : {},
|
|
231
|
-
...options?.delimiter !== void 0 ? { delimiter: options.delimiter } : {},
|
|
232
262
|
...options?.signal !== void 0 ? { signal: options.signal } : {}
|
|
233
|
-
}
|
|
263
|
+
};
|
|
264
|
+
const resp = options?.delimiter !== void 0 ? await this.listFileVersions({
|
|
265
|
+
...request,
|
|
266
|
+
delimiter: options.delimiter
|
|
267
|
+
}) : await this.listFileVersions(request);
|
|
234
268
|
return {
|
|
235
269
|
page: resp,
|
|
236
270
|
nextCursor: resp.nextFileName !== null ? {
|
|
@@ -293,7 +327,7 @@ var Bucket = class {
|
|
|
293
327
|
/**
|
|
294
328
|
* Looks up the latest visible version of a file by name.
|
|
295
329
|
* Uses `listFileNames` under the hood; returns `null` when the file does not
|
|
296
|
-
* exist or
|
|
330
|
+
* exist or is hidden.
|
|
297
331
|
* @param fileName - The exact file path to look up.
|
|
298
332
|
*
|
|
299
333
|
* @returns The latest {@link FileVersion}, or `null` if not found.
|
|
@@ -303,7 +337,7 @@ var Bucket = class {
|
|
|
303
337
|
prefix: fileName,
|
|
304
338
|
pageSize: 1
|
|
305
339
|
})).files.find((f) => f.fileName === fileName);
|
|
306
|
-
if (!match
|
|
340
|
+
if (!match) return null;
|
|
307
341
|
return match;
|
|
308
342
|
}
|
|
309
343
|
/**
|
|
@@ -312,7 +346,7 @@ var Bucket = class {
|
|
|
312
346
|
* no hide marker to remove (file is already visible or does not exist).
|
|
313
347
|
* @param fileName - The file path to unhide.
|
|
314
348
|
*
|
|
315
|
-
* @returns The deleted hide
|
|
349
|
+
* @returns The deleted listed hide-marker row, or `null` if nothing was hidden.
|
|
316
350
|
*/
|
|
317
351
|
async unhideFile(fileName) {
|
|
318
352
|
const versions = (await this.listFileVersions({
|
|
@@ -321,8 +355,10 @@ var Bucket = class {
|
|
|
321
355
|
})).files.filter((f) => f.fileName === fileName);
|
|
322
356
|
if (versions.length === 0) return null;
|
|
323
357
|
const latest = versions[0];
|
|
324
|
-
if (latest?.action !==
|
|
325
|
-
|
|
358
|
+
if (latest?.action !== FileAction.Hide) return null;
|
|
359
|
+
const latestFileId = latest.fileId;
|
|
360
|
+
if (typeof latestFileId !== "string") throw new Error(`unhideFile: listFileVersions returned a hide marker without a fileId for ${JSON.stringify(fileName)}`);
|
|
361
|
+
await this.deleteFileVersion(fileName, latestFileId);
|
|
326
362
|
return latest;
|
|
327
363
|
}
|
|
328
364
|
/**
|
|
@@ -455,26 +491,27 @@ var Bucket = class {
|
|
|
455
491
|
...startFileId !== void 0 ? { startFileId } : {}
|
|
456
492
|
});
|
|
457
493
|
for (const version of page.files) {
|
|
494
|
+
const fileId = listedVersionFileIdOrThrow(version);
|
|
458
495
|
if (dryRun) {
|
|
459
496
|
yield {
|
|
460
497
|
type: "skip",
|
|
461
498
|
fileName: version.fileName,
|
|
462
|
-
fileId
|
|
499
|
+
fileId
|
|
463
500
|
};
|
|
464
501
|
continue;
|
|
465
502
|
}
|
|
466
503
|
try {
|
|
467
|
-
await this.deleteFileVersion(version.fileName,
|
|
504
|
+
await this.deleteFileVersion(version.fileName, fileId);
|
|
468
505
|
yield {
|
|
469
506
|
type: "delete",
|
|
470
507
|
fileName: version.fileName,
|
|
471
|
-
fileId
|
|
508
|
+
fileId
|
|
472
509
|
};
|
|
473
510
|
} catch (err) {
|
|
474
511
|
yield {
|
|
475
512
|
type: "error",
|
|
476
513
|
fileName: version.fileName,
|
|
477
|
-
fileId
|
|
514
|
+
fileId,
|
|
478
515
|
message: toError(err).message
|
|
479
516
|
};
|
|
480
517
|
}
|
|
@@ -528,10 +565,18 @@ var Bucket = class {
|
|
|
528
565
|
* @returns Updated bucket metadata.
|
|
529
566
|
*/
|
|
530
567
|
async update(options) {
|
|
568
|
+
const { bucketInfo, bucketType, corsRules, defaultRetention, defaultServerSideEncryption, ifRevisionIs, lifecycleRules, replicationConfiguration } = options;
|
|
531
569
|
return this.client.raw.updateBucket(this.client.accountInfo.getApiUrl(), this.client.accountInfo.getAuthToken(), {
|
|
570
|
+
...bucketType !== void 0 ? { bucketType } : {},
|
|
571
|
+
...bucketInfo !== void 0 ? { bucketInfo } : {},
|
|
572
|
+
...corsRules !== void 0 ? { corsRules } : {},
|
|
573
|
+
...defaultServerSideEncryption !== void 0 ? { defaultServerSideEncryption } : {},
|
|
574
|
+
...defaultRetention !== void 0 ? { defaultRetention } : {},
|
|
575
|
+
...lifecycleRules !== void 0 ? { lifecycleRules } : {},
|
|
576
|
+
...replicationConfiguration !== void 0 ? { replicationConfiguration } : {},
|
|
577
|
+
...ifRevisionIs !== void 0 ? { ifRevisionIs } : {},
|
|
532
578
|
accountId: accountId(this.client.accountInfo.getAccountId()),
|
|
533
|
-
bucketId: this.id
|
|
534
|
-
...options
|
|
579
|
+
bucketId: this.id
|
|
535
580
|
});
|
|
536
581
|
}
|
|
537
582
|
/**
|
|
@@ -638,7 +683,9 @@ var Bucket = class {
|
|
|
638
683
|
* write. For add/remove flows the helper methods below handle the
|
|
639
684
|
* refresh-then-set sequence for you.
|
|
640
685
|
*
|
|
641
|
-
* @returns The current
|
|
686
|
+
* @returns The current readable replication wrapper. Its `value` is null
|
|
687
|
+
* when no replication is configured or when the caller is not authorized
|
|
688
|
+
* to read replication settings.
|
|
642
689
|
*/
|
|
643
690
|
async getReplication() {
|
|
644
691
|
return (await this.refresh()).replicationConfiguration;
|
|
@@ -672,9 +719,10 @@ var Bucket = class {
|
|
|
672
719
|
*
|
|
673
720
|
* @throws If no source-side replication exists yet and the caller did
|
|
674
721
|
* not supply `sourceApplicationKeyId`.
|
|
722
|
+
* @throws If the caller is not authorized to read current replication settings.
|
|
675
723
|
*/
|
|
676
724
|
async addReplicationRule(rule, options) {
|
|
677
|
-
const current = (await this.refresh()).replicationConfiguration;
|
|
725
|
+
const current = readableReplicationConfigurationOrEmpty((await this.refresh()).replicationConfiguration, "addReplicationRule");
|
|
678
726
|
const existingSource = current.asReplicationSource;
|
|
679
727
|
const sourceKey = options?.sourceApplicationKeyId ?? existingSource?.sourceApplicationKeyId;
|
|
680
728
|
if (!sourceKey) throw new Error("addReplicationRule: no existing source-side replication; pass options.sourceApplicationKeyId");
|
|
@@ -694,9 +742,11 @@ var Bucket = class {
|
|
|
694
742
|
* @param replicationRuleName - Name of the rule to remove.
|
|
695
743
|
*
|
|
696
744
|
* @returns The updated bucket metadata.
|
|
745
|
+
*
|
|
746
|
+
* @throws If the caller is not authorized to read current replication settings.
|
|
697
747
|
*/
|
|
698
748
|
async removeReplicationRule(replicationRuleName) {
|
|
699
|
-
const current = (await this.refresh()).replicationConfiguration;
|
|
749
|
+
const current = readableReplicationConfigurationOrEmpty((await this.refresh()).replicationConfiguration, "removeReplicationRule");
|
|
700
750
|
const existingSource = current.asReplicationSource;
|
|
701
751
|
if (!existingSource) return this.setReplication(current);
|
|
702
752
|
const filtered = existingSource.replicationRules.filter((r) => r.replicationRuleName !== replicationRuleName);
|
|
@@ -759,12 +809,12 @@ var Bucket = class {
|
|
|
759
809
|
* Returns the current default Object Lock retention policy for new
|
|
760
810
|
* uploads to this bucket, refetched from B2.
|
|
761
811
|
*
|
|
762
|
-
* @returns The default {@link
|
|
763
|
-
*
|
|
764
|
-
*
|
|
812
|
+
* @returns The default {@link BucketDefaultRetention}, or `undefined` if
|
|
813
|
+
* the file lock configuration is not readable. B2 represents no bucket
|
|
814
|
+
* default retention as `{ mode: null, period: null }`.
|
|
765
815
|
*/
|
|
766
816
|
async getDefaultRetention() {
|
|
767
|
-
return (await this.refresh()).
|
|
817
|
+
return bucketDefaultRetentionSnapshot(await this.refresh()).retention;
|
|
768
818
|
}
|
|
769
819
|
/**
|
|
770
820
|
* Sets (or clears, by passing `{ mode: 'none', period: null }`) the
|