This is page 2 of 61. Use http://codebase.md/taurgis/sfcc-dev-mcp?lines=true&page={x} to view the full context. # Directory Structure ``` ├── .DS_Store ├── .github │ ├── dependabot.yml │ ├── instructions │ │ ├── mcp-node-tests.instructions.md │ │ └── mcp-yml-tests.instructions.md │ ├── ISSUE_TEMPLATE │ │ ├── bug_report.yml │ │ ├── config.yml │ │ ├── documentation.yml │ │ ├── feature_request.yml │ │ └── question.yml │ ├── PULL_REQUEST_TEMPLATE │ │ ├── bug_fix.md │ │ ├── documentation.md │ │ └── new_tool.md │ ├── pull_request_template.md │ └── workflows │ ├── ci.yml │ ├── deploy-pages.yml │ ├── publish.yml │ └── update-docs.yml ├── .gitignore ├── .husky │ └── pre-commit ├── aegis.config.docs-only.json ├── aegis.config.json ├── aegis.config.with-dw.json ├── AGENTS.md ├── ai-instructions │ ├── claude-desktop │ │ └── claude_custom_instructions.md │ ├── cursor │ │ └── .cursor │ │ └── rules │ │ ├── debugging-workflows.mdc │ │ ├── hooks-development.mdc │ │ ├── isml-templates.mdc │ │ ├── job-framework.mdc │ │ ├── performance-optimization.mdc │ │ ├── scapi-endpoints.mdc │ │ ├── security-patterns.mdc │ │ ├── sfcc-development.mdc │ │ ├── sfra-controllers.mdc │ │ ├── sfra-models.mdc │ │ ├── system-objects.mdc │ │ └── testing-patterns.mdc │ └── github-copilot │ └── copilot-instructions.md ├── CHANGELOG.md ├── CONTRIBUTING.md ├── docs │ ├── best-practices │ │ ├── cartridge_creation.md │ │ ├── isml_templates.md │ │ ├── job_framework.md │ │ ├── localserviceregistry.md │ │ ├── ocapi_hooks.md │ │ ├── performance.md │ │ ├── scapi_custom_endpoint.md │ │ ├── scapi_hooks.md │ │ ├── security.md │ │ ├── sfra_client_side_js.md │ │ ├── sfra_controllers.md │ │ ├── sfra_models.md │ │ └── sfra_scss.md │ ├── dw_campaign │ │ ├── ABTest.md │ │ ├── ABTestMgr.md │ │ ├── ABTestSegment.md │ │ ├── AmountDiscount.md │ │ ├── ApproachingDiscount.md │ │ ├── BonusChoiceDiscount.md │ │ ├── BonusDiscount.md │ │ ├── Campaign.md │ │ ├── CampaignMgr.md │ │ ├── CampaignStatusCodes.md │ │ ├── Coupon.md │ │ ├── CouponMgr.md │ │ ├── CouponRedemption.md │ │ ├── CouponStatusCodes.md │ │ ├── Discount.md │ │ ├── DiscountPlan.md │ │ ├── FixedPriceDiscount.md │ │ ├── FixedPriceShippingDiscount.md │ │ ├── FreeDiscount.md │ │ ├── FreeShippingDiscount.md │ │ ├── PercentageDiscount.md │ │ ├── PercentageOptionDiscount.md │ │ ├── PriceBookPriceDiscount.md │ │ ├── Promotion.md │ │ ├── PromotionMgr.md │ │ ├── PromotionPlan.md │ │ ├── SlotContent.md │ │ ├── SourceCodeGroup.md │ │ ├── SourceCodeInfo.md │ │ ├── SourceCodeStatusCodes.md │ │ └── TotalFixedPriceDiscount.md │ ├── dw_catalog │ │ ├── Catalog.md │ │ ├── CatalogMgr.md │ │ ├── Category.md │ │ ├── CategoryAssignment.md │ │ ├── CategoryLink.md │ │ ├── PriceBook.md │ │ ├── PriceBookMgr.md │ │ ├── Product.md │ │ ├── ProductActiveData.md │ │ ├── ProductAttributeModel.md │ │ ├── ProductAvailabilityLevels.md │ │ ├── ProductAvailabilityModel.md │ │ ├── ProductInventoryList.md │ │ ├── ProductInventoryMgr.md │ │ ├── ProductInventoryRecord.md │ │ ├── ProductLink.md │ │ ├── ProductMgr.md │ │ ├── ProductOption.md │ │ ├── ProductOptionModel.md │ │ ├── ProductOptionValue.md │ │ ├── ProductPriceInfo.md │ │ ├── ProductPriceModel.md │ │ ├── ProductPriceTable.md │ │ ├── ProductSearchHit.md │ │ ├── ProductSearchModel.md │ │ ├── ProductSearchRefinementDefinition.md │ │ ├── ProductSearchRefinements.md │ │ ├── ProductSearchRefinementValue.md │ │ ├── ProductVariationAttribute.md │ │ ├── ProductVariationAttributeValue.md │ │ ├── ProductVariationModel.md │ │ ├── Recommendation.md │ │ ├── SearchModel.md │ │ ├── SearchRefinementDefinition.md │ │ ├── SearchRefinements.md │ │ ├── SearchRefinementValue.md │ │ ├── SortingOption.md │ │ ├── SortingRule.md │ │ ├── Store.md │ │ ├── StoreGroup.md │ │ ├── StoreInventoryFilter.md │ │ ├── StoreInventoryFilterValue.md │ │ ├── StoreMgr.md │ │ ├── Variant.md │ │ └── VariationGroup.md │ ├── dw_content │ │ ├── Content.md │ │ ├── ContentMgr.md │ │ ├── ContentSearchModel.md │ │ ├── ContentSearchRefinementDefinition.md │ │ ├── ContentSearchRefinements.md │ │ ├── ContentSearchRefinementValue.md │ │ ├── Folder.md │ │ ├── Library.md │ │ ├── MarkupText.md │ │ └── MediaFile.md │ ├── dw_crypto │ │ ├── CertificateRef.md │ │ ├── CertificateUtils.md │ │ ├── Cipher.md │ │ ├── Encoding.md │ │ ├── JWE.md │ │ ├── JWEHeader.md │ │ ├── JWS.md │ │ ├── JWSHeader.md │ │ ├── KeyRef.md │ │ ├── Mac.md │ │ ├── MessageDigest.md │ │ ├── SecureRandom.md │ │ ├── Signature.md │ │ ├── WeakCipher.md │ │ ├── WeakMac.md │ │ ├── WeakMessageDigest.md │ │ ├── WeakSignature.md │ │ └── X509Certificate.md │ ├── dw_customer │ │ ├── AddressBook.md │ │ ├── AgentUserMgr.md │ │ ├── AgentUserStatusCodes.md │ │ ├── AuthenticationStatus.md │ │ ├── Credentials.md │ │ ├── Customer.md │ │ ├── CustomerActiveData.md │ │ ├── CustomerAddress.md │ │ ├── CustomerCDPData.md │ │ ├── CustomerContextMgr.md │ │ ├── CustomerGroup.md │ │ ├── CustomerList.md │ │ ├── CustomerMgr.md │ │ ├── CustomerPasswordConstraints.md │ │ ├── CustomerPaymentInstrument.md │ │ ├── CustomerStatusCodes.md │ │ ├── EncryptedObject.md │ │ ├── ExternalProfile.md │ │ ├── OrderHistory.md │ │ ├── ProductList.md │ │ ├── ProductListItem.md │ │ ├── ProductListItemPurchase.md │ │ ├── ProductListMgr.md │ │ ├── ProductListRegistrant.md │ │ ├── Profile.md │ │ └── Wallet.md │ ├── dw_extensions.applepay │ │ ├── ApplePayHookResult.md │ │ └── ApplePayHooks.md │ ├── dw_extensions.facebook │ │ ├── FacebookFeedHooks.md │ │ └── FacebookProduct.md │ ├── dw_extensions.paymentrequest │ │ ├── PaymentRequestHookResult.md │ │ └── PaymentRequestHooks.md │ ├── dw_extensions.payments │ │ ├── SalesforceBancontactPaymentDetails.md │ │ ├── SalesforceCardPaymentDetails.md │ │ ├── SalesforceEpsPaymentDetails.md │ │ ├── SalesforceIdealPaymentDetails.md │ │ ├── SalesforceKlarnaPaymentDetails.md │ │ ├── SalesforcePaymentDetails.md │ │ ├── SalesforcePaymentIntent.md │ │ ├── SalesforcePaymentMethod.md │ │ ├── SalesforcePaymentRequest.md │ │ ├── SalesforcePaymentsHooks.md │ │ ├── SalesforcePaymentsMgr.md │ │ ├── SalesforcePaymentsSiteConfiguration.md │ │ ├── SalesforcePayPalOrder.md │ │ ├── SalesforcePayPalOrderAddress.md │ │ ├── SalesforcePayPalOrderPayer.md │ │ ├── SalesforcePayPalPaymentDetails.md │ │ ├── SalesforceSepaDebitPaymentDetails.md │ │ └── SalesforceVenmoPaymentDetails.md │ ├── dw_extensions.pinterest │ │ ├── PinterestAvailability.md │ │ ├── PinterestFeedHooks.md │ │ ├── PinterestOrder.md │ │ ├── PinterestOrderHooks.md │ │ └── PinterestProduct.md │ ├── dw_io │ │ ├── CSVStreamReader.md │ │ ├── CSVStreamWriter.md │ │ ├── File.md │ │ ├── FileReader.md │ │ ├── FileWriter.md │ │ ├── InputStream.md │ │ ├── OutputStream.md │ │ ├── PrintWriter.md │ │ ├── RandomAccessFileReader.md │ │ ├── Reader.md │ │ ├── StringWriter.md │ │ ├── Writer.md │ │ ├── XMLIndentingStreamWriter.md │ │ ├── XMLStreamConstants.md │ │ ├── XMLStreamReader.md │ │ └── XMLStreamWriter.md │ ├── dw_job │ │ ├── JobExecution.md │ │ └── JobStepExecution.md │ ├── dw_net │ │ ├── FTPClient.md │ │ ├── FTPFileInfo.md │ │ ├── HTTPClient.md │ │ ├── HTTPRequestPart.md │ │ ├── Mail.md │ │ ├── SFTPClient.md │ │ ├── SFTPFileInfo.md │ │ ├── WebDAVClient.md │ │ └── WebDAVFileInfo.md │ ├── dw_object │ │ ├── ActiveData.md │ │ ├── CustomAttributes.md │ │ ├── CustomObject.md │ │ ├── CustomObjectMgr.md │ │ ├── Extensible.md │ │ ├── ExtensibleObject.md │ │ ├── Note.md │ │ ├── ObjectAttributeDefinition.md │ │ ├── ObjectAttributeGroup.md │ │ ├── ObjectAttributeValueDefinition.md │ │ ├── ObjectTypeDefinition.md │ │ ├── PersistentObject.md │ │ ├── SimpleExtensible.md │ │ └── SystemObjectMgr.md │ ├── dw_order │ │ ├── AbstractItem.md │ │ ├── AbstractItemCtnr.md │ │ ├── Appeasement.md │ │ ├── AppeasementItem.md │ │ ├── Basket.md │ │ ├── BasketMgr.md │ │ ├── BonusDiscountLineItem.md │ │ ├── CouponLineItem.md │ │ ├── CreateAgentBasketLimitExceededException.md │ │ ├── CreateBasketFromOrderException.md │ │ ├── CreateCouponLineItemException.md │ │ ├── CreateOrderException.md │ │ ├── CreateTemporaryBasketLimitExceededException.md │ │ ├── GiftCertificate.md │ │ ├── GiftCertificateLineItem.md │ │ ├── GiftCertificateMgr.md │ │ ├── GiftCertificateStatusCodes.md │ │ ├── Invoice.md │ │ ├── InvoiceItem.md │ │ ├── LineItem.md │ │ ├── LineItemCtnr.md │ │ ├── Order.md │ │ ├── OrderAddress.md │ │ ├── OrderItem.md │ │ ├── OrderMgr.md │ │ ├── OrderPaymentInstrument.md │ │ ├── OrderProcessStatusCodes.md │ │ ├── PaymentCard.md │ │ ├── PaymentInstrument.md │ │ ├── PaymentMethod.md │ │ ├── PaymentMgr.md │ │ ├── PaymentProcessor.md │ │ ├── PaymentStatusCodes.md │ │ ├── PaymentTransaction.md │ │ ├── PriceAdjustment.md │ │ ├── PriceAdjustmentLimitTypes.md │ │ ├── ProductLineItem.md │ │ ├── ProductShippingCost.md │ │ ├── ProductShippingLineItem.md │ │ ├── ProductShippingModel.md │ │ ├── Return.md │ │ ├── ReturnCase.md │ │ ├── ReturnCaseItem.md │ │ ├── ReturnItem.md │ │ ├── Shipment.md │ │ ├── ShipmentShippingCost.md │ │ ├── ShipmentShippingModel.md │ │ ├── ShippingLineItem.md │ │ ├── ShippingLocation.md │ │ ├── ShippingMethod.md │ │ ├── ShippingMgr.md │ │ ├── ShippingOrder.md │ │ ├── ShippingOrderItem.md │ │ ├── SumItem.md │ │ ├── TaxGroup.md │ │ ├── TaxItem.md │ │ ├── TaxMgr.md │ │ ├── TrackingInfo.md │ │ └── TrackingRef.md │ ├── dw_order.hooks │ │ ├── CalculateHooks.md │ │ ├── OrderHooks.md │ │ ├── PaymentHooks.md │ │ ├── ReturnHooks.md │ │ └── ShippingOrderHooks.md │ ├── dw_rpc │ │ ├── SOAPUtil.md │ │ ├── Stub.md │ │ └── WebReference.md │ ├── dw_suggest │ │ ├── BrandSuggestions.md │ │ ├── CategorySuggestions.md │ │ ├── ContentSuggestions.md │ │ ├── CustomSuggestions.md │ │ ├── ProductSuggestions.md │ │ ├── SearchPhraseSuggestions.md │ │ ├── SuggestedCategory.md │ │ ├── SuggestedContent.md │ │ ├── SuggestedPhrase.md │ │ ├── SuggestedProduct.md │ │ ├── SuggestedTerm.md │ │ ├── SuggestedTerms.md │ │ ├── Suggestions.md │ │ └── SuggestModel.md │ ├── dw_svc │ │ ├── FTPService.md │ │ ├── FTPServiceDefinition.md │ │ ├── HTTPFormService.md │ │ ├── HTTPFormServiceDefinition.md │ │ ├── HTTPService.md │ │ ├── HTTPServiceDefinition.md │ │ ├── LocalServiceRegistry.md │ │ ├── Result.md │ │ ├── Service.md │ │ ├── ServiceCallback.md │ │ ├── ServiceConfig.md │ │ ├── ServiceCredential.md │ │ ├── ServiceDefinition.md │ │ ├── ServiceProfile.md │ │ ├── ServiceRegistry.md │ │ ├── SOAPService.md │ │ └── SOAPServiceDefinition.md │ ├── dw_system │ │ ├── AgentUserStatusCodes.md │ │ ├── Cache.md │ │ ├── CacheMgr.md │ │ ├── HookMgr.md │ │ ├── InternalObject.md │ │ ├── JobProcessMonitor.md │ │ ├── Log.md │ │ ├── Logger.md │ │ ├── LogNDC.md │ │ ├── OrganizationPreferences.md │ │ ├── Pipeline.md │ │ ├── PipelineDictionary.md │ │ ├── RemoteInclude.md │ │ ├── Request.md │ │ ├── RequestHooks.md │ │ ├── Response.md │ │ ├── RESTErrorResponse.md │ │ ├── RESTResponseMgr.md │ │ ├── RESTSuccessResponse.md │ │ ├── SearchStatus.md │ │ ├── Session.md │ │ ├── Site.md │ │ ├── SitePreferences.md │ │ ├── Status.md │ │ ├── StatusItem.md │ │ ├── System.md │ │ └── Transaction.md │ ├── dw_util │ │ ├── ArrayList.md │ │ ├── Assert.md │ │ ├── BigInteger.md │ │ ├── Bytes.md │ │ ├── Calendar.md │ │ ├── Collection.md │ │ ├── Currency.md │ │ ├── DateUtils.md │ │ ├── Decimal.md │ │ ├── FilteringCollection.md │ │ ├── Geolocation.md │ │ ├── HashMap.md │ │ ├── HashSet.md │ │ ├── Iterator.md │ │ ├── LinkedHashMap.md │ │ ├── LinkedHashSet.md │ │ ├── List.md │ │ ├── Locale.md │ │ ├── Map.md │ │ ├── MapEntry.md │ │ ├── MappingKey.md │ │ ├── MappingMgr.md │ │ ├── PropertyComparator.md │ │ ├── SecureEncoder.md │ │ ├── SecureFilter.md │ │ ├── SeekableIterator.md │ │ ├── Set.md │ │ ├── SortedMap.md │ │ ├── SortedSet.md │ │ ├── StringUtils.md │ │ ├── Template.md │ │ └── UUIDUtils.md │ ├── dw_value │ │ ├── EnumValue.md │ │ ├── MimeEncodedText.md │ │ ├── Money.md │ │ └── Quantity.md │ ├── dw_web │ │ ├── ClickStream.md │ │ ├── ClickStreamEntry.md │ │ ├── Cookie.md │ │ ├── Cookies.md │ │ ├── CSRFProtection.md │ │ ├── Form.md │ │ ├── FormAction.md │ │ ├── FormElement.md │ │ ├── FormElementValidationResult.md │ │ ├── FormField.md │ │ ├── FormFieldOption.md │ │ ├── FormFieldOptions.md │ │ ├── FormGroup.md │ │ ├── FormList.md │ │ ├── FormListItem.md │ │ ├── Forms.md │ │ ├── HttpParameter.md │ │ ├── HttpParameterMap.md │ │ ├── LoopIterator.md │ │ ├── PageMetaData.md │ │ ├── PageMetaTag.md │ │ ├── PagingModel.md │ │ ├── Resource.md │ │ ├── URL.md │ │ ├── URLAction.md │ │ ├── URLParameter.md │ │ ├── URLRedirect.md │ │ ├── URLRedirectMgr.md │ │ └── URLUtils.md │ ├── sfra │ │ ├── account.md │ │ ├── address.md │ │ ├── billing.md │ │ ├── cart.md │ │ ├── categories.md │ │ ├── content.md │ │ ├── locale.md │ │ ├── order.md │ │ ├── payment.md │ │ ├── price-default.md │ │ ├── price-range.md │ │ ├── price-tiered.md │ │ ├── product-bundle.md │ │ ├── product-full.md │ │ ├── product-line-items.md │ │ ├── product-search.md │ │ ├── product-tile.md │ │ ├── querystring.md │ │ ├── render.md │ │ ├── request.md │ │ ├── response.md │ │ ├── server.md │ │ ├── shipping.md │ │ ├── store.md │ │ ├── stores.md │ │ └── totals.md │ └── TopLevel │ ├── APIException.md │ ├── arguments.md │ ├── Array.md │ ├── ArrayBuffer.md │ ├── BigInt.md │ ├── Boolean.md │ ├── ConversionError.md │ ├── DataView.md │ ├── Date.md │ ├── Error.md │ ├── ES6Iterator.md │ ├── EvalError.md │ ├── Fault.md │ ├── Float32Array.md │ ├── Float64Array.md │ ├── Function.md │ ├── Generator.md │ ├── global.md │ ├── Int16Array.md │ ├── Int32Array.md │ ├── Int8Array.md │ ├── InternalError.md │ ├── IOError.md │ ├── Iterable.md │ ├── Iterator.md │ ├── JSON.md │ ├── Map.md │ ├── Math.md │ ├── Module.md │ ├── Namespace.md │ ├── Number.md │ ├── Object.md │ ├── QName.md │ ├── RangeError.md │ ├── ReferenceError.md │ ├── RegExp.md │ ├── Set.md │ ├── StopIteration.md │ ├── String.md │ ├── Symbol.md │ ├── SyntaxError.md │ ├── SystemError.md │ ├── TypeError.md │ ├── Uint16Array.md │ ├── Uint32Array.md │ ├── Uint8Array.md │ ├── Uint8ClampedArray.md │ ├── URIError.md │ ├── WeakMap.md │ ├── WeakSet.md │ ├── XML.md │ ├── XMLList.md │ └── XMLStreamError.md ├── docs-site │ ├── .gitignore │ ├── App.tsx │ ├── components │ │ ├── Badge.tsx │ │ ├── BreadcrumbSchema.tsx │ │ ├── CodeBlock.tsx │ │ ├── Collapsible.tsx │ │ ├── ConfigBuilder.tsx │ │ ├── ConfigHero.tsx │ │ ├── ConfigModeTabs.tsx │ │ ├── icons.tsx │ │ ├── Layout.tsx │ │ ├── LightCodeContainer.tsx │ │ ├── NewcomerCTA.tsx │ │ ├── NextStepsStrip.tsx │ │ ├── OnThisPage.tsx │ │ ├── Search.tsx │ │ ├── SEO.tsx │ │ ├── Sidebar.tsx │ │ ├── StructuredData.tsx │ │ ├── ToolCard.tsx │ │ ├── ToolFilters.tsx │ │ ├── Typography.tsx │ │ └── VersionBadge.tsx │ ├── constants.tsx │ ├── index.html │ ├── main.tsx │ ├── metadata.json │ ├── package-lock.json │ ├── package.json │ ├── pages │ │ ├── AIInterfacesPage.tsx │ │ ├── ConfigurationPage.tsx │ │ ├── DevelopmentPage.tsx │ │ ├── ExamplesPage.tsx │ │ ├── FeaturesPage.tsx │ │ ├── HomePage.tsx │ │ ├── SecurityPage.tsx │ │ ├── ToolsPage.tsx │ │ └── TroubleshootingPage.tsx │ ├── postcss.config.js │ ├── public │ │ ├── .well-known │ │ │ └── security.txt │ │ ├── 404.html │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon.png │ │ ├── explain-product-pricing-methods-no-mcp.png │ │ ├── explain-product-pricing-methods.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── llms.txt │ │ ├── robots.txt │ │ ├── site.webmanifest │ │ └── sitemap.xml │ ├── README.md │ ├── scripts │ │ ├── generate-search-index.js │ │ ├── generate-sitemap.js │ │ └── search-dev.js │ ├── src │ │ └── styles │ │ ├── input.css │ │ └── prism-theme.css │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── types.ts │ ├── utils │ │ ├── search.ts │ │ └── toolsData.ts │ └── vite.config.ts ├── eslint.config.js ├── jest.config.js ├── LICENSE ├── package-lock.json ├── package.json ├── README.md ├── scripts │ └── convert-docs.js ├── SECURITY.md ├── server.json ├── src │ ├── clients │ │ ├── base │ │ │ ├── http-client.ts │ │ │ ├── oauth-token.ts │ │ │ └── ocapi-auth-client.ts │ │ ├── best-practices-client.ts │ │ ├── cartridge-generation-client.ts │ │ ├── docs │ │ │ ├── class-content-parser.ts │ │ │ ├── class-name-resolver.ts │ │ │ ├── documentation-scanner.ts │ │ │ ├── index.ts │ │ │ └── referenced-types-extractor.ts │ │ ├── docs-client.ts │ │ ├── log-client.ts │ │ ├── logs │ │ │ ├── index.ts │ │ │ ├── log-analyzer.ts │ │ │ ├── log-client.ts │ │ │ ├── log-constants.ts │ │ │ ├── log-file-discovery.ts │ │ │ ├── log-file-reader.ts │ │ │ ├── log-formatter.ts │ │ │ ├── log-processor.ts │ │ │ ├── log-types.ts │ │ │ └── webdav-client-manager.ts │ │ ├── ocapi │ │ │ ├── code-versions-client.ts │ │ │ ├── site-preferences-client.ts │ │ │ └── system-objects-client.ts │ │ ├── ocapi-client.ts │ │ └── sfra-client.ts │ ├── config │ │ ├── configuration-factory.ts │ │ └── dw-json-loader.ts │ ├── core │ │ ├── handlers │ │ │ ├── abstract-log-tool-handler.ts │ │ │ ├── base-handler.ts │ │ │ ├── best-practices-handler.ts │ │ │ ├── cartridge-handler.ts │ │ │ ├── client-factory.ts │ │ │ ├── code-version-handler.ts │ │ │ ├── docs-handler.ts │ │ │ ├── job-log-handler.ts │ │ │ ├── job-log-tool-config.ts │ │ │ ├── log-handler.ts │ │ │ ├── log-tool-config.ts │ │ │ ├── sfra-handler.ts │ │ │ ├── system-object-handler.ts │ │ │ └── validation-helpers.ts │ │ ├── server.ts │ │ └── tool-definitions.ts │ ├── index.ts │ ├── main.ts │ ├── services │ │ ├── file-system-service.ts │ │ ├── index.ts │ │ └── path-service.ts │ ├── tool-configs │ │ ├── best-practices-tool-config.ts │ │ ├── cartridge-tool-config.ts │ │ ├── code-version-tool-config.ts │ │ ├── docs-tool-config.ts │ │ ├── job-log-tool-config.ts │ │ ├── log-tool-config.ts │ │ ├── sfra-tool-config.ts │ │ └── system-object-tool-config.ts │ ├── types │ │ └── types.ts │ └── utils │ ├── cache.ts │ ├── job-log-tool-config.ts │ ├── job-log-utils.ts │ ├── log-cache.ts │ ├── log-tool-config.ts │ ├── log-tool-constants.ts │ ├── log-tool-utils.ts │ ├── logger.ts │ ├── ocapi-url-builder.ts │ ├── path-resolver.ts │ ├── query-builder.ts │ ├── utils.ts │ └── validator.ts ├── tests │ ├── __mocks__ │ │ ├── docs-client.ts │ │ ├── src │ │ │ └── clients │ │ │ └── base │ │ │ └── http-client.js │ │ └── webdav.js │ ├── base-handler.test.ts │ ├── base-http-client.test.ts │ ├── best-practices-handler.test.ts │ ├── cache.test.ts │ ├── cartridge-handler.test.ts │ ├── class-content-parser.test.ts │ ├── class-name-resolver.test.ts │ ├── client-factory.test.ts │ ├── code-version-handler.test.ts │ ├── code-versions-client.test.ts │ ├── config.test.ts │ ├── configuration-factory.test.ts │ ├── docs-handler.test.ts │ ├── documentation-scanner.test.ts │ ├── file-system-service.test.ts │ ├── job-log-handler.test.ts │ ├── job-log-utils.test.ts │ ├── log-client.test.ts │ ├── log-handler.test.ts │ ├── log-processor.test.ts │ ├── logger.test.ts │ ├── mcp │ │ ├── AGENTS.md │ │ ├── node │ │ │ ├── activate-code-version-advanced.full-mode.programmatic.test.js │ │ │ ├── code-versions.full-mode.programmatic.test.js │ │ │ ├── generate-cartridge-structure.docs-only.programmatic.test.js │ │ │ ├── get-available-best-practice-guides.docs-only.programmatic.test.js │ │ │ ├── get-available-sfra-documents.programmatic.test.js │ │ │ ├── get-best-practice-guide.docs-only.programmatic.test.js │ │ │ ├── get-hook-reference.docs-only.programmatic.test.js │ │ │ ├── get-job-execution-summary.full-mode.programmatic.test.js │ │ │ ├── get-job-log-entries.full-mode.programmatic.test.js │ │ │ ├── get-latest-debug.full-mode.programmatic.test.js │ │ │ ├── get-latest-error.full-mode.programmatic.test.js │ │ │ ├── get-latest-info.full-mode.programmatic.test.js │ │ │ ├── get-latest-job-log-files.full-mode.programmatic.test.js │ │ │ ├── get-latest-warn.full-mode.programmatic.test.js │ │ │ ├── get-log-file-contents.full-mode.programmatic.test.js │ │ │ ├── get-sfcc-class-documentation.docs-only.programmatic.test.js │ │ │ ├── get-sfcc-class-info.docs-only.programmatic.test.js │ │ │ ├── get-sfra-categories.docs-only.programmatic.test.js │ │ │ ├── get-sfra-document.programmatic.test.js │ │ │ ├── get-sfra-documents-by-category.docs-only.programmatic.test.js │ │ │ ├── get-system-object-definition.full-mode.programmatic.test.js │ │ │ ├── get-system-object-definitions.docs-only.programmatic.test.js │ │ │ ├── get-system-object-definitions.full-mode.programmatic.test.js │ │ │ ├── list-log-files.full-mode.programmatic.test.js │ │ │ ├── list-sfcc-classes.docs-only.programmatic.test.js │ │ │ ├── search-best-practices.docs-only.programmatic.test.js │ │ │ ├── search-custom-object-attribute-definitions.full-mode.programmatic.test.js │ │ │ ├── search-job-logs-by-name.full-mode.programmatic.test.js │ │ │ ├── search-job-logs.full-mode.programmatic.test.js │ │ │ ├── search-logs.full-mode.programmatic.test.js │ │ │ ├── search-sfcc-classes.docs-only.programmatic.test.js │ │ │ ├── search-sfcc-methods.docs-only.programmatic.test.js │ │ │ ├── search-sfra-documentation.docs-only.programmatic.test.js │ │ │ ├── search-site-preferences.full-mode.programmatic.test.js │ │ │ ├── search-system-object-attribute-definitions.full-mode.programmatic.test.js │ │ │ ├── search-system-object-attribute-groups.full-mode.programmatic.test.js │ │ │ ├── summarize-logs.full-mode.programmatic.test.js │ │ │ ├── tools.docs-only.programmatic.test.js │ │ │ └── tools.full-mode.programmatic.test.js │ │ ├── README.md │ │ ├── test-fixtures │ │ │ └── dw.json │ │ └── yaml │ │ ├── activate-code-version.docs-only.test.mcp.yml │ │ ├── activate-code-version.full-mode.test.mcp.yml │ │ ├── get_latest_error.test.mcp.yml │ │ ├── get-available-best-practice-guides.docs-only.test.mcp.yml │ │ ├── get-available-best-practice-guides.full-mode.test.mcp.yml │ │ ├── get-available-sfra-documents.docs-only.test.mcp.yml │ │ ├── get-available-sfra-documents.full-mode.test.mcp.yml │ │ ├── get-best-practice-guide.docs-only.test.mcp.yml │ │ ├── get-best-practice-guide.full-mode.test.mcp.yml │ │ ├── get-code-versions.docs-only.test.mcp.yml │ │ ├── get-code-versions.full-mode.test.mcp.yml │ │ ├── get-hook-reference.docs-only.test.mcp.yml │ │ ├── get-hook-reference.full-mode.test.mcp.yml │ │ ├── get-job-execution-summary.full-mode.test.mcp.yml │ │ ├── get-job-log-entries.full-mode.test.mcp.yml │ │ ├── get-latest-debug.full-mode.test.mcp.yml │ │ ├── get-latest-error.full-mode.test.mcp.yml │ │ ├── get-latest-info.full-mode.test.mcp.yml │ │ ├── get-latest-job-log-files.full-mode.test.mcp.yml │ │ ├── get-latest-warn.full-mode.test.mcp.yml │ │ ├── get-log-file-contents.full-mode.test.mcp.yml │ │ ├── get-sfcc-class-documentation.docs-only.test.mcp.yml │ │ ├── get-sfcc-class-documentation.full-mode.test.mcp.yml │ │ ├── get-sfcc-class-info.docs-only.test.mcp.yml │ │ ├── get-sfcc-class-info.full-mode.test.mcp.yml │ │ ├── get-sfra-categories.docs-only.test.mcp.yml │ │ ├── get-sfra-categories.full-mode.test.mcp.yml │ │ ├── get-sfra-document.docs-only.test.mcp.yml │ │ ├── get-sfra-document.full-mode.test.mcp.yml │ │ ├── get-sfra-documents-by-category.docs-only.test.mcp.yml │ │ ├── get-sfra-documents-by-category.full-mode.test.mcp.yml │ │ ├── get-system-object-definition.docs-only.test.mcp.yml │ │ ├── get-system-object-definition.full-mode.test.mcp.yml │ │ ├── get-system-object-definitions.docs-only.test.mcp.yml │ │ ├── get-system-object-definitions.full-mode.test.mcp.yml │ │ ├── list-log-files.full-mode.test.mcp.yml │ │ ├── list-sfcc-classes.docs-only.test.mcp.yml │ │ ├── list-sfcc-classes.full-mode.test.mcp.yml │ │ ├── search-best-practices.docs-only.test.mcp.yml │ │ ├── search-best-practices.full-mode.test.mcp.yml │ │ ├── search-custom-object-attribute-definitions.docs-only.test.mcp.yml │ │ ├── search-custom-object-attribute-definitions.test.mcp.yml │ │ ├── search-job-logs-by-name.full-mode.test.mcp.yml │ │ ├── search-job-logs.full-mode.test.mcp.yml │ │ ├── search-logs.full-mode.test.mcp.yml │ │ ├── search-sfcc-classes.docs-only.test.mcp.yml │ │ ├── search-sfcc-classes.full-mode.test.mcp.yml │ │ ├── search-sfcc-methods.docs-only.test.mcp.yml │ │ ├── search-sfcc-methods.full-mode.test.mcp.yml │ │ ├── search-sfra-documentation.docs-only.test.mcp.yml │ │ ├── search-sfra-documentation.full-mode.test.mcp.yml │ │ ├── search-site-preferences.docs-only.test.mcp.yml │ │ ├── search-site-preferences.full-mode.test.mcp.yml │ │ ├── search-system-object-attribute-definitions.docs-only.test.mcp.yml │ │ ├── search-system-object-attribute-definitions.full-mode.test.mcp.yml │ │ ├── search-system-object-attribute-groups.docs-only.test.mcp.yml │ │ ├── search-system-object-attribute-groups.full-mode.test.mcp.yml │ │ ├── summarize-logs.full-mode.test.mcp.yml │ │ ├── tools.docs-only.test.mcp.yml │ │ └── tools.full-mode.test.mcp.yml │ ├── oauth-token.test.ts │ ├── ocapi-auth-client.test.ts │ ├── ocapi-client.test.ts │ ├── path-service.test.ts │ ├── query-builder.test.ts │ ├── referenced-types-extractor.test.ts │ ├── servers │ │ ├── sfcc-mock-server │ │ │ ├── mock-data │ │ │ │ └── ocapi │ │ │ │ ├── code-versions.json │ │ │ │ ├── custom-object-attributes-customapi.json │ │ │ │ ├── custom-object-attributes-globalsettings.json │ │ │ │ ├── custom-object-attributes-versionhistory.json │ │ │ │ ├── site-preferences-ccv.json │ │ │ │ ├── site-preferences-fastforward.json │ │ │ │ ├── site-preferences-sfra.json │ │ │ │ ├── site-preferences-storefront.json │ │ │ │ ├── site-preferences-system.json │ │ │ │ ├── system-object-attribute-groups-campaign.json │ │ │ │ ├── system-object-attribute-groups-category.json │ │ │ │ ├── system-object-attribute-groups-order.json │ │ │ │ ├── system-object-attribute-groups-product.json │ │ │ │ ├── system-object-attribute-groups-sitepreferences.json │ │ │ │ ├── system-object-attributes-customeraddress.json │ │ │ │ ├── system-object-attributes-product-expanded.json │ │ │ │ ├── system-object-attributes-product.json │ │ │ │ ├── system-object-definition-category.json │ │ │ │ ├── system-object-definition-customer.json │ │ │ │ ├── system-object-definition-customeraddress.json │ │ │ │ ├── system-object-definition-order.json │ │ │ │ ├── system-object-definition-product.json │ │ │ │ ├── system-object-definitions-old.json │ │ │ │ └── system-object-definitions.json │ │ │ ├── package-lock.json │ │ │ ├── package.json │ │ │ ├── README.md │ │ │ ├── scripts │ │ │ │ └── setup-logs.js │ │ │ ├── server.js │ │ │ └── src │ │ │ ├── app.js │ │ │ ├── config │ │ │ │ └── server-config.js │ │ │ ├── middleware │ │ │ │ ├── auth.js │ │ │ │ ├── cors.js │ │ │ │ └── logging.js │ │ │ ├── routes │ │ │ │ ├── ocapi │ │ │ │ │ ├── code-versions-handler.js │ │ │ │ │ ├── oauth-handler.js │ │ │ │ │ ├── ocapi-error-utils.js │ │ │ │ │ ├── ocapi-utils.js │ │ │ │ │ ├── site-preferences-handler.js │ │ │ │ │ └── system-objects-handler.js │ │ │ │ ├── ocapi.js │ │ │ │ └── webdav.js │ │ │ └── utils │ │ │ ├── mock-data-loader.js │ │ │ └── webdav-xml.js │ │ └── sfcc-mock-server-manager.ts │ ├── sfcc-mock-server.test.ts │ ├── site-preferences-client.test.ts │ ├── system-objects-client.test.ts │ ├── utils.test.ts │ ├── validation-helpers.test.ts │ └── validator.test.ts ├── tsconfig.json └── tsconfig.test.json ``` # Files -------------------------------------------------------------------------------- /docs-site/tsconfig.json: -------------------------------------------------------------------------------- ```json 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "experimentalDecorators": true, 5 | "useDefineForClassFields": false, 6 | "module": "ESNext", 7 | "lib": [ 8 | "ES2022", 9 | "DOM", 10 | "DOM.Iterable" 11 | ], 12 | "skipLibCheck": true, 13 | "types": [ 14 | "node" 15 | ], 16 | "moduleResolution": "bundler", 17 | "isolatedModules": true, 18 | "moduleDetection": "force", 19 | "allowJs": true, 20 | "jsx": "react-jsx", 21 | "paths": { 22 | "@/*": [ 23 | "./*" 24 | ] 25 | }, 26 | "allowImportingTsExtensions": true, 27 | "noEmit": true 28 | } 29 | } ``` -------------------------------------------------------------------------------- /src/clients/log-client.ts: -------------------------------------------------------------------------------- ```typescript 1 | /** 2 | * SFCC log client - now uses modular structure 3 | * 4 | * This file provides backward compatibility by re-exporting the main log client 5 | * from the new modular structure in the logs/ directory. 6 | */ 7 | 8 | export { SFCCLogClient } from './logs/index.js'; 9 | export type { LogLevel, LogFileInfo, LogSummary, WebDAVClientConfig } from './logs/index.js'; 10 | 11 | // Re-export SFCCConfig for backward compatibility 12 | export interface SFCCConfig { 13 | hostname?: string; 14 | username?: string; 15 | password?: string; 16 | clientId?: string; 17 | clientSecret?: string; 18 | siteId?: string; 19 | } 20 | ``` -------------------------------------------------------------------------------- /docs/dw_web/Forms.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.web 2 | 3 | # Class Forms 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.web.Forms 9 | 10 | ## Description 11 | 12 | The Forms object provides access to all current forms in the session. The individual forms are retrieved as a dynamic property, for example 'forms.searchform'. It is typically retrieved from the session via Session.getForms(). But it is also available in the PipelineDictionary and can be accessed via 'pdict.CurrentForms'. Note that values stored with a form on the session are deleted if the request locale is changed during the session. 13 | 14 | ## Constructor Summary 15 | 16 | ## Method Summary ``` -------------------------------------------------------------------------------- /docs/dw_io/InputStream.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.io 2 | 3 | # Class InputStream 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.io.InputStream 9 | 10 | ## Description 11 | 12 | The class represent a stream of bytes that can be read from the application. The InputStream itself doesn't provide any methods to read the data. Instead the InputStream can be chained with other classes like a XMLStreamReader to read data. 13 | 14 | ## Constructor Summary 15 | 16 | ## Method Summary 17 | 18 | ### close 19 | 20 | **Signature:** `close() : void` 21 | 22 | Closes the input stream. 23 | 24 | ## Method Detail 25 | 26 | ## Method Details 27 | 28 | ### close 29 | 30 | **Signature:** `close() : void` 31 | 32 | **Description:** Closes the input stream. 33 | 34 | --- ``` -------------------------------------------------------------------------------- /docs/dw_catalog/SortingRule.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.catalog 2 | 3 | # Class SortingRule 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.object.PersistentObject 9 | - dw.catalog.SortingRule 10 | 11 | ## Description 12 | 13 | Represents a product sorting rule for use with the ProductSearchModel. 14 | 15 | ## Properties 16 | 17 | ### ID 18 | 19 | **Type:** String (Read Only) 20 | 21 | The ID of the sorting rule. 22 | 23 | ## Constructor Summary 24 | 25 | ## Method Summary 26 | 27 | ### getID 28 | 29 | **Signature:** `getID() : String` 30 | 31 | Returns the ID of the sorting rule. 32 | 33 | ## Method Detail 34 | 35 | ## Method Details 36 | 37 | ### getID 38 | 39 | **Signature:** `getID() : String` 40 | 41 | **Description:** Returns the ID of the sorting rule. 42 | 43 | **Returns:** 44 | 45 | sorting rule ID 46 | 47 | --- ``` -------------------------------------------------------------------------------- /server.json: -------------------------------------------------------------------------------- ```json 1 | { 2 | "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", 3 | "name": "io.github.taurgis/sfcc-dev-mcp", 4 | "description": "MCP server for Salesforce B2C Commerce Cloud development assistance", 5 | "status": "active", 6 | "repository": { 7 | "url": "https://github.com/taurgis/sfcc-dev-mcp", 8 | "source": "github" 9 | }, 10 | "version": "1.0.14", 11 | "packages": [ 12 | { 13 | "registry_type": "npm", 14 | "registry_base_url": "https://registry.npmjs.org", 15 | "identifier": "sfcc-dev-mcp", 16 | "version": "1.0.14", 17 | "transport": { 18 | "type": "stdio" 19 | } 20 | } 21 | ] 22 | } ``` -------------------------------------------------------------------------------- /docs/dw_order/ShipmentShippingCost.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.order 2 | 3 | # Class ShipmentShippingCost 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.order.ShipmentShippingCost 9 | 10 | ## Description 11 | 12 | Represents shipping cost applied to shipments. Returned by ShipmentShippingModel.getShippingCost(ShippingMethod). 13 | 14 | ## Properties 15 | 16 | ### amount 17 | 18 | **Type:** Money (Read Only) 19 | 20 | The shipping amount. 21 | 22 | ## Constructor Summary 23 | 24 | ## Method Summary 25 | 26 | ### getAmount 27 | 28 | **Signature:** `getAmount() : Money` 29 | 30 | Returns the shipping amount. 31 | 32 | ## Method Detail 33 | 34 | ## Method Details 35 | 36 | ### getAmount 37 | 38 | **Signature:** `getAmount() : Money` 39 | 40 | **Description:** Returns the shipping amount. 41 | 42 | **Returns:** 43 | 44 | Shipping amount 45 | 46 | --- ``` -------------------------------------------------------------------------------- /docs/dw_suggest/CustomSuggestions.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.suggest 2 | 3 | # Class CustomSuggestions 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.suggest.Suggestions 9 | - dw.suggest.CustomSuggestions 10 | 11 | ## Description 12 | 13 | The custom suggestion container provides access to merchant provided search phrases found using the suggested terms as search criteria. The method SearchPhraseSuggestions.getSuggestedPhrases() can be used to get the list of found search phrases. The custom phrases lookup is being executed in the current site. Furthermore the list of suggested terms is accessible through SearchPhraseSuggestions.getSuggestedTerms() method. 14 | 15 | ## Constructor Summary 16 | 17 | ## Method Summary ``` -------------------------------------------------------------------------------- /tests/__mocks__/src/clients/base/http-client.js: -------------------------------------------------------------------------------- ```javascript 1 | /** 2 | * Mock for BaseHttpClient 3 | */ 4 | 5 | export class BaseHttpClient { 6 | constructor(baseUrl) { 7 | this.baseUrl = baseUrl; 8 | this.logger = { 9 | debug: jest.fn(), 10 | info: jest.fn(), 11 | warn: jest.fn(), 12 | error: jest.fn(), 13 | }; 14 | } 15 | 16 | async makeRequest() { 17 | return { data: 'mocked' }; 18 | } 19 | 20 | async get() { 21 | return { data: 'mocked' }; 22 | } 23 | 24 | async post() { 25 | return { data: 'mocked' }; 26 | } 27 | 28 | async put() { 29 | return { data: 'mocked' }; 30 | } 31 | 32 | async patch() { 33 | return { data: 'mocked' }; 34 | } 35 | 36 | async delete() { 37 | return { data: 'mocked' }; 38 | } 39 | 40 | async handleAuthError() { 41 | // Mock implementation 42 | } 43 | } 44 | ``` -------------------------------------------------------------------------------- /src/clients/logs/index.ts: -------------------------------------------------------------------------------- ```typescript 1 | /** 2 | * Exports for the modular log client system 3 | */ 4 | 5 | // Main client 6 | export { SFCCLogClient } from './log-client.js'; 7 | 8 | // Specialized modules 9 | export { WebDAVClientManager } from './webdav-client-manager.js'; 10 | export { LogFileReader } from './log-file-reader.js'; 11 | export { LogFileDiscovery } from './log-file-discovery.js'; 12 | export { LogProcessor } from './log-processor.js'; 13 | export { LogAnalyzer } from './log-analyzer.js'; 14 | export { LogFormatter } from './log-formatter.js'; 15 | 16 | // Constants and types 17 | export { LOG_CONSTANTS, LOG_FILE_PATTERNS, LOG_MESSAGES, JOB_LOG_CONSTANTS } from './log-constants.js'; 18 | export type * from './log-types.js'; 19 | ``` -------------------------------------------------------------------------------- /docs/dw_suggest/BrandSuggestions.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.suggest 2 | 3 | # Class BrandSuggestions 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.suggest.Suggestions 9 | - dw.suggest.BrandSuggestions 10 | 11 | ## Description 12 | 13 | The brands suggestion container provides access to brands found using the suggested terms. The method SearchPhraseSuggestions.getSuggestedPhrases() can be used to get the list of found brand names. The brand lookup is being executed in the current catalog and locale. Furthermore the list of suggested terms, after processing the original user input search query, is accessible through SearchPhraseSuggestions.getSuggestedTerms() method. 14 | 15 | ## Constructor Summary 16 | 17 | ## Method Summary ``` -------------------------------------------------------------------------------- /docs/dw_util/LinkedHashMap.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.util 2 | 3 | # Class LinkedHashMap 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.util.Map 9 | - dw.util.LinkedHashMap 10 | 11 | ## Description 12 | 13 | This class implements a HashMap, which guarantees a iteration order according the put-order of the elements in the map. 14 | 15 | ## Constructor Summary 16 | 17 | LinkedHashMap() Constructs a new LinkedHashMap. 18 | 19 | ## Method Summary 20 | 21 | ### clone 22 | 23 | **Signature:** `clone() : LinkedHashMap` 24 | 25 | Returns a shallow copy of this map. 26 | 27 | ## Constructor Detail 28 | 29 | ## Method Detail 30 | 31 | ## Method Details 32 | 33 | ### clone 34 | 35 | **Signature:** `clone() : LinkedHashMap` 36 | 37 | **Description:** Returns a shallow copy of this map. 38 | 39 | **Returns:** 40 | 41 | a shallow copy of this map. 42 | 43 | --- ``` -------------------------------------------------------------------------------- /docs/dw_campaign/SourceCodeStatusCodes.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class SourceCodeStatusCodes 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.SourceCodeStatusCodes 9 | 10 | ## Description 11 | 12 | Helper class which contains error result codes returned by the SetSourceCode pipelet. 13 | 14 | ## Constants 15 | 16 | ### CODE_INACTIVE 17 | 18 | **Type:** String = "CODE_INACTIVE" 19 | 20 | Indicates that the specified source code was found in one or more source-code groups, none of which are active. 21 | 22 | ### CODE_INVALID 23 | 24 | **Type:** String = "CODE_INVALID" 25 | 26 | Indicates that the specified source code is not contained in any source-code group. 27 | 28 | ## Properties 29 | 30 | ## Constructor Summary 31 | 32 | SourceCodeStatusCodes() 33 | 34 | ## Method Summary 35 | 36 | ## Constructor Detail ``` -------------------------------------------------------------------------------- /docs/dw_customer/CustomerStatusCodes.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.customer 2 | 3 | # Class CustomerStatusCodes 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.customer.CustomerStatusCodes 9 | 10 | ## Description 11 | 12 | CustomerStatusCodes contains constants representing status codes that can be used with a Status object to indicate the success or failure of an operation. 13 | 14 | ## Constants 15 | 16 | ### CUSTOMER_ADDRESS_REFERENCED_BY_PRODUCT_LIST 17 | 18 | **Type:** String = "CUSTOMER_ADDRESS_REFERENCED_BY_PRODUCT_LIST" 19 | 20 | Indicates that an error occurred when trying to perform an operation on an address that is currently associated with a product list. 21 | 22 | ## Properties 23 | 24 | ## Constructor Summary 25 | 26 | CustomerStatusCodes() 27 | 28 | ## Method Summary 29 | 30 | ## Constructor Detail ``` -------------------------------------------------------------------------------- /tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-order.json: -------------------------------------------------------------------------------- ```json 1 | { 2 | "_v": "23.2", 3 | "_type": "object_type_definition", 4 | "attribute_definition_count": 67, 5 | "attribute_group_count": 12, 6 | "content_object": false, 7 | "creation_date": "2024-02-19T10:18:31.000Z", 8 | "description": { 9 | "default": "Object type representing orders." 10 | }, 11 | "display_name": { 12 | "de": "Bestellung", 13 | "default": "Order", 14 | "ja": "注文", 15 | "it": "Ordine", 16 | "fr": "Commande", 17 | "zh-CN": "订单", 18 | "es": "Pedido", 19 | "nl": "Bestelling" 20 | }, 21 | "last_modified": "2024-02-19T10:18:31.000Z", 22 | "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/Order", 23 | "object_type": "Order", 24 | "queryable": true, 25 | "read_only": true 26 | } ``` -------------------------------------------------------------------------------- /docs/dw_web/FormListItem.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.web 2 | 3 | # Class FormListItem 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.web.FormElement 9 | - dw.web.FormGroup 10 | - dw.web.FormListItem 11 | 12 | ## Description 13 | 14 | Represents an item in a form list. 15 | 16 | ## Properties 17 | 18 | ### itemIndex 19 | 20 | **Type:** Number (Read Only) 21 | 22 | The index of this item with the list. 23 | 24 | ## Constructor Summary 25 | 26 | ## Method Summary 27 | 28 | ### getItemIndex 29 | 30 | **Signature:** `getItemIndex() : Number` 31 | 32 | Returns the index of this item with the list. 33 | 34 | ## Method Detail 35 | 36 | ## Method Details 37 | 38 | ### getItemIndex 39 | 40 | **Signature:** `getItemIndex() : Number` 41 | 42 | **Description:** Returns the index of this item with the list. 43 | 44 | **Returns:** 45 | 46 | the index of this item with the list. 47 | 48 | --- ``` -------------------------------------------------------------------------------- /tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-customer.json: -------------------------------------------------------------------------------- ```json 1 | { 2 | "_v": "23.2", 3 | "_type": "object_type_definition", 4 | "attribute_definition_count": 45, 5 | "attribute_group_count": 8, 6 | "content_object": false, 7 | "creation_date": "2024-02-19T10:18:31.000Z", 8 | "description": { 9 | "default": "Object type representing customers." 10 | }, 11 | "display_name": { 12 | "de": "Kunde", 13 | "default": "Customer", 14 | "ja": "顧客", 15 | "it": "Cliente", 16 | "fr": "Client", 17 | "zh-CN": "客户", 18 | "es": "Cliente", 19 | "nl": "Klant" 20 | }, 21 | "last_modified": "2024-02-19T10:18:31.000Z", 22 | "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/Customer", 23 | "object_type": "Customer", 24 | "queryable": true, 25 | "read_only": false 26 | } ``` -------------------------------------------------------------------------------- /tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-product.json: -------------------------------------------------------------------------------- ```json 1 | { 2 | "_v": "23.2", 3 | "_type": "object_type_definition", 4 | "attribute_definition_count": 113, 5 | "attribute_group_count": 35, 6 | "content_object": true, 7 | "creation_date": "2024-02-19T10:18:31.000Z", 8 | "description": { 9 | "default": "Object type representing products." 10 | }, 11 | "display_name": { 12 | "de": "Produkt", 13 | "default": "Product", 14 | "ja": "商品", 15 | "it": "Prodotto", 16 | "fr": "Produit", 17 | "zh-CN": "产品", 18 | "es": "Producto", 19 | "nl": "Product" 20 | }, 21 | "last_modified": "2024-02-19T10:18:31.000Z", 22 | "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/Product", 23 | "object_type": "Product", 24 | "queryable": false, 25 | "read_only": false 26 | } 27 | ``` -------------------------------------------------------------------------------- /docs/dw_util/HashSet.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.util 2 | 3 | # Class HashSet 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.util.Collection 9 | - dw.util.Set 10 | - dw.util.HashSet 11 | 12 | ## Description 13 | 14 | Represents a HashSet 15 | 16 | ## Constructor Summary 17 | 18 | HashSet() Constructs a new HashMap. 19 | 20 | HashSet(collection : Collection) Construct a new HashSet by initializing the HashSet with the elements of the given collection. 21 | 22 | ## Method Summary 23 | 24 | ### clone 25 | 26 | **Signature:** `clone() : HashSet` 27 | 28 | Returns a shallow copy of this set. 29 | 30 | ## Constructor Detail 31 | 32 | ## Method Detail 33 | 34 | ## Method Details 35 | 36 | ### clone 37 | 38 | **Signature:** `clone() : HashSet` 39 | 40 | **Description:** Returns a shallow copy of this set. 41 | 42 | **Returns:** 43 | 44 | a shallow copy of this set. 45 | 46 | --- ``` -------------------------------------------------------------------------------- /docs/dw_web/FormFieldOptions.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.web 2 | 3 | # Class FormFieldOptions 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.web.FormFieldOptions 9 | 10 | ## Description 11 | 12 | The class represents the list of options for a field. The class supports an index style access to the options, e.g. myfield.options[2] or myfield.options.red. 13 | 14 | ## Properties 15 | 16 | ### optionsCount 17 | 18 | **Type:** Number (Read Only) 19 | 20 | The number of option values. 21 | 22 | ## Constructor Summary 23 | 24 | ## Method Summary 25 | 26 | ### getOptionsCount 27 | 28 | **Signature:** `getOptionsCount() : Number` 29 | 30 | Returns the number of option values. 31 | 32 | ## Method Detail 33 | 34 | ## Method Details 35 | 36 | ### getOptionsCount 37 | 38 | **Signature:** `getOptionsCount() : Number` 39 | 40 | **Description:** Returns the number of option values. 41 | 42 | --- ``` -------------------------------------------------------------------------------- /tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-category.json: -------------------------------------------------------------------------------- ```json 1 | { 2 | "_v": "23.2", 3 | "_type": "object_type_definition", 4 | "attribute_definition_count": 29, 5 | "attribute_group_count": 5, 6 | "content_object": true, 7 | "creation_date": "2024-02-19T10:18:31.000Z", 8 | "description": { 9 | "default": "Object type representing product categories." 10 | }, 11 | "display_name": { 12 | "de": "Kategorie", 13 | "default": "Category", 14 | "ja": "カテゴリ", 15 | "it": "Categoria", 16 | "fr": "Catégorie", 17 | "zh-CN": "类别", 18 | "es": "Categoría", 19 | "nl": "Categorie" 20 | }, 21 | "last_modified": "2024-02-19T10:18:31.000Z", 22 | "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/Category", 23 | "object_type": "Category", 24 | "queryable": false, 25 | "read_only": false 26 | } ``` -------------------------------------------------------------------------------- /docs/dw_io/OutputStream.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.io 2 | 3 | # Class OutputStream 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.io.OutputStream 9 | 10 | ## Description 11 | 12 | The class represent a stream of bytes that can be written from the application. The OutputStream itself doesn't provide any methods to write the data. Instead the OutputStream can be chained with other classes like a XMLStreamWriter to write data. Note: when this class is used with sensitive data, be careful in persisting sensitive information to disk. 13 | 14 | ## Constructor Summary 15 | 16 | ## Method Summary 17 | 18 | ### close 19 | 20 | **Signature:** `close() : void` 21 | 22 | Closes the output stream. 23 | 24 | ## Method Detail 25 | 26 | ## Method Details 27 | 28 | ### close 29 | 30 | **Signature:** `close() : void` 31 | 32 | **Description:** Closes the output stream. 33 | 34 | --- ``` -------------------------------------------------------------------------------- /docs-site/components/VersionBadge.tsx: -------------------------------------------------------------------------------- ```typescript 1 | import React from 'react'; 2 | // Dynamically require root package.json (relative two levels up from docs-site-v2 when built inside project root) 3 | // During build (Vite), this will be statically analyzed; if path changes, adjust. 4 | // Using assert { type: 'json' } not needed with Vite's JSON import capability. 5 | // We keep it isolated so only Sidebar re-renders on version change. 6 | // eslint-disable-next-line @typescript-eslint/no-var-requires 7 | import pkg from '../../package.json'; 8 | 9 | const VersionBadge: React.FC = () => { 10 | const version = (pkg as any)?.version || 'v1'; 11 | return ( 12 | <span className="text-sm text-slate-500 self-start mt-1" title="Library Version"> 13 | v{version} 14 | </span> 15 | ); 16 | }; 17 | 18 | export default VersionBadge; ``` -------------------------------------------------------------------------------- /docs/dw_order/PriceAdjustmentLimitTypes.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.order 2 | 3 | # Class PriceAdjustmentLimitTypes 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.order.PriceAdjustmentLimitTypes 9 | 10 | ## Description 11 | 12 | Helper class containing price adjustment limit types. 13 | 14 | ## Constants 15 | 16 | ### TYPE_ITEM 17 | 18 | **Type:** String = "ITEM" 19 | 20 | Constant for Price Adjustment Limit Type Item. The price adjustment limit was created at the item level. 21 | 22 | ### TYPE_ORDER 23 | 24 | **Type:** String = "ORDER" 25 | 26 | Constant for Price Adjustment Limit Type Order. The price adjustment limit was created at the order level. 27 | 28 | ### TYPE_SHIPPING 29 | 30 | **Type:** String = "SHIPPING" 31 | 32 | Constant for Price Adjustment Limit Type Shipping. The price adjustment limit was created at the shipping item level. 33 | 34 | ## Properties 35 | 36 | ## Constructor Summary 37 | 38 | ## Method Summary ``` -------------------------------------------------------------------------------- /docs/TopLevel/Iterable.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: TopLevel 2 | 3 | # Class Iterable 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Iterable 8 | 9 | ## Description 10 | 11 | All objects containing the property @@iterator with a function returning an ES6Iterator are said to be an Iterable. 12 | 13 | ## Constructor Summary 14 | 15 | ## Method Summary 16 | 17 | ### @@iterator 18 | 19 | **Signature:** `@@iterator() : ES6Iterator` 20 | 21 | Returns an iterator to be used for iterating this object. 22 | 23 | ## Method Detail 24 | 25 | ## Method Details 26 | 27 | ### @@iterator 28 | 29 | **Signature:** `@@iterator() : ES6Iterator` 30 | 31 | **Description:** Returns an iterator to be used for iterating this object. Typically returns a new iterator instance. For iterators returns typically the iterator itself. 32 | 33 | **API Versioned:** 34 | 35 | From version 21.2. 36 | 37 | **Returns:** 38 | 39 | The iterator to be used for iterating this object. 40 | 41 | --- ``` -------------------------------------------------------------------------------- /tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-customeraddress.json: -------------------------------------------------------------------------------- ```json 1 | { 2 | "_v": "23.2", 3 | "_type": "object_type_definition", 4 | "attribute_definition_count": 23, 5 | "attribute_group_count": 2, 6 | "content_object": false, 7 | "creation_date": "2024-02-19T10:18:31.000Z", 8 | "description": { 9 | "default": "Object type representing customer addresses." 10 | }, 11 | "display_name": { 12 | "de": "Kundenadresse", 13 | "default": "Customer Address", 14 | "ja": "顧客の住所", 15 | "it": "Indirizzo del cliente", 16 | "fr": "Adresse du client", 17 | "zh-CN": "客户地址", 18 | "es": "Dirección de cliente", 19 | "nl": "Adres van klant" 20 | }, 21 | "last_modified": "2024-02-19T10:18:31.000Z", 22 | "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/CustomerAddress", 23 | "object_type": "CustomerAddress", 24 | "queryable": false, 25 | "read_only": false 26 | } 27 | ``` -------------------------------------------------------------------------------- /docs/dw_campaign/PriceBookPriceDiscount.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class PriceBookPriceDiscount 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.Discount 9 | - dw.campaign.PriceBookPriceDiscount 10 | 11 | ## Description 12 | 13 | Discount representing that a product's price has been calculated from a separate sales price book other than the standard price book assigned to the site. 14 | 15 | ## Properties 16 | 17 | ### priceBookID 18 | 19 | **Type:** String (Read Only) 20 | 21 | The price book identifier. 22 | 23 | ## Constructor Summary 24 | 25 | ## Method Summary 26 | 27 | ### getPriceBookID 28 | 29 | **Signature:** `getPriceBookID() : String` 30 | 31 | Returns the price book identifier. 32 | 33 | ## Method Detail 34 | 35 | ## Method Details 36 | 37 | ### getPriceBookID 38 | 39 | **Signature:** `getPriceBookID() : String` 40 | 41 | **Description:** Returns the price book identifier. 42 | 43 | **Returns:** 44 | 45 | the price book identifier. 46 | 47 | --- ``` -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- ```javascript 1 | export default { 2 | preset: 'ts-jest/presets/default-esm', 3 | extensionsToTreatAsEsm: ['.ts'], 4 | testEnvironment: 'node', 5 | testTimeout: process.env.CI ? 30000 : 10000, // 30s for CI, 10s for local 6 | roots: ['<rootDir>/src', '<rootDir>/tests'], 7 | testMatch: ['**/__tests__/**/*.ts', '**/?(*.)+(spec|test).ts'], 8 | transform: { 9 | '^.+\\.ts$': ['ts-jest', { 10 | useESM: true 11 | }], 12 | }, 13 | transformIgnorePatterns: [ 14 | 'node_modules/(?!(webdav|@modelcontextprotocol)/)' 15 | ], 16 | moduleNameMapper: { 17 | '^(\\.{1,2}/.*)\\.js$': '$1', 18 | '^webdav$': '<rootDir>/tests/__mocks__/webdav.js' 19 | }, 20 | collectCoverageFrom: [ 21 | 'src/**/*.ts', 22 | '!src/main.ts', 23 | '!src/index.ts', 24 | ], 25 | coverageDirectory: 'coverage', 26 | coverageReporters: ['text', 'lcov', 'html'], 27 | }; 28 | ``` -------------------------------------------------------------------------------- /docs/dw_util/MapEntry.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.util 2 | 3 | # Class MapEntry 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.util.MapEntry 9 | 10 | ## Description 11 | 12 | The class represent an entry within a Map. 13 | 14 | ## Properties 15 | 16 | ### key 17 | 18 | **Type:** Object (Read Only) 19 | 20 | The entry's key. 21 | 22 | ### value 23 | 24 | **Type:** Object (Read Only) 25 | 26 | The entry's value. 27 | 28 | ## Constructor Summary 29 | 30 | ## Method Summary 31 | 32 | ### getKey 33 | 34 | **Signature:** `getKey() : Object` 35 | 36 | Returns the entry's key. 37 | 38 | ### getValue 39 | 40 | **Signature:** `getValue() : Object` 41 | 42 | Returns the entry's value. 43 | 44 | ## Method Detail 45 | 46 | ## Method Details 47 | 48 | ### getKey 49 | 50 | **Signature:** `getKey() : Object` 51 | 52 | **Description:** Returns the entry's key. 53 | 54 | **Returns:** 55 | 56 | the entry's key. 57 | 58 | --- 59 | 60 | ### getValue 61 | 62 | **Signature:** `getValue() : Object` 63 | 64 | **Description:** Returns the entry's value. 65 | 66 | **Returns:** 67 | 68 | the entry's value. 69 | 70 | --- ``` -------------------------------------------------------------------------------- /docs/dw_campaign/TotalFixedPriceDiscount.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class TotalFixedPriceDiscount 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.Discount 9 | - dw.campaign.TotalFixedPriceDiscount 10 | 11 | ## Description 12 | 13 | Represents a total fix price discount on a group of products in the discount plan. For example: "buy 3 products of type X for a total price of $29.99". 14 | 15 | ## Properties 16 | 17 | ### totalFixedPrice 18 | 19 | **Type:** Number (Read Only) 20 | 21 | The total fixed price amount. 22 | 23 | ## Constructor Summary 24 | 25 | ## Method Summary 26 | 27 | ### getTotalFixedPrice 28 | 29 | **Signature:** `getTotalFixedPrice() : Number` 30 | 31 | Returns the total fixed price amount. 32 | 33 | ## Method Detail 34 | 35 | ## Method Details 36 | 37 | ### getTotalFixedPrice 38 | 39 | **Signature:** `getTotalFixedPrice() : Number` 40 | 41 | **Description:** Returns the total fixed price amount. 42 | 43 | **Returns:** 44 | 45 | Total fixed price amount 46 | 47 | --- ``` -------------------------------------------------------------------------------- /docs/dw_util/LinkedHashSet.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.util 2 | 3 | # Class LinkedHashSet 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.util.Collection 9 | - dw.util.Set 10 | - dw.util.LinkedHashSet 11 | 12 | ## Description 13 | 14 | The class LinkedHashSet implements a hash set with a guaranteed iteration order. The elements are iterated in the order they have been added to the HashSet. 15 | 16 | ## Constructor Summary 17 | 18 | LinkedHashSet() Constructs a new LinkHashSet. 19 | 20 | LinkedHashSet(collection : Collection) Constructor for a new LinkedHashSet. 21 | 22 | ## Method Summary 23 | 24 | ### clone 25 | 26 | **Signature:** `clone() : LinkedHashSet` 27 | 28 | Returns a shallow copy of this set. 29 | 30 | ## Constructor Detail 31 | 32 | ## Method Detail 33 | 34 | ## Method Details 35 | 36 | ### clone 37 | 38 | **Signature:** `clone() : LinkedHashSet` 39 | 40 | **Description:** Returns a shallow copy of this set. 41 | 42 | **Returns:** 43 | 44 | a shallow copy of this set. 45 | 46 | --- ``` -------------------------------------------------------------------------------- /docs-site/components/Typography.tsx: -------------------------------------------------------------------------------- ```typescript 1 | import React from 'react'; 2 | 3 | interface HeadingProps { 4 | id: string; 5 | children: React.ReactNode; 6 | } 7 | 8 | export const H1: React.FC<HeadingProps> = ({ id, children }) => ( 9 | <h1 id={id} className="text-4xl font-extrabold tracking-tight text-slate-900"> 10 | {children} 11 | </h1> 12 | ); 13 | 14 | export const PageSubtitle: React.FC<{ children: React.ReactNode }> = ({ children }) => ( 15 | <p className="mt-4 text-xl text-slate-600 !mb-10"> 16 | {children} 17 | </p> 18 | ); 19 | 20 | export const H2: React.FC<HeadingProps> = ({ id, children }) => ( 21 | <h2 id={id} className="mt-12 mb-4 text-3xl font-bold tracking-tight text-slate-900"> 22 | {children} 23 | </h2> 24 | ); 25 | 26 | export const H3: React.FC<HeadingProps> = ({ id, children }) => ( 27 | <h3 id={id} className="mt-8 mb-3 text-xl font-bold tracking-tight text-slate-900"> 28 | {children} 29 | </h3> 30 | ); 31 | ``` -------------------------------------------------------------------------------- /docs-site/components/BreadcrumbSchema.tsx: -------------------------------------------------------------------------------- ```typescript 1 | import React from 'react'; 2 | 3 | interface BreadcrumbItem { 4 | name: string; 5 | url: string; 6 | } 7 | 8 | interface BreadcrumbSchemaProps { 9 | items: BreadcrumbItem[]; 10 | } 11 | 12 | const BreadcrumbSchema: React.FC<BreadcrumbSchemaProps> = ({ items }) => { 13 | const baseUrl = 'https://sfcc-mcp-dev.rhino-inquisitor.com'; 14 | 15 | const breadcrumbList = { 16 | "@context": "https://schema.org", 17 | "@type": "BreadcrumbList", 18 | "itemListElement": items.map((item, index) => ({ 19 | "@type": "ListItem", 20 | "position": index + 1, 21 | "name": item.name, 22 | "item": item.url.startsWith('http') ? item.url : `${baseUrl}${item.url}` 23 | })) 24 | }; 25 | 26 | return ( 27 | <script 28 | type="application/ld+json" 29 | dangerouslySetInnerHTML={{ __html: JSON.stringify(breadcrumbList) }} 30 | /> 31 | ); 32 | }; 33 | 34 | export default BreadcrumbSchema; ``` -------------------------------------------------------------------------------- /docs/dw_util/ArrayList.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.util 2 | 3 | # Class ArrayList 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.util.Collection 9 | - dw.util.List 10 | - dw.util.ArrayList 11 | 12 | ## Description 13 | 14 | The ArrayList class is a container for a list of objects. 15 | 16 | ## Constructor Summary 17 | 18 | ArrayList() Constructor for a new ArrayList. 19 | 20 | ArrayList(collection : Collection) Constructor for a new ArrayList. 21 | 22 | ArrayList(iterator : Iterator) Constructor for a new ArrayList. 23 | 24 | ArrayList(values : Object...) Constructor for a new ArrayList. 25 | 26 | ## Method Summary 27 | 28 | ### clone 29 | 30 | **Signature:** `clone() : ArrayList` 31 | 32 | Returns a shallow copy of this array list. 33 | 34 | ## Constructor Detail 35 | 36 | ## Method Detail 37 | 38 | ## Method Details 39 | 40 | ### clone 41 | 42 | **Signature:** `clone() : ArrayList` 43 | 44 | **Description:** Returns a shallow copy of this array list. 45 | 46 | **Returns:** 47 | 48 | a shallow copy of this array list. 49 | 50 | --- ``` -------------------------------------------------------------------------------- /docs/TopLevel/ES6Iterator.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: TopLevel 2 | 3 | # Class ES6Iterator 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - ES6Iterator 8 | 9 | ## Description 10 | 11 | This isn't a built-in type. It describes the properties an object must have in order to work as an iterator since ECMAScript 2015. 12 | 13 | ## Constructor Summary 14 | 15 | ## Method Summary 16 | 17 | ### next 18 | 19 | **Signature:** `next() : Object` 20 | 21 | Returns an iterator result object. 22 | 23 | ## Method Detail 24 | 25 | ## Method Details 26 | 27 | ### next 28 | 29 | **Signature:** `next() : Object` 30 | 31 | **Description:** Returns an iterator result object. An iterator result object can have two properties: done and value. If done is false or undefined, then the value property contains an iterator value. The value property may not be present if the value would be undefined. After a call that returns a result where done equals true, all subsequent calls must also return done as true. 32 | 33 | --- ``` -------------------------------------------------------------------------------- /tests/servers/sfcc-mock-server/src/routes/ocapi/oauth-handler.js: -------------------------------------------------------------------------------- ```javascript 1 | /** 2 | * OAuth Handler 3 | * 4 | * Handles OAuth2 token endpoints for OCAPI authentication. 5 | * Provides a clean interface for token-related operations. 6 | */ 7 | 8 | const express = require('express'); 9 | 10 | class OAuthHandler { 11 | constructor(authManager) { 12 | this.authManager = authManager; 13 | this.router = express.Router(); 14 | this.setupRoutes(); 15 | } 16 | 17 | setupRoutes() { 18 | // OAuth2 token endpoints 19 | this.router.post('/dw/oauth2/access_token', (req, res) => { 20 | this.authManager.handleOAuthToken(req, res); 21 | }); 22 | 23 | this.router.post('/dwsso/oauth2/access_token', (req, res) => { 24 | this.authManager.handleOAuthToken(req, res); 25 | }); 26 | } 27 | 28 | /** 29 | * Get the configured router 30 | */ 31 | getRouter() { 32 | return this.router; 33 | } 34 | } 35 | 36 | module.exports = OAuthHandler; ``` -------------------------------------------------------------------------------- /docs/dw_campaign/CampaignStatusCodes.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class CampaignStatusCodes 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.CampaignStatusCodes 9 | 10 | ## Description 11 | 12 | Deprecated. Formerly used to contain the various statuses that a coupon may be in. 13 | 14 | ## Constants 15 | 16 | ### COUPON_ALREADY_APPLIED 17 | 18 | **Type:** String = "COUPON_ALREADY_APPLIED" 19 | 20 | Indicates that the coupon has already been applied to the basket. 21 | 22 | ### COUPON_ALREADY_REDEEMED 23 | 24 | **Type:** String = "COUPON_ALREADY_REDEEMED" 25 | 26 | Indicates that the coupon has already been redeemed. 27 | 28 | ### COUPON_NOT_REDEEMABLE 29 | 30 | **Type:** String = "COUPON_NOT_REDEEMABLE" 31 | 32 | Indicates that the coupon is not currently redeemable. 33 | 34 | ### COUPON_UNKNOWN 35 | 36 | **Type:** String = "COUPON_UNKNOWN" 37 | 38 | Indicates that the coupon code is not valid. 39 | 40 | ## Properties 41 | 42 | ## Constructor Summary 43 | 44 | CampaignStatusCodes() 45 | 46 | ## Method Summary 47 | 48 | ## Constructor Detail ``` -------------------------------------------------------------------------------- /docs/dw_system/InternalObject.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.system 2 | 3 | # Class InternalObject 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.system.InternalObject 9 | 10 | ## Description 11 | 12 | Class used to wrap internal objects to hide them from B2C Commerce Script code. 13 | 14 | ## Constructor Summary 15 | 16 | ## Method Summary 17 | 18 | ### toString 19 | 20 | **Signature:** `toString() : String` 21 | 22 | Returns a string representation of this object. 23 | 24 | ### valueOf 25 | 26 | **Signature:** `valueOf() : String` 27 | 28 | Returns a string representation of this object. 29 | 30 | ## Method Detail 31 | 32 | ## Method Details 33 | 34 | ### toString 35 | 36 | **Signature:** `toString() : String` 37 | 38 | **Description:** Returns a string representation of this object. 39 | 40 | **Returns:** 41 | 42 | a string representation of this object. 43 | 44 | --- 45 | 46 | ### valueOf 47 | 48 | **Signature:** `valueOf() : String` 49 | 50 | **Description:** Returns a string representation of this object. 51 | 52 | **Returns:** 53 | 54 | a string representation of this object. 55 | 56 | --- ``` -------------------------------------------------------------------------------- /docs/dw_order/TaxItem.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.order 2 | 3 | # Class TaxItem 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.order.TaxItem 9 | 10 | ## Description 11 | 12 | An item containing tax information allowing a tax breakdown between a number of TaxGroups. 13 | 14 | ## Properties 15 | 16 | ### amount 17 | 18 | **Type:** Money (Read Only) 19 | 20 | Gets the amount. 21 | 22 | ### taxGroup 23 | 24 | **Type:** TaxGroup (Read Only) 25 | 26 | The tax group. 27 | 28 | ## Constructor Summary 29 | 30 | ## Method Summary 31 | 32 | ### getAmount 33 | 34 | **Signature:** `getAmount() : Money` 35 | 36 | Gets the amount. 37 | 38 | ### getTaxGroup 39 | 40 | **Signature:** `getTaxGroup() : TaxGroup` 41 | 42 | Returns the tax group. 43 | 44 | ## Method Detail 45 | 46 | ## Method Details 47 | 48 | ### getAmount 49 | 50 | **Signature:** `getAmount() : Money` 51 | 52 | **Description:** Gets the amount. 53 | 54 | **Returns:** 55 | 56 | the amount 57 | 58 | --- 59 | 60 | ### getTaxGroup 61 | 62 | **Signature:** `getTaxGroup() : TaxGroup` 63 | 64 | **Description:** Returns the tax group. 65 | 66 | **Returns:** 67 | 68 | the tax rate 69 | 70 | **See Also:** 71 | 72 | TaxGroup 73 | 74 | --- ``` -------------------------------------------------------------------------------- /docs/dw_crypto/CertificateRef.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.crypto 2 | 3 | # Class CertificateRef 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.crypto.CertificateRef 9 | 10 | ## Description 11 | 12 | This class is used as a reference to a certificate or public key. Note: this class handles sensitive security-related data. Pay special attention to PCI DSS v3. requirements 2, 4, and 12. 13 | 14 | ## Constructor Summary 15 | 16 | CertificateRef(alias : String) Creates a CertificateRef from the passed alias as a reference to a certificate in Business Manager. 17 | 18 | ## Method Summary 19 | 20 | ### toString 21 | 22 | **Signature:** `toString() : String` 23 | 24 | Returns the string representation of this CertificateRef. 25 | 26 | ## Constructor Detail 27 | 28 | ## Method Detail 29 | 30 | ## Method Details 31 | 32 | ### toString 33 | 34 | **Signature:** `toString() : String` 35 | 36 | **Description:** Returns the string representation of this CertificateRef. 37 | 38 | **Returns:** 39 | 40 | The string representation of this CertificateRef. 41 | 42 | --- ``` -------------------------------------------------------------------------------- /docs/dw_campaign/PercentageOptionDiscount.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class PercentageOptionDiscount 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.Discount 9 | - dw.campaign.PercentageOptionDiscount 10 | 11 | ## Description 12 | 13 | Represents a percentage-off options discount in the discount plan, for example "50% off monogramming on shirts". 14 | 15 | ## Properties 16 | 17 | ### percentage 18 | 19 | **Type:** Number (Read Only) 20 | 21 | The percentage discount value, for example 10.00 for a "10% off" 22 | discount. 23 | 24 | ## Constructor Summary 25 | 26 | ## Method Summary 27 | 28 | ### getPercentage 29 | 30 | **Signature:** `getPercentage() : Number` 31 | 32 | Returns the percentage discount value, for example 10.00 for a "10% off" discount. 33 | 34 | ## Method Detail 35 | 36 | ## Method Details 37 | 38 | ### getPercentage 39 | 40 | **Signature:** `getPercentage() : Number` 41 | 42 | **Description:** Returns the percentage discount value, for example 10.00 for a "10% off" discount. 43 | 44 | **Returns:** 45 | 46 | Discount percentage value 47 | 48 | --- ``` -------------------------------------------------------------------------------- /docs/dw_suggest/SuggestedContent.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.suggest 2 | 3 | # Class SuggestedContent 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.suggest.SuggestedContent 9 | 10 | ## Description 11 | 12 | This class represents a suggested content page. Use getContent() method to get access to the actual Content object. 13 | 14 | ## Properties 15 | 16 | ### content 17 | 18 | **Type:** Content (Read Only) 19 | 20 | This method returns the actual Content object corresponding to this suggested content. 21 | 22 | ## Constructor Summary 23 | 24 | ## Method Summary 25 | 26 | ### getContent 27 | 28 | **Signature:** `getContent() : Content` 29 | 30 | This method returns the actual Content object corresponding to this suggested content. 31 | 32 | ## Method Detail 33 | 34 | ## Method Details 35 | 36 | ### getContent 37 | 38 | **Signature:** `getContent() : Content` 39 | 40 | **Description:** This method returns the actual Content object corresponding to this suggested content. 41 | 42 | **Returns:** 43 | 44 | the content object corresponding to this suggested content 45 | 46 | --- ``` -------------------------------------------------------------------------------- /docs/dw_campaign/AmountDiscount.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class AmountDiscount 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.Discount 9 | - dw.campaign.AmountDiscount 10 | 11 | ## Description 12 | 13 | Represents an amount-off discount in the discount plan, for example "$10 off all orders $100 or more". 14 | 15 | ## Properties 16 | 17 | ### amount 18 | 19 | **Type:** Number (Read Only) 20 | 21 | The discount amount, for example 10.00 for a "$10 off" discount. 22 | 23 | ## Constructor Summary 24 | 25 | AmountDiscount(amount : Number) Create an amount-discount on the fly. 26 | 27 | ## Method Summary 28 | 29 | ### getAmount 30 | 31 | **Signature:** `getAmount() : Number` 32 | 33 | Returns the discount amount, for example 10.00 for a "$10 off" discount. 34 | 35 | ## Constructor Detail 36 | 37 | ## Method Detail 38 | 39 | ## Method Details 40 | 41 | ### getAmount 42 | 43 | **Signature:** `getAmount() : Number` 44 | 45 | **Description:** Returns the discount amount, for example 10.00 for a "$10 off" discount. 46 | 47 | **Returns:** 48 | 49 | Discount amount 50 | 51 | --- ``` -------------------------------------------------------------------------------- /docs/dw_content/ContentSearchRefinementDefinition.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.content 2 | 3 | # Class ContentSearchRefinementDefinition 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.object.PersistentObject 9 | - dw.object.ExtensibleObject 10 | - dw.catalog.SearchRefinementDefinition 11 | - dw.content.ContentSearchRefinementDefinition 12 | 13 | ## Description 14 | 15 | This class provides an interface to refinement options for content search. 16 | 17 | ## Properties 18 | 19 | ### folderRefinement 20 | 21 | **Type:** boolean (Read Only) 22 | 23 | Identifies if this is a folder refinement. 24 | 25 | ## Constructor Summary 26 | 27 | ## Method Summary 28 | 29 | ### isFolderRefinement 30 | 31 | **Signature:** `isFolderRefinement() : boolean` 32 | 33 | Identifies if this is a folder refinement. 34 | 35 | ## Method Detail 36 | 37 | ## Method Details 38 | 39 | ### isFolderRefinement 40 | 41 | **Signature:** `isFolderRefinement() : boolean` 42 | 43 | **Description:** Identifies if this is a folder refinement. 44 | 45 | **Returns:** 46 | 47 | true if this is a category refinement, false otherwise. 48 | 49 | --- ``` -------------------------------------------------------------------------------- /docs/dw_web/Cookies.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.web 2 | 3 | # Class Cookies 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.web.Cookies 9 | 10 | ## Description 11 | 12 | The class provides an index and associative array like access to the Cookies of the current request. Cookies can be retrieved by calling dw.system.Request.getHttpCookies(). Note: this class allows access to sensitive security-related data. Pay special attention to PCI DSS v3. requirements 2, 4, and 12. See Request.getHttpCookies(). 13 | 14 | ## Properties 15 | 16 | ### cookieCount 17 | 18 | **Type:** Number (Read Only) 19 | 20 | The number of known cookies. 21 | 22 | ## Constructor Summary 23 | 24 | ## Method Summary 25 | 26 | ### getCookieCount 27 | 28 | **Signature:** `getCookieCount() : Number` 29 | 30 | Returns the number of known cookies. 31 | 32 | ## Method Detail 33 | 34 | ## Method Details 35 | 36 | ### getCookieCount 37 | 38 | **Signature:** `getCookieCount() : Number` 39 | 40 | **Description:** Returns the number of known cookies. 41 | 42 | **Returns:** 43 | 44 | the number of cookies 45 | 46 | --- ``` -------------------------------------------------------------------------------- /docs/dw_crypto/KeyRef.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.crypto 2 | 3 | # Class KeyRef 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.crypto.KeyRef 9 | 10 | ## Description 11 | 12 | This class is used as a reference to a private key in the keystore which can be managed in the Business Manager. Note: this class handles sensitive security-related data. Pay special attention to PCI DSS v3. requirements 2, 4, and 12. 13 | 14 | ## Constructor Summary 15 | 16 | KeyRef(alias : String) Creates a KeyRef from the passed alias. 17 | 18 | KeyRef(alias : String, password : String) Creates a KeyRef from the passed alias. 19 | 20 | ## Method Summary 21 | 22 | ### toString 23 | 24 | **Signature:** `toString() : String` 25 | 26 | Returns the string representation of this KeyRef. 27 | 28 | ## Constructor Detail 29 | 30 | ## Method Detail 31 | 32 | ## Method Details 33 | 34 | ### toString 35 | 36 | **Signature:** `toString() : String` 37 | 38 | **Description:** Returns the string representation of this KeyRef. 39 | 40 | **Returns:** 41 | 42 | The string representation of this KeyRef. 43 | 44 | --- ``` -------------------------------------------------------------------------------- /docs/dw_suggest/SuggestedCategory.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.suggest 2 | 3 | # Class SuggestedCategory 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.suggest.SuggestedCategory 9 | 10 | ## Description 11 | 12 | This class represents a suggested catalog category. Use getCategory() method to get access to the actual Category object. 13 | 14 | ## Properties 15 | 16 | ### category 17 | 18 | **Type:** Category (Read Only) 19 | 20 | This method returns the actual Category object corresponding to this suggested category. 21 | 22 | ## Constructor Summary 23 | 24 | ## Method Summary 25 | 26 | ### getCategory 27 | 28 | **Signature:** `getCategory() : Category` 29 | 30 | This method returns the actual Category object corresponding to this suggested category. 31 | 32 | ## Method Detail 33 | 34 | ## Method Details 35 | 36 | ### getCategory 37 | 38 | **Signature:** `getCategory() : Category` 39 | 40 | **Description:** This method returns the actual Category object corresponding to this suggested category. 41 | 42 | **Returns:** 43 | 44 | the category object corresponding to this suggested category 45 | 46 | --- ``` -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- ```typescript 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * SFCC MCP Server - Entry Point 5 | * 6 | * This module serves as the main entry point for the SFCC (Salesforce B2C Commerce Cloud) 7 | * MCP server. It provides comprehensive development assistance features including log analysis, 8 | * debugging tools, and more. This file re-exports the main application entry point for 9 | * backwards compatibility and provides a clean interface for the package. 10 | */ 11 | 12 | export { SFCCDevServer } from './core/server.js'; 13 | export { SFCCLogClient } from './clients/log-client.js'; 14 | export { SFCCDocumentationClient } from './clients/docs-client.js'; 15 | export { OCAPIClient } from './clients/ocapi-client.js'; 16 | export { TokenManager } from './clients/base/oauth-token.js'; 17 | export type { SFCCConfig, LogLevel, LogFileInfo, LogSummary, OCAPIConfig, OAuthToken, OAuthTokenResponse } from './types/types.js'; 18 | 19 | // For direct execution, delegate to main.ts 20 | import './main.js'; 21 | ``` -------------------------------------------------------------------------------- /docs/dw_extensions.payments/SalesforceEpsPaymentDetails.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.extensions.payments 2 | 3 | # Class SalesforceEpsPaymentDetails 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.extensions.payments.SalesforcePaymentDetails 9 | - dw.extensions.payments.SalesforceEpsPaymentDetails 10 | 11 | ## Description 12 | 13 | Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_EPS. See Salesforce Payments documentation for how to gain access and configure it for use on your sites. 14 | 15 | ## Properties 16 | 17 | ### bank 18 | 19 | **Type:** String (Read Only) 20 | 21 | The bank used for the payment, or null if not known. 22 | 23 | ## Constructor Summary 24 | 25 | ## Method Summary 26 | 27 | ### getBank 28 | 29 | **Signature:** `getBank() : String` 30 | 31 | Returns the bank used for the payment, or null if not known. 32 | 33 | ## Method Detail 34 | 35 | ## Method Details 36 | 37 | ### getBank 38 | 39 | **Signature:** `getBank() : String` 40 | 41 | **Description:** Returns the bank used for the payment, or null if not known. 42 | 43 | **Returns:** 44 | 45 | bank 46 | 47 | **See Also:** 48 | 49 | SalesforcePaymentMethod.getBank() 50 | 51 | --- ``` -------------------------------------------------------------------------------- /docs/dw_extensions.payments/SalesforceIdealPaymentDetails.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.extensions.payments 2 | 3 | # Class SalesforceIdealPaymentDetails 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.extensions.payments.SalesforcePaymentDetails 9 | - dw.extensions.payments.SalesforceIdealPaymentDetails 10 | 11 | ## Description 12 | 13 | Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_IDEAL. See Salesforce Payments documentation for how to gain access and configure it for use on your sites. 14 | 15 | ## Properties 16 | 17 | ### bank 18 | 19 | **Type:** String (Read Only) 20 | 21 | The bank used for the payment, or null if not known. 22 | 23 | ## Constructor Summary 24 | 25 | ## Method Summary 26 | 27 | ### getBank 28 | 29 | **Signature:** `getBank() : String` 30 | 31 | Returns the bank used for the payment, or null if not known. 32 | 33 | ## Method Detail 34 | 35 | ## Method Details 36 | 37 | ### getBank 38 | 39 | **Signature:** `getBank() : String` 40 | 41 | **Description:** Returns the bank used for the payment, or null if not known. 42 | 43 | **Returns:** 44 | 45 | bank 46 | 47 | **See Also:** 48 | 49 | SalesforcePaymentMethod.getBank() 50 | 51 | --- ``` -------------------------------------------------------------------------------- /docs-site/components/Badge.tsx: -------------------------------------------------------------------------------- ```typescript 1 | import React from 'react'; 2 | 3 | interface BadgeProps { 4 | children: React.ReactNode; 5 | variant?: 'success' | 'warning' | 'error' | 'info' | 'default'; 6 | size?: 'sm' | 'md'; 7 | className?: string; 8 | } 9 | 10 | const variantStyles = { 11 | success: 'bg-green-100 text-green-800 border-green-200', 12 | warning: 'bg-yellow-100 text-yellow-800 border-yellow-200', 13 | error: 'bg-red-100 text-red-800 border-red-200', 14 | info: 'bg-blue-100 text-blue-800 border-blue-200', 15 | default: 'bg-gray-100 text-gray-800 border-gray-200' 16 | }; 17 | 18 | const sizeStyles = { 19 | sm: 'text-xs px-2 py-1', 20 | md: 'text-sm px-3 py-1' 21 | }; 22 | 23 | export const Badge: React.FC<BadgeProps> = ({ 24 | children, 25 | variant = 'default', 26 | size = 'md', 27 | className = '' 28 | }) => { 29 | return ( 30 | <span 31 | className={`inline-flex items-center font-medium rounded-full border ${variantStyles[variant]} ${sizeStyles[size]} ${className}`} 32 | > 33 | {children} 34 | </span> 35 | ); 36 | }; 37 | 38 | export default Badge; 39 | ``` -------------------------------------------------------------------------------- /docs/dw_campaign/PercentageDiscount.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class PercentageDiscount 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.Discount 9 | - dw.campaign.PercentageDiscount 10 | 11 | ## Description 12 | 13 | Represents a percentage-off discount in the discount plan, for example "10% off all T-Shirts". 14 | 15 | ## Properties 16 | 17 | ### percentage 18 | 19 | **Type:** Number (Read Only) 20 | 21 | The percentage discount value, for example 10.00 for a "10% off" 22 | discount. 23 | 24 | ## Constructor Summary 25 | 26 | PercentageDiscount(percentage : Number) Create a percentage-discount on the fly. 27 | 28 | ## Method Summary 29 | 30 | ### getPercentage 31 | 32 | **Signature:** `getPercentage() : Number` 33 | 34 | Returns the percentage discount value, for example 10.00 for a "10% off" discount. 35 | 36 | ## Constructor Detail 37 | 38 | ## Method Detail 39 | 40 | ## Method Details 41 | 42 | ### getPercentage 43 | 44 | **Signature:** `getPercentage() : Number` 45 | 46 | **Description:** Returns the percentage discount value, for example 10.00 for a "10% off" discount. 47 | 48 | **Returns:** 49 | 50 | Discount percentage value 51 | 52 | --- ``` -------------------------------------------------------------------------------- /tests/servers/sfcc-mock-server/src/middleware/cors.js: -------------------------------------------------------------------------------- ```javascript 1 | /** 2 | * CORS Middleware 3 | * 4 | * Handles Cross-Origin Resource Sharing configuration for the unified server. 5 | * Provides permissive CORS settings suitable for testing environments. 6 | */ 7 | 8 | const cors = require('cors'); 9 | 10 | /** 11 | * Create CORS middleware with appropriate settings for testing 12 | */ 13 | function createCorsMiddleware() { 14 | return cors({ 15 | origin: '*', 16 | methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS', 'PROPFIND'], 17 | allowedHeaders: [ 18 | 'Content-Type', 19 | 'Authorization', 20 | 'Depth', 21 | 'Range', 22 | 'X-Requested-With', 23 | 'Cache-Control' 24 | ], 25 | exposedHeaders: [ 26 | 'Content-Range', 27 | 'Accept-Ranges', 28 | 'Content-Length', 29 | 'Last-Modified' 30 | ], 31 | credentials: true, 32 | preflightContinue: false, 33 | optionsSuccessStatus: 200 34 | }); 35 | } 36 | 37 | module.exports = { 38 | createCorsMiddleware 39 | }; ``` -------------------------------------------------------------------------------- /docs/dw_object/SimpleExtensible.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.object 2 | 3 | # Class SimpleExtensible 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.object.SimpleExtensible 9 | 10 | ## Description 11 | 12 | Base class alternative to ExtensibleObject for customizable objects which do not rely on the metadata system. Unlike Extensible any custom attributes can be set on the fly and are not checked against an available list. Similar to Extensible method getCustom() is the central point to retrieve and store the objects attribute values. 13 | 14 | ## Properties 15 | 16 | ### custom 17 | 18 | **Type:** CustomAttributes (Read Only) 19 | 20 | The custom attributes for this object. 21 | 22 | ## Constructor Summary 23 | 24 | ## Method Summary 25 | 26 | ### getCustom 27 | 28 | **Signature:** `getCustom() : CustomAttributes` 29 | 30 | Returns the custom attributes for this object. 31 | 32 | ## Method Detail 33 | 34 | ## Method Details 35 | 36 | ### getCustom 37 | 38 | **Signature:** `getCustom() : CustomAttributes` 39 | 40 | **Description:** Returns the custom attributes for this object. 41 | 42 | **Returns:** 43 | 44 | the custom attributes for this object. 45 | 46 | --- ``` -------------------------------------------------------------------------------- /docs/dw_campaign/FixedPriceDiscount.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class FixedPriceDiscount 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.Discount 9 | - dw.campaign.FixedPriceDiscount 10 | 11 | ## Description 12 | 13 | Represents a fix price discount in the discount plan, for example "Shipping only 0.99 all orders $25 or more." 14 | 15 | ## Properties 16 | 17 | ### fixedPrice 18 | 19 | **Type:** Number (Read Only) 20 | 21 | The fixed price amount, for example 0.99 for a "Shipping only $0.99" 22 | discount. 23 | 24 | ## Constructor Summary 25 | 26 | FixedPriceDiscount(amount : Number) Create a fixed-price-discount on the fly. 27 | 28 | ## Method Summary 29 | 30 | ### getFixedPrice 31 | 32 | **Signature:** `getFixedPrice() : Number` 33 | 34 | Returns the fixed price amount, for example 0.99 for a "Shipping only $0.99" discount. 35 | 36 | ## Constructor Detail 37 | 38 | ## Method Detail 39 | 40 | ## Method Details 41 | 42 | ### getFixedPrice 43 | 44 | **Signature:** `getFixedPrice() : Number` 45 | 46 | **Description:** Returns the fixed price amount, for example 0.99 for a "Shipping only $0.99" discount. 47 | 48 | **Returns:** 49 | 50 | Fixed price amount 51 | 52 | --- ``` -------------------------------------------------------------------------------- /docs/dw_campaign/BonusDiscount.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class BonusDiscount 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.Discount 9 | - dw.campaign.BonusDiscount 10 | 11 | ## Description 12 | 13 | Represents a bonus discount in the discount plan, for example "Get a free DVD with your purchase of any DVD player." 14 | 15 | ## Properties 16 | 17 | ### bonusProducts 18 | 19 | **Type:** Collection (Read Only) 20 | 21 | The bonus products associated with this discount that are in 22 | stock, online and assigned to site catalog. 23 | 24 | ## Constructor Summary 25 | 26 | ## Method Summary 27 | 28 | ### getBonusProducts 29 | 30 | **Signature:** `getBonusProducts() : Collection` 31 | 32 | Returns the bonus products associated with this discount that are in stock, online and assigned to site catalog. 33 | 34 | ## Method Detail 35 | 36 | ## Method Details 37 | 38 | ### getBonusProducts 39 | 40 | **Signature:** `getBonusProducts() : Collection` 41 | 42 | **Description:** Returns the bonus products associated with this discount that are in stock, online and assigned to site catalog. 43 | 44 | **Returns:** 45 | 46 | Collection of bonus products 47 | 48 | --- ``` -------------------------------------------------------------------------------- /docs-site/constants.tsx: -------------------------------------------------------------------------------- ```typescript 1 | import { NavGroup } from './types'; 2 | 3 | // Date constants for structured data 4 | export const SITE_DATES = { 5 | PUBLISHED: "2025-09-13T08:00:00+00:00", // Last week 6 | MODIFIED: "2025-09-20T08:00:00+00:00" // Today 7 | } as const; 8 | 9 | export const NAVIGATION_LINKS: NavGroup[] = [ 10 | { 11 | title: 'GETTING STARTED', 12 | items: [ 13 | { label: 'Introduction', path: '/' }, 14 | { label: 'AI Assistant Setup', path: '/ai-interfaces/' }, 15 | { label: 'Configuration Guide', path: '/configuration/' }, 16 | ], 17 | }, 18 | { 19 | title: 'FEATURES', 20 | items: [ 21 | { label: 'Features Overview', path: '/features/' }, 22 | { label: 'Available Tools', path: '/tools/' }, 23 | { label: 'Examples & Use Cases', path: '/examples/' }, 24 | { label: 'Security Guidelines', path: '/security/' }, 25 | ], 26 | }, 27 | { 28 | title: 'DEVELOPMENT', 29 | items: [ 30 | { label: 'Development Guide', path: '/development/' }, 31 | { label: 'Troubleshooting', path: '/troubleshooting/' }, 32 | ], 33 | }, 34 | ]; ``` -------------------------------------------------------------------------------- /docs/dw_suggest/SuggestedProduct.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.suggest 2 | 3 | # Class SuggestedProduct 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.suggest.SuggestedProduct 9 | 10 | ## Description 11 | 12 | This class represents a suggested product. Use getProductSearchHit() method to get access to the actual ProductSearchHit object. 13 | 14 | ## Properties 15 | 16 | ### productSearchHit 17 | 18 | **Type:** ProductSearchHit (Read Only) 19 | 20 | This method returns the actual ProductSearchHit object 21 | corresponding to this suggested product. 22 | 23 | ## Constructor Summary 24 | 25 | ## Method Summary 26 | 27 | ### getProductSearchHit 28 | 29 | **Signature:** `getProductSearchHit() : ProductSearchHit` 30 | 31 | This method returns the actual ProductSearchHit object corresponding to this suggested product. 32 | 33 | ## Method Detail 34 | 35 | ## Method Details 36 | 37 | ### getProductSearchHit 38 | 39 | **Signature:** `getProductSearchHit() : ProductSearchHit` 40 | 41 | **Description:** This method returns the actual ProductSearchHit object corresponding to this suggested product. 42 | 43 | **Returns:** 44 | 45 | the product search hit corresponding to this suggested product 46 | 47 | --- ``` -------------------------------------------------------------------------------- /docs/dw_campaign/FixedPriceShippingDiscount.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class FixedPriceShippingDiscount 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.Discount 9 | - dw.campaign.FixedPriceShippingDiscount 10 | 11 | ## Description 12 | 13 | Represents a fixed price shipping discount in the discount plan, for example "Shipping only 0.99 for iPods." 14 | 15 | ## Properties 16 | 17 | ### fixedPrice 18 | 19 | **Type:** Number (Read Only) 20 | 21 | The fixed price amount, for example 0.99 for a "Shipping only $0.99" 22 | discount. 23 | 24 | ## Constructor Summary 25 | 26 | FixedPriceShippingDiscount(amount : Number) Create a fixed-price-shipping-discount on the fly. 27 | 28 | ## Method Summary 29 | 30 | ### getFixedPrice 31 | 32 | **Signature:** `getFixedPrice() : Number` 33 | 34 | Returns the fixed price amount, for example 0.99 for a "Shipping only $0.99" discount. 35 | 36 | ## Constructor Detail 37 | 38 | ## Method Detail 39 | 40 | ## Method Details 41 | 42 | ### getFixedPrice 43 | 44 | **Signature:** `getFixedPrice() : Number` 45 | 46 | **Description:** Returns the fixed price amount, for example 0.99 for a "Shipping only $0.99" discount. 47 | 48 | **Returns:** 49 | 50 | Fixed price amount 51 | 52 | --- ``` -------------------------------------------------------------------------------- /src/core/handlers/log-handler.ts: -------------------------------------------------------------------------------- ```typescript 1 | import { AbstractLogToolHandler } from './abstract-log-tool-handler.js'; 2 | import { HandlerContext } from './base-handler.js'; 3 | import { GenericToolSpec } from './base-handler.js'; 4 | import { ToolArguments } from './base-handler.js'; 5 | import { LOG_TOOL_CONFIG } from '../../tool-configs/log-tool-config.js'; 6 | import { LOG_TOOL_NAMES_SET, LogToolName } from '../../utils/log-tool-constants.js'; 7 | 8 | /** 9 | * Handler for standard log tools using config-driven dispatch 10 | * Handles log reading, searching, and analysis operations 11 | */ 12 | export class LogToolHandler extends AbstractLogToolHandler<LogToolName> { 13 | constructor(context: HandlerContext, subLoggerName: string) { 14 | super(context, subLoggerName); 15 | } 16 | 17 | canHandle(toolName: string): boolean { 18 | return LOG_TOOL_NAMES_SET.has(toolName as LogToolName); 19 | } 20 | 21 | protected getToolNameSet(): Set<LogToolName> { 22 | return LOG_TOOL_NAMES_SET; 23 | } 24 | 25 | protected getToolConfig(): Record<string, GenericToolSpec<ToolArguments, any>> { 26 | return LOG_TOOL_CONFIG; 27 | } 28 | } 29 | ``` -------------------------------------------------------------------------------- /docs/dw_extensions.payments/SalesforceSepaDebitPaymentDetails.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.extensions.payments 2 | 3 | # Class SalesforceSepaDebitPaymentDetails 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.extensions.payments.SalesforcePaymentDetails 9 | - dw.extensions.payments.SalesforceSepaDebitPaymentDetails 10 | 11 | ## Description 12 | 13 | Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_SEPA_DEBIT. See Salesforce Payments documentation for how to gain access and configure it for use on your sites. 14 | 15 | ## Properties 16 | 17 | ### last4 18 | 19 | **Type:** String (Read Only) 20 | 21 | The last 4 digits of the account number, or null if not known. 22 | 23 | ## Constructor Summary 24 | 25 | ## Method Summary 26 | 27 | ### getLast4 28 | 29 | **Signature:** `getLast4() : String` 30 | 31 | Returns the last 4 digits of the account number, or null if not known. 32 | 33 | ## Method Detail 34 | 35 | ## Method Details 36 | 37 | ### getLast4 38 | 39 | **Signature:** `getLast4() : String` 40 | 41 | **Description:** Returns the last 4 digits of the account number, or null if not known. 42 | 43 | **Returns:** 44 | 45 | last 4 digits of the account number 46 | 47 | **See Also:** 48 | 49 | SalesforcePaymentMethod.getLast4() 50 | 51 | --- ``` -------------------------------------------------------------------------------- /tests/servers/sfcc-mock-server/package.json: -------------------------------------------------------------------------------- ```json 1 | { 2 | "name": "sfcc-mock-server", 3 | "version": "1.0.0", 4 | "description": "Unified SFCC Mock Server combining WebDAV and OCAPI functionality for testing", 5 | "main": "server.js", 6 | "scripts": { 7 | "start": "node server.js", 8 | "dev": "node server.js --dev", 9 | "start:port": "node server.js --port 3001", 10 | "start:custom": "node server.js --host 0.0.0.0 --port 3000 --dev", 11 | "setup": "npm install && npm run setup:logs", 12 | "setup:clean": "rm -rf mock-data/logs && mkdir -p mock-data/logs && echo 'Cleaned up mock logs directory.'", 13 | "setup:logs": "npm run setup:clean && node scripts/setup-logs.js", 14 | "test": "echo \"No tests yet\" && exit 0" 15 | }, 16 | "dependencies": { 17 | "express": "^4.18.2", 18 | "cors": "^2.8.5" 19 | }, 20 | "devDependencies": { 21 | "@types/node": "^18.0.0" 22 | }, 23 | "keywords": [ 24 | "sfcc", 25 | "webdav", 26 | "ocapi", 27 | "mock", 28 | "testing", 29 | "mcp", 30 | "salesforce", 31 | "b2c-commerce", 32 | "unified" 33 | ], 34 | "author": "SFCC Dev MCP", 35 | "license": "MIT", 36 | "engines": { 37 | "node": ">=16.0.0" 38 | } 39 | } ``` -------------------------------------------------------------------------------- /docs/dw_system/PipelineDictionary.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.system 2 | 3 | # Class PipelineDictionary 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.system.PipelineDictionary 9 | 10 | ## Description 11 | 12 | The class provides access to the values in the pipeline dictionary. You use dynamic properties to access values, such as pdict.myvalue or pdict['myvalue']; The class is used in two different contexts, one where access is limited to the declared input/output values and second to a context with full access. Inside scripts, the PipelineDictionary allows you to access declared in/out values (regardless of the alias used in the pipeline and the actual key under which the value is stored). In templates and pipelines, all values can be accessed. In templates the pipeline dictionary is exposed as variable pdict (e.g. ${pdict.Product.ID}). There are several values that are automatically stored in the PipelineDictionary with each request. These include but are not limited to: CurrentSession CurrentRequest CurrentHttpParameterMap CurrentForms CurrentCustomer etc. 13 | 14 | ## Constructor Summary 15 | 16 | ## Method Summary ``` -------------------------------------------------------------------------------- /docs/TopLevel/Iterator.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: TopLevel 2 | 3 | # Class Iterator 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - Iterator 9 | 10 | ## Description 11 | 12 | An Iterator is a special object that lets you access items from a collection one at a time, while keeping track of its current position within that sequence. 13 | 14 | ## Constructor Summary 15 | 16 | Iterator(object : Object) Creates an Iterator instance for the specified object. 17 | 18 | Iterator(object : Object, keysOnly : boolean) Creates an Iterator instance for the specified object's keys. 19 | 20 | ## Method Summary 21 | 22 | ### next 23 | 24 | **Signature:** `next() : Object` 25 | 26 | Returns the next item in the iterator. 27 | 28 | ## Constructor Detail 29 | 30 | ## Method Detail 31 | 32 | ## Method Details 33 | 34 | ### next 35 | 36 | **Signature:** `next() : Object` 37 | 38 | **Description:** Returns the next item in the iterator. If there are no items left, the StopIteration exception is thrown. You should generally use this method in the context of a try...catch block to handle the StopIteration case. There is no guaranteed ordering of the data. 39 | 40 | **Returns:** 41 | 42 | the next item in the iterator. 43 | 44 | **See Also:** 45 | 46 | StopIteration 47 | 48 | --- ``` -------------------------------------------------------------------------------- /docs/dw_object/CustomObject.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.object 2 | 3 | # Class CustomObject 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.object.PersistentObject 9 | - dw.object.ExtensibleObject 10 | - dw.object.CustomObject 11 | 12 | ## Description 13 | 14 | Represents a custom object and its corresponding attributes. 15 | 16 | ## Properties 17 | 18 | ### custom 19 | 20 | **Type:** CustomAttributes (Read Only) 21 | 22 | The custom attributes of this 23 | object. 24 | 25 | ### type 26 | 27 | **Type:** String (Read Only) 28 | 29 | The type of the CustomObject. 30 | 31 | ## Constructor Summary 32 | 33 | ## Method Summary 34 | 35 | ### getCustom 36 | 37 | **Signature:** `getCustom() : CustomAttributes` 38 | 39 | Returns the custom attributes of this object. 40 | 41 | ### getType 42 | 43 | **Signature:** `getType() : String` 44 | 45 | Returns the type of the CustomObject. 46 | 47 | ## Method Detail 48 | 49 | ## Method Details 50 | 51 | ### getCustom 52 | 53 | **Signature:** `getCustom() : CustomAttributes` 54 | 55 | **Description:** Returns the custom attributes of this object. 56 | 57 | **Returns:** 58 | 59 | the custom attributes of this object. 60 | 61 | --- 62 | 63 | ### getType 64 | 65 | **Signature:** `getType() : String` 66 | 67 | **Description:** Returns the type of the CustomObject. 68 | 69 | **Returns:** 70 | 71 | the type of the CustomObject. 72 | 73 | --- ``` -------------------------------------------------------------------------------- /tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-order.json: -------------------------------------------------------------------------------- ```json 1 | { 2 | "_v": "23.2", 3 | "_type": "object_attribute_group_search_result", 4 | "count": 3, 5 | "hits": [ 6 | { 7 | "_type": "object_attribute_group", 8 | "_resource_state": "256cec6da337c7b993ba0de0994a172eb411c100943c06b8d5656c915f1e2062", 9 | "id": "adyen", 10 | "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/Order/attribute_groups/adyen" 11 | }, 12 | { 13 | "_type": "object_attribute_group", 14 | "_resource_state": "6c7374d3c12695b8144a566072c295a002e671b23c240a45ebb7e72d65310847", 15 | "id": "ccv", 16 | "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/Order/attribute_groups/ccv" 17 | }, 18 | { 19 | "_type": "object_attribute_group", 20 | "_resource_state": "27a8a78cd8e1d604af912bce266d1c55d9ceae76513f18a221b2d27451ef6657", 21 | "id": "tracking", 22 | "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/Order/attribute_groups/tracking" 23 | } 24 | ], 25 | "query": { 26 | "match_all_query": { 27 | "_type": "match_all_query" 28 | } 29 | }, 30 | "start": 0, 31 | "total": 3 32 | } ``` -------------------------------------------------------------------------------- /docs-site/components/NextStepsStrip.tsx: -------------------------------------------------------------------------------- ```typescript 1 | import React from 'react'; 2 | import { H3 } from './Typography'; 3 | 4 | export const NextStepsStrip: React.FC = () => { 5 | const cards = [ 6 | { href: '/ai-interfaces', title: '🤖 AI Interface Setup', desc: 'Connect Claude, Copilot, Cursor' }, 7 | { href: '/tools', title: '🛠️ Tool Surface', desc: 'Explore all available tools' }, 8 | { href: '/examples', title: '💡 Examples', desc: 'Real prompts & outcomes' }, 9 | { href: '/troubleshooting', title: '🐛 Troubleshooting', desc: 'Diagnose common issues' } 10 | ]; 11 | return ( 12 | <div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-5 mt-4"> 13 | {cards.map(c => ( 14 | <a key={c.href} href={c.href} className="group block rounded-xl border border-gray-200 bg-white p-5 hover:border-blue-400 hover:shadow transition no-underline focus:outline-none focus:ring-2 focus:ring-blue-500"> 15 | <H3 className="text-base font-semibold mb-1 group-hover:text-blue-700">{c.title}</H3> 16 | <p className="text-xs text-gray-600">{c.desc}</p> 17 | </a> 18 | ))} 19 | </div> 20 | ); 21 | }; 22 | 23 | export default NextStepsStrip; 24 | ``` -------------------------------------------------------------------------------- /src/core/handlers/job-log-handler.ts: -------------------------------------------------------------------------------- ```typescript 1 | import { AbstractLogToolHandler } from './abstract-log-tool-handler.js'; 2 | import { HandlerContext } from './base-handler.js'; 3 | import { GenericToolSpec } from './base-handler.js'; 4 | import { ToolArguments } from './base-handler.js'; 5 | import { JOB_LOG_TOOL_CONFIG } from '../../tool-configs/job-log-tool-config.js'; 6 | import { JOB_LOG_TOOL_NAMES_SET, JobLogToolName } from '../../utils/log-tool-constants.js'; 7 | 8 | /** 9 | * Handler for job-specific log tools using config-driven dispatch 10 | * Separates job log operations from standard log operations for better maintainability 11 | */ 12 | export class JobLogToolHandler extends AbstractLogToolHandler<JobLogToolName> { 13 | constructor(context: HandlerContext, subLoggerName: string) { 14 | super(context, subLoggerName); 15 | } 16 | 17 | canHandle(toolName: string): boolean { 18 | return JOB_LOG_TOOL_NAMES_SET.has(toolName as JobLogToolName); 19 | } 20 | 21 | protected getToolNameSet(): Set<JobLogToolName> { 22 | return JOB_LOG_TOOL_NAMES_SET; 23 | } 24 | 25 | protected getToolConfig(): Record<string, GenericToolSpec<ToolArguments, any>> { 26 | return JOB_LOG_TOOL_CONFIG; 27 | } 28 | } 29 | ``` -------------------------------------------------------------------------------- /docs/TopLevel/Boolean.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: TopLevel 2 | 3 | # Class Boolean 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - Boolean 9 | 10 | ## Description 11 | 12 | Provides support for boolean values. 13 | 14 | ## Constructor Summary 15 | 16 | Boolean(value : String) Constructs the Boolean using the specified String value. 17 | 18 | Boolean(value : Number) Constructs the Boolean using the specified Number value. 19 | 20 | ## Method Summary 21 | 22 | ### toString 23 | 24 | **Signature:** `toString() : String` 25 | 26 | Returns true or false depending on the value used to create the Boolean. 27 | 28 | ### valueOf 29 | 30 | **Signature:** `valueOf() : Object` 31 | 32 | Returns the primitive boolean contained in the Boolean object. 33 | 34 | ## Constructor Detail 35 | 36 | ## Method Detail 37 | 38 | ## Method Details 39 | 40 | ### toString 41 | 42 | **Signature:** `toString() : String` 43 | 44 | **Description:** Returns true or false depending on the value used to create the Boolean. 45 | 46 | **Returns:** 47 | 48 | true or false depending on the value used to create the Boolean. 49 | 50 | --- 51 | 52 | ### valueOf 53 | 54 | **Signature:** `valueOf() : Object` 55 | 56 | **Description:** Returns the primitive boolean contained in the Boolean object. 57 | 58 | **Returns:** 59 | 60 | the primitive boolean contained in the Boolean object. 61 | 62 | --- ``` -------------------------------------------------------------------------------- /docs/dw_campaign/ABTest.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class ABTest 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.object.PersistentObject 9 | - dw.campaign.ABTest 10 | 11 | ## Description 12 | 13 | Object representing an AB-test in Commerce Cloud Digital. AB-tests provide the merchant the ability to compare one set of storefront "experiences" - promotions, sorting rules, and slot configurations in particular - against another set. The merchant configures different AB-test segments which define the sets of experiences that the merchant wishes to test. AB-tests run for a configured period of time, and customers are randomly assigned by the platform to the test segments according to allocation percentages defined by the merchant. 14 | 15 | ## Properties 16 | 17 | ### ID 18 | 19 | **Type:** String (Read Only) 20 | 21 | Get the test ID for this AB-test. 22 | 23 | ## Constructor Summary 24 | 25 | ## Method Summary 26 | 27 | ### getID 28 | 29 | **Signature:** `getID() : String` 30 | 31 | Get the test ID for this AB-test. 32 | 33 | ## Method Detail 34 | 35 | ## Method Details 36 | 37 | ### getID 38 | 39 | **Signature:** `getID() : String` 40 | 41 | **Description:** Get the test ID for this AB-test. 42 | 43 | **Returns:** 44 | 45 | the test ID for this AB-test. 46 | 47 | --- ``` -------------------------------------------------------------------------------- /docs/dw_order/PaymentStatusCodes.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.order 2 | 3 | # Class PaymentStatusCodes 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.order.PaymentStatusCodes 9 | 10 | ## Description 11 | 12 | Helper class containing status codes for the various errors that can occur when validating a payment card. One of these codes is returned as part of a Status object when a unsuccessful call to the VerifyPaymentCard or VerifyCreditCard pipelet is made. The same codes are used when calling PaymentCard.verify(Number, Number, String) or PaymentCard.verify(Number, Number, String, String). 13 | 14 | ## Constants 15 | 16 | ### CREDITCARD_INVALID_CARD_NUMBER 17 | 18 | **Type:** String = "CREDITCARD_INVALID_CARD_NUMBER" 19 | 20 | The code indicates that the credit card number is incorrect. 21 | 22 | ### CREDITCARD_INVALID_EXPIRATION_DATE 23 | 24 | **Type:** String = "CREDITCARD_INVALID_EXPIRATION_DATE" 25 | 26 | The code indicates that the credit card is expired. 27 | 28 | ### CREDITCARD_INVALID_SECURITY_CODE 29 | 30 | **Type:** String = "CREDITCARD_INVALID_SECURITY_CODE" 31 | 32 | The code indicates that the credit card security code length is invalid. 33 | 34 | ## Properties 35 | 36 | ## Constructor Summary 37 | 38 | PaymentStatusCodes() 39 | 40 | ## Method Summary 41 | 42 | ## Constructor Detail ``` -------------------------------------------------------------------------------- /docs/dw_extensions.payments/SalesforceKlarnaPaymentDetails.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.extensions.payments 2 | 3 | # Class SalesforceKlarnaPaymentDetails 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.extensions.payments.SalesforcePaymentDetails 9 | - dw.extensions.payments.SalesforceKlarnaPaymentDetails 10 | 11 | ## Description 12 | 13 | Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_KLARNA. See Salesforce Payments documentation for how to gain access and configure it for use on your sites. 14 | 15 | ## Properties 16 | 17 | ### paymentMethodCategory 18 | 19 | **Type:** String (Read Only) 20 | 21 | The payment method category used for the payment, or null if not known. 22 | 23 | ## Constructor Summary 24 | 25 | ## Method Summary 26 | 27 | ### getPaymentMethodCategory 28 | 29 | **Signature:** `getPaymentMethodCategory() : String` 30 | 31 | Returns the payment method category used for the payment, or null if not known. 32 | 33 | ## Method Detail 34 | 35 | ## Method Details 36 | 37 | ### getPaymentMethodCategory 38 | 39 | **Signature:** `getPaymentMethodCategory() : String` 40 | 41 | **Description:** Returns the payment method category used for the payment, or null if not known. 42 | 43 | **Returns:** 44 | 45 | payment method category 46 | 47 | **See Also:** 48 | 49 | SalesforcePaymentMethod.getPaymentMethodCategory() 50 | 51 | --- ``` -------------------------------------------------------------------------------- /docs/dw_system/RESTSuccessResponse.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.system 2 | 3 | # Class RESTSuccessResponse 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.system.RESTSuccessResponse 9 | 10 | ## Description 11 | 12 | This class represents a REST success response that is compliant with the RFC standards. It can only be instantiated using the createSuccess methods in RESTResponseMgr. Here is an example: var body = {"hello": "world"} var success = RESTResponseMgr.createSuccess(body); success.render(); The above script would result in an HTTP response with status code 200 and the following body: { "hello": "world" } 13 | 14 | ## Constructor Summary 15 | 16 | ## Method Summary 17 | 18 | ### render 19 | 20 | **Signature:** `render() : void` 21 | 22 | Sends the RESTSuccessResponse object as an HTTP response to the client. 23 | 24 | ## Method Detail 25 | 26 | ## Method Details 27 | 28 | ### render 29 | 30 | **Signature:** `render() : void` 31 | 32 | **Description:** Sends the RESTSuccessResponse object as an HTTP response to the client. This sets the "Content-Type" header to "application/json" and expects the body to be a valid JavaScript JSON object. 33 | 34 | **Throws:** 35 | 36 | IllegalStateException - If the RESTSuccessResponse object is already rendered. 37 | Exception - If there is an error while serializing the body. 38 | 39 | --- ``` -------------------------------------------------------------------------------- /docs/TopLevel/IOError.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: TopLevel 2 | 3 | # Class IOError 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - TopLevel.Error 9 | - IOError 10 | 11 | ## Description 12 | 13 | This error indicates an I/O related error in the system. The IOError is always related to a systems internal Java exception. The class provides access to some more details about this internal Java exception. 14 | 15 | ## Properties 16 | 17 | ### causeFullName 18 | 19 | **Type:** String 20 | 21 | If the exception is associated with a root cause, the property 22 | contains the full name of the associated Java exception. 23 | 24 | ### causeMessage 25 | 26 | **Type:** String 27 | 28 | If the exception is associated with a root cause, the property 29 | contains the message of the associated Java exception. 30 | 31 | ### causeName 32 | 33 | **Type:** String 34 | 35 | If the exception is associated with a root cause, the property 36 | contains the simplified name of the associated Java exception. 37 | 38 | ### javaFullName 39 | 40 | **Type:** String 41 | 42 | The full name of the underlying Java exception. 43 | 44 | ### javaMessage 45 | 46 | **Type:** String 47 | 48 | The message of the underlying Java exception. 49 | 50 | ### javaName 51 | 52 | **Type:** String 53 | 54 | The simplified name of the underlying Java exception. 55 | 56 | ## Constructor Summary 57 | 58 | IOError() 59 | 60 | ## Method Summary 61 | 62 | ## Constructor Detail ``` -------------------------------------------------------------------------------- /docs/dw_suggest/SuggestedPhrase.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.suggest 2 | 3 | # Class SuggestedPhrase 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.suggest.SuggestedPhrase 9 | 10 | ## Description 11 | 12 | This class represents a suggested phrase. Use getPhrase() method to get access to the phrase. 13 | 14 | ## Properties 15 | 16 | ### exactMatch 17 | 18 | **Type:** boolean (Read Only) 19 | 20 | This method returns a flag signaling whether this phrase is a exact match. 21 | 22 | ### phrase 23 | 24 | **Type:** String (Read Only) 25 | 26 | This method returns the actual phrase as a string value. 27 | 28 | ## Constructor Summary 29 | 30 | ## Method Summary 31 | 32 | ### getPhrase 33 | 34 | **Signature:** `getPhrase() : String` 35 | 36 | This method returns the actual phrase as a string value. 37 | 38 | ### isExactMatch 39 | 40 | **Signature:** `isExactMatch() : boolean` 41 | 42 | This method returns a flag signaling whether this phrase is a exact match. 43 | 44 | ## Method Detail 45 | 46 | ## Method Details 47 | 48 | ### getPhrase 49 | 50 | **Signature:** `getPhrase() : String` 51 | 52 | **Description:** This method returns the actual phrase as a string value. 53 | 54 | **Returns:** 55 | 56 | the phrase 57 | 58 | --- 59 | 60 | ### isExactMatch 61 | 62 | **Signature:** `isExactMatch() : boolean` 63 | 64 | **Description:** This method returns a flag signaling whether this phrase is a exact match. 65 | 66 | **Returns:** 67 | 68 | true if this phrase is a exact match, false otherwise 69 | 70 | --- ``` -------------------------------------------------------------------------------- /docs/dw_web/URLRedirect.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.web 2 | 3 | # Class URLRedirect 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.web.URLRedirect 9 | 10 | ## Description 11 | 12 | Represents a URLRedirect in Commerce Cloud Digital. 13 | 14 | ## Properties 15 | 16 | ### location 17 | 18 | **Type:** String (Read Only) 19 | 20 | The URL which was calculated to be the redirect URL. 21 | The Location parameter can be directly used as value for an redirect location. 22 | 23 | ### status 24 | 25 | **Type:** Number (Read Only) 26 | 27 | The corresponding status code for the redirect location. 28 | 29 | ## Constructor Summary 30 | 31 | ## Method Summary 32 | 33 | ### getLocation 34 | 35 | **Signature:** `getLocation() : String` 36 | 37 | Returns the URL which was calculated to be the redirect URL. 38 | 39 | ### getStatus 40 | 41 | **Signature:** `getStatus() : Number` 42 | 43 | Returns the corresponding status code for the redirect location. 44 | 45 | ## Method Detail 46 | 47 | ## Method Details 48 | 49 | ### getLocation 50 | 51 | **Signature:** `getLocation() : String` 52 | 53 | **Description:** Returns the URL which was calculated to be the redirect URL. The Location parameter can be directly used as value for an redirect location. 54 | 55 | **Returns:** 56 | 57 | redirect location 58 | 59 | --- 60 | 61 | ### getStatus 62 | 63 | **Signature:** `getStatus() : Number` 64 | 65 | **Description:** Returns the corresponding status code for the redirect location. 66 | 67 | **Returns:** 68 | 69 | status code 70 | 71 | --- ``` -------------------------------------------------------------------------------- /docs/dw_io/CSVStreamWriter.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.io 2 | 3 | # Class CSVStreamWriter 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.io.CSVStreamWriter 9 | 10 | ## Description 11 | 12 | The class writes a CSV file. Note: when this class is used with sensitive data, be careful in persisting sensitive information to disk. 13 | 14 | ## Constructor Summary 15 | 16 | CSVStreamWriter(writer : Writer) Create a new CSVStreamWriter with a ',' as separator and '"' as quote character. 17 | 18 | CSVStreamWriter(writer : Writer, separator : String) Create a new CSVStreamWriter with the specified separator and '"' as quote character. 19 | 20 | CSVStreamWriter(writer : Writer, separator : String, quote : String) Create a new CSVStreamWriter with the specified separator and the specified quote character. 21 | 22 | ## Method Summary 23 | 24 | ### close 25 | 26 | **Signature:** `close() : void` 27 | 28 | Closes the underlying writer. 29 | 30 | ### writeNext 31 | 32 | **Signature:** `writeNext(line : String...) : void` 33 | 34 | Write a single line to the CSV file. 35 | 36 | ## Constructor Detail 37 | 38 | ## Method Detail 39 | 40 | ## Method Details 41 | 42 | ### close 43 | 44 | **Signature:** `close() : void` 45 | 46 | **Description:** Closes the underlying writer. 47 | 48 | --- 49 | 50 | ### writeNext 51 | 52 | **Signature:** `writeNext(line : String...) : void` 53 | 54 | **Description:** Write a single line to the CSV file. 55 | 56 | **Parameters:** 57 | 58 | - `line`: an array of strings. 59 | 60 | --- ``` -------------------------------------------------------------------------------- /docs-site/package.json: -------------------------------------------------------------------------------- ```json 1 | { 2 | "name": "sfcc-dev-mcp-docs", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "npm run build:css && vite-react-ssg dev", 8 | "build": "npm run build:css && npm run generate:search-index && npm run generate:sitemap && vite-react-ssg build", 9 | "preview": "vite preview", 10 | "build:css": "tailwindcss -i ./src/styles/input.css -o ./public/index.css", 11 | "build:css:watch": "tailwindcss -i ./src/styles/input.css -o ./public/index.css --watch", 12 | "generate:search-index": "node scripts/generate-search-index.js", 13 | "generate:sitemap": "node scripts/generate-sitemap.js", 14 | "search-dev": "node scripts/search-dev.js", 15 | "search:generate": "node scripts/search-dev.js generate", 16 | "search:validate": "node scripts/search-dev.js validate" 17 | }, 18 | "dependencies": { 19 | "@tailwindcss/typography": "^0.5.16", 20 | "@types/prismjs": "^1.26.5", 21 | "prismjs": "^1.30.0", 22 | "react": "^19.1.1", 23 | "react-dom": "^19.1.1", 24 | "react-router-dom": "^6.30.1" 25 | }, 26 | "devDependencies": { 27 | "@types/node": "^22.14.0", 28 | "autoprefixer": "^10.4.20", 29 | "postcss": "^8.4.49", 30 | "tailwindcss": "^3.4.17", 31 | "typescript": "~5.8.2", 32 | "vite": "^6.2.0", 33 | "vite-react-ssg": "^0.8.9" 34 | } 35 | } 36 | ``` -------------------------------------------------------------------------------- /docs/TopLevel/SystemError.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: TopLevel 2 | 3 | # Class SystemError 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - TopLevel.Error 9 | - SystemError 10 | 11 | ## Description 12 | 13 | This error indicates an error in the system, which doesn't fall into any of the other error categories like for example IOError. The SystemError is always related to a systems internal Java exception. The class provides access to some more details about this internal Java exception. 14 | 15 | ## Properties 16 | 17 | ### causeFullName 18 | 19 | **Type:** String 20 | 21 | If the exception is associated with a root cause, the property 22 | contains the full name of the associated Java exception. 23 | 24 | ### causeMessage 25 | 26 | **Type:** String 27 | 28 | If the exception is associated with a root cause, the property 29 | contains the message of the associated Java exception. 30 | 31 | ### causeName 32 | 33 | **Type:** String 34 | 35 | If the exception is associated with a root cause, the property 36 | contains the simplified name of the associated Java exception. 37 | 38 | ### javaFullName 39 | 40 | **Type:** String 41 | 42 | The full name of the underlying Java exception. 43 | 44 | ### javaMessage 45 | 46 | **Type:** String 47 | 48 | The message of the underlying Java exception. 49 | 50 | ### javaName 51 | 52 | **Type:** String 53 | 54 | The simplified name of the underlying Java exception. 55 | 56 | ## Constructor Summary 57 | 58 | SystemError() 59 | 60 | ## Method Summary 61 | 62 | ## Constructor Detail ``` -------------------------------------------------------------------------------- /docs/dw_web/URLAction.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.web 2 | 3 | # Class URLAction 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.web.URLAction 9 | 10 | ## Description 11 | 12 | The class is needed for the URL creation within template processing. It represents a reference to a pipeline name and start node, usually used in a HREF or a FORM action. URLAction instances are usually passed to one of the methods in URLUtils in order to generate an appropriately constructed Commerce Cloud Digital URL. For example: var urlAction : URLAction = new URLAction("SimplePipeline-Start", "SampleSite"); var url : URL = URLUtils.abs(false, urlAction1); // url.toString() equals "http://" + request.httpHost + "/on/demandware.store/Sites-SampleSite-Site/default/SimplePipeline-Start" 13 | 14 | ## Constructor Summary 15 | 16 | URLAction(action : String) Constructs an action for the current site and locale. 17 | 18 | URLAction(action : String, siteName : String) Constructs an action for the specified site and the current locale. 19 | 20 | URLAction(action : String, siteName : String, locale : String) Constructs an action for the specified site and locale. 21 | 22 | URLAction(action : String, siteName : String, locale : String, hostName : String) Constructs an URL action for the specified site, locale and hostname. 23 | 24 | ## Method Summary 25 | 26 | ## Constructor Detail ``` -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- ```markdown 1 | ## 📚 Documentation Update 2 | 3 | ### Documentation Type 4 | - [ ] README.md updates 5 | - [ ] copilot-instructions.md updates 6 | - [ ] API documentation (docs/ folder) 7 | - [ ] Best practices guides 8 | - [ ] Code comments/JSDoc 9 | - [ ] Configuration examples 10 | - [ ] Troubleshooting guide 11 | 12 | ### Changes Made 13 | <!-- Describe what documentation was updated and why --> 14 | 15 | ### Content Updates 16 | - [ ] New sections added 17 | - [ ] Existing content revised for accuracy 18 | - [ ] Broken links fixed 19 | - [ ] Examples updated/added 20 | - [ ] Structure/organization improved 21 | - [ ] Grammar/spelling corrections 22 | - [ ] Accessibility improvements 23 | 24 | ### Consistency Checks 25 | - [ ] README.md and copilot-instructions.md kept in sync 26 | - [ ] Tool counts accurate in both files 27 | - [ ] File structure diagrams updated 28 | - [ ] Version numbers consistent 29 | - [ ] Links and references validated 30 | 31 | ### Target Audience 32 | - [ ] New users/first-time setup 33 | - [ ] SFCC developers using the MCP server 34 | - [ ] Contributors and maintainers 35 | - [ ] Advanced users and integrators 36 | 37 | ### Validation 38 | - [ ] Markdown syntax validated 39 | - [ ] Links tested and functional 40 | - [ ] Code examples tested 41 | - [ ] Configuration examples verified 42 | - [ ] Screenshots/diagrams current 43 | 44 | ### Related Issues 45 | Closes # 46 | 47 | --- 48 | **This PR improves project documentation to enhance user experience and maintainability.** 49 | ``` -------------------------------------------------------------------------------- /docs/dw_catalog/ProductSearchRefinementValue.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.catalog 2 | 3 | # Class ProductSearchRefinementValue 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.catalog.SearchRefinementValue 9 | - dw.catalog.ProductSearchRefinementValue 10 | 11 | ## Description 12 | 13 | Represents the value of a product search refinement. 14 | 15 | ## Properties 16 | 17 | ### valueFrom 18 | 19 | **Type:** Number (Read Only) 20 | 21 | The lower bound for price refinements. For example, 50.00 22 | for a range of $50.00 - $99.99. 23 | 24 | ### valueTo 25 | 26 | **Type:** Number (Read Only) 27 | 28 | The upper bound for price refinements. For example, 99.99 29 | for a range of $50.00 - $99.99. 30 | 31 | ## Constructor Summary 32 | 33 | ## Method Summary 34 | 35 | ### getValueFrom 36 | 37 | **Signature:** `getValueFrom() : Number` 38 | 39 | Returns the lower bound for price refinements. 40 | 41 | ### getValueTo 42 | 43 | **Signature:** `getValueTo() : Number` 44 | 45 | Returns the upper bound for price refinements. 46 | 47 | ## Method Detail 48 | 49 | ## Method Details 50 | 51 | ### getValueFrom 52 | 53 | **Signature:** `getValueFrom() : Number` 54 | 55 | **Description:** Returns the lower bound for price refinements. For example, 50.00 for a range of $50.00 - $99.99. 56 | 57 | **Returns:** 58 | 59 | the lower bound for price refinements. 60 | 61 | --- 62 | 63 | ### getValueTo 64 | 65 | **Signature:** `getValueTo() : Number` 66 | 67 | **Description:** Returns the upper bound for price refinements. For example, 99.99 for a range of $50.00 - $99.99. 68 | 69 | **Returns:** 70 | 71 | the upper bound for price refinements. 72 | 73 | --- ``` -------------------------------------------------------------------------------- /docs-site/components/Collapsible.tsx: -------------------------------------------------------------------------------- ```typescript 1 | import React from 'react'; 2 | 3 | interface CollapsibleProps { 4 | title: string; 5 | defaultOpen?: boolean; 6 | children: React.ReactNode; 7 | intent?: 'info' | 'warn' | 'danger' | 'plain'; 8 | id?: string; 9 | className?: string; 10 | } 11 | 12 | const intentStyles: Record<string,string> = { 13 | info: 'border-blue-200 bg-blue-50', 14 | warn: 'border-yellow-200 bg-yellow-50', 15 | danger: 'border-red-200 bg-red-50', 16 | plain: 'border-gray-200 bg-white' 17 | }; 18 | 19 | export const Collapsible: React.FC<CollapsibleProps> = ({ title, defaultOpen=false, children, intent='plain', id, className = '' }) => { 20 | const [open, setOpen] = React.useState(defaultOpen); 21 | return ( 22 | <div id={id} className={`rounded-xl border ${intentStyles[intent]} overflow-hidden ${className}`}> 23 | <button 24 | onClick={() => setOpen(o=>!o)} 25 | className="w-full flex items-center justify-between px-5 py-3 text-left text-sm font-semibold text-gray-800 focus:outline-none focus:ring-2 focus:ring-blue-500" 26 | aria-expanded={open} 27 | > 28 | <span>{title}</span> 29 | <span className="ml-4 text-gray-500">{open ? '−' : '+'}</span> 30 | </button> 31 | {open && ( 32 | <div className="px-5 pb-5 pt-1 text-sm text-gray-700 space-y-4 animate-fade-in"> 33 | {children} 34 | </div> 35 | )} 36 | </div> 37 | ); 38 | }; 39 | 40 | export default Collapsible; 41 | ``` -------------------------------------------------------------------------------- /docs/dw_customer/CustomerContextMgr.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.customer 2 | 3 | # Class CustomerContextMgr 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.customer.CustomerContextMgr 9 | 10 | ## Description 11 | 12 | Provides helper methods for managing customer context, such as the Effective Time for which the customer is shopping at 13 | 14 | ## Properties 15 | 16 | ### effectiveTime 17 | 18 | **Type:** Date 19 | 20 | Get the effective time associated with the customer. By default, the effective time is null. 21 | 22 | ## Constructor Summary 23 | 24 | ## Method Summary 25 | 26 | ### getEffectiveTime 27 | 28 | **Signature:** `static getEffectiveTime() : Date` 29 | 30 | Get the effective time associated with the customer. 31 | 32 | ### setEffectiveTime 33 | 34 | **Signature:** `static setEffectiveTime(effectiveTime : Date) : void` 35 | 36 | Set the effective time for the customer. 37 | 38 | ## Method Detail 39 | 40 | ## Method Details 41 | 42 | ### getEffectiveTime 43 | 44 | **Signature:** `static getEffectiveTime() : Date` 45 | 46 | **Description:** Get the effective time associated with the customer. By default, the effective time is null. 47 | 48 | **Returns:** 49 | 50 | effective time. When null is returned it means no effective time is associated with the customer 51 | 52 | --- 53 | 54 | ### setEffectiveTime 55 | 56 | **Signature:** `static setEffectiveTime(effectiveTime : Date) : void` 57 | 58 | **Description:** Set the effective time for the customer. Null is allowed to remove effective time from the customer. 59 | 60 | **Parameters:** 61 | 62 | - `effectiveTime`: the effective time. 63 | 64 | --- ``` -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE/bug_fix.md: -------------------------------------------------------------------------------- ```markdown 1 | ## 🐛 Bug Fix 2 | 3 | ### Bug Summary 4 | <!-- Brief description of the bug being fixed --> 5 | 6 | ### Root Cause Analysis 7 | <!-- Explain what caused the bug --> 8 | 9 | ### Solution Approach 10 | <!-- Describe how the fix addresses the root cause --> 11 | 12 | ### Changes Made 13 | - [ ] Code changes in specific files 14 | - [ ] Configuration updates 15 | - [ ] Dependency updates 16 | - [ ] Test additions/modifications 17 | 18 | ### Files Modified 19 | <!-- List the main files changed --> 20 | - 21 | - 22 | - 23 | 24 | ### Testing Strategy 25 | - [ ] Regression tests added to prevent reoccurrence 26 | - [ ] Existing tests updated if needed 27 | - [ ] Manual testing performed 28 | - [ ] Edge cases validated 29 | - [ ] Both operating modes tested (if applicable) 30 | 31 | ### Backward Compatibility 32 | - [ ] No breaking changes 33 | - [ ] Breaking changes documented and justified 34 | - [ ] Migration guide provided (if breaking) 35 | 36 | ### Risk Assessment 37 | - [ ] Low risk - isolated change 38 | - [ ] Medium risk - affects multiple components 39 | - [ ] High risk - core functionality changes 40 | 41 | ### Verification Steps 42 | <!-- How to verify the fix works --> 43 | 1. 44 | 2. 45 | 3. 46 | 47 | ### Performance Impact 48 | - [ ] No performance impact 49 | - [ ] Performance improvement 50 | - [ ] Minimal performance impact (acceptable) 51 | 52 | ### Related Issues 53 | Fixes # 54 | 55 | ### Additional Notes 56 | <!-- Any other relevant information --> 57 | 58 | --- 59 | **This PR resolves a bug while maintaining system stability and backward compatibility.** 60 | ``` -------------------------------------------------------------------------------- /docs/dw_system/OrganizationPreferences.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.system 2 | 3 | # Class OrganizationPreferences 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.object.PersistentObject 9 | - dw.object.ExtensibleObject 10 | - dw.system.OrganizationPreferences 11 | 12 | ## Description 13 | 14 | OrganizationPreferences is a container for custom global (i.e. organization-level) attributes. The object corresponds with system object definition "OrganizationPreferences". It has no system attributes and exists only as a place for merchants to define custom attributes which need to be available to all of their sites. An instance is obtained by calling System.getPreferences(). Once an instance of the container is obtained, it is possible to read/write organization preference values by using the usual syntax for ExtensibleObject instances. For example: var orgPrefs : OrganizationPreferences = dw.system.System.getPreferences(); var myOrgPrefValue : String = orgPrefs.getCustom()["myOrgPref"]; Note: this class allows access to sensitive security-related data. Pay special attention to PCI DSS v3. requirements 2, 4, and 12. Commerce Cloud Digital defines many organization-level preferences, relating to locale, timezone, geolocations, etc, which can be managed within the "Global Preferences" module of the Business Manager, but these preferences are not accessible through this object. 15 | 16 | ## Constructor Summary 17 | 18 | ## Method Summary ``` -------------------------------------------------------------------------------- /docs/dw_extensions.payments/SalesforcePaymentDetails.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.extensions.payments 2 | 3 | # Class SalesforcePaymentDetails 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.extensions.payments.SalesforcePaymentDetails 9 | 10 | ## Description 11 | 12 | Base class details to a Salesforce Payments payment. See Salesforce Payments documentation for how to gain access and configure it for use on your sites. Some payment types like SalesforcePaymentMethod.TYPE_CARD contain additional details like the card brand, or the last 4 digits of the card number. Details to those payments will be of a specific subclass of this class like SalesforceCardPaymentDetails. Other payment types have no additional information so their details are represented by an object of this base type. 13 | 14 | ## Properties 15 | 16 | ### type 17 | 18 | **Type:** String (Read Only) 19 | 20 | The payment type. 21 | 22 | ## Constructor Summary 23 | 24 | ## Method Summary 25 | 26 | ### getType 27 | 28 | **Signature:** `getType() : String` 29 | 30 | Returns the payment type. 31 | 32 | ## Method Detail 33 | 34 | ## Method Details 35 | 36 | ### getType 37 | 38 | **Signature:** `getType() : String` 39 | 40 | **Description:** Returns the payment type. 41 | 42 | **Returns:** 43 | 44 | payment type 45 | 46 | **See Also:** 47 | 48 | SalesforcePaymentMethod.TYPE_BANCONTACT 49 | SalesforcePaymentMethod.TYPE_CARD 50 | SalesforcePaymentMethod.TYPE_EPS 51 | SalesforcePaymentMethod.TYPE_IDEAL 52 | SalesforcePaymentMethod.TYPE_KLARNA 53 | SalesforcePaymentMethod.TYPE_SEPA_DEBIT 54 | SalesforcePayPalOrder.TYPE_PAYPAL 55 | SalesforcePayPalOrder.TYPE_VENMO 56 | 57 | --- ``` -------------------------------------------------------------------------------- /docs/dw_customer/CustomerList.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.customer 2 | 3 | # Class CustomerList 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.customer.CustomerList 9 | 10 | ## Description 11 | 12 | Object representing the collection of customers who are registered for a given site. In Commerce Cloud Digital, every site has exactly one assigned customer list but multiple sites may share a customer list. 13 | 14 | ## Properties 15 | 16 | ### description 17 | 18 | **Type:** String (Read Only) 19 | 20 | Get the optional description of the customer list. 21 | 22 | ### ID 23 | 24 | **Type:** String (Read Only) 25 | 26 | Get the ID of the customer list. For customer lists that were created automatically 27 | for a given site, this is equal to the ID of the site itself. 28 | 29 | ## Constructor Summary 30 | 31 | ## Method Summary 32 | 33 | ### getDescription 34 | 35 | **Signature:** `getDescription() : String` 36 | 37 | Get the optional description of the customer list. 38 | 39 | ### getID 40 | 41 | **Signature:** `getID() : String` 42 | 43 | Get the ID of the customer list. 44 | 45 | ## Method Detail 46 | 47 | ## Method Details 48 | 49 | ### getDescription 50 | 51 | **Signature:** `getDescription() : String` 52 | 53 | **Description:** Get the optional description of the customer list. 54 | 55 | **Returns:** 56 | 57 | The optional description of the list. 58 | 59 | --- 60 | 61 | ### getID 62 | 63 | **Signature:** `getID() : String` 64 | 65 | **Description:** Get the ID of the customer list. For customer lists that were created automatically for a given site, this is equal to the ID of the site itself. 66 | 67 | **Returns:** 68 | 69 | The ID of the customer list. 70 | 71 | --- ``` -------------------------------------------------------------------------------- /docs/dw_customer/CustomerCDPData.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.customer 2 | 3 | # Class CustomerCDPData 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.customer.CustomerCDPData 9 | 10 | ## Description 11 | 12 | Represents the read-only Customer's Salesforce CDP (Customer Data Platform) data for a Customer in Commerce Cloud. Please see Salesforce CDP enablement documentation 13 | 14 | ## Properties 15 | 16 | ### empty 17 | 18 | **Type:** boolean (Read Only) 19 | 20 | Return true if the CDPData is empty (has no meaningful data) 21 | 22 | ### segments 23 | 24 | **Type:** String (Read Only) 25 | 26 | An array containing the CDP segments for the customer, or an empty array if no segments found 27 | 28 | ## Constructor Summary 29 | 30 | ## Method Summary 31 | 32 | ### getSegments 33 | 34 | **Signature:** `getSegments() : String[]` 35 | 36 | Returns an array containing the CDP segments for the customer, or an empty array if no segments found 37 | 38 | ### isEmpty 39 | 40 | **Signature:** `isEmpty() : boolean` 41 | 42 | Return true if the CDPData is empty (has no meaningful data) 43 | 44 | ## Method Detail 45 | 46 | ## Method Details 47 | 48 | ### getSegments 49 | 50 | **Signature:** `getSegments() : String[]` 51 | 52 | **Description:** Returns an array containing the CDP segments for the customer, or an empty array if no segments found 53 | 54 | **Returns:** 55 | 56 | a collection containing the CDP segments for the customer 57 | 58 | --- 59 | 60 | ### isEmpty 61 | 62 | **Signature:** `isEmpty() : boolean` 63 | 64 | **Description:** Return true if the CDPData is empty (has no meaningful data) 65 | 66 | **Returns:** 67 | 68 | true if CDPData is empty, false otherwise 69 | 70 | --- ``` -------------------------------------------------------------------------------- /docs/dw_campaign/CouponRedemption.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class CouponRedemption 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.campaign.CouponRedemption 9 | 10 | ## Description 11 | 12 | Represents a redeemed coupon. 13 | 14 | ## Properties 15 | 16 | ### customerEmail 17 | 18 | **Type:** String (Read Only) 19 | 20 | Returns email of redeeming customer. 21 | 22 | ### orderNo 23 | 24 | **Type:** String (Read Only) 25 | 26 | Returns number of the order the code was redeemed with. 27 | 28 | ### redemptionDate 29 | 30 | **Type:** Date (Read Only) 31 | 32 | Returns date of redemption. 33 | 34 | ## Constructor Summary 35 | 36 | ## Method Summary 37 | 38 | ### getCustomerEmail 39 | 40 | **Signature:** `getCustomerEmail() : String` 41 | 42 | Returns email of redeeming customer. 43 | 44 | ### getOrderNo 45 | 46 | **Signature:** `getOrderNo() : String` 47 | 48 | Returns number of the order the code was redeemed with. 49 | 50 | ### getRedemptionDate 51 | 52 | **Signature:** `getRedemptionDate() : Date` 53 | 54 | Returns date of redemption. 55 | 56 | ## Method Detail 57 | 58 | ## Method Details 59 | 60 | ### getCustomerEmail 61 | 62 | **Signature:** `getCustomerEmail() : String` 63 | 64 | **Description:** Returns email of redeeming customer. 65 | 66 | **Returns:** 67 | 68 | email of redeeming customer. 69 | 70 | --- 71 | 72 | ### getOrderNo 73 | 74 | **Signature:** `getOrderNo() : String` 75 | 76 | **Description:** Returns number of the order the code was redeemed with. 77 | 78 | **Returns:** 79 | 80 | number of the order the code was redeemed with. 81 | 82 | --- 83 | 84 | ### getRedemptionDate 85 | 86 | **Signature:** `getRedemptionDate() : Date` 87 | 88 | **Description:** Returns date of redemption. 89 | 90 | **Returns:** 91 | 92 | date of redemption. 93 | 94 | --- ``` -------------------------------------------------------------------------------- /docs/dw_object/ObjectAttributeValueDefinition.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.object 2 | 3 | # Class ObjectAttributeValueDefinition 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.object.ObjectAttributeValueDefinition 9 | 10 | ## Description 11 | 12 | Represents the value definition associated with an object attribute. 13 | 14 | ## Properties 15 | 16 | ### displayValue 17 | 18 | **Type:** String (Read Only) 19 | 20 | A display name that can be used to present this value in 21 | the user interface. For example, the value might be '1' but the display 22 | name might be 'Order Exported'. 23 | 24 | ### value 25 | 26 | **Type:** Object (Read Only) 27 | 28 | The actual value for the attribute. 29 | 30 | ## Constructor Summary 31 | 32 | ## Method Summary 33 | 34 | ### getDisplayValue 35 | 36 | **Signature:** `getDisplayValue() : String` 37 | 38 | Returns a display name that can be used to present this value in the user interface. 39 | 40 | ### getValue 41 | 42 | **Signature:** `getValue() : Object` 43 | 44 | Returns the actual value for the attribute. 45 | 46 | ## Method Detail 47 | 48 | ## Method Details 49 | 50 | ### getDisplayValue 51 | 52 | **Signature:** `getDisplayValue() : String` 53 | 54 | **Description:** Returns a display name that can be used to present this value in the user interface. For example, the value might be '1' but the display name might be 'Order Exported'. 55 | 56 | **Returns:** 57 | 58 | a display name that can be used to present this value in the user interface. 59 | 60 | --- 61 | 62 | ### getValue 63 | 64 | **Signature:** `getValue() : Object` 65 | 66 | **Description:** Returns the actual value for the attribute. 67 | 68 | **Returns:** 69 | 70 | the actual value for the attribute. 71 | 72 | --- ``` -------------------------------------------------------------------------------- /docs/dw_catalog/StoreGroup.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.catalog 2 | 3 | # Class StoreGroup 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.object.PersistentObject 9 | - dw.object.ExtensibleObject 10 | - dw.catalog.StoreGroup 11 | 12 | ## Description 13 | 14 | Represents a store group. Store groups can be used to group the stores for different marketing purposes. 15 | 16 | ## Properties 17 | 18 | ### ID 19 | 20 | **Type:** String (Read Only) 21 | 22 | The ID of the store group. 23 | 24 | ### name 25 | 26 | **Type:** String (Read Only) 27 | 28 | The name of the store group. 29 | 30 | ### stores 31 | 32 | **Type:** Collection (Read Only) 33 | 34 | All the stores that are assigned to the store group. 35 | 36 | ## Constructor Summary 37 | 38 | ## Method Summary 39 | 40 | ### getID 41 | 42 | **Signature:** `getID() : String` 43 | 44 | Returns the ID of the store group. 45 | 46 | ### getName 47 | 48 | **Signature:** `getName() : String` 49 | 50 | Returns the name of the store group. 51 | 52 | ### getStores 53 | 54 | **Signature:** `getStores() : Collection` 55 | 56 | Returns all the stores that are assigned to the store group. 57 | 58 | ## Method Detail 59 | 60 | ## Method Details 61 | 62 | ### getID 63 | 64 | **Signature:** `getID() : String` 65 | 66 | **Description:** Returns the ID of the store group. 67 | 68 | **Returns:** 69 | 70 | ID of the store group 71 | 72 | --- 73 | 74 | ### getName 75 | 76 | **Signature:** `getName() : String` 77 | 78 | **Description:** Returns the name of the store group. 79 | 80 | **Returns:** 81 | 82 | name of the store group 83 | 84 | --- 85 | 86 | ### getStores 87 | 88 | **Signature:** `getStores() : Collection` 89 | 90 | **Description:** Returns all the stores that are assigned to the store group. 91 | 92 | **Returns:** 93 | 94 | collection of the stores 95 | 96 | --- ``` -------------------------------------------------------------------------------- /docs/dw_extensions.payments/SalesforceBancontactPaymentDetails.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.extensions.payments 2 | 3 | # Class SalesforceBancontactPaymentDetails 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.extensions.payments.SalesforcePaymentDetails 9 | - dw.extensions.payments.SalesforceBancontactPaymentDetails 10 | 11 | ## Description 12 | 13 | Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_BANCONTACT. See Salesforce Payments documentation for how to gain access and configure it for use on your sites. 14 | 15 | ## Properties 16 | 17 | ### bankName 18 | 19 | **Type:** String (Read Only) 20 | 21 | The bank name, or null if not known. 22 | 23 | ### last4 24 | 25 | **Type:** String (Read Only) 26 | 27 | The last 4 digits of the account number, or null if not known. 28 | 29 | ## Constructor Summary 30 | 31 | ## Method Summary 32 | 33 | ### getBankName 34 | 35 | **Signature:** `getBankName() : String` 36 | 37 | Returns the bank name, or null if not known. 38 | 39 | ### getLast4 40 | 41 | **Signature:** `getLast4() : String` 42 | 43 | Returns the last 4 digits of the account number, or null if not known. 44 | 45 | ## Method Detail 46 | 47 | ## Method Details 48 | 49 | ### getBankName 50 | 51 | **Signature:** `getBankName() : String` 52 | 53 | **Description:** Returns the bank name, or null if not known. 54 | 55 | **Returns:** 56 | 57 | bank name 58 | 59 | **See Also:** 60 | 61 | SalesforcePaymentMethod.getBankName() 62 | 63 | --- 64 | 65 | ### getLast4 66 | 67 | **Signature:** `getLast4() : String` 68 | 69 | **Description:** Returns the last 4 digits of the account number, or null if not known. 70 | 71 | **Returns:** 72 | 73 | last 4 digits of the account number 74 | 75 | **See Also:** 76 | 77 | SalesforcePaymentMethod.getLast4() 78 | 79 | --- ``` -------------------------------------------------------------------------------- /docs/TopLevel/XMLStreamError.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: TopLevel 2 | 3 | # Class XMLStreamError 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - TopLevel.Error 9 | - XMLStreamError 10 | 11 | ## Description 12 | 13 | This error indicates an XML streaming related error in the system. The IOError is always related to a systems internal Java exception. The class provides access to some more details about this internal Java exception. In particular the class informs about the location of the error. 14 | 15 | ## Properties 16 | 17 | ### causeFullName 18 | 19 | **Type:** String 20 | 21 | If the exception is associated with a root cause, the property 22 | contains the full name of the associated Java exception. 23 | 24 | ### causeMessage 25 | 26 | **Type:** String 27 | 28 | If the exception is associated with a root cause, the property 29 | contains the message of the associated Java exception. 30 | 31 | ### causeName 32 | 33 | **Type:** String 34 | 35 | If the exception is associated with a root cause, the property 36 | contains the simplified name of the associated Java exception. 37 | 38 | ### javaFullName 39 | 40 | **Type:** String 41 | 42 | The full name of the underlying Java exception. 43 | 44 | ### javaMessage 45 | 46 | **Type:** String 47 | 48 | The message of the underlying Java exception. 49 | 50 | ### javaName 51 | 52 | **Type:** String 53 | 54 | The simplified name of the underlying Java exception. 55 | 56 | ### xmlColumnNumber 57 | 58 | **Type:** Number 59 | 60 | The column number where the error occured. 61 | 62 | ### xmlLineNumber 63 | 64 | **Type:** Number 65 | 66 | The line where the error occured. 67 | 68 | ## Constructor Summary 69 | 70 | XMLStreamError() 71 | 72 | ## Method Summary 73 | 74 | ## Constructor Detail ``` -------------------------------------------------------------------------------- /docs/dw_object/Extensible.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.object 2 | 3 | # Class Extensible 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.object.Extensible 9 | 10 | ## Description 11 | 12 | Base class alternative to ExtensibleObject for objects customizable through the metadata system. Similar to ExtensibleObject: the describe() method provides access to the related object-type metadata. The getCustom() method is the central point to retrieve and store the objects attribute values themselves. 13 | 14 | ## Properties 15 | 16 | ### custom 17 | 18 | **Type:** CustomAttributes (Read Only) 19 | 20 | The custom attributes for this object. 21 | 22 | ## Constructor Summary 23 | 24 | ## Method Summary 25 | 26 | ### describe 27 | 28 | **Signature:** `describe() : ObjectTypeDefinition` 29 | 30 | Returns the meta data of this object. 31 | 32 | ### getCustom 33 | 34 | **Signature:** `getCustom() : CustomAttributes` 35 | 36 | Returns the custom attributes for this object. 37 | 38 | ## Method Detail 39 | 40 | ## Method Details 41 | 42 | ### describe 43 | 44 | **Signature:** `describe() : ObjectTypeDefinition` 45 | 46 | **Description:** Returns the meta data of this object. If no meta data is available the method returns null. The returned ObjectTypeDefinition can be used to retrieve the metadata for any of the custom attributes. 47 | 48 | **Returns:** 49 | 50 | the meta data of this object. If no meta data is available the method returns null. 51 | 52 | --- 53 | 54 | ### getCustom 55 | 56 | **Signature:** `getCustom() : CustomAttributes` 57 | 58 | **Description:** Returns the custom attributes for this object. 59 | 60 | **Returns:** 61 | 62 | the custom attributes for this object. 63 | 64 | --- ``` -------------------------------------------------------------------------------- /docs/dw_system/CacheMgr.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.system 2 | 3 | # Class CacheMgr 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.system.CacheMgr 9 | 10 | ## Description 11 | 12 | The CacheMgr class is the entry point for using custom caches. The CacheMgr can manage multiple custom caches that share one storage space. Each individual cache has a unique ID and an optional expiration time that specifies the maximum time (in seconds) an entry is stored in the cache. For registering caches inside the cartridge root folder, a 'package.json' file with a 'caches' entry must exist. The registration of caches is independent of any site context. "caches": "./caches.json" The caches entry links to a JSON file, with a path relative to the 'package.json' file. This file lists all registered caches inside the caches property: { "caches": [ { "id": "UnlimitedTestCache" }, { "id": "TestCacheWithExpiration", "expireAfterSeconds": 10 } ] } 13 | 14 | ## Constructor Summary 15 | 16 | ## Method Summary 17 | 18 | ### getCache 19 | 20 | **Signature:** `static getCache(cacheID : String) : Cache` 21 | 22 | Returns the defined cache instance for the given ID. 23 | 24 | ## Method Detail 25 | 26 | ## Method Details 27 | 28 | ### getCache 29 | 30 | **Signature:** `static getCache(cacheID : String) : Cache` 31 | 32 | **Description:** Returns the defined cache instance for the given ID. Throws an exception when the requested cache has not been defined in any caches.json descriptor. 33 | 34 | **Parameters:** 35 | 36 | - `cacheID`: The ID of the cache. 37 | 38 | **Returns:** 39 | 40 | The registered cache. 41 | 42 | --- ``` -------------------------------------------------------------------------------- /docs/dw_util/DateUtils.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.util 2 | 3 | # Class DateUtils 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.util.DateUtils 9 | 10 | ## Description 11 | 12 | A class with several utility methods for Date objects. 13 | 14 | ## Constructor Summary 15 | 16 | ## Method Summary 17 | 18 | ### nowForInstance 19 | 20 | **Signature:** `static nowForInstance() : Date` 21 | 22 | Returns the current time stamp in the time zone of the instance. 23 | 24 | ### nowForSite 25 | 26 | **Signature:** `static nowForSite() : Date` 27 | 28 | Returns the current timestamp in the time zone of the current site. 29 | 30 | ### nowInUTC 31 | 32 | **Signature:** `static nowInUTC() : Date` 33 | 34 | Returns the current time stamp in UTC. 35 | 36 | ## Method Detail 37 | 38 | ## Method Details 39 | 40 | ### nowForInstance 41 | 42 | **Signature:** `static nowForInstance() : Date` 43 | 44 | **Description:** Returns the current time stamp in the time zone of the instance. 45 | 46 | **Deprecated:** 47 | 48 | Use System.getCalendar() instead. 49 | 50 | **Returns:** 51 | 52 | the current time stamp in the time zone of the instance. 53 | 54 | --- 55 | 56 | ### nowForSite 57 | 58 | **Signature:** `static nowForSite() : Date` 59 | 60 | **Description:** Returns the current timestamp in the time zone of the current site. 61 | 62 | **Deprecated:** 63 | 64 | Use Site.getCalendar() instead. 65 | 66 | **Returns:** 67 | 68 | the current timestamp in the time zone of the current site. 69 | 70 | --- 71 | 72 | ### nowInUTC 73 | 74 | **Signature:** `static nowInUTC() : Date` 75 | 76 | **Description:** Returns the current time stamp in UTC. 77 | 78 | **Deprecated:** 79 | 80 | Create a new Calendar object and set the time zone "UTC" instead. 81 | 82 | **Returns:** 83 | 84 | the current time stamp in UTC. 85 | 86 | --- ``` -------------------------------------------------------------------------------- /src/clients/logs/log-types.ts: -------------------------------------------------------------------------------- ```typescript 1 | /** 2 | * TypeScript interfaces and types for log operations 3 | */ 4 | 5 | export type LogLevel = 'error' | 'warn' | 'info' | 'debug'; 6 | 7 | export interface LogFileInfo { 8 | name: string; 9 | size: number; 10 | lastModified: string; 11 | } 12 | 13 | export interface LogFileMetadata { 14 | filename: string; 15 | lastmod: string; 16 | } 17 | 18 | export interface LogSummary { 19 | date: string; 20 | errorCount: number; 21 | warningCount: number; 22 | infoCount: number; 23 | debugCount: number; 24 | keyIssues: string[]; 25 | files: string[]; 26 | } 27 | 28 | export interface LogEntry { 29 | entry: string; 30 | filename: string; 31 | order: number; 32 | timestamp?: Date; // Extracted timestamp for chronological sorting 33 | } 34 | 35 | export interface ProcessedLogEntry { 36 | content: string; 37 | timestamp?: string; 38 | level?: string; 39 | source?: string; 40 | } 41 | 42 | export interface LogSearchOptions { 43 | pattern: string; 44 | logLevel?: LogLevel; 45 | limit: number; 46 | date?: string; 47 | } 48 | 49 | export interface LogFileFilter { 50 | level?: LogLevel; 51 | date?: string; 52 | includeCustom?: boolean; 53 | includeJobLogs?: boolean; 54 | } 55 | 56 | export interface JobLogInfo { 57 | jobName: string; 58 | jobId: string; 59 | logFile: string; 60 | lastModified: string; 61 | size?: number; 62 | } 63 | 64 | export interface JobLogFilter { 65 | jobName?: string; 66 | limit?: number; 67 | sortByRecent?: boolean; 68 | } 69 | 70 | export interface WebDAVClientConfig { 71 | hostname: string; 72 | username?: string; 73 | password?: string; 74 | clientId?: string; 75 | clientSecret?: string; 76 | } 77 | 78 | export interface FileReadOptions { 79 | maxBytes?: number; 80 | } 81 | ``` -------------------------------------------------------------------------------- /.github/workflows/deploy-pages.yml: -------------------------------------------------------------------------------- ```yaml 1 | name: Deploy GitHub Pages 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | paths: 7 | - 'docs-site/**' 8 | - '.github/workflows/deploy-pages.yml' 9 | pull_request: 10 | branches: [ main ] 11 | paths: 12 | - 'docs-site/**' 13 | workflow_dispatch: 14 | 15 | permissions: 16 | contents: read 17 | pages: write 18 | id-token: write 19 | 20 | concurrency: 21 | group: "pages" 22 | cancel-in-progress: false 23 | 24 | jobs: 25 | build: 26 | runs-on: ubuntu-latest 27 | steps: 28 | - name: Checkout 29 | uses: actions/checkout@v5 30 | 31 | - name: Setup Node.js 32 | uses: actions/setup-node@v5 33 | with: 34 | node-version: '18' 35 | cache: 'npm' 36 | cache-dependency-path: './docs-site/package-lock.json' 37 | 38 | - name: Install dependencies 39 | working-directory: ./docs-site 40 | run: npm ci 41 | 42 | - name: Clean build directory 43 | working-directory: ./docs-site 44 | run: rm -rf dist 45 | 46 | - name: Build site 47 | working-directory: ./docs-site 48 | run: npm run build 49 | env: 50 | NODE_ENV: production 51 | 52 | - name: Setup Pages 53 | uses: actions/configure-pages@v5 54 | 55 | - name: Upload artifact 56 | uses: actions/upload-pages-artifact@v4 57 | with: 58 | path: ./docs-site/dist 59 | 60 | deploy: 61 | environment: 62 | name: github-pages 63 | url: ${{ steps.deployment.outputs.page_url }} 64 | runs-on: ubuntu-latest 65 | needs: build 66 | steps: 67 | - name: Deploy to GitHub Pages 68 | id: deployment 69 | uses: actions/deploy-pages@v4 70 | ``` -------------------------------------------------------------------------------- /docs-site/components/LightCodeContainer.tsx: -------------------------------------------------------------------------------- ```typescript 1 | import React from 'react'; 2 | 3 | interface LightCodeContainerProps { 4 | children: React.ReactNode; 5 | className?: string; 6 | /** 7 | * Visual accent variant. Currently only 'blue' is used but additional 8 | * variants are easy to extend without editing all call sites again. 9 | */ 10 | variant?: 'blue' | 'green' | 'purple' | 'indigo' | 'amber' | 'gray'; 11 | /** 12 | * If true, removes the default shadow for flatter contexts. 13 | */ 14 | flat?: boolean; 15 | } 16 | 17 | const VARIANT_STYLES: Record<string, { bg: string; border: string }> = { 18 | blue: { bg: 'bg-blue-50', border: 'border-blue-100' }, 19 | green: { bg: 'bg-green-50', border: 'border-green-100' }, 20 | purple: { bg: 'bg-purple-50', border: 'border-purple-100' }, 21 | indigo: { bg: 'bg-indigo-50', border: 'border-indigo-100' }, 22 | amber: { bg: 'bg-amber-50', border: 'border-amber-100' }, 23 | gray: { bg: 'bg-gray-50', border: 'border-gray-200' } 24 | }; 25 | 26 | /** 27 | * Standardized light accent container for wrapping code blocks (or related content) 28 | * ensuring consistent styling across pages instead of ad-hoc duplicated class names. 29 | */ 30 | const LightCodeContainer: React.FC<LightCodeContainerProps> = ({ 31 | children, 32 | className = '', 33 | variant = 'blue', 34 | flat = false 35 | }) => { 36 | const { bg, border } = VARIANT_STYLES[variant] || VARIANT_STYLES.blue; 37 | return ( 38 | <div className={`${bg} ${border} rounded-xl p-6 ${flat ? '' : 'shadow-md'} ${className}`.trim()}> 39 | {children} 40 | </div> 41 | ); 42 | }; 43 | 44 | export default LightCodeContainer; 45 | ``` -------------------------------------------------------------------------------- /docs/dw_io/PrintWriter.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.io 2 | 3 | # Class PrintWriter 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.io.Writer 9 | - dw.io.PrintWriter 10 | 11 | ## Description 12 | 13 | Template output stream writer. Printwriter is available in the template scripting context and is used to write data into the template output stream. You cannot instantiate this class directly. Instead, the system assigns the object to variable named 'out' in the script context to be used by the template scripts. Note: when this class is used with sensitive data, be careful in persisting sensitive information to disk. 14 | 15 | ## Constructor Summary 16 | 17 | ## Method Summary 18 | 19 | ### print 20 | 21 | **Signature:** `print(str : String) : void` 22 | 23 | Prints the given string into the output stream. 24 | 25 | ### println 26 | 27 | **Signature:** `println(str : String) : void` 28 | 29 | Print the given string followed by a line break into the output stream. 30 | 31 | ### println 32 | 33 | **Signature:** `println() : void` 34 | 35 | Prints a line break into the output stream. 36 | 37 | ## Method Detail 38 | 39 | ## Method Details 40 | 41 | ### print 42 | 43 | **Signature:** `print(str : String) : void` 44 | 45 | **Description:** Prints the given string into the output stream. 46 | 47 | **Parameters:** 48 | 49 | - `str`: the String object 50 | 51 | --- 52 | 53 | ### println 54 | 55 | **Signature:** `println(str : String) : void` 56 | 57 | **Description:** Print the given string followed by a line break into the output stream. 58 | 59 | **Parameters:** 60 | 61 | - `str`: the String object 62 | 63 | --- 64 | 65 | ### println 66 | 67 | **Signature:** `println() : void` 68 | 69 | **Description:** Prints a line break into the output stream. 70 | 71 | --- ``` -------------------------------------------------------------------------------- /docs/dw_suggest/ProductSuggestions.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.suggest 2 | 3 | # Class ProductSuggestions 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.suggest.Suggestions 9 | - dw.suggest.ProductSuggestions 10 | 11 | ## Description 12 | 13 | The product suggestion container provides access to products found using the suggested terms. The method getSuggestedProducts() can be used to get the list of found products. Furthermore the list of suggested terms, after processing the original user input search query, is accessible through SearchPhraseSuggestions.getSuggestedTerms() method. 14 | 15 | ## Properties 16 | 17 | ### suggestedProducts 18 | 19 | **Type:** Iterator (Read Only) 20 | 21 | This method returns a list of products which were found 22 | using the suggested terms as search criteria. 23 | The product lookup is being executed in the current catalog and locale. 24 | 25 | ## Constructor Summary 26 | 27 | ## Method Summary 28 | 29 | ### getSuggestedProducts 30 | 31 | **Signature:** `getSuggestedProducts() : Iterator` 32 | 33 | This method returns a list of products which were found using the suggested terms as search criteria. 34 | 35 | ## Method Detail 36 | 37 | ## Method Details 38 | 39 | ### getSuggestedProducts 40 | 41 | **Signature:** `getSuggestedProducts() : Iterator` 42 | 43 | **Description:** This method returns a list of products which were found using the suggested terms as search criteria. The product lookup is being executed in the current catalog and locale. 44 | 45 | **Returns:** 46 | 47 | a iterator containing a SuggestedProduct instance for each found product, the iterator might be empty 48 | 49 | **See Also:** 50 | 51 | Suggestions.hasSuggestions() 52 | 53 | --- ``` -------------------------------------------------------------------------------- /src/utils/path-resolver.ts: -------------------------------------------------------------------------------- ```typescript 1 | /** 2 | * Path Resolver Helper 3 | * 4 | * Provides utilities for resolving file and directory paths based on the current working directory. 5 | * This abstraction allows for easier path management and testing. 6 | */ 7 | 8 | import path from 'path'; 9 | import { fileURLToPath } from 'url'; 10 | 11 | export class PathResolver { 12 | /** 13 | * Get the current working directory (project root) 14 | */ 15 | static getCurrentWorkingDir(): string { 16 | // Get the directory of the current module file 17 | const __filename = fileURLToPath(import.meta.url); 18 | const __dirname = path.dirname(__filename); 19 | 20 | // Return the parent directory (project root) 21 | return path.resolve(__dirname, '..'); 22 | } 23 | 24 | /** 25 | * Get a path relative to the current working directory 26 | */ 27 | static getRelativePath(...pathSegments: string[]): string { 28 | const currentDir = this.getCurrentWorkingDir(); 29 | 30 | return path.join(currentDir, ...pathSegments); 31 | } 32 | 33 | /** 34 | * Get the docs directory path relative to the current working directory 35 | */ 36 | static getDocsPath(): string { 37 | return this.getRelativePath('docs'); 38 | } 39 | 40 | /** 41 | * Get the best practices docs directory path relative to the current working directory 42 | */ 43 | static getBestPracticesPath(): string { 44 | return this.getRelativePath('docs', 'best-practices'); 45 | } 46 | 47 | /** 48 | * Get the SFRA docs directory path relative to the current working directory 49 | */ 50 | static getSFRADocsPath(): string { 51 | return this.getRelativePath('docs', 'sfra'); 52 | } 53 | } 54 | ``` -------------------------------------------------------------------------------- /docs/dw_web/Form.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.web 2 | 3 | # Class Form 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.web.FormElement 9 | - dw.web.FormGroup 10 | - dw.web.Form 11 | 12 | ## Description 13 | 14 | The class is the top level element in the form instance hierachy. 15 | 16 | ## Properties 17 | 18 | ### secureKeyHtmlName 19 | 20 | **Type:** String (Read Only) 21 | 22 | The secure key html name to be used for the hidden input field 23 | that will contain the secure key value. 24 | 25 | ### secureKeyValue 26 | 27 | **Type:** String (Read Only) 28 | 29 | The secure key value that is generated for the form to use 30 | in a hidden input field for authentication. 31 | 32 | ## Constructor Summary 33 | 34 | ## Method Summary 35 | 36 | ### getSecureKeyHtmlName 37 | 38 | **Signature:** `getSecureKeyHtmlName() : String` 39 | 40 | Returns the secure key html name to be used for the hidden input field that will contain the secure key value. 41 | 42 | ### getSecureKeyValue 43 | 44 | **Signature:** `getSecureKeyValue() : String` 45 | 46 | Returns the secure key value that is generated for the form to use in a hidden input field for authentication. 47 | 48 | ## Method Detail 49 | 50 | ## Method Details 51 | 52 | ### getSecureKeyHtmlName 53 | 54 | **Signature:** `getSecureKeyHtmlName() : String` 55 | 56 | **Description:** Returns the secure key html name to be used for the hidden input field that will contain the secure key value. 57 | 58 | **Returns:** 59 | 60 | the secure key html name 61 | 62 | --- 63 | 64 | ### getSecureKeyValue 65 | 66 | **Signature:** `getSecureKeyValue() : String` 67 | 68 | **Description:** Returns the secure key value that is generated for the form to use in a hidden input field for authentication. 69 | 70 | **Returns:** 71 | 72 | the secure key value 73 | 74 | --- ``` -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- ```yaml 1 | version: 2 2 | updates: 3 | # Enable version updates for npm 4 | - package-ecosystem: "npm" 5 | directory: "/" 6 | schedule: 7 | interval: "weekly" 8 | day: "monday" 9 | time: "06:00" 10 | open-pull-requests-limit: 10 11 | reviewers: 12 | - "taurgis" 13 | assignees: 14 | - "taurgis" 15 | commit-message: 16 | prefix: "deps" 17 | include: "scope" 18 | labels: 19 | - "dependencies" 20 | - "automated" 21 | # Group updates for better PR management 22 | groups: 23 | eslint: 24 | patterns: 25 | - "eslint*" 26 | - "@eslint/*" 27 | - "typescript-eslint" 28 | jest: 29 | patterns: 30 | - "jest*" 31 | - "@types/jest" 32 | - "ts-jest" 33 | types: 34 | patterns: 35 | - "@types/*" 36 | mcp: 37 | patterns: 38 | - "@modelcontextprotocol/*" 39 | # Allow both direct and indirect updates 40 | allow: 41 | - dependency-type: "direct" 42 | - dependency-type: "indirect" 43 | # Ignore specific packages if needed (uncomment and modify as necessary) 44 | # ignore: 45 | # - dependency-name: "package-name" 46 | # versions: ["1.x", "2.x"] 47 | 48 | # Enable version updates for GitHub Actions 49 | - package-ecosystem: "github-actions" 50 | directory: "/" 51 | schedule: 52 | interval: "weekly" 53 | day: "monday" 54 | time: "06:00" 55 | open-pull-requests-limit: 5 56 | reviewers: 57 | - "taurgis" 58 | assignees: 59 | - "taurgis" 60 | commit-message: 61 | prefix: "ci" 62 | include: "scope" 63 | labels: 64 | - "github-actions" 65 | - "automated" 66 | ``` -------------------------------------------------------------------------------- /docs/dw_campaign/SourceCodeGroup.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: dw.campaign 2 | 3 | # Class SourceCodeGroup 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - dw.object.PersistentObject 9 | - dw.object.ExtensibleObject 10 | - dw.campaign.SourceCodeGroup 11 | 12 | ## Description 13 | 14 | A source code group defines a collection of source codes. Source code groups are generally pattern based and any source code satisfying the pattern belongs to the group. In this way, merchants may define a large set of source codes which qualify a customer for site experiences (different prices, for example), which customers without that source code do not receive. The class SourceCodeInfo represents an individual source code. 15 | 16 | ## Properties 17 | 18 | ### ID 19 | 20 | **Type:** String (Read Only) 21 | 22 | The ID of the SourceCodeGroup. 23 | 24 | ### priceBooks 25 | 26 | **Type:** Collection (Read Only) 27 | 28 | A Collection of PriceBooks the SourceCodeGroup is assigned to. 29 | 30 | ## Constructor Summary 31 | 32 | ## Method Summary 33 | 34 | ### getID 35 | 36 | **Signature:** `getID() : String` 37 | 38 | The ID of the SourceCodeGroup. 39 | 40 | ### getPriceBooks 41 | 42 | **Signature:** `getPriceBooks() : Collection` 43 | 44 | Returns a Collection of PriceBooks the SourceCodeGroup is assigned to. 45 | 46 | ## Method Detail 47 | 48 | ## Method Details 49 | 50 | ### getID 51 | 52 | **Signature:** `getID() : String` 53 | 54 | **Description:** The ID of the SourceCodeGroup. 55 | 56 | **Returns:** 57 | 58 | the ID. 59 | 60 | --- 61 | 62 | ### getPriceBooks 63 | 64 | **Signature:** `getPriceBooks() : Collection` 65 | 66 | **Description:** Returns a Collection of PriceBooks the SourceCodeGroup is assigned to. 67 | 68 | **Returns:** 69 | 70 | Collection of PriceBooks the SourceCodeGroup is assigned to. 71 | 72 | --- ``` -------------------------------------------------------------------------------- /docs/TopLevel/Symbol.md: -------------------------------------------------------------------------------- ```markdown 1 | ## Package: TopLevel 2 | 3 | # Class Symbol 4 | 5 | ## Inheritance Hierarchy 6 | 7 | - Object 8 | - Symbol 9 | 10 | ## Description 11 | 12 | Symbol is a primitive data type that can serve as object properties. Symbol instance can be created explicitly or via a global registry, see for(String). 13 | 14 | ## Constants 15 | 16 | ## Properties 17 | 18 | ## Constructor Summary 19 | 20 | Symbol() Creates a new symbol. 21 | 22 | Symbol(description : String) Creates a new symbol. 23 | 24 | ## Method Summary 25 | 26 | ### for 27 | 28 | **Signature:** `static for(key : String) : Symbol` 29 | 30 | Obtains a symbol from the global registry. 31 | 32 | ### keyFor 33 | 34 | **Signature:** `static keyFor(symbol : Symbol) : String` 35 | 36 | Returns the key within the global symbol registry under which the given symbol is stored. 37 | 38 | ## Constructor Detail 39 | 40 | ## Method Detail 41 | 42 | ## Method Details 43 | 44 | ### for 45 | 46 | **Signature:** `static for(key : String) : Symbol` 47 | 48 | **Description:** Obtains a symbol from the global registry. If no symbol exists for the key within the registry a new symbol is created and stored in the global registry. 49 | 50 | **API Versioned:** 51 | 52 | From version 21.2. 53 | 54 | **Parameters:** 55 | 56 | - `key`: The key for a symbol within the global registry. 57 | 58 | **Returns:** 59 | 60 | The found or newly created symbol. 61 | 62 | --- 63 | 64 | ### keyFor 65 | 66 | **Signature:** `static keyFor(symbol : Symbol) : String` 67 | 68 | **Description:** Returns the key within the global symbol registry under which the given symbol is stored. 69 | 70 | **Parameters:** 71 | 72 | - `symbol`: The symbol to look for. 73 | 74 | **Returns:** 75 | 76 | The key for the given symbol if the symbol is known to the global registry, else return undefined. 77 | 78 | --- ```