sfcc-dev-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +338 -0
- package/dist/best-practices-client.d.ts +55 -0
- package/dist/best-practices-client.d.ts.map +1 -0
- package/dist/best-practices-client.js +201 -0
- package/dist/best-practices-client.js.map +1 -0
- package/dist/cache.d.ts +105 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +225 -0
- package/dist/cache.js.map +1 -0
- package/dist/config.d.ts +26 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +67 -0
- package/dist/config.js.map +1 -0
- package/dist/docs-client.d.ts +124 -0
- package/dist/docs-client.d.ts.map +1 -0
- package/dist/docs-client.js +442 -0
- package/dist/docs-client.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/log-client.d.ts +79 -0
- package/dist/log-client.d.ts.map +1 -0
- package/dist/log-client.js +226 -0
- package/dist/log-client.js.map +1 -0
- package/dist/main.d.ts +15 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +110 -0
- package/dist/main.js.map +1 -0
- package/dist/server.d.ts +35 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +539 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +79 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +46 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +96 -0
- package/dist/utils.js.map +1 -0
- package/docs/TopLevel/APIException.md +68 -0
- package/docs/TopLevel/Array.md +897 -0
- package/docs/TopLevel/ArrayBuffer.md +79 -0
- package/docs/TopLevel/BigInt.md +132 -0
- package/docs/TopLevel/Boolean.md +62 -0
- package/docs/TopLevel/ConversionError.md +23 -0
- package/docs/TopLevel/DataView.md +352 -0
- package/docs/TopLevel/Date.md +924 -0
- package/docs/TopLevel/ES6Iterator.md +33 -0
- package/docs/TopLevel/Error.md +88 -0
- package/docs/TopLevel/EvalError.md +23 -0
- package/docs/TopLevel/Fault.md +87 -0
- package/docs/TopLevel/Float32Array.md +124 -0
- package/docs/TopLevel/Float64Array.md +124 -0
- package/docs/TopLevel/Function.md +105 -0
- package/docs/TopLevel/Generator.md +78 -0
- package/docs/TopLevel/IOError.md +62 -0
- package/docs/TopLevel/Int16Array.md +124 -0
- package/docs/TopLevel/Int32Array.md +124 -0
- package/docs/TopLevel/Int8Array.md +124 -0
- package/docs/TopLevel/InternalError.md +23 -0
- package/docs/TopLevel/Iterable.md +41 -0
- package/docs/TopLevel/Iterator.md +48 -0
- package/docs/TopLevel/JSON.md +162 -0
- package/docs/TopLevel/Map.md +216 -0
- package/docs/TopLevel/Math.md +865 -0
- package/docs/TopLevel/Module.md +45 -0
- package/docs/TopLevel/Namespace.md +96 -0
- package/docs/TopLevel/Number.md +375 -0
- package/docs/TopLevel/Object.md +641 -0
- package/docs/TopLevel/QName.md +96 -0
- package/docs/TopLevel/RangeError.md +23 -0
- package/docs/TopLevel/ReferenceError.md +23 -0
- package/docs/TopLevel/RegExp.md +109 -0
- package/docs/TopLevel/Set.md +165 -0
- package/docs/TopLevel/StopIteration.md +20 -0
- package/docs/TopLevel/String.md +1299 -0
- package/docs/TopLevel/Symbol.md +78 -0
- package/docs/TopLevel/SyntaxError.md +23 -0
- package/docs/TopLevel/SystemError.md +62 -0
- package/docs/TopLevel/TypeError.md +23 -0
- package/docs/TopLevel/URIError.md +23 -0
- package/docs/TopLevel/Uint16Array.md +124 -0
- package/docs/TopLevel/Uint32Array.md +124 -0
- package/docs/TopLevel/Uint8Array.md +124 -0
- package/docs/TopLevel/Uint8ClampedArray.md +124 -0
- package/docs/TopLevel/WeakMap.md +137 -0
- package/docs/TopLevel/WeakSet.md +92 -0
- package/docs/TopLevel/XML.md +937 -0
- package/docs/TopLevel/XMLList.md +484 -0
- package/docs/TopLevel/XMLStreamError.md +74 -0
- package/docs/TopLevel/arguments.md +34 -0
- package/docs/TopLevel/global.md +462 -0
- package/docs/best-practices/ocapi_hooks.md +295 -0
- package/docs/best-practices/scapi_custom_endpoint.md +176 -0
- package/docs/best-practices/scapi_hooks.md +295 -0
- package/docs/best-practices/sfra_controllers.md +190 -0
- package/docs/dw_campaign/ABTest.md +47 -0
- package/docs/dw_campaign/ABTestMgr.md +70 -0
- package/docs/dw_campaign/ABTestSegment.md +96 -0
- package/docs/dw_campaign/AmountDiscount.md +51 -0
- package/docs/dw_campaign/ApproachingDiscount.md +124 -0
- package/docs/dw_campaign/BonusChoiceDiscount.md +146 -0
- package/docs/dw_campaign/BonusDiscount.md +48 -0
- package/docs/dw_campaign/Campaign.md +365 -0
- package/docs/dw_campaign/CampaignMgr.md +395 -0
- package/docs/dw_campaign/CampaignStatusCodes.md +24 -0
- package/docs/dw_campaign/Coupon.md +292 -0
- package/docs/dw_campaign/CouponMgr.md +138 -0
- package/docs/dw_campaign/CouponRedemption.md +94 -0
- package/docs/dw_campaign/CouponStatusCodes.md +20 -0
- package/docs/dw_campaign/Discount.md +160 -0
- package/docs/dw_campaign/DiscountPlan.md +282 -0
- package/docs/dw_campaign/FixedPriceDiscount.md +52 -0
- package/docs/dw_campaign/FixedPriceShippingDiscount.md +52 -0
- package/docs/dw_campaign/FreeDiscount.md +17 -0
- package/docs/dw_campaign/FreeShippingDiscount.md +17 -0
- package/docs/dw_campaign/PercentageDiscount.md +52 -0
- package/docs/dw_campaign/PercentageOptionDiscount.md +48 -0
- package/docs/dw_campaign/PriceBookPriceDiscount.md +47 -0
- package/docs/dw_campaign/Promotion.md +826 -0
- package/docs/dw_campaign/PromotionMgr.md +386 -0
- package/docs/dw_campaign/PromotionPlan.md +318 -0
- package/docs/dw_campaign/SlotContent.md +144 -0
- package/docs/dw_campaign/SourceCodeGroup.md +72 -0
- package/docs/dw_campaign/SourceCodeInfo.md +126 -0
- package/docs/dw_campaign/SourceCodeStatusCodes.md +24 -0
- package/docs/dw_campaign/TotalFixedPriceDiscount.md +47 -0
- package/docs/dw_catalog/Catalog.md +122 -0
- package/docs/dw_catalog/CatalogMgr.md +182 -0
- package/docs/dw_catalog/Category.md +1296 -0
- package/docs/dw_catalog/CategoryAssignment.md +192 -0
- package/docs/dw_catalog/CategoryLink.md +96 -0
- package/docs/dw_catalog/PriceBook.md +242 -0
- package/docs/dw_catalog/PriceBookMgr.md +205 -0
- package/docs/dw_catalog/Product.md +2593 -0
- package/docs/dw_catalog/ProductActiveData.md +1275 -0
- package/docs/dw_catalog/ProductAttributeModel.md +277 -0
- package/docs/dw_catalog/ProductAvailabilityLevels.md +142 -0
- package/docs/dw_catalog/ProductAvailabilityModel.md +356 -0
- package/docs/dw_catalog/ProductInventoryList.md +140 -0
- package/docs/dw_catalog/ProductInventoryMgr.md +99 -0
- package/docs/dw_catalog/ProductInventoryRecord.md +563 -0
- package/docs/dw_catalog/ProductLink.md +96 -0
- package/docs/dw_catalog/ProductMgr.md +138 -0
- package/docs/dw_catalog/ProductOption.md +214 -0
- package/docs/dw_catalog/ProductOptionModel.md +246 -0
- package/docs/dw_catalog/ProductOptionValue.md +123 -0
- package/docs/dw_catalog/ProductPriceInfo.md +172 -0
- package/docs/dw_catalog/ProductPriceModel.md +745 -0
- package/docs/dw_catalog/ProductPriceTable.md +134 -0
- package/docs/dw_catalog/ProductSearchHit.md +545 -0
- package/docs/dw_catalog/ProductSearchModel.md +1912 -0
- package/docs/dw_catalog/ProductSearchRefinementDefinition.md +97 -0
- package/docs/dw_catalog/ProductSearchRefinementValue.md +73 -0
- package/docs/dw_catalog/ProductSearchRefinements.md +216 -0
- package/docs/dw_catalog/ProductVariationAttribute.md +100 -0
- package/docs/dw_catalog/ProductVariationAttributeValue.md +238 -0
- package/docs/dw_catalog/ProductVariationModel.md +849 -0
- package/docs/dw_catalog/Recommendation.md +296 -0
- package/docs/dw_catalog/SearchModel.md +877 -0
- package/docs/dw_catalog/SearchRefinementDefinition.md +146 -0
- package/docs/dw_catalog/SearchRefinementValue.md +185 -0
- package/docs/dw_catalog/SearchRefinements.md +156 -0
- package/docs/dw_catalog/SortingOption.md +120 -0
- package/docs/dw_catalog/SortingRule.md +47 -0
- package/docs/dw_catalog/Store.md +562 -0
- package/docs/dw_catalog/StoreGroup.md +96 -0
- package/docs/dw_catalog/StoreInventoryFilter.md +74 -0
- package/docs/dw_catalog/StoreInventoryFilterValue.md +74 -0
- package/docs/dw_catalog/StoreMgr.md +236 -0
- package/docs/dw_catalog/Variant.md +859 -0
- package/docs/dw_catalog/VariationGroup.md +792 -0
- package/docs/dw_content/Content.md +534 -0
- package/docs/dw_content/ContentMgr.md +160 -0
- package/docs/dw_content/ContentSearchModel.md +670 -0
- package/docs/dw_content/ContentSearchRefinementDefinition.md +49 -0
- package/docs/dw_content/ContentSearchRefinementValue.md +17 -0
- package/docs/dw_content/ContentSearchRefinements.md +208 -0
- package/docs/dw_content/Folder.md +467 -0
- package/docs/dw_content/Library.md +121 -0
- package/docs/dw_content/MarkupText.md +88 -0
- package/docs/dw_content/MediaFile.md +317 -0
- package/docs/dw_crypto/CertificateRef.md +42 -0
- package/docs/dw_crypto/Cipher.md +524 -0
- package/docs/dw_crypto/Encoding.md +220 -0
- package/docs/dw_crypto/JWE.md +182 -0
- package/docs/dw_crypto/JWS.md +264 -0
- package/docs/dw_crypto/JWSHeader.md +148 -0
- package/docs/dw_crypto/KeyRef.md +44 -0
- package/docs/dw_crypto/Mac.md +109 -0
- package/docs/dw_crypto/MessageDigest.md +139 -0
- package/docs/dw_crypto/SecureRandom.md +148 -0
- package/docs/dw_crypto/Signature.md +246 -0
- package/docs/dw_crypto/WeakCipher.md +532 -0
- package/docs/dw_crypto/WeakMac.md +109 -0
- package/docs/dw_crypto/WeakMessageDigest.md +139 -0
- package/docs/dw_crypto/WeakSignature.md +242 -0
- package/docs/dw_customer/AddressBook.md +163 -0
- package/docs/dw_customer/AgentUserMgr.md +83 -0
- package/docs/dw_customer/AgentUserStatusCodes.md +24 -0
- package/docs/dw_customer/AuthenticationStatus.md +96 -0
- package/docs/dw_customer/Credentials.md +494 -0
- package/docs/dw_customer/Customer.md +571 -0
- package/docs/dw_customer/CustomerActiveData.md +552 -0
- package/docs/dw_customer/CustomerAddress.md +852 -0
- package/docs/dw_customer/CustomerCDPData.md +70 -0
- package/docs/dw_customer/CustomerContextMgr.md +64 -0
- package/docs/dw_customer/CustomerGroup.md +134 -0
- package/docs/dw_customer/CustomerList.md +71 -0
- package/docs/dw_customer/CustomerMgr.md +735 -0
- package/docs/dw_customer/CustomerPasswordConstraints.md +142 -0
- package/docs/dw_customer/CustomerPaymentInstrument.md +125 -0
- package/docs/dw_customer/CustomerStatusCodes.md +24 -0
- package/docs/dw_customer/EncryptedObject.md +18 -0
- package/docs/dw_customer/ExternalProfile.md +160 -0
- package/docs/dw_customer/OrderHistory.md +111 -0
- package/docs/dw_customer/ProductList.md +952 -0
- package/docs/dw_customer/ProductListItem.md +492 -0
- package/docs/dw_customer/ProductListItemPurchase.md +145 -0
- package/docs/dw_customer/ProductListMgr.md +234 -0
- package/docs/dw_customer/ProductListRegistrant.md +193 -0
- package/docs/dw_customer/Profile.md +1128 -0
- package/docs/dw_customer/Wallet.md +118 -0
- package/docs/dw_extensions.applepay/ApplePayHookResult.md +161 -0
- package/docs/dw_extensions.applepay/ApplePayHooks.md +255 -0
- package/docs/dw_extensions.facebook/FacebookFeedHooks.md +47 -0
- package/docs/dw_extensions.facebook/FacebookProduct.md +1483 -0
- package/docs/dw_extensions.paymentrequest/PaymentRequestHookResult.md +159 -0
- package/docs/dw_extensions.paymentrequest/PaymentRequestHooks.md +160 -0
- package/docs/dw_extensions.payments/SalesforceBancontactPaymentDetails.md +79 -0
- package/docs/dw_extensions.payments/SalesforceCardPaymentDetails.md +103 -0
- package/docs/dw_extensions.payments/SalesforceEpsPaymentDetails.md +51 -0
- package/docs/dw_extensions.payments/SalesforceIdealPaymentDetails.md +51 -0
- package/docs/dw_extensions.payments/SalesforceKlarnaPaymentDetails.md +51 -0
- package/docs/dw_extensions.payments/SalesforcePayPalOrder.md +234 -0
- package/docs/dw_extensions.payments/SalesforcePayPalOrderAddress.md +191 -0
- package/docs/dw_extensions.payments/SalesforcePayPalOrderPayer.md +118 -0
- package/docs/dw_extensions.payments/SalesforcePayPalPaymentDetails.md +79 -0
- package/docs/dw_extensions.payments/SalesforcePaymentDetails.md +57 -0
- package/docs/dw_extensions.payments/SalesforcePaymentIntent.md +269 -0
- package/docs/dw_extensions.payments/SalesforcePaymentMethod.md +304 -0
- package/docs/dw_extensions.payments/SalesforcePaymentRequest.md +622 -0
- package/docs/dw_extensions.payments/SalesforcePaymentsHooks.md +45 -0
- package/docs/dw_extensions.payments/SalesforcePaymentsMgr.md +592 -0
- package/docs/dw_extensions.payments/SalesforcePaymentsSiteConfiguration.md +95 -0
- package/docs/dw_extensions.payments/SalesforceSepaDebitPaymentDetails.md +51 -0
- package/docs/dw_extensions.payments/SalesforceVenmoPaymentDetails.md +79 -0
- package/docs/dw_extensions.pinterest/PinterestAvailability.md +86 -0
- package/docs/dw_extensions.pinterest/PinterestFeedHooks.md +69 -0
- package/docs/dw_extensions.pinterest/PinterestOrder.md +172 -0
- package/docs/dw_extensions.pinterest/PinterestOrderHooks.md +45 -0
- package/docs/dw_extensions.pinterest/PinterestProduct.md +814 -0
- package/docs/dw_io/CSVStreamReader.md +80 -0
- package/docs/dw_io/CSVStreamWriter.md +60 -0
- package/docs/dw_io/File.md +554 -0
- package/docs/dw_io/FileReader.md +41 -0
- package/docs/dw_io/FileWriter.md +103 -0
- package/docs/dw_io/InputStream.md +34 -0
- package/docs/dw_io/OutputStream.md +34 -0
- package/docs/dw_io/PrintWriter.md +71 -0
- package/docs/dw_io/RandomAccessFileReader.md +167 -0
- package/docs/dw_io/Reader.md +274 -0
- package/docs/dw_io/StringWriter.md +81 -0
- package/docs/dw_io/Writer.md +92 -0
- package/docs/dw_io/XMLIndentingStreamWriter.md +112 -0
- package/docs/dw_io/XMLStreamConstants.md +24 -0
- package/docs/dw_io/XMLStreamReader.md +1043 -0
- package/docs/dw_io/XMLStreamWriter.md +572 -0
- package/docs/dw_net/FTPClient.md +675 -0
- package/docs/dw_net/FTPFileInfo.md +122 -0
- package/docs/dw_net/HTTPClient.md +769 -0
- package/docs/dw_net/HTTPRequestPart.md +206 -0
- package/docs/dw_net/Mail.md +431 -0
- package/docs/dw_net/SFTPClient.md +579 -0
- package/docs/dw_net/SFTPFileInfo.md +122 -0
- package/docs/dw_net/WebDAVClient.md +667 -0
- package/docs/dw_net/WebDAVFileInfo.md +184 -0
- package/docs/dw_object/ActiveData.md +75 -0
- package/docs/dw_object/CustomAttributes.md +16 -0
- package/docs/dw_object/CustomObject.md +73 -0
- package/docs/dw_object/CustomObjectMgr.md +291 -0
- package/docs/dw_object/Extensible.md +64 -0
- package/docs/dw_object/ExtensibleObject.md +68 -0
- package/docs/dw_object/Note.md +121 -0
- package/docs/dw_object/ObjectAttributeDefinition.md +373 -0
- package/docs/dw_object/ObjectAttributeGroup.md +170 -0
- package/docs/dw_object/ObjectAttributeValueDefinition.md +72 -0
- package/docs/dw_object/ObjectTypeDefinition.md +216 -0
- package/docs/dw_object/PersistentObject.md +94 -0
- package/docs/dw_object/SimpleExtensible.md +46 -0
- package/docs/dw_object/SystemObjectMgr.md +153 -0
- package/docs/dw_order/AbstractItem.md +244 -0
- package/docs/dw_order/AbstractItemCtnr.md +240 -0
- package/docs/dw_order/Appeasement.md +325 -0
- package/docs/dw_order/AppeasementItem.md +90 -0
- package/docs/dw_order/Basket.md +362 -0
- package/docs/dw_order/BasketMgr.md +402 -0
- package/docs/dw_order/BonusDiscountLineItem.md +248 -0
- package/docs/dw_order/CouponLineItem.md +272 -0
- package/docs/dw_order/CreateAgentBasketLimitExceededException.md +18 -0
- package/docs/dw_order/CreateBasketFromOrderException.md +26 -0
- package/docs/dw_order/CreateCouponLineItemException.md +26 -0
- package/docs/dw_order/CreateOrderException.md +18 -0
- package/docs/dw_order/CreateTemporaryBasketLimitExceededException.md +18 -0
- package/docs/dw_order/GiftCertificate.md +545 -0
- package/docs/dw_order/GiftCertificateLineItem.md +324 -0
- package/docs/dw_order/GiftCertificateMgr.md +161 -0
- package/docs/dw_order/GiftCertificateStatusCodes.md +24 -0
- package/docs/dw_order/Invoice.md +316 -0
- package/docs/dw_order/InvoiceItem.md +222 -0
- package/docs/dw_order/LineItem.md +532 -0
- package/docs/dw_order/LineItemCtnr.md +2317 -0
- package/docs/dw_order/Order.md +2441 -0
- package/docs/dw_order/OrderAddress.md +807 -0
- package/docs/dw_order/OrderItem.md +476 -0
- package/docs/dw_order/OrderMgr.md +535 -0
- package/docs/dw_order/OrderPaymentInstrument.md +220 -0
- package/docs/dw_order/OrderProcessStatusCodes.md +24 -0
- package/docs/dw_order/PaymentCard.md +217 -0
- package/docs/dw_order/PaymentInstrument.md +1414 -0
- package/docs/dw_order/PaymentMethod.md +242 -0
- package/docs/dw_order/PaymentMgr.md +117 -0
- package/docs/dw_order/PaymentProcessor.md +70 -0
- package/docs/dw_order/PaymentStatusCodes.md +24 -0
- package/docs/dw_order/PaymentTransaction.md +304 -0
- package/docs/dw_order/PriceAdjustment.md +640 -0
- package/docs/dw_order/PriceAdjustmentLimitTypes.md +20 -0
- package/docs/dw_order/ProductLineItem.md +1821 -0
- package/docs/dw_order/ProductShippingCost.md +96 -0
- package/docs/dw_order/ProductShippingLineItem.md +320 -0
- package/docs/dw_order/ProductShippingModel.md +125 -0
- package/docs/dw_order/Return.md +318 -0
- package/docs/dw_order/ReturnCase.md +340 -0
- package/docs/dw_order/ReturnCaseItem.md +343 -0
- package/docs/dw_order/ReturnItem.md +362 -0
- package/docs/dw_order/Shipment.md +1227 -0
- package/docs/dw_order/ShipmentShippingCost.md +46 -0
- package/docs/dw_order/ShipmentShippingModel.md +146 -0
- package/docs/dw_order/ShippingLineItem.md +272 -0
- package/docs/dw_order/ShippingLocation.md +366 -0
- package/docs/dw_order/ShippingMethod.md +266 -0
- package/docs/dw_order/ShippingMgr.md +158 -0
- package/docs/dw_order/ShippingOrder.md +507 -0
- package/docs/dw_order/ShippingOrderItem.md +331 -0
- package/docs/dw_order/SumItem.md +147 -0
- package/docs/dw_order/TaxGroup.md +143 -0
- package/docs/dw_order/TaxItem.md +74 -0
- package/docs/dw_order/TaxMgr.md +215 -0
- package/docs/dw_order/TrackingInfo.md +312 -0
- package/docs/dw_order/TrackingRef.md +113 -0
- package/docs/dw_order.hooks/CalculateHooks.md +77 -0
- package/docs/dw_order.hooks/OrderHooks.md +41 -0
- package/docs/dw_order.hooks/PaymentHooks.md +180 -0
- package/docs/dw_order.hooks/ReturnHooks.md +135 -0
- package/docs/dw_order.hooks/ShippingOrderHooks.md +245 -0
- package/docs/dw_rpc/SOAPUtil.md +333 -0
- package/docs/dw_rpc/Stub.md +259 -0
- package/docs/dw_rpc/WebReference.md +83 -0
- package/docs/dw_suggest/BrandSuggestions.md +17 -0
- package/docs/dw_suggest/CategorySuggestions.md +53 -0
- package/docs/dw_suggest/ContentSuggestions.md +53 -0
- package/docs/dw_suggest/CustomSuggestions.md +17 -0
- package/docs/dw_suggest/ProductSuggestions.md +53 -0
- package/docs/dw_suggest/SearchPhraseSuggestions.md +117 -0
- package/docs/dw_suggest/SuggestModel.md +397 -0
- package/docs/dw_suggest/SuggestedCategory.md +46 -0
- package/docs/dw_suggest/SuggestedContent.md +46 -0
- package/docs/dw_suggest/SuggestedPhrase.md +70 -0
- package/docs/dw_suggest/SuggestedProduct.md +47 -0
- package/docs/dw_suggest/SuggestedTerm.md +143 -0
- package/docs/dw_suggest/SuggestedTerms.md +132 -0
- package/docs/dw_suggest/Suggestions.md +179 -0
- package/docs/dw_svc/FTPService.md +118 -0
- package/docs/dw_svc/FTPServiceDefinition.md +69 -0
- package/docs/dw_svc/HTTPFormService.md +18 -0
- package/docs/dw_svc/HTTPFormServiceDefinition.md +18 -0
- package/docs/dw_svc/HTTPService.md +415 -0
- package/docs/dw_svc/HTTPServiceDefinition.md +303 -0
- package/docs/dw_svc/LocalServiceRegistry.md +43 -0
- package/docs/dw_svc/Result.md +255 -0
- package/docs/dw_svc/SOAPService.md +115 -0
- package/docs/dw_svc/SOAPServiceDefinition.md +17 -0
- package/docs/dw_svc/Service.md +295 -0
- package/docs/dw_svc/ServiceCallback.md +268 -0
- package/docs/dw_svc/ServiceConfig.md +120 -0
- package/docs/dw_svc/ServiceCredential.md +150 -0
- package/docs/dw_svc/ServiceDefinition.md +176 -0
- package/docs/dw_svc/ServiceProfile.md +168 -0
- package/docs/dw_svc/ServiceRegistry.md +109 -0
- package/docs/dw_system/AgentUserStatusCodes.md +21 -0
- package/docs/dw_system/Cache.md +102 -0
- package/docs/dw_system/CacheMgr.md +42 -0
- package/docs/dw_system/HookMgr.md +66 -0
- package/docs/dw_system/InternalObject.md +56 -0
- package/docs/dw_system/JobProcessMonitor.md +124 -0
- package/docs/dw_system/Log.md +237 -0
- package/docs/dw_system/LogNDC.md +88 -0
- package/docs/dw_system/Logger.md +263 -0
- package/docs/dw_system/OrganizationPreferences.md +18 -0
- package/docs/dw_system/Pipeline.md +73 -0
- package/docs/dw_system/PipelineDictionary.md +16 -0
- package/docs/dw_system/RESTErrorResponse.md +66 -0
- package/docs/dw_system/RESTResponseMgr.md +258 -0
- package/docs/dw_system/RESTSuccessResponse.md +39 -0
- package/docs/dw_system/RemoteInclude.md +74 -0
- package/docs/dw_system/Request.md +839 -0
- package/docs/dw_system/RequestHooks.md +59 -0
- package/docs/dw_system/Response.md +318 -0
- package/docs/dw_system/SearchStatus.md +91 -0
- package/docs/dw_system/Session.md +476 -0
- package/docs/dw_system/Site.md +567 -0
- package/docs/dw_system/SitePreferences.md +49 -0
- package/docs/dw_system/Status.md +273 -0
- package/docs/dw_system/StatusItem.md +273 -0
- package/docs/dw_system/System.md +182 -0
- package/docs/dw_system/Transaction.md +84 -0
- package/docs/dw_util/ArrayList.md +50 -0
- package/docs/dw_util/Assert.md +391 -0
- package/docs/dw_util/BigInteger.md +326 -0
- package/docs/dw_util/Bytes.md +246 -0
- package/docs/dw_util/Calendar.md +663 -0
- package/docs/dw_util/Collection.md +338 -0
- package/docs/dw_util/Currency.md +163 -0
- package/docs/dw_util/DateUtils.md +86 -0
- package/docs/dw_util/Decimal.md +438 -0
- package/docs/dw_util/FilteringCollection.md +87 -0
- package/docs/dw_util/Geolocation.md +271 -0
- package/docs/dw_util/HashMap.md +43 -0
- package/docs/dw_util/HashSet.md +46 -0
- package/docs/dw_util/Iterator.md +97 -0
- package/docs/dw_util/LinkedHashMap.md +43 -0
- package/docs/dw_util/LinkedHashSet.md +46 -0
- package/docs/dw_util/List.md +519 -0
- package/docs/dw_util/Locale.md +267 -0
- package/docs/dw_util/Map.md +313 -0
- package/docs/dw_util/MapEntry.md +70 -0
- package/docs/dw_util/MappingKey.md +76 -0
- package/docs/dw_util/MappingMgr.md +122 -0
- package/docs/dw_util/PropertyComparator.md +51 -0
- package/docs/dw_util/SecureEncoder.md +350 -0
- package/docs/dw_util/SecureFilter.md +350 -0
- package/docs/dw_util/SeekableIterator.md +176 -0
- package/docs/dw_util/Set.md +19 -0
- package/docs/dw_util/SortedMap.md +148 -0
- package/docs/dw_util/SortedSet.md +151 -0
- package/docs/dw_util/StringUtils.md +717 -0
- package/docs/dw_util/Template.md +88 -0
- package/docs/dw_util/UUIDUtils.md +38 -0
- package/docs/dw_value/EnumValue.md +92 -0
- package/docs/dw_value/MimeEncodedText.md +103 -0
- package/docs/dw_value/Money.md +604 -0
- package/docs/dw_value/Quantity.md +376 -0
- package/docs/dw_web/CSRFProtection.md +83 -0
- package/docs/dw_web/ClickStream.md +157 -0
- package/docs/dw_web/ClickStreamEntry.md +289 -0
- package/docs/dw_web/Cookie.md +390 -0
- package/docs/dw_web/Cookies.md +46 -0
- package/docs/dw_web/Form.md +74 -0
- package/docs/dw_web/FormAction.md +199 -0
- package/docs/dw_web/FormElement.md +220 -0
- package/docs/dw_web/FormElementValidationResult.md +157 -0
- package/docs/dw_web/FormField.md +603 -0
- package/docs/dw_web/FormFieldOption.md +238 -0
- package/docs/dw_web/FormFieldOptions.md +42 -0
- package/docs/dw_web/FormGroup.md +199 -0
- package/docs/dw_web/FormList.md +126 -0
- package/docs/dw_web/FormListItem.md +48 -0
- package/docs/dw_web/Forms.md +16 -0
- package/docs/dw_web/HttpParameter.md +513 -0
- package/docs/dw_web/HttpParameterMap.md +185 -0
- package/docs/dw_web/LoopIterator.md +261 -0
- package/docs/dw_web/PageMetaData.md +230 -0
- package/docs/dw_web/PageMetaTag.md +142 -0
- package/docs/dw_web/PagingModel.md +365 -0
- package/docs/dw_web/Resource.md +126 -0
- package/docs/dw_web/URL.md +213 -0
- package/docs/dw_web/URLAction.md +26 -0
- package/docs/dw_web/URLParameter.md +22 -0
- package/docs/dw_web/URLRedirect.md +71 -0
- package/docs/dw_web/URLRedirectMgr.md +73 -0
- package/docs/dw_web/URLUtils.md +1246 -0
- package/package.json +43 -0
- package/scripts/convert-docs.js +617 -0
- package/src/best-practices-client.ts +243 -0
- package/src/cache.ts +291 -0
- package/src/config.ts +77 -0
- package/src/docs-client.ts +540 -0
- package/src/index.ts +22 -0
- package/src/log-client.ts +260 -0
- package/src/main.ts +133 -0
- package/src/server.ts +614 -0
- package/src/types.ts +83 -0
- package/src/utils.ts +103 -0
- package/tsconfig.json +21 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025, SFCC Development MCP Server
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
15
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
# SFCC Development MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP (Model Context Protocol) server that provides comprehensive access to Salesforce B2C Commerce Cloud development features. This allows AI agents to assist with SFCC development tasks including log analysis, debugging, monitoring, and **SFCC documentation querying**.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
### SFCC Best Practices Guides
|
|
8
|
+
- **Get Available Guides**: List all available SFCC best practice guides covering OCAPI hooks, SCAPI hooks, SFRA controllers, and custom SCAPI endpoints
|
|
9
|
+
- **Get Complete Guide**: Retrieve comprehensive best practice guides with structured content for specific SFCC development areas
|
|
10
|
+
- **Search Best Practices**: Search across all best practice guides for specific terms, concepts, or patterns
|
|
11
|
+
- **Get Hook Reference**: Access detailed hook reference tables for OCAPI and SCAPI hooks with endpoints and extension points
|
|
12
|
+
|
|
13
|
+
### SFCC Documentation Querying
|
|
14
|
+
- **Get Class Information**: Retrieve detailed information about any SFCC class including properties, methods, and descriptions
|
|
15
|
+
- **Search Classes**: Find SFCC classes by name with partial matching
|
|
16
|
+
- **Get Class Methods**: List all methods for a specific SFCC class with signatures
|
|
17
|
+
- **Get Class Properties**: List all properties for a specific SFCC class with types and modifiers
|
|
18
|
+
- **Search Methods**: Find methods across all SFCC classes by name
|
|
19
|
+
- **List All Classes**: Get a complete list of available SFCC classes
|
|
20
|
+
- **Get Raw Documentation**: Access the complete Markdown documentation for any class
|
|
21
|
+
|
|
22
|
+
### Log Analysis & Monitoring
|
|
23
|
+
- **Get Latest Errors**: Retrieve the most recent error messages from SFCC logs
|
|
24
|
+
- **Get Latest Warnings**: Fetch recent warning messages
|
|
25
|
+
- **Get Latest Info**: Access recent info-level log entries
|
|
26
|
+
- **Summarize Logs**: Get an overview of log activity with error counts and key issues
|
|
27
|
+
- **Search Logs**: Search for specific patterns across log files
|
|
28
|
+
- **List Log Files**: View available log files with metadata
|
|
29
|
+
|
|
30
|
+
## Installation
|
|
31
|
+
|
|
32
|
+
1. Clone this repository
|
|
33
|
+
2. Install dependencies:
|
|
34
|
+
```bash
|
|
35
|
+
npm install
|
|
36
|
+
```
|
|
37
|
+
3. Build the TypeScript code:
|
|
38
|
+
```bash
|
|
39
|
+
npm run build
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Configuration
|
|
43
|
+
|
|
44
|
+
### Using dw.json (Recommended)
|
|
45
|
+
|
|
46
|
+
The server supports the standard SFCC `dw.json` configuration format used by Commerce Cloud development tools. Create a `dw.json` file in your project root:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"hostname": "your-instance.sandbox.us01.dx.commercecloud.salesforce.com",
|
|
51
|
+
"username": "your-username",
|
|
52
|
+
"password": "your-password",
|
|
53
|
+
"client-id": "your-client-id",
|
|
54
|
+
"client-secret": "your-client-secret",
|
|
55
|
+
"code-version": "version1"
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Required fields:**
|
|
60
|
+
- `hostname`: Your SFCC instance hostname
|
|
61
|
+
- `username`: Your SFCC username
|
|
62
|
+
- `password`: Your SFCC password
|
|
63
|
+
|
|
64
|
+
**Optional fields:**
|
|
65
|
+
- `client-id`: OAuth client ID (for API access)
|
|
66
|
+
- `client-secret`: OAuth client secret (for API access)
|
|
67
|
+
- `code-version`: Code version to use
|
|
68
|
+
|
|
69
|
+
### Using Environment Variables
|
|
70
|
+
|
|
71
|
+
Alternatively, you can configure the server using environment variables:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
export SFCC_HOSTNAME="your-instance.sandbox.us01.dx.commercecloud.salesforce.com"
|
|
75
|
+
export SFCC_USERNAME="your-username"
|
|
76
|
+
export SFCC_PASSWORD="your-password"
|
|
77
|
+
export SFCC_CLIENT_ID="your-client-id"
|
|
78
|
+
export SFCC_CLIENT_SECRET="your-client-secret"
|
|
79
|
+
export SFCC_SITE_ID="RefArch"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Usage
|
|
83
|
+
|
|
84
|
+
### Launch Parameters and Command Line Options
|
|
85
|
+
|
|
86
|
+
The server supports several command line parameters to customize its behavior:
|
|
87
|
+
|
|
88
|
+
#### `--dw-json <path>`
|
|
89
|
+
|
|
90
|
+
Specify a custom path to your `dw.json` configuration file:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Using npm with custom dw.json path
|
|
94
|
+
npm start -- --dw-json /path/to/your/dw.json
|
|
95
|
+
|
|
96
|
+
# Using npm with relative path
|
|
97
|
+
npm start -- --dw-json ./config/dw.json
|
|
98
|
+
|
|
99
|
+
# Using node directly
|
|
100
|
+
node dist/main.js --dw-json /path/to/your/dw.json
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### Configuration Loading Priority
|
|
104
|
+
|
|
105
|
+
The server loads configuration in the following order of preference:
|
|
106
|
+
|
|
107
|
+
1. **Command line `--dw-json` argument** (highest priority)
|
|
108
|
+
- Allows you to specify a custom path to your dw.json file
|
|
109
|
+
- Useful for different environments or project configurations
|
|
110
|
+
|
|
111
|
+
2. **`./dw.json` file in current directory**
|
|
112
|
+
- Automatically detected if present in the working directory
|
|
113
|
+
- Standard SFCC development workflow
|
|
114
|
+
|
|
115
|
+
3. **Environment variables** (lowest priority)
|
|
116
|
+
- Falls back to environment variables if no dw.json is found
|
|
117
|
+
- See the "Using Environment Variables" section below
|
|
118
|
+
|
|
119
|
+
### Starting the Server
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Basic start (uses ./dw.json or environment variables)
|
|
123
|
+
npm start
|
|
124
|
+
|
|
125
|
+
# Start with custom dw.json file
|
|
126
|
+
npm start -- --dw-json /path/to/custom/dw.json
|
|
127
|
+
|
|
128
|
+
# Or directly with node
|
|
129
|
+
node dist/main.js
|
|
130
|
+
|
|
131
|
+
# Or with custom configuration
|
|
132
|
+
node dist/main.js --dw-json ./config/production.json
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Using with npx
|
|
136
|
+
|
|
137
|
+
You can also run the server directly using npx without installing it locally:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# Run with npx (uses ./dw.json or environment variables)
|
|
141
|
+
npx sfcc-dev-mcp
|
|
142
|
+
|
|
143
|
+
# Run with npx and custom dw.json file
|
|
144
|
+
npx sfcc-dev-mcp --dw-json /path/to/custom/dw.json
|
|
145
|
+
|
|
146
|
+
# Run with npx and relative path
|
|
147
|
+
npx sfcc-dev-mcp --dw-json ./config/dw.json
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Note:** When using npx, make sure your `dw.json` file is in the current working directory or specify the full path using the `--dw-json` parameter.
|
|
151
|
+
|
|
152
|
+
### MCP Client Configuration
|
|
153
|
+
|
|
154
|
+
Add this server to your MCP client configuration. For example, in Claude Desktop's config:
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"mcpServers": {
|
|
159
|
+
"sfcc-dev": {
|
|
160
|
+
"command": "node",
|
|
161
|
+
"args": ["/path/to/sfcc-dev-mcp/dist/main.js"]
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Available Tools
|
|
168
|
+
|
|
169
|
+
### SFCC Documentation Tools
|
|
170
|
+
|
|
171
|
+
1. **`get_sfcc_class_info`** - Get comprehensive information about an SFCC class
|
|
172
|
+
```json
|
|
173
|
+
{
|
|
174
|
+
"className": "Catalog"
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
2. **`search_sfcc_classes`** - Search for classes by name
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"query": "product"
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
3. **`get_sfcc_class_methods`** - Get all methods for a class
|
|
186
|
+
```json
|
|
187
|
+
{
|
|
188
|
+
"className": "dw.catalog.Product"
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
4. **`get_sfcc_class_properties`** - Get all properties for a class
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"className": "dw.catalog.Catalog"
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
5. **`search_sfcc_methods`** - Find methods across all classes
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"methodName": "getPrice"
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
6. **`list_sfcc_classes`** - List all available SFCC classes
|
|
207
|
+
|
|
208
|
+
7. **`get_sfcc_class_documentation`** - Get raw documentation
|
|
209
|
+
```json
|
|
210
|
+
{
|
|
211
|
+
"className": "dw.catalog.Product"
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### SFCC Best Practices Tools
|
|
216
|
+
|
|
217
|
+
1. **`get_available_best_practice_guides`** - List all available best practice guides
|
|
218
|
+
```json
|
|
219
|
+
{}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
2. **`get_best_practice_guide`** - Get a complete best practice guide
|
|
223
|
+
```json
|
|
224
|
+
{
|
|
225
|
+
"guideName": "sfra_controllers"
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
3. **`search_best_practices`** - Search across all best practice guides
|
|
230
|
+
```json
|
|
231
|
+
{
|
|
232
|
+
"query": "validation"
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
4. **`get_hook_reference`** - Get hook reference tables for OCAPI/SCAPI
|
|
237
|
+
```json
|
|
238
|
+
{
|
|
239
|
+
"guideName": "ocapi_hooks"
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Log Analysis Tools
|
|
244
|
+
|
|
245
|
+
1. **`get_latest_errors`** - Get recent error messages
|
|
246
|
+
2. **`get_latest_warnings`** - Get recent warning messages
|
|
247
|
+
3. **`get_latest_info`** - Get recent info messages
|
|
248
|
+
4. **`summarize_logs`** - Get log summary with counts
|
|
249
|
+
5. **`search_logs`** - Search for patterns in logs
|
|
250
|
+
6. **`list_log_files`** - List available log files
|
|
251
|
+
|
|
252
|
+
## Example AI Assistant Interactions
|
|
253
|
+
|
|
254
|
+
With this MCP server, AI assistants can now answer questions like:
|
|
255
|
+
|
|
256
|
+
**"How does the Catalog class work in SFCC?"**
|
|
257
|
+
- The assistant queries `get_sfcc_class_info` for the Catalog class
|
|
258
|
+
- Gets back structured information about properties (description, displayName, ID, root) and methods (getDescription, getDisplayName, etc.)
|
|
259
|
+
- Provides a comprehensive explanation of the class functionality
|
|
260
|
+
|
|
261
|
+
**"Find all classes related to products"**
|
|
262
|
+
- The assistant uses `search_sfcc_classes` with query "product"
|
|
263
|
+
- Returns classes like `dw.catalog.Product`, `dw.catalog.ProductMgr`, `dw.catalog.ProductOption`, etc.
|
|
264
|
+
|
|
265
|
+
**"What methods are available for managing customers?"**
|
|
266
|
+
- The assistant calls `search_sfcc_methods` with "customer"
|
|
267
|
+
- Gets back customer-related methods from multiple classes across the SFCC API
|
|
268
|
+
|
|
269
|
+
**"How do I implement SFRA controller extensions properly?"**
|
|
270
|
+
- The assistant uses `get_best_practice_guide` with "sfra_controllers"
|
|
271
|
+
- Returns comprehensive best practices including server.append(), server.prepend(), and server.replace() patterns
|
|
272
|
+
- Provides code examples and architectural guidance for SFRA development
|
|
273
|
+
|
|
274
|
+
**"What are the security best practices for OCAPI hooks?"**
|
|
275
|
+
- The assistant calls `search_best_practices` with query "security"
|
|
276
|
+
- Finds security-related content across all best practice guides
|
|
277
|
+
- Returns specific guidance on input validation, authorization, and data integrity
|
|
278
|
+
|
|
279
|
+
**"Show me all available SCAPI hook extension points"**
|
|
280
|
+
- The assistant uses `get_hook_reference` with "scapi_hooks"
|
|
281
|
+
- Returns comprehensive tables of all SCAPI hook endpoints and their available extension points
|
|
282
|
+
- Provides structured reference for implementing custom hook logic
|
|
283
|
+
|
|
284
|
+
## Best Practices Coverage
|
|
285
|
+
|
|
286
|
+
The server includes comprehensive best practices guides for all major SFCC development areas:
|
|
287
|
+
- **OCAPI Hooks** - Legacy API extension patterns and implementation guidance
|
|
288
|
+
- **SCAPI Hooks** - Modern API hooks with transactional integrity and performance considerations
|
|
289
|
+
- **SFRA Controllers** - Storefront controller patterns, middleware chains, and extension strategies
|
|
290
|
+
- **Custom SCAPI Endpoints** - Three-pillar architecture for building new API endpoints
|
|
291
|
+
|
|
292
|
+
## Documentation Coverage
|
|
293
|
+
|
|
294
|
+
The server includes comprehensive documentation for all SFCC packages:
|
|
295
|
+
- `dw.campaign` - Campaign and promotion management
|
|
296
|
+
- `dw.catalog` - Product and catalog management
|
|
297
|
+
- `dw.content` - Content management
|
|
298
|
+
- `dw.customer` - Customer management
|
|
299
|
+
- `dw.order` - Order processing
|
|
300
|
+
- `dw.system` - System utilities
|
|
301
|
+
- `dw.web` - Web framework
|
|
302
|
+
- And many more...
|
|
303
|
+
|
|
304
|
+
## Security Notes
|
|
305
|
+
|
|
306
|
+
- Store your `dw.json` file securely and never commit it to version control
|
|
307
|
+
- Add `dw.json` to your `.gitignore` file
|
|
308
|
+
- Use environment variables in production environments
|
|
309
|
+
- Ensure your SFCC credentials have appropriate permissions
|
|
310
|
+
|
|
311
|
+
## Development
|
|
312
|
+
|
|
313
|
+
### Building from Source
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
npm run build
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Running Tests
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
npm test
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### Documentation Generation
|
|
326
|
+
|
|
327
|
+
The SFCC documentation is automatically converted from the official SFCC documentation using the included scraping script:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
# Convert SFCC documentation (with rate limiting)
|
|
331
|
+
node scripts/convert-docs.js
|
|
332
|
+
|
|
333
|
+
# Test mode (limited conversion)
|
|
334
|
+
node scripts/convert-docs.js --test
|
|
335
|
+
|
|
336
|
+
# Conservative rate limiting
|
|
337
|
+
node scripts/convert-docs.js --slow
|
|
338
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SFCC Best Practices Client
|
|
3
|
+
*
|
|
4
|
+
* Provides access to SFCC development best practices documentation including
|
|
5
|
+
* OCAPI hooks, SCAPI hooks, SCAPI custom endpoints, and SFRA controllers.
|
|
6
|
+
*/
|
|
7
|
+
export interface BestPracticeGuide {
|
|
8
|
+
title: string;
|
|
9
|
+
description: string;
|
|
10
|
+
sections: string[];
|
|
11
|
+
content: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Client for accessing SFCC best practices documentation
|
|
15
|
+
*/
|
|
16
|
+
export declare class SFCCBestPracticesClient {
|
|
17
|
+
private cache;
|
|
18
|
+
private docsPath;
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Get all available best practice guides
|
|
22
|
+
*/
|
|
23
|
+
getAvailableGuides(): Promise<Array<{
|
|
24
|
+
name: string;
|
|
25
|
+
title: string;
|
|
26
|
+
description: string;
|
|
27
|
+
}>>;
|
|
28
|
+
/**
|
|
29
|
+
* Get a specific best practice guide
|
|
30
|
+
*/
|
|
31
|
+
getBestPracticeGuide(guideName: string): Promise<BestPracticeGuide | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Search across all best practices for specific terms
|
|
34
|
+
*/
|
|
35
|
+
searchBestPractices(query: string): Promise<Array<{
|
|
36
|
+
guide: string;
|
|
37
|
+
title: string;
|
|
38
|
+
matches: Array<{
|
|
39
|
+
section: string;
|
|
40
|
+
content: string;
|
|
41
|
+
}>;
|
|
42
|
+
}>>;
|
|
43
|
+
/**
|
|
44
|
+
* Get hook reference tables for OCAPI/SCAPI hooks
|
|
45
|
+
*/
|
|
46
|
+
getHookReference(guideName: string): Promise<Array<{
|
|
47
|
+
category: string;
|
|
48
|
+
hooks: Array<{
|
|
49
|
+
endpoint: string;
|
|
50
|
+
hookPoints: string[];
|
|
51
|
+
signature?: string;
|
|
52
|
+
}>;
|
|
53
|
+
}>>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=best-practices-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"best-practices-client.d.ts","sourceRoot":"","sources":["../src/best-practices-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,QAAQ,CAAS;;IAWzB;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAgC9F;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAyChF;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QACtD,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAC,CAAC,CAAC;KACpD,CAAC,CAAC;IAiDH;;OAEG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QACvD,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,KAAK,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC,CAAC;KAC5E,CAAC,CAAC;CAkEJ"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SFCC Best Practices Client
|
|
3
|
+
*
|
|
4
|
+
* Provides access to SFCC development best practices documentation including
|
|
5
|
+
* OCAPI hooks, SCAPI hooks, SCAPI custom endpoints, and SFRA controllers.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs/promises';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
import { CacheManager } from './cache.js';
|
|
11
|
+
/**
|
|
12
|
+
* Client for accessing SFCC best practices documentation
|
|
13
|
+
*/
|
|
14
|
+
export class SFCCBestPracticesClient {
|
|
15
|
+
cache;
|
|
16
|
+
docsPath;
|
|
17
|
+
constructor() {
|
|
18
|
+
this.cache = new CacheManager();
|
|
19
|
+
// ES module compatible way to get __dirname
|
|
20
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
21
|
+
const __dirname = path.dirname(__filename);
|
|
22
|
+
this.docsPath = path.join(__dirname, '..', 'docs', 'best-practices');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get all available best practice guides
|
|
26
|
+
*/
|
|
27
|
+
async getAvailableGuides() {
|
|
28
|
+
const cacheKey = 'best-practices:available-guides';
|
|
29
|
+
const cached = this.cache.getSearchResults(cacheKey);
|
|
30
|
+
if (cached)
|
|
31
|
+
return cached;
|
|
32
|
+
const guides = [
|
|
33
|
+
{
|
|
34
|
+
name: 'ocapi_hooks',
|
|
35
|
+
title: 'OCAPI Hooks Best Practices',
|
|
36
|
+
description: 'Best practices for implementing OCAPI hooks in Salesforce B2C Commerce Cloud'
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'scapi_hooks',
|
|
40
|
+
title: 'SCAPI Hooks Best Practices',
|
|
41
|
+
description: 'Essential best practices for implementing SCAPI hooks with AI development assistance'
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'scapi_custom_endpoint',
|
|
45
|
+
title: 'Custom SCAPI Endpoint Best Practices',
|
|
46
|
+
description: 'Best practices for creating custom SCAPI endpoints in B2C Commerce Cloud'
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'sfra_controllers',
|
|
50
|
+
title: 'SFRA Controllers Best Practices',
|
|
51
|
+
description: 'Best practices and code patterns for developing SFRA controllers'
|
|
52
|
+
}
|
|
53
|
+
];
|
|
54
|
+
this.cache.setSearchResults(cacheKey, guides);
|
|
55
|
+
return guides;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get a specific best practice guide
|
|
59
|
+
*/
|
|
60
|
+
async getBestPracticeGuide(guideName) {
|
|
61
|
+
const cacheKey = `best-practices:guide:${guideName}`;
|
|
62
|
+
const cached = this.cache.getFileContent(cacheKey);
|
|
63
|
+
if (cached)
|
|
64
|
+
return JSON.parse(cached);
|
|
65
|
+
try {
|
|
66
|
+
const filePath = path.join(this.docsPath, `${guideName}.md`);
|
|
67
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
68
|
+
const lines = content.split('\n');
|
|
69
|
+
const title = lines.find(line => line.startsWith('#'))?.replace('#', '').trim() || guideName;
|
|
70
|
+
// Extract sections (## headers)
|
|
71
|
+
const sections = lines
|
|
72
|
+
.filter(line => line.startsWith('##'))
|
|
73
|
+
.map(line => line.replace('##', '').trim());
|
|
74
|
+
// Extract description (first paragraph after title)
|
|
75
|
+
const descriptionStart = lines.findIndex(line => line.startsWith('#')) + 1;
|
|
76
|
+
const descriptionEnd = lines.findIndex((line, index) => index > descriptionStart && (line.startsWith('#') || line.trim() === ''));
|
|
77
|
+
const description = lines
|
|
78
|
+
.slice(descriptionStart, descriptionEnd > -1 ? descriptionEnd : descriptionStart + 3)
|
|
79
|
+
.join(' ')
|
|
80
|
+
.trim();
|
|
81
|
+
const guide = {
|
|
82
|
+
title,
|
|
83
|
+
description,
|
|
84
|
+
sections,
|
|
85
|
+
content
|
|
86
|
+
};
|
|
87
|
+
this.cache.setFileContent(cacheKey, JSON.stringify(guide));
|
|
88
|
+
return guide;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error(`Error reading best practice guide ${guideName}:`, error);
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Search across all best practices for specific terms
|
|
97
|
+
*/
|
|
98
|
+
async searchBestPractices(query) {
|
|
99
|
+
const cacheKey = `best-practices:search:${query.toLowerCase()}`;
|
|
100
|
+
const cached = this.cache.getSearchResults(cacheKey);
|
|
101
|
+
if (cached)
|
|
102
|
+
return cached;
|
|
103
|
+
const guides = await this.getAvailableGuides();
|
|
104
|
+
const results = [];
|
|
105
|
+
for (const guide of guides) {
|
|
106
|
+
const guideContent = await this.getBestPracticeGuide(guide.name);
|
|
107
|
+
if (!guideContent)
|
|
108
|
+
continue;
|
|
109
|
+
const matches = [];
|
|
110
|
+
const lines = guideContent.content.split('\n');
|
|
111
|
+
let currentSection = '';
|
|
112
|
+
for (let i = 0; i < lines.length; i++) {
|
|
113
|
+
const line = lines[i];
|
|
114
|
+
if (line.startsWith('##')) {
|
|
115
|
+
currentSection = line.replace('##', '').trim();
|
|
116
|
+
}
|
|
117
|
+
if (line.toLowerCase().includes(query.toLowerCase())) {
|
|
118
|
+
// Get context around the match
|
|
119
|
+
const start = Math.max(0, i - 2);
|
|
120
|
+
const end = Math.min(lines.length, i + 3);
|
|
121
|
+
const context = lines.slice(start, end).join('\n');
|
|
122
|
+
matches.push({
|
|
123
|
+
section: currentSection || 'Introduction',
|
|
124
|
+
content: context
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (matches.length > 0) {
|
|
129
|
+
results.push({
|
|
130
|
+
guide: guide.name,
|
|
131
|
+
title: guide.title,
|
|
132
|
+
matches
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
this.cache.setSearchResults(cacheKey, results);
|
|
137
|
+
return results;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get hook reference tables for OCAPI/SCAPI hooks
|
|
141
|
+
*/
|
|
142
|
+
async getHookReference(guideName) {
|
|
143
|
+
if (!guideName.includes('hooks'))
|
|
144
|
+
return [];
|
|
145
|
+
const cacheKey = `best-practices:hook-reference:${guideName}`;
|
|
146
|
+
const cached = this.cache.getSearchResults(cacheKey);
|
|
147
|
+
if (cached)
|
|
148
|
+
return cached;
|
|
149
|
+
const guide = await this.getBestPracticeGuide(guideName);
|
|
150
|
+
if (!guide)
|
|
151
|
+
return [];
|
|
152
|
+
const reference = [];
|
|
153
|
+
const lines = guide.content.split('\n');
|
|
154
|
+
let currentCategory = '';
|
|
155
|
+
let inTable = false;
|
|
156
|
+
let hooks = [];
|
|
157
|
+
for (const line of lines) {
|
|
158
|
+
// Look for hook reference sections
|
|
159
|
+
if (line.match(/^###?\s+(Shop API Hooks|Data API Hooks|Shopper.*Hooks|.*API Hooks)/i)) {
|
|
160
|
+
if (currentCategory && hooks.length > 0) {
|
|
161
|
+
reference.push({ category: currentCategory, hooks: [...hooks] });
|
|
162
|
+
}
|
|
163
|
+
currentCategory = line.replace(/^#+\s*/, '');
|
|
164
|
+
hooks = [];
|
|
165
|
+
inTable = false;
|
|
166
|
+
}
|
|
167
|
+
// Detect table headers
|
|
168
|
+
if (line.includes('API Endpoint') && line.includes('Hook')) {
|
|
169
|
+
inTable = true;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
// Skip separator line
|
|
173
|
+
if (line.match(/^\|[\s\-\|]+\|$/)) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
// Parse table rows
|
|
177
|
+
if (inTable && line.startsWith('|') && !line.includes('**')) {
|
|
178
|
+
const parts = line.split('|').map(p => p.trim()).filter(p => p);
|
|
179
|
+
if (parts.length >= 2) {
|
|
180
|
+
const endpoint = parts[0].replace(/`/g, '');
|
|
181
|
+
const hookPoints = parts[1].split(',').map(h => h.replace(/`/g, '').trim());
|
|
182
|
+
const signature = parts[2] ? parts[2].replace(/`/g, '') : undefined;
|
|
183
|
+
if (endpoint && hookPoints.length > 0) {
|
|
184
|
+
hooks.push({ endpoint, hookPoints, signature });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// End table when we hit a new section
|
|
189
|
+
if (inTable && line.startsWith('#')) {
|
|
190
|
+
inTable = false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Add last category
|
|
194
|
+
if (currentCategory && hooks.length > 0) {
|
|
195
|
+
reference.push({ category: currentCategory, hooks });
|
|
196
|
+
}
|
|
197
|
+
this.cache.setSearchResults(cacheKey, reference);
|
|
198
|
+
return reference;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=best-practices-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"best-practices-client.js","sourceRoot":"","sources":["../src/best-practices-client.ts"],"names":[],"mappings":"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"}
|