@salesforce/b2c-cli 2.3.1 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/bin/dev.js +8 -8
  2. package/bin/run.js +5 -7
  3. package/content/guidance/b2c/b2c-business-manager-extensions/SKILL.md +361 -0
  4. package/content/guidance/b2c/b2c-business-manager-extensions/references/EXTENSIONS-XML.md +458 -0
  5. package/content/guidance/b2c/b2c-controllers/SKILL.md +301 -0
  6. package/content/guidance/b2c/b2c-controllers/references/CLASSIC-PATTERNS.md +335 -0
  7. package/content/guidance/b2c/b2c-controllers/references/SFRA-PATTERNS.md +400 -0
  8. package/content/guidance/b2c/b2c-custom-api-development/SKILL.md +281 -0
  9. package/content/guidance/b2c/b2c-custom-api-development/references/CONTRACT.md +142 -0
  10. package/content/guidance/b2c/b2c-custom-api-development/references/IMPLEMENTATION.md +153 -0
  11. package/content/guidance/b2c/b2c-custom-api-development/references/TESTING.md +118 -0
  12. package/content/guidance/b2c/b2c-custom-caches/SKILL.md +279 -0
  13. package/content/guidance/b2c/b2c-custom-job-steps/SKILL.md +520 -0
  14. package/content/guidance/b2c/b2c-custom-job-steps/references/CHUNK-ORIENTED.md +377 -0
  15. package/content/guidance/b2c/b2c-custom-job-steps/references/JOBS-XML.md +212 -0
  16. package/content/guidance/b2c/b2c-custom-job-steps/references/STEPTYPES-JSON.md +373 -0
  17. package/content/guidance/b2c/b2c-custom-job-steps/references/TASK-ORIENTED.md +344 -0
  18. package/content/guidance/b2c/b2c-custom-objects/SKILL.md +327 -0
  19. package/content/guidance/b2c/b2c-custom-objects/references/OCAPI-SEARCH.md +298 -0
  20. package/content/guidance/b2c/b2c-forms/SKILL.md +242 -0
  21. package/content/guidance/b2c/b2c-forms/references/FORM-XML.md +409 -0
  22. package/content/guidance/b2c/b2c-hooks/SKILL.md +500 -0
  23. package/content/guidance/b2c/b2c-hooks/references/OCAPI-SCAPI-HOOKS.md +403 -0
  24. package/content/guidance/b2c/b2c-hooks/references/ORDER-HOOK-LIFECYCLE.md +169 -0
  25. package/content/guidance/b2c/b2c-hooks/references/SYSTEM-HOOKS.md +433 -0
  26. package/content/guidance/b2c/b2c-isml/SKILL.md +320 -0
  27. package/content/guidance/b2c/b2c-isml/references/EXPRESSIONS.md +366 -0
  28. package/content/guidance/b2c/b2c-isml/references/TAGS.md +443 -0
  29. package/content/guidance/b2c/b2c-localization/SKILL.md +344 -0
  30. package/content/guidance/b2c/b2c-localization/references/PATTERNS.md +407 -0
  31. package/content/guidance/b2c/b2c-logging/SKILL.md +352 -0
  32. package/content/guidance/b2c/b2c-logging/references/LOG-FILES.md +282 -0
  33. package/content/guidance/b2c/b2c-metadata/SKILL.md +406 -0
  34. package/content/guidance/b2c/b2c-metadata/references/SYSTEM-OBJECTS.md +320 -0
  35. package/content/guidance/b2c/b2c-metadata/references/XML-EXAMPLES.md +366 -0
  36. package/content/guidance/b2c/b2c-onboarding/SKILL.md +154 -0
  37. package/content/guidance/b2c/b2c-ordering/SKILL.md +391 -0
  38. package/content/guidance/b2c/b2c-page-designer/SKILL.md +410 -0
  39. package/content/guidance/b2c/b2c-page-designer/references/ATTRIBUTE-TYPES.md +436 -0
  40. package/content/guidance/b2c/b2c-page-designer/references/META-DEFINITIONS.md +340 -0
  41. package/content/guidance/b2c/b2c-querying-data/SKILL.md +289 -0
  42. package/content/guidance/b2c/b2c-querying-data/references/PERFORMANCE-APIS.md +74 -0
  43. package/content/guidance/b2c/b2c-scapi-admin/SKILL.md +53 -0
  44. package/content/guidance/b2c/b2c-scapi-admin/references/CLIENT-EXAMPLES.md +440 -0
  45. package/content/guidance/b2c/b2c-scapi-admin/references/INTEGRATION-PATTERNS.md +518 -0
  46. package/content/guidance/b2c/b2c-scapi-admin/references/OAUTH-SCOPES.md +337 -0
  47. package/content/guidance/b2c/b2c-scapi-shopper/SKILL.md +56 -0
  48. package/content/guidance/b2c/b2c-scapi-shopper/references/CHECKOUT-FLOW.md +466 -0
  49. package/content/guidance/b2c/b2c-scapi-shopper/references/CLIENT-EXAMPLES.md +351 -0
  50. package/content/guidance/b2c/b2c-scapi-shopper/references/COMMON-PATTERNS.md +390 -0
  51. package/content/guidance/b2c/b2c-scapi-shopper/references/SCOPES.md +290 -0
  52. package/content/guidance/b2c/b2c-slas-auth-patterns/SKILL.md +420 -0
  53. package/content/guidance/b2c/b2c-slas-auth-patterns/references/PASSKEYS.md +126 -0
  54. package/content/guidance/b2c/b2c-slas-auth-patterns/references/SESSION-BRIDGE.md +267 -0
  55. package/content/guidance/b2c/b2c-slas-auth-patterns/references/TOKEN-LIFECYCLE.md +367 -0
  56. package/content/guidance/b2c/b2c-webservices/SKILL.md +318 -0
  57. package/content/guidance/b2c/b2c-webservices/references/FTP-SERVICES.md +524 -0
  58. package/content/guidance/b2c/b2c-webservices/references/HTTP-SERVICES.md +578 -0
  59. package/content/guidance/b2c/b2c-webservices/references/SERVICES-XML.md +351 -0
  60. package/content/guidance/b2c/b2c-webservices/references/SOAP-SERVICES.md +587 -0
  61. package/content/guidance/b2c-cli/b2c-am/SKILL.md +277 -0
  62. package/content/guidance/b2c-cli/b2c-bm-users-roles/SKILL.md +210 -0
  63. package/content/guidance/b2c-cli/b2c-cap/SKILL.md +131 -0
  64. package/content/guidance/b2c-cli/b2c-cip/SKILL.md +116 -0
  65. package/content/guidance/b2c-cli/b2c-cip/references/KNOWN_TABLES.md +105 -0
  66. package/content/guidance/b2c-cli/b2c-cip/references/SALES_ANALYSIS.md +50 -0
  67. package/content/guidance/b2c-cli/b2c-cip/references/STARTER_QUERIES.md +147 -0
  68. package/content/guidance/b2c-cli/b2c-code/SKILL.md +146 -0
  69. package/content/guidance/b2c-cli/b2c-config/SKILL.md +462 -0
  70. package/content/guidance/b2c-cli/b2c-content/SKILL.md +176 -0
  71. package/content/guidance/b2c-cli/b2c-debug/SKILL.md +138 -0
  72. package/content/guidance/b2c-cli/b2c-docs/SKILL.md +301 -0
  73. package/content/guidance/b2c-cli/b2c-ecdn/SKILL.md +135 -0
  74. package/content/guidance/b2c-cli/b2c-ecdn/references/ADVANCED.md +97 -0
  75. package/content/guidance/b2c-cli/b2c-ecdn/references/SECURITY.md +75 -0
  76. package/content/guidance/b2c-cli/b2c-import-set-migrations/SKILL.md +265 -0
  77. package/content/guidance/b2c-cli/b2c-job/SKILL.md +64 -0
  78. package/content/guidance/b2c-cli/b2c-job/references/EXPORT.md +121 -0
  79. package/content/guidance/b2c-cli/b2c-job/references/IMPORT.md +55 -0
  80. package/content/guidance/b2c-cli/b2c-job/references/RUN-AND-MONITOR.md +119 -0
  81. package/content/guidance/b2c-cli/b2c-logs/SKILL.md +249 -0
  82. package/content/guidance/b2c-cli/b2c-metrics/SKILL.md +315 -0
  83. package/content/guidance/b2c-cli/b2c-mrt/SKILL.md +207 -0
  84. package/content/guidance/b2c-cli/b2c-mrt/references/BUNDLE-COMMANDS.md +203 -0
  85. package/content/guidance/b2c-cli/b2c-mrt/references/ENVIRONMENT-COMMANDS.md +218 -0
  86. package/content/guidance/b2c-cli/b2c-mrt/references/PROJECT-COMMANDS.md +154 -0
  87. package/content/guidance/b2c-cli/b2c-sandbox/SKILL.md +112 -0
  88. package/content/guidance/b2c-cli/b2c-scapi-custom/SKILL.md +126 -0
  89. package/content/guidance/b2c-cli/b2c-scapi-schemas/SKILL.md +66 -0
  90. package/content/guidance/b2c-cli/b2c-scapi-schemas/references/CLI-EXAMPLES.md +108 -0
  91. package/content/guidance/b2c-cli/b2c-site-import-export/SKILL.md +57 -0
  92. package/content/guidance/b2c-cli/b2c-site-import-export/references/IMPORT-OPTIONS.md +118 -0
  93. package/content/guidance/b2c-cli/b2c-site-import-export/references/METADATA-XML.md +381 -0
  94. package/content/guidance/b2c-cli/b2c-site-import-export/references/WORKFLOWS.md +182 -0
  95. package/content/guidance/b2c-cli/b2c-sites/SKILL.md +112 -0
  96. package/content/guidance/b2c-cli/b2c-slas/SKILL.md +182 -0
  97. package/content/guidance/b2c-cli/b2c-webdav/SKILL.md +186 -0
  98. package/content/guidance/b2c-ops/b2c-checkout-triage/SKILL.md +68 -0
  99. package/content/guidance/b2c-ops/b2c-job-health/SKILL.md +75 -0
  100. package/content/guidance/b2c-ops/b2c-job-health/references/job-logs.md +21 -0
  101. package/content/guidance/b2c-ops/b2c-order-failure-triage/SKILL.md +66 -0
  102. package/content/guidance/b2c-ops/b2c-order-failure-triage/references/order-evidence.md +87 -0
  103. package/content/guidance/b2c-ops/b2c-production-triage/SKILL.md +87 -0
  104. package/content/guidance/b2c-ops/b2c-production-triage/references/escalation.md +57 -0
  105. package/content/guidance/index.json +1949 -0
  106. package/content/guidance/storefront-next/sfnext-accessibility/SKILL.md +103 -0
  107. package/content/guidance/storefront-next/sfnext-accessibility/references/checklist.md +64 -0
  108. package/content/guidance/storefront-next/sfnext-analytics-consent/SKILL.md +91 -0
  109. package/content/guidance/storefront-next/sfnext-analytics-consent/references/CUSTOM-ADAPTER.md +49 -0
  110. package/content/guidance/storefront-next/sfnext-authentication/SKILL.md +127 -0
  111. package/content/guidance/storefront-next/sfnext-authentication/references/COOKIES.md +39 -0
  112. package/content/guidance/storefront-next/sfnext-authentication/references/LOGIN-FLOWS.md +59 -0
  113. package/content/guidance/storefront-next/sfnext-commerce-features/SKILL.md +67 -0
  114. package/content/guidance/storefront-next/sfnext-commerce-features/references/FEATURE-PREREQUISITES.md +37 -0
  115. package/content/guidance/storefront-next/sfnext-components/SKILL.md +153 -0
  116. package/content/guidance/storefront-next/sfnext-components/references/COMPONENT-AUTHORING.md +118 -0
  117. package/content/guidance/storefront-next/sfnext-components/references/SHAPE-TOKENS.md +51 -0
  118. package/content/guidance/storefront-next/sfnext-components/references/STORYBOOK.md +54 -0
  119. package/content/guidance/storefront-next/sfnext-components/references/TOKEN-SYSTEM.md +53 -0
  120. package/content/guidance/storefront-next/sfnext-components/references/TROUBLESHOOTING.md +19 -0
  121. package/content/guidance/storefront-next/sfnext-configuration/SKILL.md +163 -0
  122. package/content/guidance/storefront-next/sfnext-configuration/references/ENV-VARIABLES.md +55 -0
  123. package/content/guidance/storefront-next/sfnext-configuration/references/MULTI-SITE-URLS.md +137 -0
  124. package/content/guidance/storefront-next/sfnext-data-fetching/SKILL.md +140 -0
  125. package/content/guidance/storefront-next/sfnext-data-fetching/references/ACTIONS.md +53 -0
  126. package/content/guidance/storefront-next/sfnext-data-fetching/references/API-CLIENTS.md +34 -0
  127. package/content/guidance/storefront-next/sfnext-data-fetching/references/LOADERS.md +73 -0
  128. package/content/guidance/storefront-next/sfnext-data-fetching/references/SCAPI-FETCHER.md +39 -0
  129. package/content/guidance/storefront-next/sfnext-deployment/SKILL.md +127 -0
  130. package/content/guidance/storefront-next/sfnext-deployment/references/MRT-DEPLOYMENT.md +59 -0
  131. package/content/guidance/storefront-next/sfnext-extensions/SKILL.md +118 -0
  132. package/content/guidance/storefront-next/sfnext-extensions/references/ACTION-HOOKS.md +57 -0
  133. package/content/guidance/storefront-next/sfnext-extensions/references/BASE-AUDIT.md +68 -0
  134. package/content/guidance/storefront-next/sfnext-extensions/references/CLI-AND-INSTALL.md +58 -0
  135. package/content/guidance/storefront-next/sfnext-extensions/references/EXTENSION-EXAMPLES.md +79 -0
  136. package/content/guidance/storefront-next/sfnext-hybrid-storefronts/SKILL.md +93 -0
  137. package/content/guidance/storefront-next/sfnext-hybrid-storefronts/references/HYBRID-PROXY-CONFIG.md +86 -0
  138. package/content/guidance/storefront-next/sfnext-i18n/SKILL.md +152 -0
  139. package/content/guidance/storefront-next/sfnext-i18n/references/locale-config.md +35 -0
  140. package/content/guidance/storefront-next/sfnext-overview/SKILL.md +101 -0
  141. package/content/guidance/storefront-next/sfnext-page-designer/SKILL.md +202 -0
  142. package/content/guidance/storefront-next/sfnext-page-designer/references/BUSINESS-MANAGER.md +46 -0
  143. package/content/guidance/storefront-next/sfnext-page-designer/references/COMPONENT-REGISTRY.md +111 -0
  144. package/content/guidance/storefront-next/sfnext-page-designer/references/DECORATOR-PATTERNS.md +168 -0
  145. package/content/guidance/storefront-next/sfnext-page-designer/references/REVIEW-CHECKLIST.md +83 -0
  146. package/content/guidance/storefront-next/sfnext-page-designer/references/TROUBLESHOOTING.md +35 -0
  147. package/content/guidance/storefront-next/sfnext-performance/SKILL.md +102 -0
  148. package/content/guidance/storefront-next/sfnext-performance/references/PERFORMANCE-REVIEW-CHECKLIST.md +85 -0
  149. package/content/guidance/storefront-next/sfnext-performance/references/SUSPENSE-AND-STREAMING.md +58 -0
  150. package/content/guidance/storefront-next/sfnext-project-setup/SKILL.md +147 -0
  151. package/content/guidance/storefront-next/sfnext-project-setup/references/PROJECT-STRUCTURE.md +61 -0
  152. package/content/guidance/storefront-next/sfnext-project-setup/references/SCRIPTS.md +47 -0
  153. package/content/guidance/storefront-next/sfnext-project-setup/references/SFNEXT-CLI.md +63 -0
  154. package/content/guidance/storefront-next/sfnext-quality-gates/SKILL.md +70 -0
  155. package/content/guidance/storefront-next/sfnext-quality-gates/references/lint-and-budgets.md +39 -0
  156. package/content/guidance/storefront-next/sfnext-revalidation/SKILL.md +121 -0
  157. package/content/guidance/storefront-next/sfnext-revalidation/references/POLICIES-AND-TAGS.md +55 -0
  158. package/content/guidance/storefront-next/sfnext-routing/SKILL.md +123 -0
  159. package/content/guidance/storefront-next/sfnext-routing/references/ROUTE-CONVENTIONS.md +65 -0
  160. package/content/guidance/storefront-next/sfnext-routing/references/URLS-AND-SEO-ROUTES.md +22 -0
  161. package/content/guidance/storefront-next/sfnext-scapi/SKILL.md +126 -0
  162. package/content/guidance/storefront-next/sfnext-scapi/references/WORKED-EXAMPLE.md +39 -0
  163. package/content/guidance/storefront-next/sfnext-security/SKILL.md +129 -0
  164. package/content/guidance/storefront-next/sfnext-security/references/COOKIE-DOMAIN.md +39 -0
  165. package/content/guidance/storefront-next/sfnext-security/references/TURNSTILE.md +43 -0
  166. package/content/guidance/storefront-next/sfnext-seo/SKILL.md +95 -0
  167. package/content/guidance/storefront-next/sfnext-seo/references/MULTI-DOMAIN-BASE-PATH.md +17 -0
  168. package/content/guidance/storefront-next/sfnext-seo/references/SEO-ROUTES.md +31 -0
  169. package/content/guidance/storefront-next/sfnext-state-management/SKILL.md +114 -0
  170. package/content/guidance/storefront-next/sfnext-state-management/references/PATTERNS.md +45 -0
  171. package/content/guidance/storefront-next/sfnext-testing/SKILL.md +151 -0
  172. package/content/guidance/storefront-next/sfnext-testing/references/E2E.md +38 -0
  173. package/content/guidance/storefront-next/sfnext-testing/references/STORYBOOK-PATTERNS.md +97 -0
  174. package/content/guidance/storefront-next/sfnext-testing/references/UNIT-AND-ROUTE-TESTS.md +60 -0
  175. package/content/guidance/storefront-next/sfnext-theming/SKILL.md +104 -0
  176. package/content/guidance/storefront-next/sfnext-theming/references/REBRAND-CHECKLIST.md +29 -0
  177. package/dist/commands/cap/install.d.ts +1 -0
  178. package/dist/commands/cap/list.d.ts +1 -0
  179. package/dist/commands/cap/pull.d.ts +1 -0
  180. package/dist/commands/cap/tasks.d.ts +1 -0
  181. package/dist/commands/cap/uninstall.d.ts +1 -0
  182. package/dist/commands/cip/describe.d.ts +1 -0
  183. package/dist/commands/cip/query.d.ts +1 -0
  184. package/dist/commands/cip/report/bot-traffic-share.d.ts +1 -0
  185. package/dist/commands/cip/report/checkout-funnel-dropoff.d.ts +1 -0
  186. package/dist/commands/cip/report/controller-error-rate-trend.d.ts +1 -0
  187. package/dist/commands/cip/report/controller-health-scorecard.d.ts +1 -0
  188. package/dist/commands/cip/report/customer-registration-trends.d.ts +1 -0
  189. package/dist/commands/cip/report/discount-depth-breakdown.d.ts +1 -0
  190. package/dist/commands/cip/report/inventory-stockout-by-location.d.ts +1 -0
  191. package/dist/commands/cip/report/new-vs-returning-buyer-revenue.d.ts +1 -0
  192. package/dist/commands/cip/report/ocapi-client-usage.d.ts +1 -0
  193. package/dist/commands/cip/report/ocapi-requests.d.ts +1 -0
  194. package/dist/commands/cip/report/payment-method-performance.d.ts +1 -0
  195. package/dist/commands/cip/report/product-co-purchase-analysis.d.ts +1 -0
  196. package/dist/commands/cip/report/promotion-discount-analysis.d.ts +1 -0
  197. package/dist/commands/cip/report/promotion-roi-leaderboard.d.ts +1 -0
  198. package/dist/commands/cip/report/recommender-effectiveness.d.ts +1 -0
  199. package/dist/commands/cip/report/remote-include-performance.d.ts +1 -0
  200. package/dist/commands/cip/report/revenue-by-channel.d.ts +1 -0
  201. package/dist/commands/cip/report/sales-analytics.d.ts +1 -0
  202. package/dist/commands/cip/report/sales-summary.d.ts +1 -0
  203. package/dist/commands/cip/report/scapi-cache-hit-ratio.d.ts +1 -0
  204. package/dist/commands/cip/report/scapi-error-rate-by-status.d.ts +1 -0
  205. package/dist/commands/cip/report/scapi-latency-distribution.d.ts +1 -0
  206. package/dist/commands/cip/report/scapi-traffic-latency.d.ts +1 -0
  207. package/dist/commands/cip/report/search-query-performance.d.ts +1 -0
  208. package/dist/commands/cip/report/top-referrers.d.ts +1 -0
  209. package/dist/commands/cip/report/top-selling-products.d.ts +1 -0
  210. package/dist/commands/cip/report/zero-result-searches.d.ts +1 -0
  211. package/dist/commands/cip/tables.d.ts +1 -0
  212. package/dist/commands/code/activate.d.ts +1 -0
  213. package/dist/commands/code/delete.d.ts +1 -0
  214. package/dist/commands/code/deploy.d.ts +1 -0
  215. package/dist/commands/code/download.d.ts +1 -0
  216. package/dist/commands/code/watch.d.ts +1 -0
  217. package/dist/commands/commands/search.d.ts +35 -0
  218. package/dist/commands/commands/search.js +85 -0
  219. package/dist/commands/commands/search.js.map +1 -0
  220. package/dist/commands/content/export.d.ts +1 -0
  221. package/dist/commands/content/list.d.ts +1 -0
  222. package/dist/commands/content/validate.d.ts +1 -0
  223. package/dist/commands/debug/cli.d.ts +1 -0
  224. package/dist/commands/debug/index.d.ts +1 -0
  225. package/dist/commands/docs/cache.d.ts +1 -0
  226. package/dist/commands/docs/download.d.ts +1 -0
  227. package/dist/commands/docs/read.d.ts +1 -0
  228. package/dist/commands/docs/schema.d.ts +1 -0
  229. package/dist/commands/docs/search.d.ts +1 -0
  230. package/dist/commands/docs/skill.d.ts +41 -0
  231. package/dist/commands/docs/skill.js +183 -0
  232. package/dist/commands/docs/skill.js.map +1 -0
  233. package/dist/commands/ecdn/cache/purge.d.ts +1 -0
  234. package/dist/commands/ecdn/certificates/add.d.ts +1 -0
  235. package/dist/commands/ecdn/certificates/delete.d.ts +1 -0
  236. package/dist/commands/ecdn/certificates/list.d.ts +1 -0
  237. package/dist/commands/ecdn/certificates/update.d.ts +1 -0
  238. package/dist/commands/ecdn/certificates/validate.d.ts +1 -0
  239. package/dist/commands/ecdn/cipher-suites/get.d.ts +1 -0
  240. package/dist/commands/ecdn/cipher-suites/update.d.ts +1 -0
  241. package/dist/commands/ecdn/firewall/create.d.ts +1 -0
  242. package/dist/commands/ecdn/firewall/delete.d.ts +1 -0
  243. package/dist/commands/ecdn/firewall/get.d.ts +1 -0
  244. package/dist/commands/ecdn/firewall/list.d.ts +1 -0
  245. package/dist/commands/ecdn/firewall/reorder.d.ts +1 -0
  246. package/dist/commands/ecdn/firewall/update.d.ts +1 -0
  247. package/dist/commands/ecdn/logpush/jobs/create.d.ts +1 -0
  248. package/dist/commands/ecdn/logpush/jobs/delete.d.ts +1 -0
  249. package/dist/commands/ecdn/logpush/jobs/get.d.ts +1 -0
  250. package/dist/commands/ecdn/logpush/jobs/list.d.ts +1 -0
  251. package/dist/commands/ecdn/logpush/jobs/update.d.ts +1 -0
  252. package/dist/commands/ecdn/logpush/ownership.d.ts +1 -0
  253. package/dist/commands/ecdn/mrt-rules/create.d.ts +1 -0
  254. package/dist/commands/ecdn/mrt-rules/delete.d.ts +1 -0
  255. package/dist/commands/ecdn/mrt-rules/get.d.ts +1 -0
  256. package/dist/commands/ecdn/mrt-rules/rules/delete.d.ts +1 -0
  257. package/dist/commands/ecdn/mrt-rules/rules/update.d.ts +1 -0
  258. package/dist/commands/ecdn/mrt-rules/update.d.ts +1 -0
  259. package/dist/commands/ecdn/mtls/create.d.ts +1 -0
  260. package/dist/commands/ecdn/mtls/delete.d.ts +1 -0
  261. package/dist/commands/ecdn/mtls/get.d.ts +1 -0
  262. package/dist/commands/ecdn/mtls/issue.d.ts +1 -0
  263. package/dist/commands/ecdn/mtls/list.d.ts +1 -0
  264. package/dist/commands/ecdn/mtls/setup.d.ts +1 -0
  265. package/dist/commands/ecdn/origin-headers/delete.d.ts +1 -0
  266. package/dist/commands/ecdn/origin-headers/get.d.ts +1 -0
  267. package/dist/commands/ecdn/origin-headers/set.d.ts +1 -0
  268. package/dist/commands/ecdn/page-shield/notifications/create.d.ts +1 -0
  269. package/dist/commands/ecdn/page-shield/notifications/delete.d.ts +1 -0
  270. package/dist/commands/ecdn/page-shield/notifications/list.d.ts +1 -0
  271. package/dist/commands/ecdn/page-shield/policies/create.d.ts +1 -0
  272. package/dist/commands/ecdn/page-shield/policies/delete.d.ts +1 -0
  273. package/dist/commands/ecdn/page-shield/policies/get.d.ts +1 -0
  274. package/dist/commands/ecdn/page-shield/policies/list.d.ts +1 -0
  275. package/dist/commands/ecdn/page-shield/policies/update.d.ts +1 -0
  276. package/dist/commands/ecdn/page-shield/scripts/get.d.ts +1 -0
  277. package/dist/commands/ecdn/page-shield/scripts/list.d.ts +1 -0
  278. package/dist/commands/ecdn/rate-limit/create.d.ts +1 -0
  279. package/dist/commands/ecdn/rate-limit/delete.d.ts +1 -0
  280. package/dist/commands/ecdn/rate-limit/get.d.ts +1 -0
  281. package/dist/commands/ecdn/rate-limit/list.d.ts +1 -0
  282. package/dist/commands/ecdn/rate-limit/update.d.ts +1 -0
  283. package/dist/commands/ecdn/security/get.d.ts +1 -0
  284. package/dist/commands/ecdn/security/update.d.ts +1 -0
  285. package/dist/commands/ecdn/speed/get.d.ts +1 -0
  286. package/dist/commands/ecdn/speed/update.d.ts +1 -0
  287. package/dist/commands/ecdn/waf/groups/list.d.ts +1 -0
  288. package/dist/commands/ecdn/waf/groups/update.d.ts +1 -0
  289. package/dist/commands/ecdn/waf/managed-rules/list.d.ts +1 -0
  290. package/dist/commands/ecdn/waf/managed-rules/update.d.ts +1 -0
  291. package/dist/commands/ecdn/waf/migrate.d.ts +1 -0
  292. package/dist/commands/ecdn/waf/owasp/get.d.ts +1 -0
  293. package/dist/commands/ecdn/waf/owasp/update.d.ts +1 -0
  294. package/dist/commands/ecdn/waf/rules/get.d.ts +1 -0
  295. package/dist/commands/ecdn/waf/rules/list.d.ts +1 -0
  296. package/dist/commands/ecdn/waf/rules/update.d.ts +1 -0
  297. package/dist/commands/ecdn/waf/rulesets/list.d.ts +1 -0
  298. package/dist/commands/ecdn/waf/rulesets/update.d.ts +1 -0
  299. package/dist/commands/ecdn/zones/create.d.ts +1 -0
  300. package/dist/commands/ecdn/zones/list.d.ts +1 -0
  301. package/dist/commands/job/execution/delete.d.ts +1 -0
  302. package/dist/commands/job/export.d.ts +1 -0
  303. package/dist/commands/job/import-set.d.ts +1 -0
  304. package/dist/commands/job/import.d.ts +1 -0
  305. package/dist/commands/job/log.d.ts +1 -0
  306. package/dist/commands/job/run.d.ts +1 -0
  307. package/dist/commands/job/search.d.ts +1 -0
  308. package/dist/commands/job/wait.d.ts +1 -0
  309. package/dist/commands/logs/get.d.ts +1 -0
  310. package/dist/commands/logs/list.d.ts +1 -0
  311. package/dist/commands/logs/tail.d.ts +1 -0
  312. package/dist/commands/metrics/controller.d.ts +1 -0
  313. package/dist/commands/metrics/ecdn.d.ts +1 -0
  314. package/dist/commands/metrics/mrt.d.ts +1 -0
  315. package/dist/commands/metrics/ocapi.d.ts +1 -0
  316. package/dist/commands/metrics/overall.d.ts +1 -0
  317. package/dist/commands/metrics/sales.d.ts +1 -0
  318. package/dist/commands/metrics/scapi-hooks.d.ts +1 -0
  319. package/dist/commands/metrics/scapi.d.ts +1 -0
  320. package/dist/commands/metrics/third-party.d.ts +1 -0
  321. package/dist/commands/mrt/bundle/delete.d.ts +1 -0
  322. package/dist/commands/mrt/bundle/deploy.d.ts +1 -0
  323. package/dist/commands/mrt/bundle/download.d.ts +1 -0
  324. package/dist/commands/mrt/bundle/history.d.ts +1 -0
  325. package/dist/commands/mrt/bundle/list.d.ts +1 -0
  326. package/dist/commands/mrt/bundle/save.d.ts +1 -0
  327. package/dist/commands/mrt/bundle/upload-v2.d.ts +1 -0
  328. package/dist/commands/mrt/env/access-control/list.d.ts +1 -0
  329. package/dist/commands/mrt/env/b2c.d.ts +1 -0
  330. package/dist/commands/mrt/env/clone.d.ts +1 -0
  331. package/dist/commands/mrt/env/create.d.ts +1 -0
  332. package/dist/commands/mrt/env/delete.d.ts +1 -0
  333. package/dist/commands/mrt/env/get.d.ts +1 -0
  334. package/dist/commands/mrt/env/invalidate.d.ts +1 -0
  335. package/dist/commands/mrt/env/list.d.ts +1 -0
  336. package/dist/commands/mrt/env/redirect/clone.d.ts +1 -0
  337. package/dist/commands/mrt/env/redirect/create.d.ts +1 -0
  338. package/dist/commands/mrt/env/redirect/delete.d.ts +1 -0
  339. package/dist/commands/mrt/env/redirect/list.d.ts +1 -0
  340. package/dist/commands/mrt/env/update.d.ts +1 -0
  341. package/dist/commands/mrt/env/var/delete.d.ts +1 -0
  342. package/dist/commands/mrt/env/var/list.d.ts +1 -0
  343. package/dist/commands/mrt/env/var/push.d.ts +1 -0
  344. package/dist/commands/mrt/env/var/set.d.ts +1 -0
  345. package/dist/commands/mrt/org/b2c.d.ts +1 -0
  346. package/dist/commands/mrt/org/cert/create.d.ts +1 -0
  347. package/dist/commands/mrt/org/cert/delete.d.ts +1 -0
  348. package/dist/commands/mrt/org/cert/get.d.ts +1 -0
  349. package/dist/commands/mrt/org/cert/list.d.ts +1 -0
  350. package/dist/commands/mrt/org/cert/restart-validation.d.ts +1 -0
  351. package/dist/commands/mrt/org/list.d.ts +1 -0
  352. package/dist/commands/mrt/org/member/add.d.ts +1 -0
  353. package/dist/commands/mrt/org/member/get.d.ts +1 -0
  354. package/dist/commands/mrt/org/member/list.d.ts +1 -0
  355. package/dist/commands/mrt/org/member/remove.d.ts +1 -0
  356. package/dist/commands/mrt/org/member/update.d.ts +1 -0
  357. package/dist/commands/mrt/project/create.d.ts +1 -0
  358. package/dist/commands/mrt/project/delete.d.ts +1 -0
  359. package/dist/commands/mrt/project/get.d.ts +1 -0
  360. package/dist/commands/mrt/project/list.d.ts +1 -0
  361. package/dist/commands/mrt/project/member/add.d.ts +1 -0
  362. package/dist/commands/mrt/project/member/get.d.ts +1 -0
  363. package/dist/commands/mrt/project/member/list.d.ts +1 -0
  364. package/dist/commands/mrt/project/member/remove.d.ts +1 -0
  365. package/dist/commands/mrt/project/member/update.d.ts +1 -0
  366. package/dist/commands/mrt/project/notification/delete.d.ts +1 -0
  367. package/dist/commands/mrt/project/notification/get.d.ts +1 -0
  368. package/dist/commands/mrt/project/update.d.ts +1 -0
  369. package/dist/commands/mrt/save-credentials.d.ts +1 -0
  370. package/dist/commands/mrt/tail-logs.d.ts +1 -0
  371. package/dist/commands/mrt/user/api-key.d.ts +1 -0
  372. package/dist/commands/mrt/user/email-prefs.d.ts +1 -0
  373. package/dist/commands/mrt/user/profile.d.ts +1 -0
  374. package/dist/commands/scaffold/init.js +2 -1
  375. package/dist/commands/scaffold/init.js.map +1 -1
  376. package/dist/commands/scapi/custom/status.d.ts +1 -0
  377. package/dist/commands/scapi/schemas/get.d.ts +1 -0
  378. package/dist/commands/scapi/schemas/list.d.ts +1 -0
  379. package/dist/commands/setup/ide/tsserver-plugin.d.ts +1 -0
  380. package/dist/commands/setup/ide/vscode-types.d.ts +1 -0
  381. package/dist/commands/setup/index.js +4 -3
  382. package/dist/commands/setup/index.js.map +1 -1
  383. package/dist/commands/setup/inspect.d.ts +1 -0
  384. package/dist/commands/setup/inspect.js +17 -2
  385. package/dist/commands/setup/inspect.js.map +1 -1
  386. package/dist/commands/setup/instance/create.d.ts +1 -0
  387. package/dist/commands/setup/instance/list.d.ts +1 -0
  388. package/dist/commands/setup/instance/remove.d.ts +1 -0
  389. package/dist/commands/setup/instance/set-active.d.ts +1 -0
  390. package/dist/commands/setup/openshell.d.ts +1 -0
  391. package/dist/commands/setup/skills.d.ts +1 -0
  392. package/dist/commands/slas/client/create.d.ts +1 -0
  393. package/dist/commands/slas/client/delete.d.ts +1 -0
  394. package/dist/commands/slas/client/get.d.ts +1 -0
  395. package/dist/commands/slas/client/list.d.ts +1 -0
  396. package/dist/commands/slas/client/open.d.ts +1 -0
  397. package/dist/commands/slas/client/update.d.ts +1 -0
  398. package/dist/commands/slas/token.d.ts +1 -0
  399. package/dist/commands/slas/token.js +2 -1
  400. package/dist/commands/slas/token.js.map +1 -1
  401. package/dist/commands/webdav/get.d.ts +1 -0
  402. package/dist/commands/webdav/rm.d.ts +1 -0
  403. package/dist/help.d.ts +25 -0
  404. package/dist/help.js +96 -0
  405. package/dist/help.js.map +1 -0
  406. package/dist/lib/scaffold/generate-helper.js +3 -2
  407. package/dist/lib/scaffold/generate-helper.js.map +1 -1
  408. package/dist/lib/skills.d.ts +19 -0
  409. package/dist/lib/skills.js +75 -0
  410. package/dist/lib/skills.js.map +1 -0
  411. package/dist/utils/cip/command.d.ts +1 -0
  412. package/dist/utils/ecdn/zone-command.d.ts +1 -0
  413. package/dist/utils/slas/client.d.ts +1 -0
  414. package/oclif.manifest.json +21814 -18473
  415. package/package.json +11 -5
@@ -0,0 +1,587 @@
1
+ # SOAP Services Reference
2
+
3
+ Patterns for implementing SOAP web service integrations using WSDL-generated stubs.
4
+
5
+ ## SOAPService Methods
6
+
7
+ | Method | Description |
8
+ |--------|-------------|
9
+ | `setServiceClient(stub)` | Set the WSDL-generated service stub |
10
+ | `getServiceClient()` | Get the service stub |
11
+ | `setAuthentication(type)` | Set auth type ("BASIC" or "NONE") |
12
+
13
+ ## SOAP Service Setup
14
+
15
+ ### 1. Upload WSDL
16
+
17
+ Upload your WSDL file to Business Manager:
18
+ 1. Go to **Administration > Development Setup**
19
+ 2. Under **WebDAV** section, navigate to the cartridge
20
+ 3. Upload WSDL to `webreferences2/` folder
21
+
22
+ ### 2. Generate Stub
23
+
24
+ The stub is auto-generated from the WSDL. Access it via:
25
+
26
+ ```javascript
27
+ var stub = webreferences2.MyServiceWSDL.getDefaultService();
28
+ ```
29
+
30
+ ### 3. Create Service Configuration
31
+
32
+ Configure in Business Manager:
33
+ 1. **Service Type**: SOAP
34
+ 2. **URL**: The SOAP endpoint URL
35
+ 3. **Credential**: Authentication credentials
36
+
37
+ ## Basic SOAP Service
38
+
39
+ ```javascript
40
+ var LocalServiceRegistry = require('dw/svc/LocalServiceRegistry');
41
+
42
+ var soapService = LocalServiceRegistry.createService('my.soap.service', {
43
+ /**
44
+ * Create the service client (stub)
45
+ */
46
+ initServiceClient: function (svc) {
47
+ return webreferences2.MyServiceWSDL.getDefaultService();
48
+ },
49
+
50
+ /**
51
+ * Configure the request
52
+ */
53
+ createRequest: function (svc, params) {
54
+ // Create request object from WSDL-generated types
55
+ var request = new webreferences2.MyServiceWSDL.MyRequest();
56
+ request.setId(params.id);
57
+ request.setName(params.name);
58
+ return request;
59
+ },
60
+
61
+ /**
62
+ * Execute the SOAP call
63
+ */
64
+ execute: function (svc, request) {
65
+ var client = svc.serviceClient;
66
+ return client.myOperation(request);
67
+ },
68
+
69
+ /**
70
+ * Parse the response
71
+ */
72
+ parseResponse: function (svc, response) {
73
+ return {
74
+ status: response.getStatus(),
75
+ result: response.getResult()
76
+ };
77
+ },
78
+
79
+ filterLogMessage: function (msg) {
80
+ // Filter sensitive data from SOAP envelope
81
+ msg = msg.replace(/<password>[^<]+<\/password>/gi, '<password>***</password>');
82
+ return msg;
83
+ }
84
+ });
85
+
86
+ // Usage
87
+ var result = soapService.call({ id: '123', name: 'Test' });
88
+ if (result.ok) {
89
+ var data = result.object;
90
+ }
91
+ ```
92
+
93
+ ## Alternative: Set Client in createRequest
94
+
95
+ ```javascript
96
+ var soapService = LocalServiceRegistry.createService('my.soap.service', {
97
+ createRequest: function (svc, params) {
98
+ // Set the service client here instead of initServiceClient
99
+ var stub = webreferences2.MyServiceWSDL.getDefaultService();
100
+ svc.setServiceClient(stub);
101
+
102
+ // Create request
103
+ var request = new webreferences2.MyServiceWSDL.MyRequest();
104
+ request.setId(params.id);
105
+ return request;
106
+ },
107
+
108
+ execute: function (svc, request) {
109
+ return svc.serviceClient.myOperation(request);
110
+ },
111
+
112
+ parseResponse: function (svc, response) {
113
+ return response;
114
+ },
115
+
116
+ filterLogMessage: function (msg) {
117
+ return msg;
118
+ }
119
+ });
120
+ ```
121
+
122
+ ## WS-Security
123
+
124
+ Use `WSUtil` for WS-Security headers:
125
+
126
+ ```javascript
127
+ var WSUtil = require('dw/ws/WSUtil');
128
+ var HashMap = require('dw/util/HashMap');
129
+
130
+ var secureService = LocalServiceRegistry.createService('my.secure.soap', {
131
+ initServiceClient: function (svc) {
132
+ return webreferences2.SecureServiceWSDL.getDefaultService();
133
+ },
134
+
135
+ createRequest: function (svc, params) {
136
+ var stub = svc.serviceClient;
137
+ var credential = svc.configuration.credential;
138
+
139
+ // Add a WS-Security UsernameToken via the WS-Security config map.
140
+ // The password is passed through the secrets map, keyed by user name.
141
+ var requestConfig = new HashMap();
142
+ requestConfig.put(WSUtil.WS_ACTION, WSUtil.WS_USERNAME_TOKEN);
143
+ requestConfig.put(WSUtil.WS_USER, credential.user);
144
+ requestConfig.put(WSUtil.WS_PASSWORD_TYPE, WSUtil.WS_PW_TEXT);
145
+
146
+ var secrets = new HashMap();
147
+ secrets.put(credential.user, credential.password);
148
+ requestConfig.put(WSUtil.WS_SECRETS_MAP, secrets);
149
+
150
+ WSUtil.setWSSecurityConfig(stub, requestConfig, null);
151
+
152
+ var request = new webreferences2.SecureServiceWSDL.SecureRequest();
153
+ request.setData(params.data);
154
+ return request;
155
+ },
156
+
157
+ execute: function (svc, request) {
158
+ return svc.serviceClient.secureOperation(request);
159
+ },
160
+
161
+ parseResponse: function (svc, response) {
162
+ return response;
163
+ },
164
+
165
+ filterLogMessage: function (msg) {
166
+ msg = msg.replace(/<wsse:Password[^>]*>[^<]+<\/wsse:Password>/gi, '<wsse:Password>***</wsse:Password>');
167
+ return msg;
168
+ }
169
+ });
170
+ ```
171
+
172
+ ### WSUtil Methods
173
+
174
+ | Method | Description |
175
+ | ---------------------------------------------------------------- | ---------------------------------------------------- |
176
+ | `setWSSecurityConfig(port, requestConfigMap, responseConfigMap)` | Configure WS-Security for request and response |
177
+ | `setUserNamePassword(user, password, port)` | HTTP Basic authentication (weaker than WS-Security) |
178
+ | `setProperty(key, value, port)` | Set a SOAP property |
179
+ | `getProperty(key, port)` | Read a SOAP property |
180
+ | `addSOAPHeader(port, xml, mustUnderstand, actor)` | Add a custom SOAP header (2nd arg is the header XML) |
181
+ | `clearSOAPHeaders(port)` | Remove previously added headers |
182
+ | `setRequestTimeout(ms, port)` / `setConnectionTimeout(ms, port)` | Timeouts |
183
+ | `setHTTPRequestHeader(port, key, value)` | Set an HTTP-level request header |
184
+
185
+ Key WS-Security config constants: `WS_ACTION`, `WS_USERNAME_TOKEN`, `WS_TIMESTAMP`, `WS_SIGNATURE`,
186
+ `WS_ENCRYPT`, `WS_NO_SECURITY`, `WS_USER`, `WS_PASSWORD_TYPE` (`WS_PW_TEXT` / `WS_PW_DIGEST`), and
187
+ `WS_SECRETS_MAP`. There is no `setWSSecurityUsernameToken()` and no nonce generator — a UsernameToken
188
+ is configured through the map shown above.
189
+
190
+ ### WS-Security with Timestamps
191
+
192
+ ```javascript
193
+ var WSUtil = require('dw/ws/WSUtil');
194
+ var HashMap = require('dw/util/HashMap');
195
+
196
+ var timestampService = LocalServiceRegistry.createService('my.timestamp.soap', {
197
+ initServiceClient: function (svc) {
198
+ return webreferences2.TimestampServiceWSDL.getDefaultService();
199
+ },
200
+
201
+ createRequest: function (svc, params) {
202
+ var stub = svc.serviceClient;
203
+ var credential = svc.configuration.credential;
204
+
205
+ // Username token with timestamp
206
+ // Request both a Timestamp and a UsernameToken. WS_ACTION takes a
207
+ // space-separated list of actions.
208
+ var requestConfig = new HashMap();
209
+ requestConfig.put(WSUtil.WS_ACTION, WSUtil.WS_TIMESTAMP + ' ' + WSUtil.WS_USERNAME_TOKEN);
210
+ requestConfig.put(WSUtil.WS_USER, credential.user);
211
+ requestConfig.put(WSUtil.WS_PASSWORD_TYPE, WSUtil.WS_PW_DIGEST);
212
+
213
+ var secrets = new HashMap();
214
+ secrets.put(credential.user, credential.password);
215
+ requestConfig.put(WSUtil.WS_SECRETS_MAP, secrets);
216
+
217
+ WSUtil.setWSSecurityConfig(stub, requestConfig, null);
218
+
219
+ var request = new webreferences2.TimestampServiceWSDL.Request();
220
+ request.setData(params.data);
221
+ return request;
222
+ },
223
+
224
+ execute: function (svc, request) {
225
+ return svc.serviceClient.operation(request);
226
+ },
227
+
228
+ parseResponse: function (svc, response) {
229
+ return response;
230
+ },
231
+
232
+ filterLogMessage: function (msg) {
233
+ return msg.replace(/<wsse:Password[^>]*>[^<]+<\/wsse:Password>/gi, '<wsse:Password>***</wsse:Password>');
234
+ }
235
+ });
236
+ ```
237
+
238
+ ## Custom SOAP Headers
239
+
240
+ ```javascript
241
+ var WSUtil = require('dw/ws/WSUtil');
242
+ var StringUtils = require('dw/util/StringUtils');
243
+
244
+ var headerService = LocalServiceRegistry.createService('my.header.soap', {
245
+ initServiceClient: function (svc) {
246
+ return webreferences2.HeaderServiceWSDL.getDefaultService();
247
+ },
248
+
249
+ createRequest: function (svc, params) {
250
+ var stub = svc.serviceClient;
251
+
252
+ // Add custom SOAP header. The second argument is the complete header
253
+ // XML — namespaces are declared inline, not passed separately. Escape
254
+ // dynamic values so they cannot break or inject markup into the header.
255
+ WSUtil.addSOAPHeader(
256
+ stub,
257
+ '<ns:CustomHeader xmlns:ns="http://example.com/ns">' +
258
+ '<ns:customValue>' +
259
+ StringUtils.stringToXml(String(params.headerValue)) +
260
+ '</ns:customValue>' +
261
+ '</ns:CustomHeader>',
262
+ false, // mustUnderstand
263
+ null // actor
264
+ );
265
+
266
+ var request = new webreferences2.HeaderServiceWSDL.Request();
267
+ request.setData(params.data);
268
+ return request;
269
+ },
270
+
271
+ execute: function (svc, request) {
272
+ return svc.serviceClient.operation(request);
273
+ },
274
+
275
+ parseResponse: function (svc, response) {
276
+ return response;
277
+ },
278
+
279
+ filterLogMessage: function (msg) {
280
+ return msg;
281
+ }
282
+ });
283
+ ```
284
+
285
+ ## Handling Complex Types
286
+
287
+ WSDL-generated types provide setters and getters:
288
+
289
+ ```javascript
290
+ var orderService = LocalServiceRegistry.createService('my.order.soap', {
291
+ initServiceClient: function (svc) {
292
+ return webreferences2.OrderServiceWSDL.getDefaultService();
293
+ },
294
+
295
+ createRequest: function (svc, order) {
296
+ var request = new webreferences2.OrderServiceWSDL.CreateOrderRequest();
297
+
298
+ // Set order header
299
+ var header = new webreferences2.OrderServiceWSDL.OrderHeader();
300
+ header.setOrderNumber(order.orderNo);
301
+ header.setOrderDate(order.creationDate);
302
+ header.setCurrency(order.currencyCode);
303
+ request.setHeader(header);
304
+
305
+ // Set line items (array)
306
+ var lineItems = [];
307
+ for (var i = 0; i < order.productLineItems.length; i++) {
308
+ var pli = order.productLineItems[i];
309
+ var lineItem = new webreferences2.OrderServiceWSDL.LineItem();
310
+ lineItem.setSku(pli.productID);
311
+ lineItem.setQuantity(pli.quantity.value);
312
+ lineItem.setPrice(pli.price.value);
313
+ lineItems.push(lineItem);
314
+ }
315
+ request.setLineItems(lineItems);
316
+
317
+ // Set shipping address
318
+ var address = new webreferences2.OrderServiceWSDL.Address();
319
+ var shipAddr = order.defaultShipment.shippingAddress;
320
+ address.setFirstName(shipAddr.firstName);
321
+ address.setLastName(shipAddr.lastName);
322
+ address.setAddress1(shipAddr.address1);
323
+ address.setCity(shipAddr.city);
324
+ address.setPostalCode(shipAddr.postalCode);
325
+ address.setCountryCode(shipAddr.countryCode.value);
326
+ request.setShippingAddress(address);
327
+
328
+ return request;
329
+ },
330
+
331
+ execute: function (svc, request) {
332
+ return svc.serviceClient.createOrder(request);
333
+ },
334
+
335
+ parseResponse: function (svc, response) {
336
+ return {
337
+ success: response.isSuccess(),
338
+ externalOrderId: response.getExternalOrderId(),
339
+ message: response.getMessage()
340
+ };
341
+ },
342
+
343
+ filterLogMessage: function (msg) {
344
+ return msg;
345
+ }
346
+ });
347
+ ```
348
+
349
+ ## Error Handling
350
+
351
+ ```javascript
352
+ var robustSoapService = LocalServiceRegistry.createService('my.robust.soap', {
353
+ initServiceClient: function (svc) {
354
+ return webreferences2.RobustServiceWSDL.getDefaultService();
355
+ },
356
+
357
+ createRequest: function (svc, params) {
358
+ var request = new webreferences2.RobustServiceWSDL.Request();
359
+ request.setData(params);
360
+ return request;
361
+ },
362
+
363
+ execute: function (svc, request) {
364
+ try {
365
+ return svc.serviceClient.operation(request);
366
+ } catch (e) {
367
+ // Handle SOAP faults
368
+ var faultMessage = '';
369
+ if (e.faultString) {
370
+ faultMessage = e.faultString;
371
+ } else if (e.message) {
372
+ faultMessage = e.message;
373
+ }
374
+ throw new Error('SOAP Fault: ' + faultMessage);
375
+ }
376
+ },
377
+
378
+ parseResponse: function (svc, response) {
379
+ if (!response) {
380
+ return { success: false, error: 'No response received' };
381
+ }
382
+
383
+ return {
384
+ success: response.getStatus() === 'SUCCESS',
385
+ data: response.getData(),
386
+ errorCode: response.getErrorCode(),
387
+ errorMessage: response.getErrorMessage()
388
+ };
389
+ },
390
+
391
+ filterLogMessage: function (msg) {
392
+ return msg;
393
+ }
394
+ });
395
+ ```
396
+
397
+ ## Mock SOAP Services
398
+
399
+ ```javascript
400
+ var mockSoapService = LocalServiceRegistry.createService('my.mock.soap', {
401
+ initServiceClient: function (svc) {
402
+ return webreferences2.MockServiceWSDL.getDefaultService();
403
+ },
404
+
405
+ createRequest: function (svc, params) {
406
+ var request = new webreferences2.MockServiceWSDL.Request();
407
+ request.setId(params.id);
408
+ return request;
409
+ },
410
+
411
+ execute: function (svc, request) {
412
+ return svc.serviceClient.getData(request);
413
+ },
414
+
415
+ parseResponse: function (svc, response) {
416
+ return {
417
+ id: response.getId(),
418
+ name: response.getName(),
419
+ status: response.getStatus()
420
+ };
421
+ },
422
+
423
+ /**
424
+ * Mock the execute phase
425
+ */
426
+ mockCall: function (svc, request) {
427
+ // Return mock response object
428
+ return {
429
+ getId: function () { return request.getId(); },
430
+ getName: function () { return 'Mock Name'; },
431
+ getStatus: function () { return 'ACTIVE'; }
432
+ };
433
+ },
434
+
435
+ filterLogMessage: function (msg) {
436
+ return msg;
437
+ }
438
+ });
439
+ ```
440
+
441
+ ## Multiple Operations
442
+
443
+ ```javascript
444
+ var multiOpService = LocalServiceRegistry.createService('my.multi.soap', {
445
+ initServiceClient: function (svc) {
446
+ return webreferences2.MultiOpWSDL.getDefaultService();
447
+ },
448
+
449
+ createRequest: function (svc, params) {
450
+ // Store operation type for execute
451
+ svc.operationType = params.operation;
452
+
453
+ var request;
454
+ switch (params.operation) {
455
+ case 'create':
456
+ request = new webreferences2.MultiOpWSDL.CreateRequest();
457
+ request.setData(params.data);
458
+ break;
459
+ case 'update':
460
+ request = new webreferences2.MultiOpWSDL.UpdateRequest();
461
+ request.setId(params.id);
462
+ request.setData(params.data);
463
+ break;
464
+ case 'delete':
465
+ request = new webreferences2.MultiOpWSDL.DeleteRequest();
466
+ request.setId(params.id);
467
+ break;
468
+ }
469
+ return request;
470
+ },
471
+
472
+ execute: function (svc, request) {
473
+ var client = svc.serviceClient;
474
+ switch (svc.operationType) {
475
+ case 'create':
476
+ return client.create(request);
477
+ case 'update':
478
+ return client.update(request);
479
+ case 'delete':
480
+ return client.delete(request);
481
+ }
482
+ },
483
+
484
+ parseResponse: function (svc, response) {
485
+ return {
486
+ success: response.isSuccess(),
487
+ message: response.getMessage()
488
+ };
489
+ },
490
+
491
+ filterLogMessage: function (msg) {
492
+ return msg;
493
+ }
494
+ });
495
+
496
+ // Usage
497
+ var createResult = multiOpService.call({
498
+ operation: 'create',
499
+ data: { name: 'New Item' }
500
+ });
501
+
502
+ var updateResult = multiOpService.call({
503
+ operation: 'update',
504
+ id: '123',
505
+ data: { name: 'Updated Item' }
506
+ });
507
+ ```
508
+
509
+ ## Setting SOAP Endpoint
510
+
511
+ Override the endpoint URL at runtime:
512
+
513
+ ```javascript
514
+ var dynamicEndpointService = LocalServiceRegistry.createService('my.dynamic.soap', {
515
+ initServiceClient: function (svc) {
516
+ return webreferences2.DynamicWSDL.getDefaultService();
517
+ },
518
+
519
+ createRequest: function (svc, params) {
520
+ // Override endpoint if specified
521
+ if (params.endpoint) {
522
+ svc.setURL(params.endpoint);
523
+ }
524
+
525
+ var request = new webreferences2.DynamicWSDL.Request();
526
+ request.setData(params.data);
527
+ return request;
528
+ },
529
+
530
+ execute: function (svc, request) {
531
+ return svc.serviceClient.operation(request);
532
+ },
533
+
534
+ parseResponse: function (svc, response) {
535
+ return response;
536
+ },
537
+
538
+ filterLogMessage: function (msg) {
539
+ return msg;
540
+ }
541
+ });
542
+
543
+ // Usage with custom endpoint
544
+ var result = dynamicEndpointService.call({
545
+ endpoint: 'https://custom-endpoint.example.com/soap',
546
+ data: { key: 'value' }
547
+ });
548
+ ```
549
+
550
+ ## MTOM/Attachments
551
+
552
+ For SOAP services with binary attachments:
553
+
554
+ ```javascript
555
+ var WSUtil = require('dw/ws/WSUtil');
556
+
557
+ var mtomService = LocalServiceRegistry.createService('my.mtom.soap', {
558
+ initServiceClient: function (svc) {
559
+ // MTOM is enabled by the WSDL/web-reference binding, not by a WSUtil
560
+ // property — there is no MTOM constant on WSUtil.
561
+ return webreferences2.MTOMServiceWSDL.getDefaultService();
562
+ },
563
+
564
+ createRequest: function (svc, params) {
565
+ var request = new webreferences2.MTOMServiceWSDL.UploadRequest();
566
+ request.setFileName(params.fileName);
567
+ request.setFileData(params.fileData); // byte array
568
+ return request;
569
+ },
570
+
571
+ execute: function (svc, request) {
572
+ return svc.serviceClient.upload(request);
573
+ },
574
+
575
+ parseResponse: function (svc, response) {
576
+ return {
577
+ success: response.isSuccess(),
578
+ fileId: response.getFileId()
579
+ };
580
+ },
581
+
582
+ filterLogMessage: function (msg) {
583
+ // Don't log binary data
584
+ return msg.replace(/<fileData>[^<]*<\/fileData>/gi, '<fileData>***BINARY***</fileData>');
585
+ }
586
+ });
587
+ ```