@unchainedshop/api 4.0.0-rc.3 → 4.0.0-rc.4
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/lib/locale-context.d.ts.map +1 -1
- package/lib/locale-context.js +2 -2
- package/lib/locale-context.js.map +1 -1
- package/lib/mcp/index.d.ts.map +1 -1
- package/lib/mcp/index.js +54 -6
- package/lib/mcp/index.js.map +1 -1
- package/lib/mcp/tools/assortment/addAssortmentFilterHandler.d.ts +28 -0
- package/lib/mcp/tools/assortment/addAssortmentFilterHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/addAssortmentFilterHandler.js +57 -0
- package/lib/mcp/tools/assortment/addAssortmentFilterHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/addAssortmentLinkHandler.d.ts +28 -0
- package/lib/mcp/tools/assortment/addAssortmentLinkHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/addAssortmentLinkHandler.js +56 -0
- package/lib/mcp/tools/assortment/addAssortmentLinkHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/addAssortmentMediaUploadHandler.d.ts +28 -0
- package/lib/mcp/tools/assortment/addAssortmentMediaUploadHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/addAssortmentMediaUploadHandler.js +62 -0
- package/lib/mcp/tools/assortment/addAssortmentMediaUploadHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/addAssortmentProductHandler.d.ts +28 -0
- package/lib/mcp/tools/assortment/addAssortmentProductHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/addAssortmentProductHandler.js +53 -0
- package/lib/mcp/tools/assortment/addAssortmentProductHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/assortmentChildrenHandler.d.ts +24 -0
- package/lib/mcp/tools/assortment/assortmentChildrenHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/assortmentChildrenHandler.js +43 -0
- package/lib/mcp/tools/assortment/assortmentChildrenHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/assortmentFiltersHandler.d.ts +20 -0
- package/lib/mcp/tools/assortment/assortmentFiltersHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/assortmentFiltersHandler.js +37 -0
- package/lib/mcp/tools/assortment/assortmentFiltersHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/assortmentHandler.d.ts +30 -0
- package/lib/mcp/tools/assortment/assortmentHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/assortmentHandler.js +52 -0
- package/lib/mcp/tools/assortment/assortmentHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/assortmentLinksHandler.d.ts +20 -0
- package/lib/mcp/tools/assortment/assortmentLinksHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/assortmentLinksHandler.js +49 -0
- package/lib/mcp/tools/assortment/assortmentLinksHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/assortmentProductsHandler.d.ts +24 -0
- package/lib/mcp/tools/assortment/assortmentProductsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/assortmentProductsHandler.js +44 -0
- package/lib/mcp/tools/assortment/assortmentProductsHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/assortmentsCountHandler.d.ts +36 -0
- package/lib/mcp/tools/assortment/assortmentsCountHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/assortmentsCountHandler.js +47 -0
- package/lib/mcp/tools/assortment/assortmentsCountHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/assortmentsHandler.d.ts +82 -0
- package/lib/mcp/tools/assortment/assortmentsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/assortmentsHandler.js +57 -0
- package/lib/mcp/tools/assortment/assortmentsHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/createAssortmentHandler.d.ts +125 -0
- package/lib/mcp/tools/assortment/createAssortmentHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/createAssortmentHandler.js +57 -0
- package/lib/mcp/tools/assortment/createAssortmentHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/removeAssortmentFilterHandler.d.ts +20 -0
- package/lib/mcp/tools/assortment/removeAssortmentFilterHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/removeAssortmentFilterHandler.js +39 -0
- package/lib/mcp/tools/assortment/removeAssortmentFilterHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/removeAssortmentHandler.d.ts +20 -0
- package/lib/mcp/tools/assortment/removeAssortmentHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/removeAssortmentHandler.js +38 -0
- package/lib/mcp/tools/assortment/removeAssortmentHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/removeAssortmentLinkHandler.d.ts +20 -0
- package/lib/mcp/tools/assortment/removeAssortmentLinkHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/removeAssortmentLinkHandler.js +39 -0
- package/lib/mcp/tools/assortment/removeAssortmentLinkHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/removeAssortmentMediaHandler.d.ts +20 -0
- package/lib/mcp/tools/assortment/removeAssortmentMediaHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/removeAssortmentMediaHandler.js +40 -0
- package/lib/mcp/tools/assortment/removeAssortmentMediaHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/removeAssortmentProductHandler.d.ts +20 -0
- package/lib/mcp/tools/assortment/removeAssortmentProductHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/removeAssortmentProductHandler.js +39 -0
- package/lib/mcp/tools/assortment/removeAssortmentProductHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/reorderAssortmentFiltersHandler.d.ts +54 -0
- package/lib/mcp/tools/assortment/reorderAssortmentFiltersHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/reorderAssortmentFiltersHandler.js +42 -0
- package/lib/mcp/tools/assortment/reorderAssortmentFiltersHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/reorderAssortmentLinksHandler.d.ts +54 -0
- package/lib/mcp/tools/assortment/reorderAssortmentLinksHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/reorderAssortmentLinksHandler.js +42 -0
- package/lib/mcp/tools/assortment/reorderAssortmentLinksHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/reorderAssortmentMediaHandler.d.ts +54 -0
- package/lib/mcp/tools/assortment/reorderAssortmentMediaHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/reorderAssortmentMediaHandler.js +42 -0
- package/lib/mcp/tools/assortment/reorderAssortmentMediaHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/reorderAssortmentProductsHandler.d.ts +54 -0
- package/lib/mcp/tools/assortment/reorderAssortmentProductsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/reorderAssortmentProductsHandler.js +42 -0
- package/lib/mcp/tools/assortment/reorderAssortmentProductsHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/searchAssortmentProductHandler.d.ts +68 -0
- package/lib/mcp/tools/assortment/searchAssortmentProductHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/searchAssortmentProductHandler.js +75 -0
- package/lib/mcp/tools/assortment/searchAssortmentProductHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/setBaseAssortmentHandler.d.ts +20 -0
- package/lib/mcp/tools/assortment/setBaseAssortmentHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/setBaseAssortmentHandler.js +39 -0
- package/lib/mcp/tools/assortment/setBaseAssortmentHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/translatedAssortmentMediaTextsHandler.d.ts +20 -0
- package/lib/mcp/tools/assortment/translatedAssortmentMediaTextsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/translatedAssortmentMediaTextsHandler.js +35 -0
- package/lib/mcp/tools/assortment/translatedAssortmentMediaTextsHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/translatedAssortmentTextsHandler.d.ts +20 -0
- package/lib/mcp/tools/assortment/translatedAssortmentTextsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/translatedAssortmentTextsHandler.js +33 -0
- package/lib/mcp/tools/assortment/translatedAssortmentTextsHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/updateAssortmentHandler.d.ts +80 -0
- package/lib/mcp/tools/assortment/updateAssortmentHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/updateAssortmentHandler.js +57 -0
- package/lib/mcp/tools/assortment/updateAssortmentHandler.js.map +1 -0
- package/lib/mcp/tools/assortment/updateAssortmentMediaTextsHandler.d.ts +69 -0
- package/lib/mcp/tools/assortment/updateAssortmentMediaTextsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/assortment/updateAssortmentMediaTextsHandler.js +48 -0
- package/lib/mcp/tools/assortment/updateAssortmentMediaTextsHandler.js.map +1 -0
- package/lib/mcp/tools/country/countriesCountHandler.d.ts +24 -0
- package/lib/mcp/tools/country/countriesCountHandler.d.ts.map +1 -0
- package/lib/mcp/tools/country/countriesCountHandler.js +41 -0
- package/lib/mcp/tools/country/countriesCountHandler.js.map +1 -0
- package/lib/mcp/tools/country/countriesHandler.d.ts +60 -0
- package/lib/mcp/tools/country/countriesHandler.d.ts.map +1 -0
- package/lib/mcp/tools/country/countriesHandler.js +48 -0
- package/lib/mcp/tools/country/countriesHandler.js.map +1 -0
- package/lib/mcp/tools/country/countryHandler.d.ts +20 -0
- package/lib/mcp/tools/country/countryHandler.d.ts.map +1 -0
- package/lib/mcp/tools/country/countryHandler.js +34 -0
- package/lib/mcp/tools/country/countryHandler.js.map +1 -0
- package/lib/mcp/tools/country/createCountryHandler.d.ts +36 -0
- package/lib/mcp/tools/country/createCountryHandler.d.ts.map +1 -0
- package/lib/mcp/tools/country/createCountryHandler.js +41 -0
- package/lib/mcp/tools/country/createCountryHandler.js.map +1 -0
- package/lib/mcp/tools/country/removeCountryHandler.d.ts +20 -0
- package/lib/mcp/tools/country/removeCountryHandler.d.ts.map +1 -0
- package/lib/mcp/tools/country/removeCountryHandler.js +37 -0
- package/lib/mcp/tools/country/removeCountryHandler.js.map +1 -0
- package/lib/mcp/tools/country/updateCountryHandler.d.ts +56 -0
- package/lib/mcp/tools/country/updateCountryHandler.d.ts.map +1 -0
- package/lib/mcp/tools/country/updateCountryHandler.js +53 -0
- package/lib/mcp/tools/country/updateCountryHandler.js.map +1 -0
- package/lib/mcp/tools/currency/createCurrencyHandler.d.ts +52 -0
- package/lib/mcp/tools/currency/createCurrencyHandler.d.ts.map +1 -0
- package/lib/mcp/tools/currency/createCurrencyHandler.js +48 -0
- package/lib/mcp/tools/currency/createCurrencyHandler.js.map +1 -0
- package/lib/mcp/tools/currency/currenciesCountHandler.d.ts +24 -0
- package/lib/mcp/tools/currency/currenciesCountHandler.d.ts.map +1 -0
- package/lib/mcp/tools/currency/currenciesCountHandler.js +40 -0
- package/lib/mcp/tools/currency/currenciesCountHandler.js.map +1 -0
- package/lib/mcp/tools/currency/currenciesHandler.d.ts +60 -0
- package/lib/mcp/tools/currency/currenciesHandler.d.ts.map +1 -0
- package/lib/mcp/tools/currency/currenciesHandler.js +50 -0
- package/lib/mcp/tools/currency/currenciesHandler.js.map +1 -0
- package/lib/mcp/tools/currency/currencyHandler.d.ts +20 -0
- package/lib/mcp/tools/currency/currencyHandler.d.ts.map +1 -0
- package/lib/mcp/tools/currency/currencyHandler.js +34 -0
- package/lib/mcp/tools/currency/currencyHandler.js.map +1 -0
- package/lib/mcp/tools/currency/removeCurrencyHandler.d.ts +20 -0
- package/lib/mcp/tools/currency/removeCurrencyHandler.d.ts.map +1 -0
- package/lib/mcp/tools/currency/removeCurrencyHandler.js +37 -0
- package/lib/mcp/tools/currency/removeCurrencyHandler.js.map +1 -0
- package/lib/mcp/tools/currency/updateCurrencyHandler.d.ts +56 -0
- package/lib/mcp/tools/currency/updateCurrencyHandler.d.ts.map +1 -0
- package/lib/mcp/tools/currency/updateCurrencyHandler.js +48 -0
- package/lib/mcp/tools/currency/updateCurrencyHandler.js.map +1 -0
- package/lib/mcp/tools/filter/createFilterHandler.d.ts +114 -0
- package/lib/mcp/tools/filter/createFilterHandler.d.ts.map +1 -0
- package/lib/mcp/tools/filter/createFilterHandler.js +53 -0
- package/lib/mcp/tools/filter/createFilterHandler.js.map +1 -0
- package/lib/mcp/tools/filter/createFilterOptionHandler.d.ts +73 -0
- package/lib/mcp/tools/filter/createFilterOptionHandler.d.ts.map +1 -0
- package/lib/mcp/tools/filter/createFilterOptionHandler.js +53 -0
- package/lib/mcp/tools/filter/createFilterOptionHandler.js.map +1 -0
- package/lib/mcp/tools/filter/getFilterHandler.d.ts +20 -0
- package/lib/mcp/tools/filter/getFilterHandler.d.ts.map +1 -0
- package/lib/mcp/tools/filter/getFilterHandler.js +38 -0
- package/lib/mcp/tools/filter/getFilterHandler.js.map +1 -0
- package/lib/mcp/tools/filter/getFiltersHandler.d.ts +60 -0
- package/lib/mcp/tools/filter/getFiltersHandler.d.ts.map +1 -0
- package/lib/mcp/tools/filter/getFiltersHandler.js +50 -0
- package/lib/mcp/tools/filter/getFiltersHandler.js.map +1 -0
- package/lib/mcp/tools/filter/removeFilterHandler.d.ts +20 -0
- package/lib/mcp/tools/filter/removeFilterHandler.d.ts.map +1 -0
- package/lib/mcp/tools/filter/removeFilterHandler.js +39 -0
- package/lib/mcp/tools/filter/removeFilterHandler.js.map +1 -0
- package/lib/mcp/tools/filter/removeFilterOptionHandler.d.ts +24 -0
- package/lib/mcp/tools/filter/removeFilterOptionHandler.d.ts.map +1 -0
- package/lib/mcp/tools/filter/removeFilterOptionHandler.js +44 -0
- package/lib/mcp/tools/filter/removeFilterOptionHandler.js.map +1 -0
- package/lib/mcp/tools/filter/translatedFilterTextsHandler.d.ts +24 -0
- package/lib/mcp/tools/filter/translatedFilterTextsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/filter/translatedFilterTextsHandler.js +42 -0
- package/lib/mcp/tools/filter/translatedFilterTextsHandler.js.map +1 -0
- package/lib/mcp/tools/filter/updateFilterHandler.d.ts +58 -0
- package/lib/mcp/tools/filter/updateFilterHandler.d.ts.map +1 -0
- package/lib/mcp/tools/filter/updateFilterHandler.js +44 -0
- package/lib/mcp/tools/filter/updateFilterHandler.js.map +1 -0
- package/lib/mcp/tools/filter/updateFilterTextsHandler.d.ts +73 -0
- package/lib/mcp/tools/filter/updateFilterTextsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/filter/updateFilterTextsHandler.js +46 -0
- package/lib/mcp/tools/filter/updateFilterTextsHandler.js.map +1 -0
- package/lib/mcp/tools/index.d.ts +83 -35
- package/lib/mcp/tools/index.d.ts.map +1 -1
- package/lib/mcp/tools/index.js +83 -35
- package/lib/mcp/tools/index.js.map +1 -1
- package/lib/mcp/tools/language/createLanguageHandler.d.ts +36 -0
- package/lib/mcp/tools/language/createLanguageHandler.d.ts.map +1 -0
- package/lib/mcp/tools/language/createLanguageHandler.js +39 -0
- package/lib/mcp/tools/language/createLanguageHandler.js.map +1 -0
- package/lib/mcp/tools/language/languageHandler.d.ts +20 -0
- package/lib/mcp/tools/language/languageHandler.d.ts.map +1 -0
- package/lib/mcp/tools/language/languageHandler.js +31 -0
- package/lib/mcp/tools/language/languageHandler.js.map +1 -0
- package/lib/mcp/tools/language/languagesCountHandler.d.ts +24 -0
- package/lib/mcp/tools/language/languagesCountHandler.d.ts.map +1 -0
- package/lib/mcp/tools/language/languagesCountHandler.js +36 -0
- package/lib/mcp/tools/language/languagesCountHandler.js.map +1 -0
- package/lib/mcp/tools/language/languagesHandler.d.ts +60 -0
- package/lib/mcp/tools/language/languagesHandler.d.ts.map +1 -0
- package/lib/mcp/tools/language/languagesHandler.js +42 -0
- package/lib/mcp/tools/language/languagesHandler.js.map +1 -0
- package/lib/mcp/tools/language/removeLanguageHandler.d.ts +20 -0
- package/lib/mcp/tools/language/removeLanguageHandler.d.ts.map +1 -0
- package/lib/mcp/tools/language/removeLanguageHandler.js +35 -0
- package/lib/mcp/tools/language/removeLanguageHandler.js.map +1 -0
- package/lib/mcp/tools/language/updateLanguageHandler.d.ts +48 -0
- package/lib/mcp/tools/language/updateLanguageHandler.d.ts.map +1 -0
- package/lib/mcp/tools/language/updateLanguageHandler.js +40 -0
- package/lib/mcp/tools/language/updateLanguageHandler.js.map +1 -0
- package/lib/mcp/tools/product/addProductAssignmentHandler.d.ts +52 -0
- package/lib/mcp/tools/product/addProductAssignmentHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/addProductAssignmentHandler.js +97 -0
- package/lib/mcp/tools/product/addProductAssignmentHandler.js.map +1 -0
- package/lib/mcp/tools/product/addProductMediaUploadHandler.d.ts +28 -0
- package/lib/mcp/tools/product/addProductMediaUploadHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/addProductMediaUploadHandler.js +62 -0
- package/lib/mcp/tools/product/addProductMediaUploadHandler.js.map +1 -0
- package/lib/mcp/tools/product/createProductHandler.d.ts +138 -0
- package/lib/mcp/tools/product/createProductHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/createProductHandler.js +60 -0
- package/lib/mcp/tools/product/createProductHandler.js.map +1 -0
- package/lib/mcp/tools/product/createProductVariationHandler.d.ts +84 -0
- package/lib/mcp/tools/product/createProductVariationHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/createProductVariationHandler.js +73 -0
- package/lib/mcp/tools/product/createProductVariationHandler.js.map +1 -0
- package/lib/mcp/tools/product/createProductVariationOptionHandler.d.ts +60 -0
- package/lib/mcp/tools/product/createProductVariationOptionHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/createProductVariationOptionHandler.js +59 -0
- package/lib/mcp/tools/product/createProductVariationOptionHandler.js.map +1 -0
- package/lib/mcp/tools/product/getProduct.d.ts +48 -0
- package/lib/mcp/tools/product/getProduct.d.ts.map +1 -0
- package/lib/mcp/tools/product/getProduct.js +61 -0
- package/lib/mcp/tools/product/getProduct.js.map +1 -0
- package/lib/mcp/tools/product/listProducts.d.ts +112 -0
- package/lib/mcp/tools/product/listProducts.d.ts.map +1 -0
- package/lib/mcp/tools/product/listProducts.js +110 -0
- package/lib/mcp/tools/product/listProducts.js.map +1 -0
- package/lib/mcp/tools/product/productReviewsCountHandler.d.ts +20 -0
- package/lib/mcp/tools/product/productReviewsCountHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/productReviewsCountHandler.js +30 -0
- package/lib/mcp/tools/product/productReviewsCountHandler.js.map +1 -0
- package/lib/mcp/tools/product/productReviewsHandler.d.ts +56 -0
- package/lib/mcp/tools/product/productReviewsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/productReviewsHandler.js +45 -0
- package/lib/mcp/tools/product/productReviewsHandler.js.map +1 -0
- package/lib/mcp/tools/product/productsCountHandler.d.ts +32 -0
- package/lib/mcp/tools/product/productsCountHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/productsCountHandler.js +33 -0
- package/lib/mcp/tools/product/productsCountHandler.js.map +1 -0
- package/lib/mcp/tools/product/publishProduct.d.ts +20 -0
- package/lib/mcp/tools/product/publishProduct.d.ts.map +1 -0
- package/lib/mcp/tools/product/publishProduct.js +40 -0
- package/lib/mcp/tools/product/publishProduct.js.map +1 -0
- package/lib/mcp/tools/product/removeProductAssignmentHandler.d.ts +48 -0
- package/lib/mcp/tools/product/removeProductAssignmentHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/removeProductAssignmentHandler.js +51 -0
- package/lib/mcp/tools/product/removeProductAssignmentHandler.js.map +1 -0
- package/lib/mcp/tools/product/removeProductHandler.d.ts +20 -0
- package/lib/mcp/tools/product/removeProductHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/removeProductHandler.js +34 -0
- package/lib/mcp/tools/product/removeProductHandler.js.map +1 -0
- package/lib/mcp/tools/product/removeProductMediaHandler.d.ts +20 -0
- package/lib/mcp/tools/product/removeProductMediaHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/removeProductMediaHandler.js +42 -0
- package/lib/mcp/tools/product/removeProductMediaHandler.js.map +1 -0
- package/lib/mcp/tools/product/removeProductVariationHandler.d.ts +20 -0
- package/lib/mcp/tools/product/removeProductVariationHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/removeProductVariationHandler.js +43 -0
- package/lib/mcp/tools/product/removeProductVariationHandler.js.map +1 -0
- package/lib/mcp/tools/product/removeProductVariationOptionHandler.d.ts +24 -0
- package/lib/mcp/tools/product/removeProductVariationOptionHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/removeProductVariationOptionHandler.js +47 -0
- package/lib/mcp/tools/product/removeProductVariationOptionHandler.js.map +1 -0
- package/lib/mcp/tools/product/reorderProductMediaHandler.d.ts +44 -0
- package/lib/mcp/tools/product/reorderProductMediaHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/reorderProductMediaHandler.js +39 -0
- package/lib/mcp/tools/product/reorderProductMediaHandler.js.map +1 -0
- package/lib/mcp/tools/product/translatedProductMediaTextsHandler.d.ts +20 -0
- package/lib/mcp/tools/product/translatedProductMediaTextsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/translatedProductMediaTextsHandler.js +33 -0
- package/lib/mcp/tools/product/translatedProductMediaTextsHandler.js.map +1 -0
- package/lib/mcp/tools/product/translatedProductTextsHandler.d.ts +20 -0
- package/lib/mcp/tools/product/translatedProductTextsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/translatedProductTextsHandler.js +33 -0
- package/lib/mcp/tools/product/translatedProductTextsHandler.js.map +1 -0
- package/lib/mcp/tools/product/translatedProductVariationTextsHandler.d.ts +24 -0
- package/lib/mcp/tools/product/translatedProductVariationTextsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/translatedProductVariationTextsHandler.js +42 -0
- package/lib/mcp/tools/product/translatedProductVariationTextsHandler.js.map +1 -0
- package/lib/mcp/tools/product/unPublishProduct.d.ts +20 -0
- package/lib/mcp/tools/product/unPublishProduct.d.ts.map +1 -0
- package/lib/mcp/tools/product/unPublishProduct.js +40 -0
- package/lib/mcp/tools/product/unPublishProduct.js.map +1 -0
- package/lib/mcp/tools/product/updateProduct.d.ts +56 -0
- package/lib/mcp/tools/product/updateProduct.d.ts.map +1 -0
- package/lib/mcp/tools/product/updateProduct.js +44 -0
- package/lib/mcp/tools/product/updateProduct.js.map +1 -0
- package/lib/mcp/tools/product/updateProductCommerceHandler.d.ts +166 -0
- package/lib/mcp/tools/product/updateProductCommerceHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/updateProductCommerceHandler.js +64 -0
- package/lib/mcp/tools/product/updateProductCommerceHandler.js.map +1 -0
- package/lib/mcp/tools/product/updateProductMediaTextsHandler.d.ts +56 -0
- package/lib/mcp/tools/product/updateProductMediaTextsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/updateProductMediaTextsHandler.js +48 -0
- package/lib/mcp/tools/product/updateProductMediaTextsHandler.js.map +1 -0
- package/lib/mcp/tools/product/updateProductPlanHandler.d.ts +72 -0
- package/lib/mcp/tools/product/updateProductPlanHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/updateProductPlanHandler.js +51 -0
- package/lib/mcp/tools/product/updateProductPlanHandler.js.map +1 -0
- package/lib/mcp/tools/product/updateProductSupplyHandler.d.ts +64 -0
- package/lib/mcp/tools/product/updateProductSupplyHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/updateProductSupplyHandler.js +52 -0
- package/lib/mcp/tools/product/updateProductSupplyHandler.js.map +1 -0
- package/lib/mcp/tools/product/updateProductTextsHandler.d.ts +114 -0
- package/lib/mcp/tools/product/updateProductTextsHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/updateProductTextsHandler.js +50 -0
- package/lib/mcp/tools/product/updateProductTextsHandler.js.map +1 -0
- package/lib/mcp/tools/product/updateProductTokenizationHandler.d.ts +72 -0
- package/lib/mcp/tools/product/updateProductTokenizationHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/updateProductTokenizationHandler.js +49 -0
- package/lib/mcp/tools/product/updateProductTokenizationHandler.js.map +1 -0
- package/lib/mcp/tools/product/updateProductWarehousingHandler.d.ts +48 -0
- package/lib/mcp/tools/product/updateProductWarehousingHandler.d.ts.map +1 -0
- package/lib/mcp/tools/product/updateProductWarehousingHandler.js +45 -0
- package/lib/mcp/tools/product/updateProductWarehousingHandler.js.map +1 -0
- package/lib/mcp/tools/shopInfoHandler.d.ts +8 -0
- package/lib/mcp/tools/shopInfoHandler.d.ts.map +1 -0
- package/lib/mcp/tools/shopInfoHandler.js +29 -0
- package/lib/mcp/tools/shopInfoHandler.js.map +1 -0
- package/lib/mcp/utils/getNormalizedAssortmentDetails.d.ts +21 -0
- package/lib/mcp/utils/getNormalizedAssortmentDetails.d.ts.map +1 -0
- package/lib/mcp/utils/getNormalizedAssortmentDetails.js +32 -0
- package/lib/mcp/utils/getNormalizedAssortmentDetails.js.map +1 -0
- package/lib/mcp/utils/getNormalizedFilterDetails.d.ts +25 -0
- package/lib/mcp/utils/getNormalizedFilterDetails.d.ts.map +1 -0
- package/lib/mcp/utils/getNormalizedFilterDetails.js +19 -0
- package/lib/mcp/utils/getNormalizedFilterDetails.js.map +1 -0
- package/lib/resolvers/mutations/accounts/createUser.d.ts.map +1 -1
- package/lib/resolvers/mutations/accounts/createUser.js +5 -0
- package/lib/resolvers/mutations/accounts/createUser.js.map +1 -1
- package/lib/resolvers/queries/index.js +1 -1
- package/lib/resolvers/queries/index.js.map +1 -1
- package/lib/roles/all.d.ts.map +1 -1
- package/lib/roles/all.js +10 -0
- package/lib/roles/all.js.map +1 -1
- package/lib/roles/index.d.ts.map +1 -1
- package/lib/roles/index.js +1 -0
- package/lib/roles/index.js.map +1 -1
- package/package.json +6 -6
- package/src/locale-context.ts +2 -7
- package/src/mcp/index.ts +410 -5
- package/src/mcp/tools/assortment/addAssortmentFilterHandler.ts +62 -0
- package/src/mcp/tools/assortment/addAssortmentLinkHandler.ts +63 -0
- package/src/mcp/tools/assortment/addAssortmentMediaUploadHandler.ts +79 -0
- package/src/mcp/tools/assortment/addAssortmentProductHandler.ts +57 -0
- package/src/mcp/tools/assortment/assortmentChildrenHandler.ts +54 -0
- package/src/mcp/tools/assortment/assortmentFiltersHandler.ts +46 -0
- package/src/mcp/tools/assortment/assortmentHandler.ts +63 -0
- package/src/mcp/tools/assortment/assortmentLinksHandler.ts +61 -0
- package/src/mcp/tools/assortment/assortmentProductsHandler.ts +56 -0
- package/src/mcp/tools/assortment/assortmentsCountHandler.ts +53 -0
- package/src/mcp/tools/assortment/assortmentsHandler.ts +67 -0
- package/src/mcp/tools/assortment/createAssortmentHandler.ts +71 -0
- package/src/mcp/tools/assortment/removeAssortmentFilterHandler.ts +50 -0
- package/src/mcp/tools/assortment/removeAssortmentHandler.ts +44 -0
- package/src/mcp/tools/assortment/removeAssortmentLinkHandler.ts +47 -0
- package/src/mcp/tools/assortment/removeAssortmentMediaHandler.ts +50 -0
- package/src/mcp/tools/assortment/removeAssortmentProductHandler.ts +49 -0
- package/src/mcp/tools/assortment/reorderAssortmentFiltersHandler.ts +53 -0
- package/src/mcp/tools/assortment/reorderAssortmentLinksHandler.ts +53 -0
- package/src/mcp/tools/assortment/reorderAssortmentMediaHandler.ts +53 -0
- package/src/mcp/tools/assortment/reorderAssortmentProductsHandler.ts +53 -0
- package/src/mcp/tools/assortment/searchAssortmentProductHandler.ts +87 -0
- package/src/mcp/tools/assortment/setBaseAssortmentHandler.ts +46 -0
- package/src/mcp/tools/assortment/translatedAssortmentMediaTextsHandler.ts +47 -0
- package/src/mcp/tools/assortment/translatedAssortmentTextsHandler.ts +43 -0
- package/src/mcp/tools/assortment/updateAssortmentHandler.ts +64 -0
- package/src/mcp/tools/assortment/updateAssortmentMediaTextsHandler.ts +64 -0
- package/src/mcp/tools/country/countriesCountHandler.ts +48 -0
- package/src/mcp/tools/{countriesHandler.ts → country/countriesHandler.ts} +1 -1
- package/src/mcp/tools/{countryHandler.ts → country/countryHandler.ts} +2 -2
- package/src/mcp/tools/country/createCountryHandler.ts +47 -0
- package/src/mcp/tools/country/removeCountryHandler.ts +46 -0
- package/src/mcp/tools/country/updateCountryHandler.ts +60 -0
- package/src/mcp/tools/currency/createCurrencyHandler.ts +55 -0
- package/src/mcp/tools/currency/currenciesCountHandler.ts +47 -0
- package/src/mcp/tools/{currenciesHandler.ts → currency/currenciesHandler.ts} +1 -1
- package/src/mcp/tools/{currencyHandler.ts → currency/currencyHandler.ts} +2 -2
- package/src/mcp/tools/currency/removeCurrencyHandler.ts +46 -0
- package/src/mcp/tools/currency/updateCurrencyHandler.ts +56 -0
- package/src/mcp/tools/filter/createFilterHandler.ts +65 -0
- package/src/mcp/tools/filter/createFilterOptionHandler.ts +64 -0
- package/src/mcp/tools/filter/getFilterHandler.ts +46 -0
- package/src/mcp/tools/filter/getFiltersHandler.ts +59 -0
- package/src/mcp/tools/filter/removeFilterHandler.ts +45 -0
- package/src/mcp/tools/filter/removeFilterOptionHandler.ts +50 -0
- package/src/mcp/tools/filter/translatedFilterTextsHandler.ts +53 -0
- package/src/mcp/tools/filter/updateFilterHandler.ts +51 -0
- package/src/mcp/tools/filter/updateFilterTextsHandler.ts +54 -0
- package/src/mcp/tools/index.ts +85 -35
- package/src/mcp/tools/{createLanguageHandler.ts → language/createLanguageHandler.ts} +1 -1
- package/src/mcp/tools/{languageHandler.ts → language/languageHandler.ts} +1 -1
- package/src/mcp/tools/language/languagesCountHandler.ts +43 -0
- package/src/mcp/tools/{languagesHandler.ts → language/languagesHandler.ts} +1 -1
- package/src/mcp/tools/{removeLanguageHandler.ts → language/removeLanguageHandler.ts} +2 -2
- package/src/mcp/tools/{updateLanguageHandler.ts → language/updateLanguageHandler.ts} +2 -2
- package/src/mcp/tools/{addProductAssignmentHandler.ts → product/addProductAssignmentHandler.ts} +3 -3
- package/src/mcp/tools/{addProductMediaUploadHandler.ts → product/addProductMediaUploadHandler.ts} +2 -2
- package/src/mcp/tools/{createProduct.ts → product/createProductHandler.ts} +2 -3
- package/src/mcp/tools/{createProductVariationHandler.ts → product/createProductVariationHandler.ts} +4 -4
- package/src/mcp/tools/{createProductVariationOptionHandler.ts → product/createProductVariationOptionHandler.ts} +4 -4
- package/src/mcp/tools/{getProduct.ts → product/getProduct.ts} +2 -2
- package/src/mcp/tools/{listProducts.ts → product/listProducts.ts} +3 -3
- package/src/mcp/tools/{productReviewsCountHandler.ts → product/productReviewsCountHandler.ts} +1 -1
- package/src/mcp/tools/{productReviewsHandler.ts → product/productReviewsHandler.ts} +2 -2
- package/src/mcp/tools/{productsCountHandler.ts → product/productsCountHandler.ts} +1 -1
- package/src/mcp/tools/{publishProduct.ts → product/publishProduct.ts} +3 -3
- package/src/mcp/tools/{removeProductAssignmentHandler.ts → product/removeProductAssignmentHandler.ts} +3 -3
- package/src/mcp/tools/{removeProductHandler.ts → product/removeProductHandler.ts} +2 -2
- package/src/mcp/tools/{removeProductMediaHandler.ts → product/removeProductMediaHandler.ts} +2 -2
- package/src/mcp/tools/{removeProductVariationHandler.ts → product/removeProductVariationHandler.ts} +3 -3
- package/src/mcp/tools/{removeProductVariationOptionHandler.ts → product/removeProductVariationOptionHandler.ts} +3 -3
- package/src/mcp/tools/{reorderProductMediaHandler.ts → product/reorderProductMediaHandler.ts} +2 -2
- package/src/mcp/tools/product/translatedProductMediaTextsHandler.ts +43 -0
- package/src/mcp/tools/product/translatedProductTextsHandler.ts +43 -0
- package/src/mcp/tools/product/translatedProductVariationTextsHandler.ts +57 -0
- package/src/mcp/tools/{unPublishProduct.ts → product/unPublishProduct.ts} +3 -3
- package/src/mcp/tools/{updateProduct.ts → product/updateProduct.ts} +3 -3
- package/src/mcp/tools/{updateProductCommerceHandler.ts → product/updateProductCommerceHandler.ts} +2 -2
- package/src/mcp/tools/{updateProductMediaTextsHandler.ts → product/updateProductMediaTextsHandler.ts} +8 -3
- package/src/mcp/tools/{updateProductPlanHandler.ts → product/updateProductPlanHandler.ts} +3 -3
- package/src/mcp/tools/{updateProductSupplyHandler.ts → product/updateProductSupplyHandler.ts} +3 -3
- package/src/mcp/tools/{updateProductTextsHandler.ts → product/updateProductTextsHandler.ts} +3 -3
- package/src/mcp/tools/{updateProductTokenizationHandler.ts → product/updateProductTokenizationHandler.ts} +3 -3
- package/src/mcp/tools/{updateProductWarehousingHandler.ts → product/updateProductWarehousingHandler.ts} +3 -3
- package/src/mcp/tools/shopInfoHandler.ts +33 -0
- package/src/mcp/utils/getNormalizedAssortmentDetails.ts +40 -0
- package/src/mcp/utils/getNormalizedFilterDetails.ts +23 -0
- package/src/resolvers/mutations/accounts/createUser.ts +6 -0
- package/src/resolvers/queries/index.ts +1 -1
- package/src/roles/all.ts +10 -0
- package/src/roles/index.ts +1 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { AssortmentNotFoundError, ProductNotFoundError } from '../../../errors.js';
|
|
5
|
+
import { getNormalizedProductDetails } from '../../utils/getNormalizedProductDetails.js';
|
|
6
|
+
import { getNormalizedAssortmentDetails } from '../../utils/getNormalizedAssortmentDetails.js';
|
|
7
|
+
|
|
8
|
+
export const AddAssortmentProductSchema = {
|
|
9
|
+
assortmentId: z.string().min(1).describe('ID of the assortment to add the product to'),
|
|
10
|
+
productId: z.string().min(1).describe('ID of the product to add'),
|
|
11
|
+
tags: z
|
|
12
|
+
.array(z.string().min(1).toLowerCase())
|
|
13
|
+
.optional()
|
|
14
|
+
.describe('Optional tags to associate with this product inside the assortment'),
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const AddAssortmentProductZodSchema = z.object(AddAssortmentProductSchema);
|
|
18
|
+
export type AddAssortmentProductParams = z.infer<typeof AddAssortmentProductZodSchema>;
|
|
19
|
+
|
|
20
|
+
export async function addAssortmentProductHandler(context: Context, params: AddAssortmentProductParams) {
|
|
21
|
+
const { modules, userId } = context;
|
|
22
|
+
const { assortmentId, productId, tags } = params;
|
|
23
|
+
try {
|
|
24
|
+
log('mutation addAssortmentProduct', { userId, params });
|
|
25
|
+
const assortment = await getNormalizedAssortmentDetails({ assortmentId }, context);
|
|
26
|
+
if (!assortment)
|
|
27
|
+
throw new AssortmentNotFoundError({
|
|
28
|
+
assortmentId,
|
|
29
|
+
});
|
|
30
|
+
const product = await getNormalizedProductDetails(productId, context);
|
|
31
|
+
if (!product) throw new ProductNotFoundError({ productId });
|
|
32
|
+
|
|
33
|
+
const assortmentProduct = await modules.assortments.products.create({
|
|
34
|
+
assortmentId,
|
|
35
|
+
productId,
|
|
36
|
+
tags,
|
|
37
|
+
} as any);
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: 'text' as const,
|
|
43
|
+
text: JSON.stringify({ assortmentProduct: { ...assortmentProduct, assortment, product } }),
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
} catch (error) {
|
|
48
|
+
return {
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: 'text' as const,
|
|
52
|
+
text: `Error adding product to assortment product: ${(error as Error).message}`,
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { getNormalizedAssortmentDetails } from '../../utils/getNormalizedAssortmentDetails.js';
|
|
5
|
+
|
|
6
|
+
export const AssortmentChildrenSchema = {
|
|
7
|
+
assortmentId: z.string().min(1).optional().describe('ID of the assortment to fetch'),
|
|
8
|
+
includeInactive: z
|
|
9
|
+
.boolean()
|
|
10
|
+
.optional()
|
|
11
|
+
.default(false)
|
|
12
|
+
.describe('Whether to include inactive assortments'),
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const AssortmentChildrenZodSchema = z.object(AssortmentChildrenSchema);
|
|
16
|
+
|
|
17
|
+
export type AssortmentChildrenParams = z.infer<typeof AssortmentChildrenZodSchema>;
|
|
18
|
+
|
|
19
|
+
export async function assortmentChildrenHandler(context: Context, params: AssortmentChildrenParams) {
|
|
20
|
+
const { userId, modules } = context;
|
|
21
|
+
const { assortmentId, includeInactive } = params;
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
log('handler assortmentChildren', { userId, params });
|
|
25
|
+
const assortmentChildren = await modules.assortments.children({
|
|
26
|
+
assortmentId,
|
|
27
|
+
includeInactive,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const normalizedAssortmentChildren = await Promise.all(
|
|
31
|
+
assortmentChildren.map(async ({ _id }) =>
|
|
32
|
+
getNormalizedAssortmentDetails({ assortmentId: _id }, context),
|
|
33
|
+
),
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
content: [
|
|
38
|
+
{
|
|
39
|
+
type: 'text' as const,
|
|
40
|
+
text: JSON.stringify({ assortments: normalizedAssortmentChildren }),
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
} catch (error) {
|
|
45
|
+
return {
|
|
46
|
+
content: [
|
|
47
|
+
{
|
|
48
|
+
type: 'text' as const,
|
|
49
|
+
text: `Error getting assortment children: ${(error as Error).message}`,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
|
|
5
|
+
export const AssortmentFiltersSchema = {
|
|
6
|
+
assortmentId: z.string().min(1).optional().describe('ID of the assortment to fetch'),
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export const AssortmentFiltersZodSchema = z.object(AssortmentFiltersSchema);
|
|
10
|
+
|
|
11
|
+
export type AssortmentFiltersParams = z.infer<typeof AssortmentFiltersZodSchema>;
|
|
12
|
+
|
|
13
|
+
export async function assortmentFiltersHandler(context: Context, params: AssortmentFiltersParams) {
|
|
14
|
+
const { userId, modules } = context;
|
|
15
|
+
const { assortmentId } = params;
|
|
16
|
+
|
|
17
|
+
try {
|
|
18
|
+
log('handler assortmentFilters', { userId, params });
|
|
19
|
+
const assortmentFilters = await modules.assortments.filters.findFilters(
|
|
20
|
+
{
|
|
21
|
+
assortmentId,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
sort: { sortKey: 1 },
|
|
25
|
+
},
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
content: [
|
|
30
|
+
{
|
|
31
|
+
type: 'text' as const,
|
|
32
|
+
text: JSON.stringify({ filters: assortmentFilters }),
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
} catch (error) {
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: 'text' as const,
|
|
41
|
+
text: `Error getting assortment filters: ${(error as Error).message}`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { getNormalizedAssortmentDetails } from '../../utils/getNormalizedAssortmentDetails.js';
|
|
5
|
+
|
|
6
|
+
export const AssortmentSchema = {
|
|
7
|
+
assortmentId: z.string().min(1).optional().describe('ID of the assortment to fetch'),
|
|
8
|
+
slug: z.string().min(1).optional().describe('Slug of the assortment to fetch'),
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const AssortmentZodSchema = z
|
|
12
|
+
.object(AssortmentSchema)
|
|
13
|
+
.refine((data) => !!data.assortmentId || !!data.slug, {
|
|
14
|
+
message: 'Either assortmentId or slug must be provided.',
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export type AssortmentParams = z.infer<typeof AssortmentZodSchema>;
|
|
18
|
+
|
|
19
|
+
export async function assortmentHandler(context: Context, params: AssortmentParams) {
|
|
20
|
+
const { userId } = context;
|
|
21
|
+
const { assortmentId, slug } = params;
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
log('handler assortment', { userId, params });
|
|
25
|
+
|
|
26
|
+
const assortment = await getNormalizedAssortmentDetails(
|
|
27
|
+
{
|
|
28
|
+
assortmentId,
|
|
29
|
+
slug,
|
|
30
|
+
},
|
|
31
|
+
context,
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
if (!assortment) {
|
|
35
|
+
return {
|
|
36
|
+
content: [
|
|
37
|
+
{
|
|
38
|
+
type: 'text' as const,
|
|
39
|
+
text: `Assortment not found with ${assortmentId ? `ID: ${assortmentId}` : `slug: ${slug}`}`,
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
content: [
|
|
47
|
+
{
|
|
48
|
+
type: 'text' as const,
|
|
49
|
+
text: JSON.stringify({ assortment }),
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
} catch (error) {
|
|
54
|
+
return {
|
|
55
|
+
content: [
|
|
56
|
+
{
|
|
57
|
+
type: 'text' as const,
|
|
58
|
+
text: `Error getting assortment: ${(error as Error).message}`,
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { getNormalizedAssortmentDetails } from '../../utils/getNormalizedAssortmentDetails.js';
|
|
5
|
+
|
|
6
|
+
export const AssortmentLinksSchema = {
|
|
7
|
+
assortmentId: z.string().min(1).optional().describe('ID of the assortment to fetch'),
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const AssortmentLinksZodSchema = z.object(AssortmentLinksSchema);
|
|
11
|
+
|
|
12
|
+
export type AssortmentLinksParams = z.infer<typeof AssortmentLinksZodSchema>;
|
|
13
|
+
|
|
14
|
+
export async function assortmentLinksHandler(context: Context, params: AssortmentLinksParams) {
|
|
15
|
+
const { userId, loaders } = context;
|
|
16
|
+
const { assortmentId } = params;
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
log('handler assortmentLinks', { userId, params });
|
|
20
|
+
const assortmentLinks = await loaders.assortmentLinksLoader.load({
|
|
21
|
+
assortmentId,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const normalizedAssortmentLinks = await Promise.all(
|
|
25
|
+
assortmentLinks.map(async ({ parentAssortmentId, childAssortmentId, ...rest }) => {
|
|
26
|
+
const parent =
|
|
27
|
+
parentAssortmentId === assortmentId
|
|
28
|
+
? null
|
|
29
|
+
: await getNormalizedAssortmentDetails({ assortmentId: parentAssortmentId }, context);
|
|
30
|
+
const child =
|
|
31
|
+
childAssortmentId === assortmentId
|
|
32
|
+
? null
|
|
33
|
+
: await getNormalizedAssortmentDetails({ assortmentId: childAssortmentId }, context);
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
...rest,
|
|
37
|
+
parent,
|
|
38
|
+
child,
|
|
39
|
+
};
|
|
40
|
+
}),
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
content: [
|
|
45
|
+
{
|
|
46
|
+
type: 'text' as const,
|
|
47
|
+
text: JSON.stringify({ links: normalizedAssortmentLinks }),
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
} catch (error) {
|
|
52
|
+
return {
|
|
53
|
+
content: [
|
|
54
|
+
{
|
|
55
|
+
type: 'text' as const,
|
|
56
|
+
text: `Error getting assortment links: ${(error as Error).message}`,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { getNormalizedProductDetails } from '../../utils/getNormalizedProductDetails.js';
|
|
5
|
+
|
|
6
|
+
export const AssortmentProductsSchema = {
|
|
7
|
+
assortmentId: z.string().min(1).optional().describe('ID of the assortment to fetch'),
|
|
8
|
+
includeInactive: z
|
|
9
|
+
.boolean()
|
|
10
|
+
.optional()
|
|
11
|
+
.default(false)
|
|
12
|
+
.describe('Whether to include inactive assortments'),
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const AssortmentProductsZodSchema = z.object(AssortmentProductsSchema);
|
|
16
|
+
|
|
17
|
+
export type AssortmentProductsParams = z.infer<typeof AssortmentProductsZodSchema>;
|
|
18
|
+
|
|
19
|
+
export async function assortmentProductsHandler(context: Context, params: AssortmentProductsParams) {
|
|
20
|
+
const { userId, modules } = context;
|
|
21
|
+
const { assortmentId } = params;
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
log('handler assortmentProducts', { userId, params });
|
|
25
|
+
const assortmentProducts = await modules.assortments.products.findAssortmentProducts(
|
|
26
|
+
{
|
|
27
|
+
assortmentId,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
sort: { sortKey: 1 },
|
|
31
|
+
},
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
const normalizedAssortmentProducts = await Promise.all(
|
|
35
|
+
assortmentProducts.map(async ({ productId }) => getNormalizedProductDetails(productId, context)),
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text' as const,
|
|
42
|
+
text: JSON.stringify({ products: normalizedAssortmentProducts }),
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
} catch (error) {
|
|
47
|
+
return {
|
|
48
|
+
content: [
|
|
49
|
+
{
|
|
50
|
+
type: 'text' as const,
|
|
51
|
+
text: `Error getting assortment children: ${(error as Error).message}`,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
|
|
5
|
+
export const AssortmentsCountSchema = {
|
|
6
|
+
tags: z
|
|
7
|
+
.array(z.string().min(1).toLowerCase())
|
|
8
|
+
.optional()
|
|
9
|
+
.describe('Filter assortments by lowercase tags'),
|
|
10
|
+
slugs: z.array(z.string().min(1)).optional().describe('Filter assortments by slug(s)'),
|
|
11
|
+
includeInactive: z
|
|
12
|
+
.boolean()
|
|
13
|
+
.optional()
|
|
14
|
+
.default(false)
|
|
15
|
+
.describe('Whether to include inactive assortments'),
|
|
16
|
+
includeLeaves: z
|
|
17
|
+
.boolean()
|
|
18
|
+
.optional()
|
|
19
|
+
.default(false)
|
|
20
|
+
.describe('Whether to include leaf-level assortments'),
|
|
21
|
+
queryString: z.string().optional().describe('Free-text filter for matching assortments'),
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const AssortmentsCountZodSchema = z.object(AssortmentsCountSchema);
|
|
25
|
+
export type AssortmentsCountParams = z.infer<typeof AssortmentsCountZodSchema>;
|
|
26
|
+
|
|
27
|
+
export async function assortmentsCountHandler(context: Context, params: AssortmentsCountParams) {
|
|
28
|
+
const { modules, userId } = context;
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
log('handler assortmentsCount', { userId, params });
|
|
32
|
+
|
|
33
|
+
const count = await modules.assortments.count(params);
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
content: [
|
|
37
|
+
{
|
|
38
|
+
type: 'text' as const,
|
|
39
|
+
text: JSON.stringify(count),
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
} catch (error) {
|
|
44
|
+
return {
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: 'text' as const,
|
|
48
|
+
text: `Error counting assortments: ${(error as Error).message}`,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { getNormalizedAssortmentDetails } from '../../utils/getNormalizedAssortmentDetails.js';
|
|
5
|
+
|
|
6
|
+
const SortDirectionEnum = z.enum(['ASC', 'DESC']);
|
|
7
|
+
|
|
8
|
+
export const SortOptionInputSchema = z.object({
|
|
9
|
+
key: z.string().min(1).describe('Field to sort by'),
|
|
10
|
+
value: SortDirectionEnum.describe('Sort direction: ASC or DESC'),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export const AssortmentsSchema = {
|
|
14
|
+
queryString: z.string().optional().describe('Free-text filter for matching assortments'),
|
|
15
|
+
tags: z
|
|
16
|
+
.array(z.string().min(1).toLowerCase())
|
|
17
|
+
.optional()
|
|
18
|
+
.describe('Filter assortments by lowercase tags'),
|
|
19
|
+
slugs: z.array(z.string().min(1)).optional().describe('Filter assortments by slug(s)'),
|
|
20
|
+
limit: z.number().int().min(1).max(100).default(10).describe('Pagination limit'),
|
|
21
|
+
offset: z.number().int().min(0).default(0).describe('Pagination offset'),
|
|
22
|
+
includeInactive: z
|
|
23
|
+
.boolean()
|
|
24
|
+
.optional()
|
|
25
|
+
.default(false)
|
|
26
|
+
.describe('Whether to include inactive assortments'),
|
|
27
|
+
includeLeaves: z
|
|
28
|
+
.boolean()
|
|
29
|
+
.optional()
|
|
30
|
+
.default(false)
|
|
31
|
+
.describe('Whether to include leaf-level assortments'),
|
|
32
|
+
sort: z.array(SortOptionInputSchema).optional().describe('Sort options (default: sequence ascending)'),
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const AssortmentsZodSchema = z.object(AssortmentsSchema);
|
|
36
|
+
export type AssortmentsParams = z.infer<typeof AssortmentsZodSchema>;
|
|
37
|
+
|
|
38
|
+
export async function assortmentsHandler(context: Context, params: AssortmentsParams) {
|
|
39
|
+
const { modules, userId } = context;
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
log('handler assortments', { userId, params });
|
|
43
|
+
|
|
44
|
+
const assortments = await modules.assortments.findAssortments(params as any);
|
|
45
|
+
const normalizedAssortments = await Promise.all(
|
|
46
|
+
assortments.map(async ({ _id }) => getNormalizedAssortmentDetails({ assortmentId: _id }, context)),
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
content: [
|
|
51
|
+
{
|
|
52
|
+
type: 'text' as const,
|
|
53
|
+
text: JSON.stringify({ assortments: normalizedAssortments }),
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
} catch (error) {
|
|
58
|
+
return {
|
|
59
|
+
content: [
|
|
60
|
+
{
|
|
61
|
+
type: 'text' as const,
|
|
62
|
+
text: `Error getting assortments: ${(error as Error).message}`,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { getNormalizedAssortmentDetails } from '../../utils/getNormalizedAssortmentDetails.js';
|
|
5
|
+
|
|
6
|
+
export const AssortmentTextInputSchema = z.object({
|
|
7
|
+
locale: z
|
|
8
|
+
.string()
|
|
9
|
+
.min(1)
|
|
10
|
+
.describe(
|
|
11
|
+
'locale iso code like "en-US", "de-CH" use default defaultLanguageIsoCode in shop info if not explicitly provided. if language is explicitly provided check if it exists',
|
|
12
|
+
),
|
|
13
|
+
slug: z.string().optional().describe('Optional slug for URL structure'),
|
|
14
|
+
title: z.string().optional().describe('Title of the assortment'),
|
|
15
|
+
subtitle: z.string().optional().describe('Optional subtitle'),
|
|
16
|
+
description: z.string().optional().describe('Optional description'),
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export const CreateAssortmentInputSchema = z.object({
|
|
20
|
+
isRoot: z.boolean().optional().describe('Whether this assortment is a root assortment'),
|
|
21
|
+
tags: z
|
|
22
|
+
.array(z.string().min(1).toLowerCase())
|
|
23
|
+
.optional()
|
|
24
|
+
.describe('List of lowercase tags associated with the assortment'),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export const CreateAssortmentSchema = {
|
|
28
|
+
assortment: CreateAssortmentInputSchema,
|
|
29
|
+
texts: z.array(AssortmentTextInputSchema).optional(),
|
|
30
|
+
};
|
|
31
|
+
export const CreateAssortmentZodSchema = z.object(CreateAssortmentSchema);
|
|
32
|
+
|
|
33
|
+
export type CreateAssortmentParams = z.infer<typeof CreateAssortmentZodSchema>;
|
|
34
|
+
|
|
35
|
+
export async function createAssortmentHandler(context: Context, params: CreateAssortmentParams) {
|
|
36
|
+
const { modules, userId } = context;
|
|
37
|
+
const { assortment, texts } = params;
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
log('handler createAssortment', { userId, params });
|
|
41
|
+
|
|
42
|
+
const newAssortment = await modules.assortments.create(assortment as any);
|
|
43
|
+
|
|
44
|
+
if (texts) {
|
|
45
|
+
await modules.assortments.texts.updateTexts(newAssortment._id, texts as any);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: 'text' as const,
|
|
52
|
+
text: JSON.stringify({
|
|
53
|
+
assortment: await getNormalizedAssortmentDetails(
|
|
54
|
+
{ assortmentId: newAssortment._id },
|
|
55
|
+
context,
|
|
56
|
+
),
|
|
57
|
+
}),
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
};
|
|
61
|
+
} catch (error) {
|
|
62
|
+
return {
|
|
63
|
+
content: [
|
|
64
|
+
{
|
|
65
|
+
type: 'text' as const,
|
|
66
|
+
text: `Error creating assortment: ${(error as Error).message}`,
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { AssortmentFilterNotFoundError } from '../../../errors.js';
|
|
5
|
+
|
|
6
|
+
export const RemoveAssortmentFilterSchema = {
|
|
7
|
+
assortmentFilterId: z.string().min(1).describe('ID of the assortment filter to remove'),
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const RemoveAssortmentFilterZodSchema = z.object(RemoveAssortmentFilterSchema);
|
|
11
|
+
|
|
12
|
+
export type RemoveAssortmentFilterParams = z.infer<typeof RemoveAssortmentFilterZodSchema>;
|
|
13
|
+
|
|
14
|
+
export async function removeAssortmentFilterHandler(
|
|
15
|
+
context: Context,
|
|
16
|
+
params: RemoveAssortmentFilterParams,
|
|
17
|
+
) {
|
|
18
|
+
const { assortmentFilterId } = params;
|
|
19
|
+
const { modules, userId } = context;
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
log('handler removeAssortmentFilter', { userId, assortmentFilterId });
|
|
23
|
+
|
|
24
|
+
const assortmentFilter = await modules.assortments.filters.findFilter({
|
|
25
|
+
assortmentFilterId,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
if (!assortmentFilter) throw new AssortmentFilterNotFoundError({ assortmentFilterId });
|
|
29
|
+
|
|
30
|
+
await modules.assortments.filters.delete(assortmentFilterId);
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
content: [
|
|
34
|
+
{
|
|
35
|
+
type: 'text' as const,
|
|
36
|
+
text: JSON.stringify({ assortmentFilter }),
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
} catch (error) {
|
|
41
|
+
return {
|
|
42
|
+
content: [
|
|
43
|
+
{
|
|
44
|
+
type: 'text' as const,
|
|
45
|
+
text: `Error removing assortment filter: ${(error as Error).message}`,
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { AssortmentNotFoundError } from '../../../errors.js';
|
|
5
|
+
import { getNormalizedAssortmentDetails } from '../../utils/getNormalizedAssortmentDetails.js';
|
|
6
|
+
|
|
7
|
+
export const RemoveAssortmentSchema = {
|
|
8
|
+
assortmentId: z.string().min(1).describe('ID of the assortment to remove'),
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const RemoveAssortmentZodSchema = z.object(RemoveAssortmentSchema);
|
|
12
|
+
export type RemoveAssortmentParams = z.infer<typeof RemoveAssortmentZodSchema>;
|
|
13
|
+
|
|
14
|
+
export async function removeAssortmentHandler(context: Context, params: RemoveAssortmentParams) {
|
|
15
|
+
const { modules, userId } = context;
|
|
16
|
+
const { assortmentId } = params;
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
log('handler removeAssortment', { userId, assortmentId });
|
|
20
|
+
|
|
21
|
+
const assortment = await getNormalizedAssortmentDetails({ assortmentId }, context);
|
|
22
|
+
if (!assortment) throw new AssortmentNotFoundError({ assortmentId });
|
|
23
|
+
|
|
24
|
+
await modules.assortments.delete(assortmentId);
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
type: 'text' as const,
|
|
30
|
+
text: JSON.stringify({ assortment }),
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
};
|
|
34
|
+
} catch (error) {
|
|
35
|
+
return {
|
|
36
|
+
content: [
|
|
37
|
+
{
|
|
38
|
+
type: 'text' as const,
|
|
39
|
+
text: `Error removing assortment: ${(error as Error).message}`,
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Context } from '../../../context.js';
|
|
3
|
+
import { log } from '@unchainedshop/logger';
|
|
4
|
+
import { AssortmentLinkNotFoundError } from '../../../errors.js';
|
|
5
|
+
|
|
6
|
+
export const RemoveAssortmentLinkSchema = {
|
|
7
|
+
assortmentLinkId: z.string().min(1).describe('ID of the assortment link to remove'),
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const RemoveAssortmentLinkZodSchema = z.object(RemoveAssortmentLinkSchema);
|
|
11
|
+
|
|
12
|
+
export type RemoveAssortmentLinkParams = z.infer<typeof RemoveAssortmentLinkZodSchema>;
|
|
13
|
+
|
|
14
|
+
export async function removeAssortmentLinkHandler(context: Context, params: RemoveAssortmentLinkParams) {
|
|
15
|
+
const { assortmentLinkId } = params;
|
|
16
|
+
const { modules, userId } = context;
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
log(`handler removeAssortmentLink: ${assortmentLinkId}`, { userId });
|
|
20
|
+
|
|
21
|
+
const assortmentLink = await modules.assortments.links.findLink({
|
|
22
|
+
assortmentLinkId,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
if (!assortmentLink) throw new AssortmentLinkNotFoundError({ assortmentLinkId });
|
|
26
|
+
|
|
27
|
+
await modules.assortments.links.delete(assortmentLinkId);
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
content: [
|
|
31
|
+
{
|
|
32
|
+
type: 'text' as const,
|
|
33
|
+
text: JSON.stringify({ assortmentLink }),
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
} catch (error) {
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text' as const,
|
|
42
|
+
text: `Error removing assortment link: ${(error as Error).message}`,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|