@unchainedshop/api 3.1.10 → 3.1.12

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 (173) hide show
  1. package/lib/express/createMCPMiddleware.d.ts +4 -0
  2. package/lib/express/createMCPMiddleware.d.ts.map +1 -0
  3. package/lib/express/createMCPMiddleware.js +68 -0
  4. package/lib/express/createMCPMiddleware.js.map +1 -0
  5. package/lib/express/mcpHandler.d.ts.map +1 -0
  6. package/lib/express/mcpHandler.js +68 -0
  7. package/lib/express/mcpHandler.js.map +1 -0
  8. package/lib/fastify/createMCPMiddleware.d.ts +2 -0
  9. package/lib/fastify/createMCPMiddleware.d.ts.map +1 -0
  10. package/lib/fastify/createMCPMiddleware.js +2 -0
  11. package/lib/fastify/createMCPMiddleware.js.map +1 -0
  12. package/lib/fastify/index copy.d.ts.map +1 -0
  13. package/lib/fastify/index copy.js +157 -0
  14. package/lib/fastify/index copy.js.map +1 -0
  15. package/lib/fastify/mcpHandler.d.ts +8 -0
  16. package/lib/fastify/mcpHandler.d.ts.map +1 -0
  17. package/lib/fastify/mcpHandler.js +46 -0
  18. package/lib/fastify/mcpHandler.js.map +1 -0
  19. package/lib/loaders/assortmentLinkLoader.d.ts +12 -0
  20. package/lib/loaders/assortmentLinkLoader.d.ts.map +1 -0
  21. package/lib/loaders/assortmentLinkLoader.js +23 -0
  22. package/lib/loaders/assortmentLinkLoader.js.map +1 -0
  23. package/lib/loaders/assortmentLinksLoader.d.ts +14 -0
  24. package/lib/loaders/assortmentLinksLoader.d.ts.map +1 -0
  25. package/lib/loaders/assortmentLinksLoader.js +38 -0
  26. package/lib/loaders/assortmentLinksLoader.js.map +1 -0
  27. package/lib/loaders/assortmentLoader.d.ts +10 -0
  28. package/lib/loaders/assortmentLoader.d.ts.map +1 -0
  29. package/lib/loaders/assortmentLoader.js +15 -0
  30. package/lib/loaders/assortmentLoader.js.map +1 -0
  31. package/lib/loaders/assortmentMediaTextLoader.d.ts +12 -0
  32. package/lib/loaders/assortmentMediaTextLoader.d.ts.map +1 -0
  33. package/lib/loaders/assortmentMediaTextLoader.js +15 -0
  34. package/lib/loaders/assortmentMediaTextLoader.js.map +1 -0
  35. package/lib/loaders/assortmentMediasLoader.d.ts +10 -0
  36. package/lib/loaders/assortmentMediasLoader.d.ts.map +1 -0
  37. package/lib/loaders/assortmentMediasLoader.js +18 -0
  38. package/lib/loaders/assortmentMediasLoader.js.map +1 -0
  39. package/lib/loaders/assortmentProductLoader.d.ts +12 -0
  40. package/lib/loaders/assortmentProductLoader.d.ts.map +1 -0
  41. package/lib/loaders/assortmentProductLoader.js +14 -0
  42. package/lib/loaders/assortmentProductLoader.js.map +1 -0
  43. package/lib/loaders/assortmentProductsLoader.d.ts +10 -0
  44. package/lib/loaders/assortmentProductsLoader.d.ts.map +1 -0
  45. package/lib/loaders/assortmentProductsLoader.js +18 -0
  46. package/lib/loaders/assortmentProductsLoader.js.map +1 -0
  47. package/lib/loaders/assortmentTextLoader.d.ts +12 -0
  48. package/lib/loaders/assortmentTextLoader.d.ts.map +1 -0
  49. package/lib/loaders/assortmentTextLoader.js +15 -0
  50. package/lib/loaders/assortmentTextLoader.js.map +1 -0
  51. package/lib/loaders/buildLocaleMap.d.ts +6 -0
  52. package/lib/loaders/buildLocaleMap.d.ts.map +1 -0
  53. package/lib/loaders/buildLocaleMap.js +38 -0
  54. package/lib/loaders/buildLocaleMap.js.map +1 -0
  55. package/lib/loaders/buildTextMap.d.ts +1 -1
  56. package/lib/loaders/buildTextMap.d.ts.map +1 -1
  57. package/lib/loaders/buildTextMap.js +16 -6
  58. package/lib/loaders/buildTextMap.js.map +1 -1
  59. package/lib/loaders/countryLoader.d.ts +10 -0
  60. package/lib/loaders/countryLoader.d.ts.map +1 -0
  61. package/lib/loaders/countryLoader.js +14 -0
  62. package/lib/loaders/countryLoader.js.map +1 -0
  63. package/lib/loaders/currencyLoader.d.ts +10 -0
  64. package/lib/loaders/currencyLoader.d.ts.map +1 -0
  65. package/lib/loaders/currencyLoader.js +14 -0
  66. package/lib/loaders/currencyLoader.js.map +1 -0
  67. package/lib/loaders/deliveryProviderLoader.d.ts +10 -0
  68. package/lib/loaders/deliveryProviderLoader.d.ts.map +1 -0
  69. package/lib/loaders/deliveryProviderLoader.js +13 -0
  70. package/lib/loaders/deliveryProviderLoader.js.map +1 -0
  71. package/lib/loaders/fileLoader.d.ts +10 -0
  72. package/lib/loaders/fileLoader.d.ts.map +1 -0
  73. package/lib/loaders/fileLoader.js +13 -0
  74. package/lib/loaders/fileLoader.js.map +1 -0
  75. package/lib/loaders/filterLoader.d.ts +10 -0
  76. package/lib/loaders/filterLoader.d.ts.map +1 -0
  77. package/lib/loaders/filterLoader.js +14 -0
  78. package/lib/loaders/filterLoader.js.map +1 -0
  79. package/lib/loaders/filterTextLoader.d.ts +14 -0
  80. package/lib/loaders/filterTextLoader.d.ts.map +1 -0
  81. package/lib/loaders/filterTextLoader.js +15 -0
  82. package/lib/loaders/filterTextLoader.js.map +1 -0
  83. package/lib/loaders/index.d.ts.map +1 -1
  84. package/lib/loaders/index.js +1 -29
  85. package/lib/loaders/index.js.map +1 -1
  86. package/lib/loaders/languageLoader.d.ts +10 -0
  87. package/lib/loaders/languageLoader.d.ts.map +1 -0
  88. package/lib/loaders/languageLoader.js +14 -0
  89. package/lib/loaders/languageLoader.js.map +1 -0
  90. package/lib/loaders/orderLoader.d.ts +10 -0
  91. package/lib/loaders/orderLoader.d.ts.map +1 -0
  92. package/lib/loaders/orderLoader.js +16 -0
  93. package/lib/loaders/orderLoader.js.map +1 -0
  94. package/lib/loaders/paymentProviderLoader.d.ts +10 -0
  95. package/lib/loaders/paymentProviderLoader.d.ts.map +1 -0
  96. package/lib/loaders/paymentProviderLoader.js +13 -0
  97. package/lib/loaders/paymentProviderLoader.js.map +1 -0
  98. package/lib/loaders/productLoader.d.ts +10 -0
  99. package/lib/loaders/productLoader.d.ts.map +1 -0
  100. package/lib/loaders/productLoader.js +16 -0
  101. package/lib/loaders/productLoader.js.map +1 -0
  102. package/lib/loaders/productLoaderBySKU.d.ts +10 -0
  103. package/lib/loaders/productLoaderBySKU.d.ts.map +1 -0
  104. package/lib/loaders/productLoaderBySKU.js +16 -0
  105. package/lib/loaders/productLoaderBySKU.js.map +1 -0
  106. package/lib/loaders/productMediaTextLoader.d.ts +12 -0
  107. package/lib/loaders/productMediaTextLoader.d.ts.map +1 -0
  108. package/lib/loaders/productMediaTextLoader.js +15 -0
  109. package/lib/loaders/productMediaTextLoader.js.map +1 -0
  110. package/lib/loaders/productMediasLoader.d.ts +10 -0
  111. package/lib/loaders/productMediasLoader.d.ts.map +1 -0
  112. package/lib/loaders/productMediasLoader.js +18 -0
  113. package/lib/loaders/productMediasLoader.js.map +1 -0
  114. package/lib/loaders/productTextLoader.d.ts +12 -0
  115. package/lib/loaders/productTextLoader.d.ts.map +1 -0
  116. package/lib/loaders/productTextLoader.js +15 -0
  117. package/lib/loaders/productTextLoader.js.map +1 -0
  118. package/lib/loaders/userLoader.d.ts +10 -0
  119. package/lib/loaders/userLoader.d.ts.map +1 -0
  120. package/lib/loaders/userLoader.js +17 -0
  121. package/lib/loaders/userLoader.js.map +1 -0
  122. package/lib/loaders/utils.d.ts +7 -0
  123. package/lib/loaders/utils.d.ts.map +1 -0
  124. package/lib/loaders/utils.js +29 -0
  125. package/lib/loaders/utils.js.map +1 -0
  126. package/lib/mcp/index.d.ts +4 -0
  127. package/lib/mcp/index.d.ts.map +1 -0
  128. package/lib/mcp/index.js +12 -0
  129. package/lib/mcp/index.js.map +1 -0
  130. package/lib/mcp/server.d.ts +4 -0
  131. package/lib/mcp/server.d.ts.map +1 -0
  132. package/lib/mcp/server.js +60 -0
  133. package/lib/mcp/server.js.map +1 -0
  134. package/lib/mcp/tools/getProduct.d.ts +51 -0
  135. package/lib/mcp/tools/getProduct.d.ts.map +1 -0
  136. package/lib/mcp/tools/getProduct.js +428 -0
  137. package/lib/mcp/tools/getProduct.js.map +1 -0
  138. package/lib/mcp/tools/index.d.ts +6 -0
  139. package/lib/mcp/tools/index.d.ts.map +1 -0
  140. package/lib/mcp/tools/index.js +6 -0
  141. package/lib/mcp/tools/index.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 +111 -0
  145. package/lib/mcp/tools/listProducts.js.map +1 -0
  146. package/lib/mcp/types.d.ts +27 -0
  147. package/lib/mcp/types.d.ts.map +1 -0
  148. package/lib/mcp/types.js +5 -0
  149. package/lib/mcp/types.js.map +1 -0
  150. package/lib/mcp/utils/html.d.ts +16 -0
  151. package/lib/mcp/utils/html.d.ts.map +1 -0
  152. package/lib/mcp/utils/html.js +102 -0
  153. package/lib/mcp/utils/html.js.map +1 -0
  154. package/lib/middleware/accountLockout.d.ts.map +1 -0
  155. package/lib/middleware/accountLockout.js +84 -0
  156. package/lib/middleware/accountLockout.js.map +1 -0
  157. package/lib/middleware/rateLimiter.d.ts.map +1 -0
  158. package/lib/middleware/rateLimiter.js +91 -0
  159. package/lib/middleware/rateLimiter.js.map +1 -0
  160. package/lib/plugins/inputValidation.d.ts.map +1 -0
  161. package/lib/plugins/inputValidation.js +95 -0
  162. package/lib/plugins/inputValidation.js.map +1 -0
  163. package/lib/schema/mutation.js +1 -1
  164. package/lib/utils/inputValidation.d.ts.map +1 -0
  165. package/lib/utils/inputValidation.js +51 -0
  166. package/lib/utils/inputValidation.js.map +1 -0
  167. package/package.json +1 -1
  168. package/src/loaders/buildLocaleMap.test.ts +72 -0
  169. package/src/loaders/buildLocaleMap.ts +39 -0
  170. package/src/loaders/buildTextMap.test.ts +55 -0
  171. package/src/loaders/buildTextMap.ts +22 -6
  172. package/src/loaders/index.ts +1 -31
  173. package/src/schema/mutation.ts +1 -1
@@ -0,0 +1,428 @@
1
+ import { z } from 'zod';
2
+ // import { escapeHtml } from '../utils/html.js';
3
+ /**
4
+ * Zod schema for the get_product tool (as raw object for MCP)
5
+ */
6
+ export const GetProductSchema = {
7
+ productId: z.string().optional().describe('Product ID for lookup'),
8
+ slug: z.string().optional().describe('Product slug for lookup'),
9
+ sku: z.string().optional().describe('Product SKU for lookup'),
10
+ };
11
+ /**
12
+ * Zod object schema for type inference and validation
13
+ */
14
+ export const GetProductZodSchema = z
15
+ .object(GetProductSchema)
16
+ .refine((data) => data.productId || data.slug || data.sku, 'At least one of productId, slug, or sku must be provided');
17
+ /**
18
+ * Implementation of the get_product tool
19
+ */
20
+ export async function getProductHandler(context, params) {
21
+ const { productId, slug, sku } = params;
22
+ try {
23
+ // Find the product
24
+ const product = await context.modules.products.findProduct({
25
+ productId,
26
+ slug,
27
+ sku,
28
+ });
29
+ if (!product) {
30
+ return {
31
+ content: [
32
+ {
33
+ type: 'text',
34
+ text: `Product not found with ${productId ? `ID: ${productId}` : slug ? `slug: ${slug}` : `SKU: ${sku}`}`,
35
+ },
36
+ ],
37
+ };
38
+ }
39
+ // Get product texts for localization
40
+ const productTexts = await context.loaders.productTextLoader.load({
41
+ productId: product._id,
42
+ locale: context.locale,
43
+ });
44
+ // Get media
45
+ const media = await context.modules.products.media.findProductMedias({
46
+ productId: product._id,
47
+ });
48
+ // Get pricing information
49
+ let pricing = null;
50
+ try {
51
+ pricing = await context.modules.products.prices.price(product, {
52
+ countryCode: context.countryCode,
53
+ });
54
+ }
55
+ catch {
56
+ // Pricing might not be available for all products
57
+ console.warn('Pricing not available for product:', product._id);
58
+ }
59
+ // Get variations if it's a configurable product
60
+ const variations = await context.modules.products.variations.findProductVariations({
61
+ productId: product._id,
62
+ });
63
+ // Get bundle items if it's a bundle product
64
+ // const bundleItems =
65
+ // product.type === 'BUNDLE_PRODUCT'
66
+ // ? await context.modules.products.bundleItems.findBundleItems({
67
+ // productId: product._id,
68
+ // })
69
+ // : [];
70
+ // Get assortment memberships
71
+ // const assortmentLinks = await context.modules.assortments.links.findLinks({
72
+ // productId: product._id,
73
+ // });
74
+ // Get reviews count
75
+ const reviewsCount = await context.modules.products.reviews.count({
76
+ productId: product._id,
77
+ });
78
+ // Generate rich HTML visualization
79
+ // const htmlContent = generateProductDetailHTML(product, {
80
+ // productTexts,
81
+ // media,
82
+ // pricing,
83
+ // variations,
84
+ // // bundleItems,
85
+ // // assortmentLinks,
86
+ // reviewsCount,
87
+ // });
88
+ return {
89
+ content: [
90
+ {
91
+ type: 'text',
92
+ text: JSON.stringify({
93
+ product,
94
+ productTexts,
95
+ media,
96
+ pricing,
97
+ variations,
98
+ // bundleItems,
99
+ // assortmentLinks,
100
+ reviewsCount,
101
+ }),
102
+ },
103
+ // {
104
+ // type: 'resource' as const,
105
+ // resource: {
106
+ // text: htmlContent,
107
+ // uri: `data:text/html;charset=UTF-8,${encodeURIComponent(htmlContent)}`,
108
+ // mimeType: 'text/html',
109
+ // },
110
+ // },
111
+ ],
112
+ };
113
+ }
114
+ catch (error) {
115
+ return {
116
+ content: [
117
+ {
118
+ type: 'text',
119
+ text: `Error getting product: ${error.message}`,
120
+ },
121
+ ],
122
+ };
123
+ }
124
+ }
125
+ /**
126
+ * Generate rich HTML visualization for product details
127
+ */
128
+ // function generateProductDetailHTML(
129
+ // product: any,
130
+ // data: {
131
+ // productTexts?: any;
132
+ // media?: any[];
133
+ // pricing?: any;
134
+ // variations?: any[];
135
+ // bundleItems?: any[];
136
+ // assortmentLinks?: any[];
137
+ // reviewsCount?: number;
138
+ // },
139
+ // ): string {
140
+ // const { productTexts, media, pricing, variations, bundleItems, assortmentLinks, reviewsCount } = data;
141
+ // // Get primary information
142
+ // const title = productTexts?.title || product.title || 'Untitled Product';
143
+ // const subtitle = productTexts?.subtitle || '';
144
+ // const description = productTexts?.description || '';
145
+ // const sku = product.warehousing?.sku || 'N/A';
146
+ // const status = product.status || 'DRAFT';
147
+ // const type = product.type || 'SIMPLE_PRODUCT';
148
+ // // Status color mapping
149
+ // const statusColor =
150
+ // status === 'ACTIVE'
151
+ // ? '#28a745'
152
+ // : status === 'DRAFT'
153
+ // ? '#ffc107'
154
+ // : status === 'DELETED'
155
+ // ? '#dc3545'
156
+ // : '#6c757d';
157
+ // // Get primary image
158
+ // const primaryImage = media?.find((m) => m.tags?.includes('hero')) || media?.[0];
159
+ // const primaryImageUrl = primaryImage?.file?.url || primaryImage?.url;
160
+ // // Format price
161
+ // const priceDisplay = pricing?.price
162
+ // ? `${(pricing.price.amount / 100).toFixed(2)} ${pricing.price.currency}`
163
+ // : 'Price not available';
164
+ // // Format dates
165
+ // const createdDate = product.created ? new Date(product.created).toLocaleDateString() : 'N/A';
166
+ // const updatedDate = product.updated ? new Date(product.updated).toLocaleDateString() : 'N/A';
167
+ // return `
168
+ // <!DOCTYPE html>
169
+ // <html>
170
+ // <head>
171
+ // <meta charset="UTF-8" />
172
+ // <meta name="viewport" content="width=device-width, initial-scale=1.0" />
173
+ // <title>Product Details: ${escapeHtml(title)}</title>
174
+ // </head>
175
+ // <body>
176
+ // <div style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui; max-width: 800px; margin: 0 auto; padding: 20px;">
177
+ // <!-- Main Product Card -->
178
+ // <div style="background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); margin-bottom: 16px; overflow: hidden;">
179
+ // <div style="padding: 20px; border-bottom: 1px solid #e9ecef;">
180
+ // <div style="display: flex; justify-content: space-between; align-items: start; margin-bottom: 12px;">
181
+ // <h2 style="margin: 0; color: #343a40; font-size: 24px;">${escapeHtml(title)}</h2>
182
+ // <span style="padding: 6px 12px; border-radius: 12px; font-size: 14px; font-weight: 500; background: ${statusColor}; color: white;">${status}</span>
183
+ // </div>
184
+ // ${subtitle ? `<p style="margin: 0; color: #6c757d; font-size: 16px;">${escapeHtml(subtitle)}</p>` : ''}
185
+ // <div style="margin-top: 12px; display: flex; gap: 16px; font-size: 14px; color: #6c757d; flex-wrap: wrap;">
186
+ // <span><strong>ID:</strong> ${escapeHtml(product._id?.toString() || 'N/A')}</span>
187
+ // <span><strong>SKU:</strong> ${escapeHtml(sku)}</span>
188
+ // <span><strong>Type:</strong> ${escapeHtml(type)}</span>
189
+ // </div>
190
+ // </div>
191
+ // <!-- Product Image -->
192
+ // ${
193
+ // primaryImageUrl
194
+ // ? `
195
+ // <div style="padding: 20px; text-align: center; background: #f8f9fa;">
196
+ // <img src="${escapeHtml(primaryImageUrl)}"
197
+ // style="max-width: 100%; max-height: 300px; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);"
198
+ // onerror="this.style.display='none'; this.nextElementSibling.style.display='block'" />
199
+ // <div style="display: none; padding: 60px; color: #6c757d; font-size: 18px;">Image not available</div>
200
+ // </div>
201
+ // `
202
+ // : `
203
+ // <div style="padding: 60px; text-align: center; background: #f8f9fa; color: #6c757d; font-size: 18px;">
204
+ // No image available
205
+ // </div>
206
+ // `
207
+ // }
208
+ // </div>
209
+ // <!-- Information Grid -->
210
+ // <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px;">
211
+ // <!-- Basic Information -->
212
+ // <div style="background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); padding: 20px;">
213
+ // <h3 style="margin: 0 0 16px 0; color: #0066cc; font-size: 18px;">Basic Information</h3>
214
+ // <div style="space-y: 8px;">
215
+ // <div style="margin-bottom: 8px;">
216
+ // <span style="font-weight: 500; color: #343a40;">Sequence:</span>
217
+ // <span style="color: #6c757d; margin-left: 8px;">${product.sequence || 'N/A'}</span>
218
+ // </div>
219
+ // <div style="margin-bottom: 8px;">
220
+ // <span style="font-weight: 500; color: #343a40;">Created:</span>
221
+ // <span style="color: #6c757d; margin-left: 8px;">${createdDate}</span>
222
+ // </div>
223
+ // <div style="margin-bottom: 8px;">
224
+ // <span style="font-weight: 500; color: #343a40;">Updated:</span>
225
+ // <span style="color: #6c757d; margin-left: 8px;">${updatedDate}</span>
226
+ // </div>
227
+ // ${
228
+ // product.tags?.length
229
+ // ? `
230
+ // <div style="margin-bottom: 8px;">
231
+ // <span style="font-weight: 500; color: #343a40;">Tags:</span>
232
+ // <div style="margin-top: 4px;">
233
+ // ${product.tags
234
+ // .map(
235
+ // (tag: string) =>
236
+ // `<span style="background: #e9ecef; padding: 2px 6px; border-radius: 3px; margin-right: 4px; font-size: 12px;">${escapeHtml(tag)}</span>`,
237
+ // )
238
+ // .join('')}
239
+ // </div>
240
+ // </div>
241
+ // `
242
+ // : ''
243
+ // }
244
+ // </div>
245
+ // </div>
246
+ // <!-- Pricing Information -->
247
+ // <div style="background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); padding: 20px;">
248
+ // <h3 style="margin: 0 0 16px 0; color: #0066cc; font-size: 18px;">Pricing</h3>
249
+ // <div style="space-y: 8px;">
250
+ // <div style="margin-bottom: 8px;">
251
+ // <span style="font-weight: 500; color: #343a40;">Current Price:</span>
252
+ // <span style="color: #6c757d; margin-left: 8px;">${escapeHtml(priceDisplay)}</span>
253
+ // </div>
254
+ // ${
255
+ // pricing?.taxIncluded !== undefined
256
+ // ? `
257
+ // <div style="margin-bottom: 8px;">
258
+ // <span style="font-weight: 500; color: #343a40;">Tax Included:</span>
259
+ // <span style="color: #6c757d; margin-left: 8px;">${pricing.taxIncluded ? 'Yes' : 'No'}</span>
260
+ // </div>
261
+ // `
262
+ // : ''
263
+ // }
264
+ // ${
265
+ // variations?.length
266
+ // ? `
267
+ // <div style="margin-bottom: 8px;">
268
+ // <span style="font-weight: 500; color: #343a40;">Variations:</span>
269
+ // <span style="color: #6c757d; margin-left: 8px;">${variations.length} variation(s)</span>
270
+ // </div>
271
+ // `
272
+ // : ''
273
+ // }
274
+ // </div>
275
+ // </div>
276
+ // </div>
277
+ // ${
278
+ // description
279
+ // ? `
280
+ // <!-- Description -->
281
+ // <div style="background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); padding: 20px; margin-bottom: 16px;">
282
+ // <h3 style="margin: 0 0 16px 0; color: #0066cc; font-size: 18px;">Description</h3>
283
+ // <div style="color: #343a40; line-height: 1.6;">${escapeHtml(description)}</div>
284
+ // </div>
285
+ // `
286
+ // : ''
287
+ // }
288
+ // ${
289
+ // media?.length > 1
290
+ // ? `
291
+ // <!-- Media Gallery -->
292
+ // <div style="background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); padding: 20px; margin-bottom: 16px;">
293
+ // <h3 style="margin: 0 0 16px 0; color: #0066cc; font-size: 18px;">Media Gallery (${media.length} items)</h3>
294
+ // <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 12px;">
295
+ // ${media
296
+ // .map(
297
+ // (item: any) => `
298
+ // <div style="position: relative;">
299
+ // ${
300
+ // item.file?.url || item.url
301
+ // ? `
302
+ // <img src="${escapeHtml(item.file?.url || item.url)}"
303
+ // style="width: 100%; height: 120px; object-fit: cover; border-radius: 4px; border: 1px solid #e9ecef;"
304
+ // onerror="this.style.display='none'; this.nextElementSibling.style.display='flex'" />
305
+ // <div style="display: none; width: 100%; height: 120px; background: #f8f9fa; border-radius: 4px; align-items: center; justify-content: center; color: #6c757d; font-size: 12px;">No preview</div>
306
+ // `
307
+ // : `
308
+ // <div style="width: 100%; height: 120px; background: #f8f9fa; border-radius: 4px; display: flex; align-items: center; justify-content: center; color: #6c757d; font-size: 12px;">No preview</div>
309
+ // `
310
+ // }
311
+ // ${
312
+ // item.tags?.length
313
+ // ? `
314
+ // <div style="position: absolute; bottom: 4px; left: 4px; background: rgba(0,0,0,0.7); color: white; padding: 2px 6px; border-radius: 3px; font-size: 10px;">
315
+ // ${item.tags.slice(0, 2).join(', ')}
316
+ // </div>
317
+ // `
318
+ // : ''
319
+ // }
320
+ // </div>
321
+ // `,
322
+ // )
323
+ // .join('')}
324
+ // </div>
325
+ // </div>
326
+ // `
327
+ // : ''
328
+ // }
329
+ // ${
330
+ // bundleItems?.length
331
+ // ? `
332
+ // <!-- Bundle Items -->
333
+ // <div style="background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); padding: 20px; margin-bottom: 16px;">
334
+ // <h3 style="margin: 0 0 16px 0; color: #0066cc; font-size: 18px;">Bundle Items (${bundleItems.length})</h3>
335
+ // <div style="space-y: 8px;">
336
+ // ${bundleItems
337
+ // .map(
338
+ // (item: any) => `
339
+ // <div style="padding: 8px; background: #f8f9fa; border-radius: 4px; margin-bottom: 8px;">
340
+ // <div style="font-weight: 500; color: #343a40;">${escapeHtml(item.product?.title || 'Bundle Item')}</div>
341
+ // <div style="font-size: 12px; color: #6c757d;">Quantity: ${item.quantity || 1}</div>
342
+ // </div>
343
+ // `,
344
+ // )
345
+ // .join('')}
346
+ // </div>
347
+ // </div>
348
+ // `
349
+ // : ''
350
+ // }
351
+ // ${
352
+ // variations?.length
353
+ // ? `
354
+ // <!-- Variations -->
355
+ // <div style="background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); padding: 20px; margin-bottom: 16px;">
356
+ // <h3 style="margin: 0 0 16px 0; color: #0066cc; font-size: 18px;">Product Variations (${variations.length})</h3>
357
+ // <div style="space-y: 8px;">
358
+ // ${variations
359
+ // .map(
360
+ // (variation: any) => `
361
+ // <div style="padding: 8px; background: #f8f9fa; border-radius: 4px; margin-bottom: 8px;">
362
+ // <div style="font-weight: 500; color: #343a40;">${escapeHtml(variation.key || 'Variation')}</div>
363
+ // <div style="font-size: 12px; color: #6c757d;">Type: ${variation.type || 'N/A'}</div>
364
+ // </div>
365
+ // `,
366
+ // )
367
+ // .join('')}
368
+ // </div>
369
+ // </div>
370
+ // `
371
+ // : ''
372
+ // }
373
+ // <!-- Additional Information -->
374
+ // <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px;">
375
+ // <!-- Technical Details -->
376
+ // <div style="background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); padding: 20px;">
377
+ // <h3 style="margin: 0 0 16px 0; color: #0066cc; font-size: 18px;">Technical Details</h3>
378
+ // <div style="space-y: 8px;">
379
+ // <div style="margin-bottom: 8px;">
380
+ // <span style="font-weight: 500; color: #343a40;">Reviews:</span>
381
+ // <span style="color: #6c757d; margin-left: 8px;">${reviewsCount || 0} review(s)</span>
382
+ // </div>
383
+ // <div style="margin-bottom: 8px;">
384
+ // <span style="font-weight: 500; color: #343a40;">Assortments:</span>
385
+ // <span style="color: #6c757d; margin-left: 8px;">${assortmentLinks?.length || 0} membership(s)</span>
386
+ // </div>
387
+ // <div style="margin-bottom: 8px;">
388
+ // <span style="font-weight: 500; color: #343a40;">Media Count:</span>
389
+ // <span style="color: #6c757d; margin-left: 8px;">${media?.length || 0} item(s)</span>
390
+ // </div>
391
+ // </div>
392
+ // </div>
393
+ // <!-- Localization -->
394
+ // <div style="background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); padding: 20px;">
395
+ // <h3 style="margin: 0 0 16px 0; color: #0066cc; font-size: 18px;">Localization</h3>
396
+ // <div style="space-y: 8px;">
397
+ // <div style="margin-bottom: 8px;">
398
+ // <span style="font-weight: 500; color: #343a40;">Current Locale:</span>
399
+ // <span style="color: #6c757d; margin-left: 8px;">${escapeHtml(productTexts?.locale || 'N/A')}</span>
400
+ // </div>
401
+ // ${
402
+ // productTexts?.vendor
403
+ // ? `
404
+ // <div style="margin-bottom: 8px;">
405
+ // <span style="font-weight: 500; color: #343a40;">Vendor:</span>
406
+ // <span style="color: #6c757d; margin-left: 8px;">${escapeHtml(productTexts.vendor)}</span>
407
+ // </div>
408
+ // `
409
+ // : ''
410
+ // }
411
+ // ${
412
+ // productTexts?.brand
413
+ // ? `
414
+ // <div style="margin-bottom: 8px;">
415
+ // <span style="font-weight: 500; color: #343a40;">Brand:</span>
416
+ // <span style="color: #6c757d; margin-left: 8px;">${escapeHtml(productTexts.brand)}</span>
417
+ // </div>
418
+ // `
419
+ // : ''
420
+ // }
421
+ // </div>
422
+ // </div>
423
+ // </div>
424
+ // </div>
425
+ // </body>
426
+ // </html>`;
427
+ // }
428
+ //# sourceMappingURL=getProduct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProduct.js","sourceRoot":"","sources":["../../../src/mcp/tools/getProduct.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,iDAAiD;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC/D,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CAC9D,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC,gBAAgB,CAAC;KACxB,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EACjD,0DAA0D,CAC3D,CAAC;AAOJ;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAgB,EAAE,MAAwB;IAChF,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAExC,IAAI,CAAC;QACH,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;YACzD,SAAS;YACT,IAAI;YACJ,GAAG;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,0BAA0B,SAAS,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,EAAE;qBAC1G;iBACF;aACF,CAAC;QACJ,CAAC;QAED,qCAAqC;QACrC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAChE,SAAS,EAAE,OAAO,CAAC,GAAG;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,YAAY;QACZ,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACnE,SAAS,EAAE,OAAO,CAAC,GAAG;SACvB,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;gBAC7D,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;YAClD,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAClE,CAAC;QAED,gDAAgD;QAChD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC;YACjF,SAAS,EAAE,OAAO,CAAC,GAAG;SACvB,CAAC,CAAC;QAEH,4CAA4C;QAC5C,sBAAsB;QACtB,sCAAsC;QACtC,qEAAqE;QACrE,kCAAkC;QAClC,WAAW;QACX,YAAY;QAEZ,6BAA6B;QAC7B,8EAA8E;QAC9E,4BAA4B;QAC5B,MAAM;QAEN,oBAAoB;QACpB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YAChE,SAAS,EAAE,OAAO,CAAC,GAAG;SACvB,CAAC,CAAC;QAEH,mCAAmC;QACnC,2DAA2D;QAC3D,kBAAkB;QAClB,WAAW;QACX,aAAa;QACb,gBAAgB;QAChB,oBAAoB;QACpB,wBAAwB;QACxB,kBAAkB;QAClB,MAAM;QAEN,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO;wBACP,YAAY;wBACZ,KAAK;wBACL,OAAO;wBACP,UAAU;wBACV,eAAe;wBACf,mBAAmB;wBACnB,YAAY;qBACb,CAAC;iBACH;gBACD,IAAI;gBACJ,+BAA+B;gBAC/B,gBAAgB;gBAChB,yBAAyB;gBACzB,8EAA8E;gBAC9E,6BAA6B;gBAC7B,OAAO;gBACP,KAAK;aACN;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,0BAA2B,KAAe,CAAC,OAAO,EAAE;iBAC3D;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,sCAAsC;AACtC,kBAAkB;AAClB,YAAY;AACZ,0BAA0B;AAC1B,qBAAqB;AACrB,qBAAqB;AACrB,0BAA0B;AAC1B,2BAA2B;AAC3B,+BAA+B;AAC/B,6BAA6B;AAC7B,OAAO;AACP,cAAc;AACd,2GAA2G;AAE3G,+BAA+B;AAC/B,8EAA8E;AAC9E,mDAAmD;AACnD,yDAAyD;AACzD,mDAAmD;AACnD,8CAA8C;AAC9C,mDAAmD;AAEnD,4BAA4B;AAC5B,wBAAwB;AACxB,0BAA0B;AAC1B,oBAAoB;AACpB,6BAA6B;AAC7B,sBAAsB;AACtB,iCAAiC;AACjC,wBAAwB;AACxB,yBAAyB;AAEzB,yBAAyB;AACzB,qFAAqF;AACrF,0EAA0E;AAE1E,oBAAoB;AACpB,wCAAwC;AACxC,+EAA+E;AAC/E,+BAA+B;AAE/B,oBAAoB;AACpB,kGAAkG;AAClG,kGAAkG;AAElG,aAAa;AACb,kBAAkB;AAClB,SAAS;AACT,SAAS;AACT,6BAA6B;AAC7B,6EAA6E;AAC7E,yDAAyD;AACzD,UAAU;AACV,SAAS;AACT,0IAA0I;AAE1I,iCAAiC;AACjC,yIAAyI;AACzI,uEAAuE;AACvE,gHAAgH;AAChH,8FAA8F;AAC9F,gKAAgK;AAChK,iBAAiB;AACjB,kHAAkH;AAClH,sHAAsH;AACtH,8FAA8F;AAC9F,kEAAkE;AAClE,oEAAoE;AACpE,iBAAiB;AACjB,eAAe;AAEf,+BAA+B;AAC/B,WAAW;AACX,0BAA0B;AAC1B,gBAAgB;AAChB,gFAAgF;AAChF,sDAAsD;AACtD,wHAAwH;AACxH,uGAAuG;AACvG,kHAAkH;AAClH,iBAAiB;AACjB,UAAU;AACV,gBAAgB;AAChB,iHAAiH;AACjH,+BAA+B;AAC/B,iBAAiB;AACjB,UAAU;AACV,UAAU;AACV,aAAa;AAEb,gCAAgC;AAChC,mGAAmG;AAEnG,mCAAmC;AACnC,mHAAmH;AACnH,kGAAkG;AAClG,sCAAsC;AACtC,8CAA8C;AAC9C,+EAA+E;AAC/E,kGAAkG;AAClG,mBAAmB;AACnB,8CAA8C;AAC9C,8EAA8E;AAC9E,oFAAoF;AACpF,mBAAmB;AACnB,8CAA8C;AAC9C,8EAA8E;AAC9E,oFAAoF;AACpF,mBAAmB;AACnB,eAAe;AACf,mCAAmC;AACnC,oBAAoB;AACpB,gDAAgD;AAChD,6EAA6E;AAC7E,+CAA+C;AAC/C,iCAAiC;AACjC,0BAA0B;AAC1B,uCAAuC;AACvC,kKAAkK;AAClK,sBAAsB;AACtB,+BAA+B;AAC/B,uBAAuB;AACvB,qBAAqB;AACrB,cAAc;AACd,qBAAqB;AACrB,cAAc;AACd,iBAAiB;AACjB,eAAe;AAEf,qCAAqC;AACrC,mHAAmH;AACnH,wFAAwF;AACxF,sCAAsC;AACtC,8CAA8C;AAC9C,oFAAoF;AACpF,iGAAiG;AACjG,mBAAmB;AACnB,eAAe;AACf,iDAAiD;AACjD,oBAAoB;AACpB,gDAAgD;AAChD,qFAAqF;AACrF,6GAA6G;AAC7G,qBAAqB;AACrB,cAAc;AACd,qBAAqB;AACrB,cAAc;AACd,eAAe;AACf,iCAAiC;AACjC,oBAAoB;AACpB,gDAAgD;AAChD,mFAAmF;AACnF,yGAAyG;AACzG,qBAAqB;AACrB,cAAc;AACd,qBAAqB;AACrB,cAAc;AACd,iBAAiB;AACjB,eAAe;AACf,aAAa;AAEb,SAAS;AACT,oBAAoB;AACpB,cAAc;AACd,6BAA6B;AAC7B,wIAAwI;AACxI,4FAA4F;AAC5F,0FAA0F;AAC1F,eAAe;AACf,QAAQ;AACR,eAAe;AACf,QAAQ;AAER,SAAS;AACT,0BAA0B;AAC1B,cAAc;AACd,+BAA+B;AAC/B,wIAAwI;AACxI,sHAAsH;AACtH,gHAAgH;AAChH,oBAAoB;AACpB,oBAAoB;AACpB,iCAAiC;AACjC,gDAAgD;AAChD,mBAAmB;AACnB,6CAA6C;AAC7C,wBAAwB;AACxB,uEAAuE;AACvE,6HAA6H;AAC7H,4GAA4G;AAC5G,mNAAmN;AACnN,kBAAkB;AAClB,wBAAwB;AACxB,mNAAmN;AACnN,kBAAkB;AAClB,kBAAkB;AAClB,mBAAmB;AACnB,oCAAoC;AACpC,wBAAwB;AACxB,8KAA8K;AAC9K,wDAAwD;AACxD,yBAAyB;AACzB,kBAAkB;AAClB,yBAAyB;AACzB,kBAAkB;AAClB,qBAAqB;AACrB,eAAe;AACf,gBAAgB;AAChB,yBAAyB;AACzB,iBAAiB;AACjB,eAAe;AACf,QAAQ;AACR,eAAe;AACf,QAAQ;AAER,SAAS;AACT,4BAA4B;AAC5B,cAAc;AACd,8BAA8B;AAC9B,wIAAwI;AACxI,qHAAqH;AACrH,sCAAsC;AACtC,0BAA0B;AAC1B,oBAAoB;AACpB,iCAAiC;AACjC,uGAAuG;AACvG,yHAAyH;AACzH,oGAAoG;AACpG,qBAAqB;AACrB,eAAe;AACf,gBAAgB;AAChB,yBAAyB;AACzB,iBAAiB;AACjB,eAAe;AACf,QAAQ;AACR,eAAe;AACf,QAAQ;AAER,SAAS;AACT,2BAA2B;AAC3B,cAAc;AACd,4BAA4B;AAC5B,wIAAwI;AACxI,0HAA0H;AAC1H,sCAAsC;AACtC,yBAAyB;AACzB,oBAAoB;AACpB,sCAAsC;AACtC,uGAAuG;AACvG,iHAAiH;AACjH,qGAAqG;AACrG,qBAAqB;AACrB,eAAe;AACf,gBAAgB;AAChB,yBAAyB;AACzB,iBAAiB;AACjB,eAAe;AACf,QAAQ;AACR,eAAe;AACf,QAAQ;AAER,sCAAsC;AACtC,8EAA8E;AAE9E,mCAAmC;AACnC,mHAAmH;AACnH,kGAAkG;AAClG,sCAAsC;AACtC,8CAA8C;AAC9C,8EAA8E;AAC9E,oGAAoG;AACpG,mBAAmB;AACnB,8CAA8C;AAC9C,kFAAkF;AAClF,mHAAmH;AACnH,mBAAmB;AACnB,8CAA8C;AAC9C,kFAAkF;AAClF,mGAAmG;AACnG,mBAAmB;AACnB,iBAAiB;AACjB,eAAe;AAEf,8BAA8B;AAC9B,mHAAmH;AACnH,6FAA6F;AAC7F,sCAAsC;AACtC,8CAA8C;AAC9C,qFAAqF;AACrF,kHAAkH;AAClH,mBAAmB;AACnB,eAAe;AACf,mCAAmC;AACnC,oBAAoB;AACpB,gDAAgD;AAChD,+EAA+E;AAC/E,0GAA0G;AAC1G,qBAAqB;AACrB,cAAc;AACd,qBAAqB;AACrB,cAAc;AACd,eAAe;AACf,kCAAkC;AAClC,oBAAoB;AACpB,gDAAgD;AAChD,8EAA8E;AAC9E,yGAAyG;AACzG,qBAAqB;AACrB,cAAc;AACd,qBAAqB;AACrB,cAAc;AACd,iBAAiB;AACjB,eAAe;AACf,aAAa;AAEb,WAAW;AACX,UAAU;AACV,YAAY;AACZ,IAAI"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Re-export all MCP tools
3
+ */
4
+ export * from './listProducts.js';
5
+ export * from './getProduct.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Re-export all MCP tools
3
+ */
4
+ export * from './listProducts.js';
5
+ export * from './getProduct.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../context.js';
3
+ /**
4
+ * Zod schema for the list_products tool (as raw object for MCP)
5
+ */
6
+ export declare const ListProductsSchema: {
7
+ queryString: z.ZodOptional<z.ZodString>;
8
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
+ productIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
10
+ filterQuery: z.ZodOptional<z.ZodArray<z.ZodObject<{
11
+ key: z.ZodString;
12
+ value: z.ZodOptional<z.ZodString>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ key?: string;
15
+ value?: string;
16
+ }, {
17
+ key?: string;
18
+ value?: string;
19
+ }>, "many">>;
20
+ assortmentId: z.ZodOptional<z.ZodString>;
21
+ includeInactive: z.ZodDefault<z.ZodBoolean>;
22
+ limit: z.ZodDefault<z.ZodNumber>;
23
+ offset: z.ZodDefault<z.ZodNumber>;
24
+ sort: z.ZodOptional<z.ZodArray<z.ZodObject<{
25
+ key: z.ZodString;
26
+ value: z.ZodEnum<["ASC", "DESC"]>;
27
+ }, "strip", z.ZodTypeAny, {
28
+ key?: string;
29
+ value?: "ASC" | "DESC";
30
+ }, {
31
+ key?: string;
32
+ value?: "ASC" | "DESC";
33
+ }>, "many">>;
34
+ };
35
+ /**
36
+ * Zod object schema for type inference
37
+ */
38
+ export declare const ListProductsZodSchema: z.ZodObject<{
39
+ queryString: z.ZodOptional<z.ZodString>;
40
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
41
+ productIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
42
+ filterQuery: z.ZodOptional<z.ZodArray<z.ZodObject<{
43
+ key: z.ZodString;
44
+ value: z.ZodOptional<z.ZodString>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ key?: string;
47
+ value?: string;
48
+ }, {
49
+ key?: string;
50
+ value?: string;
51
+ }>, "many">>;
52
+ assortmentId: z.ZodOptional<z.ZodString>;
53
+ includeInactive: z.ZodDefault<z.ZodBoolean>;
54
+ limit: z.ZodDefault<z.ZodNumber>;
55
+ offset: z.ZodDefault<z.ZodNumber>;
56
+ sort: z.ZodOptional<z.ZodArray<z.ZodObject<{
57
+ key: z.ZodString;
58
+ value: z.ZodEnum<["ASC", "DESC"]>;
59
+ }, "strip", z.ZodTypeAny, {
60
+ key?: string;
61
+ value?: "ASC" | "DESC";
62
+ }, {
63
+ key?: string;
64
+ value?: "ASC" | "DESC";
65
+ }>, "many">>;
66
+ }, "strip", z.ZodTypeAny, {
67
+ tags?: string[];
68
+ sort?: {
69
+ key?: string;
70
+ value?: "ASC" | "DESC";
71
+ }[];
72
+ assortmentId?: string;
73
+ includeInactive?: boolean;
74
+ queryString?: string;
75
+ limit?: number;
76
+ offset?: number;
77
+ productIds?: string[];
78
+ filterQuery?: {
79
+ key?: string;
80
+ value?: string;
81
+ }[];
82
+ }, {
83
+ tags?: string[];
84
+ sort?: {
85
+ key?: string;
86
+ value?: "ASC" | "DESC";
87
+ }[];
88
+ assortmentId?: string;
89
+ includeInactive?: boolean;
90
+ queryString?: string;
91
+ limit?: number;
92
+ offset?: number;
93
+ productIds?: string[];
94
+ filterQuery?: {
95
+ key?: string;
96
+ value?: string;
97
+ }[];
98
+ }>;
99
+ /**
100
+ * Interface for the list_products tool parameters
101
+ */
102
+ export type ListProductsParams = z.infer<typeof ListProductsZodSchema>;
103
+ /**
104
+ * Implementation of the list_products tool
105
+ */
106
+ export declare function listProductsHandler(context: Context, params: ListProductsParams): Promise<{
107
+ content: {
108
+ type: "text";
109
+ text: string;
110
+ }[];
111
+ }>;
112
+ //# sourceMappingURL=listProducts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listProducts.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/listProducts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAG3C;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA+B,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEvE;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB;;;;;GA8FrF"}