@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
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const require_partner = require("../types/partner.cjs");
|
|
2
|
+
//#region src/simulator/partner-capabilities.ts
|
|
3
|
+
/**
|
|
4
|
+
* Partner and Computer Backup endpoint capability requirements.
|
|
5
|
+
*
|
|
6
|
+
* Partner tokens carry suite-specific grants that are independent from
|
|
7
|
+
* storage application-key capabilities. The simulator uses this table only
|
|
8
|
+
* for strict Partner/Backup auth checks.
|
|
9
|
+
*
|
|
10
|
+
* Source: https://www.backblaze.com/apidocs (Partner endpoint pages list
|
|
11
|
+
* valid-token authorization failures as `401 unauthorized`).
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
var PartnerEndpoint = Object.freeze({
|
|
16
|
+
CreateGroupMember: "b2_create_group_member",
|
|
17
|
+
EjectGroupMember: "b2_eject_group_member",
|
|
18
|
+
ListGroups: "b2_list_groups",
|
|
19
|
+
ListGroupMembers: "b2_list_group_members",
|
|
20
|
+
ReserveTrialCreateAccount: "b2_reserve_trial_create_account",
|
|
21
|
+
ListComputers: "bz_list_computers",
|
|
22
|
+
DeleteComputer: "bz_delete_computer"
|
|
23
|
+
});
|
|
24
|
+
var PARTNER_ENDPOINT_NAMES = Object.freeze([
|
|
25
|
+
PartnerEndpoint.CreateGroupMember,
|
|
26
|
+
PartnerEndpoint.EjectGroupMember,
|
|
27
|
+
PartnerEndpoint.ListGroups,
|
|
28
|
+
PartnerEndpoint.ListGroupMembers,
|
|
29
|
+
PartnerEndpoint.ReserveTrialCreateAccount,
|
|
30
|
+
PartnerEndpoint.ListComputers,
|
|
31
|
+
PartnerEndpoint.DeleteComputer
|
|
32
|
+
]);
|
|
33
|
+
function endpointRequirement(suite, capabilities) {
|
|
34
|
+
return Object.freeze({
|
|
35
|
+
suite,
|
|
36
|
+
capabilities: Object.freeze([...capabilities])
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
var PARTNER_ENDPOINT_CAPABILITIES = Object.freeze({
|
|
40
|
+
[PartnerEndpoint.CreateGroupMember]: endpointRequirement("groups", [require_partner.PartnerCapability.All]),
|
|
41
|
+
[PartnerEndpoint.EjectGroupMember]: endpointRequirement("groups", [require_partner.PartnerCapability.All]),
|
|
42
|
+
[PartnerEndpoint.ListGroups]: endpointRequirement("groups", [require_partner.PartnerCapability.All]),
|
|
43
|
+
[PartnerEndpoint.ListGroupMembers]: endpointRequirement("groups", [require_partner.PartnerCapability.All]),
|
|
44
|
+
[PartnerEndpoint.ReserveTrialCreateAccount]: endpointRequirement("groups", [require_partner.PartnerCapability.All]),
|
|
45
|
+
[PartnerEndpoint.ListComputers]: endpointRequirement("backup", [require_partner.PartnerCapability.All]),
|
|
46
|
+
[PartnerEndpoint.DeleteComputer]: endpointRequirement("backup", [require_partner.PartnerCapability.All])
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Resolve the frozen capability requirement for a Partner or Backup endpoint.
|
|
50
|
+
*
|
|
51
|
+
* @param endpoint - Partner or Computer Backup endpoint name.
|
|
52
|
+
*
|
|
53
|
+
* @returns The endpoint's requirement, or null when no policy is available.
|
|
54
|
+
*/
|
|
55
|
+
function partnerEndpointCapabilityRequirementFor(endpoint) {
|
|
56
|
+
return PARTNER_ENDPOINT_CAPABILITIES[endpoint] ?? null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Find missing Partner capabilities against an already-resolved requirement.
|
|
60
|
+
*
|
|
61
|
+
* @param required - Partner capabilities required by the endpoint.
|
|
62
|
+
* @param granted - Partner capabilities granted by the token suite.
|
|
63
|
+
*
|
|
64
|
+
* @returns The subset of required Partner capabilities absent from `granted`.
|
|
65
|
+
*/
|
|
66
|
+
function missingPartnerCapabilities(required, granted) {
|
|
67
|
+
const grantedSet = new Set(granted);
|
|
68
|
+
return required.filter((capability) => !grantedSet.has(capability));
|
|
69
|
+
}
|
|
70
|
+
//#endregion
|
|
71
|
+
exports.PARTNER_ENDPOINT_CAPABILITIES = PARTNER_ENDPOINT_CAPABILITIES;
|
|
72
|
+
exports.PARTNER_ENDPOINT_NAMES = PARTNER_ENDPOINT_NAMES;
|
|
73
|
+
exports.PartnerEndpoint = PartnerEndpoint;
|
|
74
|
+
exports.missingPartnerCapabilities = missingPartnerCapabilities;
|
|
75
|
+
exports.partnerEndpointCapabilityRequirementFor = partnerEndpointCapabilityRequirementFor;
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=partner-capabilities.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partner-capabilities.cjs","names":[],"sources":["../../src/simulator/partner-capabilities.ts"],"sourcesContent":["/**\n * Partner and Computer Backup endpoint capability requirements.\n *\n * Partner tokens carry suite-specific grants that are independent from\n * storage application-key capabilities. The simulator uses this table only\n * for strict Partner/Backup auth checks.\n *\n * Source: https://www.backblaze.com/apidocs (Partner endpoint pages list\n * valid-token authorization failures as `401 unauthorized`).\n *\n * @packageDocumentation\n */\n\nimport { PartnerCapability } from '../types/partner.ts'\n\nexport const PartnerEndpoint = Object.freeze({\n CreateGroupMember: 'b2_create_group_member',\n EjectGroupMember: 'b2_eject_group_member',\n ListGroups: 'b2_list_groups',\n ListGroupMembers: 'b2_list_group_members',\n ReserveTrialCreateAccount: 'b2_reserve_trial_create_account',\n ListComputers: 'bz_list_computers',\n DeleteComputer: 'bz_delete_computer',\n} as const)\n\nexport type PartnerEndpoint = (typeof PartnerEndpoint)[keyof typeof PartnerEndpoint]\n\nexport const PARTNER_ENDPOINT_NAMES = Object.freeze([\n PartnerEndpoint.CreateGroupMember,\n PartnerEndpoint.EjectGroupMember,\n PartnerEndpoint.ListGroups,\n PartnerEndpoint.ListGroupMembers,\n PartnerEndpoint.ReserveTrialCreateAccount,\n PartnerEndpoint.ListComputers,\n PartnerEndpoint.DeleteComputer,\n] as const)\n\nexport type PartnerCapabilitySuite = 'groups' | 'backup'\n\nexport interface PartnerEndpointCapabilityRequirement {\n readonly suite: PartnerCapabilitySuite\n readonly capabilities: readonly PartnerCapability[]\n}\n\nfunction endpointRequirement(\n suite: PartnerCapabilitySuite,\n capabilities: readonly PartnerCapability[],\n): PartnerEndpointCapabilityRequirement {\n return Object.freeze({\n suite,\n capabilities: Object.freeze([...capabilities]),\n })\n}\n\nexport const PARTNER_ENDPOINT_CAPABILITIES = Object.freeze({\n [PartnerEndpoint.CreateGroupMember]: endpointRequirement('groups', [PartnerCapability.All]),\n [PartnerEndpoint.EjectGroupMember]: endpointRequirement('groups', [PartnerCapability.All]),\n [PartnerEndpoint.ListGroups]: endpointRequirement('groups', [PartnerCapability.All]),\n [PartnerEndpoint.ListGroupMembers]: endpointRequirement('groups', [PartnerCapability.All]),\n [PartnerEndpoint.ReserveTrialCreateAccount]: endpointRequirement('groups', [\n PartnerCapability.All,\n ]),\n [PartnerEndpoint.ListComputers]: endpointRequirement('backup', [PartnerCapability.All]),\n [PartnerEndpoint.DeleteComputer]: endpointRequirement('backup', [PartnerCapability.All]),\n} satisfies Record<PartnerEndpoint, PartnerEndpointCapabilityRequirement>)\n\n/**\n * Resolve the frozen capability requirement for a Partner or Backup endpoint.\n *\n * @param endpoint - Partner or Computer Backup endpoint name.\n *\n * @returns The endpoint's requirement, or null when no policy is available.\n */\nexport function partnerEndpointCapabilityRequirementFor(\n endpoint: PartnerEndpoint,\n): PartnerEndpointCapabilityRequirement | null {\n return PARTNER_ENDPOINT_CAPABILITIES[endpoint] ?? null\n}\n\n/**\n * Find missing Partner capabilities against an already-resolved requirement.\n *\n * @param required - Partner capabilities required by the endpoint.\n * @param granted - Partner capabilities granted by the token suite.\n *\n * @returns The subset of required Partner capabilities absent from `granted`.\n */\nexport function missingPartnerCapabilities(\n required: readonly PartnerCapability[],\n granted: readonly PartnerCapability[],\n): readonly PartnerCapability[] {\n const grantedSet = new Set(granted)\n return required.filter((capability) => !grantedSet.has(capability))\n}\n\n/**\n * Find which Partner capabilities are missing from the caller's grant set.\n *\n * @param endpoint - Partner or Computer Backup endpoint name.\n * @param granted - Suite capabilities carried by the Partner token.\n *\n * @returns The required Partner capabilities not present in `granted`.\n */\nexport function missingPartnerCapabilitiesFor(\n endpoint: PartnerEndpoint,\n granted: readonly PartnerCapability[],\n): readonly PartnerCapability[] {\n return missingPartnerCapabilities(\n partnerEndpointCapabilityRequirementFor(endpoint)?.capabilities ?? [],\n granted,\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,IAAa,kBAAkB,OAAO,OAAO;CAC3C,mBAAmB;CACnB,kBAAkB;CAClB,YAAY;CACZ,kBAAkB;CAClB,2BAA2B;CAC3B,eAAe;CACf,gBAAgB;AAClB,CAAU;AAIV,IAAa,yBAAyB,OAAO,OAAO;CAClD,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;AAClB,CAAU;AASV,SAAS,oBACP,OACA,cACsC;CACtC,OAAO,OAAO,OAAO;EACnB;EACA,cAAc,OAAO,OAAO,CAAC,GAAG,YAAY,CAAC;CAC/C,CAAC;AACH;AAEA,IAAa,gCAAgC,OAAO,OAAO;EACxD,gBAAgB,oBAAoB,oBAAoB,UAAU,CAAC,gBAAA,kBAAkB,GAAG,CAAC;EACzF,gBAAgB,mBAAmB,oBAAoB,UAAU,CAAC,gBAAA,kBAAkB,GAAG,CAAC;EACxF,gBAAgB,aAAa,oBAAoB,UAAU,CAAC,gBAAA,kBAAkB,GAAG,CAAC;EAClF,gBAAgB,mBAAmB,oBAAoB,UAAU,CAAC,gBAAA,kBAAkB,GAAG,CAAC;EACxF,gBAAgB,4BAA4B,oBAAoB,UAAU,CACzE,gBAAA,kBAAkB,GACpB,CAAC;EACA,gBAAgB,gBAAgB,oBAAoB,UAAU,CAAC,gBAAA,kBAAkB,GAAG,CAAC;EACrF,gBAAgB,iBAAiB,oBAAoB,UAAU,CAAC,gBAAA,kBAAkB,GAAG,CAAC;AACzF,CAAyE;;;;;;;;AASzE,SAAgB,wCACd,UAC6C;CAC7C,OAAO,8BAA8B,aAAa;AACpD;;;;;;;;;AAUA,SAAgB,2BACd,UACA,SAC8B;CAC9B,MAAM,aAAa,IAAI,IAAI,OAAO;CAClC,OAAO,SAAS,QAAQ,eAAe,CAAC,WAAW,IAAI,UAAU,CAAC;AACpE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { PartnerCapability } from '../types/partner.js';
|
|
2
|
+
export declare const PartnerEndpoint: Readonly<{
|
|
3
|
+
readonly CreateGroupMember: "b2_create_group_member";
|
|
4
|
+
readonly EjectGroupMember: "b2_eject_group_member";
|
|
5
|
+
readonly ListGroups: "b2_list_groups";
|
|
6
|
+
readonly ListGroupMembers: "b2_list_group_members";
|
|
7
|
+
readonly ReserveTrialCreateAccount: "b2_reserve_trial_create_account";
|
|
8
|
+
readonly ListComputers: "bz_list_computers";
|
|
9
|
+
readonly DeleteComputer: "bz_delete_computer";
|
|
10
|
+
}>;
|
|
11
|
+
export type PartnerEndpoint = (typeof PartnerEndpoint)[keyof typeof PartnerEndpoint];
|
|
12
|
+
export declare const PARTNER_ENDPOINT_NAMES: readonly ["b2_create_group_member", "b2_eject_group_member", "b2_list_groups", "b2_list_group_members", "b2_reserve_trial_create_account", "bz_list_computers", "bz_delete_computer"];
|
|
13
|
+
export type PartnerCapabilitySuite = 'groups' | 'backup';
|
|
14
|
+
export interface PartnerEndpointCapabilityRequirement {
|
|
15
|
+
readonly suite: PartnerCapabilitySuite;
|
|
16
|
+
readonly capabilities: readonly PartnerCapability[];
|
|
17
|
+
}
|
|
18
|
+
export declare const PARTNER_ENDPOINT_CAPABILITIES: Readonly<{
|
|
19
|
+
b2_create_group_member: PartnerEndpointCapabilityRequirement;
|
|
20
|
+
b2_eject_group_member: PartnerEndpointCapabilityRequirement;
|
|
21
|
+
b2_list_groups: PartnerEndpointCapabilityRequirement;
|
|
22
|
+
b2_list_group_members: PartnerEndpointCapabilityRequirement;
|
|
23
|
+
b2_reserve_trial_create_account: PartnerEndpointCapabilityRequirement;
|
|
24
|
+
bz_list_computers: PartnerEndpointCapabilityRequirement;
|
|
25
|
+
bz_delete_computer: PartnerEndpointCapabilityRequirement;
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the frozen capability requirement for a Partner or Backup endpoint.
|
|
29
|
+
*
|
|
30
|
+
* @param endpoint - Partner or Computer Backup endpoint name.
|
|
31
|
+
*
|
|
32
|
+
* @returns The endpoint's requirement, or null when no policy is available.
|
|
33
|
+
*/
|
|
34
|
+
export declare function partnerEndpointCapabilityRequirementFor(endpoint: PartnerEndpoint): PartnerEndpointCapabilityRequirement | null;
|
|
35
|
+
/**
|
|
36
|
+
* Find missing Partner capabilities against an already-resolved requirement.
|
|
37
|
+
*
|
|
38
|
+
* @param required - Partner capabilities required by the endpoint.
|
|
39
|
+
* @param granted - Partner capabilities granted by the token suite.
|
|
40
|
+
*
|
|
41
|
+
* @returns The subset of required Partner capabilities absent from `granted`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function missingPartnerCapabilities(required: readonly PartnerCapability[], granted: readonly PartnerCapability[]): readonly PartnerCapability[];
|
|
44
|
+
/**
|
|
45
|
+
* Find which Partner capabilities are missing from the caller's grant set.
|
|
46
|
+
*
|
|
47
|
+
* @param endpoint - Partner or Computer Backup endpoint name.
|
|
48
|
+
* @param granted - Suite capabilities carried by the Partner token.
|
|
49
|
+
*
|
|
50
|
+
* @returns The required Partner capabilities not present in `granted`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function missingPartnerCapabilitiesFor(endpoint: PartnerEndpoint, granted: readonly PartnerCapability[]): readonly PartnerCapability[];
|
|
53
|
+
//# sourceMappingURL=partner-capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partner-capabilities.d.ts","sourceRoot":"","sources":["../../src/simulator/partner-capabilities.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,eAAO,MAAM,eAAe;;;;;;;;EAQjB,CAAA;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAEpF,eAAO,MAAM,sBAAsB,uLAQxB,CAAA;AAEX,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAExD,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAA;IACtC,QAAQ,CAAC,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACpD;AAYD,eAAO,MAAM,6BAA6B;;;;;;;;EAUgC,CAAA;AAE1E;;;;;;GAMG;AACH,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,eAAe,GACxB,oCAAoC,GAAG,IAAI,CAE7C;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,OAAO,EAAE,SAAS,iBAAiB,EAAE,GACpC,SAAS,iBAAiB,EAAE,CAG9B;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,SAAS,iBAAiB,EAAE,GACpC,SAAS,iBAAiB,EAAE,CAK9B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { PartnerCapability } from '../types/partner.js';
|
|
2
|
+
export declare const PartnerEndpoint: Readonly<{
|
|
3
|
+
readonly CreateGroupMember: "b2_create_group_member";
|
|
4
|
+
readonly EjectGroupMember: "b2_eject_group_member";
|
|
5
|
+
readonly ListGroups: "b2_list_groups";
|
|
6
|
+
readonly ListGroupMembers: "b2_list_group_members";
|
|
7
|
+
readonly ReserveTrialCreateAccount: "b2_reserve_trial_create_account";
|
|
8
|
+
readonly ListComputers: "bz_list_computers";
|
|
9
|
+
readonly DeleteComputer: "bz_delete_computer";
|
|
10
|
+
}>;
|
|
11
|
+
export type PartnerEndpoint = (typeof PartnerEndpoint)[keyof typeof PartnerEndpoint];
|
|
12
|
+
export declare const PARTNER_ENDPOINT_NAMES: readonly ["b2_create_group_member", "b2_eject_group_member", "b2_list_groups", "b2_list_group_members", "b2_reserve_trial_create_account", "bz_list_computers", "bz_delete_computer"];
|
|
13
|
+
export type PartnerCapabilitySuite = 'groups' | 'backup';
|
|
14
|
+
export interface PartnerEndpointCapabilityRequirement {
|
|
15
|
+
readonly suite: PartnerCapabilitySuite;
|
|
16
|
+
readonly capabilities: readonly PartnerCapability[];
|
|
17
|
+
}
|
|
18
|
+
export declare const PARTNER_ENDPOINT_CAPABILITIES: Readonly<{
|
|
19
|
+
b2_create_group_member: PartnerEndpointCapabilityRequirement;
|
|
20
|
+
b2_eject_group_member: PartnerEndpointCapabilityRequirement;
|
|
21
|
+
b2_list_groups: PartnerEndpointCapabilityRequirement;
|
|
22
|
+
b2_list_group_members: PartnerEndpointCapabilityRequirement;
|
|
23
|
+
b2_reserve_trial_create_account: PartnerEndpointCapabilityRequirement;
|
|
24
|
+
bz_list_computers: PartnerEndpointCapabilityRequirement;
|
|
25
|
+
bz_delete_computer: PartnerEndpointCapabilityRequirement;
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the frozen capability requirement for a Partner or Backup endpoint.
|
|
29
|
+
*
|
|
30
|
+
* @param endpoint - Partner or Computer Backup endpoint name.
|
|
31
|
+
*
|
|
32
|
+
* @returns The endpoint's requirement, or null when no policy is available.
|
|
33
|
+
*/
|
|
34
|
+
export declare function partnerEndpointCapabilityRequirementFor(endpoint: PartnerEndpoint): PartnerEndpointCapabilityRequirement | null;
|
|
35
|
+
/**
|
|
36
|
+
* Find missing Partner capabilities against an already-resolved requirement.
|
|
37
|
+
*
|
|
38
|
+
* @param required - Partner capabilities required by the endpoint.
|
|
39
|
+
* @param granted - Partner capabilities granted by the token suite.
|
|
40
|
+
*
|
|
41
|
+
* @returns The subset of required Partner capabilities absent from `granted`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function missingPartnerCapabilities(required: readonly PartnerCapability[], granted: readonly PartnerCapability[]): readonly PartnerCapability[];
|
|
44
|
+
/**
|
|
45
|
+
* Find which Partner capabilities are missing from the caller's grant set.
|
|
46
|
+
*
|
|
47
|
+
* @param endpoint - Partner or Computer Backup endpoint name.
|
|
48
|
+
* @param granted - Suite capabilities carried by the Partner token.
|
|
49
|
+
*
|
|
50
|
+
* @returns The required Partner capabilities not present in `granted`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function missingPartnerCapabilitiesFor(endpoint: PartnerEndpoint, granted: readonly PartnerCapability[]): readonly PartnerCapability[];
|
|
53
|
+
//# sourceMappingURL=partner-capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partner-capabilities.d.ts","sourceRoot":"","sources":["../../src/simulator/partner-capabilities.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,eAAO,MAAM,eAAe;;;;;;;;EAQjB,CAAA;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAEpF,eAAO,MAAM,sBAAsB,uLAQxB,CAAA;AAEX,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAExD,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAA;IACtC,QAAQ,CAAC,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACpD;AAYD,eAAO,MAAM,6BAA6B;;;;;;;;EAUgC,CAAA;AAE1E;;;;;;GAMG;AACH,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,eAAe,GACxB,oCAAoC,GAAG,IAAI,CAE7C;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,OAAO,EAAE,SAAS,iBAAiB,EAAE,GACpC,SAAS,iBAAiB,EAAE,CAG9B;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,SAAS,iBAAiB,EAAE,GACpC,SAAS,iBAAiB,EAAE,CAK9B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { PartnerCapability } from "../types/partner.js";
|
|
2
|
+
//#region src/simulator/partner-capabilities.ts
|
|
3
|
+
/**
|
|
4
|
+
* Partner and Computer Backup endpoint capability requirements.
|
|
5
|
+
*
|
|
6
|
+
* Partner tokens carry suite-specific grants that are independent from
|
|
7
|
+
* storage application-key capabilities. The simulator uses this table only
|
|
8
|
+
* for strict Partner/Backup auth checks.
|
|
9
|
+
*
|
|
10
|
+
* Source: https://www.backblaze.com/apidocs (Partner endpoint pages list
|
|
11
|
+
* valid-token authorization failures as `401 unauthorized`).
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
var PartnerEndpoint = Object.freeze({
|
|
16
|
+
CreateGroupMember: "b2_create_group_member",
|
|
17
|
+
EjectGroupMember: "b2_eject_group_member",
|
|
18
|
+
ListGroups: "b2_list_groups",
|
|
19
|
+
ListGroupMembers: "b2_list_group_members",
|
|
20
|
+
ReserveTrialCreateAccount: "b2_reserve_trial_create_account",
|
|
21
|
+
ListComputers: "bz_list_computers",
|
|
22
|
+
DeleteComputer: "bz_delete_computer"
|
|
23
|
+
});
|
|
24
|
+
var PARTNER_ENDPOINT_NAMES = Object.freeze([
|
|
25
|
+
PartnerEndpoint.CreateGroupMember,
|
|
26
|
+
PartnerEndpoint.EjectGroupMember,
|
|
27
|
+
PartnerEndpoint.ListGroups,
|
|
28
|
+
PartnerEndpoint.ListGroupMembers,
|
|
29
|
+
PartnerEndpoint.ReserveTrialCreateAccount,
|
|
30
|
+
PartnerEndpoint.ListComputers,
|
|
31
|
+
PartnerEndpoint.DeleteComputer
|
|
32
|
+
]);
|
|
33
|
+
function endpointRequirement(suite, capabilities) {
|
|
34
|
+
return Object.freeze({
|
|
35
|
+
suite,
|
|
36
|
+
capabilities: Object.freeze([...capabilities])
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
var PARTNER_ENDPOINT_CAPABILITIES = Object.freeze({
|
|
40
|
+
[PartnerEndpoint.CreateGroupMember]: endpointRequirement("groups", [PartnerCapability.All]),
|
|
41
|
+
[PartnerEndpoint.EjectGroupMember]: endpointRequirement("groups", [PartnerCapability.All]),
|
|
42
|
+
[PartnerEndpoint.ListGroups]: endpointRequirement("groups", [PartnerCapability.All]),
|
|
43
|
+
[PartnerEndpoint.ListGroupMembers]: endpointRequirement("groups", [PartnerCapability.All]),
|
|
44
|
+
[PartnerEndpoint.ReserveTrialCreateAccount]: endpointRequirement("groups", [PartnerCapability.All]),
|
|
45
|
+
[PartnerEndpoint.ListComputers]: endpointRequirement("backup", [PartnerCapability.All]),
|
|
46
|
+
[PartnerEndpoint.DeleteComputer]: endpointRequirement("backup", [PartnerCapability.All])
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Resolve the frozen capability requirement for a Partner or Backup endpoint.
|
|
50
|
+
*
|
|
51
|
+
* @param endpoint - Partner or Computer Backup endpoint name.
|
|
52
|
+
*
|
|
53
|
+
* @returns The endpoint's requirement, or null when no policy is available.
|
|
54
|
+
*/
|
|
55
|
+
function partnerEndpointCapabilityRequirementFor(endpoint) {
|
|
56
|
+
return PARTNER_ENDPOINT_CAPABILITIES[endpoint] ?? null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Find missing Partner capabilities against an already-resolved requirement.
|
|
60
|
+
*
|
|
61
|
+
* @param required - Partner capabilities required by the endpoint.
|
|
62
|
+
* @param granted - Partner capabilities granted by the token suite.
|
|
63
|
+
*
|
|
64
|
+
* @returns The subset of required Partner capabilities absent from `granted`.
|
|
65
|
+
*/
|
|
66
|
+
function missingPartnerCapabilities(required, granted) {
|
|
67
|
+
const grantedSet = new Set(granted);
|
|
68
|
+
return required.filter((capability) => !grantedSet.has(capability));
|
|
69
|
+
}
|
|
70
|
+
//#endregion
|
|
71
|
+
export { PARTNER_ENDPOINT_CAPABILITIES, PARTNER_ENDPOINT_NAMES, PartnerEndpoint, missingPartnerCapabilities, partnerEndpointCapabilityRequirementFor };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=partner-capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partner-capabilities.js","names":[],"sources":["../../src/simulator/partner-capabilities.ts"],"sourcesContent":["/**\n * Partner and Computer Backup endpoint capability requirements.\n *\n * Partner tokens carry suite-specific grants that are independent from\n * storage application-key capabilities. The simulator uses this table only\n * for strict Partner/Backup auth checks.\n *\n * Source: https://www.backblaze.com/apidocs (Partner endpoint pages list\n * valid-token authorization failures as `401 unauthorized`).\n *\n * @packageDocumentation\n */\n\nimport { PartnerCapability } from '../types/partner.ts'\n\nexport const PartnerEndpoint = Object.freeze({\n CreateGroupMember: 'b2_create_group_member',\n EjectGroupMember: 'b2_eject_group_member',\n ListGroups: 'b2_list_groups',\n ListGroupMembers: 'b2_list_group_members',\n ReserveTrialCreateAccount: 'b2_reserve_trial_create_account',\n ListComputers: 'bz_list_computers',\n DeleteComputer: 'bz_delete_computer',\n} as const)\n\nexport type PartnerEndpoint = (typeof PartnerEndpoint)[keyof typeof PartnerEndpoint]\n\nexport const PARTNER_ENDPOINT_NAMES = Object.freeze([\n PartnerEndpoint.CreateGroupMember,\n PartnerEndpoint.EjectGroupMember,\n PartnerEndpoint.ListGroups,\n PartnerEndpoint.ListGroupMembers,\n PartnerEndpoint.ReserveTrialCreateAccount,\n PartnerEndpoint.ListComputers,\n PartnerEndpoint.DeleteComputer,\n] as const)\n\nexport type PartnerCapabilitySuite = 'groups' | 'backup'\n\nexport interface PartnerEndpointCapabilityRequirement {\n readonly suite: PartnerCapabilitySuite\n readonly capabilities: readonly PartnerCapability[]\n}\n\nfunction endpointRequirement(\n suite: PartnerCapabilitySuite,\n capabilities: readonly PartnerCapability[],\n): PartnerEndpointCapabilityRequirement {\n return Object.freeze({\n suite,\n capabilities: Object.freeze([...capabilities]),\n })\n}\n\nexport const PARTNER_ENDPOINT_CAPABILITIES = Object.freeze({\n [PartnerEndpoint.CreateGroupMember]: endpointRequirement('groups', [PartnerCapability.All]),\n [PartnerEndpoint.EjectGroupMember]: endpointRequirement('groups', [PartnerCapability.All]),\n [PartnerEndpoint.ListGroups]: endpointRequirement('groups', [PartnerCapability.All]),\n [PartnerEndpoint.ListGroupMembers]: endpointRequirement('groups', [PartnerCapability.All]),\n [PartnerEndpoint.ReserveTrialCreateAccount]: endpointRequirement('groups', [\n PartnerCapability.All,\n ]),\n [PartnerEndpoint.ListComputers]: endpointRequirement('backup', [PartnerCapability.All]),\n [PartnerEndpoint.DeleteComputer]: endpointRequirement('backup', [PartnerCapability.All]),\n} satisfies Record<PartnerEndpoint, PartnerEndpointCapabilityRequirement>)\n\n/**\n * Resolve the frozen capability requirement for a Partner or Backup endpoint.\n *\n * @param endpoint - Partner or Computer Backup endpoint name.\n *\n * @returns The endpoint's requirement, or null when no policy is available.\n */\nexport function partnerEndpointCapabilityRequirementFor(\n endpoint: PartnerEndpoint,\n): PartnerEndpointCapabilityRequirement | null {\n return PARTNER_ENDPOINT_CAPABILITIES[endpoint] ?? null\n}\n\n/**\n * Find missing Partner capabilities against an already-resolved requirement.\n *\n * @param required - Partner capabilities required by the endpoint.\n * @param granted - Partner capabilities granted by the token suite.\n *\n * @returns The subset of required Partner capabilities absent from `granted`.\n */\nexport function missingPartnerCapabilities(\n required: readonly PartnerCapability[],\n granted: readonly PartnerCapability[],\n): readonly PartnerCapability[] {\n const grantedSet = new Set(granted)\n return required.filter((capability) => !grantedSet.has(capability))\n}\n\n/**\n * Find which Partner capabilities are missing from the caller's grant set.\n *\n * @param endpoint - Partner or Computer Backup endpoint name.\n * @param granted - Suite capabilities carried by the Partner token.\n *\n * @returns The required Partner capabilities not present in `granted`.\n */\nexport function missingPartnerCapabilitiesFor(\n endpoint: PartnerEndpoint,\n granted: readonly PartnerCapability[],\n): readonly PartnerCapability[] {\n return missingPartnerCapabilities(\n partnerEndpointCapabilityRequirementFor(endpoint)?.capabilities ?? [],\n granted,\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,IAAa,kBAAkB,OAAO,OAAO;CAC3C,mBAAmB;CACnB,kBAAkB;CAClB,YAAY;CACZ,kBAAkB;CAClB,2BAA2B;CAC3B,eAAe;CACf,gBAAgB;AAClB,CAAU;AAIV,IAAa,yBAAyB,OAAO,OAAO;CAClD,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;AAClB,CAAU;AASV,SAAS,oBACP,OACA,cACsC;CACtC,OAAO,OAAO,OAAO;EACnB;EACA,cAAc,OAAO,OAAO,CAAC,GAAG,YAAY,CAAC;CAC/C,CAAC;AACH;AAEA,IAAa,gCAAgC,OAAO,OAAO;EACxD,gBAAgB,oBAAoB,oBAAoB,UAAU,CAAC,kBAAkB,GAAG,CAAC;EACzF,gBAAgB,mBAAmB,oBAAoB,UAAU,CAAC,kBAAkB,GAAG,CAAC;EACxF,gBAAgB,aAAa,oBAAoB,UAAU,CAAC,kBAAkB,GAAG,CAAC;EAClF,gBAAgB,mBAAmB,oBAAoB,UAAU,CAAC,kBAAkB,GAAG,CAAC;EACxF,gBAAgB,4BAA4B,oBAAoB,UAAU,CACzE,kBAAkB,GACpB,CAAC;EACA,gBAAgB,gBAAgB,oBAAoB,UAAU,CAAC,kBAAkB,GAAG,CAAC;EACrF,gBAAgB,iBAAiB,oBAAoB,UAAU,CAAC,kBAAkB,GAAG,CAAC;AACzF,CAAyE;;;;;;;;AASzE,SAAgB,wCACd,UAC6C;CAC7C,OAAO,8BAA8B,aAAa;AACpD;;;;;;;;;AAUA,SAAgB,2BACd,UACA,SAC8B;CAC9B,MAAM,aAAa,IAAI,IAAI,OAAO;CAClC,OAAO,SAAS,QAAQ,eAAe,CAAC,WAAW,IAAI,UAAU,CAAC;AACpE"}
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
const require_ids = require("../types/ids.cjs");
|
|
2
2
|
const require_auth = require("../types/auth.cjs");
|
|
3
3
|
const require_partner = require("../types/partner.cjs");
|
|
4
|
+
const require_partner_capabilities = require("./partner-capabilities.cjs");
|
|
4
5
|
//#region src/simulator/partner.ts
|
|
5
6
|
var DAY_MS = 864e5;
|
|
6
7
|
var PARTNER_REGIONS = new Set(Object.values(require_partner.Region));
|
|
7
|
-
var PARTNER_API_ENDPOINTS =
|
|
8
|
-
"b2_create_group_member",
|
|
9
|
-
"b2_eject_group_member",
|
|
10
|
-
"b2_list_groups",
|
|
11
|
-
"b2_list_group_members",
|
|
12
|
-
"b2_reserve_trial_create_account",
|
|
13
|
-
"bz_list_computers",
|
|
14
|
-
"bz_delete_computer"
|
|
15
|
-
]);
|
|
8
|
+
var PARTNER_API_ENDPOINTS = new Set(require_partner_capabilities.PARTNER_ENDPOINT_NAMES);
|
|
16
9
|
var DEFAULT_GROUP_COUNT = 3;
|
|
17
10
|
var MAX_GROUPS_PER_ADMIN = 500;
|
|
18
11
|
var DEFAULT_MAX_GROUP_COUNT = 100;
|
|
@@ -38,24 +31,15 @@ var PARTNER_CREATED_STORAGE_KEY_CAPABILITIES = Object.freeze([
|
|
|
38
31
|
function isPartnerApiEndpoint(endpoint) {
|
|
39
32
|
return PARTNER_API_ENDPOINTS.has(endpoint);
|
|
40
33
|
}
|
|
41
|
-
|
|
42
|
-
"b2_list_groups",
|
|
43
|
-
"b2_list_group_members",
|
|
44
|
-
"bz_list_computers"
|
|
45
|
-
]);
|
|
46
|
-
/**
|
|
47
|
-
* Checks whether a JSON API endpoint can safely receive GET query parameters.
|
|
48
|
-
*
|
|
49
|
-
* @param endpoint - Endpoint name parsed from the request path.
|
|
50
|
-
*
|
|
51
|
-
* @returns `true` for Partner/Backup list endpoints that document GET query requests.
|
|
52
|
-
*/
|
|
53
|
-
function isPartnerQueryEndpoint(endpoint) {
|
|
54
|
-
return PARTNER_QUERY_ENDPOINTS.has(endpoint);
|
|
55
|
-
}
|
|
34
|
+
require_partner_capabilities.PartnerEndpoint.ListGroups, require_partner_capabilities.PartnerEndpoint.ListGroupMembers, require_partner_capabilities.PartnerEndpoint.ListComputers;
|
|
56
35
|
function utcDateString(ms) {
|
|
57
36
|
return new Date(ms).toISOString().slice(0, 10);
|
|
58
37
|
}
|
|
38
|
+
function b2FriendlyTimestamp(ms) {
|
|
39
|
+
const date = new Date(ms);
|
|
40
|
+
const pad = (n, width = 2) => String(n).padStart(width, "0");
|
|
41
|
+
return `d${`${pad(date.getUTCFullYear(), 4)}${pad(date.getUTCMonth() + 1)}${pad(date.getUTCDate())}`}_m${`${pad(date.getUTCHours())}${pad(date.getUTCMinutes())}${pad(date.getUTCSeconds())}`}`;
|
|
42
|
+
}
|
|
59
43
|
function utcDayStartMs(ms) {
|
|
60
44
|
const date = new Date(ms);
|
|
61
45
|
return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
|
|
@@ -80,6 +64,9 @@ function compareStrings(left, right) {
|
|
|
80
64
|
if (left > right) return 1;
|
|
81
65
|
return 0;
|
|
82
66
|
}
|
|
67
|
+
function clonePartnerCapabilities(capabilities) {
|
|
68
|
+
return Object.freeze([...capabilities]);
|
|
69
|
+
}
|
|
83
70
|
/**
|
|
84
71
|
* Handles Partner and Computer Backup simulator state and endpoint logic.
|
|
85
72
|
*
|
|
@@ -109,6 +96,8 @@ var PartnerSimulator = class {
|
|
|
109
96
|
apiEnabled;
|
|
110
97
|
accountHasValidPhone;
|
|
111
98
|
accountInGoodStanding;
|
|
99
|
+
groupsCapabilities;
|
|
100
|
+
backupCapabilities;
|
|
112
101
|
/**
|
|
113
102
|
* Creates the Partner/Backup simulator facade.
|
|
114
103
|
*
|
|
@@ -122,6 +111,8 @@ var PartnerSimulator = class {
|
|
|
122
111
|
this.apiEnabled = options.partnerApiEnabled ?? true;
|
|
123
112
|
this.accountHasValidPhone = options.partnerAccountHasValidPhone ?? true;
|
|
124
113
|
this.accountInGoodStanding = options.partnerAccountInGoodStanding ?? true;
|
|
114
|
+
this.groupsCapabilities = clonePartnerCapabilities(options.partnerGroupsCapabilities ?? [require_partner.PartnerCapability.All]);
|
|
115
|
+
this.backupCapabilities = clonePartnerCapabilities(options.partnerBackupCapabilities ?? [require_partner.PartnerCapability.All]);
|
|
125
116
|
}
|
|
126
117
|
/**
|
|
127
118
|
* Reports whether v3 authorize should return Partner/Backup suites.
|
|
@@ -154,7 +145,9 @@ var PartnerSimulator = class {
|
|
|
154
145
|
const tokenStr = this.host.genId("sim_partner_auth_token");
|
|
155
146
|
this.issuedTokens.set(tokenStr, {
|
|
156
147
|
accountId: this.host.accountId,
|
|
157
|
-
|
|
148
|
+
backupCapabilities: this.backupCapabilities,
|
|
149
|
+
expiresAt: this.host.now() + this.host.authTokenTtlMs,
|
|
150
|
+
groupsCapabilities: this.groupsCapabilities
|
|
158
151
|
});
|
|
159
152
|
return {
|
|
160
153
|
status: 200,
|
|
@@ -184,13 +177,13 @@ var PartnerSimulator = class {
|
|
|
184
177
|
s3ApiUrl: origin
|
|
185
178
|
},
|
|
186
179
|
groupsApi: {
|
|
187
|
-
capabilities:
|
|
180
|
+
capabilities: this.groupsCapabilities,
|
|
188
181
|
groupsApiUrl: `${origin}/partner`,
|
|
189
182
|
infoType: "groupsApi"
|
|
190
183
|
},
|
|
191
184
|
backupApi: {
|
|
192
185
|
backupApiUrl: `${origin}/backup`,
|
|
193
|
-
capabilities:
|
|
186
|
+
capabilities: this.backupCapabilities,
|
|
194
187
|
infoType: "backupApi"
|
|
195
188
|
}
|
|
196
189
|
},
|
|
@@ -201,27 +194,20 @@ var PartnerSimulator = class {
|
|
|
201
194
|
/**
|
|
202
195
|
* Handles b2_reserve_trial_create_account.
|
|
203
196
|
*
|
|
204
|
-
* @param body - Parsed JSON
|
|
197
|
+
* @param body - Parsed JSON request body.
|
|
205
198
|
* @param authToken - Partner authorization token.
|
|
206
199
|
*
|
|
207
200
|
* @returns Simulator JSON response.
|
|
208
201
|
*/
|
|
209
202
|
reserveTrialCreateAccount(body, authToken) {
|
|
210
|
-
const auth = this.authorizeRequest(authToken);
|
|
203
|
+
const auth = this.authorizeRequest(require_partner_capabilities.PartnerEndpoint.ReserveTrialCreateAccount, authToken);
|
|
211
204
|
if ("status" in auth) return auth;
|
|
212
|
-
|
|
213
|
-
if (
|
|
214
|
-
const entries = [];
|
|
215
|
-
const requestEmails = /* @__PURE__ */ new Set();
|
|
216
|
-
for (const item of body) {
|
|
217
|
-
const parsed = this.parseReserveTrialCreateAccountEntry(item, requestEmails);
|
|
218
|
-
if (parsed.error !== null) return parsed.error;
|
|
219
|
-
entries.push(parsed);
|
|
220
|
-
}
|
|
205
|
+
const parsed = this.parseReserveTrialCreateAccountRequest(body);
|
|
206
|
+
if (parsed.error !== null) return parsed.error;
|
|
221
207
|
const startDayMs = utcDayStartMs(this.host.now());
|
|
222
208
|
return {
|
|
223
209
|
status: 200,
|
|
224
|
-
body:
|
|
210
|
+
body: this.createReserveTrialAccount(parsed.entry, parsed.normalizedEmail, startDayMs)
|
|
225
211
|
};
|
|
226
212
|
}
|
|
227
213
|
/**
|
|
@@ -233,7 +219,7 @@ var PartnerSimulator = class {
|
|
|
233
219
|
* @returns Simulator JSON response.
|
|
234
220
|
*/
|
|
235
221
|
createGroupMember(body, authToken) {
|
|
236
|
-
const auth = this.authorizeRequest(authToken, { checkPhone: false });
|
|
222
|
+
const auth = this.authorizeRequest(require_partner_capabilities.PartnerEndpoint.CreateGroupMember, authToken, { checkPhone: false });
|
|
237
223
|
if ("status" in auth) return auth;
|
|
238
224
|
const record = requestObject(body);
|
|
239
225
|
const request = this.parseCreateGroupMemberRequest(record);
|
|
@@ -279,11 +265,11 @@ var PartnerSimulator = class {
|
|
|
279
265
|
});
|
|
280
266
|
return {
|
|
281
267
|
status: 200,
|
|
282
|
-
body:
|
|
268
|
+
body: {
|
|
283
269
|
applicationKeyId: applicationKeyId$1,
|
|
284
270
|
applicationKey,
|
|
285
271
|
groupMember: this.publicGroupMember(stored)
|
|
286
|
-
}
|
|
272
|
+
}
|
|
287
273
|
};
|
|
288
274
|
}
|
|
289
275
|
/**
|
|
@@ -295,7 +281,7 @@ var PartnerSimulator = class {
|
|
|
295
281
|
* @returns Simulator JSON response.
|
|
296
282
|
*/
|
|
297
283
|
ejectGroupMember(body, authToken) {
|
|
298
|
-
const auth = this.authorizeRequest(authToken);
|
|
284
|
+
const auth = this.authorizeRequest(require_partner_capabilities.PartnerEndpoint.EjectGroupMember, authToken);
|
|
299
285
|
if ("status" in auth) return auth;
|
|
300
286
|
const record = requestObject(body);
|
|
301
287
|
const request = this.parseEjectGroupMemberRequest(record);
|
|
@@ -334,7 +320,7 @@ var PartnerSimulator = class {
|
|
|
334
320
|
* @returns Simulator JSON response.
|
|
335
321
|
*/
|
|
336
322
|
listGroups(body, authToken) {
|
|
337
|
-
const auth = this.authorizeRequest(authToken, { checkPhone: false });
|
|
323
|
+
const auth = this.authorizeRequest(require_partner_capabilities.PartnerEndpoint.ListGroups, authToken, { checkPhone: false });
|
|
338
324
|
if ("status" in auth) return auth;
|
|
339
325
|
const record = requestObject(body);
|
|
340
326
|
const adminAccountId = this.requiredString(record, "adminAccountId", 400, "bad_request");
|
|
@@ -373,7 +359,7 @@ var PartnerSimulator = class {
|
|
|
373
359
|
* @returns Simulator JSON response.
|
|
374
360
|
*/
|
|
375
361
|
listGroupMembers(body, authToken) {
|
|
376
|
-
const auth = this.authorizeRequest(authToken, { checkPhone: false });
|
|
362
|
+
const auth = this.authorizeRequest(require_partner_capabilities.PartnerEndpoint.ListGroupMembers, authToken, { checkPhone: false });
|
|
377
363
|
if ("status" in auth) return auth;
|
|
378
364
|
const record = requestObject(body);
|
|
379
365
|
const request = this.parseListGroupMembersRequest(record);
|
|
@@ -390,12 +376,12 @@ var PartnerSimulator = class {
|
|
|
390
376
|
const next = members[normalizedStartIndex + request.maxMemberCount];
|
|
391
377
|
return {
|
|
392
378
|
status: 200,
|
|
393
|
-
body:
|
|
379
|
+
body: {
|
|
394
380
|
groupId: require_ids.groupId(group.groupId),
|
|
395
381
|
groupName: group.groupName,
|
|
396
382
|
groupMembers: page.map((member) => this.publicListedGroupMember(member)),
|
|
397
383
|
nextEmail: next === void 0 ? null : next.email
|
|
398
|
-
}
|
|
384
|
+
}
|
|
399
385
|
};
|
|
400
386
|
}
|
|
401
387
|
/**
|
|
@@ -407,7 +393,7 @@ var PartnerSimulator = class {
|
|
|
407
393
|
* @returns Simulator JSON response.
|
|
408
394
|
*/
|
|
409
395
|
listComputers(body, authToken) {
|
|
410
|
-
const auth = this.authorizeRequest(authToken, { checkPhone: false });
|
|
396
|
+
const auth = this.authorizeRequest(require_partner_capabilities.PartnerEndpoint.ListComputers, authToken, { checkPhone: false });
|
|
411
397
|
if ("status" in auth) return auth;
|
|
412
398
|
const record = requestObject(body);
|
|
413
399
|
const accountId = this.requiredString(record, "accountId", 400, "invalid_account_id");
|
|
@@ -446,7 +432,7 @@ var PartnerSimulator = class {
|
|
|
446
432
|
* @returns Simulator JSON response.
|
|
447
433
|
*/
|
|
448
434
|
deleteComputer(body, authToken) {
|
|
449
|
-
const auth = this.authorizeRequest(authToken, { checkPhone: false });
|
|
435
|
+
const auth = this.authorizeRequest(require_partner_capabilities.PartnerEndpoint.DeleteComputer, authToken, { checkPhone: false });
|
|
450
436
|
if ("status" in auth) return auth;
|
|
451
437
|
const record = requestObject(body);
|
|
452
438
|
const accountId = this.requiredString(record, "accountId", 400, "invalid_account_id");
|
|
@@ -463,7 +449,7 @@ var PartnerSimulator = class {
|
|
|
463
449
|
body: [this.publicComputer(computer)]
|
|
464
450
|
};
|
|
465
451
|
}
|
|
466
|
-
authorizeRequest(authToken, options = {}) {
|
|
452
|
+
authorizeRequest(endpoint, authToken, options = {}) {
|
|
467
453
|
if (authToken === void 0 || authToken.trim() === "" || /\s/.test(authToken)) return this.host.error(403, "access_denied", "missing or malformed Partner API Authorization header");
|
|
468
454
|
if (!this.validateIssuedTokens) {
|
|
469
455
|
if (!this.apiEnabled) return this.host.error(403, "access_denied", "account is not enabled for Partner API");
|
|
@@ -476,28 +462,37 @@ var PartnerSimulator = class {
|
|
|
476
462
|
if (!this.apiEnabled) return this.host.error(403, "access_denied", "account is not enabled for Partner API");
|
|
477
463
|
if (options.checkPhone !== false && !this.accountHasValidPhone) return this.host.error(403, "access_denied", "account does not have a valid phone number");
|
|
478
464
|
if (!this.accountInGoodStanding) return this.host.error(403, "access_denied", "account is not in good standing");
|
|
465
|
+
const capabilityError = this.authorizeEndpointCapabilities(endpoint, token);
|
|
466
|
+
if (capabilityError !== null) return capabilityError;
|
|
479
467
|
return { accountId: token.accountId };
|
|
480
468
|
}
|
|
469
|
+
authorizeEndpointCapabilities(endpoint, token) {
|
|
470
|
+
const requirement = require_partner_capabilities.partnerEndpointCapabilityRequirementFor(endpoint);
|
|
471
|
+
if (requirement === null) return this.host.error(401, "unauthorized", `no Partner capability policy for ${endpoint}`);
|
|
472
|
+
const granted = requirement.suite === "groups" ? token.groupsCapabilities : token.backupCapabilities;
|
|
473
|
+
const missing = require_partner_capabilities.missingPartnerCapabilities(requirement.capabilities, granted);
|
|
474
|
+
if (missing.length === 0) return null;
|
|
475
|
+
return this.host.error(401, "unauthorized", `Partner token lacks required capabilities: ${missing.join(", ")}`);
|
|
476
|
+
}
|
|
481
477
|
authorizeAccount(auth, requestedAccountId) {
|
|
482
478
|
if (auth.accountId === null) return null;
|
|
483
479
|
if (auth.accountId === requestedAccountId) return null;
|
|
484
480
|
return this.host.error(403, "unauthorized", "Partner token is not authorized for requested account");
|
|
485
481
|
}
|
|
486
|
-
|
|
487
|
-
if (typeof value !== "object" || value === null) return { error: this.host.error(400, "bad_request", "trial account request must be an object") };
|
|
482
|
+
parseReserveTrialCreateAccountRequest(value) {
|
|
483
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return { error: this.host.error(400, "bad_request", "trial account request must be an object") };
|
|
488
484
|
const record = value;
|
|
489
485
|
const email = record["email"];
|
|
490
486
|
if (typeof email !== "string") return { error: this.host.error(400, "bad_request", "email is required") };
|
|
491
487
|
if (!isValidEmailAddress(email)) return { error: this.host.error(400, "bad_request", "email address is invalid") };
|
|
492
488
|
const normalizedEmail = normalizeEmail(email);
|
|
493
|
-
if (this.knownEmails.has(normalizedEmail)
|
|
489
|
+
if (this.knownEmails.has(normalizedEmail)) return { error: this.host.error(400, "bad_request", "email must not already exist as a Backblaze account") };
|
|
494
490
|
const term = record["term"];
|
|
495
491
|
if (typeof term !== "number" || !Number.isInteger(term) || term < 7 || term > 30) return { error: this.host.error(400, "bad_request", "term must be between 7 and 30 days") };
|
|
496
492
|
const storage = record["storage"];
|
|
497
493
|
if (typeof storage !== "number" || !Number.isInteger(storage) || storage < 1 || storage > 50) return { error: this.host.error(400, "bad_request", "storage must be between 1 and 50 TB") };
|
|
498
494
|
const region = record["region"];
|
|
499
495
|
if (region !== void 0 && region !== null && (typeof region !== "string" || !PARTNER_REGIONS.has(region))) return { error: this.host.error(400, "bad_request", "region is not supported") };
|
|
500
|
-
requestEmails.add(normalizedEmail);
|
|
501
496
|
return {
|
|
502
497
|
entry: {
|
|
503
498
|
email,
|
|
@@ -666,9 +661,9 @@ var PartnerSimulator = class {
|
|
|
666
661
|
return computers;
|
|
667
662
|
}
|
|
668
663
|
publicGroup(group) {
|
|
669
|
-
const timestamp =
|
|
664
|
+
const timestamp = b2FriendlyTimestamp(group.createdTimestamp);
|
|
670
665
|
return {
|
|
671
|
-
accountStandingDetails: { state: "
|
|
666
|
+
accountStandingDetails: { state: "B2_GOOD_STANDING" },
|
|
672
667
|
b2Stats: this.emptyB2Stats(group.createdTimestamp),
|
|
673
668
|
groupId: require_ids.groupId(group.groupId),
|
|
674
669
|
groupName: group.groupName,
|
|
@@ -705,15 +700,14 @@ var PartnerSimulator = class {
|
|
|
705
700
|
}
|
|
706
701
|
emptyB2Stats(timestamp) {
|
|
707
702
|
return {
|
|
708
|
-
b2BytesStoredCount:
|
|
709
|
-
b2FilesStoredCount:
|
|
710
|
-
b2StatsAsOfTimestamp:
|
|
711
|
-
bucketCount:
|
|
703
|
+
b2BytesStoredCount: 0,
|
|
704
|
+
b2FilesStoredCount: 0,
|
|
705
|
+
b2StatsAsOfTimestamp: b2FriendlyTimestamp(timestamp),
|
|
706
|
+
bucketCount: 0
|
|
712
707
|
};
|
|
713
708
|
}
|
|
714
709
|
};
|
|
715
710
|
//#endregion
|
|
716
711
|
exports.PartnerSimulator = PartnerSimulator;
|
|
717
|
-
exports.isPartnerQueryEndpoint = isPartnerQueryEndpoint;
|
|
718
712
|
|
|
719
713
|
//# sourceMappingURL=partner.cjs.map
|