@unchainedshop/api 4.0.0-rc.2 → 4.0.0-rc.3

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.
Files changed (417) hide show
  1. package/lib/api-index.d.ts.map +1 -1
  2. package/lib/api-index.js +4 -1
  3. package/lib/api-index.js.map +1 -1
  4. package/lib/errors.d.ts +1 -1
  5. package/lib/errors.d.ts.map +1 -1
  6. package/lib/errors.js +1 -1
  7. package/lib/errors.js.map +1 -1
  8. package/lib/express/chatRouter.d.ts +3 -0
  9. package/lib/express/chatRouter.d.ts.map +1 -0
  10. package/lib/express/chatRouter.js +86 -0
  11. package/lib/express/chatRouter.js.map +1 -0
  12. package/lib/express/createApolloMiddleware.d.ts +4 -0
  13. package/lib/express/createApolloMiddleware.d.ts.map +1 -0
  14. package/lib/express/createApolloMiddleware.js +36 -0
  15. package/lib/express/createApolloMiddleware.js.map +1 -0
  16. package/lib/express/createBulkImportMiddleware copy.d.ts +6 -0
  17. package/lib/express/createBulkImportMiddleware copy.d.ts.map +1 -0
  18. package/lib/express/createBulkImportMiddleware copy.js +49 -0
  19. package/lib/express/createBulkImportMiddleware copy.js.map +1 -0
  20. package/lib/express/createMCPMiddleware.d.ts +2 -6
  21. package/lib/express/createMCPMiddleware.d.ts.map +1 -1
  22. package/lib/express/createMCPMiddleware.js +73 -42
  23. package/lib/express/createMCPMiddleware.js.map +1 -1
  24. package/lib/express/createSingleSignOnMiddleware.d.ts +5 -0
  25. package/lib/express/createSingleSignOnMiddleware.d.ts.map +1 -0
  26. package/lib/express/createSingleSignOnMiddleware.js +71 -0
  27. package/lib/express/createSingleSignOnMiddleware.js.map +1 -0
  28. package/lib/express/createTempUploadMiddleware.d.ts +7 -0
  29. package/lib/express/createTempUploadMiddleware.d.ts.map +1 -0
  30. package/lib/express/createTempUploadMiddleware.js +48 -0
  31. package/lib/express/createTempUploadMiddleware.js.map +1 -0
  32. package/lib/express/index.d.ts.map +1 -1
  33. package/lib/express/index.js +17 -4
  34. package/lib/express/index.js.map +1 -1
  35. package/lib/express/setupMCPChatHandler.d.ts +3 -0
  36. package/lib/express/setupMCPChatHandler.d.ts.map +1 -0
  37. package/lib/express/setupMCPChatHandler.js +57 -0
  38. package/lib/express/setupMCPChatHandler.js.map +1 -0
  39. package/lib/fastify/index.d.ts.map +1 -1
  40. package/lib/fastify/index.js +24 -2
  41. package/lib/fastify/index.js.map +1 -1
  42. package/lib/fastify/mcpChatHandler.d.ts +3 -0
  43. package/lib/fastify/mcpChatHandler.d.ts.map +1 -0
  44. package/lib/fastify/mcpChatHandler.js +60 -0
  45. package/lib/fastify/mcpChatHandler.js.map +1 -0
  46. package/lib/fastify/mcpHandler copy.d.ts +4 -0
  47. package/lib/fastify/mcpHandler copy.d.ts.map +1 -0
  48. package/lib/fastify/mcpHandler copy.js +72 -0
  49. package/lib/fastify/mcpHandler copy.js.map +1 -0
  50. package/lib/fastify/mcpHandler.d.ts +3 -7
  51. package/lib/fastify/mcpHandler.d.ts.map +1 -1
  52. package/lib/fastify/mcpHandler.js +71 -39
  53. package/lib/fastify/mcpHandler.js.map +1 -1
  54. package/lib/fastify/tempUploadHandler.d.ts +4 -0
  55. package/lib/fastify/tempUploadHandler.d.ts.map +1 -0
  56. package/lib/fastify/tempUploadHandler.js +41 -0
  57. package/lib/fastify/tempUploadHandler.js.map +1 -0
  58. package/lib/hashPassword.d.ts +2 -0
  59. package/lib/hashPassword.d.ts.map +1 -0
  60. package/lib/hashPassword.js +5 -0
  61. package/lib/hashPassword.js.map +1 -0
  62. package/lib/loaders/assortmentMediaTextLoader.js +1 -1
  63. package/lib/loaders/assortmentMediaTextLoader.js.map +1 -1
  64. package/lib/loaders/assortmentTextLoader.js +1 -1
  65. package/lib/loaders/assortmentTextLoader.js.map +1 -1
  66. package/lib/loaders/buildLocaleMap.d.ts +6 -0
  67. package/lib/loaders/buildLocaleMap.d.ts.map +1 -0
  68. package/lib/loaders/buildLocaleMap.js +67 -0
  69. package/lib/loaders/buildLocaleMap.js.map +1 -0
  70. package/lib/loaders/buildTextMap.d.ts +1 -1
  71. package/lib/loaders/buildTextMap.d.ts.map +1 -1
  72. package/lib/loaders/buildTextMap.js +19 -6
  73. package/lib/loaders/buildTextMap.js.map +1 -1
  74. package/lib/loaders/filterTextLoader.js +1 -1
  75. package/lib/loaders/filterTextLoader.js.map +1 -1
  76. package/lib/loaders/productMediaTextLoader.d.ts.map +1 -1
  77. package/lib/loaders/productMediaTextLoader.js +1 -1
  78. package/lib/loaders/productMediaTextLoader.js.map +1 -1
  79. package/lib/loaders/productTextLoader.d.ts.map +1 -1
  80. package/lib/loaders/productTextLoader.js +1 -1
  81. package/lib/loaders/productTextLoader.js.map +1 -1
  82. package/lib/mcp/index.d.ts +3 -94
  83. package/lib/mcp/index.d.ts.map +1 -1
  84. package/lib/mcp/index.js +45 -135
  85. package/lib/mcp/index.js.map +1 -1
  86. package/lib/mcp/tools/addProductAssignmentHandler.d.ts +52 -0
  87. package/lib/mcp/tools/addProductAssignmentHandler.d.ts.map +1 -0
  88. package/lib/mcp/tools/addProductAssignmentHandler.js +97 -0
  89. package/lib/mcp/tools/addProductAssignmentHandler.js.map +1 -0
  90. package/lib/mcp/tools/addProductMediaUploadHandler.d.ts +28 -0
  91. package/lib/mcp/tools/addProductMediaUploadHandler.d.ts.map +1 -0
  92. package/lib/mcp/tools/addProductMediaUploadHandler.js +62 -0
  93. package/lib/mcp/tools/addProductMediaUploadHandler.js.map +1 -0
  94. package/lib/mcp/tools/countriesHandler.d.ts +60 -0
  95. package/lib/mcp/tools/countriesHandler.d.ts.map +1 -0
  96. package/lib/mcp/tools/countriesHandler.js +48 -0
  97. package/lib/mcp/tools/countriesHandler.js.map +1 -0
  98. package/lib/mcp/tools/countryHandler.d.ts +20 -0
  99. package/lib/mcp/tools/countryHandler.d.ts.map +1 -0
  100. package/lib/mcp/tools/countryHandler.js +34 -0
  101. package/lib/mcp/tools/countryHandler.js.map +1 -0
  102. package/lib/mcp/tools/createLanguageHandler.d.ts +36 -0
  103. package/lib/mcp/tools/createLanguageHandler.d.ts.map +1 -0
  104. package/lib/mcp/tools/createLanguageHandler.js +39 -0
  105. package/lib/mcp/tools/createLanguageHandler.js.map +1 -0
  106. package/lib/mcp/tools/createProduct.d.ts +138 -0
  107. package/lib/mcp/tools/createProduct.d.ts.map +1 -0
  108. package/lib/mcp/tools/createProduct.js +60 -0
  109. package/lib/mcp/tools/createProduct.js.map +1 -0
  110. package/lib/mcp/tools/createProductVariationHandler.d.ts +84 -0
  111. package/lib/mcp/tools/createProductVariationHandler.d.ts.map +1 -0
  112. package/lib/mcp/tools/createProductVariationHandler.js +73 -0
  113. package/lib/mcp/tools/createProductVariationHandler.js.map +1 -0
  114. package/lib/mcp/tools/createProductVariationOptionHandler.d.ts +60 -0
  115. package/lib/mcp/tools/createProductVariationOptionHandler.d.ts.map +1 -0
  116. package/lib/mcp/tools/createProductVariationOptionHandler.js +59 -0
  117. package/lib/mcp/tools/createProductVariationOptionHandler.js.map +1 -0
  118. package/lib/mcp/tools/currenciesHandler.d.ts +60 -0
  119. package/lib/mcp/tools/currenciesHandler.d.ts.map +1 -0
  120. package/lib/mcp/tools/currenciesHandler.js +50 -0
  121. package/lib/mcp/tools/currenciesHandler.js.map +1 -0
  122. package/lib/mcp/tools/currencyHandler.d.ts +20 -0
  123. package/lib/mcp/tools/currencyHandler.d.ts.map +1 -0
  124. package/lib/mcp/tools/currencyHandler.js +34 -0
  125. package/lib/mcp/tools/currencyHandler.js.map +1 -0
  126. package/lib/mcp/tools/getProduct.d.ts +48 -0
  127. package/lib/mcp/tools/getProduct.d.ts.map +1 -0
  128. package/lib/mcp/tools/getProduct.js +61 -0
  129. package/lib/mcp/tools/getProduct.js.map +1 -0
  130. package/lib/mcp/tools/index.d.ts +39 -0
  131. package/lib/mcp/tools/index.d.ts.map +1 -0
  132. package/lib/mcp/tools/index.js +39 -0
  133. package/lib/mcp/tools/index.js.map +1 -0
  134. package/lib/mcp/tools/languageHandler.d.ts +20 -0
  135. package/lib/mcp/tools/languageHandler.d.ts.map +1 -0
  136. package/lib/mcp/tools/languageHandler.js +31 -0
  137. package/lib/mcp/tools/languageHandler.js.map +1 -0
  138. package/lib/mcp/tools/languagesHandler.d.ts +60 -0
  139. package/lib/mcp/tools/languagesHandler.d.ts.map +1 -0
  140. package/lib/mcp/tools/languagesHandler.js +42 -0
  141. package/lib/mcp/tools/languagesHandler.js.map +1 -0
  142. package/lib/mcp/tools/listProducts.d.ts +112 -0
  143. package/lib/mcp/tools/listProducts.d.ts.map +1 -0
  144. package/lib/mcp/tools/listProducts.js +110 -0
  145. package/lib/mcp/tools/listProducts.js.map +1 -0
  146. package/lib/mcp/tools/normalizeMediaUrl.d.ts +3 -0
  147. package/lib/mcp/tools/normalizeMediaUrl.d.ts.map +1 -0
  148. package/lib/mcp/tools/normalizeMediaUrl.js +21 -0
  149. package/lib/mcp/tools/normalizeMediaUrl.js.map +1 -0
  150. package/lib/mcp/tools/productReviewsCountHandler.d.ts +20 -0
  151. package/lib/mcp/tools/productReviewsCountHandler.d.ts.map +1 -0
  152. package/lib/mcp/tools/productReviewsCountHandler.js +30 -0
  153. package/lib/mcp/tools/productReviewsCountHandler.js.map +1 -0
  154. package/lib/mcp/tools/productReviewsHandler.d.ts +56 -0
  155. package/lib/mcp/tools/productReviewsHandler.d.ts.map +1 -0
  156. package/lib/mcp/tools/productReviewsHandler.js +45 -0
  157. package/lib/mcp/tools/productReviewsHandler.js.map +1 -0
  158. package/lib/mcp/tools/productsCountHandler.d.ts +32 -0
  159. package/lib/mcp/tools/productsCountHandler.d.ts.map +1 -0
  160. package/lib/mcp/tools/productsCountHandler.js +33 -0
  161. package/lib/mcp/tools/productsCountHandler.js.map +1 -0
  162. package/lib/mcp/tools/publishProduct.d.ts +20 -0
  163. package/lib/mcp/tools/publishProduct.d.ts.map +1 -0
  164. package/lib/mcp/tools/publishProduct.js +40 -0
  165. package/lib/mcp/tools/publishProduct.js.map +1 -0
  166. package/lib/mcp/tools/removeLanguageHandler.d.ts +20 -0
  167. package/lib/mcp/tools/removeLanguageHandler.d.ts.map +1 -0
  168. package/lib/mcp/tools/removeLanguageHandler.js +35 -0
  169. package/lib/mcp/tools/removeLanguageHandler.js.map +1 -0
  170. package/lib/mcp/tools/removeProduct.d.ts +20 -0
  171. package/lib/mcp/tools/removeProduct.d.ts.map +1 -0
  172. package/lib/mcp/tools/removeProduct.js +34 -0
  173. package/lib/mcp/tools/removeProduct.js.map +1 -0
  174. package/lib/mcp/tools/removeProductAssignmentHandler.d.ts +48 -0
  175. package/lib/mcp/tools/removeProductAssignmentHandler.d.ts.map +1 -0
  176. package/lib/mcp/tools/removeProductAssignmentHandler.js +51 -0
  177. package/lib/mcp/tools/removeProductAssignmentHandler.js.map +1 -0
  178. package/lib/mcp/tools/removeProductHandler.d.ts +20 -0
  179. package/lib/mcp/tools/removeProductHandler.d.ts.map +1 -0
  180. package/lib/mcp/tools/removeProductHandler.js +34 -0
  181. package/lib/mcp/tools/removeProductHandler.js.map +1 -0
  182. package/lib/mcp/tools/removeProductMediaHandler.d.ts +20 -0
  183. package/lib/mcp/tools/removeProductMediaHandler.d.ts.map +1 -0
  184. package/lib/mcp/tools/removeProductMediaHandler.js +42 -0
  185. package/lib/mcp/tools/removeProductMediaHandler.js.map +1 -0
  186. package/lib/mcp/tools/removeProductVariationHandler.d.ts +20 -0
  187. package/lib/mcp/tools/removeProductVariationHandler.d.ts.map +1 -0
  188. package/lib/mcp/tools/removeProductVariationHandler.js +43 -0
  189. package/lib/mcp/tools/removeProductVariationHandler.js.map +1 -0
  190. package/lib/mcp/tools/removeProductVariationOptionHandler.d.ts +24 -0
  191. package/lib/mcp/tools/removeProductVariationOptionHandler.d.ts.map +1 -0
  192. package/lib/mcp/tools/removeProductVariationOptionHandler.js +47 -0
  193. package/lib/mcp/tools/removeProductVariationOptionHandler.js.map +1 -0
  194. package/lib/mcp/tools/reorderProductMediaHandler.d.ts +44 -0
  195. package/lib/mcp/tools/reorderProductMediaHandler.d.ts.map +1 -0
  196. package/lib/mcp/tools/reorderProductMediaHandler.js +39 -0
  197. package/lib/mcp/tools/reorderProductMediaHandler.js.map +1 -0
  198. package/lib/mcp/tools/unPublishProduct.d.ts +20 -0
  199. package/lib/mcp/tools/unPublishProduct.d.ts.map +1 -0
  200. package/lib/mcp/tools/unPublishProduct.js +40 -0
  201. package/lib/mcp/tools/unPublishProduct.js.map +1 -0
  202. package/lib/mcp/tools/updateLanguageHandler.d.ts +48 -0
  203. package/lib/mcp/tools/updateLanguageHandler.d.ts.map +1 -0
  204. package/lib/mcp/tools/updateLanguageHandler.js +40 -0
  205. package/lib/mcp/tools/updateLanguageHandler.js.map +1 -0
  206. package/lib/mcp/tools/updateProduct.d.ts +56 -0
  207. package/lib/mcp/tools/updateProduct.d.ts.map +1 -0
  208. package/lib/mcp/tools/updateProduct.js +44 -0
  209. package/lib/mcp/tools/updateProduct.js.map +1 -0
  210. package/lib/mcp/tools/updateProductCommerceHandler.d.ts +166 -0
  211. package/lib/mcp/tools/updateProductCommerceHandler.d.ts.map +1 -0
  212. package/lib/mcp/tools/updateProductCommerceHandler.js +64 -0
  213. package/lib/mcp/tools/updateProductCommerceHandler.js.map +1 -0
  214. package/lib/mcp/tools/updateProductMediaTextsHandler.d.ts +56 -0
  215. package/lib/mcp/tools/updateProductMediaTextsHandler.d.ts.map +1 -0
  216. package/lib/mcp/tools/updateProductMediaTextsHandler.js +45 -0
  217. package/lib/mcp/tools/updateProductMediaTextsHandler.js.map +1 -0
  218. package/lib/mcp/tools/updateProductPlanHandler.d.ts +72 -0
  219. package/lib/mcp/tools/updateProductPlanHandler.d.ts.map +1 -0
  220. package/lib/mcp/tools/updateProductPlanHandler.js +51 -0
  221. package/lib/mcp/tools/updateProductPlanHandler.js.map +1 -0
  222. package/lib/mcp/tools/updateProductSupplyHandler.d.ts +64 -0
  223. package/lib/mcp/tools/updateProductSupplyHandler.d.ts.map +1 -0
  224. package/lib/mcp/tools/updateProductSupplyHandler.js +52 -0
  225. package/lib/mcp/tools/updateProductSupplyHandler.js.map +1 -0
  226. package/lib/mcp/tools/updateProductTextsHandler.d.ts +114 -0
  227. package/lib/mcp/tools/updateProductTextsHandler.d.ts.map +1 -0
  228. package/lib/mcp/tools/updateProductTextsHandler.js +50 -0
  229. package/lib/mcp/tools/updateProductTextsHandler.js.map +1 -0
  230. package/lib/mcp/tools/updateProductTokenizationHandler.d.ts +72 -0
  231. package/lib/mcp/tools/updateProductTokenizationHandler.d.ts.map +1 -0
  232. package/lib/mcp/tools/updateProductTokenizationHandler.js +49 -0
  233. package/lib/mcp/tools/updateProductTokenizationHandler.js.map +1 -0
  234. package/lib/mcp/tools/updateProductWarehousingHandler.d.ts +48 -0
  235. package/lib/mcp/tools/updateProductWarehousingHandler.d.ts.map +1 -0
  236. package/lib/mcp/tools/updateProductWarehousingHandler.js +45 -0
  237. package/lib/mcp/tools/updateProductWarehousingHandler.js.map +1 -0
  238. package/lib/mcp/utils/getNormalizedProductDetails.d.ts +26 -0
  239. package/lib/mcp/utils/getNormalizedProductDetails.d.ts.map +1 -0
  240. package/lib/mcp/utils/getNormalizedProductDetails.js +38 -0
  241. package/lib/mcp/utils/getNormalizedProductDetails.js.map +1 -0
  242. package/lib/mcp/utils/normalizeMediaUrl.d.ts +3 -0
  243. package/lib/mcp/utils/normalizeMediaUrl.d.ts.map +1 -0
  244. package/lib/mcp/utils/normalizeMediaUrl.js +21 -0
  245. package/lib/mcp/utils/normalizeMediaUrl.js.map +1 -0
  246. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.d.ts +3 -0
  247. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.d.ts.map +1 -0
  248. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.js +6 -0
  249. package/lib/resolvers/mutations/accounts/buildSecretTOTPAuthURL.js.map +1 -0
  250. package/lib/resolvers/mutations/accounts/disableTOTP.d.ts +6 -0
  251. package/lib/resolvers/mutations/accounts/disableTOTP.d.ts.map +1 -0
  252. package/lib/resolvers/mutations/accounts/disableTOTP.js +27 -0
  253. package/lib/resolvers/mutations/accounts/disableTOTP.js.map +1 -0
  254. package/lib/resolvers/mutations/accounts/enableTOTP.d.ts +6 -0
  255. package/lib/resolvers/mutations/accounts/enableTOTP.d.ts.map +1 -0
  256. package/lib/resolvers/mutations/accounts/enableTOTP.js +20 -0
  257. package/lib/resolvers/mutations/accounts/enableTOTP.js.map +1 -0
  258. package/lib/resolvers/mutations/accounts/linkOAuthAccount.d.ts +7 -0
  259. package/lib/resolvers/mutations/accounts/linkOAuthAccount.d.ts.map +1 -0
  260. package/lib/resolvers/mutations/accounts/linkOAuthAccount.js +30 -0
  261. package/lib/resolvers/mutations/accounts/linkOAuthAccount.js.map +1 -0
  262. package/lib/resolvers/mutations/accounts/loginWithOAuth.d.ts +8 -0
  263. package/lib/resolvers/mutations/accounts/loginWithOAuth.d.ts.map +1 -0
  264. package/lib/resolvers/mutations/accounts/loginWithOAuth.js +25 -0
  265. package/lib/resolvers/mutations/accounts/loginWithOAuth.js.map +1 -0
  266. package/lib/resolvers/mutations/accounts/logoutAllSessions.d.ts +5 -0
  267. package/lib/resolvers/mutations/accounts/logoutAllSessions.d.ts.map +1 -0
  268. package/lib/resolvers/mutations/accounts/logoutAllSessions.js +20 -0
  269. package/lib/resolvers/mutations/accounts/logoutAllSessions.js.map +1 -0
  270. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.d.ts +6 -0
  271. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.d.ts.map +1 -0
  272. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.js +13 -0
  273. package/lib/resolvers/mutations/accounts/unlinkOAuthAccount.js.map +1 -0
  274. package/lib/resolvers/mutations/assortments/addAssortmentMedia.d.ts +6 -0
  275. package/lib/resolvers/mutations/assortments/addAssortmentMedia.d.ts.map +1 -0
  276. package/lib/resolvers/mutations/assortments/addAssortmentMedia.js +18 -0
  277. package/lib/resolvers/mutations/assortments/addAssortmentMedia.js.map +1 -0
  278. package/lib/resolvers/mutations/products/addProductAssignment.d.ts.map +1 -1
  279. package/lib/resolvers/mutations/products/addProductAssignment.js +3 -1
  280. package/lib/resolvers/mutations/products/addProductAssignment.js.map +1 -1
  281. package/lib/resolvers/mutations/products/addProductMedia.d.ts +6 -0
  282. package/lib/resolvers/mutations/products/addProductMedia.d.ts.map +1 -0
  283. package/lib/resolvers/mutations/products/addProductMedia.js +18 -0
  284. package/lib/resolvers/mutations/products/addProductMedia.js.map +1 -0
  285. package/lib/resolvers/mutations/users/updateUserAvatar.d.ts +6 -0
  286. package/lib/resolvers/mutations/users/updateUserAvatar.d.ts.map +1 -0
  287. package/lib/resolvers/mutations/users/updateUserAvatar.js +22 -0
  288. package/lib/resolvers/mutations/users/updateUserAvatar.js.map +1 -0
  289. package/lib/resolvers/mutations/utils/getOrderCart.d.ts +7 -0
  290. package/lib/resolvers/mutations/utils/getOrderCart.d.ts.map +1 -0
  291. package/lib/resolvers/mutations/utils/getOrderCart.js +13 -0
  292. package/lib/resolvers/mutations/utils/getOrderCart.js.map +1 -0
  293. package/lib/resolvers/queries/filters/searchAssortments.d.ts.map +1 -1
  294. package/lib/resolvers/queries/filters/searchAssortments.js +0 -5
  295. package/lib/resolvers/queries/filters/searchAssortments.js.map +1 -1
  296. package/lib/resolvers/queries/filters/searchProducts.d.ts.map +1 -1
  297. package/lib/resolvers/queries/filters/searchProducts.js +2 -7
  298. package/lib/resolvers/queries/filters/searchProducts.js.map +1 -1
  299. package/lib/resolvers/type/dispatch-types.d.ts +15 -0
  300. package/lib/resolvers/type/dispatch-types.d.ts.map +1 -0
  301. package/lib/resolvers/type/dispatch-types.js +16 -0
  302. package/lib/resolvers/type/dispatch-types.js.map +1 -0
  303. package/lib/resolvers/type/oauth-account.d.ts +6 -0
  304. package/lib/resolvers/type/oauth-account.d.ts.map +1 -0
  305. package/lib/resolvers/type/oauth-account.js +7 -0
  306. package/lib/resolvers/type/oauth-account.js.map +1 -0
  307. package/lib/resolvers/type/oauth-provider.d.ts +6 -0
  308. package/lib/resolvers/type/oauth-provider.d.ts.map +1 -0
  309. package/lib/resolvers/type/oauth-provider.js +6 -0
  310. package/lib/resolvers/type/oauth-provider.js.map +1 -0
  311. package/lib/resolvers/type/stock-types.d.ts +14 -0
  312. package/lib/resolvers/type/stock-types.d.ts.map +1 -0
  313. package/lib/resolvers/type/stock-types.js +15 -0
  314. package/lib/resolvers/type/stock-types.js.map +1 -0
  315. package/lib/roles/all.d.ts.map +1 -1
  316. package/lib/roles/all.js +1 -0
  317. package/lib/roles/all.js.map +1 -1
  318. package/lib/roles/index.d.ts.map +1 -1
  319. package/lib/roles/index.js +1 -0
  320. package/lib/roles/index.js.map +1 -1
  321. package/lib/roles/loggedIn.d.ts.map +1 -1
  322. package/lib/roles/loggedIn.js +1 -0
  323. package/lib/roles/loggedIn.js.map +1 -1
  324. package/lib/user-context.d.ts +7 -0
  325. package/lib/user-context.d.ts.map +1 -0
  326. package/lib/user-context.js +76 -0
  327. package/lib/user-context.js.map +1 -0
  328. package/package.json +34 -18
  329. package/src/api-index.ts +4 -1
  330. package/src/errors.ts +5 -4
  331. package/src/express/createMCPMiddleware.ts +91 -0
  332. package/src/express/createTempUploadMiddleware.ts +60 -0
  333. package/src/express/index.ts +35 -6
  334. package/src/fastify/index.ts +32 -2
  335. package/src/fastify/mcpHandler.ts +97 -0
  336. package/src/fastify/tempUploadHandler.ts +52 -0
  337. package/src/loaders/assortmentMediaTextLoader.ts +1 -1
  338. package/src/loaders/assortmentTextLoader.ts +1 -1
  339. package/src/loaders/buildLocaleMap.test.ts +65 -0
  340. package/src/loaders/buildLocaleMap.ts +73 -0
  341. package/src/loaders/buildTextMap.test.ts +54 -0
  342. package/src/loaders/buildTextMap.ts +25 -6
  343. package/src/loaders/filterTextLoader.ts +1 -1
  344. package/src/loaders/productMediaTextLoader.ts +1 -1
  345. package/src/loaders/productTextLoader.ts +1 -1
  346. package/src/mcp/README.md +25 -0
  347. package/src/mcp/index.ts +313 -0
  348. package/src/mcp/tools/addProductAssignmentHandler.ts +118 -0
  349. package/src/mcp/tools/addProductMediaUploadHandler.ts +79 -0
  350. package/src/mcp/tools/countriesHandler.ts +60 -0
  351. package/src/mcp/tools/countryHandler.ts +40 -0
  352. package/src/mcp/tools/createLanguageHandler.ts +46 -0
  353. package/src/mcp/tools/createProduct.ts +75 -0
  354. package/src/mcp/tools/createProductVariationHandler.ts +93 -0
  355. package/src/mcp/tools/createProductVariationOptionHandler.ts +73 -0
  356. package/src/mcp/tools/currenciesHandler.ts +63 -0
  357. package/src/mcp/tools/currencyHandler.ts +40 -0
  358. package/src/mcp/tools/getProduct.ts +74 -0
  359. package/src/mcp/tools/index.ts +39 -0
  360. package/src/mcp/tools/languageHandler.ts +37 -0
  361. package/src/mcp/tools/languagesHandler.ts +54 -0
  362. package/src/mcp/tools/listProducts.ts +148 -0
  363. package/src/mcp/tools/productReviewsCountHandler.ts +36 -0
  364. package/src/mcp/tools/productReviewsHandler.ts +54 -0
  365. package/src/mcp/tools/productsCountHandler.ts +38 -0
  366. package/src/mcp/tools/publishProduct.ts +45 -0
  367. package/src/mcp/tools/removeLanguageHandler.ts +42 -0
  368. package/src/mcp/tools/removeProductAssignmentHandler.ts +61 -0
  369. package/src/mcp/tools/removeProductHandler.ts +40 -0
  370. package/src/mcp/tools/removeProductMediaHandler.ts +49 -0
  371. package/src/mcp/tools/removeProductVariationHandler.ts +51 -0
  372. package/src/mcp/tools/removeProductVariationOptionHandler.ts +58 -0
  373. package/src/mcp/tools/reorderProductMediaHandler.ts +48 -0
  374. package/src/mcp/tools/unPublishProduct.ts +46 -0
  375. package/src/mcp/tools/updateLanguageHandler.ts +47 -0
  376. package/src/mcp/tools/updateProduct.ts +51 -0
  377. package/src/mcp/tools/updateProductCommerceHandler.ts +79 -0
  378. package/src/mcp/tools/updateProductMediaTextsHandler.ts +56 -0
  379. package/src/mcp/tools/updateProductPlanHandler.ts +58 -0
  380. package/src/mcp/tools/updateProductSupplyHandler.ts +59 -0
  381. package/src/mcp/tools/updateProductTextsHandler.ts +59 -0
  382. package/src/mcp/tools/updateProductTokenizationHandler.ts +58 -0
  383. package/src/mcp/tools/updateProductWarehousingHandler.ts +54 -0
  384. package/src/mcp/utils/getNormalizedProductDetails.ts +42 -0
  385. package/src/mcp/utils/normalizeMediaUrl.ts +26 -0
  386. package/src/resolvers/mutations/products/addProductAssignment.ts +3 -0
  387. package/src/resolvers/queries/filters/searchAssortments.ts +0 -5
  388. package/src/resolvers/queries/filters/searchProducts.ts +2 -7
  389. package/src/roles/all.ts +1 -0
  390. package/src/roles/index.ts +1 -0
  391. package/src/roles/loggedIn.ts +1 -0
  392. package/lib/express/mcpHandler.d.ts.map +0 -1
  393. package/lib/express/mcpHandler.js +0 -68
  394. package/lib/express/mcpHandler.js.map +0 -1
  395. package/lib/fastify/index copy.d.ts.map +0 -1
  396. package/lib/fastify/index copy.js +0 -157
  397. package/lib/fastify/index copy.js.map +0 -1
  398. package/lib/mcp/server.d.ts +0 -4
  399. package/lib/mcp/server.d.ts.map +0 -1
  400. package/lib/mcp/server.js +0 -60
  401. package/lib/mcp/server.js.map +0 -1
  402. package/lib/mcp/types.d.ts +0 -28
  403. package/lib/mcp/types.d.ts.map +0 -1
  404. package/lib/mcp/types.js +0 -2
  405. package/lib/mcp/types.js.map +0 -1
  406. package/lib/middleware/accountLockout.d.ts.map +0 -1
  407. package/lib/middleware/accountLockout.js +0 -84
  408. package/lib/middleware/accountLockout.js.map +0 -1
  409. package/lib/middleware/rateLimiter.d.ts.map +0 -1
  410. package/lib/middleware/rateLimiter.js +0 -91
  411. package/lib/middleware/rateLimiter.js.map +0 -1
  412. package/lib/plugins/inputValidation.d.ts.map +0 -1
  413. package/lib/plugins/inputValidation.js +0 -95
  414. package/lib/plugins/inputValidation.js.map +0 -1
  415. package/lib/utils/inputValidation.d.ts.map +0 -1
  416. package/lib/utils/inputValidation.js +0 -51
  417. package/lib/utils/inputValidation.js.map +0 -1
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+
4
+ export const ProductReviewsCountSchema = {
5
+ queryString: z.string().optional().describe('Optional query string to filter reviews'),
6
+ };
7
+
8
+ export const ProductReviewsCountZodSchema = z.object(ProductReviewsCountSchema);
9
+
10
+ export type ProductReviewsCountParams = z.infer<typeof ProductReviewsCountZodSchema>;
11
+
12
+ export async function productReviewsCountHandler(context: Context, params: ProductReviewsCountParams) {
13
+ const { modules } = context;
14
+
15
+ try {
16
+ const count = await modules.products.reviews.count(params);
17
+
18
+ return {
19
+ content: [
20
+ {
21
+ type: 'text' as const,
22
+ text: count.toString(),
23
+ },
24
+ ],
25
+ };
26
+ } catch (error) {
27
+ return {
28
+ content: [
29
+ {
30
+ type: 'text' as const,
31
+ text: `Error fetching review count: ${(error as Error).message}`,
32
+ },
33
+ ],
34
+ };
35
+ }
36
+ }
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { log } from '@unchainedshop/logger';
4
+
5
+ const SortDirectionEnum = z.enum(['asc', 'desc']); // assuming these are your directions
6
+
7
+ export const ProductReviewsSchema = {
8
+ limit: z.number().int().min(1).max(100).default(10).describe('Number of reviews to return'),
9
+ offset: z.number().int().min(0).default(0).describe('Number of reviews to skip'),
10
+ sort: z
11
+ .array(
12
+ z.object({
13
+ key: z.string().min(1).describe('Field to sort by'),
14
+ value: SortDirectionEnum.describe('Sort direction: asc or desc'),
15
+ }),
16
+ )
17
+ .optional()
18
+ .describe('Sort options'),
19
+ queryString: z.string().optional().describe('Optional filter query'),
20
+ };
21
+
22
+ export const ProductReviewsZodSchema = z.object(ProductReviewsSchema);
23
+
24
+ export type ProductReviewsParams = z.infer<typeof ProductReviewsZodSchema>;
25
+
26
+ export async function productReviewsHandler(context: Context, params: ProductReviewsParams) {
27
+ const { limit, offset, queryString } = params;
28
+ const { modules, userId } = context;
29
+
30
+ try {
31
+ log(`query productReviews: ${limit} ${offset} ${queryString || ''}`, {
32
+ userId,
33
+ });
34
+
35
+ const reviews = await modules.products.reviews.findProductReviews(params as any);
36
+ return {
37
+ content: [
38
+ {
39
+ type: 'text' as const,
40
+ text: JSON.stringify({ reviews }),
41
+ },
42
+ ],
43
+ };
44
+ } catch (error) {
45
+ return {
46
+ content: [
47
+ {
48
+ type: 'text' as const,
49
+ text: `Error fetching product reviews: ${(error as Error).message}`,
50
+ },
51
+ ],
52
+ };
53
+ }
54
+ }
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+
4
+ export const ProductsCountSchema = {
5
+ tags: z.array(z.string().min(1)).optional(),
6
+ slugs: z.array(z.string().min(1)).optional(),
7
+ includeDrafts: z.boolean().default(false),
8
+ queryString: z.string().min(1).optional(),
9
+ };
10
+
11
+ export const ProductsCountZodSchema = z.object(ProductsCountSchema);
12
+ export type ProductsCountParams = z.infer<typeof ProductsCountZodSchema>;
13
+
14
+ export async function productsCountHandler(context: Context, params: ProductsCountParams) {
15
+ const { modules } = context;
16
+
17
+ try {
18
+ const count = await modules.products.count(params);
19
+
20
+ return {
21
+ content: [
22
+ {
23
+ type: 'text' as const,
24
+ text: count.toString(),
25
+ },
26
+ ],
27
+ };
28
+ } catch (error) {
29
+ return {
30
+ content: [
31
+ {
32
+ type: 'text' as const,
33
+ text: `Error counting products: ${(error as Error).message}`,
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ }
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { ProductNotFoundError, ProductWrongStatusError } from '../../errors.js';
4
+ import { getNormalizedProductDetails } from '../utils/getNormalizedProductDetails.js';
5
+
6
+ export const PublishProductSchema = {
7
+ productId: z.string().min(1).describe('ID of the product to publish'),
8
+ };
9
+
10
+ export const PublishProductZodSchema = z.object(PublishProductSchema);
11
+
12
+ export type PublishProductParams = z.infer<typeof PublishProductZodSchema>;
13
+
14
+ export async function publishProductHandler(context: Context, params: PublishProductParams) {
15
+ const { productId } = params;
16
+ const { modules } = context;
17
+ try {
18
+ const product = await modules.products.findProduct({ productId });
19
+ if (!product) throw new ProductNotFoundError({ productId });
20
+
21
+ if (!(await modules.products.publish(product))) {
22
+ throw new ProductWrongStatusError({ status: product.status });
23
+ }
24
+
25
+ return {
26
+ content: [
27
+ {
28
+ type: 'text' as const,
29
+ text: JSON.stringify({
30
+ product: await getNormalizedProductDetails(productId, context),
31
+ }),
32
+ },
33
+ ],
34
+ };
35
+ } catch (error) {
36
+ return {
37
+ content: [
38
+ {
39
+ type: 'text' as const,
40
+ text: `Error publishing product: ${(error as Error).message}`,
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ }
@@ -0,0 +1,42 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { LanguageNotFoundError } from '../../errors.js';
4
+
5
+ export const RemoveLanguageSchema = {
6
+ languageId: z.string().min(1).describe('ID of the language to remove'),
7
+ };
8
+
9
+ export const RemoveLanguageZodSchema = z.object(RemoveLanguageSchema);
10
+ export type RemoveLanguageParams = z.infer<typeof RemoveLanguageZodSchema>;
11
+
12
+ export async function removeLanguageHandler(context: Context, params: RemoveLanguageParams) {
13
+ const { languageId } = params;
14
+ const { modules } = context;
15
+
16
+ try {
17
+ if (!(await modules.languages.languageExists({ languageId })))
18
+ throw new LanguageNotFoundError({ languageId });
19
+
20
+ await modules.languages.delete(languageId);
21
+
22
+ const removeLanguage = await modules.languages.findLanguage({ languageId });
23
+
24
+ return {
25
+ content: [
26
+ {
27
+ type: 'text' as const,
28
+ text: JSON.stringify({ language: removeLanguage }),
29
+ },
30
+ ],
31
+ };
32
+ } catch (error) {
33
+ return {
34
+ content: [
35
+ {
36
+ type: 'text' as const,
37
+ text: `Error removing language: ${(error as Error).message}`,
38
+ },
39
+ ],
40
+ };
41
+ }
42
+ }
@@ -0,0 +1,61 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { getNormalizedProductDetails } from '../utils/getNormalizedProductDetails.js';
4
+ import { ProductWrongTypeError } from '../../errors.js';
5
+ import { ProductTypes } from '@unchainedshop/core-products';
6
+
7
+ const ProductAssignmentVectorSchema = z.object({
8
+ key: z.string().min(1).describe('Attribute key (e.g., "Color", "Size")'),
9
+ value: z.string().min(1).describe('Attribute value (e.g., "Red", "M")'),
10
+ });
11
+
12
+ export const RemoveProductAssignmentSchema = {
13
+ proxyId: z.string().min(1).describe('ID of the configurable_product'),
14
+ vectors: z
15
+ .array(ProductAssignmentVectorSchema)
16
+ .min(1)
17
+ .describe('Combination of attributes uniquely identifying the variant'),
18
+ };
19
+ export const RemoveProductAssignmentZodSchema = z.object(RemoveProductAssignmentSchema);
20
+ export type RemoveProductAssignmentParams = z.infer<typeof RemoveProductAssignmentZodSchema>;
21
+
22
+ export async function removeProductAssignmentHandler(
23
+ context: Context,
24
+ params: RemoveProductAssignmentParams,
25
+ ) {
26
+ const { proxyId, vectors } = params;
27
+ const { modules } = context;
28
+
29
+ try {
30
+ const product = await modules.products.findProduct({ productId: proxyId });
31
+
32
+ if (product.type !== ProductTypes.ConfigurableProduct)
33
+ throw new ProductWrongTypeError({
34
+ productId: proxyId,
35
+ received: product.type,
36
+ required: ProductTypes.ConfigurableProduct,
37
+ });
38
+
39
+ await modules.products.assignments.removeAssignment(proxyId, { vectors: vectors as any });
40
+
41
+ return {
42
+ content: [
43
+ {
44
+ type: 'text' as const,
45
+ text: JSON.stringify({
46
+ product: await getNormalizedProductDetails(proxyId, context),
47
+ }),
48
+ },
49
+ ],
50
+ };
51
+ } catch (error) {
52
+ return {
53
+ content: [
54
+ {
55
+ type: 'text' as const,
56
+ text: `Error removing product assignment: ${(error as Error).message}`,
57
+ },
58
+ ],
59
+ };
60
+ }
61
+ }
@@ -0,0 +1,40 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { getNormalizedProductDetails } from '../utils/getNormalizedProductDetails.js';
4
+
5
+ export const RemoveProductSchema = {
6
+ productId: z.string().min(1).describe('ID of the product to remove'),
7
+ };
8
+
9
+ export const RemoveProductZodSchema = z.object(RemoveProductSchema);
10
+
11
+ export type RemoveProductParams = z.infer<typeof RemoveProductZodSchema>;
12
+
13
+ export async function removeProductHandler(context: Context, params: RemoveProductParams) {
14
+ const { productId } = params;
15
+ const { services } = context;
16
+
17
+ try {
18
+ await services.products.removeProduct({ productId });
19
+
20
+ return {
21
+ content: [
22
+ {
23
+ type: 'text' as const,
24
+ text: JSON.stringify({
25
+ product: await getNormalizedProductDetails(productId, context),
26
+ }),
27
+ },
28
+ ],
29
+ };
30
+ } catch (error) {
31
+ return {
32
+ content: [
33
+ {
34
+ type: 'text' as const,
35
+ text: `Error removing product: ${(error as Error).message}`,
36
+ },
37
+ ],
38
+ };
39
+ }
40
+ }
@@ -0,0 +1,49 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { log } from '@unchainedshop/logger';
4
+ import { ProductMediaNotFoundError } from '../../errors.js';
5
+
6
+ export const RemoveProductMediaSchema = {
7
+ productMediaId: z.string().min(1).describe('ID of the product media to be removed'),
8
+ };
9
+
10
+ export const RemoveProductMediaZodSchema = z.object(RemoveProductMediaSchema);
11
+
12
+ export type RemoveProductMediaParams = z.infer<typeof RemoveProductMediaZodSchema>;
13
+
14
+ export async function removeProductMediaHandler(context: Context, params: RemoveProductMediaParams) {
15
+ const { productMediaId } = params;
16
+ const { modules, userId } = context;
17
+
18
+ try {
19
+ log('removeProductMediaHandler', { userId, productMediaId });
20
+
21
+ const productMedia = await modules.products.media.findProductMedia({
22
+ productMediaId,
23
+ });
24
+ if (!productMedia) throw new ProductMediaNotFoundError({ productMediaId });
25
+
26
+ await modules.files.delete(productMedia.mediaId);
27
+ await modules.products.media.delete(productMediaId);
28
+
29
+ return {
30
+ content: [
31
+ {
32
+ type: 'text' as const,
33
+ text: JSON.stringify({
34
+ media: productMedia,
35
+ }),
36
+ },
37
+ ],
38
+ };
39
+ } catch (error) {
40
+ return {
41
+ content: [
42
+ {
43
+ type: 'text' as const,
44
+ text: `Error removing product media: ${(error as Error).message}`,
45
+ },
46
+ ],
47
+ };
48
+ }
49
+ }
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { ProductVariationNotFoundError } from '../../errors.js';
4
+ import { getNormalizedProductDetails } from '../utils/getNormalizedProductDetails.js';
5
+
6
+ export const RemoveProductVariationSchema = {
7
+ productVariationId: z
8
+ .string()
9
+ .min(1)
10
+ .describe('ID of the product variation to remove. it should be a valid product variation ID'),
11
+ };
12
+
13
+ export const RemoveProductVariationZodSchema = z.object(RemoveProductVariationSchema);
14
+ export type RemoveProductVariationParams = z.infer<typeof RemoveProductVariationZodSchema>;
15
+
16
+ export async function removeProductVariationHandler(
17
+ context: Context,
18
+ params: RemoveProductVariationParams,
19
+ ) {
20
+ const { productVariationId } = params;
21
+ const { modules } = context;
22
+
23
+ try {
24
+ const productVariation = await modules.products.variations.findProductVariation({
25
+ productVariationId,
26
+ });
27
+ if (!productVariation) throw new ProductVariationNotFoundError({ productVariationId });
28
+
29
+ await modules.products.variations.delete(productVariationId);
30
+
31
+ return {
32
+ content: [
33
+ {
34
+ type: 'text' as const,
35
+ text: JSON.stringify({
36
+ product: await getNormalizedProductDetails(productVariationId, context),
37
+ }),
38
+ },
39
+ ],
40
+ };
41
+ } catch (error) {
42
+ return {
43
+ content: [
44
+ {
45
+ type: 'text' as const,
46
+ text: `Error removing product variation: ${(error as Error).message}`,
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ }
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { getNormalizedProductDetails } from '../utils/getNormalizedProductDetails.js';
4
+ import { ProductVariationNotFoundError } from '../../errors.js';
5
+
6
+ export const RemoveProductVariationOptionSchema = {
7
+ productVariationId: z
8
+ .string()
9
+ .min(1)
10
+ .describe('ID of the product variation, it should be a CONFIGURABLE_PRODUCT type only'),
11
+ productVariationOptionValue: z
12
+ .string()
13
+ .min(1)
14
+ .describe('existing Option value in the product to remove (e.g., "Red")'),
15
+ };
16
+
17
+ export const RemoveProductVariationOptionZodSchema = z.object(RemoveProductVariationOptionSchema);
18
+ export type RemoveProductVariationOptionParams = z.infer<typeof RemoveProductVariationOptionZodSchema>;
19
+
20
+ export async function removeProductVariationOptionHandler(
21
+ context: Context,
22
+ params: RemoveProductVariationOptionParams,
23
+ ) {
24
+ const { productVariationId, productVariationOptionValue } = params;
25
+ const { modules } = context;
26
+
27
+ try {
28
+ const productVariation = await modules.products.variations.findProductVariation({
29
+ productVariationId,
30
+ });
31
+ if (!productVariation) throw new ProductVariationNotFoundError({ productVariationId });
32
+
33
+ await modules.products.variations.removeVariationOption(
34
+ productVariationId,
35
+ productVariationOptionValue,
36
+ );
37
+
38
+ return {
39
+ content: [
40
+ {
41
+ type: 'text' as const,
42
+ text: JSON.stringify({
43
+ product: await getNormalizedProductDetails(productVariation.productId, context),
44
+ }),
45
+ },
46
+ ],
47
+ };
48
+ } catch (error) {
49
+ return {
50
+ content: [
51
+ {
52
+ type: 'text' as const,
53
+ text: `Error removing variation option: ${(error as Error).message}`,
54
+ },
55
+ ],
56
+ };
57
+ }
58
+ }
@@ -0,0 +1,48 @@
1
+ import { log } from '@unchainedshop/logger';
2
+ import { Context } from '../../context.js';
3
+ import { z } from 'zod';
4
+
5
+ export const ReorderProductMediaSchema = {
6
+ sortKeys: z
7
+ .array(
8
+ z.object({
9
+ productMediaId: z.string().min(1).describe('ID of the media asset'),
10
+ sortKey: z.number().int().describe('New sort key for ordering'),
11
+ }),
12
+ )
13
+ .min(1)
14
+ .describe('Array of product media IDs with their sort order'),
15
+ };
16
+
17
+ export const ReorderProductMediaZodSchema = z.object(ReorderProductMediaSchema);
18
+
19
+ export type ReorderProductMediaParams = z.infer<typeof ReorderProductMediaZodSchema>;
20
+
21
+ export async function reorderProductMediaHandler(context: Context, params: ReorderProductMediaParams) {
22
+ const { sortKeys } = params;
23
+ const { modules, userId } = context;
24
+
25
+ try {
26
+ log('mutation reorderProductMedia', { userId });
27
+
28
+ const reorderedMedia = await modules.products.media.updateManualOrder({ sortKeys: sortKeys as any });
29
+
30
+ return {
31
+ content: [
32
+ {
33
+ type: 'text' as const,
34
+ text: JSON.stringify({ reorderedMedia }, null, 2),
35
+ },
36
+ ],
37
+ };
38
+ } catch (error) {
39
+ return {
40
+ content: [
41
+ {
42
+ type: 'text' as const,
43
+ text: `Error reordering product media: ${(error as Error).message}`,
44
+ },
45
+ ],
46
+ };
47
+ }
48
+ }
@@ -0,0 +1,46 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { ProductNotFoundError, ProductWrongStatusError } from '../../errors.js';
4
+ import { getNormalizedProductDetails } from '../utils/getNormalizedProductDetails.js';
5
+
6
+ export const UnpublishProductSchema = {
7
+ productId: z.string().min(1).describe('ID of the product to unpublish'),
8
+ };
9
+
10
+ export const UnpublishProductZodSchema = z.object(UnpublishProductSchema);
11
+
12
+ export type UnpublishProductParams = z.infer<typeof UnpublishProductZodSchema>;
13
+
14
+ export async function unpublishProductHandler(context: Context, params: UnpublishProductParams) {
15
+ const { productId } = params;
16
+ const { modules } = context;
17
+
18
+ try {
19
+ const product = await modules.products.findProduct({ productId });
20
+ if (!product) throw new ProductNotFoundError({ productId });
21
+
22
+ if (!(await modules.products.unpublish(product))) {
23
+ throw new ProductWrongStatusError({ status: product.status });
24
+ }
25
+
26
+ return {
27
+ content: [
28
+ {
29
+ type: 'text' as const,
30
+ text: JSON.stringify({
31
+ product: await getNormalizedProductDetails(productId, context),
32
+ }),
33
+ },
34
+ ],
35
+ };
36
+ } catch (error) {
37
+ return {
38
+ content: [
39
+ {
40
+ type: 'text' as const,
41
+ text: `Error unPublishing product: ${(error as Error).message}`,
42
+ },
43
+ ],
44
+ };
45
+ }
46
+ }
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { LanguageNotFoundError } from '../../errors.js';
4
+
5
+ const UpdateLanguageInputSchema = z.object({
6
+ isoCode: z.string().min(2).max(10).describe('Updated ISO code for the language'),
7
+ isActive: z.boolean().optional().describe('Whether the language is active'),
8
+ });
9
+
10
+ export const UpdateLanguageSchema = {
11
+ languageId: z.string().min(1).describe('ID of the language to update'),
12
+ language: UpdateLanguageInputSchema,
13
+ };
14
+
15
+ export const UpdateLanguageZodSchema = z.object(UpdateLanguageSchema);
16
+ export type UpdateLanguageParams = z.infer<typeof UpdateLanguageZodSchema>;
17
+
18
+ export async function updateLanguageHandler(context: Context, params: UpdateLanguageParams) {
19
+ const { languageId, language } = params;
20
+ const { modules } = context;
21
+
22
+ try {
23
+ if (!(await modules.languages.languageExists({ languageId })))
24
+ throw new LanguageNotFoundError({ languageId });
25
+
26
+ await modules.languages.update(languageId, language);
27
+
28
+ const updatedLanguage = await modules.languages.findLanguage({ languageId });
29
+ return {
30
+ content: [
31
+ {
32
+ type: 'text' as const,
33
+ text: JSON.stringify({ language: updatedLanguage }),
34
+ },
35
+ ],
36
+ };
37
+ } catch (error) {
38
+ return {
39
+ content: [
40
+ {
41
+ type: 'text' as const,
42
+ text: `Error updating language: ${(error as Error).message}`,
43
+ },
44
+ ],
45
+ };
46
+ }
47
+ }
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ import { ProductNotFoundError } from '../../errors.js';
4
+ import { getNormalizedProductDetails } from '../utils/getNormalizedProductDetails.js';
5
+
6
+ export const UpdateProductSchema = {
7
+ productId: z.string().min(1).describe('ID of the product to update'),
8
+ product: z
9
+ .object({
10
+ tags: z.array(z.string().min(1).toLowerCase()).optional().describe('List of lowercase tags'),
11
+ sequence: z.number().int().optional().describe('Sorting sequence'),
12
+ meta: z.record(z.unknown()).optional().describe('Custom metadata as key-value pairs'),
13
+ })
14
+ .describe('Fields to update on the product'),
15
+ };
16
+
17
+ export const UpdateProductZodSchema = z.object(UpdateProductSchema);
18
+
19
+ export type UpdateProductParams = z.infer<typeof UpdateProductZodSchema>;
20
+
21
+ export async function updateProductHandler(context: Context, params: UpdateProductParams) {
22
+ const { productId, product } = params;
23
+ const { modules } = context;
24
+
25
+ try {
26
+ if (!(await modules.products.productExists({ productId })))
27
+ throw new ProductNotFoundError({ productId });
28
+
29
+ await modules.products.update(productId, product);
30
+
31
+ return {
32
+ content: [
33
+ {
34
+ type: 'text' as const,
35
+ text: JSON.stringify({
36
+ product: await getNormalizedProductDetails(productId, context),
37
+ }),
38
+ },
39
+ ],
40
+ };
41
+ } catch (error) {
42
+ return {
43
+ content: [
44
+ {
45
+ type: 'text' as const,
46
+ text: `Error updating product: ${(error as Error).message}`,
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ }