@salesforce/b2c-tooling-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/README.md +180 -13
- package/data/scaffolds/cartridge/files/.project.ejs +17 -0
- package/data/scaffolds/cartridge/files/cartridge/cartridge.properties.ejs +4 -0
- package/data/scaffolds/cartridge/files/cartridge/controllers/Example.js.ejs +19 -0
- package/data/scaffolds/cartridge/files/cartridge/models/example.js.ejs +14 -0
- package/data/scaffolds/cartridge/files/cartridge/scripts/helpers/exampleHelpers.js.ejs +18 -0
- package/data/scaffolds/cartridge/files/cartridge/static/default/css/example.css +6 -0
- package/data/scaffolds/cartridge/files/cartridge/templates/default/example/show.isml.ejs +11 -0
- package/data/scaffolds/cartridge/scaffold.json +88 -0
- package/data/scaffolds/controller/files/controller.js.ejs +134 -0
- package/data/scaffolds/controller/files/template.isml.ejs +22 -0
- package/data/scaffolds/controller/scaffold.json +64 -0
- package/data/scaffolds/custom-api/files/api.json.ejs +11 -0
- package/data/scaffolds/custom-api/files/schema.yaml.ejs +188 -0
- package/data/scaffolds/custom-api/files/script.js.ejs +95 -0
- package/data/scaffolds/custom-api/scaffold.json +65 -0
- package/data/scaffolds/hook/files/hook.js.ejs +99 -0
- package/data/scaffolds/hook/files/hooks-entry.json.ejs +6 -0
- package/data/scaffolds/hook/scaffold.json +60 -0
- package/data/scaffolds/job-step/files/step-chunk.js.ejs +136 -0
- package/data/scaffolds/job-step/files/step-task.js.ejs +47 -0
- package/data/scaffolds/job-step/files/steptypes-entry.json.ejs +41 -0
- package/data/scaffolds/job-step/scaffold.json +64 -0
- package/data/scaffolds/page-designer-component/files/component.isml.ejs +23 -0
- package/data/scaffolds/page-designer-component/files/component.js.ejs +35 -0
- package/data/scaffolds/page-designer-component/files/component.json.ejs +50 -0
- package/data/scaffolds/page-designer-component/scaffold.json +66 -0
- package/data/scaffolds/service/files/service-http.js.ejs +245 -0
- package/data/scaffolds/service/files/service-sftp.js.ejs +371 -0
- package/data/scaffolds/service/files/service-soap.js.ejs +230 -0
- package/data/scaffolds/service/scaffold.json +83 -0
- package/data/script-api/dw.extensions.payments.SalesforcePaymentsMgr.md +48 -0
- package/data/script-api/dw.system.Request.md +5 -0
- package/data/script-api/dw.web.Cookie.md +108 -31
- package/data/script-api/index.json +2 -2
- package/data/script-api/index.md +1 -1
- package/dist/cjs/auth/oauth-implicit.d.ts +1 -0
- package/dist/cjs/auth/oauth-implicit.js +8 -3
- package/dist/cjs/auth/oauth-implicit.js.map +1 -1
- package/dist/cjs/auth/oauth.d.ts +1 -0
- package/dist/cjs/auth/oauth.js +8 -3
- package/dist/cjs/auth/oauth.js.map +1 -1
- package/dist/cjs/auth/types.d.ts +5 -0
- package/dist/cjs/auth/types.js.map +1 -1
- package/dist/cjs/cli/am-command.d.ts +74 -0
- package/dist/cjs/cli/am-command.js +189 -0
- package/dist/cjs/cli/am-command.js.map +1 -0
- package/dist/cjs/cli/base-command.d.ts +38 -0
- package/dist/cjs/cli/base-command.js +142 -0
- package/dist/cjs/cli/base-command.js.map +1 -1
- package/dist/cjs/cli/config.d.ts +9 -0
- package/dist/cjs/cli/config.js +19 -2
- package/dist/cjs/cli/config.js.map +1 -1
- package/dist/cjs/cli/index.d.ts +1 -0
- package/dist/cjs/cli/index.js +1 -0
- package/dist/cjs/cli/index.js.map +1 -1
- package/dist/cjs/cli/instance-command.d.ts +1 -0
- package/dist/cjs/cli/oauth-command.d.ts +21 -1
- package/dist/cjs/cli/oauth-command.js +52 -7
- package/dist/cjs/cli/oauth-command.js.map +1 -1
- package/dist/cjs/cli/ods-command.d.ts +5 -1
- package/dist/cjs/cli/ods-command.js +10 -4
- package/dist/cjs/cli/ods-command.js.map +1 -1
- package/dist/cjs/cli/webdav-command.d.ts +1 -0
- package/dist/cjs/clients/am-api.d.ts +491 -0
- package/dist/cjs/clients/am-api.js +944 -0
- package/dist/cjs/clients/am-api.js.map +1 -0
- package/dist/cjs/clients/am-apiclients-api.generated.d.ts +803 -0
- package/dist/cjs/clients/am-apiclients-api.generated.js +6 -0
- package/dist/cjs/clients/am-apiclients-api.generated.js.map +1 -0
- package/dist/cjs/clients/am-roles-api.generated.d.ts +298 -0
- package/dist/cjs/clients/am-roles-api.generated.js +6 -0
- package/dist/cjs/clients/am-roles-api.generated.js.map +1 -0
- package/dist/cjs/clients/am-users-api.generated.d.ts +891 -0
- package/dist/cjs/clients/am-users-api.generated.js +6 -0
- package/dist/cjs/clients/am-users-api.generated.js.map +1 -0
- package/dist/cjs/clients/index.d.ts +4 -2
- package/dist/cjs/clients/index.js +2 -1
- package/dist/cjs/clients/index.js.map +1 -1
- package/dist/cjs/clients/middleware-registry.d.ts +1 -1
- package/dist/cjs/clients/middleware-registry.js.map +1 -1
- package/dist/cjs/clients/middleware.d.ts +49 -2
- package/dist/cjs/clients/middleware.js +214 -2
- package/dist/cjs/clients/middleware.js.map +1 -1
- package/dist/cjs/clients/mrt.js +5 -1
- package/dist/cjs/clients/mrt.js.map +1 -1
- package/dist/cjs/config/dw-json.d.ts +104 -33
- package/dist/cjs/config/dw-json.js +167 -2
- package/dist/cjs/config/dw-json.js.map +1 -1
- package/dist/cjs/config/index.d.ts +6 -4
- package/dist/cjs/config/index.js +6 -2
- package/dist/cjs/config/index.js.map +1 -1
- package/dist/cjs/config/instance-manager.d.ts +97 -0
- package/dist/cjs/config/instance-manager.js +166 -0
- package/dist/cjs/config/instance-manager.js.map +1 -0
- package/dist/cjs/config/mapping.d.ts +63 -5
- package/dist/cjs/config/mapping.js +165 -20
- package/dist/cjs/config/mapping.js.map +1 -1
- package/dist/cjs/config/sources/dw-json-source.d.ts +17 -1
- package/dist/cjs/config/sources/dw-json-source.js +70 -3
- package/dist/cjs/config/sources/dw-json-source.js.map +1 -1
- package/dist/cjs/config/sources/package-json-source.js +6 -3
- package/dist/cjs/config/sources/package-json-source.js.map +1 -1
- package/dist/cjs/config/types.d.ts +72 -0
- package/dist/cjs/defaults.d.ts +6 -0
- package/dist/cjs/defaults.js +6 -0
- package/dist/cjs/defaults.js.map +1 -1
- package/dist/cjs/i18n/index.js +3 -0
- package/dist/cjs/i18n/index.js.map +1 -1
- package/dist/cjs/index.d.ts +8 -4
- package/dist/cjs/index.js +9 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/logging/logger.js +13 -1
- package/dist/cjs/logging/logger.js.map +1 -1
- package/dist/cjs/operations/content/asset-query.d.ts +22 -0
- package/dist/cjs/operations/content/asset-query.js +77 -0
- package/dist/cjs/operations/content/asset-query.js.map +1 -0
- package/dist/cjs/operations/content/export.d.ts +57 -0
- package/dist/cjs/operations/content/export.js +224 -0
- package/dist/cjs/operations/content/export.js.map +1 -0
- package/dist/cjs/operations/content/index.d.ts +43 -0
- package/dist/cjs/operations/content/index.js +48 -0
- package/dist/cjs/operations/content/index.js.map +1 -0
- package/dist/cjs/operations/content/library.d.ts +137 -0
- package/dist/cjs/operations/content/library.js +392 -0
- package/dist/cjs/operations/content/library.js.map +1 -0
- package/dist/cjs/operations/content/types.d.ts +144 -0
- package/dist/cjs/operations/content/types.js +7 -0
- package/dist/cjs/operations/content/types.js.map +1 -0
- package/dist/cjs/operations/mrt/b2c-config.js +19 -4
- package/dist/cjs/operations/mrt/b2c-config.js.map +1 -1
- package/dist/cjs/operations/mrt/index.d.ts +2 -0
- package/dist/cjs/operations/mrt/index.js +2 -0
- package/dist/cjs/operations/mrt/index.js.map +1 -1
- package/dist/cjs/operations/mrt/tail-logs.d.ts +130 -0
- package/dist/cjs/operations/mrt/tail-logs.js +223 -0
- package/dist/cjs/operations/mrt/tail-logs.js.map +1 -0
- package/dist/cjs/operations/ods/index.d.ts +2 -0
- package/dist/cjs/operations/ods/index.js +1 -0
- package/dist/cjs/operations/ods/index.js.map +1 -1
- package/dist/cjs/operations/ods/wait-for-sandbox.d.ts +64 -0
- package/dist/cjs/operations/ods/wait-for-sandbox.js +114 -0
- package/dist/cjs/operations/ods/wait-for-sandbox.js.map +1 -0
- package/dist/cjs/operations/orgs/index.d.ts +74 -0
- package/dist/cjs/operations/orgs/index.js +33 -0
- package/dist/cjs/operations/orgs/index.js.map +1 -0
- package/dist/cjs/operations/roles/index.d.ts +43 -0
- package/dist/cjs/operations/roles/index.js +48 -0
- package/dist/cjs/operations/roles/index.js.map +1 -0
- package/dist/cjs/operations/users/index.d.ts +143 -0
- package/dist/cjs/operations/users/index.js +141 -0
- package/dist/cjs/operations/users/index.js.map +1 -0
- package/dist/cjs/scaffold/engine.d.ts +68 -0
- package/dist/cjs/scaffold/engine.js +149 -0
- package/dist/cjs/scaffold/engine.js.map +1 -0
- package/dist/cjs/scaffold/executor.d.ts +36 -0
- package/dist/cjs/scaffold/executor.js +285 -0
- package/dist/cjs/scaffold/executor.js.map +1 -0
- package/dist/cjs/scaffold/index.d.ts +74 -0
- package/dist/cjs/scaffold/index.js +23 -0
- package/dist/cjs/scaffold/index.js.map +1 -0
- package/dist/cjs/scaffold/merge.d.ts +56 -0
- package/dist/cjs/scaffold/merge.js +183 -0
- package/dist/cjs/scaffold/merge.js.map +1 -0
- package/dist/cjs/scaffold/parameter-resolver.d.ts +86 -0
- package/dist/cjs/scaffold/parameter-resolver.js +179 -0
- package/dist/cjs/scaffold/parameter-resolver.js.map +1 -0
- package/dist/cjs/scaffold/registry.d.ts +45 -0
- package/dist/cjs/scaffold/registry.js +219 -0
- package/dist/cjs/scaffold/registry.js.map +1 -0
- package/dist/cjs/scaffold/sources.d.ts +45 -0
- package/dist/cjs/scaffold/sources.js +113 -0
- package/dist/cjs/scaffold/sources.js.map +1 -0
- package/dist/cjs/scaffold/types.d.ts +280 -0
- package/dist/cjs/scaffold/types.js +14 -0
- package/dist/cjs/scaffold/types.js.map +1 -0
- package/dist/cjs/scaffold/validation.d.ts +81 -0
- package/dist/cjs/scaffold/validation.js +250 -0
- package/dist/cjs/scaffold/validation.js.map +1 -0
- package/dist/cjs/scaffold/validators.d.ts +33 -0
- package/dist/cjs/scaffold/validators.js +334 -0
- package/dist/cjs/scaffold/validators.js.map +1 -0
- package/dist/cjs/telemetry/index.d.ts +26 -0
- package/dist/cjs/telemetry/index.js +32 -0
- package/dist/cjs/telemetry/index.js.map +1 -0
- package/dist/cjs/telemetry/telemetry.d.ts +90 -0
- package/dist/cjs/telemetry/telemetry.js +283 -0
- package/dist/cjs/telemetry/telemetry.js.map +1 -0
- package/dist/cjs/telemetry/types.d.ts +62 -0
- package/dist/cjs/telemetry/types.js +7 -0
- package/dist/cjs/telemetry/types.js.map +1 -0
- package/dist/esm/auth/oauth-implicit.d.ts +1 -0
- package/dist/esm/auth/oauth-implicit.js +8 -3
- package/dist/esm/auth/oauth-implicit.js.map +1 -1
- package/dist/esm/auth/oauth.d.ts +1 -0
- package/dist/esm/auth/oauth.js +8 -3
- package/dist/esm/auth/oauth.js.map +1 -1
- package/dist/esm/auth/types.d.ts +5 -0
- package/dist/esm/auth/types.js.map +1 -1
- package/dist/esm/cli/am-command.d.ts +74 -0
- package/dist/esm/cli/am-command.js +196 -0
- package/dist/esm/cli/am-command.js.map +1 -0
- package/dist/esm/cli/base-command.d.ts +38 -0
- package/dist/esm/cli/base-command.js +142 -0
- package/dist/esm/cli/base-command.js.map +1 -1
- package/dist/esm/cli/config.d.ts +9 -0
- package/dist/esm/cli/config.js +19 -2
- package/dist/esm/cli/config.js.map +1 -1
- package/dist/esm/cli/index.d.ts +1 -0
- package/dist/esm/cli/index.js +1 -0
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/cli/instance-command.d.ts +1 -0
- package/dist/esm/cli/oauth-command.d.ts +21 -1
- package/dist/esm/cli/oauth-command.js +52 -7
- package/dist/esm/cli/oauth-command.js.map +1 -1
- package/dist/esm/cli/ods-command.d.ts +5 -1
- package/dist/esm/cli/ods-command.js +10 -4
- package/dist/esm/cli/ods-command.js.map +1 -1
- package/dist/esm/cli/webdav-command.d.ts +1 -0
- package/dist/esm/clients/am-api.d.ts +491 -0
- package/dist/esm/clients/am-api.js +944 -0
- package/dist/esm/clients/am-api.js.map +1 -0
- package/dist/esm/clients/am-apiclients-api.generated.d.ts +803 -0
- package/dist/esm/clients/am-apiclients-api.generated.js +6 -0
- package/dist/esm/clients/am-apiclients-api.generated.js.map +1 -0
- package/dist/esm/clients/am-roles-api.generated.d.ts +298 -0
- package/dist/esm/clients/am-roles-api.generated.js +6 -0
- package/dist/esm/clients/am-roles-api.generated.js.map +1 -0
- package/dist/esm/clients/am-users-api.generated.d.ts +891 -0
- package/dist/esm/clients/am-users-api.generated.js +6 -0
- package/dist/esm/clients/am-users-api.generated.js.map +1 -0
- package/dist/esm/clients/index.d.ts +4 -2
- package/dist/esm/clients/index.js +2 -1
- package/dist/esm/clients/index.js.map +1 -1
- package/dist/esm/clients/middleware-registry.d.ts +1 -1
- package/dist/esm/clients/middleware-registry.js.map +1 -1
- package/dist/esm/clients/middleware.d.ts +49 -2
- package/dist/esm/clients/middleware.js +214 -2
- package/dist/esm/clients/middleware.js.map +1 -1
- package/dist/esm/clients/mrt.js +5 -1
- package/dist/esm/clients/mrt.js.map +1 -1
- package/dist/esm/config/dw-json.d.ts +104 -33
- package/dist/esm/config/dw-json.js +167 -2
- package/dist/esm/config/dw-json.js.map +1 -1
- package/dist/esm/config/index.d.ts +6 -4
- package/dist/esm/config/index.js +6 -2
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/config/instance-manager.d.ts +97 -0
- package/dist/esm/config/instance-manager.js +166 -0
- package/dist/esm/config/instance-manager.js.map +1 -0
- package/dist/esm/config/mapping.d.ts +63 -5
- package/dist/esm/config/mapping.js +165 -20
- package/dist/esm/config/mapping.js.map +1 -1
- package/dist/esm/config/sources/dw-json-source.d.ts +17 -1
- package/dist/esm/config/sources/dw-json-source.js +70 -3
- package/dist/esm/config/sources/dw-json-source.js.map +1 -1
- package/dist/esm/config/sources/package-json-source.js +6 -3
- package/dist/esm/config/sources/package-json-source.js.map +1 -1
- package/dist/esm/config/types.d.ts +72 -0
- package/dist/esm/defaults.d.ts +6 -0
- package/dist/esm/defaults.js +6 -0
- package/dist/esm/defaults.js.map +1 -1
- package/dist/esm/i18n/index.js +3 -0
- package/dist/esm/i18n/index.js.map +1 -1
- package/dist/esm/index.d.ts +8 -4
- package/dist/esm/index.js +9 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/logging/logger.js +13 -1
- package/dist/esm/logging/logger.js.map +1 -1
- package/dist/esm/operations/content/asset-query.d.ts +22 -0
- package/dist/esm/operations/content/asset-query.js +77 -0
- package/dist/esm/operations/content/asset-query.js.map +1 -0
- package/dist/esm/operations/content/export.d.ts +57 -0
- package/dist/esm/operations/content/export.js +224 -0
- package/dist/esm/operations/content/export.js.map +1 -0
- package/dist/esm/operations/content/index.d.ts +43 -0
- package/dist/esm/operations/content/index.js +48 -0
- package/dist/esm/operations/content/index.js.map +1 -0
- package/dist/esm/operations/content/library.d.ts +137 -0
- package/dist/esm/operations/content/library.js +392 -0
- package/dist/esm/operations/content/library.js.map +1 -0
- package/dist/esm/operations/content/types.d.ts +144 -0
- package/dist/esm/operations/content/types.js +7 -0
- package/dist/esm/operations/content/types.js.map +1 -0
- package/dist/esm/operations/mrt/b2c-config.js +19 -4
- package/dist/esm/operations/mrt/b2c-config.js.map +1 -1
- package/dist/esm/operations/mrt/index.d.ts +2 -0
- package/dist/esm/operations/mrt/index.js +2 -0
- package/dist/esm/operations/mrt/index.js.map +1 -1
- package/dist/esm/operations/mrt/tail-logs.d.ts +130 -0
- package/dist/esm/operations/mrt/tail-logs.js +223 -0
- package/dist/esm/operations/mrt/tail-logs.js.map +1 -0
- package/dist/esm/operations/ods/index.d.ts +2 -0
- package/dist/esm/operations/ods/index.js +1 -0
- package/dist/esm/operations/ods/index.js.map +1 -1
- package/dist/esm/operations/ods/wait-for-sandbox.d.ts +64 -0
- package/dist/esm/operations/ods/wait-for-sandbox.js +114 -0
- package/dist/esm/operations/ods/wait-for-sandbox.js.map +1 -0
- package/dist/esm/operations/orgs/index.d.ts +74 -0
- package/dist/esm/operations/orgs/index.js +33 -0
- package/dist/esm/operations/orgs/index.js.map +1 -0
- package/dist/esm/operations/roles/index.d.ts +43 -0
- package/dist/esm/operations/roles/index.js +48 -0
- package/dist/esm/operations/roles/index.js.map +1 -0
- package/dist/esm/operations/users/index.d.ts +143 -0
- package/dist/esm/operations/users/index.js +141 -0
- package/dist/esm/operations/users/index.js.map +1 -0
- package/dist/esm/scaffold/engine.d.ts +68 -0
- package/dist/esm/scaffold/engine.js +149 -0
- package/dist/esm/scaffold/engine.js.map +1 -0
- package/dist/esm/scaffold/executor.d.ts +36 -0
- package/dist/esm/scaffold/executor.js +285 -0
- package/dist/esm/scaffold/executor.js.map +1 -0
- package/dist/esm/scaffold/index.d.ts +74 -0
- package/dist/esm/scaffold/index.js +23 -0
- package/dist/esm/scaffold/index.js.map +1 -0
- package/dist/esm/scaffold/merge.d.ts +56 -0
- package/dist/esm/scaffold/merge.js +183 -0
- package/dist/esm/scaffold/merge.js.map +1 -0
- package/dist/esm/scaffold/parameter-resolver.d.ts +86 -0
- package/dist/esm/scaffold/parameter-resolver.js +179 -0
- package/dist/esm/scaffold/parameter-resolver.js.map +1 -0
- package/dist/esm/scaffold/registry.d.ts +45 -0
- package/dist/esm/scaffold/registry.js +219 -0
- package/dist/esm/scaffold/registry.js.map +1 -0
- package/dist/esm/scaffold/sources.d.ts +45 -0
- package/dist/esm/scaffold/sources.js +113 -0
- package/dist/esm/scaffold/sources.js.map +1 -0
- package/dist/esm/scaffold/types.d.ts +280 -0
- package/dist/esm/scaffold/types.js +14 -0
- package/dist/esm/scaffold/types.js.map +1 -0
- package/dist/esm/scaffold/validation.d.ts +81 -0
- package/dist/esm/scaffold/validation.js +250 -0
- package/dist/esm/scaffold/validation.js.map +1 -0
- package/dist/esm/scaffold/validators.d.ts +33 -0
- package/dist/esm/scaffold/validators.js +334 -0
- package/dist/esm/scaffold/validators.js.map +1 -0
- package/dist/esm/telemetry/index.d.ts +26 -0
- package/dist/esm/telemetry/index.js +32 -0
- package/dist/esm/telemetry/index.js.map +1 -0
- package/dist/esm/telemetry/telemetry.d.ts +90 -0
- package/dist/esm/telemetry/telemetry.js +283 -0
- package/dist/esm/telemetry/telemetry.js.map +1 -0
- package/dist/esm/telemetry/types.d.ts +62 -0
- package/dist/esm/telemetry/types.js +7 -0
- package/dist/esm/telemetry/types.js.map +1 -0
- package/package.json +86 -17
- package/specs/am-apiclients-api-v1.yaml +965 -0
- package/specs/am-roles-api-v1.yaml +316 -0
- package/specs/am-users-api-v1.yaml +1102 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { getLogger } from '../../logging/logger.js';
|
|
7
|
+
export class SandboxPollingTimeoutError extends Error {
|
|
8
|
+
sandboxId;
|
|
9
|
+
targetState;
|
|
10
|
+
timeoutSeconds;
|
|
11
|
+
lastState;
|
|
12
|
+
constructor(sandboxId, targetState, timeoutSeconds, lastState) {
|
|
13
|
+
super(`Timeout waiting for sandbox ${sandboxId} to reach state ${targetState} after ${timeoutSeconds} seconds${lastState ? ` (lastState=${lastState})` : ''}`);
|
|
14
|
+
this.sandboxId = sandboxId;
|
|
15
|
+
this.targetState = targetState;
|
|
16
|
+
this.timeoutSeconds = timeoutSeconds;
|
|
17
|
+
this.lastState = lastState;
|
|
18
|
+
this.name = 'SandboxPollingTimeoutError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class SandboxPollingError extends Error {
|
|
22
|
+
sandboxId;
|
|
23
|
+
message;
|
|
24
|
+
constructor(sandboxId, message) {
|
|
25
|
+
super(`Failed to fetch sandbox status for ${sandboxId}: ${message}`);
|
|
26
|
+
this.sandboxId = sandboxId;
|
|
27
|
+
this.message = message;
|
|
28
|
+
this.name = 'SandboxPollingError';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class SandboxTerminalStateError extends Error {
|
|
32
|
+
sandboxId;
|
|
33
|
+
targetState;
|
|
34
|
+
state;
|
|
35
|
+
constructor(sandboxId, targetState, state) {
|
|
36
|
+
super(`Sandbox ${sandboxId} reached terminal state ${state} while waiting for ${targetState}`);
|
|
37
|
+
this.sandboxId = sandboxId;
|
|
38
|
+
this.targetState = targetState;
|
|
39
|
+
this.state = state;
|
|
40
|
+
this.name = 'SandboxTerminalStateError';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function defaultSleep(ms) {
|
|
44
|
+
await new Promise((resolve) => {
|
|
45
|
+
setTimeout(resolve, ms);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Waits for a sandbox to reach a target state by polling its status.
|
|
50
|
+
*
|
|
51
|
+
* This function polls the ODS API at regular intervals until the sandbox reaches the desired state,
|
|
52
|
+
* times out, or enters a terminal error state (failed/deleted).
|
|
53
|
+
*
|
|
54
|
+
* @param client - ODS client for API calls
|
|
55
|
+
* @param options - Polling configuration options
|
|
56
|
+
* @param options.sandboxId - ID of the sandbox to monitor
|
|
57
|
+
* @param options.targetState - Desired sandbox state (e.g., 'started', 'stopped', 'deleted')
|
|
58
|
+
* @param options.pollIntervalSeconds - Seconds between status checks
|
|
59
|
+
* @param options.timeoutSeconds - Maximum seconds to wait (0 = no timeout)
|
|
60
|
+
* @param options.onPoll - Optional callback invoked on each poll with current state
|
|
61
|
+
* @param options.sleep - Optional custom sleep function (primarily for testing)
|
|
62
|
+
*
|
|
63
|
+
* @throws {SandboxPollingTimeoutError} If the timeout is exceeded before reaching target state
|
|
64
|
+
* @throws {SandboxPollingError} If the API request fails
|
|
65
|
+
* @throws {SandboxTerminalStateError} If the sandbox enters a terminal error state
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* await waitForSandbox(odsClient, {
|
|
70
|
+
* sandboxId: 'abc-123',
|
|
71
|
+
* targetState: 'started',
|
|
72
|
+
* pollIntervalSeconds: 5,
|
|
73
|
+
* timeoutSeconds: 300,
|
|
74
|
+
* onPoll: (info) => console.log(`State: ${info.state} (${info.elapsedSeconds}s)`),
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export async function waitForSandbox(client, options) {
|
|
79
|
+
const logger = getLogger();
|
|
80
|
+
const { sandboxId, targetState, pollIntervalSeconds, timeoutSeconds } = options;
|
|
81
|
+
const sleepFn = options.sleep ?? defaultSleep;
|
|
82
|
+
const startTime = Date.now();
|
|
83
|
+
const pollIntervalMs = pollIntervalSeconds * 1000;
|
|
84
|
+
const timeoutMs = timeoutSeconds * 1000;
|
|
85
|
+
await sleepFn(pollIntervalMs);
|
|
86
|
+
let lastState;
|
|
87
|
+
while (true) {
|
|
88
|
+
const elapsedSeconds = Math.round((Date.now() - startTime) / 1000);
|
|
89
|
+
if (timeoutSeconds > 0 && Date.now() - startTime > timeoutMs) {
|
|
90
|
+
throw new SandboxPollingTimeoutError(sandboxId, targetState, timeoutSeconds, lastState);
|
|
91
|
+
}
|
|
92
|
+
const result = await client.GET('/sandboxes/{sandboxId}', {
|
|
93
|
+
params: {
|
|
94
|
+
path: { sandboxId },
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
if (!result.data?.data) {
|
|
98
|
+
throw new SandboxPollingError(sandboxId, result.response?.statusText || 'Unknown error');
|
|
99
|
+
}
|
|
100
|
+
const sandbox = result.data.data;
|
|
101
|
+
const currentState = sandbox.state || 'unknown';
|
|
102
|
+
lastState = currentState;
|
|
103
|
+
logger.trace({ sandboxId, elapsedSeconds, state: currentState }, '[ODS] Sandbox poll');
|
|
104
|
+
options.onPoll?.({ sandboxId, elapsedSeconds, state: currentState });
|
|
105
|
+
if (currentState === targetState) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (currentState === 'failed' || currentState === 'deleted') {
|
|
109
|
+
throw new SandboxTerminalStateError(sandboxId, targetState, currentState);
|
|
110
|
+
}
|
|
111
|
+
await sleepFn(pollIntervalMs);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=wait-for-sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for-sandbox.js","sourceRoot":"","sources":["../../../../src/operations/ods/wait-for-sandbox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAIlD,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAEjC;IACA;IACA;IACA;IAJlB,YACkB,SAAiB,EACjB,WAAyB,EACzB,cAAsB,EACtB,SAAwB;QAExC,KAAK,CACH,+BAA+B,SAAS,mBAAmB,WAAW,UAAU,cAAc,WAC5F,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,GAAG,CAAC,CAAC,CAAC,EAC5C,EAAE,CACH,CAAC;QATc,cAAS,GAAT,SAAS,CAAQ;QACjB,gBAAW,GAAX,WAAW,CAAc;QACzB,mBAAc,GAAd,cAAc,CAAQ;QACtB,cAAS,GAAT,SAAS,CAAe;QAOxC,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAE1B;IACA;IAFlB,YACkB,SAAiB,EACjB,OAAe;QAE/B,KAAK,CAAC,sCAAsC,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;QAHrD,cAAS,GAAT,SAAS,CAAQ;QACjB,YAAO,GAAP,OAAO,CAAQ;QAG/B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAEhC;IACA;IACA;IAHlB,YACkB,SAAiB,EACjB,WAAyB,EACzB,KAAmB;QAEnC,KAAK,CAAC,WAAW,SAAS,2BAA2B,KAAK,sBAAsB,WAAW,EAAE,CAAC,CAAC;QAJ/E,cAAS,GAAT,SAAS,CAAQ;QACjB,gBAAW,GAAX,WAAW,CAAc;QACzB,UAAK,GAAL,KAAK,CAAc;QAGnC,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAiBD,KAAK,UAAU,YAAY,CAAC,EAAU;IACpC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC5B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAiB,EAAE,OAA8B;IACpF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAC,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAC,GAAG,OAAO,CAAC;IAE9E,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,cAAc,GAAG,mBAAmB,GAAG,IAAI,CAAC;IAClD,MAAM,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC;IAExC,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAE9B,IAAI,SAAmC,CAAC;IAExC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QAEnE,IAAI,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;YAC7D,MAAM,IAAI,0BAA0B,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE;YACxD,MAAM,EAAE;gBACN,IAAI,EAAE,EAAC,SAAS,EAAC;aAClB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,eAAe,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,MAAM,YAAY,GAAI,OAAO,CAAC,KAAsB,IAAI,SAAS,CAAC;QAClE,SAAS,GAAG,YAAY,CAAC;QAEzB,MAAM,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAC,EAAE,oBAAoB,CAAC,CAAC;QACrF,OAAO,CAAC,MAAM,EAAE,CAAC,EAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAC,CAAC,CAAC;QAEnE,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,IAAI,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC5D,MAAM,IAAI,yBAAyB,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account Manager organization management operations.
|
|
3
|
+
*
|
|
4
|
+
* This module provides high-level functions for managing organizations in Account Manager,
|
|
5
|
+
* including retrieving organization details.
|
|
6
|
+
*
|
|
7
|
+
* ## Core Organization Functions
|
|
8
|
+
*
|
|
9
|
+
* - {@link getOrg} - Get organization details by ID
|
|
10
|
+
* - {@link getOrgByName} - Get organization details by name
|
|
11
|
+
* - {@link listOrgs} - List organizations with pagination
|
|
12
|
+
*
|
|
13
|
+
* ## Usage
|
|
14
|
+
*
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import {
|
|
17
|
+
* getOrg,
|
|
18
|
+
* getOrgByName,
|
|
19
|
+
* listOrgs,
|
|
20
|
+
* } from '@salesforce/b2c-tooling-sdk/operations/orgs';
|
|
21
|
+
* import {createAccountManagerOrgsClient} from '@salesforce/b2c-tooling-sdk/clients';
|
|
22
|
+
* import {OAuthStrategy} from '@salesforce/b2c-tooling-sdk/auth';
|
|
23
|
+
*
|
|
24
|
+
* const auth = new OAuthStrategy({
|
|
25
|
+
* clientId: 'your-client-id',
|
|
26
|
+
* clientSecret: 'your-client-secret',
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* const client = createAccountManagerOrgsClient({}, auth);
|
|
30
|
+
*
|
|
31
|
+
* // Get an organization by ID
|
|
32
|
+
* const org = await getOrg(client, 'org-id');
|
|
33
|
+
*
|
|
34
|
+
* // Get an organization by name
|
|
35
|
+
* const org = await getOrgByName(client, 'My Organization');
|
|
36
|
+
*
|
|
37
|
+
* // List organizations
|
|
38
|
+
* const orgs = await listOrgs(client, {size: 25, page: 0});
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* ## Authentication
|
|
42
|
+
*
|
|
43
|
+
* Organization operations require OAuth authentication with appropriate Account Manager permissions.
|
|
44
|
+
*
|
|
45
|
+
* @module operations/orgs
|
|
46
|
+
*/
|
|
47
|
+
import type { AccountManagerOrgsClient, AccountManagerOrganization, OrganizationCollection, ListOrgsOptions } from '../../clients/am-api.js';
|
|
48
|
+
export type { AccountManagerOrganization, OrganizationCollection, ListOrgsOptions } from '../../clients/am-api.js';
|
|
49
|
+
/**
|
|
50
|
+
* Gets an organization by ID.
|
|
51
|
+
*
|
|
52
|
+
* @param client - Account Manager Organizations client
|
|
53
|
+
* @param orgId - Organization ID
|
|
54
|
+
* @returns Organization details
|
|
55
|
+
* @throws Error if organization is not found
|
|
56
|
+
*/
|
|
57
|
+
export declare function getOrg(client: AccountManagerOrgsClient, orgId: string): Promise<AccountManagerOrganization>;
|
|
58
|
+
/**
|
|
59
|
+
* Gets an organization by name (searches for exact or partial match).
|
|
60
|
+
*
|
|
61
|
+
* @param client - Account Manager Organizations client
|
|
62
|
+
* @param name - Organization name
|
|
63
|
+
* @returns Organization details
|
|
64
|
+
* @throws Error if organization is not found or ambiguous
|
|
65
|
+
*/
|
|
66
|
+
export declare function getOrgByName(client: AccountManagerOrgsClient, name: string): Promise<AccountManagerOrganization>;
|
|
67
|
+
/**
|
|
68
|
+
* Lists organizations with pagination.
|
|
69
|
+
*
|
|
70
|
+
* @param client - Account Manager Organizations client
|
|
71
|
+
* @param options - List options (size, page, all)
|
|
72
|
+
* @returns Organization collection
|
|
73
|
+
*/
|
|
74
|
+
export declare function listOrgs(client: AccountManagerOrgsClient, options?: ListOrgsOptions): Promise<OrganizationCollection>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gets an organization by ID.
|
|
3
|
+
*
|
|
4
|
+
* @param client - Account Manager Organizations client
|
|
5
|
+
* @param orgId - Organization ID
|
|
6
|
+
* @returns Organization details
|
|
7
|
+
* @throws Error if organization is not found
|
|
8
|
+
*/
|
|
9
|
+
export async function getOrg(client, orgId) {
|
|
10
|
+
return client.getOrg(orgId);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Gets an organization by name (searches for exact or partial match).
|
|
14
|
+
*
|
|
15
|
+
* @param client - Account Manager Organizations client
|
|
16
|
+
* @param name - Organization name
|
|
17
|
+
* @returns Organization details
|
|
18
|
+
* @throws Error if organization is not found or ambiguous
|
|
19
|
+
*/
|
|
20
|
+
export async function getOrgByName(client, name) {
|
|
21
|
+
return client.getOrgByName(name);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Lists organizations with pagination.
|
|
25
|
+
*
|
|
26
|
+
* @param client - Account Manager Organizations client
|
|
27
|
+
* @param options - List options (size, page, all)
|
|
28
|
+
* @returns Organization collection
|
|
29
|
+
*/
|
|
30
|
+
export async function listOrgs(client, options) {
|
|
31
|
+
return client.listOrgs(options);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/operations/orgs/index.ts"],"names":[],"mappings":"AA6DA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,MAAgC,EAAE,KAAa;IAC1E,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAgC,EAChC,IAAY;IAEZ,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAgC,EAChC,OAAyB;IAEzB,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account Manager role management operations.
|
|
3
|
+
*
|
|
4
|
+
* This module provides high-level functions for retrieving role information
|
|
5
|
+
* in Account Manager, including listing roles and getting role details.
|
|
6
|
+
*
|
|
7
|
+
* ## Core Role Functions
|
|
8
|
+
*
|
|
9
|
+
* - {@link getRole} - Get role details by ID
|
|
10
|
+
* - {@link listRoles} - List roles with pagination
|
|
11
|
+
*
|
|
12
|
+
* ## Usage
|
|
13
|
+
*
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import {getRole, listRoles} from '@salesforce/b2c-tooling-sdk/operations/roles';
|
|
16
|
+
* import {createAccountManagerRolesClient} from '@salesforce/b2c-tooling-sdk/clients';
|
|
17
|
+
* import {OAuthStrategy} from '@salesforce/b2c-tooling-sdk/auth';
|
|
18
|
+
*
|
|
19
|
+
* const auth = new OAuthStrategy({
|
|
20
|
+
* clientId: 'your-client-id',
|
|
21
|
+
* clientSecret: 'your-client-secret',
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* const client = createAccountManagerRolesClient({}, auth);
|
|
25
|
+
*
|
|
26
|
+
* // Get a role by ID
|
|
27
|
+
* const role = await getRole(client, 'bm-admin');
|
|
28
|
+
*
|
|
29
|
+
* // List roles
|
|
30
|
+
* const roles = await listRoles(client, {size: 25, page: 0});
|
|
31
|
+
*
|
|
32
|
+
* // List roles filtered by target type
|
|
33
|
+
* const userRoles = await listRoles(client, {size: 25, page: 0, roleTargetType: 'User'});
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* ## Authentication
|
|
37
|
+
*
|
|
38
|
+
* Role operations require OAuth authentication with appropriate Account Manager permissions.
|
|
39
|
+
*
|
|
40
|
+
* @module operations/roles
|
|
41
|
+
*/
|
|
42
|
+
export { getRole, listRoles } from '../../clients/am-api.js';
|
|
43
|
+
export type { AccountManagerRole, RoleCollection, ListRolesOptions } from '../../clients/am-api.js';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Account Manager role management operations.
|
|
8
|
+
*
|
|
9
|
+
* This module provides high-level functions for retrieving role information
|
|
10
|
+
* in Account Manager, including listing roles and getting role details.
|
|
11
|
+
*
|
|
12
|
+
* ## Core Role Functions
|
|
13
|
+
*
|
|
14
|
+
* - {@link getRole} - Get role details by ID
|
|
15
|
+
* - {@link listRoles} - List roles with pagination
|
|
16
|
+
*
|
|
17
|
+
* ## Usage
|
|
18
|
+
*
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import {getRole, listRoles} from '@salesforce/b2c-tooling-sdk/operations/roles';
|
|
21
|
+
* import {createAccountManagerRolesClient} from '@salesforce/b2c-tooling-sdk/clients';
|
|
22
|
+
* import {OAuthStrategy} from '@salesforce/b2c-tooling-sdk/auth';
|
|
23
|
+
*
|
|
24
|
+
* const auth = new OAuthStrategy({
|
|
25
|
+
* clientId: 'your-client-id',
|
|
26
|
+
* clientSecret: 'your-client-secret',
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* const client = createAccountManagerRolesClient({}, auth);
|
|
30
|
+
*
|
|
31
|
+
* // Get a role by ID
|
|
32
|
+
* const role = await getRole(client, 'bm-admin');
|
|
33
|
+
*
|
|
34
|
+
* // List roles
|
|
35
|
+
* const roles = await listRoles(client, {size: 25, page: 0});
|
|
36
|
+
*
|
|
37
|
+
* // List roles filtered by target type
|
|
38
|
+
* const userRoles = await listRoles(client, {size: 25, page: 0, roleTargetType: 'User'});
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* ## Authentication
|
|
42
|
+
*
|
|
43
|
+
* Role operations require OAuth authentication with appropriate Account Manager permissions.
|
|
44
|
+
*
|
|
45
|
+
* @module operations/roles
|
|
46
|
+
*/
|
|
47
|
+
export { getRole, listRoles } from '../../clients/am-api.js';
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/operations/roles/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAC,OAAO,EAAE,SAAS,EAAC,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account Manager user management operations.
|
|
3
|
+
*
|
|
4
|
+
* This module provides high-level functions for managing users in Account Manager,
|
|
5
|
+
* including CRUD operations, role management, and user lifecycle operations.
|
|
6
|
+
*
|
|
7
|
+
* ## Core User Functions
|
|
8
|
+
*
|
|
9
|
+
* - {@link getUser} - Get user details by ID
|
|
10
|
+
* - {@link getUserByLogin} - Get user details by login (email)
|
|
11
|
+
* - {@link listUsers} - List users with pagination
|
|
12
|
+
* - {@link createUser} - Create a new user
|
|
13
|
+
* - {@link updateUser} - Update an existing user
|
|
14
|
+
* - {@link deleteUser} - Disable a user (soft delete)
|
|
15
|
+
* - {@link purgeUser} - Purge a disabled user (hard delete)
|
|
16
|
+
* - {@link resetUser} - Reset a user to INITIAL state
|
|
17
|
+
*
|
|
18
|
+
* ## Usage
|
|
19
|
+
*
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import {
|
|
22
|
+
* getUserByLogin,
|
|
23
|
+
* listUsers,
|
|
24
|
+
* createUser,
|
|
25
|
+
* grantRole,
|
|
26
|
+
* } from '@salesforce/b2c-tooling-sdk/operations/users';
|
|
27
|
+
* import { createAccountManagerUsersClient } from '@salesforce/b2c-tooling-sdk/clients';
|
|
28
|
+
* import { OAuthStrategy } from '@salesforce/b2c-tooling-sdk/auth';
|
|
29
|
+
*
|
|
30
|
+
* const auth = new OAuthStrategy({
|
|
31
|
+
* clientId: 'your-client-id',
|
|
32
|
+
* clientSecret: 'your-client-secret',
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* const client = createAccountManagerUsersClient({}, auth);
|
|
36
|
+
*
|
|
37
|
+
* // Get a user by login
|
|
38
|
+
* const user = await getUserByLogin(client, 'user@example.com');
|
|
39
|
+
*
|
|
40
|
+
* // List users
|
|
41
|
+
* const users = await listUsers(client, { size: 25, page: 0 });
|
|
42
|
+
*
|
|
43
|
+
* // Create a new user
|
|
44
|
+
* const newUser = await createUser(client, {
|
|
45
|
+
* mail: 'newuser@example.com',
|
|
46
|
+
* firstName: 'John',
|
|
47
|
+
* lastName: 'Doe',
|
|
48
|
+
* organizations: ['org-id'],
|
|
49
|
+
* primaryOrganization: 'org-id',
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* ## Authentication
|
|
54
|
+
*
|
|
55
|
+
* User operations require OAuth authentication with appropriate Account Manager permissions.
|
|
56
|
+
*
|
|
57
|
+
* @module operations/users
|
|
58
|
+
*/
|
|
59
|
+
import type { AccountManagerUsersClient, AccountManagerUser, UserCreate, UserUpdate } from '../../clients/am-api.js';
|
|
60
|
+
import { getUser, listUsers, deleteUser, purgeUser, resetUser } from '../../clients/am-api.js';
|
|
61
|
+
/**
|
|
62
|
+
* Options for creating a user.
|
|
63
|
+
*/
|
|
64
|
+
export interface CreateUserOptions {
|
|
65
|
+
/** User details */
|
|
66
|
+
user: UserCreate;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Options for updating a user.
|
|
70
|
+
*/
|
|
71
|
+
export interface UpdateUserOptions {
|
|
72
|
+
/** User ID */
|
|
73
|
+
userId: string;
|
|
74
|
+
/** Changes to apply */
|
|
75
|
+
changes: UserUpdate;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Options for granting a role.
|
|
79
|
+
*/
|
|
80
|
+
export interface GrantRoleOptions {
|
|
81
|
+
/** User ID */
|
|
82
|
+
userId: string;
|
|
83
|
+
/** Role to grant */
|
|
84
|
+
role: string;
|
|
85
|
+
/** Optional scope for the role (tenant IDs, comma-separated) */
|
|
86
|
+
scope?: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Options for revoking a role.
|
|
90
|
+
*/
|
|
91
|
+
export interface RevokeRoleOptions {
|
|
92
|
+
/** User ID */
|
|
93
|
+
userId: string;
|
|
94
|
+
/** Role to revoke */
|
|
95
|
+
role: string;
|
|
96
|
+
/** Optional scope to remove (if not provided, removes entire role) */
|
|
97
|
+
scope?: string;
|
|
98
|
+
}
|
|
99
|
+
export { getUser, listUsers, deleteUser, purgeUser, resetUser };
|
|
100
|
+
/**
|
|
101
|
+
* Retrieves details of a user by login (email).
|
|
102
|
+
* This searches through paginated results to find the user.
|
|
103
|
+
*
|
|
104
|
+
* @param client - Account Manager client
|
|
105
|
+
* @param login - User login (email)
|
|
106
|
+
* @returns User details
|
|
107
|
+
* @throws Error if user is not found
|
|
108
|
+
*/
|
|
109
|
+
export declare function getUserByLogin(client: AccountManagerUsersClient, login: string): Promise<AccountManagerUser>;
|
|
110
|
+
/**
|
|
111
|
+
* Creates a new user.
|
|
112
|
+
*
|
|
113
|
+
* @param client - Account Manager client
|
|
114
|
+
* @param options - Create options (user details)
|
|
115
|
+
* @returns Created user
|
|
116
|
+
*/
|
|
117
|
+
export declare function createUser(client: AccountManagerUsersClient, options: CreateUserOptions): Promise<AccountManagerUser>;
|
|
118
|
+
/**
|
|
119
|
+
* Updates an existing user.
|
|
120
|
+
*
|
|
121
|
+
* @param client - Account Manager client
|
|
122
|
+
* @param options - Update options (userId, changes)
|
|
123
|
+
* @returns Updated user
|
|
124
|
+
*/
|
|
125
|
+
export declare function updateUser(client: AccountManagerUsersClient, options: UpdateUserOptions): Promise<AccountManagerUser>;
|
|
126
|
+
/**
|
|
127
|
+
* Grants a role to a user, optionally with scope.
|
|
128
|
+
* This updates the user's roles and roleTenantFilter.
|
|
129
|
+
*
|
|
130
|
+
* @param client - Account Manager client
|
|
131
|
+
* @param options - Grant options (userId, role, optional scope)
|
|
132
|
+
* @returns Updated user
|
|
133
|
+
*/
|
|
134
|
+
export declare function grantRole(client: AccountManagerUsersClient, options: GrantRoleOptions): Promise<AccountManagerUser>;
|
|
135
|
+
/**
|
|
136
|
+
* Revokes a role from a user, optionally removing specific scope.
|
|
137
|
+
*
|
|
138
|
+
* @param client - Account Manager client
|
|
139
|
+
* @param options - Revoke options (userId, role, optional scope)
|
|
140
|
+
* @returns Updated user
|
|
141
|
+
*/
|
|
142
|
+
export declare function revokeRole(client: AccountManagerUsersClient, options: RevokeRoleOptions): Promise<AccountManagerUser>;
|
|
143
|
+
export type { AccountManagerUser, UserCreate, UserUpdate, UserCollection } from '../../clients/am-api.js';
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { getUser, listUsers, createUser as createUserApi, updateUser as updateUserApi, deleteUser, purgeUser, resetUser, findUserByLogin, } from '../../clients/am-api.js';
|
|
2
|
+
// Re-export primary API operations from client
|
|
3
|
+
export { getUser, listUsers, deleteUser, purgeUser, resetUser };
|
|
4
|
+
/**
|
|
5
|
+
* Retrieves details of a user by login (email).
|
|
6
|
+
* This searches through paginated results to find the user.
|
|
7
|
+
*
|
|
8
|
+
* @param client - Account Manager client
|
|
9
|
+
* @param login - User login (email)
|
|
10
|
+
* @returns User details
|
|
11
|
+
* @throws Error if user is not found
|
|
12
|
+
*/
|
|
13
|
+
export async function getUserByLogin(client, login) {
|
|
14
|
+
const user = await findUserByLogin(client, login);
|
|
15
|
+
if (!user) {
|
|
16
|
+
throw new Error(`User ${login} not found`);
|
|
17
|
+
}
|
|
18
|
+
return user;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new user.
|
|
22
|
+
*
|
|
23
|
+
* @param client - Account Manager client
|
|
24
|
+
* @param options - Create options (user details)
|
|
25
|
+
* @returns Created user
|
|
26
|
+
*/
|
|
27
|
+
export async function createUser(client, options) {
|
|
28
|
+
return createUserApi(client, options.user);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Updates an existing user.
|
|
32
|
+
*
|
|
33
|
+
* @param client - Account Manager client
|
|
34
|
+
* @param options - Update options (userId, changes)
|
|
35
|
+
* @returns Updated user
|
|
36
|
+
*/
|
|
37
|
+
export async function updateUser(client, options) {
|
|
38
|
+
return updateUserApi(client, options.userId, options.changes);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Grants a role to a user, optionally with scope.
|
|
42
|
+
* This updates the user's roles and roleTenantFilter.
|
|
43
|
+
*
|
|
44
|
+
* @param client - Account Manager client
|
|
45
|
+
* @param options - Grant options (userId, role, optional scope)
|
|
46
|
+
* @returns Updated user
|
|
47
|
+
*/
|
|
48
|
+
export async function grantRole(client, options) {
|
|
49
|
+
// First get the current user
|
|
50
|
+
const user = await getUser(client, options.userId);
|
|
51
|
+
// Build updated roles
|
|
52
|
+
const currentRoles = Array.isArray(user.roles)
|
|
53
|
+
? user.roles.map((r) => (typeof r === 'string' ? r : r.roleEnumName || ''))
|
|
54
|
+
: [];
|
|
55
|
+
const updatedRoles = currentRoles.includes(options.role) ? currentRoles : [...currentRoles, options.role];
|
|
56
|
+
// Build updated roleTenantFilter
|
|
57
|
+
let roleTenantFilter = user.roleTenantFilter || '';
|
|
58
|
+
if (options.scope) {
|
|
59
|
+
const scopes = options.scope.split(',');
|
|
60
|
+
// Parse existing filter
|
|
61
|
+
const filters = roleTenantFilter.split(';').filter(Boolean);
|
|
62
|
+
const filterMap = new Map();
|
|
63
|
+
for (const filter of filters) {
|
|
64
|
+
const [role, tenants] = filter.split(':');
|
|
65
|
+
if (tenants) {
|
|
66
|
+
filterMap.set(role, tenants.split(','));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Add new scopes
|
|
70
|
+
const existingScopes = filterMap.get(options.role) || [];
|
|
71
|
+
const allScopes = [...new Set([...existingScopes, ...scopes])];
|
|
72
|
+
filterMap.set(options.role, allScopes);
|
|
73
|
+
// Rebuild filter string
|
|
74
|
+
roleTenantFilter = Array.from(filterMap.entries())
|
|
75
|
+
.map(([role, tenants]) => `${role}:${tenants.join(',')}`)
|
|
76
|
+
.join(';');
|
|
77
|
+
}
|
|
78
|
+
return updateUser(client, {
|
|
79
|
+
userId: options.userId,
|
|
80
|
+
changes: {
|
|
81
|
+
roles: updatedRoles,
|
|
82
|
+
roleTenantFilter: roleTenantFilter || undefined,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Revokes a role from a user, optionally removing specific scope.
|
|
88
|
+
*
|
|
89
|
+
* @param client - Account Manager client
|
|
90
|
+
* @param options - Revoke options (userId, role, optional scope)
|
|
91
|
+
* @returns Updated user
|
|
92
|
+
*/
|
|
93
|
+
export async function revokeRole(client, options) {
|
|
94
|
+
// First get the current user
|
|
95
|
+
const user = await getUser(client, options.userId);
|
|
96
|
+
// Build updated roles
|
|
97
|
+
const currentRoles = Array.isArray(user.roles)
|
|
98
|
+
? user.roles.map((r) => (typeof r === 'string' ? r : r.roleEnumName || ''))
|
|
99
|
+
: [];
|
|
100
|
+
let updatedRoles = currentRoles;
|
|
101
|
+
// Build updated roleTenantFilter
|
|
102
|
+
let roleTenantFilter = user.roleTenantFilter || '';
|
|
103
|
+
if (!options.scope) {
|
|
104
|
+
// Remove entire role
|
|
105
|
+
updatedRoles = currentRoles.filter((r) => r !== options.role);
|
|
106
|
+
// Remove all scopes for this role
|
|
107
|
+
const filters = roleTenantFilter.split(';').filter(Boolean);
|
|
108
|
+
roleTenantFilter = filters.filter((f) => !f.startsWith(`${options.role}:`)).join(';');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Remove specific scope
|
|
112
|
+
const scopes = options.scope.split(',');
|
|
113
|
+
const filters = roleTenantFilter.split(';').filter(Boolean);
|
|
114
|
+
const filterMap = new Map();
|
|
115
|
+
for (const filter of filters) {
|
|
116
|
+
const [role, tenants] = filter.split(':');
|
|
117
|
+
if (tenants) {
|
|
118
|
+
filterMap.set(role, tenants.split(','));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const existingScopes = filterMap.get(options.role) || [];
|
|
122
|
+
const updatedScopes = existingScopes.filter((s) => !scopes.includes(s));
|
|
123
|
+
if (updatedScopes.length > 0) {
|
|
124
|
+
filterMap.set(options.role, updatedScopes);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
filterMap.delete(options.role);
|
|
128
|
+
}
|
|
129
|
+
roleTenantFilter = Array.from(filterMap.entries())
|
|
130
|
+
.map(([role, tenants]) => `${role}:${tenants.join(',')}`)
|
|
131
|
+
.join(';');
|
|
132
|
+
}
|
|
133
|
+
return updateUser(client, {
|
|
134
|
+
userId: options.userId,
|
|
135
|
+
changes: {
|
|
136
|
+
roles: updatedRoles.length > 0 ? updatedRoles : undefined,
|
|
137
|
+
roleTenantFilter: roleTenantFilter || undefined,
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/operations/users/index.ts"],"names":[],"mappings":"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"}
|