@salesforce/b2c-tooling-sdk 1.24.2 → 2.0.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/data/content-schemas/componenttype.json +0 -30
- package/data/scapi-snippets/campaign-promotions.js +40 -0
- package/data/scapi-snippets/code-version-inspect.js +31 -0
- package/data/scapi-snippets/create-product.js +108 -0
- package/data/scapi-snippets/failed-job-triage.js +37 -0
- package/data/scapi-snippets/job-execution-inspect.js +52 -0
- package/data/scapi-snippets/job-execution-review.js +46 -0
- package/data/scapi-snippets/manifest.json +220 -0
- package/data/scapi-snippets/site-cartridge-inspect.js +27 -0
- package/data/tooling/index.json +80 -116
- package/dist/esm/auth/index.d.ts +2 -2
- package/dist/esm/auth/index.js +1 -1
- package/dist/esm/auth/index.js.map +1 -1
- package/dist/esm/auth/oauth-implicit.d.ts +1 -0
- package/dist/esm/auth/oauth-implicit.js +1 -0
- package/dist/esm/auth/oauth-implicit.js.map +1 -1
- package/dist/esm/auth/oauth-jwt.d.ts +18 -4
- package/dist/esm/auth/oauth-jwt.js +67 -17
- package/dist/esm/auth/oauth-jwt.js.map +1 -1
- package/dist/esm/auth/oauth-pkce-fallback.d.ts +1 -0
- package/dist/esm/auth/oauth-pkce-fallback.js +1 -0
- package/dist/esm/auth/oauth-pkce-fallback.js.map +1 -1
- package/dist/esm/auth/oauth-pkce.d.ts +1 -0
- package/dist/esm/auth/oauth-pkce.js +1 -0
- package/dist/esm/auth/oauth-pkce.js.map +1 -1
- package/dist/esm/auth/oauth.d.ts +55 -6
- package/dist/esm/auth/oauth.js +139 -21
- package/dist/esm/auth/oauth.js.map +1 -1
- package/dist/esm/auth/resolve.d.ts +37 -0
- package/dist/esm/auth/resolve.js +48 -0
- package/dist/esm/auth/resolve.js.map +1 -1
- package/dist/esm/auth/types.d.ts +44 -0
- package/dist/esm/auth/types.js.map +1 -1
- package/dist/esm/cli/base-command.d.ts +9 -0
- package/dist/esm/cli/base-command.js +31 -0
- package/dist/esm/cli/base-command.js.map +1 -1
- package/dist/esm/cli/bm-command.d.ts +15 -0
- package/dist/esm/cli/bm-command.js +25 -0
- package/dist/esm/cli/bm-command.js.map +1 -0
- package/dist/esm/cli/code-command.d.ts +14 -0
- package/dist/esm/cli/code-command.js +22 -0
- package/dist/esm/cli/code-command.js.map +1 -0
- package/dist/esm/cli/config.js +3 -0
- package/dist/esm/cli/config.js.map +1 -1
- package/dist/esm/cli/index.d.ts +5 -1
- package/dist/esm/cli/index.js +7 -1
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/cli/instance-command.d.ts +45 -0
- package/dist/esm/cli/instance-command.js +66 -1
- package/dist/esm/cli/instance-command.js.map +1 -1
- package/dist/esm/cli/job-command.d.ts +37 -16
- package/dist/esm/cli/job-command.js +73 -23
- package/dist/esm/cli/job-command.js.map +1 -1
- package/dist/esm/cli/mrt-command.d.ts +138 -9
- package/dist/esm/cli/mrt-command.js +277 -16
- package/dist/esm/cli/mrt-command.js.map +1 -1
- package/dist/esm/cli/oauth-command.d.ts +1 -1
- package/dist/esm/cli/oauth-command.js +2 -0
- package/dist/esm/cli/oauth-command.js.map +1 -1
- package/dist/esm/cli/webdav-command.d.ts +1 -0
- package/dist/esm/clients/cdn-zones.js +2 -5
- package/dist/esm/clients/cdn-zones.js.map +1 -1
- package/dist/esm/clients/cip.d.ts +12 -3
- package/dist/esm/clients/cip.js +85 -30
- package/dist/esm/clients/cip.js.map +1 -1
- package/dist/esm/clients/custom-apis.js +2 -5
- package/dist/esm/clients/custom-apis.js.map +1 -1
- package/dist/esm/clients/dual-backend-factory.d.ts +70 -0
- package/dist/esm/clients/dual-backend-factory.js +48 -0
- package/dist/esm/clients/dual-backend-factory.js.map +1 -0
- package/dist/esm/clients/error-utils.d.ts +62 -0
- package/dist/esm/clients/error-utils.js +98 -0
- package/dist/esm/clients/error-utils.js.map +1 -1
- package/dist/esm/clients/granular-replications.js +2 -5
- package/dist/esm/clients/granular-replications.js.map +1 -1
- package/dist/esm/clients/index.d.ts +28 -3
- package/dist/esm/clients/index.js +24 -2
- package/dist/esm/clients/index.js.map +1 -1
- package/dist/esm/clients/metrics.js +2 -5
- package/dist/esm/clients/metrics.js.map +1 -1
- package/dist/esm/clients/middleware-registry.d.ts +4 -2
- package/dist/esm/clients/middleware-registry.js +3 -1
- package/dist/esm/clients/middleware-registry.js.map +1 -1
- package/dist/esm/clients/middleware.d.ts +39 -0
- package/dist/esm/clients/middleware.js +126 -25
- package/dist/esm/clients/middleware.js.map +1 -1
- package/dist/esm/clients/mrt-b2c.js +3 -0
- package/dist/esm/clients/mrt-b2c.js.map +1 -1
- package/dist/esm/clients/mrt.d.ts +27 -10
- package/dist/esm/clients/mrt.generated.d.ts +77 -0
- package/dist/esm/clients/mrt.js +68 -0
- package/dist/esm/clients/mrt.js.map +1 -1
- package/dist/esm/clients/preferences.js +2 -5
- package/dist/esm/clients/preferences.js.map +1 -1
- package/dist/esm/clients/scapi-backend-utils.d.ts +163 -0
- package/dist/esm/clients/scapi-backend-utils.js +180 -0
- package/dist/esm/clients/scapi-backend-utils.js.map +1 -0
- package/dist/esm/clients/scapi-catalogs.d.ts +12 -0
- package/dist/esm/clients/scapi-catalogs.generated.d.ts +104 -0
- package/dist/esm/clients/scapi-catalogs.generated.js +6 -0
- package/dist/esm/clients/scapi-catalogs.generated.js.map +1 -0
- package/dist/esm/clients/scapi-catalogs.js +14 -0
- package/dist/esm/clients/scapi-catalogs.js.map +1 -0
- package/dist/esm/clients/scapi-client-factory.d.ts +81 -0
- package/dist/esm/clients/scapi-client-factory.js +84 -0
- package/dist/esm/clients/scapi-client-factory.js.map +1 -0
- package/dist/esm/clients/scapi-fallback-backend.d.ts +34 -0
- package/dist/esm/clients/scapi-fallback-backend.js +132 -0
- package/dist/esm/clients/scapi-fallback-backend.js.map +1 -0
- package/dist/esm/clients/scapi-jobs.d.ts +32 -0
- package/dist/esm/clients/scapi-jobs.generated.d.ts +535 -0
- package/dist/esm/clients/scapi-jobs.generated.js +6 -0
- package/dist/esm/clients/scapi-jobs.generated.js.map +1 -0
- package/dist/esm/clients/scapi-jobs.js +24 -0
- package/dist/esm/clients/scapi-jobs.js.map +1 -0
- package/dist/esm/clients/scapi-merchant-roles.d.ts +19 -0
- package/dist/esm/clients/scapi-merchant-roles.generated.d.ts +726 -0
- package/dist/esm/clients/scapi-merchant-roles.generated.js +6 -0
- package/dist/esm/clients/scapi-merchant-roles.generated.js.map +1 -0
- package/dist/esm/clients/scapi-merchant-roles.js +12 -0
- package/dist/esm/clients/scapi-merchant-roles.js.map +1 -0
- package/dist/esm/clients/scapi-merchant-users.d.ts +19 -0
- package/dist/esm/clients/scapi-merchant-users.generated.d.ts +300 -0
- package/dist/esm/clients/scapi-merchant-users.generated.js +6 -0
- package/dist/esm/clients/scapi-merchant-users.generated.js.map +1 -0
- package/dist/esm/clients/scapi-merchant-users.js +12 -0
- package/dist/esm/clients/scapi-merchant-users.js.map +1 -0
- package/dist/esm/clients/scapi-schemas.js +2 -5
- package/dist/esm/clients/scapi-schemas.js.map +1 -1
- package/dist/esm/clients/scapi-scope-tier.d.ts +78 -0
- package/dist/esm/clients/scapi-scope-tier.js +113 -0
- package/dist/esm/clients/scapi-scope-tier.js.map +1 -0
- package/dist/esm/clients/scapi-scripts.d.ts +17 -0
- package/dist/esm/clients/scapi-scripts.generated.d.ts +392 -0
- package/dist/esm/clients/scapi-scripts.generated.js +6 -0
- package/dist/esm/clients/scapi-scripts.generated.js.map +1 -0
- package/dist/esm/clients/scapi-scripts.js +12 -0
- package/dist/esm/clients/scapi-scripts.js.map +1 -0
- package/dist/esm/clients/scapi-sites.d.ts +26 -0
- package/dist/esm/clients/scapi-sites.generated.d.ts +500 -0
- package/dist/esm/clients/scapi-sites.generated.js +6 -0
- package/dist/esm/clients/scapi-sites.generated.js.map +1 -0
- package/dist/esm/clients/scapi-sites.js +25 -0
- package/dist/esm/clients/scapi-sites.js.map +1 -0
- package/dist/esm/clients/slas-shopper.d.ts +19 -0
- package/dist/esm/clients/slas-shopper.generated.d.ts +165 -0
- package/dist/esm/clients/slas-shopper.generated.js +6 -0
- package/dist/esm/clients/slas-shopper.generated.js.map +1 -0
- package/dist/esm/clients/slas-shopper.js +35 -0
- package/dist/esm/clients/slas-shopper.js.map +1 -0
- package/dist/esm/clients/storefront-deployments.d.ts +56 -0
- package/dist/esm/clients/storefront-deployments.generated.d.ts +558 -0
- package/dist/esm/clients/storefront-deployments.generated.js +6 -0
- package/dist/esm/clients/storefront-deployments.generated.js.map +1 -0
- package/dist/esm/clients/storefront-deployments.js +24 -0
- package/dist/esm/clients/storefront-deployments.js.map +1 -0
- package/dist/esm/clients/webdav.js +4 -1
- package/dist/esm/clients/webdav.js.map +1 -1
- package/dist/esm/compat/dispatcher.d.ts +49 -0
- package/dist/esm/compat/dispatcher.js +124 -0
- package/dist/esm/compat/dispatcher.js.map +1 -0
- package/dist/esm/compat/index.d.ts +10 -0
- package/dist/esm/compat/index.js +15 -0
- package/dist/esm/compat/index.js.map +1 -0
- package/dist/esm/compat/jobs-backend.d.ts +31 -0
- package/dist/esm/compat/jobs-backend.js +76 -0
- package/dist/esm/compat/jobs-backend.js.map +1 -0
- package/dist/esm/config/dw-json.d.ts +4 -0
- package/dist/esm/config/dw-json.js.map +1 -1
- package/dist/esm/config/index.d.ts +1 -1
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/config/mapping.d.ts +2 -5
- package/dist/esm/config/mapping.js +25 -1
- package/dist/esm/config/mapping.js.map +1 -1
- package/dist/esm/config/resolved-config.d.ts +2 -2
- package/dist/esm/config/resolved-config.js.map +1 -1
- package/dist/esm/config/sources/env-source.js +17 -0
- package/dist/esm/config/sources/env-source.js.map +1 -1
- package/dist/esm/config/types.d.ts +21 -2
- package/dist/esm/docs/search.js +2 -25
- package/dist/esm/docs/search.js.map +1 -1
- package/dist/esm/guidance/catalog.d.ts +37 -0
- package/dist/esm/guidance/catalog.js +282 -0
- package/dist/esm/guidance/catalog.js.map +1 -0
- package/dist/esm/guidance/index.d.ts +8 -0
- package/dist/esm/guidance/index.js +14 -0
- package/dist/esm/guidance/index.js.map +1 -0
- package/dist/esm/guidance/markdown.d.ts +10 -0
- package/dist/esm/guidance/markdown.js +52 -0
- package/dist/esm/guidance/markdown.js.map +1 -0
- package/dist/esm/guidance/types.d.ts +92 -0
- package/dist/esm/guidance/types.js +17 -0
- package/dist/esm/guidance/types.js.map +1 -0
- package/dist/esm/index.d.ts +14 -5
- package/dist/esm/index.js +14 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instance/index.d.ts +96 -2
- package/dist/esm/instance/index.js +98 -5
- package/dist/esm/instance/index.js.map +1 -1
- package/dist/esm/operations/bm-roles/backend.d.ts +4 -0
- package/dist/esm/operations/bm-roles/backend.js +11 -0
- package/dist/esm/operations/bm-roles/backend.js.map +1 -0
- package/dist/esm/operations/bm-roles/index.d.ts +6 -0
- package/dist/esm/operations/bm-roles/index.js +4 -0
- package/dist/esm/operations/bm-roles/index.js.map +1 -1
- package/dist/esm/operations/bm-roles/ocapi-backend.d.ts +17 -0
- package/dist/esm/operations/bm-roles/ocapi-backend.js +151 -0
- package/dist/esm/operations/bm-roles/ocapi-backend.js.map +1 -0
- package/dist/esm/operations/bm-roles/roles.js +13 -17
- package/dist/esm/operations/bm-roles/roles.js.map +1 -1
- package/dist/esm/operations/bm-roles/scapi-backend.d.ts +27 -0
- package/dist/esm/operations/bm-roles/scapi-backend.js +138 -0
- package/dist/esm/operations/bm-roles/scapi-backend.js.map +1 -0
- package/dist/esm/operations/bm-roles/types.d.ts +49 -0
- package/dist/esm/operations/bm-roles/types.js +2 -0
- package/dist/esm/operations/bm-roles/types.js.map +1 -0
- package/dist/esm/operations/bm-users/backend.d.ts +4 -0
- package/dist/esm/operations/bm-users/backend.js +11 -0
- package/dist/esm/operations/bm-users/backend.js.map +1 -0
- package/dist/esm/operations/bm-users/index.d.ts +11 -3
- package/dist/esm/operations/bm-users/index.js +9 -3
- package/dist/esm/operations/bm-users/index.js.map +1 -1
- package/dist/esm/operations/bm-users/ocapi-backend.d.ts +13 -0
- package/dist/esm/operations/bm-users/ocapi-backend.js +92 -0
- package/dist/esm/operations/bm-users/ocapi-backend.js.map +1 -0
- package/dist/esm/operations/bm-users/scapi-backend.d.ts +23 -0
- package/dist/esm/operations/bm-users/scapi-backend.js +199 -0
- package/dist/esm/operations/bm-users/scapi-backend.js.map +1 -0
- package/dist/esm/operations/bm-users/types.d.ts +99 -0
- package/dist/esm/operations/bm-users/types.js +2 -0
- package/dist/esm/operations/bm-users/types.js.map +1 -0
- package/dist/esm/operations/bm-users/users.d.ts +4 -3
- package/dist/esm/operations/bm-users/users.js +23 -19
- package/dist/esm/operations/bm-users/users.js.map +1 -1
- package/dist/esm/operations/cap/install.js +23 -45
- package/dist/esm/operations/cap/install.js.map +1 -1
- package/dist/esm/operations/cap/list.js +4 -8
- package/dist/esm/operations/cap/list.js.map +1 -1
- package/dist/esm/operations/cap/uninstall.js +17 -37
- package/dist/esm/operations/cap/uninstall.js.map +1 -1
- package/dist/esm/operations/catalogs/catalogs-backend.d.ts +4 -0
- package/dist/esm/operations/catalogs/catalogs-backend.js +16 -0
- package/dist/esm/operations/catalogs/catalogs-backend.js.map +1 -0
- package/dist/esm/operations/catalogs/catalogs-types.d.ts +14 -0
- package/dist/esm/operations/catalogs/catalogs-types.js +2 -0
- package/dist/esm/operations/catalogs/catalogs-types.js.map +1 -0
- package/dist/esm/operations/catalogs/index.d.ts +7 -0
- package/dist/esm/operations/catalogs/index.js +10 -0
- package/dist/esm/operations/catalogs/index.js.map +1 -0
- package/dist/esm/operations/catalogs/ocapi-catalogs-backend.d.ts +8 -0
- package/dist/esm/operations/catalogs/ocapi-catalogs-backend.js +36 -0
- package/dist/esm/operations/catalogs/ocapi-catalogs-backend.js.map +1 -0
- package/dist/esm/operations/catalogs/scapi-catalogs-backend.d.ts +15 -0
- package/dist/esm/operations/catalogs/scapi-catalogs-backend.js +42 -0
- package/dist/esm/operations/catalogs/scapi-catalogs-backend.js.map +1 -0
- package/dist/esm/operations/cip/index.js +10 -2
- package/dist/esm/operations/cip/index.js.map +1 -1
- package/dist/esm/operations/cip/reports.js +19 -3
- package/dist/esm/operations/cip/reports.js.map +1 -1
- package/dist/esm/operations/cip/types.d.ts +8 -4
- package/dist/esm/operations/code/deploy.d.ts +3 -0
- package/dist/esm/operations/code/deploy.js +5 -3
- package/dist/esm/operations/code/deploy.js.map +1 -1
- package/dist/esm/operations/code/download.d.ts +3 -0
- package/dist/esm/operations/code/download.js +5 -5
- package/dist/esm/operations/code/download.js.map +1 -1
- package/dist/esm/operations/code/index.d.ts +7 -1
- package/dist/esm/operations/code/index.js +5 -1
- package/dist/esm/operations/code/index.js.map +1 -1
- package/dist/esm/operations/code/ocapi-scripts-backend.d.ts +12 -0
- package/dist/esm/operations/code/ocapi-scripts-backend.js +40 -0
- package/dist/esm/operations/code/ocapi-scripts-backend.js.map +1 -0
- package/dist/esm/operations/code/scapi-scripts-backend.d.ts +22 -0
- package/dist/esm/operations/code/scapi-scripts-backend.js +94 -0
- package/dist/esm/operations/code/scapi-scripts-backend.js.map +1 -0
- package/dist/esm/operations/code/scripts-backend.d.ts +17 -0
- package/dist/esm/operations/code/scripts-backend.js +40 -0
- package/dist/esm/operations/code/scripts-backend.js.map +1 -0
- package/dist/esm/operations/code/scripts-types.d.ts +43 -0
- package/dist/esm/operations/code/scripts-types.js +2 -0
- package/dist/esm/operations/code/scripts-types.js.map +1 -0
- package/dist/esm/operations/code/upload-files.d.ts +6 -0
- package/dist/esm/operations/code/upload-files.js +58 -7
- package/dist/esm/operations/code/upload-files.js.map +1 -1
- package/dist/esm/operations/code/versions.d.ts +0 -20
- package/dist/esm/operations/code/versions.js +16 -51
- package/dist/esm/operations/code/versions.js.map +1 -1
- package/dist/esm/operations/code/watch.d.ts +3 -0
- package/dist/esm/operations/code/watch.js +3 -2
- package/dist/esm/operations/code/watch.js.map +1 -1
- package/dist/esm/operations/jobs/discover.d.ts +1 -1
- package/dist/esm/operations/jobs/discover.js +51 -21
- package/dist/esm/operations/jobs/discover.js.map +1 -1
- package/dist/esm/operations/jobs/index.d.ts +14 -57
- package/dist/esm/operations/jobs/index.js +15 -59
- package/dist/esm/operations/jobs/index.js.map +1 -1
- package/dist/esm/operations/jobs/ocapi-mapping.d.ts +34 -0
- package/dist/esm/operations/jobs/ocapi-mapping.js +100 -0
- package/dist/esm/operations/jobs/ocapi-mapping.js.map +1 -0
- package/dist/esm/operations/jobs/run-system-job.d.ts +81 -0
- package/dist/esm/operations/jobs/run-system-job.js +137 -0
- package/dist/esm/operations/jobs/run-system-job.js.map +1 -0
- package/dist/esm/operations/jobs/run.js +16 -4
- package/dist/esm/operations/jobs/run.js.map +1 -1
- package/dist/esm/operations/jobs/scapi-ops.d.ts +61 -0
- package/dist/esm/operations/jobs/scapi-ops.js +214 -0
- package/dist/esm/operations/jobs/scapi-ops.js.map +1 -0
- package/dist/esm/operations/jobs/site-archive.js +28 -66
- package/dist/esm/operations/jobs/site-archive.js.map +1 -1
- package/dist/esm/operations/jobs/types.d.ts +46 -0
- package/dist/esm/operations/jobs/types.js +2 -0
- package/dist/esm/operations/jobs/types.js.map +1 -0
- package/dist/esm/operations/jobs/wait-canonical.d.ts +28 -0
- package/dist/esm/operations/jobs/wait-canonical.js +48 -0
- package/dist/esm/operations/jobs/wait-canonical.js.map +1 -0
- package/dist/esm/operations/mrt/bundle.d.ts +164 -2
- package/dist/esm/operations/mrt/bundle.js +315 -9
- package/dist/esm/operations/mrt/bundle.js.map +1 -1
- package/dist/esm/operations/mrt/deployment.d.ts +221 -0
- package/dist/esm/operations/mrt/deployment.js +239 -0
- package/dist/esm/operations/mrt/deployment.js.map +1 -1
- package/dist/esm/operations/mrt/index.d.ts +8 -6
- package/dist/esm/operations/mrt/index.js +5 -3
- package/dist/esm/operations/mrt/index.js.map +1 -1
- package/dist/esm/operations/mrt/mrt-backend.d.ts +117 -0
- package/dist/esm/operations/mrt/mrt-backend.js +84 -0
- package/dist/esm/operations/mrt/mrt-backend.js.map +1 -0
- package/dist/esm/operations/mrt/push.d.ts +83 -1
- package/dist/esm/operations/mrt/push.js +102 -1
- package/dist/esm/operations/mrt/push.js.map +1 -1
- package/dist/esm/operations/sites/cartridges.d.ts +10 -8
- package/dist/esm/operations/sites/cartridges.js +35 -67
- package/dist/esm/operations/sites/cartridges.js.map +1 -1
- package/dist/esm/operations/sites/index.d.ts +10 -6
- package/dist/esm/operations/sites/index.js +9 -6
- package/dist/esm/operations/sites/index.js.map +1 -1
- package/dist/esm/operations/sites/ocapi-sites-backend.d.ts +20 -0
- package/dist/esm/operations/sites/ocapi-sites-backend.js +98 -0
- package/dist/esm/operations/sites/ocapi-sites-backend.js.map +1 -0
- package/dist/esm/operations/sites/scapi-sites-backend.d.ts +33 -0
- package/dist/esm/operations/sites/scapi-sites-backend.js +166 -0
- package/dist/esm/operations/sites/scapi-sites-backend.js.map +1 -0
- package/dist/esm/operations/sites/sites-backend.d.ts +9 -0
- package/dist/esm/operations/sites/sites-backend.js +16 -0
- package/dist/esm/operations/sites/sites-backend.js.map +1 -0
- package/dist/esm/operations/sites/sites-scopes.d.ts +2 -0
- package/dist/esm/operations/sites/sites-scopes.js +16 -0
- package/dist/esm/operations/sites/sites-scopes.js.map +1 -0
- package/dist/esm/operations/sites/sites-types.d.ts +50 -0
- package/dist/esm/operations/sites/sites-types.js +2 -0
- package/dist/esm/operations/sites/sites-types.js.map +1 -0
- package/dist/esm/safety/safety-middleware.d.ts +7 -3
- package/dist/esm/safety/safety-middleware.js +13 -9
- package/dist/esm/safety/safety-middleware.js.map +1 -1
- package/dist/esm/scaffold/sources.js +6 -9
- package/dist/esm/scaffold/sources.js.map +1 -1
- package/dist/esm/scapi/auth-primitives.d.ts +3 -0
- package/dist/esm/scapi/auth-primitives.js +104 -0
- package/dist/esm/scapi/auth-primitives.js.map +1 -0
- package/dist/esm/scapi/authentication.d.ts +30 -0
- package/dist/esm/scapi/authentication.js +136 -0
- package/dist/esm/scapi/authentication.js.map +1 -0
- package/dist/esm/scapi/catalog.d.ts +29 -0
- package/dist/esm/scapi/catalog.js +81 -0
- package/dist/esm/scapi/catalog.js.map +1 -0
- package/dist/esm/scapi/index.d.ts +12 -0
- package/dist/esm/scapi/index.js +13 -0
- package/dist/esm/scapi/index.js.map +1 -0
- package/dist/esm/scapi/request.d.ts +15 -0
- package/dist/esm/scapi/request.js +239 -0
- package/dist/esm/scapi/request.js.map +1 -0
- package/dist/esm/scapi/runtime.d.ts +20 -0
- package/dist/esm/scapi/runtime.js +131 -0
- package/dist/esm/scapi/runtime.js.map +1 -0
- package/dist/esm/scapi/snippets.d.ts +22 -0
- package/dist/esm/scapi/snippets.js +140 -0
- package/dist/esm/scapi/snippets.js.map +1 -0
- package/dist/esm/scapi/worker-source.d.ts +2 -0
- package/dist/esm/scapi/worker-source.js +101 -0
- package/dist/esm/scapi/worker-source.js.map +1 -0
- package/dist/esm/search/ranking.d.ts +12 -0
- package/dist/esm/search/ranking.js +28 -0
- package/dist/esm/search/ranking.js.map +1 -0
- package/dist/esm/skills/sources.d.ts +2 -2
- package/dist/esm/skills/sources.js +10 -2
- package/dist/esm/skills/sources.js.map +1 -1
- package/dist/esm/skills/types.d.ts +1 -1
- package/dist/esm/slas/token.js +33 -94
- package/dist/esm/slas/token.js.map +1 -1
- package/dist/esm/slas/types.d.ts +5 -0
- package/node_modules/@salesforce/b2c-api-schemas/README.md +23 -0
- package/node_modules/@salesforce/b2c-api-schemas/manifest.json +576 -0
- package/node_modules/@salesforce/b2c-api-schemas/package.json +15 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/cdn/zones/v1.json +11490 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/orders/v1.json +3589 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-baskets/v1.json +6544 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-baskets/v2.json +7148 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-orders/v1.json +4411 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-payments/v1.json +643 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/cors/v1.json +295 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/preferences/v1.json +2036 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/shopper-configurations/v1.json +327 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/timeouts/v1.json +234 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/custom-object/custom-objects/v1.json +1542 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/custom-object/shopper-custom-objects/v1.json +405 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/customer/customers/v1.json +2531 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/customer/shopper-customers/v1.json +7944 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/custom-apis/v1.json +292 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/object-definitions/v1.json +2537 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/scapi-schemas/v1.json +517 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/scripts/v1.json +589 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/experience/experiences/v1.json +3600 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/experience/shopper-experience/v1.json +2319 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/intelligence/analytics/v1.json +658 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/availability/v1.json +2649 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/impex/v1.json +6615 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/reservation/v1.json +2103 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/merchant/roles/v1.json +1760 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/merchant/users/v1.json +640 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/observability/metrics/v1.json +1263 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/operation/jobs/v1.json +1259 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/operation/replications/v1.json +760 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/assignments/v1.json +1047 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/campaigns/v1.json +1929 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/coupons/v1.json +1542 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/gift-certificates/v1.json +1093 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/promotions/v1.json +1324 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/shopper-gift-certificates/v1.json +325 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/shopper-promotions/v1.json +631 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/source-code-groups/v1.json +1036 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/product/catalogs/v1.json +5175 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/product/inventory-lists/v1.json +866 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/product/price-books/v1.json +747 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/product/products/v1.json +5076 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-availability/v1.json +509 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-delivery-estimates/v1.json +517 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-products/v1.json +2961 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/search/shopper-search/v1.json +1889 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/auth/v1.json +7014 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/auth-admin/v1.json +1898 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/consents/v1.json +622 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-agents/v1.json +192 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-consents/v1.json +913 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-context/v1.json +630 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/site/seo/v1.json +223 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/site/shopper-seo/v1.json +423 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/site/sites/v1.json +1088 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/store/shopper-stores/v1.json +798 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/store/store-redirect-mappings/v1.json +607 -0
- package/node_modules/@salesforce/b2c-api-schemas/scapi/store/stores/v1.json +1418 -0
- package/package.json +24 -3
- package/specs/dx-scripts-v1.yaml +409 -0
- package/specs/merchant-roles-v1.yaml +1085 -0
- package/specs/merchant-users-v1.yaml +398 -0
- package/specs/mrt-api-v1.json +105 -0
- package/specs/operations-jobs-v1.yaml +793 -0
- package/specs/product-catalogs-v1.yaml +111 -0
- package/specs/site-sites-v1.yaml +667 -0
- package/specs/slas-shopper-v1.yaml +83 -0
- package/specs/storefront-deployments-v1.yaml +630 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { isOcapiDeprecatedFault, OcapiDeprecatedError } from '../../clients/error-utils.js';
|
|
2
|
+
import { isFallbackTrigger, scapiUnavailableMessage } from '../../clients/scapi-backend-utils.js';
|
|
3
|
+
import { createScapiJobsClient } from '../../clients/scapi-jobs.js';
|
|
4
|
+
import { getLogger } from '../../logging/logger.js';
|
|
5
|
+
import { mapCanonicalToOcapiExecution } from './ocapi-mapping.js';
|
|
6
|
+
import { executeJob as scapiExecuteJob, getJobExecution as scapiGetJobExecution } from './scapi-ops.js';
|
|
7
|
+
import { waitForJob, JobExecutionError } from './run.js';
|
|
8
|
+
import { waitForJobExecution, CanonicalJobExecutionError } from './wait-canonical.js';
|
|
9
|
+
/**
|
|
10
|
+
* Decides whether a SCAPI start failure is provably safe to fall back to OCAPI
|
|
11
|
+
* for. Safe cases guarantee no job was created:
|
|
12
|
+
* - `invalid_scope`: Account Manager rejected the scope during
|
|
13
|
+
* token acquisition — thrown before the job POST is ever sent.
|
|
14
|
+
* - a SCAPI capability error: a purely local rejection.
|
|
15
|
+
* - a typed SCAPI start error whose HTTP status is a client-side rejection
|
|
16
|
+
* (the server refused before starting the job).
|
|
17
|
+
*
|
|
18
|
+
* Everything else — a network/timeout error (which may have reached the server
|
|
19
|
+
* with the job now running), a 5xx, or a 429 — is ambiguous and must NOT
|
|
20
|
+
* trigger an OCAPI re-run of a mutating job.
|
|
21
|
+
*/
|
|
22
|
+
function isSafeStartFallback(error) {
|
|
23
|
+
return isFallbackTrigger(error);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Starts a system job (waiting for completion unless `spec.wait === false`)
|
|
27
|
+
* and returns the raw OCAPI {@link JobExecution}. Throws {@link JobExecutionError}
|
|
28
|
+
* (raw) when the job fails, or {@link OcapiDeprecatedError} when the only
|
|
29
|
+
* reachable backend is a deprecated OCAPI.
|
|
30
|
+
*/
|
|
31
|
+
export async function runSystemJob(instance, spec) {
|
|
32
|
+
const preference = instance.apiBackend;
|
|
33
|
+
const scapiConfig = instance.scapiClientConfig;
|
|
34
|
+
if (preference === 'ocapi') {
|
|
35
|
+
return runOcapiSystemJob(instance, spec);
|
|
36
|
+
}
|
|
37
|
+
if (preference === 'scapi') {
|
|
38
|
+
if (!scapiConfig) {
|
|
39
|
+
// Domain label (not the job ID) so the message reads "Jobs SCAPI
|
|
40
|
+
// backend requires…", consistent with resolveScapiOrOcapi.
|
|
41
|
+
throw new Error(scapiUnavailableMessage('Jobs'));
|
|
42
|
+
}
|
|
43
|
+
return runScapiSystemJob(instance, scapiConfig, spec);
|
|
44
|
+
}
|
|
45
|
+
// auto
|
|
46
|
+
if (!scapiConfig) {
|
|
47
|
+
return runOcapiSystemJob(instance, spec);
|
|
48
|
+
}
|
|
49
|
+
// Try SCAPI start; fall back to OCAPI only for a provably-safe start failure
|
|
50
|
+
// (see isSafeStartFallback). Once started, finishScapiJob handles wait/failure
|
|
51
|
+
// without falling back.
|
|
52
|
+
const client = createScapiJobsClient({ shortCode: scapiConfig.shortCode, tenantId: scapiConfig.tenantId }, scapiConfig.auth);
|
|
53
|
+
let started;
|
|
54
|
+
try {
|
|
55
|
+
started = await startScapiJob(client, scapiConfig.tenantId, spec);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
// Fall back to OCAPI ONLY when the SCAPI start provably created no job.
|
|
59
|
+
// An ambiguous failure (network drop after dispatch, timeout, 5xx) must
|
|
60
|
+
// propagate — re-running a mutating system job over OCAPI could execute it
|
|
61
|
+
// twice.
|
|
62
|
+
if (!isSafeStartFallback(error)) {
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
getLogger().info({ jobId: spec.jobId, reason: error instanceof Error ? error.message : String(error) }, `SCAPI ${spec.jobId} start rejected, falling back to OCAPI`);
|
|
66
|
+
return runOcapiSystemJob(instance, spec);
|
|
67
|
+
}
|
|
68
|
+
return finishScapiJob(client, scapiConfig.tenantId, spec, started);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* SCAPI path: trigger the job (start phase, fallback-eligible in auto) then
|
|
72
|
+
* wait/map (finish phase, never falls back).
|
|
73
|
+
*/
|
|
74
|
+
async function runScapiSystemJob(instance, scapiConfig, spec) {
|
|
75
|
+
const client = createScapiJobsClient({ shortCode: scapiConfig.shortCode, tenantId: scapiConfig.tenantId }, scapiConfig.auth);
|
|
76
|
+
const started = await startScapiJob(client, scapiConfig.tenantId, spec);
|
|
77
|
+
return finishScapiJob(client, scapiConfig.tenantId, spec, started);
|
|
78
|
+
}
|
|
79
|
+
async function startScapiJob(client, tenantId, spec) {
|
|
80
|
+
return scapiExecuteJob(client, spec.jobId, { body: spec.body, tenantId });
|
|
81
|
+
}
|
|
82
|
+
async function finishScapiJob(client, tenantId, spec, started) {
|
|
83
|
+
if (spec.wait === false) {
|
|
84
|
+
return mapCanonicalToOcapiExecution(started);
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const final = await waitForJobExecution((jobId, executionId) => scapiGetJobExecution(client, jobId, executionId, tenantId), spec.jobId, started.id, spec.waitOptions);
|
|
88
|
+
return mapCanonicalToOcapiExecution(final);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
// Re-throw a job FAILURE as the raw JobExecutionError so callers' existing
|
|
92
|
+
// log-fetch handling works identically across backends. Other errors
|
|
93
|
+
// (timeout, network) propagate as-is — never fall back post-start.
|
|
94
|
+
if (error instanceof CanonicalJobExecutionError) {
|
|
95
|
+
throw new JobExecutionError(error.message, mapCanonicalToOcapiExecution(error.execution));
|
|
96
|
+
}
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* OCAPI path: preserves the legacy behavior exactly — POST the shorthand body,
|
|
102
|
+
* retry with the parameters body on `UnknownPropertyException`, then wait.
|
|
103
|
+
*/
|
|
104
|
+
async function runOcapiSystemJob(instance, spec) {
|
|
105
|
+
let execution;
|
|
106
|
+
const { data, error } = await instance.ocapi.POST('/jobs/{job_id}/executions', {
|
|
107
|
+
params: { path: { job_id: spec.jobId } },
|
|
108
|
+
body: spec.body,
|
|
109
|
+
});
|
|
110
|
+
if (error?.fault?.type === 'UnknownPropertyException' &&
|
|
111
|
+
error.fault.arguments?.document === 'job_execution_request') {
|
|
112
|
+
// Retry with parameters format (internal/support users)
|
|
113
|
+
const { data: retryData, error: retryError } = await instance.ocapi.POST('/jobs/{job_id}/executions', {
|
|
114
|
+
params: { path: { job_id: spec.jobId } },
|
|
115
|
+
body: { parameters: spec.parameters },
|
|
116
|
+
});
|
|
117
|
+
if (retryError || !retryData) {
|
|
118
|
+
if (isOcapiDeprecatedFault(retryError))
|
|
119
|
+
throw new OcapiDeprecatedError({ cause: retryError, requiredScopes: spec.deprecatedScopes });
|
|
120
|
+
throw new Error(retryError?.fault?.message ?? `Failed to ${spec.failVerb}`, { cause: retryError });
|
|
121
|
+
}
|
|
122
|
+
execution = retryData;
|
|
123
|
+
}
|
|
124
|
+
else if (error || !data) {
|
|
125
|
+
if (isOcapiDeprecatedFault(error))
|
|
126
|
+
throw new OcapiDeprecatedError({ cause: error, requiredScopes: spec.deprecatedScopes });
|
|
127
|
+
throw new Error(error?.fault?.message ?? `Failed to ${spec.failVerb}`, { cause: error });
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
execution = data;
|
|
131
|
+
}
|
|
132
|
+
if (spec.wait === false) {
|
|
133
|
+
return execution;
|
|
134
|
+
}
|
|
135
|
+
return waitForJob(instance, spec.jobId, execution.id, spec.waitOptions);
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=run-system-job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-system-job.js","sourceRoot":"","sources":["../../../../src/operations/jobs/run-system-job.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,14 @@
|
|
|
9
9
|
* Provides functions for executing and monitoring jobs on B2C Commerce instances.
|
|
10
10
|
*/
|
|
11
11
|
import { B2CInstance } from '../../instance/index.js';
|
|
12
|
-
import { getApiErrorMessage } from '../../clients/error-utils.js';
|
|
12
|
+
import { isOcapiDeprecatedFault, OcapiDeprecatedError, getApiErrorMessage } from '../../clients/error-utils.js';
|
|
13
|
+
import { SCAPI_JOBS_CASCADE } from '../../clients/scapi-jobs.js';
|
|
13
14
|
import { getLogger } from '../../logging/logger.js';
|
|
15
|
+
// SCAPI Jobs scopes named in the OCAPI-deprecation message, derived from the
|
|
16
|
+
// canonical cascade so they can't drift. Reads accept either tier; writes
|
|
17
|
+
// (execute) require the rw scope.
|
|
18
|
+
const JOBS_READ_SCOPES = [...new Set(SCAPI_JOBS_CASCADE.read.flat())];
|
|
19
|
+
const JOBS_RW_SCOPES = [...new Set(SCAPI_JOBS_CASCADE.write.flat())];
|
|
14
20
|
/**
|
|
15
21
|
* Executes a job on a B2C Commerce instance.
|
|
16
22
|
*
|
|
@@ -79,8 +85,10 @@ export async function executeJob(instance, jobId, options = {}) {
|
|
|
79
85
|
}
|
|
80
86
|
}
|
|
81
87
|
if (error || !data) {
|
|
88
|
+
if (isOcapiDeprecatedFault(error))
|
|
89
|
+
throw new OcapiDeprecatedError({ cause: error, requiredScopes: JOBS_RW_SCOPES });
|
|
82
90
|
const message = error?.fault?.message ?? `Failed to execute job ${jobId}`;
|
|
83
|
-
throw new Error(message);
|
|
91
|
+
throw new Error(message, { cause: error });
|
|
84
92
|
}
|
|
85
93
|
logger.debug({ jobId, executionId: data.id, status: data.execution_status }, `Job ${jobId} started: ${data.id}`);
|
|
86
94
|
return data;
|
|
@@ -105,8 +113,10 @@ export async function getJobExecution(instance, jobId, executionId) {
|
|
|
105
113
|
params: { path: { job_id: jobId, id: executionId } },
|
|
106
114
|
});
|
|
107
115
|
if (error || !data) {
|
|
116
|
+
if (isOcapiDeprecatedFault(error))
|
|
117
|
+
throw new OcapiDeprecatedError({ cause: error, requiredScopes: JOBS_READ_SCOPES });
|
|
108
118
|
const message = error?.fault?.message ?? `Failed to get job execution ${executionId}`;
|
|
109
|
-
throw new Error(message);
|
|
119
|
+
throw new Error(message, { cause: error });
|
|
110
120
|
}
|
|
111
121
|
return data;
|
|
112
122
|
}
|
|
@@ -257,8 +267,10 @@ export async function searchJobExecutions(instance, options = {}) {
|
|
|
257
267
|
},
|
|
258
268
|
});
|
|
259
269
|
if (error || !data) {
|
|
270
|
+
if (isOcapiDeprecatedFault(error))
|
|
271
|
+
throw new OcapiDeprecatedError({ cause: error, requiredScopes: JOBS_READ_SCOPES });
|
|
260
272
|
const message = error && response ? getApiErrorMessage(error, response) : (error?.fault?.message ?? 'Unknown error');
|
|
261
|
-
throw new Error(`Failed to search job executions: ${message}
|
|
273
|
+
throw new Error(`Failed to search job executions: ${message}`, { cause: error });
|
|
262
274
|
}
|
|
263
275
|
return {
|
|
264
276
|
total: data.total ?? 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/operations/jobs/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;GAIG;AACH,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/operations/jobs/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SCAPI Jobs operations.
|
|
3
|
+
*
|
|
4
|
+
* Free functions over a {@link ScapiJobsClient}. Each operation declares its
|
|
5
|
+
* scope tier (`read` or `write`) via the `x-b2c-scope-mode` header; the
|
|
6
|
+
* auth middleware on the client reads that header and resolves the
|
|
7
|
+
* appropriate scope cascade against Account Manager.
|
|
8
|
+
*
|
|
9
|
+
* SDK consumers (or the CLI dispatcher in auto/scapi mode) call these
|
|
10
|
+
* directly. This is the future primary surface for jobs once OCAPI is
|
|
11
|
+
* deprecated.
|
|
12
|
+
*
|
|
13
|
+
* @module operations/jobs/scapi-ops
|
|
14
|
+
*/
|
|
15
|
+
import type { B2CInstance } from '../../instance/index.js';
|
|
16
|
+
import { ScapiRequestError } from '../../clients/scapi-backend-utils.js';
|
|
17
|
+
import { type ScapiJobsClient } from '../../clients/scapi-jobs.js';
|
|
18
|
+
import type { ExecuteJobOptions, SearchJobExecutionsOptions } from './run.js';
|
|
19
|
+
import type { JobExecutionInfo, JobExecutionSearchResults } from './types.js';
|
|
20
|
+
/**
|
|
21
|
+
* Thrown by {@link executeJob} when the SCAPI job-start POST is rejected with
|
|
22
|
+
* a response (non-2xx). Carries the received HTTP status so callers can tell a
|
|
23
|
+
* *request rejection* (server refused before starting the job — safe to treat
|
|
24
|
+
* as "no job created") from an ambiguous failure.
|
|
25
|
+
*
|
|
26
|
+
* A network/timeout error during the POST does NOT produce this — it surfaces
|
|
27
|
+
* as a raw thrown error with no status, because the request may have reached
|
|
28
|
+
* the server and the job may already be running.
|
|
29
|
+
*/
|
|
30
|
+
export declare class ScapiJobStartError extends ScapiRequestError {
|
|
31
|
+
/** HTTP status of the rejection response. */
|
|
32
|
+
readonly status: number;
|
|
33
|
+
constructor(message: string,
|
|
34
|
+
/** HTTP status of the rejection response. */
|
|
35
|
+
status: number);
|
|
36
|
+
}
|
|
37
|
+
export interface ExecuteJobScapiOptions extends ExecuteJobOptions {
|
|
38
|
+
/** Tenant ID for organization path param. Required. */
|
|
39
|
+
tenantId: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Execute a job. Requires the rw scope (no ro fallback for writes).
|
|
43
|
+
*
|
|
44
|
+
* If the job is already running and `waitForRunning` is not `false`, polls
|
|
45
|
+
* until the prior run reaches a terminal state, then retries.
|
|
46
|
+
*/
|
|
47
|
+
export declare function executeJob(client: ScapiJobsClient, jobId: string, options: ExecuteJobScapiOptions): Promise<JobExecutionInfo>;
|
|
48
|
+
export declare function getJobExecution(client: ScapiJobsClient, jobId: string, executionId: string, tenantId: string): Promise<JobExecutionInfo>;
|
|
49
|
+
export interface SearchJobExecutionsScapiOptions extends SearchJobExecutionsOptions {
|
|
50
|
+
/** Tenant ID for organization path param. Required. */
|
|
51
|
+
tenantId: string;
|
|
52
|
+
}
|
|
53
|
+
export declare function searchJobExecutions(client: ScapiJobsClient, options: SearchJobExecutionsScapiOptions): Promise<JobExecutionSearchResults>;
|
|
54
|
+
export declare function deleteJobExecution(client: ScapiJobsClient, jobId: string, executionId: string, tenantId: string): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Retrieves a job's log file content over WebDAV. Both backends
|
|
57
|
+
* (SCAPI and OCAPI) expose `logFilePath` under `/Sites/LOGS/...`; WebDAV is
|
|
58
|
+
* shared, so this lives in jobs/scapi-ops.ts only as a convenience for SDK
|
|
59
|
+
* consumers building purely against SCAPI ops.
|
|
60
|
+
*/
|
|
61
|
+
export declare function getJobLog(instance: B2CInstance, execution: JobExecutionInfo): Promise<string>;
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { createScapiRequestError, ScapiRequestError } from '../../clients/scapi-backend-utils.js';
|
|
2
|
+
import { SCOPE_MODE_HEADER } from '../../clients/middleware.js';
|
|
3
|
+
import { toOrganizationId, } from '../../clients/scapi-jobs.js';
|
|
4
|
+
import { getLogger } from '../../logging/logger.js';
|
|
5
|
+
const READ_HEADERS = { [SCOPE_MODE_HEADER]: 'read' };
|
|
6
|
+
const WRITE_HEADERS = { [SCOPE_MODE_HEADER]: 'write' };
|
|
7
|
+
/**
|
|
8
|
+
* Thrown by {@link executeJob} when the SCAPI job-start POST is rejected with
|
|
9
|
+
* a response (non-2xx). Carries the received HTTP status so callers can tell a
|
|
10
|
+
* *request rejection* (server refused before starting the job — safe to treat
|
|
11
|
+
* as "no job created") from an ambiguous failure.
|
|
12
|
+
*
|
|
13
|
+
* A network/timeout error during the POST does NOT produce this — it surfaces
|
|
14
|
+
* as a raw thrown error with no status, because the request may have reached
|
|
15
|
+
* the server and the job may already be running.
|
|
16
|
+
*/
|
|
17
|
+
export class ScapiJobStartError extends ScapiRequestError {
|
|
18
|
+
status;
|
|
19
|
+
constructor(message,
|
|
20
|
+
/** HTTP status of the rejection response. */
|
|
21
|
+
status) {
|
|
22
|
+
super(message, status);
|
|
23
|
+
this.status = status;
|
|
24
|
+
this.name = 'ScapiJobStartError';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function mapStepExecution(step) {
|
|
28
|
+
return {
|
|
29
|
+
id: step.id,
|
|
30
|
+
stepId: step.stepId,
|
|
31
|
+
executionStatus: step.executionStatus,
|
|
32
|
+
exitStatus: step.exitStatus
|
|
33
|
+
? {
|
|
34
|
+
code: step.exitStatus.code ?? '',
|
|
35
|
+
message: step.exitStatus.message,
|
|
36
|
+
status: step.exitStatus.status,
|
|
37
|
+
}
|
|
38
|
+
: undefined,
|
|
39
|
+
duration: step.duration,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function mapScapiExecution(scapi) {
|
|
43
|
+
return {
|
|
44
|
+
id: scapi.id,
|
|
45
|
+
jobId: scapi.jobId,
|
|
46
|
+
executionStatus: (scapi.executionStatus ?? 'unknown'),
|
|
47
|
+
exitStatus: scapi.exitStatus
|
|
48
|
+
? {
|
|
49
|
+
code: scapi.exitStatus.code ?? '',
|
|
50
|
+
message: scapi.exitStatus.message,
|
|
51
|
+
status: scapi.exitStatus.status,
|
|
52
|
+
}
|
|
53
|
+
: undefined,
|
|
54
|
+
startTime: scapi.startTime,
|
|
55
|
+
endTime: scapi.endTime,
|
|
56
|
+
duration: scapi.duration,
|
|
57
|
+
stepExecutions: scapi.stepExecutions?.map(mapStepExecution),
|
|
58
|
+
logFilePath: scapi.logFilePath,
|
|
59
|
+
isLogFileExisting: scapi.isLogFileExisting,
|
|
60
|
+
parameters: scapi.parameters,
|
|
61
|
+
_raw: scapi,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Execute a job. Requires the rw scope (no ro fallback for writes).
|
|
66
|
+
*
|
|
67
|
+
* If the job is already running and `waitForRunning` is not `false`, polls
|
|
68
|
+
* until the prior run reaches a terminal state, then retries.
|
|
69
|
+
*/
|
|
70
|
+
export async function executeJob(client, jobId, options) {
|
|
71
|
+
const organizationId = toOrganizationId(options.tenantId);
|
|
72
|
+
const { parameters = [], body: rawBody } = options;
|
|
73
|
+
let requestBody;
|
|
74
|
+
if (rawBody) {
|
|
75
|
+
requestBody = rawBody;
|
|
76
|
+
}
|
|
77
|
+
else if (parameters.length > 0) {
|
|
78
|
+
requestBody = { parameters };
|
|
79
|
+
}
|
|
80
|
+
const { data, error, response } = await client.POST('/organizations/{organizationId}/jobs/{jobId}/executions', {
|
|
81
|
+
params: { path: { organizationId, jobId } },
|
|
82
|
+
headers: WRITE_HEADERS,
|
|
83
|
+
body: requestBody,
|
|
84
|
+
});
|
|
85
|
+
if (response.status === 400) {
|
|
86
|
+
const errorBody = error;
|
|
87
|
+
if (errorBody?.type?.includes('job-already-running') || errorBody?.title === 'Job Already Running') {
|
|
88
|
+
if (options.waitForRunning !== false) {
|
|
89
|
+
getLogger().warn({ jobId }, `Job ${jobId} already running, waiting for it to finish...`);
|
|
90
|
+
const running = await findRunningExecution(client, jobId, options.tenantId);
|
|
91
|
+
if (running) {
|
|
92
|
+
await waitForTerminal(client, jobId, running.id, options.tenantId);
|
|
93
|
+
}
|
|
94
|
+
return executeJob(client, jobId, { ...options, waitForRunning: false });
|
|
95
|
+
}
|
|
96
|
+
throw new Error(`Job ${jobId} is already running`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (error || !data) {
|
|
100
|
+
const errorBody = error;
|
|
101
|
+
const message = errorBody?.detail ?? errorBody?.title ?? `Failed to execute job ${jobId}`;
|
|
102
|
+
// A received (non-2xx) response means the server refused the start — carry
|
|
103
|
+
// the status so callers can classify request-rejection vs ambiguous.
|
|
104
|
+
throw new ScapiJobStartError(message, response.status);
|
|
105
|
+
}
|
|
106
|
+
return mapScapiExecution(data);
|
|
107
|
+
}
|
|
108
|
+
export async function getJobExecution(client, jobId, executionId, tenantId) {
|
|
109
|
+
const organizationId = toOrganizationId(tenantId);
|
|
110
|
+
const { data, error, response } = await client.GET('/organizations/{organizationId}/jobs/{jobId}/executions/{executionId}', {
|
|
111
|
+
params: { path: { organizationId, jobId, executionId } },
|
|
112
|
+
headers: READ_HEADERS,
|
|
113
|
+
});
|
|
114
|
+
if (error || !data) {
|
|
115
|
+
throw createScapiRequestError(error, response, `Failed to get job execution ${executionId}`);
|
|
116
|
+
}
|
|
117
|
+
return mapScapiExecution(data);
|
|
118
|
+
}
|
|
119
|
+
export async function searchJobExecutions(client, options) {
|
|
120
|
+
const organizationId = toOrganizationId(options.tenantId);
|
|
121
|
+
const { jobId, status, count = 25, start = 0, sortBy = 'start_time', sortOrder = 'desc' } = options;
|
|
122
|
+
// The SCAPI search DSL uses camelCase wrapper names (`termQuery`, `boolQuery`),
|
|
123
|
+
// but the underlying searchable/sortable field names on this endpoint are
|
|
124
|
+
// the legacy OCAPI snake_case identifiers (`job_id`, `status`, `start_time`).
|
|
125
|
+
// Don't rename these to camelCase to "match the response schema" — the
|
|
126
|
+
// request side wouldn't match anything. See scapi-ops.test.ts.
|
|
127
|
+
const queries = [];
|
|
128
|
+
if (jobId) {
|
|
129
|
+
queries.push({ termQuery: { fields: ['job_id'], operator: 'is', values: [jobId] } });
|
|
130
|
+
}
|
|
131
|
+
if (status) {
|
|
132
|
+
const statusValues = Array.isArray(status) ? status : [status];
|
|
133
|
+
queries.push({ termQuery: { fields: ['status'], operator: 'one_of', values: statusValues } });
|
|
134
|
+
}
|
|
135
|
+
let query;
|
|
136
|
+
if (queries.length === 0) {
|
|
137
|
+
query = { matchAllQuery: {} };
|
|
138
|
+
}
|
|
139
|
+
else if (queries.length === 1) {
|
|
140
|
+
query = queries[0];
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
query = { boolQuery: { must: queries } };
|
|
144
|
+
}
|
|
145
|
+
const { data, error, response } = await client.POST('/organizations/{organizationId}/job-execution-search', {
|
|
146
|
+
params: { path: { organizationId } },
|
|
147
|
+
headers: READ_HEADERS,
|
|
148
|
+
body: {
|
|
149
|
+
query,
|
|
150
|
+
limit: count,
|
|
151
|
+
offset: start,
|
|
152
|
+
sorts: [{ field: sortBy, sortOrder }],
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
if (error || !data) {
|
|
156
|
+
throw createScapiRequestError(error, response, 'Failed to search job executions');
|
|
157
|
+
}
|
|
158
|
+
const result = data;
|
|
159
|
+
return {
|
|
160
|
+
total: result.total ?? 0,
|
|
161
|
+
limit: result.limit ?? count,
|
|
162
|
+
offset: result.offset ?? start,
|
|
163
|
+
hits: (result.hits ?? []).map(mapScapiExecution),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
export async function deleteJobExecution(client, jobId, executionId, tenantId) {
|
|
167
|
+
const organizationId = toOrganizationId(tenantId);
|
|
168
|
+
const { error, response } = await client.DELETE('/organizations/{organizationId}/jobs/{jobId}/executions/{executionId}', {
|
|
169
|
+
params: { path: { organizationId, jobId, executionId } },
|
|
170
|
+
headers: WRITE_HEADERS,
|
|
171
|
+
});
|
|
172
|
+
if (error) {
|
|
173
|
+
throw createScapiRequestError(error, response, `Failed to delete job execution ${executionId}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Retrieves a job's log file content over WebDAV. Both backends
|
|
178
|
+
* (SCAPI and OCAPI) expose `logFilePath` under `/Sites/LOGS/...`; WebDAV is
|
|
179
|
+
* shared, so this lives in jobs/scapi-ops.ts only as a convenience for SDK
|
|
180
|
+
* consumers building purely against SCAPI ops.
|
|
181
|
+
*/
|
|
182
|
+
export async function getJobLog(instance, execution) {
|
|
183
|
+
if (!execution.logFilePath) {
|
|
184
|
+
throw new Error('No log file path available');
|
|
185
|
+
}
|
|
186
|
+
if (!execution.isLogFileExisting) {
|
|
187
|
+
throw new Error('Log file does not exist');
|
|
188
|
+
}
|
|
189
|
+
const logPath = execution.logFilePath.replace(/^\/Sites\//, '');
|
|
190
|
+
const content = await instance.webdav.get(logPath);
|
|
191
|
+
return new TextDecoder().decode(content);
|
|
192
|
+
}
|
|
193
|
+
async function findRunningExecution(client, jobId, tenantId) {
|
|
194
|
+
const results = await searchJobExecutions(client, {
|
|
195
|
+
jobId,
|
|
196
|
+
status: ['RUNNING', 'PENDING'],
|
|
197
|
+
sortBy: 'start_time',
|
|
198
|
+
sortOrder: 'asc',
|
|
199
|
+
count: 1,
|
|
200
|
+
tenantId,
|
|
201
|
+
});
|
|
202
|
+
return results.hits[0];
|
|
203
|
+
}
|
|
204
|
+
async function waitForTerminal(client, jobId, executionId, tenantId) {
|
|
205
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
206
|
+
while (true) {
|
|
207
|
+
await sleep(3000);
|
|
208
|
+
const execution = await getJobExecution(client, jobId, executionId, tenantId);
|
|
209
|
+
if (execution.executionStatus === 'finished' || execution.executionStatus === 'aborted') {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=scapi-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scapi-ops.js","sourceRoot":"","sources":["../../../../src/operations/jobs/scapi-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,12 @@ import * as zlib from 'node:zlib';
|
|
|
15
15
|
import { glob, hasMagic } from 'glob';
|
|
16
16
|
import JSZip from 'jszip';
|
|
17
17
|
import { B2CInstance } from '../../instance/index.js';
|
|
18
|
+
import { SCAPI_JOBS_CASCADE } from '../../clients/scapi-jobs.js';
|
|
18
19
|
import { addDirectoryToZip } from '../util/zip.js';
|
|
19
|
-
import {
|
|
20
|
+
import {} from './run.js';
|
|
21
|
+
import { runSystemJob } from './run-system-job.js';
|
|
22
|
+
// Import/export trigger system jobs via the job-execution write surface.
|
|
23
|
+
const JOBS_RW_SCOPES = [...new Set(SCAPI_JOBS_CASCADE.write.flat())];
|
|
20
24
|
const IMPORT_JOB_ID = 'sfcc-site-archive-import';
|
|
21
25
|
const EXPORT_JOB_ID = 'sfcc-site-archive-export';
|
|
22
26
|
/**
|
|
@@ -147,38 +151,19 @@ export async function siteArchiveImport(instance, target, options = {}) {
|
|
|
147
151
|
if (needsUpload && archiveContent) {
|
|
148
152
|
await instance.webdav.put(uploadPath, archiveContent, 'application/zip');
|
|
149
153
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
params: { path: { job_id: IMPORT_JOB_ID } },
|
|
154
|
+
// Execute the import job (SCAPI when configured, OCAPI fallback in auto).
|
|
155
|
+
const execution = await runSystemJob(instance, {
|
|
156
|
+
jobId: IMPORT_JOB_ID,
|
|
154
157
|
body: { file_name: zipFilename },
|
|
158
|
+
parameters: [{ name: 'ImportFile', value: zipFilename }],
|
|
159
|
+
deprecatedScopes: JOBS_RW_SCOPES,
|
|
160
|
+
wait,
|
|
161
|
+
waitOptions,
|
|
162
|
+
failVerb: 'execute import job',
|
|
155
163
|
});
|
|
156
|
-
if (
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const { data: retryData, error: retryError } = await instance.ocapi.POST('/jobs/{job_id}/executions', {
|
|
160
|
-
params: { path: { job_id: IMPORT_JOB_ID } },
|
|
161
|
-
body: {
|
|
162
|
-
parameters: [{ name: 'ImportFile', value: zipFilename }],
|
|
163
|
-
},
|
|
164
|
-
});
|
|
165
|
-
if (retryError || !retryData) {
|
|
166
|
-
throw new Error(retryError?.fault?.message ?? 'Failed to execute import job');
|
|
167
|
-
}
|
|
168
|
-
execution = retryData;
|
|
169
|
-
}
|
|
170
|
-
else if (error || !data) {
|
|
171
|
-
throw new Error(error?.fault?.message ?? 'Failed to execute import job');
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
execution = data;
|
|
175
|
-
}
|
|
176
|
-
if (wait) {
|
|
177
|
-
execution = await waitForJob(instance, IMPORT_JOB_ID, execution.id, waitOptions);
|
|
178
|
-
// Clean up archive if not keeping
|
|
179
|
-
if (!keepArchive && needsUpload) {
|
|
180
|
-
await instance.webdav.delete(uploadPath);
|
|
181
|
-
}
|
|
164
|
+
// Clean up archive if not keeping (only when we waited for completion)
|
|
165
|
+
if (wait && !keepArchive && needsUpload) {
|
|
166
|
+
await instance.webdav.delete(uploadPath);
|
|
182
167
|
}
|
|
183
168
|
return {
|
|
184
169
|
execution,
|
|
@@ -633,41 +618,18 @@ export async function siteArchiveExport(instance, dataUnits, options = {}) {
|
|
|
633
618
|
const timestamp = new Date().toISOString().replace(/[:.-]+/g, '');
|
|
634
619
|
const archiveDirName = `${timestamp}_export`;
|
|
635
620
|
const zipFilename = `${archiveDirName}.zip`;
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
// Retry with parameters format (internal/support users)
|
|
649
|
-
const { data: retryData, error: retryError } = await instance.ocapi.POST('/jobs/{job_id}/executions', {
|
|
650
|
-
params: { path: { job_id: EXPORT_JOB_ID } },
|
|
651
|
-
body: {
|
|
652
|
-
parameters: [
|
|
653
|
-
{ name: 'ExportFile', value: zipFilename },
|
|
654
|
-
{ name: 'DataUnits', value: JSON.stringify(dataUnits) },
|
|
655
|
-
],
|
|
656
|
-
},
|
|
657
|
-
});
|
|
658
|
-
if (retryError || !retryData) {
|
|
659
|
-
throw new Error(retryError?.fault?.message ?? 'Failed to execute export job');
|
|
660
|
-
}
|
|
661
|
-
execution = retryData;
|
|
662
|
-
}
|
|
663
|
-
else if (error || !data) {
|
|
664
|
-
throw new Error(error?.fault?.message ?? 'Failed to execute export job');
|
|
665
|
-
}
|
|
666
|
-
else {
|
|
667
|
-
execution = data;
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
|
-
execution = await waitForJob(instance, EXPORT_JOB_ID, execution.id, waitOptions);
|
|
621
|
+
// Execute export job (SCAPI when configured, OCAPI fallback in auto).
|
|
622
|
+
const execution = await runSystemJob(instance, {
|
|
623
|
+
jobId: EXPORT_JOB_ID,
|
|
624
|
+
body: { export_file: zipFilename, data_units: dataUnits },
|
|
625
|
+
parameters: [
|
|
626
|
+
{ name: 'ExportFile', value: zipFilename },
|
|
627
|
+
{ name: 'DataUnits', value: JSON.stringify(dataUnits) },
|
|
628
|
+
],
|
|
629
|
+
deprecatedScopes: JOBS_RW_SCOPES,
|
|
630
|
+
waitOptions,
|
|
631
|
+
failVerb: 'execute export job',
|
|
632
|
+
});
|
|
671
633
|
return {
|
|
672
634
|
execution,
|
|
673
635
|
archiveFilename: zipFilename,
|