@salesforce/b2c-tooling-sdk 0.3.0 → 0.4.1
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 +191 -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 +20 -3
- 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 +2 -1
- package/dist/cjs/cli/oauth-command.d.ts +22 -2
- package/dist/cjs/cli/oauth-command.js +53 -8
- package/dist/cjs/cli/oauth-command.js.map +1 -1
- package/dist/cjs/cli/ods-command.d.ts +6 -2
- 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 +2 -1
- package/dist/cjs/clients/am-api.d.ts +521 -0
- package/dist/cjs/clients/am-api.js +986 -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 +954 -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 +153 -0
- package/dist/cjs/operations/users/index.js +139 -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 +198 -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 +20 -3
- 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 +2 -1
- package/dist/esm/cli/oauth-command.d.ts +22 -2
- package/dist/esm/cli/oauth-command.js +53 -8
- package/dist/esm/cli/oauth-command.js.map +1 -1
- package/dist/esm/cli/ods-command.d.ts +6 -2
- 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 +2 -1
- package/dist/esm/clients/am-api.d.ts +521 -0
- package/dist/esm/clients/am-api.js +986 -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 +954 -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 +153 -0
- package/dist/esm/operations/users/index.js +139 -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 +1142 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
openapi: 3.0.0
|
|
2
|
+
info:
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
title: <%= apiName %>
|
|
5
|
+
description: <%= apiDescription %>
|
|
6
|
+
components:
|
|
7
|
+
securitySchemes:
|
|
8
|
+
<% if (apiType === 'shopper') { %>
|
|
9
|
+
ShopperToken:
|
|
10
|
+
type: oauth2
|
|
11
|
+
flows:
|
|
12
|
+
clientCredentials:
|
|
13
|
+
tokenUrl: https://{shortCode}.api.commercecloud.salesforce.com/shopper/auth/v1/organizations/{organizationId}/oauth2/token
|
|
14
|
+
scopes:
|
|
15
|
+
c_<%= apiName.replace(/-/g, '_') %>: Access <%= apiName %> API
|
|
16
|
+
<% } else { %>
|
|
17
|
+
AmOAuth2:
|
|
18
|
+
type: oauth2
|
|
19
|
+
flows:
|
|
20
|
+
clientCredentials:
|
|
21
|
+
tokenUrl: https://account.demandware.com/dwsso/oauth2/access_token
|
|
22
|
+
scopes:
|
|
23
|
+
c_<%= apiName.replace(/-/g, '_') %>: Access <%= apiName %> API
|
|
24
|
+
<% } %>
|
|
25
|
+
<% if (includeExampleEndpoints) { %>
|
|
26
|
+
paths:
|
|
27
|
+
/hello:
|
|
28
|
+
get:
|
|
29
|
+
summary: Returns a hello message
|
|
30
|
+
operationId: getHello
|
|
31
|
+
<% if (apiType === 'shopper') { %>
|
|
32
|
+
parameters:
|
|
33
|
+
- in: query
|
|
34
|
+
name: siteId
|
|
35
|
+
required: true
|
|
36
|
+
schema:
|
|
37
|
+
type: string
|
|
38
|
+
minLength: 1
|
|
39
|
+
<% } %>
|
|
40
|
+
responses:
|
|
41
|
+
'200':
|
|
42
|
+
description: Success
|
|
43
|
+
content:
|
|
44
|
+
application/json:
|
|
45
|
+
schema:
|
|
46
|
+
type: object
|
|
47
|
+
properties:
|
|
48
|
+
message:
|
|
49
|
+
type: string
|
|
50
|
+
security:
|
|
51
|
+
<% if (apiType === 'shopper') { %>
|
|
52
|
+
- ShopperToken: [c_<%= apiName.replace(/-/g, '_') %>]
|
|
53
|
+
<% } else { %>
|
|
54
|
+
- AmOAuth2: [c_<%= apiName.replace(/-/g, '_') %>]
|
|
55
|
+
<% } %>
|
|
56
|
+
/items:
|
|
57
|
+
get:
|
|
58
|
+
summary: Get a list of items
|
|
59
|
+
operationId: getItems
|
|
60
|
+
parameters:
|
|
61
|
+
<% if (apiType === 'shopper') { %>
|
|
62
|
+
- in: query
|
|
63
|
+
name: siteId
|
|
64
|
+
required: true
|
|
65
|
+
schema:
|
|
66
|
+
type: string
|
|
67
|
+
minLength: 1
|
|
68
|
+
<% } %>
|
|
69
|
+
- in: query
|
|
70
|
+
name: c_limit
|
|
71
|
+
required: false
|
|
72
|
+
schema:
|
|
73
|
+
type: integer
|
|
74
|
+
default: 10
|
|
75
|
+
- in: query
|
|
76
|
+
name: c_offset
|
|
77
|
+
required: false
|
|
78
|
+
schema:
|
|
79
|
+
type: integer
|
|
80
|
+
default: 0
|
|
81
|
+
responses:
|
|
82
|
+
'200':
|
|
83
|
+
description: Success
|
|
84
|
+
content:
|
|
85
|
+
application/json:
|
|
86
|
+
schema:
|
|
87
|
+
type: object
|
|
88
|
+
properties:
|
|
89
|
+
count:
|
|
90
|
+
type: integer
|
|
91
|
+
total:
|
|
92
|
+
type: integer
|
|
93
|
+
data:
|
|
94
|
+
type: array
|
|
95
|
+
items:
|
|
96
|
+
type: object
|
|
97
|
+
properties:
|
|
98
|
+
id:
|
|
99
|
+
type: string
|
|
100
|
+
name:
|
|
101
|
+
type: string
|
|
102
|
+
security:
|
|
103
|
+
<% if (apiType === 'shopper') { %>
|
|
104
|
+
- ShopperToken: [c_<%= apiName.replace(/-/g, '_') %>]
|
|
105
|
+
<% } else { %>
|
|
106
|
+
- AmOAuth2: [c_<%= apiName.replace(/-/g, '_') %>]
|
|
107
|
+
<% } %>
|
|
108
|
+
/items/{itemId}:
|
|
109
|
+
get:
|
|
110
|
+
summary: Get a specific item by ID
|
|
111
|
+
operationId: getItem
|
|
112
|
+
parameters:
|
|
113
|
+
<% if (apiType === 'shopper') { %>
|
|
114
|
+
- in: query
|
|
115
|
+
name: siteId
|
|
116
|
+
required: true
|
|
117
|
+
schema:
|
|
118
|
+
type: string
|
|
119
|
+
minLength: 1
|
|
120
|
+
<% } %>
|
|
121
|
+
- in: path
|
|
122
|
+
name: itemId
|
|
123
|
+
required: true
|
|
124
|
+
schema:
|
|
125
|
+
type: string
|
|
126
|
+
responses:
|
|
127
|
+
'200':
|
|
128
|
+
description: Success
|
|
129
|
+
content:
|
|
130
|
+
application/json:
|
|
131
|
+
schema:
|
|
132
|
+
type: object
|
|
133
|
+
properties:
|
|
134
|
+
id:
|
|
135
|
+
type: string
|
|
136
|
+
name:
|
|
137
|
+
type: string
|
|
138
|
+
description:
|
|
139
|
+
type: string
|
|
140
|
+
'404':
|
|
141
|
+
description: Item not found
|
|
142
|
+
content:
|
|
143
|
+
application/json:
|
|
144
|
+
schema:
|
|
145
|
+
type: object
|
|
146
|
+
properties:
|
|
147
|
+
type:
|
|
148
|
+
type: string
|
|
149
|
+
message:
|
|
150
|
+
type: string
|
|
151
|
+
security:
|
|
152
|
+
<% if (apiType === 'shopper') { %>
|
|
153
|
+
- ShopperToken: [c_<%= apiName.replace(/-/g, '_') %>]
|
|
154
|
+
<% } else { %>
|
|
155
|
+
- AmOAuth2: [c_<%= apiName.replace(/-/g, '_') %>]
|
|
156
|
+
<% } %>
|
|
157
|
+
<% } else { %>
|
|
158
|
+
paths:
|
|
159
|
+
/example:
|
|
160
|
+
get:
|
|
161
|
+
summary: Example endpoint
|
|
162
|
+
operationId: getExample
|
|
163
|
+
<% if (apiType === 'shopper') { %>
|
|
164
|
+
parameters:
|
|
165
|
+
- in: query
|
|
166
|
+
name: siteId
|
|
167
|
+
required: true
|
|
168
|
+
schema:
|
|
169
|
+
type: string
|
|
170
|
+
minLength: 1
|
|
171
|
+
<% } %>
|
|
172
|
+
responses:
|
|
173
|
+
'200':
|
|
174
|
+
description: Success
|
|
175
|
+
content:
|
|
176
|
+
application/json:
|
|
177
|
+
schema:
|
|
178
|
+
type: object
|
|
179
|
+
properties:
|
|
180
|
+
message:
|
|
181
|
+
type: string
|
|
182
|
+
security:
|
|
183
|
+
<% if (apiType === 'shopper') { %>
|
|
184
|
+
- ShopperToken: [c_<%= apiName.replace(/-/g, '_') %>]
|
|
185
|
+
<% } else { %>
|
|
186
|
+
- AmOAuth2: [c_<%= apiName.replace(/-/g, '_') %>]
|
|
187
|
+
<% } %>
|
|
188
|
+
<% } %>
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Custom SCAPI implementation for <%= apiName %>
|
|
5
|
+
*
|
|
6
|
+
* Each exported function corresponds to an operationId in schema.yaml.
|
|
7
|
+
* Functions must be marked as public: exports.functionName.public = true;
|
|
8
|
+
*
|
|
9
|
+
* Use RESTResponseMgr for proper SCAPI responses.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var RESTResponseMgr = require('dw/system/RESTResponseMgr');
|
|
13
|
+
|
|
14
|
+
<% if (includeExampleEndpoints) { %>
|
|
15
|
+
/**
|
|
16
|
+
* GET /hello
|
|
17
|
+
* Returns a hello message
|
|
18
|
+
*/
|
|
19
|
+
exports.getHello = function () {
|
|
20
|
+
RESTResponseMgr
|
|
21
|
+
.createSuccess({
|
|
22
|
+
message: 'Hello from <%= apiName %>!'
|
|
23
|
+
})
|
|
24
|
+
.render();
|
|
25
|
+
};
|
|
26
|
+
exports.getHello.public = true;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* GET /items
|
|
30
|
+
* Get a list of items with pagination
|
|
31
|
+
*/
|
|
32
|
+
exports.getItems = function () {
|
|
33
|
+
var limit = request.httpParameterMap.get('c_limit').intValue || 10;
|
|
34
|
+
var offset = request.httpParameterMap.get('c_offset').intValue || 0;
|
|
35
|
+
|
|
36
|
+
// TODO: Replace with actual data retrieval logic
|
|
37
|
+
var allItems = [
|
|
38
|
+
{ id: 'item-1', name: 'Example Item 1' },
|
|
39
|
+
{ id: 'item-2', name: 'Example Item 2' },
|
|
40
|
+
{ id: 'item-3', name: 'Example Item 3' }
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
var items = allItems.slice(offset, offset + limit);
|
|
44
|
+
|
|
45
|
+
RESTResponseMgr
|
|
46
|
+
.createSuccess({
|
|
47
|
+
count: items.length,
|
|
48
|
+
total: allItems.length,
|
|
49
|
+
data: items
|
|
50
|
+
})
|
|
51
|
+
.render();
|
|
52
|
+
};
|
|
53
|
+
exports.getItems.public = true;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* GET /items/{itemId}
|
|
57
|
+
* Get a specific item by ID
|
|
58
|
+
*/
|
|
59
|
+
exports.getItem = function () {
|
|
60
|
+
var itemId = request.getSCAPIPathParameters().get('itemId');
|
|
61
|
+
|
|
62
|
+
// TODO: Replace with actual data retrieval logic
|
|
63
|
+
var items = {
|
|
64
|
+
'item-1': { id: 'item-1', name: 'Example Item 1', description: 'First example item' },
|
|
65
|
+
'item-2': { id: 'item-2', name: 'Example Item 2', description: 'Second example item' },
|
|
66
|
+
'item-3': { id: 'item-3', name: 'Example Item 3', description: 'Third example item' }
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
var item = items[itemId];
|
|
70
|
+
|
|
71
|
+
if (item) {
|
|
72
|
+
RESTResponseMgr
|
|
73
|
+
.createSuccess(item)
|
|
74
|
+
.render();
|
|
75
|
+
} else {
|
|
76
|
+
RESTResponseMgr
|
|
77
|
+
.createError(404, 'item-not-found', 'Item Not Found', 'The requested item was not found.')
|
|
78
|
+
.render();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
exports.getItem.public = true;
|
|
82
|
+
<% } else { %>
|
|
83
|
+
/**
|
|
84
|
+
* GET /example
|
|
85
|
+
* Example endpoint - replace with your implementation
|
|
86
|
+
*/
|
|
87
|
+
exports.getExample = function () {
|
|
88
|
+
RESTResponseMgr
|
|
89
|
+
.createSuccess({
|
|
90
|
+
message: 'Hello from <%= apiName %>!'
|
|
91
|
+
})
|
|
92
|
+
.render();
|
|
93
|
+
};
|
|
94
|
+
exports.getExample.public = true;
|
|
95
|
+
<% } %>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "custom-api",
|
|
3
|
+
"displayName": "Custom SCAPI",
|
|
4
|
+
"description": "Create a custom SCAPI endpoint with OAS 3.0 schema",
|
|
5
|
+
"category": "cartridge",
|
|
6
|
+
"parameters": [
|
|
7
|
+
{
|
|
8
|
+
"name": "apiName",
|
|
9
|
+
"prompt": "What is the API name?",
|
|
10
|
+
"type": "string",
|
|
11
|
+
"required": true,
|
|
12
|
+
"pattern": "^[a-z][a-z0-9-]*$",
|
|
13
|
+
"validationMessage": "API name must be kebab-case (lowercase letters, numbers, hyphens)"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "apiType",
|
|
17
|
+
"prompt": "What type of API is this?",
|
|
18
|
+
"type": "choice",
|
|
19
|
+
"required": true,
|
|
20
|
+
"default": "shopper",
|
|
21
|
+
"choices": [
|
|
22
|
+
{ "value": "shopper", "label": "Shopper API (requires siteId, customer-facing)" },
|
|
23
|
+
{ "value": "admin", "label": "Admin API (no siteId, administrative)" }
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "apiDescription",
|
|
28
|
+
"prompt": "Describe your API:",
|
|
29
|
+
"type": "string",
|
|
30
|
+
"required": false,
|
|
31
|
+
"default": "A custom B2C Commerce API"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "cartridgeName",
|
|
35
|
+
"prompt": "Which cartridge should contain this API?",
|
|
36
|
+
"type": "string",
|
|
37
|
+
"required": true,
|
|
38
|
+
"source": "cartridges",
|
|
39
|
+
"pattern": "^[a-z][a-z0-9_]*$",
|
|
40
|
+
"validationMessage": "Cartridge name must start with a lowercase letter and contain only lowercase letters, numbers, and underscores"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "includeExampleEndpoints",
|
|
44
|
+
"prompt": "Include example endpoints?",
|
|
45
|
+
"type": "boolean",
|
|
46
|
+
"required": false,
|
|
47
|
+
"default": true
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"files": [
|
|
51
|
+
{
|
|
52
|
+
"template": "schema.yaml.ejs",
|
|
53
|
+
"destination": "{{cartridgeNamePath}}/cartridge/rest-apis/{{apiName}}/schema.yaml"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"template": "api.json.ejs",
|
|
57
|
+
"destination": "{{cartridgeNamePath}}/cartridge/rest-apis/{{apiName}}/api.json"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"template": "script.js.ejs",
|
|
61
|
+
"destination": "{{cartridgeNamePath}}/cartridge/rest-apis/{{apiName}}/script.js"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"postInstructions": "Custom API '<%= apiName %>' has been created in cartridge '<%= cartridgeName %>'.\n\nFiles created:\n- rest-apis/<%= apiName %>/schema.yaml (OAS 3.0 contract)\n- rest-apis/<%= apiName %>/api.json (endpoint mapping)\n- rest-apis/<%= apiName %>/script.js (implementation)\n\nNext steps:\n1. Deploy the cartridge to your instance\n2. Activate the code version to register the API\n3. The API will be available at:\n https://{shortCode}.api.commercecloud.salesforce.com/custom/<%= apiName %>/v1/organizations/{organizationId}/...\n<% if (apiType === 'shopper') { %>\nNote: Shopper APIs require the siteId query parameter and ShopperToken authentication.\n<% } else { %>\nNote: Admin APIs use AmOAuth2 authentication. Add cartridge to Business Manager site's cartridge path.\n<% } %>"
|
|
65
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* <%= hookName %> Hook Implementation
|
|
5
|
+
*
|
|
6
|
+
* Hook point: <%= hookPoint %>
|
|
7
|
+
*
|
|
8
|
+
* @module scripts/hooks/<%= hookName %>
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
var Logger = require('dw/system/Logger');
|
|
12
|
+
var Status = require('dw/system/Status');
|
|
13
|
+
|
|
14
|
+
var log = Logger.getLogger('<%= hookName %>', '<%= cartridgeName %>');
|
|
15
|
+
|
|
16
|
+
<% if (hookType === 'ocapi') { %>
|
|
17
|
+
/**
|
|
18
|
+
* OCAPI Hook - Called before/after OCAPI operations
|
|
19
|
+
*
|
|
20
|
+
* @param {dw.order.Basket|dw.order.Order|Object} object - The object being processed
|
|
21
|
+
* @param {Object} doc - The OCAPI document
|
|
22
|
+
* @returns {dw.system.Status} - Status object
|
|
23
|
+
*/
|
|
24
|
+
exports.<%= hookName %> = function (object, doc) {
|
|
25
|
+
log.info('<%= hookName %> hook called');
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
// TODO: Implement hook logic
|
|
29
|
+
// - Modify doc to add/change response fields
|
|
30
|
+
// - Validate/modify object before processing
|
|
31
|
+
|
|
32
|
+
} catch (e) {
|
|
33
|
+
log.error('<%= hookName %> hook error: ' + e.message);
|
|
34
|
+
return new Status(
|
|
35
|
+
Status.ERROR,
|
|
36
|
+
'<%= hookName.toUpperCase() %>_ERROR',
|
|
37
|
+
e.message
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return new Status(Status.OK);
|
|
42
|
+
};
|
|
43
|
+
<% } else if (hookType === 'scapi') { %>
|
|
44
|
+
/**
|
|
45
|
+
* SCAPI Hook - Called for Shopper API extensions
|
|
46
|
+
*
|
|
47
|
+
* @param {dw.order.Basket|dw.order.Order|Object} object - The object being processed
|
|
48
|
+
* @param {Object} scriptResponse - Response object to populate
|
|
49
|
+
* @returns {dw.system.Status} - Status object
|
|
50
|
+
*/
|
|
51
|
+
exports.<%= hookName %> = function (object, scriptResponse) {
|
|
52
|
+
log.info('<%= hookName %> SCAPI hook called');
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
// TODO: Implement hook logic
|
|
56
|
+
// - Add custom properties to scriptResponse
|
|
57
|
+
// - Validate/enrich the response
|
|
58
|
+
|
|
59
|
+
} catch (e) {
|
|
60
|
+
log.error('<%= hookName %> hook error: ' + e.message);
|
|
61
|
+
return new Status(
|
|
62
|
+
Status.ERROR,
|
|
63
|
+
'<%= hookName.toUpperCase() %>_ERROR',
|
|
64
|
+
e.message
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return new Status(Status.OK);
|
|
69
|
+
};
|
|
70
|
+
<% } else { %>
|
|
71
|
+
/**
|
|
72
|
+
* System Hook Implementation
|
|
73
|
+
*
|
|
74
|
+
* @param {dw.order.Basket|dw.order.Order|dw.customer.Customer|Object} object - The object being processed
|
|
75
|
+
* @returns {dw.system.Status} - Status object
|
|
76
|
+
*/
|
|
77
|
+
exports.<%= hookName %> = function (object) {
|
|
78
|
+
log.info('<%= hookName %> system hook called');
|
|
79
|
+
|
|
80
|
+
try {
|
|
81
|
+
// TODO: Implement hook logic based on extension point
|
|
82
|
+
// Common extension points:
|
|
83
|
+
// - dw.order.calculate: Basket/order calculation
|
|
84
|
+
// - dw.order.createOrder: Order creation
|
|
85
|
+
// - dw.customer.registration: Customer registration
|
|
86
|
+
// - dw.extensions.applepay: Apple Pay processing
|
|
87
|
+
|
|
88
|
+
} catch (e) {
|
|
89
|
+
log.error('<%= hookName %> hook error: ' + e.message);
|
|
90
|
+
return new Status(
|
|
91
|
+
Status.ERROR,
|
|
92
|
+
'<%= hookName.toUpperCase() %>_ERROR',
|
|
93
|
+
e.message
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return new Status(Status.OK);
|
|
98
|
+
};
|
|
99
|
+
<% } %>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hook",
|
|
3
|
+
"displayName": "Hook Implementation",
|
|
4
|
+
"description": "Create a hook implementation with hooks.json registration",
|
|
5
|
+
"category": "cartridge",
|
|
6
|
+
"parameters": [
|
|
7
|
+
{
|
|
8
|
+
"name": "hookName",
|
|
9
|
+
"prompt": "What is the hook script name?",
|
|
10
|
+
"type": "string",
|
|
11
|
+
"required": true,
|
|
12
|
+
"pattern": "^[a-z][a-zA-Z0-9]*$",
|
|
13
|
+
"validationMessage": "Hook name must be camelCase (start with lowercase letter)"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "hookType",
|
|
17
|
+
"prompt": "What type of hook is this?",
|
|
18
|
+
"type": "choice",
|
|
19
|
+
"required": true,
|
|
20
|
+
"choices": [
|
|
21
|
+
{ "value": "ocapi", "label": "OCAPI Hook (shop/data API extension)" },
|
|
22
|
+
{ "value": "scapi", "label": "SCAPI Hook (shopper API extension)" },
|
|
23
|
+
{ "value": "system", "label": "System Hook (order, basket, etc.)" }
|
|
24
|
+
],
|
|
25
|
+
"default": "system"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "hookPoint",
|
|
29
|
+
"prompt": "What is the hook extension point?",
|
|
30
|
+
"type": "string",
|
|
31
|
+
"required": true,
|
|
32
|
+
"source": "hook-points",
|
|
33
|
+
"validationMessage": "Hook point is required (e.g., dw.order.calculate, dw.ocapi.shop.order.beforePOST)"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "cartridgeName",
|
|
37
|
+
"prompt": "Which cartridge should contain this hook?",
|
|
38
|
+
"type": "string",
|
|
39
|
+
"required": true,
|
|
40
|
+
"source": "cartridges",
|
|
41
|
+
"pattern": "^[a-z][a-z0-9_]*$",
|
|
42
|
+
"validationMessage": "Cartridge name must start with a lowercase letter and contain only lowercase letters, numbers, and underscores"
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"files": [
|
|
46
|
+
{
|
|
47
|
+
"template": "hook.js.ejs",
|
|
48
|
+
"destination": "{{cartridgeNamePath}}/cartridge/scripts/hooks/{{hookName}}.js"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"modifications": [
|
|
52
|
+
{
|
|
53
|
+
"target": "{{cartridgeNamePath}}/cartridge/hooks.json",
|
|
54
|
+
"type": "json-merge",
|
|
55
|
+
"contentTemplate": "hooks-entry.json.ejs",
|
|
56
|
+
"jsonPath": "hooks"
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"postInstructions": "Hook '<%= hookName %>' has been created in '<%= cartridgeName %>'.\n\nHook point: <%= hookPoint %>\n\nNext steps:\n1. Implement the hook logic in cartridge/scripts/hooks/<%= hookName %>.js\n2. Deploy the cartridge to your instance\n3. Ensure <%= cartridgeName %> is in your cartridge path"
|
|
60
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* <%= stepId %> Job Step (Chunk-oriented)
|
|
5
|
+
*
|
|
6
|
+
* <%= stepDescription %>
|
|
7
|
+
*
|
|
8
|
+
* Chunk-oriented steps process data in batches with automatic
|
|
9
|
+
* transaction handling and checkpoint/restart capability.
|
|
10
|
+
*
|
|
11
|
+
* @module scripts/jobsteps/<%= camelCase(stepId) %>
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
var Status = require('dw/system/Status');
|
|
15
|
+
var Logger = require('dw/system/Logger');
|
|
16
|
+
|
|
17
|
+
var log = Logger.getLogger('<%= camelCase(stepId) %>', 'job');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Read the next item to process
|
|
21
|
+
*
|
|
22
|
+
* Called repeatedly until it returns null.
|
|
23
|
+
*
|
|
24
|
+
* @param {dw.job.JobStepExecution} stepExecution - The step execution context
|
|
25
|
+
* @param {Object} parameters - Step parameters from job configuration
|
|
26
|
+
* @returns {Object|null} - The next item to process, or null when done
|
|
27
|
+
*/
|
|
28
|
+
exports.read = function (stepExecution, parameters) {
|
|
29
|
+
// TODO: Implement your read logic
|
|
30
|
+
// Examples:
|
|
31
|
+
// - Read next product from search results
|
|
32
|
+
// - Read next line from file
|
|
33
|
+
// - Read next record from database query
|
|
34
|
+
|
|
35
|
+
// Return null to signal end of data
|
|
36
|
+
return null;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Process a single item
|
|
41
|
+
*
|
|
42
|
+
* Called for each item returned by read().
|
|
43
|
+
* Processing happens within a transaction.
|
|
44
|
+
*
|
|
45
|
+
* @param {Object} item - The item to process (returned by read)
|
|
46
|
+
* @param {dw.job.JobStepExecution} stepExecution - The step execution context
|
|
47
|
+
* @param {Object} parameters - Step parameters from job configuration
|
|
48
|
+
* @returns {Object} - The processed item (passed to write)
|
|
49
|
+
*/
|
|
50
|
+
exports.process = function (item, stepExecution, parameters) {
|
|
51
|
+
// TODO: Implement your processing logic
|
|
52
|
+
// Examples:
|
|
53
|
+
// - Transform product data
|
|
54
|
+
// - Validate and enrich records
|
|
55
|
+
// - Calculate values
|
|
56
|
+
|
|
57
|
+
return item;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Write processed items
|
|
62
|
+
*
|
|
63
|
+
* Called with a chunk of processed items.
|
|
64
|
+
* Chunk size is configured in steptypes.json.
|
|
65
|
+
*
|
|
66
|
+
* @param {dw.util.List} items - List of processed items
|
|
67
|
+
* @param {dw.job.JobStepExecution} stepExecution - The step execution context
|
|
68
|
+
* @param {Object} parameters - Step parameters from job configuration
|
|
69
|
+
*/
|
|
70
|
+
exports.write = function (items, stepExecution, parameters) {
|
|
71
|
+
// TODO: Implement your write logic
|
|
72
|
+
// Examples:
|
|
73
|
+
// - Write records to database
|
|
74
|
+
// - Export to file
|
|
75
|
+
// - Send to external service
|
|
76
|
+
|
|
77
|
+
log.info('Wrote ' + items.size() + ' items');
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Called before processing begins
|
|
82
|
+
*
|
|
83
|
+
* @param {dw.job.JobStepExecution} stepExecution - The step execution context
|
|
84
|
+
* @param {Object} parameters - Step parameters from job configuration
|
|
85
|
+
*/
|
|
86
|
+
exports.beforeStep = function (stepExecution, parameters) {
|
|
87
|
+
log.info('<%= stepId %> chunk step started');
|
|
88
|
+
// TODO: Initialize resources (file handles, connections, etc.)
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Called after all processing is complete
|
|
93
|
+
*
|
|
94
|
+
* @param {boolean} success - Whether the step completed successfully
|
|
95
|
+
* @param {dw.job.JobStepExecution} stepExecution - The step execution context
|
|
96
|
+
* @param {Object} parameters - Step parameters from job configuration
|
|
97
|
+
*/
|
|
98
|
+
exports.afterStep = function (success, stepExecution, parameters) {
|
|
99
|
+
// TODO: Cleanup resources
|
|
100
|
+
log.info('<%= stepId %> chunk step ' + (success ? 'completed' : 'failed'));
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Called before each chunk is processed
|
|
105
|
+
*
|
|
106
|
+
* @param {dw.job.JobStepExecution} stepExecution - The step execution context
|
|
107
|
+
* @param {Object} parameters - Step parameters from job configuration
|
|
108
|
+
*/
|
|
109
|
+
exports.beforeChunk = function (stepExecution, parameters) {
|
|
110
|
+
// Optional: Pre-chunk initialization
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Called after each chunk is processed
|
|
115
|
+
*
|
|
116
|
+
* @param {boolean} success - Whether the chunk completed successfully
|
|
117
|
+
* @param {dw.job.JobStepExecution} stepExecution - The step execution context
|
|
118
|
+
* @param {Object} parameters - Step parameters from job configuration
|
|
119
|
+
*/
|
|
120
|
+
exports.afterChunk = function (success, stepExecution, parameters) {
|
|
121
|
+
// Optional: Post-chunk cleanup or logging
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Get the total count of items to process (optional)
|
|
126
|
+
*
|
|
127
|
+
* Used for progress tracking in Business Manager.
|
|
128
|
+
*
|
|
129
|
+
* @param {dw.job.JobStepExecution} stepExecution - The step execution context
|
|
130
|
+
* @param {Object} parameters - Step parameters from job configuration
|
|
131
|
+
* @returns {Number} - Total number of items to process
|
|
132
|
+
*/
|
|
133
|
+
exports.getTotalCount = function (stepExecution, parameters) {
|
|
134
|
+
// TODO: Return total count if known, -1 if unknown
|
|
135
|
+
return -1;
|
|
136
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* <%= stepId %> Job Step (Task-oriented)
|
|
5
|
+
*
|
|
6
|
+
* <%= stepDescription %>
|
|
7
|
+
*
|
|
8
|
+
* @module scripts/jobsteps/<%= camelCase(stepId) %>
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
var Status = require('dw/system/Status');
|
|
12
|
+
var Logger = require('dw/system/Logger');
|
|
13
|
+
|
|
14
|
+
var log = Logger.getLogger('<%= camelCase(stepId) %>', 'job');
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Execute the job step
|
|
18
|
+
*
|
|
19
|
+
* Task-oriented steps run once per job execution.
|
|
20
|
+
* Use for simple operations that don't need chunked processing.
|
|
21
|
+
*
|
|
22
|
+
* @param {dw.job.JobStepExecution} stepExecution - The step execution context
|
|
23
|
+
* @param {Object} parameters - Step parameters from job configuration
|
|
24
|
+
* @returns {dw.system.Status} - Execution status
|
|
25
|
+
*/
|
|
26
|
+
exports.execute = function (stepExecution, parameters) {
|
|
27
|
+
log.info('<%= stepId %> step started');
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
// Access job parameters
|
|
31
|
+
// var myParam = parameters.get('MyParameter');
|
|
32
|
+
|
|
33
|
+
// TODO: Implement your step logic here
|
|
34
|
+
// Examples:
|
|
35
|
+
// - Export data to a file
|
|
36
|
+
// - Call an external service
|
|
37
|
+
// - Update records in bulk
|
|
38
|
+
// - Generate reports
|
|
39
|
+
|
|
40
|
+
log.info('<%= stepId %> step completed successfully');
|
|
41
|
+
return new Status(Status.OK);
|
|
42
|
+
|
|
43
|
+
} catch (e) {
|
|
44
|
+
log.error('<%= stepId %> step failed: ' + e.message);
|
|
45
|
+
return new Status(Status.ERROR, 'ERROR', e.message);
|
|
46
|
+
}
|
|
47
|
+
};
|