sfcc-dev-mcp 1.0.19 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clients/logs/index.d.ts +13 -0
- package/dist/clients/logs/index.d.ts.map +1 -0
- package/dist/clients/logs/index.js +15 -0
- package/dist/clients/logs/index.js.map +1 -0
- package/dist/clients/logs/log-analyzer.d.ts +55 -0
- package/dist/clients/logs/log-analyzer.d.ts.map +1 -0
- package/dist/clients/logs/log-analyzer.js +228 -0
- package/dist/clients/logs/log-analyzer.js.map +1 -0
- package/dist/clients/logs/log-client.d.ts +87 -0
- package/dist/clients/logs/log-client.d.ts.map +1 -0
- package/dist/clients/logs/log-client.js +418 -0
- package/dist/clients/logs/log-client.js.map +1 -0
- package/dist/clients/logs/log-constants.d.ts +37 -0
- package/dist/clients/logs/log-constants.d.ts.map +1 -0
- package/dist/clients/logs/log-constants.js +37 -0
- package/dist/clients/logs/log-constants.js.map +1 -0
- package/dist/clients/logs/log-file-discovery.d.ts +64 -0
- package/dist/clients/logs/log-file-discovery.d.ts.map +1 -0
- package/dist/clients/logs/log-file-discovery.js +249 -0
- package/dist/clients/logs/log-file-discovery.js.map +1 -0
- package/dist/clients/logs/log-file-reader.d.ts +55 -0
- package/dist/clients/logs/log-file-reader.d.ts.map +1 -0
- package/dist/clients/logs/log-file-reader.js +207 -0
- package/dist/clients/logs/log-file-reader.js.map +1 -0
- package/dist/clients/logs/log-formatter.d.ts +90 -0
- package/dist/clients/logs/log-formatter.d.ts.map +1 -0
- package/dist/clients/logs/log-formatter.js +189 -0
- package/dist/clients/logs/log-formatter.js.map +1 -0
- package/dist/clients/logs/log-processor.d.ts +91 -0
- package/dist/clients/logs/log-processor.d.ts.map +1 -0
- package/dist/clients/logs/log-processor.js +328 -0
- package/dist/clients/logs/log-processor.js.map +1 -0
- package/dist/clients/logs/log-types.d.ts +58 -0
- package/dist/clients/logs/log-types.d.ts.map +1 -0
- package/dist/clients/logs/log-types.js +8 -0
- package/dist/clients/logs/log-types.js.map +1 -0
- package/dist/clients/logs/webdav-client-manager.d.ts +28 -0
- package/dist/clients/logs/webdav-client-manager.d.ts.map +1 -0
- package/dist/clients/logs/webdav-client-manager.js +77 -0
- package/dist/clients/logs/webdav-client-manager.js.map +1 -0
- package/dist/docs/dw_customer/CustomerMgr.md +3 -3
- package/dist/docs/dw_customer/Wallet.md +25 -0
- package/dist/docs/dw_extensions.payments/SalesforceAdyenPaymentIntent.md +156 -0
- package/dist/docs/dw_extensions.payments/SalesforceAdyenSavedPaymentMethod.md +258 -0
- package/dist/docs/dw_extensions.payments/SalesforcePayPalOrder.md +36 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentIntent.md +1 -1
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsHooks.md +68 -1
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMerchantAccount.md +154 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMerchantAccountPaymentMethod.md +96 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMgr.md +311 -2
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsSiteConfiguration.md +26 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsZone.md +458 -0
- package/dist/docs/dw_order/OrderMgr.md +3 -3
- package/dist/docs/dw_order.hooks/BasketMergeHooks.md +4 -4
- package/dist/docs/dw_order.hooks/CheckoutHooks.md +42 -0
- package/dist/utils/path-resolver.d.ts +5 -0
- package/dist/utils/path-resolver.d.ts.map +1 -1
- package/dist/utils/path-resolver.js +27 -5
- package/dist/utils/path-resolver.js.map +1 -1
- package/package.json +9 -3
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -131
- package/.github/ISSUE_TEMPLATE/config.yml +0 -9
- package/.github/ISSUE_TEMPLATE/documentation.yml +0 -117
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -151
- package/.github/ISSUE_TEMPLATE/question.yml +0 -102
- package/.github/PULL_REQUEST_TEMPLATE/bug_fix.md +0 -59
- package/.github/PULL_REQUEST_TEMPLATE/documentation.md +0 -48
- package/.github/PULL_REQUEST_TEMPLATE/new_tool.md +0 -55
- package/.github/agents/official-docs-researcher.agent.md +0 -56
- package/.github/dependabot.yml +0 -65
- package/.github/instructions/mcp-node-tests.instructions.md +0 -30
- package/.github/instructions/mcp-yml-tests.instructions.md +0 -27
- package/.github/pull_request_template.md +0 -103
- package/.github/skills/agent-authoring/SKILL.md +0 -66
- package/.github/skills/mcp-log-debugging/SKILL.md +0 -69
- package/.github/skills/mcp-programmatic-testing/SKILL.md +0 -142
- package/.github/skills/mcp-yaml-testing/SKILL.md +0 -136
- package/.github/skills/salesforce-developer-site-scraper/SKILL.md +0 -102
- package/.github/skills/salesforce-developer-site-scraper/scripts/scrape-to-markdown.js +0 -205
- package/.github/skills/salesforce-help-site-scraper/SKILL.md +0 -84
- package/.github/skills/salesforce-help-site-scraper/scripts/scrape-help-to-markdown.js +0 -212
- package/.github/skills/skill-authoring/SKILL.md +0 -228
- package/.github/skills/skill-authoring/references/PATTERNS.md +0 -384
- package/.github/workflows/ci.yml +0 -103
- package/.github/workflows/deploy-pages.yml +0 -59
- package/.github/workflows/publish.yml +0 -112
- package/.github/workflows/update-docs.yml +0 -182
- package/.husky/pre-commit +0 -2
- package/AGENTS.md +0 -638
- package/CONTRIBUTING.md +0 -323
- package/SECURITY.md +0 -148
- package/aegis.config.docs-only.json +0 -9
- package/aegis.config.json +0 -12
- package/aegis.config.with-dw.json +0 -15
- package/ai-instructions/AGENTS.md +0 -628
- package/ai-instructions/skills/sfcc-caching/SKILL.md +0 -89
- package/ai-instructions/skills/sfcc-cartridge-development/SKILL.md +0 -240
- package/ai-instructions/skills/sfcc-forms-development/SKILL.md +0 -261
- package/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +0 -143
- package/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +0 -127
- package/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +0 -95
- package/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +0 -39
- package/ai-instructions/skills/sfcc-isml-development/SKILL.md +0 -370
- package/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +0 -116
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +0 -50
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +0 -45
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +0 -85
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +0 -63
- package/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +0 -159
- package/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +0 -13
- package/ai-instructions/skills/sfcc-job-development/SKILL.md +0 -334
- package/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +0 -393
- package/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +0 -271
- package/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +0 -257
- package/ai-instructions/skills/sfcc-localization/SKILL.md +0 -92
- package/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +0 -63
- package/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +0 -29
- package/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +0 -33
- package/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +0 -41
- package/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +0 -35
- package/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +0 -740
- package/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +0 -25
- package/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +0 -67
- package/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +0 -23
- package/ai-instructions/skills/sfcc-localization/references/TESTING.md +0 -21
- package/ai-instructions/skills/sfcc-localserviceregistry/SKILL.md +0 -374
- package/ai-instructions/skills/sfcc-logging/SKILL.md +0 -352
- package/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +0 -282
- package/ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md +0 -350
- package/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +0 -108
- package/ai-instructions/skills/sfcc-page-designer/SKILL.md +0 -353
- package/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +0 -436
- package/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +0 -322
- package/ai-instructions/skills/sfcc-performance/SKILL.md +0 -424
- package/ai-instructions/skills/sfcc-platform-limits/SKILL.md +0 -89
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +0 -237
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +0 -214
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +0 -253
- package/ai-instructions/skills/sfcc-scapi-hooks/SKILL.md +0 -341
- package/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +0 -380
- package/ai-instructions/skills/sfcc-security/SKILL.md +0 -394
- package/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +0 -270
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +0 -285
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +0 -206
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +0 -165
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +0 -185
- package/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +0 -347
- package/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +0 -257
- package/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +0 -193
- package/ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md +0 -814
- package/ai-instructions/skills/sfcc-sfra-models/SKILL.md +0 -322
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +0 -530
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +0 -234
- package/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +0 -417
- package/ai-instructions/skills/sfcc-sfra-scss/SKILL.md +0 -393
- package/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +0 -111
- package/docs/TopLevel/APIException.md +0 -68
- package/docs/TopLevel/Array.md +0 -897
- package/docs/TopLevel/ArrayBuffer.md +0 -79
- package/docs/TopLevel/BigInt.md +0 -132
- package/docs/TopLevel/Boolean.md +0 -62
- package/docs/TopLevel/ConversionError.md +0 -23
- package/docs/TopLevel/DataView.md +0 -352
- package/docs/TopLevel/Date.md +0 -924
- package/docs/TopLevel/ES6Iterator.md +0 -33
- package/docs/TopLevel/Error.md +0 -88
- package/docs/TopLevel/EvalError.md +0 -23
- package/docs/TopLevel/Fault.md +0 -87
- package/docs/TopLevel/Float32Array.md +0 -130
- package/docs/TopLevel/Float64Array.md +0 -130
- package/docs/TopLevel/Function.md +0 -105
- package/docs/TopLevel/Generator.md +0 -78
- package/docs/TopLevel/IOError.md +0 -62
- package/docs/TopLevel/Int16Array.md +0 -130
- package/docs/TopLevel/Int32Array.md +0 -130
- package/docs/TopLevel/Int8Array.md +0 -130
- package/docs/TopLevel/InternalError.md +0 -23
- package/docs/TopLevel/Iterable.md +0 -41
- package/docs/TopLevel/Iterator.md +0 -48
- package/docs/TopLevel/JSON.md +0 -162
- package/docs/TopLevel/Map.md +0 -216
- package/docs/TopLevel/Math.md +0 -913
- package/docs/TopLevel/Module.md +0 -45
- package/docs/TopLevel/Namespace.md +0 -96
- package/docs/TopLevel/Number.md +0 -417
- package/docs/TopLevel/Object.md +0 -641
- package/docs/TopLevel/QName.md +0 -96
- package/docs/TopLevel/RangeError.md +0 -23
- package/docs/TopLevel/ReferenceError.md +0 -23
- package/docs/TopLevel/RegExp.md +0 -109
- package/docs/TopLevel/Set.md +0 -165
- package/docs/TopLevel/StopIteration.md +0 -20
- package/docs/TopLevel/String.md +0 -1299
- package/docs/TopLevel/Symbol.md +0 -78
- package/docs/TopLevel/SyntaxError.md +0 -23
- package/docs/TopLevel/SystemError.md +0 -62
- package/docs/TopLevel/TypeError.md +0 -23
- package/docs/TopLevel/URIError.md +0 -23
- package/docs/TopLevel/Uint16Array.md +0 -130
- package/docs/TopLevel/Uint32Array.md +0 -130
- package/docs/TopLevel/Uint8Array.md +0 -130
- package/docs/TopLevel/Uint8ClampedArray.md +0 -130
- package/docs/TopLevel/WeakMap.md +0 -137
- package/docs/TopLevel/WeakSet.md +0 -92
- package/docs/TopLevel/XML.md +0 -937
- package/docs/TopLevel/XMLList.md +0 -484
- package/docs/TopLevel/XMLStreamError.md +0 -74
- package/docs/TopLevel/arguments.md +0 -34
- package/docs/TopLevel/global.md +0 -474
- package/docs/dw_campaign/ABTest.md +0 -47
- package/docs/dw_campaign/ABTestMgr.md +0 -70
- package/docs/dw_campaign/ABTestSegment.md +0 -96
- package/docs/dw_campaign/AmountDiscount.md +0 -51
- package/docs/dw_campaign/ApproachingDiscount.md +0 -124
- package/docs/dw_campaign/BonusChoiceDiscount.md +0 -146
- package/docs/dw_campaign/BonusDiscount.md +0 -48
- package/docs/dw_campaign/Campaign.md +0 -365
- package/docs/dw_campaign/CampaignMgr.md +0 -395
- package/docs/dw_campaign/CampaignStatusCodes.md +0 -48
- package/docs/dw_campaign/Coupon.md +0 -310
- package/docs/dw_campaign/CouponMgr.md +0 -144
- package/docs/dw_campaign/CouponRedemption.md +0 -94
- package/docs/dw_campaign/CouponStatusCodes.md +0 -86
- package/docs/dw_campaign/Discount.md +0 -226
- package/docs/dw_campaign/DiscountPlan.md +0 -282
- package/docs/dw_campaign/FixedPriceDiscount.md +0 -52
- package/docs/dw_campaign/FixedPriceShippingDiscount.md +0 -52
- package/docs/dw_campaign/FreeDiscount.md +0 -17
- package/docs/dw_campaign/FreeShippingDiscount.md +0 -17
- package/docs/dw_campaign/PercentageDiscount.md +0 -52
- package/docs/dw_campaign/PercentageOptionDiscount.md +0 -48
- package/docs/dw_campaign/PriceBookPriceDiscount.md +0 -47
- package/docs/dw_campaign/Promotion.md +0 -874
- package/docs/dw_campaign/PromotionMgr.md +0 -386
- package/docs/dw_campaign/PromotionPlan.md +0 -330
- package/docs/dw_campaign/SlotContent.md +0 -144
- package/docs/dw_campaign/SourceCodeGroup.md +0 -72
- package/docs/dw_campaign/SourceCodeInfo.md +0 -144
- package/docs/dw_campaign/SourceCodeStatusCodes.md +0 -36
- package/docs/dw_campaign/TotalFixedPriceDiscount.md +0 -47
- package/docs/dw_catalog/Catalog.md +0 -122
- package/docs/dw_catalog/CatalogMgr.md +0 -182
- package/docs/dw_catalog/Category.md +0 -1308
- package/docs/dw_catalog/CategoryAssignment.md +0 -192
- package/docs/dw_catalog/CategoryLink.md +0 -126
- package/docs/dw_catalog/PriceBook.md +0 -242
- package/docs/dw_catalog/PriceBookMgr.md +0 -204
- package/docs/dw_catalog/Product.md +0 -2593
- package/docs/dw_catalog/ProductActiveData.md +0 -1275
- package/docs/dw_catalog/ProductAttributeModel.md +0 -277
- package/docs/dw_catalog/ProductAvailabilityLevels.md +0 -142
- package/docs/dw_catalog/ProductAvailabilityModel.md +0 -380
- package/docs/dw_catalog/ProductInventoryList.md +0 -140
- package/docs/dw_catalog/ProductInventoryMgr.md +0 -117
- package/docs/dw_catalog/ProductInventoryRecord.md +0 -563
- package/docs/dw_catalog/ProductLink.md +0 -144
- package/docs/dw_catalog/ProductMgr.md +0 -138
- package/docs/dw_catalog/ProductOption.md +0 -214
- package/docs/dw_catalog/ProductOptionModel.md +0 -246
- package/docs/dw_catalog/ProductOptionValue.md +0 -123
- package/docs/dw_catalog/ProductPriceInfo.md +0 -172
- package/docs/dw_catalog/ProductPriceModel.md +0 -745
- package/docs/dw_catalog/ProductPriceTable.md +0 -134
- package/docs/dw_catalog/ProductSearchHit.md +0 -581
- package/docs/dw_catalog/ProductSearchModel.md +0 -2018
- package/docs/dw_catalog/ProductSearchRefinementDefinition.md +0 -97
- package/docs/dw_catalog/ProductSearchRefinementValue.md +0 -73
- package/docs/dw_catalog/ProductSearchRefinements.md +0 -216
- package/docs/dw_catalog/ProductVariationAttribute.md +0 -100
- package/docs/dw_catalog/ProductVariationAttributeValue.md +0 -238
- package/docs/dw_catalog/ProductVariationModel.md +0 -849
- package/docs/dw_catalog/Recommendation.md +0 -314
- package/docs/dw_catalog/SearchModel.md +0 -901
- package/docs/dw_catalog/SearchRefinementDefinition.md +0 -146
- package/docs/dw_catalog/SearchRefinementValue.md +0 -185
- package/docs/dw_catalog/SearchRefinements.md +0 -180
- package/docs/dw_catalog/SortingOption.md +0 -120
- package/docs/dw_catalog/SortingRule.md +0 -47
- package/docs/dw_catalog/Store.md +0 -562
- package/docs/dw_catalog/StoreGroup.md +0 -96
- package/docs/dw_catalog/StoreInventoryFilter.md +0 -74
- package/docs/dw_catalog/StoreInventoryFilterValue.md +0 -74
- package/docs/dw_catalog/StoreMgr.md +0 -236
- package/docs/dw_catalog/Variant.md +0 -859
- package/docs/dw_catalog/VariationGroup.md +0 -792
- package/docs/dw_content/Content.md +0 -534
- package/docs/dw_content/ContentMgr.md +0 -166
- package/docs/dw_content/ContentSearchModel.md +0 -682
- package/docs/dw_content/ContentSearchRefinementDefinition.md +0 -49
- package/docs/dw_content/ContentSearchRefinementValue.md +0 -17
- package/docs/dw_content/ContentSearchRefinements.md +0 -208
- package/docs/dw_content/Folder.md +0 -467
- package/docs/dw_content/Library.md +0 -121
- package/docs/dw_content/MarkupText.md +0 -88
- package/docs/dw_content/MediaFile.md +0 -317
- package/docs/dw_crypto/CertificateRef.md +0 -42
- package/docs/dw_crypto/CertificateUtils.md +0 -187
- package/docs/dw_crypto/Cipher.md +0 -530
- package/docs/dw_crypto/Encoding.md +0 -220
- package/docs/dw_crypto/JWE.md +0 -224
- package/docs/dw_crypto/JWEHeader.md +0 -172
- package/docs/dw_crypto/JWS.md +0 -264
- package/docs/dw_crypto/JWSHeader.md +0 -148
- package/docs/dw_crypto/KeyRef.md +0 -44
- package/docs/dw_crypto/Mac.md +0 -139
- package/docs/dw_crypto/MessageDigest.md +0 -175
- package/docs/dw_crypto/SecureRandom.md +0 -148
- package/docs/dw_crypto/Signature.md +0 -252
- package/docs/dw_crypto/WeakCipher.md +0 -538
- package/docs/dw_crypto/WeakMac.md +0 -121
- package/docs/dw_crypto/WeakMessageDigest.md +0 -163
- package/docs/dw_crypto/WeakSignature.md +0 -242
- package/docs/dw_crypto/X509Certificate.md +0 -193
- package/docs/dw_customer/AddressBook.md +0 -163
- package/docs/dw_customer/AgentUserMgr.md +0 -83
- package/docs/dw_customer/AgentUserStatusCodes.md +0 -96
- package/docs/dw_customer/AuthenticationStatus.md +0 -138
- package/docs/dw_customer/Credentials.md +0 -494
- package/docs/dw_customer/Customer.md +0 -571
- package/docs/dw_customer/CustomerActiveData.md +0 -552
- package/docs/dw_customer/CustomerAddress.md +0 -852
- package/docs/dw_customer/CustomerCDPData.md +0 -70
- package/docs/dw_customer/CustomerContextMgr.md +0 -64
- package/docs/dw_customer/CustomerGroup.md +0 -134
- package/docs/dw_customer/CustomerList.md +0 -71
- package/docs/dw_customer/CustomerMgr.md +0 -735
- package/docs/dw_customer/CustomerPasswordConstraints.md +0 -142
- package/docs/dw_customer/CustomerPaymentInstrument.md +0 -125
- package/docs/dw_customer/CustomerStatusCodes.md +0 -30
- package/docs/dw_customer/EncryptedObject.md +0 -18
- package/docs/dw_customer/ExternalProfile.md +0 -160
- package/docs/dw_customer/OrderHistory.md +0 -111
- package/docs/dw_customer/ProductList.md +0 -1000
- package/docs/dw_customer/ProductListItem.md +0 -504
- package/docs/dw_customer/ProductListItemPurchase.md +0 -145
- package/docs/dw_customer/ProductListMgr.md +0 -234
- package/docs/dw_customer/ProductListRegistrant.md +0 -193
- package/docs/dw_customer/Profile.md +0 -1128
- package/docs/dw_customer/Wallet.md +0 -118
- package/docs/dw_extensions.applepay/ApplePayHookResult.md +0 -209
- package/docs/dw_extensions.applepay/ApplePayHooks.md +0 -255
- package/docs/dw_extensions.facebook/FacebookFeedHooks.md +0 -47
- package/docs/dw_extensions.facebook/FacebookProduct.md +0 -1621
- package/docs/dw_extensions.paymentrequest/PaymentRequestHookResult.md +0 -159
- package/docs/dw_extensions.paymentrequest/PaymentRequestHooks.md +0 -160
- package/docs/dw_extensions.payments/SalesforceBancontactPaymentDetails.md +0 -79
- package/docs/dw_extensions.payments/SalesforceCardPaymentDetails.md +0 -103
- package/docs/dw_extensions.payments/SalesforceEpsPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceIdealPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceKlarnaPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforcePayPalOrder.md +0 -246
- package/docs/dw_extensions.payments/SalesforcePayPalOrderAddress.md +0 -191
- package/docs/dw_extensions.payments/SalesforcePayPalOrderPayer.md +0 -118
- package/docs/dw_extensions.payments/SalesforcePayPalPaymentDetails.md +0 -79
- package/docs/dw_extensions.payments/SalesforcePaymentDetails.md +0 -57
- package/docs/dw_extensions.payments/SalesforcePaymentIntent.md +0 -281
- package/docs/dw_extensions.payments/SalesforcePaymentMethod.md +0 -346
- package/docs/dw_extensions.payments/SalesforcePaymentRequest.md +0 -784
- package/docs/dw_extensions.payments/SalesforcePaymentsHooks.md +0 -45
- package/docs/dw_extensions.payments/SalesforcePaymentsMgr.md +0 -634
- package/docs/dw_extensions.payments/SalesforcePaymentsSiteConfiguration.md +0 -95
- package/docs/dw_extensions.payments/SalesforceSepaDebitPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceVenmoPaymentDetails.md +0 -79
- package/docs/dw_extensions.pinterest/PinterestAvailability.md +0 -86
- package/docs/dw_extensions.pinterest/PinterestFeedHooks.md +0 -69
- package/docs/dw_extensions.pinterest/PinterestOrder.md +0 -232
- package/docs/dw_extensions.pinterest/PinterestOrderHooks.md +0 -45
- package/docs/dw_extensions.pinterest/PinterestProduct.md +0 -850
- package/docs/dw_io/CSVStreamReader.md +0 -80
- package/docs/dw_io/CSVStreamWriter.md +0 -60
- package/docs/dw_io/File.md +0 -614
- package/docs/dw_io/FileReader.md +0 -41
- package/docs/dw_io/FileWriter.md +0 -103
- package/docs/dw_io/InputStream.md +0 -34
- package/docs/dw_io/OutputStream.md +0 -34
- package/docs/dw_io/PrintWriter.md +0 -71
- package/docs/dw_io/RandomAccessFileReader.md +0 -173
- package/docs/dw_io/Reader.md +0 -274
- package/docs/dw_io/StringWriter.md +0 -81
- package/docs/dw_io/Writer.md +0 -92
- package/docs/dw_io/XMLIndentingStreamWriter.md +0 -112
- package/docs/dw_io/XMLStreamConstants.md +0 -114
- package/docs/dw_io/XMLStreamReader.md +0 -1043
- package/docs/dw_io/XMLStreamWriter.md +0 -572
- package/docs/dw_job/JobExecution.md +0 -107
- package/docs/dw_job/JobStepExecution.md +0 -151
- package/docs/dw_net/FTPClient.md +0 -699
- package/docs/dw_net/FTPFileInfo.md +0 -122
- package/docs/dw_net/HTTPClient.md +0 -831
- package/docs/dw_net/HTTPClientLoggingConfig.md +0 -296
- package/docs/dw_net/HTTPRequestPart.md +0 -206
- package/docs/dw_net/Mail.md +0 -551
- package/docs/dw_net/SFTPClient.md +0 -591
- package/docs/dw_net/SFTPFileInfo.md +0 -122
- package/docs/dw_net/WebDAVClient.md +0 -715
- package/docs/dw_net/WebDAVFileInfo.md +0 -184
- package/docs/dw_object/ActiveData.md +0 -75
- package/docs/dw_object/CustomAttributes.md +0 -16
- package/docs/dw_object/CustomObject.md +0 -73
- package/docs/dw_object/CustomObjectMgr.md +0 -291
- package/docs/dw_object/Extensible.md +0 -64
- package/docs/dw_object/ExtensibleObject.md +0 -68
- package/docs/dw_object/Note.md +0 -121
- package/docs/dw_object/ObjectAttributeDefinition.md +0 -481
- package/docs/dw_object/ObjectAttributeGroup.md +0 -170
- package/docs/dw_object/ObjectAttributeValueDefinition.md +0 -72
- package/docs/dw_object/ObjectTypeDefinition.md +0 -216
- package/docs/dw_object/PersistentObject.md +0 -94
- package/docs/dw_object/SimpleExtensible.md +0 -46
- package/docs/dw_object/SystemObjectMgr.md +0 -153
- package/docs/dw_order/AbstractItem.md +0 -244
- package/docs/dw_order/AbstractItemCtnr.md +0 -240
- package/docs/dw_order/Appeasement.md +0 -367
- package/docs/dw_order/AppeasementItem.md +0 -90
- package/docs/dw_order/Basket.md +0 -362
- package/docs/dw_order/BasketMgr.md +0 -418
- package/docs/dw_order/BonusDiscountLineItem.md +0 -248
- package/docs/dw_order/CouponLineItem.md +0 -272
- package/docs/dw_order/CreateAgentBasketLimitExceededException.md +0 -18
- package/docs/dw_order/CreateBasketFromOrderException.md +0 -26
- package/docs/dw_order/CreateCouponLineItemException.md +0 -26
- package/docs/dw_order/CreateOrderException.md +0 -18
- package/docs/dw_order/CreateTemporaryBasketLimitExceededException.md +0 -18
- package/docs/dw_order/GiftCertificate.md +0 -569
- package/docs/dw_order/GiftCertificateLineItem.md +0 -324
- package/docs/dw_order/GiftCertificateMgr.md +0 -197
- package/docs/dw_order/GiftCertificateStatusCodes.md +0 -60
- package/docs/dw_order/Invoice.md +0 -418
- package/docs/dw_order/InvoiceItem.md +0 -222
- package/docs/dw_order/LineItem.md +0 -532
- package/docs/dw_order/LineItemCtnr.md +0 -2431
- package/docs/dw_order/Order.md +0 -2567
- package/docs/dw_order/OrderAddress.md +0 -807
- package/docs/dw_order/OrderItem.md +0 -536
- package/docs/dw_order/OrderMgr.md +0 -535
- package/docs/dw_order/OrderPaymentInstrument.md +0 -220
- package/docs/dw_order/OrderProcessStatusCodes.md +0 -84
- package/docs/dw_order/PaymentCard.md +0 -217
- package/docs/dw_order/PaymentInstrument.md +0 -1462
- package/docs/dw_order/PaymentMethod.md +0 -242
- package/docs/dw_order/PaymentMgr.md +0 -117
- package/docs/dw_order/PaymentProcessor.md +0 -70
- package/docs/dw_order/PaymentStatusCodes.md +0 -42
- package/docs/dw_order/PaymentTransaction.md +0 -328
- package/docs/dw_order/PriceAdjustment.md +0 -640
- package/docs/dw_order/PriceAdjustmentLimitTypes.md +0 -38
- package/docs/dw_order/ProductLineItem.md +0 -1821
- package/docs/dw_order/ProductShippingCost.md +0 -96
- package/docs/dw_order/ProductShippingLineItem.md +0 -326
- package/docs/dw_order/ProductShippingModel.md +0 -125
- package/docs/dw_order/Return.md +0 -360
- package/docs/dw_order/ReturnCase.md +0 -400
- package/docs/dw_order/ReturnCaseItem.md +0 -373
- package/docs/dw_order/ReturnItem.md +0 -362
- package/docs/dw_order/Shipment.md +0 -1251
- package/docs/dw_order/ShipmentShippingCost.md +0 -46
- package/docs/dw_order/ShipmentShippingModel.md +0 -146
- package/docs/dw_order/ShippingLineItem.md +0 -278
- package/docs/dw_order/ShippingLocation.md +0 -366
- package/docs/dw_order/ShippingMethod.md +0 -266
- package/docs/dw_order/ShippingMgr.md +0 -158
- package/docs/dw_order/ShippingOrder.md +0 -561
- package/docs/dw_order/ShippingOrderItem.md +0 -355
- package/docs/dw_order/SumItem.md +0 -147
- package/docs/dw_order/TaxGroup.md +0 -143
- package/docs/dw_order/TaxItem.md +0 -74
- package/docs/dw_order/TaxMgr.md +0 -227
- package/docs/dw_order/TrackingInfo.md +0 -312
- package/docs/dw_order/TrackingRef.md +0 -113
- package/docs/dw_order.hooks/BasketMergeHooks.md +0 -42
- package/docs/dw_order.hooks/CalculateHooks.md +0 -77
- package/docs/dw_order.hooks/OrderHooks.md +0 -41
- package/docs/dw_order.hooks/PaymentHooks.md +0 -180
- package/docs/dw_order.hooks/ReturnHooks.md +0 -135
- package/docs/dw_order.hooks/ShippingOrderHooks.md +0 -245
- package/docs/dw_rpc/SOAPUtil.md +0 -465
- package/docs/dw_rpc/Stub.md +0 -289
- package/docs/dw_rpc/WebReference.md +0 -83
- package/docs/dw_suggest/BrandSuggestions.md +0 -17
- package/docs/dw_suggest/CategorySuggestions.md +0 -53
- package/docs/dw_suggest/ContentSuggestions.md +0 -53
- package/docs/dw_suggest/CustomSuggestions.md +0 -17
- package/docs/dw_suggest/ProductSuggestions.md +0 -53
- package/docs/dw_suggest/SearchPhraseSuggestions.md +0 -117
- package/docs/dw_suggest/SuggestModel.md +0 -403
- package/docs/dw_suggest/SuggestedCategory.md +0 -46
- package/docs/dw_suggest/SuggestedContent.md +0 -46
- package/docs/dw_suggest/SuggestedPhrase.md +0 -70
- package/docs/dw_suggest/SuggestedProduct.md +0 -47
- package/docs/dw_suggest/SuggestedTerm.md +0 -143
- package/docs/dw_suggest/SuggestedTerms.md +0 -132
- package/docs/dw_suggest/Suggestions.md +0 -179
- package/docs/dw_svc/FTPService.md +0 -118
- package/docs/dw_svc/FTPServiceDefinition.md +0 -69
- package/docs/dw_svc/HTTPFormService.md +0 -18
- package/docs/dw_svc/HTTPFormServiceDefinition.md +0 -18
- package/docs/dw_svc/HTTPService.md +0 -415
- package/docs/dw_svc/HTTPServiceDefinition.md +0 -303
- package/docs/dw_svc/LocalServiceRegistry.md +0 -43
- package/docs/dw_svc/Result.md +0 -303
- package/docs/dw_svc/SOAPService.md +0 -115
- package/docs/dw_svc/SOAPServiceDefinition.md +0 -17
- package/docs/dw_svc/Service.md +0 -295
- package/docs/dw_svc/ServiceCallback.md +0 -268
- package/docs/dw_svc/ServiceConfig.md +0 -120
- package/docs/dw_svc/ServiceCredential.md +0 -156
- package/docs/dw_svc/ServiceDefinition.md +0 -176
- package/docs/dw_svc/ServiceProfile.md +0 -168
- package/docs/dw_svc/ServiceRegistry.md +0 -109
- package/docs/dw_system/AgentUserStatusCodes.md +0 -21
- package/docs/dw_system/Cache.md +0 -102
- package/docs/dw_system/CacheMgr.md +0 -42
- package/docs/dw_system/HookMgr.md +0 -66
- package/docs/dw_system/InternalObject.md +0 -56
- package/docs/dw_system/JobProcessMonitor.md +0 -124
- package/docs/dw_system/Log.md +0 -237
- package/docs/dw_system/LogNDC.md +0 -88
- package/docs/dw_system/Logger.md +0 -263
- package/docs/dw_system/OrganizationPreferences.md +0 -18
- package/docs/dw_system/Pipeline.md +0 -73
- package/docs/dw_system/PipelineDictionary.md +0 -16
- package/docs/dw_system/RESTErrorResponse.md +0 -66
- package/docs/dw_system/RESTResponseMgr.md +0 -258
- package/docs/dw_system/RESTSuccessResponse.md +0 -39
- package/docs/dw_system/RemoteInclude.md +0 -74
- package/docs/dw_system/Request.md +0 -839
- package/docs/dw_system/RequestHooks.md +0 -59
- package/docs/dw_system/Response.md +0 -522
- package/docs/dw_system/SearchStatus.md +0 -151
- package/docs/dw_system/Session.md +0 -476
- package/docs/dw_system/Site.md +0 -585
- package/docs/dw_system/SitePreferences.md +0 -49
- package/docs/dw_system/Status.md +0 -273
- package/docs/dw_system/StatusItem.md +0 -273
- package/docs/dw_system/System.md +0 -200
- package/docs/dw_system/Transaction.md +0 -84
- package/docs/dw_util/ArrayList.md +0 -50
- package/docs/dw_util/Assert.md +0 -391
- package/docs/dw_util/BigInteger.md +0 -326
- package/docs/dw_util/Bytes.md +0 -252
- package/docs/dw_util/Calendar.md +0 -921
- package/docs/dw_util/Collection.md +0 -338
- package/docs/dw_util/Currency.md +0 -163
- package/docs/dw_util/DateUtils.md +0 -86
- package/docs/dw_util/Decimal.md +0 -438
- package/docs/dw_util/FilteringCollection.md +0 -93
- package/docs/dw_util/Geolocation.md +0 -271
- package/docs/dw_util/HashMap.md +0 -43
- package/docs/dw_util/HashSet.md +0 -46
- package/docs/dw_util/Iterator.md +0 -97
- package/docs/dw_util/LinkedHashMap.md +0 -43
- package/docs/dw_util/LinkedHashSet.md +0 -46
- package/docs/dw_util/List.md +0 -519
- package/docs/dw_util/Locale.md +0 -267
- package/docs/dw_util/Map.md +0 -313
- package/docs/dw_util/MapEntry.md +0 -70
- package/docs/dw_util/MappingKey.md +0 -76
- package/docs/dw_util/MappingMgr.md +0 -122
- package/docs/dw_util/PropertyComparator.md +0 -51
- package/docs/dw_util/SecureEncoder.md +0 -350
- package/docs/dw_util/SecureFilter.md +0 -350
- package/docs/dw_util/SeekableIterator.md +0 -176
- package/docs/dw_util/Set.md +0 -19
- package/docs/dw_util/SortedMap.md +0 -148
- package/docs/dw_util/SortedSet.md +0 -151
- package/docs/dw_util/StringUtils.md +0 -753
- package/docs/dw_util/Template.md +0 -88
- package/docs/dw_util/UUIDUtils.md +0 -38
- package/docs/dw_value/EnumValue.md +0 -92
- package/docs/dw_value/MimeEncodedText.md +0 -103
- package/docs/dw_value/Money.md +0 -610
- package/docs/dw_value/Quantity.md +0 -376
- package/docs/dw_web/CSRFProtection.md +0 -83
- package/docs/dw_web/ClickStream.md +0 -157
- package/docs/dw_web/ClickStreamEntry.md +0 -289
- package/docs/dw_web/Cookie.md +0 -396
- package/docs/dw_web/Cookies.md +0 -46
- package/docs/dw_web/Form.md +0 -74
- package/docs/dw_web/FormAction.md +0 -199
- package/docs/dw_web/FormElement.md +0 -220
- package/docs/dw_web/FormElementValidationResult.md +0 -157
- package/docs/dw_web/FormField.md +0 -603
- package/docs/dw_web/FormFieldOption.md +0 -238
- package/docs/dw_web/FormFieldOptions.md +0 -42
- package/docs/dw_web/FormGroup.md +0 -199
- package/docs/dw_web/FormList.md +0 -126
- package/docs/dw_web/FormListItem.md +0 -48
- package/docs/dw_web/Forms.md +0 -16
- package/docs/dw_web/HttpParameter.md +0 -513
- package/docs/dw_web/HttpParameterMap.md +0 -185
- package/docs/dw_web/LoopIterator.md +0 -261
- package/docs/dw_web/PageMetaData.md +0 -230
- package/docs/dw_web/PageMetaTag.md +0 -142
- package/docs/dw_web/PagingModel.md +0 -389
- package/docs/dw_web/Resource.md +0 -126
- package/docs/dw_web/URL.md +0 -213
- package/docs/dw_web/URLAction.md +0 -26
- package/docs/dw_web/URLParameter.md +0 -22
- package/docs/dw_web/URLRedirect.md +0 -71
- package/docs/dw_web/URLRedirectMgr.md +0 -73
- package/docs/dw_web/URLUtils.md +0 -1264
- package/docs/isml/isactivedatacontext.md +0 -382
- package/docs/isml/isactivedatahead.md +0 -566
- package/docs/isml/isanalyticsoff.md +0 -537
- package/docs/isml/isapplepay.md +0 -667
- package/docs/isml/isbreak.md +0 -687
- package/docs/isml/isbuynow.md +0 -682
- package/docs/isml/iscache.md +0 -802
- package/docs/isml/iscomment.md +0 -794
- package/docs/isml/iscomponent.md +0 -797
- package/docs/isml/iscontent.md +0 -594
- package/docs/isml/iscontinue.md +0 -563
- package/docs/isml/iscookie.md +0 -798
- package/docs/isml/isdecorate.md +0 -818
- package/docs/isml/isif.md +0 -737
- package/docs/isml/isinclude.md +0 -874
- package/docs/isml/isloop.md +0 -377
- package/docs/isml/ismodule.md +0 -844
- package/docs/isml/isnext.md +0 -672
- package/docs/isml/isobject.md +0 -760
- package/docs/isml/ispayment.md +0 -577
- package/docs/isml/ispaymentmessages.md +0 -664
- package/docs/isml/isprint.md +0 -875
- package/docs/isml/isredirect.md +0 -716
- package/docs/isml/isremove.md +0 -725
- package/docs/isml/isreplace.md +0 -783
- package/docs/isml/isscript.md +0 -859
- package/docs/isml/isselect.md +0 -908
- package/docs/isml/isset.md +0 -585
- package/docs/isml/isslot.md +0 -824
- package/docs/isml/isstatus.md +0 -711
- package/docs/sfra/account.md +0 -145
- package/docs/sfra/address.md +0 -84
- package/docs/sfra/billing.md +0 -90
- package/docs/sfra/cart.md +0 -134
- package/docs/sfra/categories.md +0 -124
- package/docs/sfra/content.md +0 -133
- package/docs/sfra/locale.md +0 -126
- package/docs/sfra/order.md +0 -219
- package/docs/sfra/payment.md +0 -131
- package/docs/sfra/price-default.md +0 -118
- package/docs/sfra/price-range.md +0 -77
- package/docs/sfra/price-tiered.md +0 -117
- package/docs/sfra/product-bundle.md +0 -164
- package/docs/sfra/product-full.md +0 -179
- package/docs/sfra/product-line-items.md +0 -147
- package/docs/sfra/product-search.md +0 -245
- package/docs/sfra/product-tile.md +0 -95
- package/docs/sfra/querystring.md +0 -240
- package/docs/sfra/render.md +0 -354
- package/docs/sfra/request.md +0 -210
- package/docs/sfra/response.md +0 -391
- package/docs/sfra/server.md +0 -375
- package/docs/sfra/shipping.md +0 -181
- package/docs/sfra/store.md +0 -145
- package/docs/sfra/stores.md +0 -190
- package/docs/sfra/totals.md +0 -184
- package/docs-site-v2/.vitepress/config.mts +0 -190
- package/docs-site-v2/.vitepress/theme/components/AssistantTabs.vue +0 -96
- package/docs-site-v2/.vitepress/theme/components/Callout.vue +0 -10
- package/docs-site-v2/.vitepress/theme/components/Collapsible.vue +0 -14
- package/docs-site-v2/.vitepress/theme/components/DwJsonBuilder.vue +0 -82
- package/docs-site-v2/.vitepress/theme/components/HomeSections.vue +0 -552
- package/docs-site-v2/.vitepress/theme/components/InstructionFilesTabs.vue +0 -87
- package/docs-site-v2/.vitepress/theme/components/ModeTabs.vue +0 -70
- package/docs-site-v2/.vitepress/theme/components/NewcomerCTA.vue +0 -14
- package/docs-site-v2/.vitepress/theme/components/QuickStartCards.vue +0 -20
- package/docs-site-v2/.vitepress/theme/components/QuickStartHero.vue +0 -20
- package/docs-site-v2/.vitepress/theme/components/SkillsList.vue +0 -48
- package/docs-site-v2/.vitepress/theme/components/ToolExplorer.vue +0 -85
- package/docs-site-v2/.vitepress/theme/custom.css +0 -1373
- package/docs-site-v2/.vitepress/theme/index.ts +0 -39
- package/docs-site-v2/data/skills.ts +0 -147
- package/docs-site-v2/data/tools.ts +0 -490
- package/docs-site-v2/development/index.md +0 -151
- package/docs-site-v2/examples/index.md +0 -333
- package/docs-site-v2/features/index.md +0 -144
- package/docs-site-v2/guide/ai-interfaces.md +0 -58
- package/docs-site-v2/guide/configuration.md +0 -208
- package/docs-site-v2/guide/index.md +0 -50
- package/docs-site-v2/index.md +0 -32
- package/docs-site-v2/package-lock.json +0 -2511
- package/docs-site-v2/package.json +0 -15
- package/docs-site-v2/public/404.html +0 -15
- package/docs-site-v2/public/android-chrome-192x192.png +0 -0
- package/docs-site-v2/public/android-chrome-512x512.png +0 -0
- package/docs-site-v2/public/apple-touch-icon.png +0 -0
- package/docs-site-v2/public/explain-product-pricing-methods-no-mcp.png +0 -0
- package/docs-site-v2/public/explain-product-pricing-methods.png +0 -0
- package/docs-site-v2/public/favicon-16x16.png +0 -0
- package/docs-site-v2/public/favicon-32x32.png +0 -0
- package/docs-site-v2/public/favicon.ico +0 -0
- package/docs-site-v2/public/index.css +0 -4174
- package/docs-site-v2/public/llms.txt +0 -44
- package/docs-site-v2/public/logo-dark.svg +0 -8
- package/docs-site-v2/public/logo.svg +0 -8
- package/docs-site-v2/public/robots.txt +0 -20
- package/docs-site-v2/public/site.webmanifest +0 -50
- package/docs-site-v2/public/sitemap.xml +0 -90
- package/docs-site-v2/script-debugger/index.md +0 -105
- package/docs-site-v2/scripts/generate-llms.js +0 -71
- package/docs-site-v2/scripts/generate-sitemap.js +0 -97
- package/docs-site-v2/security/index.md +0 -115
- package/docs-site-v2/skills/index.md +0 -40
- package/docs-site-v2/tools/index.md +0 -36
- package/docs-site-v2/troubleshooting/index.md +0 -204
- package/eslint.config.js +0 -139
- package/jest.config.js +0 -27
- package/memories/repo/docs-site-v2-build.json +0 -11
- package/scripts/convert-docs.js +0 -633
- package/scripts/validate-server-json.js +0 -68
- package/server.json +0 -20
- package/src/clients/agent-instructions-client.ts +0 -370
- package/src/clients/base/abstract-documentation-client.ts +0 -405
- package/src/clients/base/http-client.ts +0 -152
- package/src/clients/base/oauth-token.ts +0 -164
- package/src/clients/base/ocapi-auth-client.ts +0 -133
- package/src/clients/cartridge/cartridge-generation-client.ts +0 -302
- package/src/clients/cartridge/cartridge-structure.ts +0 -37
- package/src/clients/cartridge/cartridge-templates.ts +0 -246
- package/src/clients/cartridge/index.ts +0 -6
- package/src/clients/docs/class-content-parser.ts +0 -308
- package/src/clients/docs/class-name-resolver.ts +0 -99
- package/src/clients/docs/documentation-scanner.ts +0 -255
- package/src/clients/docs/index.ts +0 -16
- package/src/clients/docs/referenced-types-extractor.ts +0 -92
- package/src/clients/docs-client.ts +0 -393
- package/src/clients/isml-client.ts +0 -353
- package/src/clients/log-client.ts +0 -19
- package/src/clients/ocapi/code-versions-client.ts +0 -54
- package/src/clients/ocapi/site-preferences-client.ts +0 -106
- package/src/clients/ocapi/system-objects-client.ts +0 -148
- package/src/clients/ocapi-client.ts +0 -53
- package/src/clients/script-debugger/index.ts +0 -5
- package/src/clients/script-debugger/script-debugger-client.ts +0 -754
- package/src/clients/sfra-client.ts +0 -339
- package/src/config/configuration-factory.ts +0 -201
- package/src/config/dw-json-loader.ts +0 -248
- package/src/config/workspace-roots.ts +0 -540
- package/src/constants/index.ts +0 -1
- package/src/core/handlers/abstract-client-handler.ts +0 -85
- package/src/core/handlers/agent-instructions-handler.ts +0 -48
- package/src/core/handlers/base-handler.ts +0 -172
- package/src/core/handlers/cartridge-handler.ts +0 -38
- package/src/core/handlers/client-factory.ts +0 -140
- package/src/core/handlers/code-version-handler.ts +0 -43
- package/src/core/handlers/docs-handler.ts +0 -19
- package/src/core/handlers/isml-handler.ts +0 -19
- package/src/core/handlers/job-log-handler.ts +0 -39
- package/src/core/handlers/log-handler.ts +0 -39
- package/src/core/handlers/script-debugger-handler.ts +0 -46
- package/src/core/handlers/sfra-handler.ts +0 -23
- package/src/core/handlers/simple-client-handler.ts +0 -78
- package/src/core/handlers/system-object-handler.ts +0 -43
- package/src/core/handlers/validation-helpers.ts +0 -206
- package/src/core/instruction-advisor.ts +0 -122
- package/src/core/server.ts +0 -374
- package/src/core/tool-definitions.ts +0 -30
- package/src/core/tool-schemas/agent-instruction-tools.ts +0 -72
- package/src/core/tool-schemas/cartridge-tools.ts +0 -29
- package/src/core/tool-schemas/code-version-tools.ts +0 -28
- package/src/core/tool-schemas/documentation-tools.ts +0 -104
- package/src/core/tool-schemas/index.ts +0 -27
- package/src/core/tool-schemas/isml-tools.ts +0 -89
- package/src/core/tool-schemas/log-tools.ts +0 -196
- package/src/core/tool-schemas/script-debugger-tools.ts +0 -83
- package/src/core/tool-schemas/sfra-tools.ts +0 -65
- package/src/core/tool-schemas/shared-schemas.ts +0 -158
- package/src/core/tool-schemas/system-object-tools.ts +0 -127
- package/src/index.ts +0 -20
- package/src/main.ts +0 -161
- package/src/services/file-system-service.ts +0 -117
- package/src/services/index.ts +0 -11
- package/src/services/path-service.ts +0 -124
- package/src/tool-configs/agent-instructions-tool-config.ts +0 -83
- package/src/tool-configs/cartridge-tool-config.ts +0 -41
- package/src/tool-configs/code-version-tool-config.ts +0 -37
- package/src/tool-configs/docs-tool-config.ts +0 -103
- package/src/tool-configs/isml-tool-config.ts +0 -87
- package/src/tool-configs/job-log-tool-config.ts +0 -119
- package/src/tool-configs/log-tool-config.ts +0 -110
- package/src/tool-configs/script-debugger-tool-config.ts +0 -69
- package/src/tool-configs/sfra-tool-config.ts +0 -74
- package/src/tool-configs/system-object-tool-config.ts +0 -142
- package/src/types/types.ts +0 -125
- package/src/utils/cache.ts +0 -291
- package/src/utils/category-utils.ts +0 -70
- package/src/utils/log-tool-constants.ts +0 -95
- package/src/utils/logger.ts +0 -260
- package/src/utils/markdown-utils.ts +0 -280
- package/src/utils/ocapi-url-builder.ts +0 -48
- package/src/utils/path-resolver.ts +0 -69
- package/src/utils/path-validation.ts +0 -113
- package/src/utils/query-builder.ts +0 -84
- package/src/utils/utils.ts +0 -139
- package/src/utils/validator.ts +0 -162
- package/tests/__mocks__/docs-client.ts +0 -8
- package/tests/__mocks__/src/clients/base/http-client.js +0 -43
- package/tests/__mocks__/webdav.js +0 -14
- package/tests/base-handler.test.ts +0 -527
- package/tests/base-http-client.test.ts +0 -311
- package/tests/cache.test.ts +0 -453
- package/tests/cartridge-handler.test.ts +0 -290
- package/tests/class-content-parser.test.ts +0 -629
- package/tests/class-name-resolver.test.ts +0 -365
- package/tests/client-factory.test.ts +0 -280
- package/tests/code-version-handler.test.ts +0 -291
- package/tests/code-versions-client.test.ts +0 -156
- package/tests/config.test.ts +0 -285
- package/tests/configuration-factory.test.ts +0 -233
- package/tests/docs-handler.test.ts +0 -359
- package/tests/documentation-scanner.test.ts +0 -755
- package/tests/file-system-service.test.ts +0 -111
- package/tests/isml-client.test.ts +0 -463
- package/tests/isml-handler.test.ts +0 -375
- package/tests/job-log-handler.test.ts +0 -283
- package/tests/log-client.test.ts +0 -768
- package/tests/log-handler.test.ts +0 -365
- package/tests/log-processor.test.ts +0 -243
- package/tests/log-validation.test.ts +0 -149
- package/tests/logger.test.ts +0 -303
- package/tests/mcp/AGENTS.md +0 -162
- package/tests/mcp/README.md +0 -237
- package/tests/mcp/node/activate-code-version-advanced.full-mode.programmatic.test.js +0 -669
- package/tests/mcp/node/code-versions.full-mode.programmatic.test.js +0 -605
- package/tests/mcp/node/evaluate-script.full-mode.programmatic.test.js +0 -387
- package/tests/mcp/node/generate-cartridge-structure.docs-only.programmatic.test.js +0 -644
- package/tests/mcp/node/get-available-sfra-documents.programmatic.test.js +0 -274
- package/tests/mcp/node/get-isml-categories.programmatic.test.js +0 -278
- package/tests/mcp/node/get-isml-element.programmatic.test.js +0 -278
- package/tests/mcp/node/get-isml-elements-by-category.programmatic.test.js +0 -363
- package/tests/mcp/node/get-job-execution-summary.full-mode.programmatic.test.js +0 -432
- package/tests/mcp/node/get-job-log-entries.full-mode.programmatic.test.js +0 -488
- package/tests/mcp/node/get-latest-debug.full-mode.programmatic.test.js +0 -338
- package/tests/mcp/node/get-latest-error.full-mode.programmatic.test.js +0 -255
- package/tests/mcp/node/get-latest-info.full-mode.programmatic.test.js +0 -347
- package/tests/mcp/node/get-latest-job-log-files.full-mode.programmatic.test.js +0 -460
- package/tests/mcp/node/get-latest-warn.full-mode.programmatic.test.js +0 -454
- package/tests/mcp/node/get-log-file-contents.full-mode.programmatic.test.js +0 -381
- package/tests/mcp/node/get-sfcc-class-documentation.docs-only.programmatic.test.js +0 -371
- package/tests/mcp/node/get-sfcc-class-info.docs-only.programmatic.test.js +0 -1032
- package/tests/mcp/node/get-sfra-categories.docs-only.programmatic.test.js +0 -369
- package/tests/mcp/node/get-sfra-document.programmatic.test.js +0 -473
- package/tests/mcp/node/get-sfra-documents-by-category.docs-only.programmatic.test.js +0 -510
- package/tests/mcp/node/get-system-object-definition.full-mode.programmatic.test.js +0 -389
- package/tests/mcp/node/get-system-object-definitions.docs-only.programmatic.test.js +0 -300
- package/tests/mcp/node/get-system-object-definitions.full-mode.programmatic.test.js +0 -387
- package/tests/mcp/node/list-isml-elements.programmatic.test.js +0 -311
- package/tests/mcp/node/list-log-files.full-mode.programmatic.test.js +0 -150
- package/tests/mcp/node/list-sfcc-classes.docs-only.programmatic.test.js +0 -612
- package/tests/mcp/node/search-custom-object-attribute-definitions.full-mode.programmatic.test.js +0 -875
- package/tests/mcp/node/search-isml-elements.programmatic.test.js +0 -325
- package/tests/mcp/node/search-job-logs-by-name.full-mode.programmatic.test.js +0 -330
- package/tests/mcp/node/search-job-logs.full-mode.programmatic.test.js +0 -526
- package/tests/mcp/node/search-logs.full-mode.programmatic.test.js +0 -478
- package/tests/mcp/node/search-sfcc-classes.docs-only.programmatic.test.js +0 -334
- package/tests/mcp/node/search-sfcc-methods.docs-only.programmatic.test.js +0 -487
- package/tests/mcp/node/search-sfra-documentation.docs-only.programmatic.test.js +0 -563
- package/tests/mcp/node/search-site-preferences.full-mode.programmatic.test.js +0 -556
- package/tests/mcp/node/search-system-object-attribute-definitions.full-mode.programmatic.test.js +0 -744
- package/tests/mcp/node/search-system-object-attribute-groups.full-mode.programmatic.test.js +0 -657
- package/tests/mcp/node/summarize-logs.full-mode.programmatic.test.js +0 -357
- package/tests/mcp/node/tools.docs-only.programmatic.test.js +0 -515
- package/tests/mcp/node/tools.full-mode.programmatic.test.js +0 -154
- package/tests/mcp/test-fixtures/dw.json +0 -10
- package/tests/mcp/yaml/activate-code-version.docs-only.test.mcp.yml +0 -318
- package/tests/mcp/yaml/activate-code-version.full-mode.test.mcp.yml +0 -507
- package/tests/mcp/yaml/evaluate-script.full-mode.test.mcp.yml +0 -281
- package/tests/mcp/yaml/get-available-sfra-documents.docs-only.test.mcp.yml +0 -684
- package/tests/mcp/yaml/get-available-sfra-documents.full-mode.test.mcp.yml +0 -684
- package/tests/mcp/yaml/get-code-versions.docs-only.test.mcp.yml +0 -196
- package/tests/mcp/yaml/get-code-versions.full-mode.test.mcp.yml +0 -273
- package/tests/mcp/yaml/get-isml-categories.docs-only.test.mcp.yml +0 -330
- package/tests/mcp/yaml/get-isml-element.docs-only.test.mcp.yml +0 -294
- package/tests/mcp/yaml/get-isml-elements-by-category.docs-only.test.mcp.yml +0 -334
- package/tests/mcp/yaml/get-job-execution-summary.full-mode.test.mcp.yml +0 -148
- package/tests/mcp/yaml/get-job-log-entries.full-mode.test.mcp.yml +0 -284
- package/tests/mcp/yaml/get-latest-debug.full-mode.test.mcp.yml +0 -191
- package/tests/mcp/yaml/get-latest-error.full-mode.test.mcp.yml +0 -195
- package/tests/mcp/yaml/get-latest-info.full-mode.test.mcp.yml +0 -242
- package/tests/mcp/yaml/get-latest-job-log-files.full-mode.test.mcp.yml +0 -189
- package/tests/mcp/yaml/get-latest-warn.full-mode.test.mcp.yml +0 -182
- package/tests/mcp/yaml/get-log-file-contents.full-mode.test.mcp.yml +0 -256
- package/tests/mcp/yaml/get-sfcc-class-documentation.docs-only.test.mcp.yml +0 -2416
- package/tests/mcp/yaml/get-sfcc-class-documentation.full-mode.test.mcp.yml +0 -2416
- package/tests/mcp/yaml/get-sfcc-class-info.docs-only.test.mcp.yml +0 -1225
- package/tests/mcp/yaml/get-sfcc-class-info.full-mode.test.mcp.yml +0 -1225
- package/tests/mcp/yaml/get-sfra-categories.docs-only.test.mcp.yml +0 -452
- package/tests/mcp/yaml/get-sfra-categories.full-mode.test.mcp.yml +0 -452
- package/tests/mcp/yaml/get-sfra-document.docs-only.test.mcp.yml +0 -525
- package/tests/mcp/yaml/get-sfra-document.full-mode.test.mcp.yml +0 -525
- package/tests/mcp/yaml/get-sfra-documents-by-category.docs-only.test.mcp.yml +0 -507
- package/tests/mcp/yaml/get-sfra-documents-by-category.full-mode.test.mcp.yml +0 -507
- package/tests/mcp/yaml/get-system-object-definition.docs-only.test.mcp.yml +0 -208
- package/tests/mcp/yaml/get-system-object-definition.full-mode.test.mcp.yml +0 -191
- package/tests/mcp/yaml/get-system-object-definitions.docs-only.test.mcp.yml +0 -257
- package/tests/mcp/yaml/get-system-object-definitions.full-mode.test.mcp.yml +0 -517
- package/tests/mcp/yaml/get_latest_error.test.mcp.yml +0 -472
- package/tests/mcp/yaml/list-isml-elements.docs-only.test.mcp.yml +0 -212
- package/tests/mcp/yaml/list-log-files.full-mode.test.mcp.yml +0 -89
- package/tests/mcp/yaml/list-sfcc-classes.docs-only.test.mcp.yml +0 -511
- package/tests/mcp/yaml/list-sfcc-classes.full-mode.test.mcp.yml +0 -511
- package/tests/mcp/yaml/search-custom-object-attribute-definitions.docs-only.test.mcp.yml +0 -82
- package/tests/mcp/yaml/search-custom-object-attribute-definitions.test.mcp.yml +0 -387
- package/tests/mcp/yaml/search-isml-elements.docs-only.test.mcp.yml +0 -312
- package/tests/mcp/yaml/search-job-logs-by-name.full-mode.test.mcp.yml +0 -169
- package/tests/mcp/yaml/search-job-logs.full-mode.test.mcp.yml +0 -174
- package/tests/mcp/yaml/search-logs.full-mode.test.mcp.yml +0 -207
- package/tests/mcp/yaml/search-sfcc-classes.docs-only.test.mcp.yml +0 -1157
- package/tests/mcp/yaml/search-sfcc-classes.full-mode.test.mcp.yml +0 -1157
- package/tests/mcp/yaml/search-sfcc-methods.docs-only.test.mcp.yml +0 -723
- package/tests/mcp/yaml/search-sfcc-methods.full-mode.test.mcp.yml +0 -723
- package/tests/mcp/yaml/search-sfra-documentation.docs-only.test.mcp.yml +0 -427
- package/tests/mcp/yaml/search-sfra-documentation.full-mode.test.mcp.yml +0 -427
- package/tests/mcp/yaml/search-site-preferences.docs-only.test.mcp.yml +0 -295
- package/tests/mcp/yaml/search-site-preferences.full-mode.test.mcp.yml +0 -574
- package/tests/mcp/yaml/search-system-object-attribute-definitions.docs-only.test.mcp.yml +0 -168
- package/tests/mcp/yaml/search-system-object-attribute-definitions.full-mode.test.mcp.yml +0 -500
- package/tests/mcp/yaml/search-system-object-attribute-groups.docs-only.test.mcp.yml +0 -278
- package/tests/mcp/yaml/search-system-object-attribute-groups.full-mode.test.mcp.yml +0 -612
- package/tests/mcp/yaml/summarize-logs.full-mode.test.mcp.yml +0 -173
- package/tests/mcp/yaml/tools.docs-only.test.mcp.yml +0 -535
- package/tests/mcp/yaml/tools.full-mode.test.mcp.yml +0 -378
- package/tests/oauth-token.test.ts +0 -725
- package/tests/ocapi-auth-client.test.ts +0 -276
- package/tests/ocapi-client.test.ts +0 -242
- package/tests/path-service.test.ts +0 -96
- package/tests/query-builder.test.ts +0 -281
- package/tests/referenced-types-extractor.test.ts +0 -814
- package/tests/script-debugger-client.test.ts +0 -430
- package/tests/servers/sfcc-mock-server/README.md +0 -208
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/code-versions.json +0 -247
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-customapi.json +0 -128
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-globalsettings.json +0 -92
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-versionhistory.json +0 -256
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-ccv.json +0 -275
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-fastforward.json +0 -123
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-sfra.json +0 -224
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-storefront.json +0 -447
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-system.json +0 -171
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-campaign.json +0 -13
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-category.json +0 -50
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-order.json +0 -32
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-product.json +0 -224
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-sitepreferences.json +0 -62
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-customeraddress.json +0 -109
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-product-expanded.json +0 -183
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-product.json +0 -139
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-category.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-customer.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-customeraddress.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-order.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-product.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definitions-old.json +0 -354
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definitions.json +0 -172
- package/tests/servers/sfcc-mock-server/package-lock.json +0 -879
- package/tests/servers/sfcc-mock-server/package.json +0 -39
- package/tests/servers/sfcc-mock-server/scripts/setup-logs.js +0 -224
- package/tests/servers/sfcc-mock-server/server.js +0 -280
- package/tests/servers/sfcc-mock-server/src/app.js +0 -182
- package/tests/servers/sfcc-mock-server/src/config/server-config.js +0 -124
- package/tests/servers/sfcc-mock-server/src/middleware/auth.js +0 -101
- package/tests/servers/sfcc-mock-server/src/middleware/cors.js +0 -39
- package/tests/servers/sfcc-mock-server/src/middleware/logging.js +0 -124
- package/tests/servers/sfcc-mock-server/src/routes/cartridge-webdav.js +0 -258
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/code-versions-handler.js +0 -184
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/debugger-handler.js +0 -396
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/oauth-handler.js +0 -36
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/ocapi-error-utils.js +0 -221
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/ocapi-utils.js +0 -440
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/site-preferences-handler.js +0 -332
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/system-objects-handler.js +0 -572
- package/tests/servers/sfcc-mock-server/src/routes/ocapi.js +0 -58
- package/tests/servers/sfcc-mock-server/src/routes/storefront.js +0 -86
- package/tests/servers/sfcc-mock-server/src/routes/webdav.js +0 -240
- package/tests/servers/sfcc-mock-server/src/utils/mock-data-loader.js +0 -84
- package/tests/servers/sfcc-mock-server/src/utils/webdav-xml.js +0 -121
- package/tests/servers/sfcc-mock-server-manager.ts +0 -280
- package/tests/sfcc-mock-server.test.ts +0 -423
- package/tests/site-preferences-client.test.ts +0 -358
- package/tests/system-objects-client.test.ts +0 -310
- package/tests/utils.test.ts +0 -477
- package/tests/validation-helpers.test.ts +0 -325
- package/tests/validator.test.ts +0 -416
- package/tests/workspace-roots.test.ts +0 -227
- package/tsconfig.json +0 -20
- package/tsconfig.test.json +0 -20
package/tests/log-client.test.ts
DELETED
|
@@ -1,768 +0,0 @@
|
|
|
1
|
-
import { SFCCLogClient } from '../src/clients/log-client';
|
|
2
|
-
import { SFCCConfig, LogLevel } from '../src/types/types';
|
|
3
|
-
|
|
4
|
-
// Use manual mock for webdav
|
|
5
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
6
|
-
const webdav = require('webdav');
|
|
7
|
-
const mockWebdavClient = webdav.__mockWebdavClient;
|
|
8
|
-
|
|
9
|
-
// Mock the logger
|
|
10
|
-
jest.mock('../src/utils/logger', () => ({
|
|
11
|
-
Logger: {
|
|
12
|
-
initialize: jest.fn(),
|
|
13
|
-
getInstance: jest.fn(() => ({
|
|
14
|
-
methodEntry: jest.fn(),
|
|
15
|
-
methodExit: jest.fn(),
|
|
16
|
-
debug: jest.fn(),
|
|
17
|
-
warn: jest.fn(),
|
|
18
|
-
error: jest.fn(),
|
|
19
|
-
timing: jest.fn(),
|
|
20
|
-
log: jest.fn(),
|
|
21
|
-
info: jest.fn(),
|
|
22
|
-
})),
|
|
23
|
-
getChildLogger: jest.fn(() => ({
|
|
24
|
-
methodEntry: jest.fn(),
|
|
25
|
-
methodExit: jest.fn(),
|
|
26
|
-
debug: jest.fn(),
|
|
27
|
-
warn: jest.fn(),
|
|
28
|
-
error: jest.fn(),
|
|
29
|
-
timing: jest.fn(),
|
|
30
|
-
log: jest.fn(),
|
|
31
|
-
info: jest.fn(),
|
|
32
|
-
})),
|
|
33
|
-
},
|
|
34
|
-
}));
|
|
35
|
-
|
|
36
|
-
// Mock utils
|
|
37
|
-
jest.mock('../src/utils/utils', () => ({
|
|
38
|
-
getCurrentDate: jest.fn(() => '20250815'),
|
|
39
|
-
formatBytes: jest.fn((bytes: number) => `${bytes} bytes`),
|
|
40
|
-
parseLogEntries: jest.fn((content: string, level: string) => {
|
|
41
|
-
// Better mock implementation - split by lines and filter by level, return the actual lines
|
|
42
|
-
return content.split('\n').filter(line => line.includes(level));
|
|
43
|
-
}),
|
|
44
|
-
extractUniqueErrors: jest.fn((errors: string[]) => {
|
|
45
|
-
// Mock implementation that returns unique error messages
|
|
46
|
-
return [...new Set(errors.map(error => error.trim()))];
|
|
47
|
-
}),
|
|
48
|
-
normalizeFilePath: jest.fn((path: string) => path),
|
|
49
|
-
}));
|
|
50
|
-
|
|
51
|
-
describe('SFCCLogClient', () => {
|
|
52
|
-
let logClient: SFCCLogClient;
|
|
53
|
-
let config: SFCCConfig;
|
|
54
|
-
|
|
55
|
-
beforeEach(() => {
|
|
56
|
-
// Setup test config
|
|
57
|
-
config = {
|
|
58
|
-
hostname: 'test.demandware.net',
|
|
59
|
-
username: 'testuser',
|
|
60
|
-
password: 'testpass',
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
logClient = new SFCCLogClient(config);
|
|
64
|
-
|
|
65
|
-
// Setup default mock for stat method (small file size so it uses getFileContents)
|
|
66
|
-
mockWebdavClient.stat.mockResolvedValue({ size: 1024 });
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
afterEach(() => {
|
|
70
|
-
jest.clearAllMocks();
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
describe('constructor', () => {
|
|
74
|
-
it('should create client with username/password authentication', () => {
|
|
75
|
-
const config: SFCCConfig = {
|
|
76
|
-
hostname: 'test.demandware.net',
|
|
77
|
-
username: 'testuser',
|
|
78
|
-
password: 'testpass',
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
new SFCCLogClient(config);
|
|
82
|
-
|
|
83
|
-
expect(webdav.createClient).toHaveBeenCalledWith(
|
|
84
|
-
'https://test.demandware.net/on/demandware.servlet/webdav/Sites/Logs/',
|
|
85
|
-
{
|
|
86
|
-
username: 'testuser',
|
|
87
|
-
password: 'testpass',
|
|
88
|
-
timeout: 30000,
|
|
89
|
-
maxBodyLength: 10 * 1024 * 1024,
|
|
90
|
-
maxContentLength: 10 * 1024 * 1024,
|
|
91
|
-
},
|
|
92
|
-
);
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it('should create client with OAuth authentication', () => {
|
|
96
|
-
const config: SFCCConfig = {
|
|
97
|
-
hostname: 'test.demandware.net',
|
|
98
|
-
clientId: 'testclientid',
|
|
99
|
-
clientSecret: 'testclientsecret',
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
new SFCCLogClient(config);
|
|
103
|
-
|
|
104
|
-
expect(webdav.createClient).toHaveBeenCalledWith(
|
|
105
|
-
'https://test.demandware.net/on/demandware.servlet/webdav/Sites/Logs/',
|
|
106
|
-
{
|
|
107
|
-
username: 'testclientid',
|
|
108
|
-
password: 'testclientsecret',
|
|
109
|
-
timeout: 30000,
|
|
110
|
-
maxBodyLength: 10 * 1024 * 1024,
|
|
111
|
-
maxContentLength: 10 * 1024 * 1024,
|
|
112
|
-
},
|
|
113
|
-
);
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('should throw error when no authentication provided', () => {
|
|
117
|
-
const config: SFCCConfig = {
|
|
118
|
-
hostname: 'test.demandware.net',
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
expect(() => new SFCCLogClient(config)).toThrow(
|
|
122
|
-
'Either username/password or clientId/clientSecret must be provided',
|
|
123
|
-
);
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
describe('getLogFiles', () => {
|
|
128
|
-
it('should return log files for specified date', async () => {
|
|
129
|
-
const mockContents = [
|
|
130
|
-
{ type: 'file', filename: 'error-20250815-blade1-001.log' },
|
|
131
|
-
{ type: 'file', filename: 'warn-20250815-blade1-001.log' },
|
|
132
|
-
{ type: 'file', filename: 'info-20250815-blade1-001.log' },
|
|
133
|
-
{ type: 'file', filename: 'debug-20250815-blade1-001.log' },
|
|
134
|
-
{ type: 'file', filename: 'error-20250814-blade1-001.log' }, // Different date
|
|
135
|
-
{ type: 'directory', filename: 'somedir' }, // Directory
|
|
136
|
-
{ type: 'file', filename: 'not-a-log.txt' }, // Not a log file
|
|
137
|
-
];
|
|
138
|
-
|
|
139
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
140
|
-
|
|
141
|
-
const result = await logClient.getLogFiles('20250815');
|
|
142
|
-
|
|
143
|
-
expect(result).toEqual([
|
|
144
|
-
{ filename: 'error-20250815-blade1-001.log', lastmod: expect.any(String) },
|
|
145
|
-
{ filename: 'warn-20250815-blade1-001.log', lastmod: expect.any(String) },
|
|
146
|
-
{ filename: 'info-20250815-blade1-001.log', lastmod: expect.any(String) },
|
|
147
|
-
{ filename: 'debug-20250815-blade1-001.log', lastmod: expect.any(String) },
|
|
148
|
-
]);
|
|
149
|
-
expect(mockWebdavClient.getDirectoryContents).toHaveBeenCalledWith('/');
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it('should use current date when no date provided', async () => {
|
|
153
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue([]);
|
|
154
|
-
|
|
155
|
-
await logClient.getLogFiles();
|
|
156
|
-
|
|
157
|
-
// Should call getCurrentDate() from utils which returns '20250815'
|
|
158
|
-
expect(mockWebdavClient.getDirectoryContents).toHaveBeenCalledWith('/');
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
it('should return empty array when no log files found', async () => {
|
|
162
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue([]);
|
|
163
|
-
|
|
164
|
-
const result = await logClient.getLogFiles('20250815');
|
|
165
|
-
|
|
166
|
-
expect(result).toEqual([]);
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
describe('getLatestLogs', () => {
|
|
171
|
-
describe('standard log files', () => {
|
|
172
|
-
beforeEach(() => {
|
|
173
|
-
const mockContents = [
|
|
174
|
-
{ type: 'file', filename: 'error-20250815-blade1-001.log' },
|
|
175
|
-
{ type: 'file', filename: 'error-20250815-blade1-002.log' },
|
|
176
|
-
{ type: 'file', filename: 'warn-20250815-blade1-001.log' },
|
|
177
|
-
];
|
|
178
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
it('should return latest error logs', async () => {
|
|
182
|
-
const mockLogContent = 'ERROR Line 1\nERROR Line 2\nERROR Line 3\nERROR Line 4\nERROR Line 5';
|
|
183
|
-
mockWebdavClient.getFileContents.mockResolvedValue(mockLogContent);
|
|
184
|
-
|
|
185
|
-
const result = await logClient.getLatestLogs('error' as LogLevel, 3, '20250815');
|
|
186
|
-
|
|
187
|
-
expect(result).toContain('Latest 3 error messages');
|
|
188
|
-
expect(result).toContain('error-20250815-blade1-002.log'); // Should use the latest file
|
|
189
|
-
// Since files are small (1024 bytes), getFileContentsTail should call getFileContents
|
|
190
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledWith(
|
|
191
|
-
'error-20250815-blade1-002.log',
|
|
192
|
-
{ format: 'text' },
|
|
193
|
-
);
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
it('should return warning when no files found for level', async () => {
|
|
197
|
-
const mockContents = [
|
|
198
|
-
{ type: 'file', filename: 'info-20250815-blade1-001.log' },
|
|
199
|
-
];
|
|
200
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
201
|
-
|
|
202
|
-
const result = await logClient.getLatestLogs('error' as LogLevel, 10, '20250815');
|
|
203
|
-
|
|
204
|
-
expect(result).toContain('No error log files found');
|
|
205
|
-
expect(result).toContain('Available files: info-20250815-blade1-001.log');
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
describe('custom log files support', () => {
|
|
210
|
-
it('should include both standard and custom log files for warn level', async () => {
|
|
211
|
-
const mockContents = [
|
|
212
|
-
{ type: 'file', filename: 'warn-odspod-0-appserver-20250815.log' },
|
|
213
|
-
{ type: 'file', filename: 'customwarn-odspod-0-appserver-20250815.log' }, // Same date
|
|
214
|
-
{ type: 'file', filename: 'warn-blade1-20250815.log' }, // Another warn file same date
|
|
215
|
-
{ type: 'file', filename: 'error-odspod-0-appserver-20250815.log' }, // Different level - should be ignored
|
|
216
|
-
];
|
|
217
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
218
|
-
|
|
219
|
-
const mockWarnContent = 'WARN Entry from standard warn file';
|
|
220
|
-
const mockCustomWarnContent = 'WARN Entry from custom warn file';
|
|
221
|
-
|
|
222
|
-
mockWebdavClient.getFileContents
|
|
223
|
-
.mockResolvedValueOnce(mockWarnContent) // newest standard file first
|
|
224
|
-
.mockResolvedValueOnce(mockWarnContent) // second standard file
|
|
225
|
-
.mockResolvedValueOnce(mockCustomWarnContent); // custom file
|
|
226
|
-
|
|
227
|
-
const result = await logClient.getLatestLogs('warn' as LogLevel, 5, '20250815');
|
|
228
|
-
|
|
229
|
-
expect(result).toContain('Latest 5 warn messages from files');
|
|
230
|
-
expect(result).toContain('warn-odspod-0-appserver-20250815.log'); // Should include newest standard
|
|
231
|
-
expect(result).toContain('customwarn-odspod-0-appserver-20250815.log'); // Should include custom
|
|
232
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledTimes(3); // All matching files
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
it('should include both standard and custom log files for error level', async () => {
|
|
236
|
-
const mockContents = [
|
|
237
|
-
{ type: 'file', filename: 'error-odspod-0-appserver-20250815.log' },
|
|
238
|
-
{ type: 'file', filename: 'customerror-odspod-0-appserver-20250815.log' },
|
|
239
|
-
{ type: 'file', filename: 'warn-odspod-0-appserver-20250815.log' }, // Different level - should be ignored
|
|
240
|
-
];
|
|
241
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
242
|
-
|
|
243
|
-
const mockErrorContent = 'ERROR Standard error entry';
|
|
244
|
-
const mockCustomErrorContent = 'ERROR Custom error entry';
|
|
245
|
-
|
|
246
|
-
mockWebdavClient.getFileContents
|
|
247
|
-
.mockResolvedValueOnce(mockErrorContent) // newest standard file
|
|
248
|
-
.mockResolvedValueOnce(mockCustomErrorContent); // custom file same day
|
|
249
|
-
|
|
250
|
-
const result = await logClient.getLatestLogs('error' as LogLevel, 3, '20250815');
|
|
251
|
-
|
|
252
|
-
expect(result).toContain('Latest 3 error messages from files');
|
|
253
|
-
expect(result).toContain('error-odspod-0-appserver-20250815.log');
|
|
254
|
-
expect(result).toContain('customerror-odspod-0-appserver-20250815.log');
|
|
255
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledTimes(2); // Only files for the specified date
|
|
256
|
-
});
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
describe('chronological sorting with real-world filenames', () => {
|
|
260
|
-
it('should process files by lastmod timestamp (newest first)', async () => {
|
|
261
|
-
// Real-world log files with different lastmod timestamps
|
|
262
|
-
const mockContents = [
|
|
263
|
-
{
|
|
264
|
-
type: 'file',
|
|
265
|
-
filename: 'warn-blade1-20250815.log',
|
|
266
|
-
lastmod: '2025-08-15T06:30:00.000Z', // Older timestamp
|
|
267
|
-
},
|
|
268
|
-
{
|
|
269
|
-
type: 'file',
|
|
270
|
-
filename: 'warn-odspod-0-appserver-20250815.log',
|
|
271
|
-
lastmod: '2025-08-15T08:15:00.000Z', // Middle timestamp
|
|
272
|
-
},
|
|
273
|
-
{
|
|
274
|
-
type: 'file',
|
|
275
|
-
filename: 'warn-xyz-server-20250815.log',
|
|
276
|
-
lastmod: '2025-08-15T10:45:00.000Z', // Newest timestamp
|
|
277
|
-
},
|
|
278
|
-
];
|
|
279
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
280
|
-
|
|
281
|
-
// Mock content for each warn file
|
|
282
|
-
const mockContent1 = 'WARN 06:32:07 Warning from blade1\nWARN 06:30:00 Another warning from blade1';
|
|
283
|
-
const mockContent2 = 'WARN 08:16:33 Warning from odspod\nWARN 08:15:00 Another warning from odspod';
|
|
284
|
-
const mockContent3 = 'WARN 10:45:12 Warning from xyz\nWARN 10:44:00 Another warning from xyz';
|
|
285
|
-
|
|
286
|
-
// Files should be processed by lastmod order (newest first): xyz, odspod, blade1
|
|
287
|
-
mockWebdavClient.getFileContents
|
|
288
|
-
.mockResolvedValueOnce(mockContent3) // warn-xyz-server- (newest lastmod, processed first)
|
|
289
|
-
.mockResolvedValueOnce(mockContent2) // warn-odspod- (middle lastmod)
|
|
290
|
-
.mockResolvedValueOnce(mockContent1); // warn-blade1- (oldest lastmod, processed last)
|
|
291
|
-
|
|
292
|
-
const result = await logClient.getLatestLogs('warn' as LogLevel, 4, '20250815');
|
|
293
|
-
|
|
294
|
-
expect(result).toContain('Latest 4 warn messages');
|
|
295
|
-
expect(result).toContain('warn-xyz-server-20250815.log');
|
|
296
|
-
expect(result).toContain('warn-odspod-0-appserver-20250815.log');
|
|
297
|
-
expect(result).toContain('warn-blade1-20250815.log');
|
|
298
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledTimes(3);
|
|
299
|
-
|
|
300
|
-
// Verify the processing order matches chronological sorting by lastmod
|
|
301
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenNthCalledWith(1, 'warn-xyz-server-20250815.log', { format: 'text' });
|
|
302
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenNthCalledWith(2, 'warn-odspod-0-appserver-20250815.log', { format: 'text' });
|
|
303
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenNthCalledWith(3, 'warn-blade1-20250815.log', { format: 'text' });
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
it('should handle custom log files in chronological sorting', async () => {
|
|
307
|
-
const mockContents = [
|
|
308
|
-
{
|
|
309
|
-
type: 'file',
|
|
310
|
-
filename: 'customwarn-alpha-20250815.log',
|
|
311
|
-
lastmod: '2025-08-15T10:00:00.000Z', // Newest timestamp
|
|
312
|
-
},
|
|
313
|
-
{
|
|
314
|
-
type: 'file',
|
|
315
|
-
filename: 'warn-beta-20250815.log',
|
|
316
|
-
lastmod: '2025-08-15T08:00:00.000Z', // Oldest timestamp
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
type: 'file',
|
|
320
|
-
filename: 'customwarn-gamma-20250815.log',
|
|
321
|
-
lastmod: '2025-08-15T09:00:00.000Z', // Middle timestamp
|
|
322
|
-
},
|
|
323
|
-
];
|
|
324
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
325
|
-
|
|
326
|
-
const mockContent1 = 'WARN 10:00:00 Custom warning from alpha';
|
|
327
|
-
const mockContent2 = 'WARN 08:00:00 Standard warning from beta';
|
|
328
|
-
const mockContent3 = 'WARN 09:00:00 Custom warning from gamma';
|
|
329
|
-
|
|
330
|
-
// Expected chronological order by lastmod: alpha (10:00), gamma (09:00), beta (08:00)
|
|
331
|
-
mockWebdavClient.getFileContents
|
|
332
|
-
.mockResolvedValueOnce(mockContent1) // customwarn-alpha- (newest lastmod, processed first)
|
|
333
|
-
.mockResolvedValueOnce(mockContent3) // customwarn-gamma- (middle lastmod)
|
|
334
|
-
.mockResolvedValueOnce(mockContent2); // warn-beta- (oldest lastmod, processed last)
|
|
335
|
-
|
|
336
|
-
const result = await logClient.getLatestLogs('warn' as LogLevel, 3, '20250815');
|
|
337
|
-
|
|
338
|
-
expect(result).toContain('Latest 3 warn messages');
|
|
339
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledTimes(3);
|
|
340
|
-
|
|
341
|
-
// Verify processing order follows chronological sorting by lastmod
|
|
342
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenNthCalledWith(1, 'customwarn-alpha-20250815.log', { format: 'text' });
|
|
343
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenNthCalledWith(2, 'customwarn-gamma-20250815.log', { format: 'text' });
|
|
344
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenNthCalledWith(3, 'warn-beta-20250815.log', { format: 'text' });
|
|
345
|
-
});
|
|
346
|
-
|
|
347
|
-
it('should handle missing lastmod gracefully with fallback', async () => {
|
|
348
|
-
const mockContents = [
|
|
349
|
-
{
|
|
350
|
-
type: 'file',
|
|
351
|
-
filename: 'warn-file1-20250815.log',
|
|
352
|
-
lastmod: '2025-08-15T08:00:00.000Z',
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
type: 'file',
|
|
356
|
-
filename: 'warn-file2-20250815.log',
|
|
357
|
-
// Missing lastmod - should use fallback
|
|
358
|
-
},
|
|
359
|
-
];
|
|
360
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
361
|
-
|
|
362
|
-
const mockContent1 = 'WARN Content from file1';
|
|
363
|
-
const mockContent2 = 'WARN Content from file2';
|
|
364
|
-
|
|
365
|
-
mockWebdavClient.getFileContents
|
|
366
|
-
.mockResolvedValueOnce(mockContent2) // file2 (fallback to current time, processed first)
|
|
367
|
-
.mockResolvedValueOnce(mockContent1); // file1 (has lastmod, processed second)
|
|
368
|
-
|
|
369
|
-
const result = await logClient.getLatestLogs('warn' as LogLevel, 2, '20250815');
|
|
370
|
-
|
|
371
|
-
expect(result).toContain('Latest 2 warn messages');
|
|
372
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledTimes(2);
|
|
373
|
-
// Should handle both files even with missing lastmod
|
|
374
|
-
expect(result).toContain('warn-file1-20250815.log');
|
|
375
|
-
expect(result).toContain('warn-file2-20250815.log');
|
|
376
|
-
});
|
|
377
|
-
});
|
|
378
|
-
|
|
379
|
-
describe('file sorting and date filtering', () => {
|
|
380
|
-
|
|
381
|
-
it('should only process files matching the specified date', async () => {
|
|
382
|
-
// Mix of files from different dates
|
|
383
|
-
const mockContents = [
|
|
384
|
-
{ type: 'file', filename: 'error-odspod-0-appserver-20250815.log' }, // Target date
|
|
385
|
-
{ type: 'file', filename: 'error-blade1-20250815.log' }, // Target date
|
|
386
|
-
{ type: 'file', filename: 'error-odspod-0-appserver-20250814.log' }, // Previous day
|
|
387
|
-
{ type: 'file', filename: 'error-blade1-20250816.log' }, // Next day
|
|
388
|
-
{ type: 'file', filename: 'error-xyz-20250813.log' }, // Older date
|
|
389
|
-
];
|
|
390
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
391
|
-
|
|
392
|
-
// Mock content for the target date files only
|
|
393
|
-
const targetDateContent1 = 'ERROR 05:17:54 Error from target date file 1\nERROR 05:16:00 Another error from file 1';
|
|
394
|
-
const targetDateContent2 = 'ERROR 11:24:07 Error from target date file 2\nERROR 11:20:00 Another error from file 2';
|
|
395
|
-
|
|
396
|
-
mockWebdavClient.getFileContents
|
|
397
|
-
.mockResolvedValueOnce(targetDateContent1) // error-odspod-0-appserver-20250815.log
|
|
398
|
-
.mockResolvedValueOnce(targetDateContent2); // error-blade1-20250815.log
|
|
399
|
-
|
|
400
|
-
const result = await logClient.getLatestLogs('error' as LogLevel, 3, '20250815');
|
|
401
|
-
|
|
402
|
-
// Should only process files from the target date (20250815)
|
|
403
|
-
expect(result).toContain('Latest 3 error messages from files');
|
|
404
|
-
expect(result).toContain('error-odspod-0-appserver-20250815.log');
|
|
405
|
-
expect(result).toContain('error-blade1-20250815.log');
|
|
406
|
-
|
|
407
|
-
// Should NOT contain files from other dates
|
|
408
|
-
expect(result).not.toContain('20250814');
|
|
409
|
-
expect(result).not.toContain('20250816');
|
|
410
|
-
expect(result).not.toContain('20250813');
|
|
411
|
-
|
|
412
|
-
// Should only call getFileContents for files matching the target date
|
|
413
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledTimes(2);
|
|
414
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledWith('error-odspod-0-appserver-20250815.log', { format: 'text' });
|
|
415
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledWith('error-blade1-20250815.log', { format: 'text' });
|
|
416
|
-
});
|
|
417
|
-
|
|
418
|
-
it('should handle multiple dates correctly when getLogFiles filters by specific date', async () => {
|
|
419
|
-
// Test with a different date to ensure date filtering works correctly
|
|
420
|
-
const mockContents = [
|
|
421
|
-
{ type: 'file', filename: 'warn-server1-20250810.log' },
|
|
422
|
-
{ type: 'file', filename: 'warn-server2-20250810.log' },
|
|
423
|
-
{ type: 'file', filename: 'customwarn-server3-20250810.log' },
|
|
424
|
-
{ type: 'file', filename: 'warn-server1-20250815.log' }, // Different date - should be filtered out
|
|
425
|
-
];
|
|
426
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
427
|
-
|
|
428
|
-
const mockContent1 = 'WARN 08:00:00 Warning from server1 on 20250810';
|
|
429
|
-
const mockContent2 = 'WARN 09:00:00 Warning from server2 on 20250810';
|
|
430
|
-
const mockContent3 = 'WARN 10:00:00 Custom warning from server3 on 20250810';
|
|
431
|
-
|
|
432
|
-
mockWebdavClient.getFileContents
|
|
433
|
-
.mockResolvedValueOnce(mockContent1)
|
|
434
|
-
.mockResolvedValueOnce(mockContent2)
|
|
435
|
-
.mockResolvedValueOnce(mockContent3);
|
|
436
|
-
|
|
437
|
-
const result = await logClient.getLatestLogs('warn' as LogLevel, 5, '20250810');
|
|
438
|
-
|
|
439
|
-
expect(result).toContain('Latest 5 warn messages');
|
|
440
|
-
expect(result).toContain('warn-server1-20250810.log');
|
|
441
|
-
expect(result).toContain('warn-server2-20250810.log');
|
|
442
|
-
expect(result).toContain('customwarn-server3-20250810.log');
|
|
443
|
-
|
|
444
|
-
// Should not include the file from 20250815
|
|
445
|
-
expect(result).not.toContain('20250815');
|
|
446
|
-
|
|
447
|
-
// Should process 3 files from the target date only
|
|
448
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledTimes(3);
|
|
449
|
-
});
|
|
450
|
-
});
|
|
451
|
-
|
|
452
|
-
it('should handle file read errors gracefully and continue processing other files', async () => {
|
|
453
|
-
const mockContents = [
|
|
454
|
-
{ type: 'file', filename: 'warn-20250815-blade1-001.log' },
|
|
455
|
-
{ type: 'file', filename: 'warn-20250815-blade1-002.log' },
|
|
456
|
-
{ type: 'file', filename: 'warn-20250815-blade1-003.log' },
|
|
457
|
-
];
|
|
458
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
459
|
-
|
|
460
|
-
const mockContent = 'WARN Working file content';
|
|
461
|
-
|
|
462
|
-
// Clear previous mocks to ensure clean state
|
|
463
|
-
mockWebdavClient.getFileContents.mockClear();
|
|
464
|
-
|
|
465
|
-
mockWebdavClient.getFileContents
|
|
466
|
-
.mockResolvedValueOnce(mockContent) // First file succeeds
|
|
467
|
-
.mockRejectedValueOnce(new Error('File read error')) // Second file fails
|
|
468
|
-
.mockResolvedValueOnce(mockContent); // Third file succeeds
|
|
469
|
-
|
|
470
|
-
const result = await logClient.getLatestLogs('warn' as LogLevel, 5, '20250815');
|
|
471
|
-
|
|
472
|
-
expect(result).toContain('Latest 5 warn messages');
|
|
473
|
-
// With our new implementation using getFileContentsTail, the call pattern may be different
|
|
474
|
-
// The important thing is that it handles errors gracefully and continues processing
|
|
475
|
-
expect(mockWebdavClient.getFileContents.mock.calls.length).toBeGreaterThanOrEqual(3);
|
|
476
|
-
// Should complete processing despite errors - verifies error resilience
|
|
477
|
-
expect(result).toContain('warn-20250815-blade1');
|
|
478
|
-
});
|
|
479
|
-
});
|
|
480
|
-
|
|
481
|
-
describe('summarizeLogs', () => {
|
|
482
|
-
it('should return summary when no log files found', async () => {
|
|
483
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue([]);
|
|
484
|
-
|
|
485
|
-
const result = await logClient.summarizeLogs('20250815');
|
|
486
|
-
|
|
487
|
-
expect(result).toBe('No log files found for date 20250815');
|
|
488
|
-
});
|
|
489
|
-
|
|
490
|
-
it('should generate comprehensive log summary', async () => {
|
|
491
|
-
const mockContents = [
|
|
492
|
-
{ type: 'file', filename: 'error-20250815-blade1-001.log' },
|
|
493
|
-
{ type: 'file', filename: 'warn-20250815-blade1-001.log' },
|
|
494
|
-
{ type: 'file', filename: 'info-20250815-blade1-001.log' },
|
|
495
|
-
{ type: 'file', filename: 'debug-20250815-blade1-001.log' },
|
|
496
|
-
];
|
|
497
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
498
|
-
|
|
499
|
-
// Update content to match what the actual summarizeLogs method expects
|
|
500
|
-
const mockErrorContent = 'First line\n ERROR Something went wrong\nAnother line\n ERROR Another error\n INFO Some info';
|
|
501
|
-
const mockWarnContent = 'Start line\n WARN Warning message\n INFO Info message';
|
|
502
|
-
const mockInfoContent = 'Header\n INFO First info\n INFO Second info\n INFO Third info';
|
|
503
|
-
const mockDebugContent = 'Prefix\n DEBUG Debug message 1\n DEBUG Debug message 2\n DEBUG Debug message 3';
|
|
504
|
-
|
|
505
|
-
mockWebdavClient.getFileContents
|
|
506
|
-
.mockResolvedValueOnce(mockErrorContent)
|
|
507
|
-
.mockResolvedValueOnce(mockWarnContent)
|
|
508
|
-
.mockResolvedValueOnce(mockInfoContent)
|
|
509
|
-
.mockResolvedValueOnce(mockDebugContent);
|
|
510
|
-
|
|
511
|
-
const result = await logClient.summarizeLogs('20250815');
|
|
512
|
-
|
|
513
|
-
expect(result).toContain('Log Summary for 20250815');
|
|
514
|
-
expect(result).toContain('Errors: 2');
|
|
515
|
-
expect(result).toContain('Warnings: 1');
|
|
516
|
-
expect(result).toContain('Info: 5'); // 1 from error file + 1 from warn file + 3 from info file
|
|
517
|
-
expect(result).toContain('Debug: 3');
|
|
518
|
-
expect(result).toContain('Log Files (4)');
|
|
519
|
-
});
|
|
520
|
-
|
|
521
|
-
it('should handle file read errors gracefully', async () => {
|
|
522
|
-
const mockContents = [
|
|
523
|
-
{ type: 'file', filename: 'error-20250815-blade1-001.log' },
|
|
524
|
-
];
|
|
525
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
526
|
-
mockWebdavClient.getFileContents.mockRejectedValue(new Error('File read error'));
|
|
527
|
-
|
|
528
|
-
const result = await logClient.summarizeLogs('20250815');
|
|
529
|
-
|
|
530
|
-
expect(result).toContain('Log Summary for 20250815');
|
|
531
|
-
expect(result).toContain('Errors: 0');
|
|
532
|
-
expect(result).toContain('Debug: 0');
|
|
533
|
-
});
|
|
534
|
-
});
|
|
535
|
-
|
|
536
|
-
describe('searchLogs', () => {
|
|
537
|
-
beforeEach(() => {
|
|
538
|
-
const mockContents = [
|
|
539
|
-
{ type: 'file', filename: 'error-20250815-blade1-001.log' },
|
|
540
|
-
{ type: 'file', filename: 'warn-20250815-blade1-001.log' },
|
|
541
|
-
{ type: 'file', filename: 'customwarn-20250815-blade1-001.log' },
|
|
542
|
-
];
|
|
543
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
544
|
-
});
|
|
545
|
-
|
|
546
|
-
it('should search across all log files when no level specified', async () => {
|
|
547
|
-
const mockErrorContent = 'ERROR: Database connection failed\nINFO: System started';
|
|
548
|
-
const mockWarnContent = 'WARN: Database connection slow\nINFO: Cache cleared';
|
|
549
|
-
const mockCustomWarnContent = 'WARN: Custom database warning';
|
|
550
|
-
|
|
551
|
-
mockWebdavClient.getFileContents
|
|
552
|
-
.mockResolvedValueOnce(mockErrorContent)
|
|
553
|
-
.mockResolvedValueOnce(mockWarnContent)
|
|
554
|
-
.mockResolvedValueOnce(mockCustomWarnContent);
|
|
555
|
-
|
|
556
|
-
const result = await logClient.searchLogs('database', undefined, 20, '20250815');
|
|
557
|
-
|
|
558
|
-
expect(result).toContain('Found 3 matches for "database"');
|
|
559
|
-
expect(result).toContain('Database connection failed');
|
|
560
|
-
expect(result).toContain('Database connection slow');
|
|
561
|
-
expect(result).toContain('Custom database warning');
|
|
562
|
-
});
|
|
563
|
-
|
|
564
|
-
it('should filter by log level including custom files when specified', async () => {
|
|
565
|
-
const mockWarnContent = 'WARN: Standard warning message with the word warning';
|
|
566
|
-
const mockCustomWarnContent = 'WARN: Custom warning message with the word warning';
|
|
567
|
-
|
|
568
|
-
mockWebdavClient.getFileContents
|
|
569
|
-
.mockResolvedValueOnce(mockWarnContent)
|
|
570
|
-
.mockResolvedValueOnce(mockCustomWarnContent);
|
|
571
|
-
|
|
572
|
-
const result = await logClient.searchLogs('warning', 'warn' as LogLevel, 20, '20250815');
|
|
573
|
-
|
|
574
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledTimes(2); // Both warn files
|
|
575
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledWith('warn-20250815-blade1-001.log', { format: 'text' });
|
|
576
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledWith('customwarn-20250815-blade1-001.log', { format: 'text' });
|
|
577
|
-
expect(result).toContain('Standard warning message');
|
|
578
|
-
expect(result).toContain('Custom warning message');
|
|
579
|
-
});
|
|
580
|
-
|
|
581
|
-
it('should return no matches message when pattern not found', async () => {
|
|
582
|
-
mockWebdavClient.getFileContents.mockResolvedValue('No matching content here');
|
|
583
|
-
|
|
584
|
-
const result = await logClient.searchLogs('nonexistent', undefined, 20, '20250815');
|
|
585
|
-
|
|
586
|
-
expect(result).toContain('No matches found for "nonexistent" in logs for 20250815');
|
|
587
|
-
});
|
|
588
|
-
|
|
589
|
-
it('should handle search errors gracefully', async () => {
|
|
590
|
-
mockWebdavClient.getFileContents.mockRejectedValue(new Error('Search error'));
|
|
591
|
-
|
|
592
|
-
const result = await logClient.searchLogs('pattern', undefined, 20, '20250815');
|
|
593
|
-
|
|
594
|
-
expect(result).toContain('No matches found for "pattern"');
|
|
595
|
-
});
|
|
596
|
-
});
|
|
597
|
-
|
|
598
|
-
describe('listLogFiles', () => {
|
|
599
|
-
it('should return formatted list of log files sorted by modification date', async () => {
|
|
600
|
-
const mockContents = [
|
|
601
|
-
{
|
|
602
|
-
type: 'file',
|
|
603
|
-
filename: 'warn-odspod-0-appserver-20250815.log',
|
|
604
|
-
size: 46387,
|
|
605
|
-
lastmod: 'Fri, 15 Aug 2025 06:32:07 GMT',
|
|
606
|
-
},
|
|
607
|
-
{
|
|
608
|
-
type: 'file',
|
|
609
|
-
filename: 'error-odspod-0-appserver-20250815.log',
|
|
610
|
-
size: 2560,
|
|
611
|
-
lastmod: 'Fri, 15 Aug 2025 05:17:54 GMT',
|
|
612
|
-
},
|
|
613
|
-
{
|
|
614
|
-
type: 'file',
|
|
615
|
-
filename: 'warn-odspod-0-appserver-20250814.log',
|
|
616
|
-
size: 139161,
|
|
617
|
-
lastmod: 'Thu, 14 Aug 2025 23:59:25 GMT',
|
|
618
|
-
},
|
|
619
|
-
{ type: 'directory', filename: 'log_archive' }, // Should be filtered out
|
|
620
|
-
{ type: 'file', filename: 'not-a-log.txt' }, // Should be filtered out
|
|
621
|
-
];
|
|
622
|
-
|
|
623
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
624
|
-
|
|
625
|
-
const result = await logClient.listLogFiles();
|
|
626
|
-
|
|
627
|
-
expect(result).toContain('Available log files:');
|
|
628
|
-
expect(result).toContain('📄 warn-odspod-0-appserver-20250815.log');
|
|
629
|
-
expect(result).toContain('📄 error-odspod-0-appserver-20250815.log');
|
|
630
|
-
expect(result).toContain('📄 warn-odspod-0-appserver-20250814.log');
|
|
631
|
-
|
|
632
|
-
// Should show newest file first
|
|
633
|
-
const warnIndex = result.indexOf('warn-odspod-0-appserver-20250815.log');
|
|
634
|
-
const errorIndex = result.indexOf('error-odspod-0-appserver-20250815.log');
|
|
635
|
-
const oldWarnIndex = result.indexOf('warn-odspod-0-appserver-20250814.log');
|
|
636
|
-
|
|
637
|
-
expect(warnIndex).toBeLessThan(errorIndex); // Newest file first
|
|
638
|
-
expect(errorIndex).toBeLessThan(oldWarnIndex); // Then by date
|
|
639
|
-
|
|
640
|
-
// Should not contain non-log files
|
|
641
|
-
expect(result).not.toContain('log_archive');
|
|
642
|
-
expect(result).not.toContain('not-a-log.txt');
|
|
643
|
-
});
|
|
644
|
-
|
|
645
|
-
it('should show total count when more than 50 files', async () => {
|
|
646
|
-
// Create 60 mock log files
|
|
647
|
-
const mockContents = Array.from({ length: 60 }, (_, i) => ({
|
|
648
|
-
type: 'file',
|
|
649
|
-
filename: `log-file-${i.toString().padStart(3, '0')}.log`,
|
|
650
|
-
size: 1000,
|
|
651
|
-
lastmod: new Date(2025, 7, 15, 12, i).toISOString(),
|
|
652
|
-
}));
|
|
653
|
-
|
|
654
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
655
|
-
|
|
656
|
-
const result = await logClient.listLogFiles();
|
|
657
|
-
|
|
658
|
-
expect(result).toContain('(showing latest 50 of 60 total)');
|
|
659
|
-
});
|
|
660
|
-
|
|
661
|
-
it('should handle errors when listing files', async () => {
|
|
662
|
-
mockWebdavClient.getDirectoryContents.mockRejectedValue(new Error('List error'));
|
|
663
|
-
|
|
664
|
-
await expect(logClient.listLogFiles()).rejects.toThrow('Failed to list log files: List error');
|
|
665
|
-
});
|
|
666
|
-
});
|
|
667
|
-
|
|
668
|
-
describe('getLogFileContents', () => {
|
|
669
|
-
it('should read full file content when tailOnly is false and no maxBytes', async () => {
|
|
670
|
-
const mockFileContent = 'This is a full log file content\nLine 2\nLine 3\nLine 4';
|
|
671
|
-
mockWebdavClient.getFileContents.mockResolvedValue(mockFileContent);
|
|
672
|
-
|
|
673
|
-
const result = await logClient.getLogFileContents('test.log', undefined, false);
|
|
674
|
-
|
|
675
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledWith('test.log', { format: 'text' });
|
|
676
|
-
expect(result).toContain('This is a full log file content');
|
|
677
|
-
expect(result).toContain('Line 4');
|
|
678
|
-
});
|
|
679
|
-
|
|
680
|
-
it('should respect maxBytes when tailOnly is false and maxBytes is specified', async () => {
|
|
681
|
-
const mockFileContent = 'This is a very long log file content that should be truncated';
|
|
682
|
-
const mockStat = { size: 1000 }; // Simulate a large file
|
|
683
|
-
mockWebdavClient.stat.mockResolvedValue(mockStat);
|
|
684
|
-
|
|
685
|
-
// Mock the stream for range request from start
|
|
686
|
-
const mockStream = {
|
|
687
|
-
on: jest.fn((event, callback) => {
|
|
688
|
-
if (event === 'data') {
|
|
689
|
-
callback(Buffer.from(mockFileContent.substring(0, 50))); // First 50 bytes
|
|
690
|
-
} else if (event === 'end') {
|
|
691
|
-
callback();
|
|
692
|
-
}
|
|
693
|
-
}),
|
|
694
|
-
};
|
|
695
|
-
mockWebdavClient.createReadStream.mockReturnValue(mockStream);
|
|
696
|
-
|
|
697
|
-
const result = await logClient.getLogFileContents('test.log', 50, false);
|
|
698
|
-
|
|
699
|
-
expect(mockWebdavClient.stat).toHaveBeenCalledWith('test.log');
|
|
700
|
-
expect(mockWebdavClient.createReadStream).toHaveBeenCalledWith('test.log', {
|
|
701
|
-
range: { start: 0, end: 49 },
|
|
702
|
-
});
|
|
703
|
-
expect(result).toContain('This is a very long log file content that should');
|
|
704
|
-
});
|
|
705
|
-
|
|
706
|
-
it('should read tail content when tailOnly is true', async () => {
|
|
707
|
-
const mockFileContent = 'Tail content from the end of the file';
|
|
708
|
-
const mockStat = { size: 1000 };
|
|
709
|
-
mockWebdavClient.stat.mockResolvedValue(mockStat);
|
|
710
|
-
|
|
711
|
-
// Mock the stream for range request
|
|
712
|
-
const mockStream = {
|
|
713
|
-
on: jest.fn((event, callback) => {
|
|
714
|
-
if (event === 'data') {
|
|
715
|
-
callback(Buffer.from(mockFileContent));
|
|
716
|
-
} else if (event === 'end') {
|
|
717
|
-
callback();
|
|
718
|
-
}
|
|
719
|
-
}),
|
|
720
|
-
};
|
|
721
|
-
mockWebdavClient.createReadStream.mockReturnValue(mockStream);
|
|
722
|
-
|
|
723
|
-
const result = await logClient.getLogFileContents('test.log', 200, true);
|
|
724
|
-
|
|
725
|
-
expect(mockWebdavClient.stat).toHaveBeenCalledWith('test.log');
|
|
726
|
-
expect(mockWebdavClient.createReadStream).toHaveBeenCalledWith('test.log', {
|
|
727
|
-
range: { start: 800, end: 999 },
|
|
728
|
-
});
|
|
729
|
-
expect(result).toContain('Tail content from the end');
|
|
730
|
-
});
|
|
731
|
-
|
|
732
|
-
it('should handle file that is smaller than maxBytes when using tail', async () => {
|
|
733
|
-
const mockFileContent = 'Small file';
|
|
734
|
-
const mockStat = { size: 10 };
|
|
735
|
-
mockWebdavClient.stat.mockResolvedValue(mockStat);
|
|
736
|
-
mockWebdavClient.getFileContents.mockResolvedValue(mockFileContent);
|
|
737
|
-
|
|
738
|
-
const result = await logClient.getLogFileContents('test.log', 200, true);
|
|
739
|
-
|
|
740
|
-
// Should read full file since it's smaller than maxBytes
|
|
741
|
-
expect(mockWebdavClient.getFileContents).toHaveBeenCalledWith('test.log', { format: 'text' });
|
|
742
|
-
expect(result).toContain('Small file');
|
|
743
|
-
});
|
|
744
|
-
});
|
|
745
|
-
|
|
746
|
-
describe('error handling', () => {
|
|
747
|
-
it('should handle WebDAV connection errors in getLogFiles', async () => {
|
|
748
|
-
mockWebdavClient.getDirectoryContents.mockRejectedValue(new Error('Connection failed'));
|
|
749
|
-
|
|
750
|
-
await expect(logClient.getLogFiles()).rejects.toThrow('Connection failed');
|
|
751
|
-
});
|
|
752
|
-
|
|
753
|
-
it('should handle file read errors gracefully in getLatestLogs', async () => {
|
|
754
|
-
const mockContents = [
|
|
755
|
-
{ type: 'file', filename: 'error-20250815-blade1-001.log' },
|
|
756
|
-
];
|
|
757
|
-
mockWebdavClient.getDirectoryContents.mockResolvedValue(mockContents);
|
|
758
|
-
mockWebdavClient.getFileContents.mockRejectedValue(new Error('File not found'));
|
|
759
|
-
|
|
760
|
-
// Should not throw error but handle gracefully and return empty result
|
|
761
|
-
const result = await logClient.getLatestLogs('error' as LogLevel, 10, '20250815');
|
|
762
|
-
|
|
763
|
-
expect(result).toContain('Latest 10 error messages from files');
|
|
764
|
-
expect(result).toContain('error-20250815-blade1-001.log');
|
|
765
|
-
// Should handle the error gracefully and continue
|
|
766
|
-
});
|
|
767
|
-
});
|
|
768
|
-
});
|