sfcc-dev-mcp 1.0.19 → 1.0.21
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/dist/clients/logs/index.d.ts +13 -0
- package/dist/clients/logs/index.d.ts.map +1 -0
- package/dist/clients/logs/index.js +15 -0
- package/dist/clients/logs/index.js.map +1 -0
- package/dist/clients/logs/log-analyzer.d.ts +55 -0
- package/dist/clients/logs/log-analyzer.d.ts.map +1 -0
- package/dist/clients/logs/log-analyzer.js +228 -0
- package/dist/clients/logs/log-analyzer.js.map +1 -0
- package/dist/clients/logs/log-client.d.ts +87 -0
- package/dist/clients/logs/log-client.d.ts.map +1 -0
- package/dist/clients/logs/log-client.js +418 -0
- package/dist/clients/logs/log-client.js.map +1 -0
- package/dist/clients/logs/log-constants.d.ts +37 -0
- package/dist/clients/logs/log-constants.d.ts.map +1 -0
- package/dist/clients/logs/log-constants.js +37 -0
- package/dist/clients/logs/log-constants.js.map +1 -0
- package/dist/clients/logs/log-file-discovery.d.ts +64 -0
- package/dist/clients/logs/log-file-discovery.d.ts.map +1 -0
- package/dist/clients/logs/log-file-discovery.js +249 -0
- package/dist/clients/logs/log-file-discovery.js.map +1 -0
- package/dist/clients/logs/log-file-reader.d.ts +55 -0
- package/dist/clients/logs/log-file-reader.d.ts.map +1 -0
- package/dist/clients/logs/log-file-reader.js +207 -0
- package/dist/clients/logs/log-file-reader.js.map +1 -0
- package/dist/clients/logs/log-formatter.d.ts +90 -0
- package/dist/clients/logs/log-formatter.d.ts.map +1 -0
- package/dist/clients/logs/log-formatter.js +189 -0
- package/dist/clients/logs/log-formatter.js.map +1 -0
- package/dist/clients/logs/log-processor.d.ts +91 -0
- package/dist/clients/logs/log-processor.d.ts.map +1 -0
- package/dist/clients/logs/log-processor.js +328 -0
- package/dist/clients/logs/log-processor.js.map +1 -0
- package/dist/clients/logs/log-types.d.ts +58 -0
- package/dist/clients/logs/log-types.d.ts.map +1 -0
- package/dist/clients/logs/log-types.js +8 -0
- package/dist/clients/logs/log-types.js.map +1 -0
- package/dist/clients/logs/webdav-client-manager.d.ts +28 -0
- package/dist/clients/logs/webdav-client-manager.d.ts.map +1 -0
- package/dist/clients/logs/webdav-client-manager.js +77 -0
- package/dist/clients/logs/webdav-client-manager.js.map +1 -0
- package/dist/docs/dw_customer/CustomerMgr.md +3 -3
- package/dist/docs/dw_customer/Wallet.md +25 -0
- package/dist/docs/dw_extensions.payments/SalesforceAdyenPaymentIntent.md +156 -0
- package/dist/docs/dw_extensions.payments/SalesforceAdyenSavedPaymentMethod.md +258 -0
- package/dist/docs/dw_extensions.payments/SalesforcePayPalOrder.md +36 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentIntent.md +1 -1
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsHooks.md +68 -1
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMerchantAccount.md +154 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMerchantAccountPaymentMethod.md +96 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMgr.md +311 -2
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsSiteConfiguration.md +26 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsZone.md +458 -0
- package/dist/docs/dw_order/OrderMgr.md +3 -3
- package/dist/docs/dw_order.hooks/BasketMergeHooks.md +4 -4
- package/dist/docs/dw_order.hooks/CheckoutHooks.md +42 -0
- package/dist/utils/path-resolver.d.ts +5 -0
- package/dist/utils/path-resolver.d.ts.map +1 -1
- package/dist/utils/path-resolver.js +27 -5
- package/dist/utils/path-resolver.js.map +1 -1
- package/package.json +9 -3
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -131
- package/.github/ISSUE_TEMPLATE/config.yml +0 -9
- package/.github/ISSUE_TEMPLATE/documentation.yml +0 -117
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -151
- package/.github/ISSUE_TEMPLATE/question.yml +0 -102
- package/.github/PULL_REQUEST_TEMPLATE/bug_fix.md +0 -59
- package/.github/PULL_REQUEST_TEMPLATE/documentation.md +0 -48
- package/.github/PULL_REQUEST_TEMPLATE/new_tool.md +0 -55
- package/.github/agents/official-docs-researcher.agent.md +0 -56
- package/.github/dependabot.yml +0 -65
- package/.github/instructions/mcp-node-tests.instructions.md +0 -30
- package/.github/instructions/mcp-yml-tests.instructions.md +0 -27
- package/.github/pull_request_template.md +0 -103
- package/.github/skills/agent-authoring/SKILL.md +0 -66
- package/.github/skills/mcp-log-debugging/SKILL.md +0 -69
- package/.github/skills/mcp-programmatic-testing/SKILL.md +0 -142
- package/.github/skills/mcp-yaml-testing/SKILL.md +0 -136
- package/.github/skills/salesforce-developer-site-scraper/SKILL.md +0 -102
- package/.github/skills/salesforce-developer-site-scraper/scripts/scrape-to-markdown.js +0 -205
- package/.github/skills/salesforce-help-site-scraper/SKILL.md +0 -84
- package/.github/skills/salesforce-help-site-scraper/scripts/scrape-help-to-markdown.js +0 -212
- package/.github/skills/skill-authoring/SKILL.md +0 -228
- package/.github/skills/skill-authoring/references/PATTERNS.md +0 -384
- package/.github/workflows/ci.yml +0 -103
- package/.github/workflows/deploy-pages.yml +0 -59
- package/.github/workflows/publish.yml +0 -112
- package/.github/workflows/update-docs.yml +0 -182
- package/.husky/pre-commit +0 -2
- package/AGENTS.md +0 -638
- package/CONTRIBUTING.md +0 -323
- package/SECURITY.md +0 -148
- package/aegis.config.docs-only.json +0 -9
- package/aegis.config.json +0 -12
- package/aegis.config.with-dw.json +0 -15
- package/ai-instructions/AGENTS.md +0 -628
- package/ai-instructions/skills/sfcc-caching/SKILL.md +0 -89
- package/ai-instructions/skills/sfcc-cartridge-development/SKILL.md +0 -240
- package/ai-instructions/skills/sfcc-forms-development/SKILL.md +0 -261
- package/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +0 -143
- package/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +0 -127
- package/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +0 -95
- package/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +0 -39
- package/ai-instructions/skills/sfcc-isml-development/SKILL.md +0 -370
- package/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +0 -116
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +0 -50
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +0 -45
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +0 -85
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +0 -63
- package/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +0 -159
- package/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +0 -13
- package/ai-instructions/skills/sfcc-job-development/SKILL.md +0 -334
- package/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +0 -393
- package/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +0 -271
- package/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +0 -257
- package/ai-instructions/skills/sfcc-localization/SKILL.md +0 -92
- package/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +0 -63
- package/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +0 -29
- package/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +0 -33
- package/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +0 -41
- package/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +0 -35
- package/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +0 -740
- package/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +0 -25
- package/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +0 -67
- package/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +0 -23
- package/ai-instructions/skills/sfcc-localization/references/TESTING.md +0 -21
- package/ai-instructions/skills/sfcc-localserviceregistry/SKILL.md +0 -374
- package/ai-instructions/skills/sfcc-logging/SKILL.md +0 -352
- package/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +0 -282
- package/ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md +0 -350
- package/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +0 -108
- package/ai-instructions/skills/sfcc-page-designer/SKILL.md +0 -353
- package/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +0 -436
- package/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +0 -322
- package/ai-instructions/skills/sfcc-performance/SKILL.md +0 -424
- package/ai-instructions/skills/sfcc-platform-limits/SKILL.md +0 -89
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +0 -237
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +0 -214
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +0 -253
- package/ai-instructions/skills/sfcc-scapi-hooks/SKILL.md +0 -341
- package/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +0 -380
- package/ai-instructions/skills/sfcc-security/SKILL.md +0 -394
- package/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +0 -270
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +0 -285
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +0 -206
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +0 -165
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +0 -185
- package/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +0 -347
- package/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +0 -257
- package/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +0 -193
- package/ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md +0 -814
- package/ai-instructions/skills/sfcc-sfra-models/SKILL.md +0 -322
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +0 -530
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +0 -234
- package/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +0 -417
- package/ai-instructions/skills/sfcc-sfra-scss/SKILL.md +0 -393
- package/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +0 -111
- package/docs/TopLevel/APIException.md +0 -68
- package/docs/TopLevel/Array.md +0 -897
- package/docs/TopLevel/ArrayBuffer.md +0 -79
- package/docs/TopLevel/BigInt.md +0 -132
- package/docs/TopLevel/Boolean.md +0 -62
- package/docs/TopLevel/ConversionError.md +0 -23
- package/docs/TopLevel/DataView.md +0 -352
- package/docs/TopLevel/Date.md +0 -924
- package/docs/TopLevel/ES6Iterator.md +0 -33
- package/docs/TopLevel/Error.md +0 -88
- package/docs/TopLevel/EvalError.md +0 -23
- package/docs/TopLevel/Fault.md +0 -87
- package/docs/TopLevel/Float32Array.md +0 -130
- package/docs/TopLevel/Float64Array.md +0 -130
- package/docs/TopLevel/Function.md +0 -105
- package/docs/TopLevel/Generator.md +0 -78
- package/docs/TopLevel/IOError.md +0 -62
- package/docs/TopLevel/Int16Array.md +0 -130
- package/docs/TopLevel/Int32Array.md +0 -130
- package/docs/TopLevel/Int8Array.md +0 -130
- package/docs/TopLevel/InternalError.md +0 -23
- package/docs/TopLevel/Iterable.md +0 -41
- package/docs/TopLevel/Iterator.md +0 -48
- package/docs/TopLevel/JSON.md +0 -162
- package/docs/TopLevel/Map.md +0 -216
- package/docs/TopLevel/Math.md +0 -913
- package/docs/TopLevel/Module.md +0 -45
- package/docs/TopLevel/Namespace.md +0 -96
- package/docs/TopLevel/Number.md +0 -417
- package/docs/TopLevel/Object.md +0 -641
- package/docs/TopLevel/QName.md +0 -96
- package/docs/TopLevel/RangeError.md +0 -23
- package/docs/TopLevel/ReferenceError.md +0 -23
- package/docs/TopLevel/RegExp.md +0 -109
- package/docs/TopLevel/Set.md +0 -165
- package/docs/TopLevel/StopIteration.md +0 -20
- package/docs/TopLevel/String.md +0 -1299
- package/docs/TopLevel/Symbol.md +0 -78
- package/docs/TopLevel/SyntaxError.md +0 -23
- package/docs/TopLevel/SystemError.md +0 -62
- package/docs/TopLevel/TypeError.md +0 -23
- package/docs/TopLevel/URIError.md +0 -23
- package/docs/TopLevel/Uint16Array.md +0 -130
- package/docs/TopLevel/Uint32Array.md +0 -130
- package/docs/TopLevel/Uint8Array.md +0 -130
- package/docs/TopLevel/Uint8ClampedArray.md +0 -130
- package/docs/TopLevel/WeakMap.md +0 -137
- package/docs/TopLevel/WeakSet.md +0 -92
- package/docs/TopLevel/XML.md +0 -937
- package/docs/TopLevel/XMLList.md +0 -484
- package/docs/TopLevel/XMLStreamError.md +0 -74
- package/docs/TopLevel/arguments.md +0 -34
- package/docs/TopLevel/global.md +0 -474
- package/docs/dw_campaign/ABTest.md +0 -47
- package/docs/dw_campaign/ABTestMgr.md +0 -70
- package/docs/dw_campaign/ABTestSegment.md +0 -96
- package/docs/dw_campaign/AmountDiscount.md +0 -51
- package/docs/dw_campaign/ApproachingDiscount.md +0 -124
- package/docs/dw_campaign/BonusChoiceDiscount.md +0 -146
- package/docs/dw_campaign/BonusDiscount.md +0 -48
- package/docs/dw_campaign/Campaign.md +0 -365
- package/docs/dw_campaign/CampaignMgr.md +0 -395
- package/docs/dw_campaign/CampaignStatusCodes.md +0 -48
- package/docs/dw_campaign/Coupon.md +0 -310
- package/docs/dw_campaign/CouponMgr.md +0 -144
- package/docs/dw_campaign/CouponRedemption.md +0 -94
- package/docs/dw_campaign/CouponStatusCodes.md +0 -86
- package/docs/dw_campaign/Discount.md +0 -226
- package/docs/dw_campaign/DiscountPlan.md +0 -282
- package/docs/dw_campaign/FixedPriceDiscount.md +0 -52
- package/docs/dw_campaign/FixedPriceShippingDiscount.md +0 -52
- package/docs/dw_campaign/FreeDiscount.md +0 -17
- package/docs/dw_campaign/FreeShippingDiscount.md +0 -17
- package/docs/dw_campaign/PercentageDiscount.md +0 -52
- package/docs/dw_campaign/PercentageOptionDiscount.md +0 -48
- package/docs/dw_campaign/PriceBookPriceDiscount.md +0 -47
- package/docs/dw_campaign/Promotion.md +0 -874
- package/docs/dw_campaign/PromotionMgr.md +0 -386
- package/docs/dw_campaign/PromotionPlan.md +0 -330
- package/docs/dw_campaign/SlotContent.md +0 -144
- package/docs/dw_campaign/SourceCodeGroup.md +0 -72
- package/docs/dw_campaign/SourceCodeInfo.md +0 -144
- package/docs/dw_campaign/SourceCodeStatusCodes.md +0 -36
- package/docs/dw_campaign/TotalFixedPriceDiscount.md +0 -47
- package/docs/dw_catalog/Catalog.md +0 -122
- package/docs/dw_catalog/CatalogMgr.md +0 -182
- package/docs/dw_catalog/Category.md +0 -1308
- package/docs/dw_catalog/CategoryAssignment.md +0 -192
- package/docs/dw_catalog/CategoryLink.md +0 -126
- package/docs/dw_catalog/PriceBook.md +0 -242
- package/docs/dw_catalog/PriceBookMgr.md +0 -204
- package/docs/dw_catalog/Product.md +0 -2593
- package/docs/dw_catalog/ProductActiveData.md +0 -1275
- package/docs/dw_catalog/ProductAttributeModel.md +0 -277
- package/docs/dw_catalog/ProductAvailabilityLevels.md +0 -142
- package/docs/dw_catalog/ProductAvailabilityModel.md +0 -380
- package/docs/dw_catalog/ProductInventoryList.md +0 -140
- package/docs/dw_catalog/ProductInventoryMgr.md +0 -117
- package/docs/dw_catalog/ProductInventoryRecord.md +0 -563
- package/docs/dw_catalog/ProductLink.md +0 -144
- package/docs/dw_catalog/ProductMgr.md +0 -138
- package/docs/dw_catalog/ProductOption.md +0 -214
- package/docs/dw_catalog/ProductOptionModel.md +0 -246
- package/docs/dw_catalog/ProductOptionValue.md +0 -123
- package/docs/dw_catalog/ProductPriceInfo.md +0 -172
- package/docs/dw_catalog/ProductPriceModel.md +0 -745
- package/docs/dw_catalog/ProductPriceTable.md +0 -134
- package/docs/dw_catalog/ProductSearchHit.md +0 -581
- package/docs/dw_catalog/ProductSearchModel.md +0 -2018
- package/docs/dw_catalog/ProductSearchRefinementDefinition.md +0 -97
- package/docs/dw_catalog/ProductSearchRefinementValue.md +0 -73
- package/docs/dw_catalog/ProductSearchRefinements.md +0 -216
- package/docs/dw_catalog/ProductVariationAttribute.md +0 -100
- package/docs/dw_catalog/ProductVariationAttributeValue.md +0 -238
- package/docs/dw_catalog/ProductVariationModel.md +0 -849
- package/docs/dw_catalog/Recommendation.md +0 -314
- package/docs/dw_catalog/SearchModel.md +0 -901
- package/docs/dw_catalog/SearchRefinementDefinition.md +0 -146
- package/docs/dw_catalog/SearchRefinementValue.md +0 -185
- package/docs/dw_catalog/SearchRefinements.md +0 -180
- package/docs/dw_catalog/SortingOption.md +0 -120
- package/docs/dw_catalog/SortingRule.md +0 -47
- package/docs/dw_catalog/Store.md +0 -562
- package/docs/dw_catalog/StoreGroup.md +0 -96
- package/docs/dw_catalog/StoreInventoryFilter.md +0 -74
- package/docs/dw_catalog/StoreInventoryFilterValue.md +0 -74
- package/docs/dw_catalog/StoreMgr.md +0 -236
- package/docs/dw_catalog/Variant.md +0 -859
- package/docs/dw_catalog/VariationGroup.md +0 -792
- package/docs/dw_content/Content.md +0 -534
- package/docs/dw_content/ContentMgr.md +0 -166
- package/docs/dw_content/ContentSearchModel.md +0 -682
- package/docs/dw_content/ContentSearchRefinementDefinition.md +0 -49
- package/docs/dw_content/ContentSearchRefinementValue.md +0 -17
- package/docs/dw_content/ContentSearchRefinements.md +0 -208
- package/docs/dw_content/Folder.md +0 -467
- package/docs/dw_content/Library.md +0 -121
- package/docs/dw_content/MarkupText.md +0 -88
- package/docs/dw_content/MediaFile.md +0 -317
- package/docs/dw_crypto/CertificateRef.md +0 -42
- package/docs/dw_crypto/CertificateUtils.md +0 -187
- package/docs/dw_crypto/Cipher.md +0 -530
- package/docs/dw_crypto/Encoding.md +0 -220
- package/docs/dw_crypto/JWE.md +0 -224
- package/docs/dw_crypto/JWEHeader.md +0 -172
- package/docs/dw_crypto/JWS.md +0 -264
- package/docs/dw_crypto/JWSHeader.md +0 -148
- package/docs/dw_crypto/KeyRef.md +0 -44
- package/docs/dw_crypto/Mac.md +0 -139
- package/docs/dw_crypto/MessageDigest.md +0 -175
- package/docs/dw_crypto/SecureRandom.md +0 -148
- package/docs/dw_crypto/Signature.md +0 -252
- package/docs/dw_crypto/WeakCipher.md +0 -538
- package/docs/dw_crypto/WeakMac.md +0 -121
- package/docs/dw_crypto/WeakMessageDigest.md +0 -163
- package/docs/dw_crypto/WeakSignature.md +0 -242
- package/docs/dw_crypto/X509Certificate.md +0 -193
- package/docs/dw_customer/AddressBook.md +0 -163
- package/docs/dw_customer/AgentUserMgr.md +0 -83
- package/docs/dw_customer/AgentUserStatusCodes.md +0 -96
- package/docs/dw_customer/AuthenticationStatus.md +0 -138
- package/docs/dw_customer/Credentials.md +0 -494
- package/docs/dw_customer/Customer.md +0 -571
- package/docs/dw_customer/CustomerActiveData.md +0 -552
- package/docs/dw_customer/CustomerAddress.md +0 -852
- package/docs/dw_customer/CustomerCDPData.md +0 -70
- package/docs/dw_customer/CustomerContextMgr.md +0 -64
- package/docs/dw_customer/CustomerGroup.md +0 -134
- package/docs/dw_customer/CustomerList.md +0 -71
- package/docs/dw_customer/CustomerMgr.md +0 -735
- package/docs/dw_customer/CustomerPasswordConstraints.md +0 -142
- package/docs/dw_customer/CustomerPaymentInstrument.md +0 -125
- package/docs/dw_customer/CustomerStatusCodes.md +0 -30
- package/docs/dw_customer/EncryptedObject.md +0 -18
- package/docs/dw_customer/ExternalProfile.md +0 -160
- package/docs/dw_customer/OrderHistory.md +0 -111
- package/docs/dw_customer/ProductList.md +0 -1000
- package/docs/dw_customer/ProductListItem.md +0 -504
- package/docs/dw_customer/ProductListItemPurchase.md +0 -145
- package/docs/dw_customer/ProductListMgr.md +0 -234
- package/docs/dw_customer/ProductListRegistrant.md +0 -193
- package/docs/dw_customer/Profile.md +0 -1128
- package/docs/dw_customer/Wallet.md +0 -118
- package/docs/dw_extensions.applepay/ApplePayHookResult.md +0 -209
- package/docs/dw_extensions.applepay/ApplePayHooks.md +0 -255
- package/docs/dw_extensions.facebook/FacebookFeedHooks.md +0 -47
- package/docs/dw_extensions.facebook/FacebookProduct.md +0 -1621
- package/docs/dw_extensions.paymentrequest/PaymentRequestHookResult.md +0 -159
- package/docs/dw_extensions.paymentrequest/PaymentRequestHooks.md +0 -160
- package/docs/dw_extensions.payments/SalesforceBancontactPaymentDetails.md +0 -79
- package/docs/dw_extensions.payments/SalesforceCardPaymentDetails.md +0 -103
- package/docs/dw_extensions.payments/SalesforceEpsPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceIdealPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceKlarnaPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforcePayPalOrder.md +0 -246
- package/docs/dw_extensions.payments/SalesforcePayPalOrderAddress.md +0 -191
- package/docs/dw_extensions.payments/SalesforcePayPalOrderPayer.md +0 -118
- package/docs/dw_extensions.payments/SalesforcePayPalPaymentDetails.md +0 -79
- package/docs/dw_extensions.payments/SalesforcePaymentDetails.md +0 -57
- package/docs/dw_extensions.payments/SalesforcePaymentIntent.md +0 -281
- package/docs/dw_extensions.payments/SalesforcePaymentMethod.md +0 -346
- package/docs/dw_extensions.payments/SalesforcePaymentRequest.md +0 -784
- package/docs/dw_extensions.payments/SalesforcePaymentsHooks.md +0 -45
- package/docs/dw_extensions.payments/SalesforcePaymentsMgr.md +0 -634
- package/docs/dw_extensions.payments/SalesforcePaymentsSiteConfiguration.md +0 -95
- package/docs/dw_extensions.payments/SalesforceSepaDebitPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceVenmoPaymentDetails.md +0 -79
- package/docs/dw_extensions.pinterest/PinterestAvailability.md +0 -86
- package/docs/dw_extensions.pinterest/PinterestFeedHooks.md +0 -69
- package/docs/dw_extensions.pinterest/PinterestOrder.md +0 -232
- package/docs/dw_extensions.pinterest/PinterestOrderHooks.md +0 -45
- package/docs/dw_extensions.pinterest/PinterestProduct.md +0 -850
- package/docs/dw_io/CSVStreamReader.md +0 -80
- package/docs/dw_io/CSVStreamWriter.md +0 -60
- package/docs/dw_io/File.md +0 -614
- package/docs/dw_io/FileReader.md +0 -41
- package/docs/dw_io/FileWriter.md +0 -103
- package/docs/dw_io/InputStream.md +0 -34
- package/docs/dw_io/OutputStream.md +0 -34
- package/docs/dw_io/PrintWriter.md +0 -71
- package/docs/dw_io/RandomAccessFileReader.md +0 -173
- package/docs/dw_io/Reader.md +0 -274
- package/docs/dw_io/StringWriter.md +0 -81
- package/docs/dw_io/Writer.md +0 -92
- package/docs/dw_io/XMLIndentingStreamWriter.md +0 -112
- package/docs/dw_io/XMLStreamConstants.md +0 -114
- package/docs/dw_io/XMLStreamReader.md +0 -1043
- package/docs/dw_io/XMLStreamWriter.md +0 -572
- package/docs/dw_job/JobExecution.md +0 -107
- package/docs/dw_job/JobStepExecution.md +0 -151
- package/docs/dw_net/FTPClient.md +0 -699
- package/docs/dw_net/FTPFileInfo.md +0 -122
- package/docs/dw_net/HTTPClient.md +0 -831
- package/docs/dw_net/HTTPClientLoggingConfig.md +0 -296
- package/docs/dw_net/HTTPRequestPart.md +0 -206
- package/docs/dw_net/Mail.md +0 -551
- package/docs/dw_net/SFTPClient.md +0 -591
- package/docs/dw_net/SFTPFileInfo.md +0 -122
- package/docs/dw_net/WebDAVClient.md +0 -715
- package/docs/dw_net/WebDAVFileInfo.md +0 -184
- package/docs/dw_object/ActiveData.md +0 -75
- package/docs/dw_object/CustomAttributes.md +0 -16
- package/docs/dw_object/CustomObject.md +0 -73
- package/docs/dw_object/CustomObjectMgr.md +0 -291
- package/docs/dw_object/Extensible.md +0 -64
- package/docs/dw_object/ExtensibleObject.md +0 -68
- package/docs/dw_object/Note.md +0 -121
- package/docs/dw_object/ObjectAttributeDefinition.md +0 -481
- package/docs/dw_object/ObjectAttributeGroup.md +0 -170
- package/docs/dw_object/ObjectAttributeValueDefinition.md +0 -72
- package/docs/dw_object/ObjectTypeDefinition.md +0 -216
- package/docs/dw_object/PersistentObject.md +0 -94
- package/docs/dw_object/SimpleExtensible.md +0 -46
- package/docs/dw_object/SystemObjectMgr.md +0 -153
- package/docs/dw_order/AbstractItem.md +0 -244
- package/docs/dw_order/AbstractItemCtnr.md +0 -240
- package/docs/dw_order/Appeasement.md +0 -367
- package/docs/dw_order/AppeasementItem.md +0 -90
- package/docs/dw_order/Basket.md +0 -362
- package/docs/dw_order/BasketMgr.md +0 -418
- package/docs/dw_order/BonusDiscountLineItem.md +0 -248
- package/docs/dw_order/CouponLineItem.md +0 -272
- package/docs/dw_order/CreateAgentBasketLimitExceededException.md +0 -18
- package/docs/dw_order/CreateBasketFromOrderException.md +0 -26
- package/docs/dw_order/CreateCouponLineItemException.md +0 -26
- package/docs/dw_order/CreateOrderException.md +0 -18
- package/docs/dw_order/CreateTemporaryBasketLimitExceededException.md +0 -18
- package/docs/dw_order/GiftCertificate.md +0 -569
- package/docs/dw_order/GiftCertificateLineItem.md +0 -324
- package/docs/dw_order/GiftCertificateMgr.md +0 -197
- package/docs/dw_order/GiftCertificateStatusCodes.md +0 -60
- package/docs/dw_order/Invoice.md +0 -418
- package/docs/dw_order/InvoiceItem.md +0 -222
- package/docs/dw_order/LineItem.md +0 -532
- package/docs/dw_order/LineItemCtnr.md +0 -2431
- package/docs/dw_order/Order.md +0 -2567
- package/docs/dw_order/OrderAddress.md +0 -807
- package/docs/dw_order/OrderItem.md +0 -536
- package/docs/dw_order/OrderMgr.md +0 -535
- package/docs/dw_order/OrderPaymentInstrument.md +0 -220
- package/docs/dw_order/OrderProcessStatusCodes.md +0 -84
- package/docs/dw_order/PaymentCard.md +0 -217
- package/docs/dw_order/PaymentInstrument.md +0 -1462
- package/docs/dw_order/PaymentMethod.md +0 -242
- package/docs/dw_order/PaymentMgr.md +0 -117
- package/docs/dw_order/PaymentProcessor.md +0 -70
- package/docs/dw_order/PaymentStatusCodes.md +0 -42
- package/docs/dw_order/PaymentTransaction.md +0 -328
- package/docs/dw_order/PriceAdjustment.md +0 -640
- package/docs/dw_order/PriceAdjustmentLimitTypes.md +0 -38
- package/docs/dw_order/ProductLineItem.md +0 -1821
- package/docs/dw_order/ProductShippingCost.md +0 -96
- package/docs/dw_order/ProductShippingLineItem.md +0 -326
- package/docs/dw_order/ProductShippingModel.md +0 -125
- package/docs/dw_order/Return.md +0 -360
- package/docs/dw_order/ReturnCase.md +0 -400
- package/docs/dw_order/ReturnCaseItem.md +0 -373
- package/docs/dw_order/ReturnItem.md +0 -362
- package/docs/dw_order/Shipment.md +0 -1251
- package/docs/dw_order/ShipmentShippingCost.md +0 -46
- package/docs/dw_order/ShipmentShippingModel.md +0 -146
- package/docs/dw_order/ShippingLineItem.md +0 -278
- package/docs/dw_order/ShippingLocation.md +0 -366
- package/docs/dw_order/ShippingMethod.md +0 -266
- package/docs/dw_order/ShippingMgr.md +0 -158
- package/docs/dw_order/ShippingOrder.md +0 -561
- package/docs/dw_order/ShippingOrderItem.md +0 -355
- package/docs/dw_order/SumItem.md +0 -147
- package/docs/dw_order/TaxGroup.md +0 -143
- package/docs/dw_order/TaxItem.md +0 -74
- package/docs/dw_order/TaxMgr.md +0 -227
- package/docs/dw_order/TrackingInfo.md +0 -312
- package/docs/dw_order/TrackingRef.md +0 -113
- package/docs/dw_order.hooks/BasketMergeHooks.md +0 -42
- package/docs/dw_order.hooks/CalculateHooks.md +0 -77
- package/docs/dw_order.hooks/OrderHooks.md +0 -41
- package/docs/dw_order.hooks/PaymentHooks.md +0 -180
- package/docs/dw_order.hooks/ReturnHooks.md +0 -135
- package/docs/dw_order.hooks/ShippingOrderHooks.md +0 -245
- package/docs/dw_rpc/SOAPUtil.md +0 -465
- package/docs/dw_rpc/Stub.md +0 -289
- package/docs/dw_rpc/WebReference.md +0 -83
- package/docs/dw_suggest/BrandSuggestions.md +0 -17
- package/docs/dw_suggest/CategorySuggestions.md +0 -53
- package/docs/dw_suggest/ContentSuggestions.md +0 -53
- package/docs/dw_suggest/CustomSuggestions.md +0 -17
- package/docs/dw_suggest/ProductSuggestions.md +0 -53
- package/docs/dw_suggest/SearchPhraseSuggestions.md +0 -117
- package/docs/dw_suggest/SuggestModel.md +0 -403
- package/docs/dw_suggest/SuggestedCategory.md +0 -46
- package/docs/dw_suggest/SuggestedContent.md +0 -46
- package/docs/dw_suggest/SuggestedPhrase.md +0 -70
- package/docs/dw_suggest/SuggestedProduct.md +0 -47
- package/docs/dw_suggest/SuggestedTerm.md +0 -143
- package/docs/dw_suggest/SuggestedTerms.md +0 -132
- package/docs/dw_suggest/Suggestions.md +0 -179
- package/docs/dw_svc/FTPService.md +0 -118
- package/docs/dw_svc/FTPServiceDefinition.md +0 -69
- package/docs/dw_svc/HTTPFormService.md +0 -18
- package/docs/dw_svc/HTTPFormServiceDefinition.md +0 -18
- package/docs/dw_svc/HTTPService.md +0 -415
- package/docs/dw_svc/HTTPServiceDefinition.md +0 -303
- package/docs/dw_svc/LocalServiceRegistry.md +0 -43
- package/docs/dw_svc/Result.md +0 -303
- package/docs/dw_svc/SOAPService.md +0 -115
- package/docs/dw_svc/SOAPServiceDefinition.md +0 -17
- package/docs/dw_svc/Service.md +0 -295
- package/docs/dw_svc/ServiceCallback.md +0 -268
- package/docs/dw_svc/ServiceConfig.md +0 -120
- package/docs/dw_svc/ServiceCredential.md +0 -156
- package/docs/dw_svc/ServiceDefinition.md +0 -176
- package/docs/dw_svc/ServiceProfile.md +0 -168
- package/docs/dw_svc/ServiceRegistry.md +0 -109
- package/docs/dw_system/AgentUserStatusCodes.md +0 -21
- package/docs/dw_system/Cache.md +0 -102
- package/docs/dw_system/CacheMgr.md +0 -42
- package/docs/dw_system/HookMgr.md +0 -66
- package/docs/dw_system/InternalObject.md +0 -56
- package/docs/dw_system/JobProcessMonitor.md +0 -124
- package/docs/dw_system/Log.md +0 -237
- package/docs/dw_system/LogNDC.md +0 -88
- package/docs/dw_system/Logger.md +0 -263
- package/docs/dw_system/OrganizationPreferences.md +0 -18
- package/docs/dw_system/Pipeline.md +0 -73
- package/docs/dw_system/PipelineDictionary.md +0 -16
- package/docs/dw_system/RESTErrorResponse.md +0 -66
- package/docs/dw_system/RESTResponseMgr.md +0 -258
- package/docs/dw_system/RESTSuccessResponse.md +0 -39
- package/docs/dw_system/RemoteInclude.md +0 -74
- package/docs/dw_system/Request.md +0 -839
- package/docs/dw_system/RequestHooks.md +0 -59
- package/docs/dw_system/Response.md +0 -522
- package/docs/dw_system/SearchStatus.md +0 -151
- package/docs/dw_system/Session.md +0 -476
- package/docs/dw_system/Site.md +0 -585
- package/docs/dw_system/SitePreferences.md +0 -49
- package/docs/dw_system/Status.md +0 -273
- package/docs/dw_system/StatusItem.md +0 -273
- package/docs/dw_system/System.md +0 -200
- package/docs/dw_system/Transaction.md +0 -84
- package/docs/dw_util/ArrayList.md +0 -50
- package/docs/dw_util/Assert.md +0 -391
- package/docs/dw_util/BigInteger.md +0 -326
- package/docs/dw_util/Bytes.md +0 -252
- package/docs/dw_util/Calendar.md +0 -921
- package/docs/dw_util/Collection.md +0 -338
- package/docs/dw_util/Currency.md +0 -163
- package/docs/dw_util/DateUtils.md +0 -86
- package/docs/dw_util/Decimal.md +0 -438
- package/docs/dw_util/FilteringCollection.md +0 -93
- package/docs/dw_util/Geolocation.md +0 -271
- package/docs/dw_util/HashMap.md +0 -43
- package/docs/dw_util/HashSet.md +0 -46
- package/docs/dw_util/Iterator.md +0 -97
- package/docs/dw_util/LinkedHashMap.md +0 -43
- package/docs/dw_util/LinkedHashSet.md +0 -46
- package/docs/dw_util/List.md +0 -519
- package/docs/dw_util/Locale.md +0 -267
- package/docs/dw_util/Map.md +0 -313
- package/docs/dw_util/MapEntry.md +0 -70
- package/docs/dw_util/MappingKey.md +0 -76
- package/docs/dw_util/MappingMgr.md +0 -122
- package/docs/dw_util/PropertyComparator.md +0 -51
- package/docs/dw_util/SecureEncoder.md +0 -350
- package/docs/dw_util/SecureFilter.md +0 -350
- package/docs/dw_util/SeekableIterator.md +0 -176
- package/docs/dw_util/Set.md +0 -19
- package/docs/dw_util/SortedMap.md +0 -148
- package/docs/dw_util/SortedSet.md +0 -151
- package/docs/dw_util/StringUtils.md +0 -753
- package/docs/dw_util/Template.md +0 -88
- package/docs/dw_util/UUIDUtils.md +0 -38
- package/docs/dw_value/EnumValue.md +0 -92
- package/docs/dw_value/MimeEncodedText.md +0 -103
- package/docs/dw_value/Money.md +0 -610
- package/docs/dw_value/Quantity.md +0 -376
- package/docs/dw_web/CSRFProtection.md +0 -83
- package/docs/dw_web/ClickStream.md +0 -157
- package/docs/dw_web/ClickStreamEntry.md +0 -289
- package/docs/dw_web/Cookie.md +0 -396
- package/docs/dw_web/Cookies.md +0 -46
- package/docs/dw_web/Form.md +0 -74
- package/docs/dw_web/FormAction.md +0 -199
- package/docs/dw_web/FormElement.md +0 -220
- package/docs/dw_web/FormElementValidationResult.md +0 -157
- package/docs/dw_web/FormField.md +0 -603
- package/docs/dw_web/FormFieldOption.md +0 -238
- package/docs/dw_web/FormFieldOptions.md +0 -42
- package/docs/dw_web/FormGroup.md +0 -199
- package/docs/dw_web/FormList.md +0 -126
- package/docs/dw_web/FormListItem.md +0 -48
- package/docs/dw_web/Forms.md +0 -16
- package/docs/dw_web/HttpParameter.md +0 -513
- package/docs/dw_web/HttpParameterMap.md +0 -185
- package/docs/dw_web/LoopIterator.md +0 -261
- package/docs/dw_web/PageMetaData.md +0 -230
- package/docs/dw_web/PageMetaTag.md +0 -142
- package/docs/dw_web/PagingModel.md +0 -389
- package/docs/dw_web/Resource.md +0 -126
- package/docs/dw_web/URL.md +0 -213
- package/docs/dw_web/URLAction.md +0 -26
- package/docs/dw_web/URLParameter.md +0 -22
- package/docs/dw_web/URLRedirect.md +0 -71
- package/docs/dw_web/URLRedirectMgr.md +0 -73
- package/docs/dw_web/URLUtils.md +0 -1264
- package/docs/isml/isactivedatacontext.md +0 -382
- package/docs/isml/isactivedatahead.md +0 -566
- package/docs/isml/isanalyticsoff.md +0 -537
- package/docs/isml/isapplepay.md +0 -667
- package/docs/isml/isbreak.md +0 -687
- package/docs/isml/isbuynow.md +0 -682
- package/docs/isml/iscache.md +0 -802
- package/docs/isml/iscomment.md +0 -794
- package/docs/isml/iscomponent.md +0 -797
- package/docs/isml/iscontent.md +0 -594
- package/docs/isml/iscontinue.md +0 -563
- package/docs/isml/iscookie.md +0 -798
- package/docs/isml/isdecorate.md +0 -818
- package/docs/isml/isif.md +0 -737
- package/docs/isml/isinclude.md +0 -874
- package/docs/isml/isloop.md +0 -377
- package/docs/isml/ismodule.md +0 -844
- package/docs/isml/isnext.md +0 -672
- package/docs/isml/isobject.md +0 -760
- package/docs/isml/ispayment.md +0 -577
- package/docs/isml/ispaymentmessages.md +0 -664
- package/docs/isml/isprint.md +0 -875
- package/docs/isml/isredirect.md +0 -716
- package/docs/isml/isremove.md +0 -725
- package/docs/isml/isreplace.md +0 -783
- package/docs/isml/isscript.md +0 -859
- package/docs/isml/isselect.md +0 -908
- package/docs/isml/isset.md +0 -585
- package/docs/isml/isslot.md +0 -824
- package/docs/isml/isstatus.md +0 -711
- package/docs/sfra/account.md +0 -145
- package/docs/sfra/address.md +0 -84
- package/docs/sfra/billing.md +0 -90
- package/docs/sfra/cart.md +0 -134
- package/docs/sfra/categories.md +0 -124
- package/docs/sfra/content.md +0 -133
- package/docs/sfra/locale.md +0 -126
- package/docs/sfra/order.md +0 -219
- package/docs/sfra/payment.md +0 -131
- package/docs/sfra/price-default.md +0 -118
- package/docs/sfra/price-range.md +0 -77
- package/docs/sfra/price-tiered.md +0 -117
- package/docs/sfra/product-bundle.md +0 -164
- package/docs/sfra/product-full.md +0 -179
- package/docs/sfra/product-line-items.md +0 -147
- package/docs/sfra/product-search.md +0 -245
- package/docs/sfra/product-tile.md +0 -95
- package/docs/sfra/querystring.md +0 -240
- package/docs/sfra/render.md +0 -354
- package/docs/sfra/request.md +0 -210
- package/docs/sfra/response.md +0 -391
- package/docs/sfra/server.md +0 -375
- package/docs/sfra/shipping.md +0 -181
- package/docs/sfra/store.md +0 -145
- package/docs/sfra/stores.md +0 -190
- package/docs/sfra/totals.md +0 -184
- package/docs-site-v2/.vitepress/config.mts +0 -190
- package/docs-site-v2/.vitepress/theme/components/AssistantTabs.vue +0 -96
- package/docs-site-v2/.vitepress/theme/components/Callout.vue +0 -10
- package/docs-site-v2/.vitepress/theme/components/Collapsible.vue +0 -14
- package/docs-site-v2/.vitepress/theme/components/DwJsonBuilder.vue +0 -82
- package/docs-site-v2/.vitepress/theme/components/HomeSections.vue +0 -552
- package/docs-site-v2/.vitepress/theme/components/InstructionFilesTabs.vue +0 -87
- package/docs-site-v2/.vitepress/theme/components/ModeTabs.vue +0 -70
- package/docs-site-v2/.vitepress/theme/components/NewcomerCTA.vue +0 -14
- package/docs-site-v2/.vitepress/theme/components/QuickStartCards.vue +0 -20
- package/docs-site-v2/.vitepress/theme/components/QuickStartHero.vue +0 -20
- package/docs-site-v2/.vitepress/theme/components/SkillsList.vue +0 -48
- package/docs-site-v2/.vitepress/theme/components/ToolExplorer.vue +0 -85
- package/docs-site-v2/.vitepress/theme/custom.css +0 -1373
- package/docs-site-v2/.vitepress/theme/index.ts +0 -39
- package/docs-site-v2/data/skills.ts +0 -147
- package/docs-site-v2/data/tools.ts +0 -490
- package/docs-site-v2/development/index.md +0 -151
- package/docs-site-v2/examples/index.md +0 -333
- package/docs-site-v2/features/index.md +0 -144
- package/docs-site-v2/guide/ai-interfaces.md +0 -58
- package/docs-site-v2/guide/configuration.md +0 -208
- package/docs-site-v2/guide/index.md +0 -50
- package/docs-site-v2/index.md +0 -32
- package/docs-site-v2/package-lock.json +0 -2511
- package/docs-site-v2/package.json +0 -15
- package/docs-site-v2/public/404.html +0 -15
- package/docs-site-v2/public/android-chrome-192x192.png +0 -0
- package/docs-site-v2/public/android-chrome-512x512.png +0 -0
- package/docs-site-v2/public/apple-touch-icon.png +0 -0
- package/docs-site-v2/public/explain-product-pricing-methods-no-mcp.png +0 -0
- package/docs-site-v2/public/explain-product-pricing-methods.png +0 -0
- package/docs-site-v2/public/favicon-16x16.png +0 -0
- package/docs-site-v2/public/favicon-32x32.png +0 -0
- package/docs-site-v2/public/favicon.ico +0 -0
- package/docs-site-v2/public/index.css +0 -4174
- package/docs-site-v2/public/llms.txt +0 -44
- package/docs-site-v2/public/logo-dark.svg +0 -8
- package/docs-site-v2/public/logo.svg +0 -8
- package/docs-site-v2/public/robots.txt +0 -20
- package/docs-site-v2/public/site.webmanifest +0 -50
- package/docs-site-v2/public/sitemap.xml +0 -90
- package/docs-site-v2/script-debugger/index.md +0 -105
- package/docs-site-v2/scripts/generate-llms.js +0 -71
- package/docs-site-v2/scripts/generate-sitemap.js +0 -97
- package/docs-site-v2/security/index.md +0 -115
- package/docs-site-v2/skills/index.md +0 -40
- package/docs-site-v2/tools/index.md +0 -36
- package/docs-site-v2/troubleshooting/index.md +0 -204
- package/eslint.config.js +0 -139
- package/jest.config.js +0 -27
- package/memories/repo/docs-site-v2-build.json +0 -11
- package/scripts/convert-docs.js +0 -633
- package/scripts/validate-server-json.js +0 -68
- package/server.json +0 -20
- package/src/clients/agent-instructions-client.ts +0 -370
- package/src/clients/base/abstract-documentation-client.ts +0 -405
- package/src/clients/base/http-client.ts +0 -152
- package/src/clients/base/oauth-token.ts +0 -164
- package/src/clients/base/ocapi-auth-client.ts +0 -133
- package/src/clients/cartridge/cartridge-generation-client.ts +0 -302
- package/src/clients/cartridge/cartridge-structure.ts +0 -37
- package/src/clients/cartridge/cartridge-templates.ts +0 -246
- package/src/clients/cartridge/index.ts +0 -6
- package/src/clients/docs/class-content-parser.ts +0 -308
- package/src/clients/docs/class-name-resolver.ts +0 -99
- package/src/clients/docs/documentation-scanner.ts +0 -255
- package/src/clients/docs/index.ts +0 -16
- package/src/clients/docs/referenced-types-extractor.ts +0 -92
- package/src/clients/docs-client.ts +0 -393
- package/src/clients/isml-client.ts +0 -353
- package/src/clients/log-client.ts +0 -19
- package/src/clients/ocapi/code-versions-client.ts +0 -54
- package/src/clients/ocapi/site-preferences-client.ts +0 -106
- package/src/clients/ocapi/system-objects-client.ts +0 -148
- package/src/clients/ocapi-client.ts +0 -53
- package/src/clients/script-debugger/index.ts +0 -5
- package/src/clients/script-debugger/script-debugger-client.ts +0 -754
- package/src/clients/sfra-client.ts +0 -339
- package/src/config/configuration-factory.ts +0 -201
- package/src/config/dw-json-loader.ts +0 -248
- package/src/config/workspace-roots.ts +0 -540
- package/src/constants/index.ts +0 -1
- package/src/core/handlers/abstract-client-handler.ts +0 -85
- package/src/core/handlers/agent-instructions-handler.ts +0 -48
- package/src/core/handlers/base-handler.ts +0 -172
- package/src/core/handlers/cartridge-handler.ts +0 -38
- package/src/core/handlers/client-factory.ts +0 -140
- package/src/core/handlers/code-version-handler.ts +0 -43
- package/src/core/handlers/docs-handler.ts +0 -19
- package/src/core/handlers/isml-handler.ts +0 -19
- package/src/core/handlers/job-log-handler.ts +0 -39
- package/src/core/handlers/log-handler.ts +0 -39
- package/src/core/handlers/script-debugger-handler.ts +0 -46
- package/src/core/handlers/sfra-handler.ts +0 -23
- package/src/core/handlers/simple-client-handler.ts +0 -78
- package/src/core/handlers/system-object-handler.ts +0 -43
- package/src/core/handlers/validation-helpers.ts +0 -206
- package/src/core/instruction-advisor.ts +0 -122
- package/src/core/server.ts +0 -374
- package/src/core/tool-definitions.ts +0 -30
- package/src/core/tool-schemas/agent-instruction-tools.ts +0 -72
- package/src/core/tool-schemas/cartridge-tools.ts +0 -29
- package/src/core/tool-schemas/code-version-tools.ts +0 -28
- package/src/core/tool-schemas/documentation-tools.ts +0 -104
- package/src/core/tool-schemas/index.ts +0 -27
- package/src/core/tool-schemas/isml-tools.ts +0 -89
- package/src/core/tool-schemas/log-tools.ts +0 -196
- package/src/core/tool-schemas/script-debugger-tools.ts +0 -83
- package/src/core/tool-schemas/sfra-tools.ts +0 -65
- package/src/core/tool-schemas/shared-schemas.ts +0 -158
- package/src/core/tool-schemas/system-object-tools.ts +0 -127
- package/src/index.ts +0 -20
- package/src/main.ts +0 -161
- package/src/services/file-system-service.ts +0 -117
- package/src/services/index.ts +0 -11
- package/src/services/path-service.ts +0 -124
- package/src/tool-configs/agent-instructions-tool-config.ts +0 -83
- package/src/tool-configs/cartridge-tool-config.ts +0 -41
- package/src/tool-configs/code-version-tool-config.ts +0 -37
- package/src/tool-configs/docs-tool-config.ts +0 -103
- package/src/tool-configs/isml-tool-config.ts +0 -87
- package/src/tool-configs/job-log-tool-config.ts +0 -119
- package/src/tool-configs/log-tool-config.ts +0 -110
- package/src/tool-configs/script-debugger-tool-config.ts +0 -69
- package/src/tool-configs/sfra-tool-config.ts +0 -74
- package/src/tool-configs/system-object-tool-config.ts +0 -142
- package/src/types/types.ts +0 -125
- package/src/utils/cache.ts +0 -291
- package/src/utils/category-utils.ts +0 -70
- package/src/utils/log-tool-constants.ts +0 -95
- package/src/utils/logger.ts +0 -260
- package/src/utils/markdown-utils.ts +0 -280
- package/src/utils/ocapi-url-builder.ts +0 -48
- package/src/utils/path-resolver.ts +0 -69
- package/src/utils/path-validation.ts +0 -113
- package/src/utils/query-builder.ts +0 -84
- package/src/utils/utils.ts +0 -139
- package/src/utils/validator.ts +0 -162
- package/tests/__mocks__/docs-client.ts +0 -8
- package/tests/__mocks__/src/clients/base/http-client.js +0 -43
- package/tests/__mocks__/webdav.js +0 -14
- package/tests/base-handler.test.ts +0 -527
- package/tests/base-http-client.test.ts +0 -311
- package/tests/cache.test.ts +0 -453
- package/tests/cartridge-handler.test.ts +0 -290
- package/tests/class-content-parser.test.ts +0 -629
- package/tests/class-name-resolver.test.ts +0 -365
- package/tests/client-factory.test.ts +0 -280
- package/tests/code-version-handler.test.ts +0 -291
- package/tests/code-versions-client.test.ts +0 -156
- package/tests/config.test.ts +0 -285
- package/tests/configuration-factory.test.ts +0 -233
- package/tests/docs-handler.test.ts +0 -359
- package/tests/documentation-scanner.test.ts +0 -755
- package/tests/file-system-service.test.ts +0 -111
- package/tests/isml-client.test.ts +0 -463
- package/tests/isml-handler.test.ts +0 -375
- package/tests/job-log-handler.test.ts +0 -283
- package/tests/log-client.test.ts +0 -768
- package/tests/log-handler.test.ts +0 -365
- package/tests/log-processor.test.ts +0 -243
- package/tests/log-validation.test.ts +0 -149
- package/tests/logger.test.ts +0 -303
- package/tests/mcp/AGENTS.md +0 -162
- package/tests/mcp/README.md +0 -237
- package/tests/mcp/node/activate-code-version-advanced.full-mode.programmatic.test.js +0 -669
- package/tests/mcp/node/code-versions.full-mode.programmatic.test.js +0 -605
- package/tests/mcp/node/evaluate-script.full-mode.programmatic.test.js +0 -387
- package/tests/mcp/node/generate-cartridge-structure.docs-only.programmatic.test.js +0 -644
- package/tests/mcp/node/get-available-sfra-documents.programmatic.test.js +0 -274
- package/tests/mcp/node/get-isml-categories.programmatic.test.js +0 -278
- package/tests/mcp/node/get-isml-element.programmatic.test.js +0 -278
- package/tests/mcp/node/get-isml-elements-by-category.programmatic.test.js +0 -363
- package/tests/mcp/node/get-job-execution-summary.full-mode.programmatic.test.js +0 -432
- package/tests/mcp/node/get-job-log-entries.full-mode.programmatic.test.js +0 -488
- package/tests/mcp/node/get-latest-debug.full-mode.programmatic.test.js +0 -338
- package/tests/mcp/node/get-latest-error.full-mode.programmatic.test.js +0 -255
- package/tests/mcp/node/get-latest-info.full-mode.programmatic.test.js +0 -347
- package/tests/mcp/node/get-latest-job-log-files.full-mode.programmatic.test.js +0 -460
- package/tests/mcp/node/get-latest-warn.full-mode.programmatic.test.js +0 -454
- package/tests/mcp/node/get-log-file-contents.full-mode.programmatic.test.js +0 -381
- package/tests/mcp/node/get-sfcc-class-documentation.docs-only.programmatic.test.js +0 -371
- package/tests/mcp/node/get-sfcc-class-info.docs-only.programmatic.test.js +0 -1032
- package/tests/mcp/node/get-sfra-categories.docs-only.programmatic.test.js +0 -369
- package/tests/mcp/node/get-sfra-document.programmatic.test.js +0 -473
- package/tests/mcp/node/get-sfra-documents-by-category.docs-only.programmatic.test.js +0 -510
- package/tests/mcp/node/get-system-object-definition.full-mode.programmatic.test.js +0 -389
- package/tests/mcp/node/get-system-object-definitions.docs-only.programmatic.test.js +0 -300
- package/tests/mcp/node/get-system-object-definitions.full-mode.programmatic.test.js +0 -387
- package/tests/mcp/node/list-isml-elements.programmatic.test.js +0 -311
- package/tests/mcp/node/list-log-files.full-mode.programmatic.test.js +0 -150
- package/tests/mcp/node/list-sfcc-classes.docs-only.programmatic.test.js +0 -612
- package/tests/mcp/node/search-custom-object-attribute-definitions.full-mode.programmatic.test.js +0 -875
- package/tests/mcp/node/search-isml-elements.programmatic.test.js +0 -325
- package/tests/mcp/node/search-job-logs-by-name.full-mode.programmatic.test.js +0 -330
- package/tests/mcp/node/search-job-logs.full-mode.programmatic.test.js +0 -526
- package/tests/mcp/node/search-logs.full-mode.programmatic.test.js +0 -478
- package/tests/mcp/node/search-sfcc-classes.docs-only.programmatic.test.js +0 -334
- package/tests/mcp/node/search-sfcc-methods.docs-only.programmatic.test.js +0 -487
- package/tests/mcp/node/search-sfra-documentation.docs-only.programmatic.test.js +0 -563
- package/tests/mcp/node/search-site-preferences.full-mode.programmatic.test.js +0 -556
- package/tests/mcp/node/search-system-object-attribute-definitions.full-mode.programmatic.test.js +0 -744
- package/tests/mcp/node/search-system-object-attribute-groups.full-mode.programmatic.test.js +0 -657
- package/tests/mcp/node/summarize-logs.full-mode.programmatic.test.js +0 -357
- package/tests/mcp/node/tools.docs-only.programmatic.test.js +0 -515
- package/tests/mcp/node/tools.full-mode.programmatic.test.js +0 -154
- package/tests/mcp/test-fixtures/dw.json +0 -10
- package/tests/mcp/yaml/activate-code-version.docs-only.test.mcp.yml +0 -318
- package/tests/mcp/yaml/activate-code-version.full-mode.test.mcp.yml +0 -507
- package/tests/mcp/yaml/evaluate-script.full-mode.test.mcp.yml +0 -281
- package/tests/mcp/yaml/get-available-sfra-documents.docs-only.test.mcp.yml +0 -684
- package/tests/mcp/yaml/get-available-sfra-documents.full-mode.test.mcp.yml +0 -684
- package/tests/mcp/yaml/get-code-versions.docs-only.test.mcp.yml +0 -196
- package/tests/mcp/yaml/get-code-versions.full-mode.test.mcp.yml +0 -273
- package/tests/mcp/yaml/get-isml-categories.docs-only.test.mcp.yml +0 -330
- package/tests/mcp/yaml/get-isml-element.docs-only.test.mcp.yml +0 -294
- package/tests/mcp/yaml/get-isml-elements-by-category.docs-only.test.mcp.yml +0 -334
- package/tests/mcp/yaml/get-job-execution-summary.full-mode.test.mcp.yml +0 -148
- package/tests/mcp/yaml/get-job-log-entries.full-mode.test.mcp.yml +0 -284
- package/tests/mcp/yaml/get-latest-debug.full-mode.test.mcp.yml +0 -191
- package/tests/mcp/yaml/get-latest-error.full-mode.test.mcp.yml +0 -195
- package/tests/mcp/yaml/get-latest-info.full-mode.test.mcp.yml +0 -242
- package/tests/mcp/yaml/get-latest-job-log-files.full-mode.test.mcp.yml +0 -189
- package/tests/mcp/yaml/get-latest-warn.full-mode.test.mcp.yml +0 -182
- package/tests/mcp/yaml/get-log-file-contents.full-mode.test.mcp.yml +0 -256
- package/tests/mcp/yaml/get-sfcc-class-documentation.docs-only.test.mcp.yml +0 -2416
- package/tests/mcp/yaml/get-sfcc-class-documentation.full-mode.test.mcp.yml +0 -2416
- package/tests/mcp/yaml/get-sfcc-class-info.docs-only.test.mcp.yml +0 -1225
- package/tests/mcp/yaml/get-sfcc-class-info.full-mode.test.mcp.yml +0 -1225
- package/tests/mcp/yaml/get-sfra-categories.docs-only.test.mcp.yml +0 -452
- package/tests/mcp/yaml/get-sfra-categories.full-mode.test.mcp.yml +0 -452
- package/tests/mcp/yaml/get-sfra-document.docs-only.test.mcp.yml +0 -525
- package/tests/mcp/yaml/get-sfra-document.full-mode.test.mcp.yml +0 -525
- package/tests/mcp/yaml/get-sfra-documents-by-category.docs-only.test.mcp.yml +0 -507
- package/tests/mcp/yaml/get-sfra-documents-by-category.full-mode.test.mcp.yml +0 -507
- package/tests/mcp/yaml/get-system-object-definition.docs-only.test.mcp.yml +0 -208
- package/tests/mcp/yaml/get-system-object-definition.full-mode.test.mcp.yml +0 -191
- package/tests/mcp/yaml/get-system-object-definitions.docs-only.test.mcp.yml +0 -257
- package/tests/mcp/yaml/get-system-object-definitions.full-mode.test.mcp.yml +0 -517
- package/tests/mcp/yaml/get_latest_error.test.mcp.yml +0 -472
- package/tests/mcp/yaml/list-isml-elements.docs-only.test.mcp.yml +0 -212
- package/tests/mcp/yaml/list-log-files.full-mode.test.mcp.yml +0 -89
- package/tests/mcp/yaml/list-sfcc-classes.docs-only.test.mcp.yml +0 -511
- package/tests/mcp/yaml/list-sfcc-classes.full-mode.test.mcp.yml +0 -511
- package/tests/mcp/yaml/search-custom-object-attribute-definitions.docs-only.test.mcp.yml +0 -82
- package/tests/mcp/yaml/search-custom-object-attribute-definitions.test.mcp.yml +0 -387
- package/tests/mcp/yaml/search-isml-elements.docs-only.test.mcp.yml +0 -312
- package/tests/mcp/yaml/search-job-logs-by-name.full-mode.test.mcp.yml +0 -169
- package/tests/mcp/yaml/search-job-logs.full-mode.test.mcp.yml +0 -174
- package/tests/mcp/yaml/search-logs.full-mode.test.mcp.yml +0 -207
- package/tests/mcp/yaml/search-sfcc-classes.docs-only.test.mcp.yml +0 -1157
- package/tests/mcp/yaml/search-sfcc-classes.full-mode.test.mcp.yml +0 -1157
- package/tests/mcp/yaml/search-sfcc-methods.docs-only.test.mcp.yml +0 -723
- package/tests/mcp/yaml/search-sfcc-methods.full-mode.test.mcp.yml +0 -723
- package/tests/mcp/yaml/search-sfra-documentation.docs-only.test.mcp.yml +0 -427
- package/tests/mcp/yaml/search-sfra-documentation.full-mode.test.mcp.yml +0 -427
- package/tests/mcp/yaml/search-site-preferences.docs-only.test.mcp.yml +0 -295
- package/tests/mcp/yaml/search-site-preferences.full-mode.test.mcp.yml +0 -574
- package/tests/mcp/yaml/search-system-object-attribute-definitions.docs-only.test.mcp.yml +0 -168
- package/tests/mcp/yaml/search-system-object-attribute-definitions.full-mode.test.mcp.yml +0 -500
- package/tests/mcp/yaml/search-system-object-attribute-groups.docs-only.test.mcp.yml +0 -278
- package/tests/mcp/yaml/search-system-object-attribute-groups.full-mode.test.mcp.yml +0 -612
- package/tests/mcp/yaml/summarize-logs.full-mode.test.mcp.yml +0 -173
- package/tests/mcp/yaml/tools.docs-only.test.mcp.yml +0 -535
- package/tests/mcp/yaml/tools.full-mode.test.mcp.yml +0 -378
- package/tests/oauth-token.test.ts +0 -725
- package/tests/ocapi-auth-client.test.ts +0 -276
- package/tests/ocapi-client.test.ts +0 -242
- package/tests/path-service.test.ts +0 -96
- package/tests/query-builder.test.ts +0 -281
- package/tests/referenced-types-extractor.test.ts +0 -814
- package/tests/script-debugger-client.test.ts +0 -430
- package/tests/servers/sfcc-mock-server/README.md +0 -208
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/code-versions.json +0 -247
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-customapi.json +0 -128
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-globalsettings.json +0 -92
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-versionhistory.json +0 -256
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-ccv.json +0 -275
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-fastforward.json +0 -123
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-sfra.json +0 -224
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-storefront.json +0 -447
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-system.json +0 -171
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-campaign.json +0 -13
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-category.json +0 -50
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-order.json +0 -32
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-product.json +0 -224
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-sitepreferences.json +0 -62
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-customeraddress.json +0 -109
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-product-expanded.json +0 -183
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-product.json +0 -139
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-category.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-customer.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-customeraddress.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-order.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-product.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definitions-old.json +0 -354
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definitions.json +0 -172
- package/tests/servers/sfcc-mock-server/package-lock.json +0 -879
- package/tests/servers/sfcc-mock-server/package.json +0 -39
- package/tests/servers/sfcc-mock-server/scripts/setup-logs.js +0 -224
- package/tests/servers/sfcc-mock-server/server.js +0 -280
- package/tests/servers/sfcc-mock-server/src/app.js +0 -182
- package/tests/servers/sfcc-mock-server/src/config/server-config.js +0 -124
- package/tests/servers/sfcc-mock-server/src/middleware/auth.js +0 -101
- package/tests/servers/sfcc-mock-server/src/middleware/cors.js +0 -39
- package/tests/servers/sfcc-mock-server/src/middleware/logging.js +0 -124
- package/tests/servers/sfcc-mock-server/src/routes/cartridge-webdav.js +0 -258
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/code-versions-handler.js +0 -184
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/debugger-handler.js +0 -396
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/oauth-handler.js +0 -36
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/ocapi-error-utils.js +0 -221
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/ocapi-utils.js +0 -440
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/site-preferences-handler.js +0 -332
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/system-objects-handler.js +0 -572
- package/tests/servers/sfcc-mock-server/src/routes/ocapi.js +0 -58
- package/tests/servers/sfcc-mock-server/src/routes/storefront.js +0 -86
- package/tests/servers/sfcc-mock-server/src/routes/webdav.js +0 -240
- package/tests/servers/sfcc-mock-server/src/utils/mock-data-loader.js +0 -84
- package/tests/servers/sfcc-mock-server/src/utils/webdav-xml.js +0 -121
- package/tests/servers/sfcc-mock-server-manager.ts +0 -280
- package/tests/sfcc-mock-server.test.ts +0 -423
- package/tests/site-preferences-client.test.ts +0 -358
- package/tests/system-objects-client.test.ts +0 -310
- package/tests/utils.test.ts +0 -477
- package/tests/validation-helpers.test.ts +0 -325
- package/tests/validator.test.ts +0 -416
- package/tests/workspace-roots.test.ts +0 -227
- package/tsconfig.json +0 -20
- package/tsconfig.test.json +0 -20
|
@@ -1,754 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SFCC Script Debugger Client
|
|
3
|
-
*
|
|
4
|
-
* Provides script evaluation capabilities using the SFCC Script Debugger API.
|
|
5
|
-
* This client handles the complete workflow: creating debug sessions, setting breakpoints,
|
|
6
|
-
* triggering script execution, evaluating expressions, and cleanup.
|
|
7
|
-
*
|
|
8
|
-
* This implementation uses the existing Default-Start endpoint from app_storefront_base,
|
|
9
|
-
* eliminating the need to upload custom scripts.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { createClient, WebDAVClient } from 'webdav';
|
|
13
|
-
import { Logger } from '../../utils/logger.js';
|
|
14
|
-
import { SFCCConfig } from '../../types/types.js';
|
|
15
|
-
|
|
16
|
-
/** Default timeout for script evaluation in milliseconds */
|
|
17
|
-
const DEFAULT_TIMEOUT_MS = 30000;
|
|
18
|
-
|
|
19
|
-
/** Default site ID if none provided */
|
|
20
|
-
const DEFAULT_SITE_ID = 'RefArch';
|
|
21
|
-
|
|
22
|
-
/** Default locale if none provided */
|
|
23
|
-
const DEFAULT_LOCALE = 'default';
|
|
24
|
-
|
|
25
|
-
/** Polling interval when waiting for halted thread */
|
|
26
|
-
const POLL_INTERVAL_MS = 500;
|
|
27
|
-
|
|
28
|
-
/** Timeout for the storefront trigger request (short - we expect it to hang at breakpoint) */
|
|
29
|
-
const TRIGGER_TIMEOUT_MS = 10000;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Result of a script evaluation
|
|
33
|
-
*/
|
|
34
|
-
export interface ScriptEvaluationResult {
|
|
35
|
-
success: boolean;
|
|
36
|
-
result?: string;
|
|
37
|
-
error?: string;
|
|
38
|
-
executionTimeMs?: number;
|
|
39
|
-
warnings?: string[];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Script thread from debugger API
|
|
44
|
-
*/
|
|
45
|
-
interface ScriptThread {
|
|
46
|
-
id: number;
|
|
47
|
-
status: 'halted' | 'running';
|
|
48
|
-
call_stack?: Array<{
|
|
49
|
-
index: number;
|
|
50
|
-
location: {
|
|
51
|
-
function_name: string;
|
|
52
|
-
line_number: number;
|
|
53
|
-
script_path: string;
|
|
54
|
-
};
|
|
55
|
-
}>;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Debugger API response types
|
|
60
|
-
*/
|
|
61
|
-
interface ThreadsResponse {
|
|
62
|
-
_v: string;
|
|
63
|
-
script_threads?: ScriptThread[];
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
interface EvalResponse {
|
|
67
|
-
_v: string;
|
|
68
|
-
expression: string;
|
|
69
|
-
result: string;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
interface FaultResponse {
|
|
73
|
-
_v: string;
|
|
74
|
-
fault?: {
|
|
75
|
-
type: string;
|
|
76
|
-
message: string;
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/** Strategic breakpoint lines to catch executable code without overhead */
|
|
81
|
-
const DEFAULT_BREAKPOINT_LINES = [1, 10, 20, 30, 40, 50];
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Cartridge configuration for breakpoint targeting
|
|
85
|
-
*/
|
|
86
|
-
interface CartridgeConfig {
|
|
87
|
-
cartridge: string;
|
|
88
|
-
controllerPath: string;
|
|
89
|
-
/** Single line or array of lines for breakpoints */
|
|
90
|
-
breakpointLines: number | number[];
|
|
91
|
-
type: 'sfra' | 'sitegenesis';
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/** SFRA cartridge configuration */
|
|
95
|
-
const SFRA_CONFIG: CartridgeConfig = {
|
|
96
|
-
cartridge: 'app_storefront_base',
|
|
97
|
-
controllerPath: '/cartridge/controllers/Default.js',
|
|
98
|
-
breakpointLines: DEFAULT_BREAKPOINT_LINES, // Lines 1-50 to catch executable code
|
|
99
|
-
type: 'sfra',
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
/** SiteGenesis cartridge configuration */
|
|
103
|
-
const SITEGENESIS_CONFIG: CartridgeConfig = {
|
|
104
|
-
cartridge: 'app_storefront_controllers',
|
|
105
|
-
controllerPath: '/cartridge/controllers/Default.js',
|
|
106
|
-
breakpointLines: DEFAULT_BREAKPOINT_LINES, // Lines 1-50 to catch executable code
|
|
107
|
-
type: 'sitegenesis',
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* SFCC Script Debugger Client
|
|
112
|
-
*
|
|
113
|
-
* Orchestrates script evaluation through the Script Debugger API workflow:
|
|
114
|
-
* 1. Create debugger client session
|
|
115
|
-
* 2. Set breakpoint on Default.js controller
|
|
116
|
-
* 3. Trigger Default-Start via HTTP
|
|
117
|
-
* 4. Wait for thread to halt at breakpoint
|
|
118
|
-
* 5. Evaluate user's expression in halted context
|
|
119
|
-
* 6. Resume thread and cleanup
|
|
120
|
-
*
|
|
121
|
-
* Supports both SFRA (app_storefront_base) and SiteGenesis (app_storefront_controllers).
|
|
122
|
-
*/
|
|
123
|
-
export class ScriptDebuggerClient {
|
|
124
|
-
private readonly config: SFCCConfig;
|
|
125
|
-
private readonly logger: Logger;
|
|
126
|
-
private readonly debuggerClientId = 'sfcc-mcp-evaluator';
|
|
127
|
-
private readonly debuggerBaseUrl: string;
|
|
128
|
-
private readonly protocol: 'http' | 'https';
|
|
129
|
-
private cachedAuthHeader: string | null = null;
|
|
130
|
-
private webdavClient: WebDAVClient | null = null;
|
|
131
|
-
private isDebuggerEnabled = false;
|
|
132
|
-
|
|
133
|
-
// Active cartridge config - determined at runtime based on what exists
|
|
134
|
-
private activeCartridgeConfig: CartridgeConfig | null = null;
|
|
135
|
-
|
|
136
|
-
constructor(config: SFCCConfig, logger?: Logger) {
|
|
137
|
-
this.config = config;
|
|
138
|
-
this.logger = logger ?? Logger.getChildLogger('ScriptDebugger');
|
|
139
|
-
this.protocol = config.hostname?.startsWith('localhost') ? 'http' : 'https';
|
|
140
|
-
this.debuggerBaseUrl = `${this.protocol}://${config.hostname}/s/-/dw/debugger/v2_0`;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Evaluate a script/expression on the SFCC instance
|
|
145
|
-
*
|
|
146
|
-
* This method handles the entire workflow automatically:
|
|
147
|
-
* - Sets up debugger session
|
|
148
|
-
* - Sets breakpoint on Default-Start (or custom file/line)
|
|
149
|
-
* - Triggers execution and captures result
|
|
150
|
-
* - Cleans up all resources
|
|
151
|
-
*
|
|
152
|
-
* @param script The JavaScript code to evaluate
|
|
153
|
-
* @param options Optional configuration for the evaluation
|
|
154
|
-
*/
|
|
155
|
-
async evaluateScript(
|
|
156
|
-
script: string,
|
|
157
|
-
options: {
|
|
158
|
-
timeout?: number;
|
|
159
|
-
siteId?: string;
|
|
160
|
-
locale?: string;
|
|
161
|
-
breakpointFile?: string;
|
|
162
|
-
breakpointLine?: number;
|
|
163
|
-
} = {},
|
|
164
|
-
): Promise<ScriptEvaluationResult> {
|
|
165
|
-
const startTime = Date.now();
|
|
166
|
-
const timeout = options.timeout ?? DEFAULT_TIMEOUT_MS;
|
|
167
|
-
const siteId = options.siteId ?? DEFAULT_SITE_ID;
|
|
168
|
-
const locale = this.normalizeLocale(options.locale ?? DEFAULT_LOCALE);
|
|
169
|
-
const warnings: string[] = [];
|
|
170
|
-
|
|
171
|
-
this.logger.debug('Starting script evaluation', {
|
|
172
|
-
scriptLength: script.length,
|
|
173
|
-
timeout,
|
|
174
|
-
siteId,
|
|
175
|
-
customBreakpoint: options.breakpointFile ? `${options.breakpointFile}:${options.breakpointLine}` : undefined,
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
try {
|
|
179
|
-
// Step 1: Use custom breakpoint or detect storefront cartridge
|
|
180
|
-
if (options.breakpointFile) {
|
|
181
|
-
// Use custom breakpoint configuration - single line or default to lines 1-50
|
|
182
|
-
const customLines = options.breakpointLine ? [options.breakpointLine] : DEFAULT_BREAKPOINT_LINES;
|
|
183
|
-
this.activeCartridgeConfig = {
|
|
184
|
-
cartridge: '', // Not used for custom - path is complete
|
|
185
|
-
controllerPath: options.breakpointFile,
|
|
186
|
-
breakpointLines: customLines,
|
|
187
|
-
type: 'sfra', // Doesn't matter for custom
|
|
188
|
-
};
|
|
189
|
-
this.logger.debug('Using custom breakpoint', {
|
|
190
|
-
file: options.breakpointFile,
|
|
191
|
-
lines: options.breakpointLine ?? 'strategic (1,10,20,30,40,50)',
|
|
192
|
-
});
|
|
193
|
-
} else {
|
|
194
|
-
// Auto-detect storefront cartridge (SFRA or SiteGenesis)
|
|
195
|
-
const cartridgeConfig = await this.detectStorefrontCartridge();
|
|
196
|
-
if (!cartridgeConfig) {
|
|
197
|
-
return {
|
|
198
|
-
success: false,
|
|
199
|
-
error: 'No compatible storefront cartridge found. Ensure either app_storefront_base (SFRA) or app_storefront_controllers (SiteGenesis) is deployed to your code version.',
|
|
200
|
-
executionTimeMs: Date.now() - startTime,
|
|
201
|
-
warnings: [
|
|
202
|
-
'Verify that your storefront cartridge exists in your active code version',
|
|
203
|
-
'Supported cartridges: app_storefront_base (SFRA), app_storefront_controllers (SiteGenesis)',
|
|
204
|
-
'Check that the code version is correctly deployed via WebDAV',
|
|
205
|
-
'Or specify custom breakpointFile and breakpointLine parameters',
|
|
206
|
-
],
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
this.activeCartridgeConfig = cartridgeConfig;
|
|
211
|
-
this.logger.debug('Using detected cartridge config', {
|
|
212
|
-
cartridge: cartridgeConfig.cartridge,
|
|
213
|
-
type: cartridgeConfig.type,
|
|
214
|
-
breakpointLines: 'strategic (1,10,20,30,40,50)',
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// Step 2: Enable the debugger (create client)
|
|
219
|
-
await this.enableDebugger();
|
|
220
|
-
|
|
221
|
-
// Step 3: Set breakpoints on Default.js controller (lines 1-50 by default)
|
|
222
|
-
await this.setBreakpoints();
|
|
223
|
-
|
|
224
|
-
// Step 4: Trigger Default-Start via HTTP (async - don't await fully)
|
|
225
|
-
const triggerPromise = this.triggerDefaultStart(siteId, locale);
|
|
226
|
-
|
|
227
|
-
// Step 5: Poll for halted thread
|
|
228
|
-
const thread = await this.waitForHaltedThread(timeout);
|
|
229
|
-
|
|
230
|
-
if (!thread) {
|
|
231
|
-
// Cleanup and return error
|
|
232
|
-
await this.cleanup();
|
|
233
|
-
return {
|
|
234
|
-
success: false,
|
|
235
|
-
error: 'Timeout waiting for script to hit breakpoint. The Default-Start endpoint may not have been triggered correctly.',
|
|
236
|
-
executionTimeMs: Date.now() - startTime,
|
|
237
|
-
warnings: [
|
|
238
|
-
`Ensure the site "${siteId}" exists and has app_storefront_base in its cartridge path`,
|
|
239
|
-
'Check that the Default-Start route is accessible',
|
|
240
|
-
'Verify script debugging is enabled',
|
|
241
|
-
],
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// Step 6: Evaluate the user's expression in the halted context
|
|
246
|
-
const evalResult = await this.evaluateInContext(thread.id, script);
|
|
247
|
-
|
|
248
|
-
// Step 7: Delete breakpoints immediately (we have our result)
|
|
249
|
-
try {
|
|
250
|
-
await this.debuggerRequest('DELETE', '/breakpoints');
|
|
251
|
-
} catch {
|
|
252
|
-
// Ignore - best effort cleanup
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// Step 8: Resume the thread
|
|
256
|
-
await this.resumeThread(thread.id);
|
|
257
|
-
|
|
258
|
-
// Step 9: Disable debugger client (don't wait for trigger - it will complete/timeout on its own)
|
|
259
|
-
if (this.isDebuggerEnabled) {
|
|
260
|
-
try {
|
|
261
|
-
await this.debuggerRequest('DELETE', '/client');
|
|
262
|
-
this.isDebuggerEnabled = false;
|
|
263
|
-
} catch {
|
|
264
|
-
// Ignore
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
// Don't await triggerPromise - let it complete/timeout in background
|
|
269
|
-
triggerPromise.catch(() => {
|
|
270
|
-
// Expected - request may timeout after thread resumes
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
return {
|
|
274
|
-
success: true,
|
|
275
|
-
result: evalResult,
|
|
276
|
-
executionTimeMs: Date.now() - startTime,
|
|
277
|
-
warnings: warnings.length > 0 ? warnings : undefined,
|
|
278
|
-
};
|
|
279
|
-
} catch (error) {
|
|
280
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
281
|
-
this.logger.error('Script evaluation failed', { error: errorMessage });
|
|
282
|
-
|
|
283
|
-
// Always try to cleanup
|
|
284
|
-
try {
|
|
285
|
-
await this.cleanup();
|
|
286
|
-
} catch (cleanupError) {
|
|
287
|
-
this.logger.debug('Cleanup after error failed', { cleanupError });
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
return {
|
|
291
|
-
success: false,
|
|
292
|
-
error: errorMessage,
|
|
293
|
-
executionTimeMs: Date.now() - startTime,
|
|
294
|
-
warnings: this.getErrorGuidance(errorMessage),
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Build and cache authentication header for debugger API
|
|
301
|
-
*/
|
|
302
|
-
private getAuthHeader(): string {
|
|
303
|
-
if (this.cachedAuthHeader) {
|
|
304
|
-
return this.cachedAuthHeader;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
let credentials: string;
|
|
308
|
-
if (this.config.username && this.config.password) {
|
|
309
|
-
credentials = `${this.config.username}:${this.config.password}`;
|
|
310
|
-
} else if (this.config.clientId && this.config.clientSecret) {
|
|
311
|
-
credentials = `${this.config.clientId}:${this.config.clientSecret}`;
|
|
312
|
-
} else {
|
|
313
|
-
throw new Error('No authentication credentials available');
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
this.cachedAuthHeader = `Basic ${Buffer.from(credentials).toString('base64')}`;
|
|
317
|
-
return this.cachedAuthHeader;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* Get WebDAV client credentials
|
|
322
|
-
*/
|
|
323
|
-
private getWebDAVCredentials(): { username: string; password: string } {
|
|
324
|
-
if (this.config.username && this.config.password) {
|
|
325
|
-
return { username: this.config.username, password: this.config.password };
|
|
326
|
-
}
|
|
327
|
-
if (this.config.clientId && this.config.clientSecret) {
|
|
328
|
-
return { username: this.config.clientId, password: this.config.clientSecret };
|
|
329
|
-
}
|
|
330
|
-
throw new Error('No authentication credentials available for WebDAV');
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* Get or create WebDAV client for cartridge verification
|
|
335
|
-
*/
|
|
336
|
-
private getWebDAVClient(): WebDAVClient {
|
|
337
|
-
if (!this.webdavClient) {
|
|
338
|
-
const webdavUrl = `${this.protocol}://${this.config.hostname}/on/demandware.servlet/webdav/Sites/Cartridges/`;
|
|
339
|
-
this.webdavClient = createClient(webdavUrl, this.getWebDAVCredentials());
|
|
340
|
-
}
|
|
341
|
-
return this.webdavClient;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
/**
|
|
345
|
-
* Check if a specific controller exists in the code version
|
|
346
|
-
*/
|
|
347
|
-
private async controllerExists(config: CartridgeConfig): Promise<boolean> {
|
|
348
|
-
try {
|
|
349
|
-
const client = this.getWebDAVClient();
|
|
350
|
-
const codeVersion = this.config.codeVersion ?? 'version1';
|
|
351
|
-
const controllerPath = `/${codeVersion}/${config.cartridge}${config.controllerPath}`;
|
|
352
|
-
|
|
353
|
-
this.logger.debug('Checking controller exists', { controllerPath, type: config.type });
|
|
354
|
-
|
|
355
|
-
return await client.exists(controllerPath);
|
|
356
|
-
} catch (error) {
|
|
357
|
-
this.logger.debug('Controller check failed', {
|
|
358
|
-
cartridge: config.cartridge,
|
|
359
|
-
error: error instanceof Error ? error.message : String(error),
|
|
360
|
-
});
|
|
361
|
-
return false;
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
/**
|
|
366
|
-
* Detect which storefront cartridge is available (SFRA or SiteGenesis)
|
|
367
|
-
* Returns the cartridge config to use, or null if none found
|
|
368
|
-
*/
|
|
369
|
-
private async detectStorefrontCartridge(): Promise<CartridgeConfig | null> {
|
|
370
|
-
// Try SFRA first (preferred)
|
|
371
|
-
if (await this.controllerExists(SFRA_CONFIG)) {
|
|
372
|
-
this.logger.debug('Detected SFRA storefront');
|
|
373
|
-
return SFRA_CONFIG;
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
// Fall back to SiteGenesis
|
|
377
|
-
if (await this.controllerExists(SITEGENESIS_CONFIG)) {
|
|
378
|
-
this.logger.debug('Detected SiteGenesis storefront');
|
|
379
|
-
return SITEGENESIS_CONFIG;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
this.logger.debug('No compatible storefront cartridge found');
|
|
383
|
-
return null;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* Make a request to the debugger API
|
|
388
|
-
*/
|
|
389
|
-
private async debuggerRequest<T>(
|
|
390
|
-
method: string,
|
|
391
|
-
endpoint: string,
|
|
392
|
-
body?: unknown,
|
|
393
|
-
): Promise<T> {
|
|
394
|
-
const url = `${this.debuggerBaseUrl}${endpoint}`;
|
|
395
|
-
|
|
396
|
-
this.logger.debug(`Debugger API ${method} ${endpoint}`);
|
|
397
|
-
|
|
398
|
-
const options: RequestInit = {
|
|
399
|
-
method,
|
|
400
|
-
headers: {
|
|
401
|
-
Authorization: this.getAuthHeader(),
|
|
402
|
-
'x-dw-client-id': this.debuggerClientId,
|
|
403
|
-
'Content-Type': 'application/json',
|
|
404
|
-
},
|
|
405
|
-
};
|
|
406
|
-
|
|
407
|
-
if (body) {
|
|
408
|
-
options.body = JSON.stringify(body);
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
const response = await fetch(url, options);
|
|
412
|
-
|
|
413
|
-
// 204 No Content is success for some operations
|
|
414
|
-
if (response.status === 204) {
|
|
415
|
-
return {} as T;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
if (!response.ok) {
|
|
419
|
-
let errorMessage = `Debugger API error: ${response.status} ${response.statusText}`;
|
|
420
|
-
try {
|
|
421
|
-
const errorBody = (await response.json()) as FaultResponse;
|
|
422
|
-
if (errorBody.fault) {
|
|
423
|
-
errorMessage = `${errorBody.fault.type}: ${errorBody.fault.message}`;
|
|
424
|
-
}
|
|
425
|
-
} catch {
|
|
426
|
-
// Could not parse error body
|
|
427
|
-
}
|
|
428
|
-
throw new Error(errorMessage);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
// Some endpoints return no body on success
|
|
432
|
-
const text = await response.text();
|
|
433
|
-
if (!text) {
|
|
434
|
-
return {} as T;
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
return JSON.parse(text) as T;
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
/**
|
|
441
|
-
* Enable the debugger by creating a client session
|
|
442
|
-
*/
|
|
443
|
-
private async enableDebugger(): Promise<void> {
|
|
444
|
-
this.logger.debug('Enabling debugger');
|
|
445
|
-
|
|
446
|
-
try {
|
|
447
|
-
await this.debuggerRequest('POST', '/client');
|
|
448
|
-
this.isDebuggerEnabled = true;
|
|
449
|
-
this.logger.debug('Debugger enabled successfully');
|
|
450
|
-
} catch (error) {
|
|
451
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
452
|
-
|
|
453
|
-
// Check if another client already has the debugger
|
|
454
|
-
if (errorMessage.includes('DebuggerAlreadyEnabled') || errorMessage.includes('already')) {
|
|
455
|
-
this.logger.debug('Debugger already enabled by another client, attempting to take over');
|
|
456
|
-
|
|
457
|
-
// Delete existing client and retry
|
|
458
|
-
try {
|
|
459
|
-
await this.debuggerRequest('DELETE', '/client');
|
|
460
|
-
await this.debuggerRequest('POST', '/client');
|
|
461
|
-
this.isDebuggerEnabled = true;
|
|
462
|
-
this.logger.debug('Took over debugger session');
|
|
463
|
-
return;
|
|
464
|
-
} catch (retryError) {
|
|
465
|
-
throw new Error(`Failed to take over debugger session: ${retryError instanceof Error ? retryError.message : String(retryError)}`);
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
throw error;
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
/**
|
|
474
|
-
* Set breakpoints on the controller.
|
|
475
|
-
* Creates multiple breakpoints (lines 1-50 by default) to ensure we catch executable code.
|
|
476
|
-
*/
|
|
477
|
-
private async setBreakpoints(): Promise<number[]> {
|
|
478
|
-
if (!this.activeCartridgeConfig) {
|
|
479
|
-
throw new Error('No active cartridge config - call detectStorefrontCartridge first');
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
// For custom breakpoints, controllerPath is the full path
|
|
483
|
-
// For auto-detected, we combine cartridge + controllerPath
|
|
484
|
-
const scriptPath = this.activeCartridgeConfig.cartridge
|
|
485
|
-
? `/${this.activeCartridgeConfig.cartridge}${this.activeCartridgeConfig.controllerPath}`
|
|
486
|
-
: this.activeCartridgeConfig.controllerPath;
|
|
487
|
-
|
|
488
|
-
// Normalize to array of line numbers
|
|
489
|
-
const lineNumbers = Array.isArray(this.activeCartridgeConfig.breakpointLines)
|
|
490
|
-
? this.activeCartridgeConfig.breakpointLines
|
|
491
|
-
: [this.activeCartridgeConfig.breakpointLines];
|
|
492
|
-
|
|
493
|
-
this.logger.debug('Setting breakpoints', { scriptPath, lines: lineNumbers.length > 5 ? `${lineNumbers[0]}-${lineNumbers[lineNumbers.length - 1]}` : lineNumbers });
|
|
494
|
-
|
|
495
|
-
// Create breakpoint objects for all lines
|
|
496
|
-
const breakpointRequests = lineNumbers.map((line) => ({
|
|
497
|
-
line_number: line,
|
|
498
|
-
script_path: scriptPath,
|
|
499
|
-
}));
|
|
500
|
-
|
|
501
|
-
const response = await this.debuggerRequest<{ breakpoints: Array<{ id: number }> }>('POST', '/breakpoints', {
|
|
502
|
-
breakpoints: breakpointRequests,
|
|
503
|
-
});
|
|
504
|
-
|
|
505
|
-
if (!response.breakpoints || response.breakpoints.length === 0) {
|
|
506
|
-
throw new Error('Failed to create breakpoints');
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
const breakpointIds = response.breakpoints.map((bp) => bp.id);
|
|
510
|
-
this.logger.debug('Breakpoints set', { count: breakpointIds.length });
|
|
511
|
-
|
|
512
|
-
return breakpointIds;
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
/**
|
|
516
|
-
* Normalize site ID - extract the ID from "Sites-{id}-Site" format if needed
|
|
517
|
-
*/
|
|
518
|
-
private normalizeSiteId(siteId: string): string {
|
|
519
|
-
const match = siteId.match(/^Sites-(.+)-Site$/i);
|
|
520
|
-
return match ? match[1] : siteId;
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
/**
|
|
524
|
-
* Normalize locale value by trimming and removing leading/trailing slashes
|
|
525
|
-
*/
|
|
526
|
-
private normalizeLocale(locale: string): string {
|
|
527
|
-
const trimmed = locale.trim();
|
|
528
|
-
const cleaned = trimmed.replace(/^\/+/, '').replace(/\/+$/, '');
|
|
529
|
-
return cleaned.length > 0 ? cleaned : DEFAULT_LOCALE;
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
/**
|
|
533
|
-
* Trigger the Default-Start endpoint via HTTP
|
|
534
|
-
*/
|
|
535
|
-
private async triggerDefaultStart(siteId: string, locale: string): Promise<void> {
|
|
536
|
-
// Normalize site ID in case it's passed as "Sites-{id}-Site"
|
|
537
|
-
const normalizedSiteId = this.normalizeSiteId(siteId);
|
|
538
|
-
const normalizedLocale = this.normalizeLocale(locale);
|
|
539
|
-
|
|
540
|
-
// Some instances require the classic storefront URL format.
|
|
541
|
-
// First try without locale (may redirect), then fall back to explicit locale.
|
|
542
|
-
const siteSegment = `Sites-${normalizedSiteId}-Site`;
|
|
543
|
-
const baseUrl = `${this.protocol}://${this.config.hostname}/on/demandware.store/${siteSegment}`;
|
|
544
|
-
const urlWithoutLocale = `${baseUrl}/`;
|
|
545
|
-
const urlWithLocale = `${baseUrl}/${normalizedLocale}`;
|
|
546
|
-
|
|
547
|
-
this.logger.debug('Triggering Default-Start', {
|
|
548
|
-
siteId: normalizedSiteId,
|
|
549
|
-
locale: normalizedLocale,
|
|
550
|
-
urlWithoutLocale,
|
|
551
|
-
urlWithLocale,
|
|
552
|
-
});
|
|
553
|
-
|
|
554
|
-
const shouldRetryWithLocale = await this.triggerStorefrontUrl(urlWithoutLocale);
|
|
555
|
-
if (shouldRetryWithLocale) {
|
|
556
|
-
await this.triggerStorefrontUrl(urlWithLocale);
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
/**
|
|
561
|
-
* Trigger a storefront URL. Returns true if caller should retry with a fallback URL.
|
|
562
|
-
*
|
|
563
|
-
* Important: When debugging is active, the request may hang (and get aborted by timeout)
|
|
564
|
-
* after successfully hitting the breakpoint. In that case we should NOT retry.
|
|
565
|
-
*/
|
|
566
|
-
private async triggerStorefrontUrl(url: string): Promise<boolean> {
|
|
567
|
-
try {
|
|
568
|
-
const controller = new AbortController();
|
|
569
|
-
const timeoutId = setTimeout(() => controller.abort(), TRIGGER_TIMEOUT_MS);
|
|
570
|
-
|
|
571
|
-
const response = await fetch(url, {
|
|
572
|
-
method: 'GET',
|
|
573
|
-
signal: controller.signal,
|
|
574
|
-
headers: {
|
|
575
|
-
Accept: 'text/html,application/xhtml+xml',
|
|
576
|
-
},
|
|
577
|
-
});
|
|
578
|
-
|
|
579
|
-
clearTimeout(timeoutId);
|
|
580
|
-
|
|
581
|
-
if (!response.ok) {
|
|
582
|
-
this.logger.debug('Storefront trigger non-OK response', { url, status: response.status });
|
|
583
|
-
return true;
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
this.logger.debug('Storefront trigger response', { url, status: response.status });
|
|
587
|
-
return false;
|
|
588
|
-
} catch (error) {
|
|
589
|
-
// This is expected - the request may hang while we're debugging
|
|
590
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
591
|
-
const isAbort = (error instanceof Error && error.name === 'AbortError') || errorMessage.toLowerCase().includes('abort');
|
|
592
|
-
|
|
593
|
-
if (isAbort) {
|
|
594
|
-
// Treat as success: likely hit the breakpoint and is now halted
|
|
595
|
-
return false;
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
this.logger.debug('Storefront trigger error', { url, error: errorMessage });
|
|
599
|
-
return true;
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
|
|
603
|
-
/**
|
|
604
|
-
* Wait for a thread to halt at our breakpoint
|
|
605
|
-
*/
|
|
606
|
-
private async waitForHaltedThread(timeout: number): Promise<ScriptThread | null> {
|
|
607
|
-
const startTime = Date.now();
|
|
608
|
-
|
|
609
|
-
this.logger.debug('Waiting for halted thread', { timeout });
|
|
610
|
-
|
|
611
|
-
while (Date.now() - startTime < timeout) {
|
|
612
|
-
try {
|
|
613
|
-
const response = await this.debuggerRequest<ThreadsResponse>('GET', '/threads');
|
|
614
|
-
|
|
615
|
-
if (response.script_threads && response.script_threads.length > 0) {
|
|
616
|
-
const haltedThread = response.script_threads.find((t) => t.status === 'halted');
|
|
617
|
-
|
|
618
|
-
if (haltedThread) {
|
|
619
|
-
this.logger.debug('Found halted thread', { threadId: haltedThread.id });
|
|
620
|
-
|
|
621
|
-
// Reset timeout to give us more time
|
|
622
|
-
await this.debuggerRequest('POST', '/threads/reset');
|
|
623
|
-
|
|
624
|
-
return haltedThread;
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
} catch (error) {
|
|
628
|
-
// Ignore errors during polling - thread might not exist yet
|
|
629
|
-
this.logger.debug('Thread poll error (may be normal)', {
|
|
630
|
-
error: error instanceof Error ? error.message : String(error),
|
|
631
|
-
});
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
// Wait before next poll
|
|
635
|
-
await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
this.logger.debug('Timeout waiting for halted thread');
|
|
639
|
-
return null;
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
/**
|
|
643
|
-
* Evaluate an expression in the context of a halted thread
|
|
644
|
-
*/
|
|
645
|
-
private async evaluateInContext(threadId: number, expression: string): Promise<string> {
|
|
646
|
-
// Frame 0 is the current execution point
|
|
647
|
-
const frameIndex = 0;
|
|
648
|
-
|
|
649
|
-
// URL encode the expression
|
|
650
|
-
const encodedExpr = encodeURIComponent(expression);
|
|
651
|
-
|
|
652
|
-
this.logger.debug('Evaluating expression', { threadId, frameIndex });
|
|
653
|
-
|
|
654
|
-
const response = await this.debuggerRequest<EvalResponse>(
|
|
655
|
-
'GET',
|
|
656
|
-
`/threads/${threadId}/frames/${frameIndex}/eval?expr=${encodedExpr}`,
|
|
657
|
-
);
|
|
658
|
-
|
|
659
|
-
return response.result ?? 'undefined';
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
/**
|
|
663
|
-
* Resume a halted thread
|
|
664
|
-
*/
|
|
665
|
-
private async resumeThread(threadId: number): Promise<void> {
|
|
666
|
-
this.logger.debug('Resuming thread', { threadId });
|
|
667
|
-
|
|
668
|
-
try {
|
|
669
|
-
await this.debuggerRequest('POST', `/threads/${threadId}/resume`);
|
|
670
|
-
} catch (error) {
|
|
671
|
-
// Thread may have already completed
|
|
672
|
-
this.logger.debug('Resume thread error (may be expected)', {
|
|
673
|
-
error: error instanceof Error ? error.message : String(error),
|
|
674
|
-
});
|
|
675
|
-
}
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
/**
|
|
679
|
-
* Cleanup: remove breakpoints, disable debugger
|
|
680
|
-
*/
|
|
681
|
-
private async cleanup(): Promise<void> {
|
|
682
|
-
this.logger.debug('Starting cleanup');
|
|
683
|
-
|
|
684
|
-
// Remove all breakpoints
|
|
685
|
-
try {
|
|
686
|
-
await this.debuggerRequest('DELETE', '/breakpoints');
|
|
687
|
-
} catch {
|
|
688
|
-
// Ignore errors
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
// Disable debugger (also resumes any halted threads)
|
|
692
|
-
if (this.isDebuggerEnabled) {
|
|
693
|
-
try {
|
|
694
|
-
await this.debuggerRequest('DELETE', '/client');
|
|
695
|
-
this.isDebuggerEnabled = false;
|
|
696
|
-
} catch {
|
|
697
|
-
// Ignore errors
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
this.logger.debug('Cleanup complete');
|
|
702
|
-
}
|
|
703
|
-
|
|
704
|
-
/**
|
|
705
|
-
* Get guidance based on error message
|
|
706
|
-
*/
|
|
707
|
-
private getErrorGuidance(errorMessage: string): string[] {
|
|
708
|
-
const guidance: string[] = [];
|
|
709
|
-
|
|
710
|
-
if (errorMessage.includes('NotAuthorizedException')) {
|
|
711
|
-
guidance.push('Ensure your Business Manager user has the "Modules - Script Debugger" functional permission');
|
|
712
|
-
guidance.push('Check that script debugging is enabled in Administration > Development Setup');
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
if (errorMessage.includes('ClientIdRequiredException')) {
|
|
716
|
-
guidance.push('The x-dw-client-id header is required for the Script Debugger API');
|
|
717
|
-
}
|
|
718
|
-
|
|
719
|
-
if (errorMessage.includes('timeout') || errorMessage.includes('Timeout')) {
|
|
720
|
-
guidance.push('The script execution may have timed out');
|
|
721
|
-
guidance.push('Ensure the site ID is correct and the Default-Start route is accessible');
|
|
722
|
-
guidance.push('Check that app_storefront_base is in the site\'s cartridge path');
|
|
723
|
-
}
|
|
724
|
-
|
|
725
|
-
if (guidance.length === 0) {
|
|
726
|
-
guidance.push('Check SFCC instance connectivity');
|
|
727
|
-
guidance.push('Verify your credentials are correct');
|
|
728
|
-
guidance.push('Ensure script debugging is enabled in Business Manager');
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
return guidance;
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
/**
|
|
735
|
-
* Test connectivity to the debugger API
|
|
736
|
-
*/
|
|
737
|
-
async testConnection(): Promise<{ success: boolean; message: string }> {
|
|
738
|
-
try {
|
|
739
|
-
// Try to create and immediately delete a client to test connectivity
|
|
740
|
-
await this.enableDebugger();
|
|
741
|
-
await this.cleanup();
|
|
742
|
-
|
|
743
|
-
return {
|
|
744
|
-
success: true,
|
|
745
|
-
message: 'Successfully connected to Script Debugger API',
|
|
746
|
-
};
|
|
747
|
-
} catch (error) {
|
|
748
|
-
return {
|
|
749
|
-
success: false,
|
|
750
|
-
message: error instanceof Error ? error.message : String(error),
|
|
751
|
-
};
|
|
752
|
-
}
|
|
753
|
-
}
|
|
754
|
-
}
|