@unchainedshop/api 4.0.0-rc.10 → 4.0.0-rc.11

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 (166) hide show
  1. package/lib/mcp/index.d.ts.map +1 -1
  2. package/lib/mcp/index.js +6 -0
  3. package/lib/mcp/index.js.map +1 -1
  4. package/lib/mcp/tools/delivery/createDeliveryProviderHandler.d.ts +44 -0
  5. package/lib/mcp/tools/delivery/createDeliveryProviderHandler.d.ts.map +1 -0
  6. package/lib/mcp/tools/delivery/createDeliveryProviderHandler.js +50 -0
  7. package/lib/mcp/tools/delivery/createDeliveryProviderHandler.js.map +1 -0
  8. package/lib/mcp/tools/delivery/deliveryInterfacesHandler.d.ts +20 -0
  9. package/lib/mcp/tools/delivery/deliveryInterfacesHandler.d.ts.map +1 -0
  10. package/lib/mcp/tools/delivery/deliveryInterfacesHandler.js +45 -0
  11. package/lib/mcp/tools/delivery/deliveryInterfacesHandler.js.map +1 -0
  12. package/lib/mcp/tools/delivery/deliveryProvider.d.ts +20 -0
  13. package/lib/mcp/tools/delivery/deliveryProvider.d.ts.map +1 -0
  14. package/lib/mcp/tools/delivery/deliveryProvider.js +43 -0
  15. package/lib/mcp/tools/delivery/deliveryProvider.js.map +1 -0
  16. package/lib/mcp/tools/delivery/deliveryProvidersCountHandler.d.ts +20 -0
  17. package/lib/mcp/tools/delivery/deliveryProvidersCountHandler.d.ts.map +1 -0
  18. package/lib/mcp/tools/delivery/deliveryProvidersCountHandler.js +36 -0
  19. package/lib/mcp/tools/delivery/deliveryProvidersCountHandler.js.map +1 -0
  20. package/lib/mcp/tools/delivery/deliveryProvidersListHandler.d.ts +24 -0
  21. package/lib/mcp/tools/delivery/deliveryProvidersListHandler.d.ts.map +1 -0
  22. package/lib/mcp/tools/delivery/deliveryProvidersListHandler.js +44 -0
  23. package/lib/mcp/tools/delivery/deliveryProvidersListHandler.js.map +1 -0
  24. package/lib/mcp/tools/delivery/index.d.ts +4 -0
  25. package/lib/mcp/tools/delivery/index.d.ts.map +1 -0
  26. package/lib/mcp/tools/delivery/index.js +17 -0
  27. package/lib/mcp/tools/delivery/index.js.map +1 -0
  28. package/lib/mcp/tools/delivery/removeDeliveryProviderHandler.d.ts +20 -0
  29. package/lib/mcp/tools/delivery/removeDeliveryProviderHandler.d.ts.map +1 -0
  30. package/lib/mcp/tools/delivery/removeDeliveryProviderHandler.js +37 -0
  31. package/lib/mcp/tools/delivery/removeDeliveryProviderHandler.js.map +1 -0
  32. package/lib/mcp/tools/delivery/updateDeliveryProviderHandler.d.ts +96 -0
  33. package/lib/mcp/tools/delivery/updateDeliveryProviderHandler.d.ts.map +1 -0
  34. package/lib/mcp/tools/delivery/updateDeliveryProviderHandler.js +54 -0
  35. package/lib/mcp/tools/delivery/updateDeliveryProviderHandler.js.map +1 -0
  36. package/lib/mcp/tools/order/getMonthlySalesBreakdownHandler.d.ts +36 -0
  37. package/lib/mcp/tools/order/getMonthlySalesBreakdownHandler.d.ts.map +1 -0
  38. package/lib/mcp/tools/order/getMonthlySalesBreakdownHandler.js +89 -0
  39. package/lib/mcp/tools/order/getMonthlySalesBreakdownHandler.js.map +1 -0
  40. package/lib/mcp/tools/order/getSalesSummaryHandler.d.ts +40 -0
  41. package/lib/mcp/tools/order/getSalesSummaryHandler.d.ts.map +1 -0
  42. package/lib/mcp/tools/order/getSalesSummaryHandler.js +90 -0
  43. package/lib/mcp/tools/order/getSalesSummaryHandler.js.map +1 -0
  44. package/lib/mcp/tools/order/getTopCustomersHandler.d.ts +52 -0
  45. package/lib/mcp/tools/order/getTopCustomersHandler.d.ts.map +1 -0
  46. package/lib/mcp/tools/order/getTopCustomersHandler.js +111 -0
  47. package/lib/mcp/tools/order/getTopCustomersHandler.js.map +1 -0
  48. package/lib/mcp/tools/order/getTopSellingProductsHandler.d.ts +28 -0
  49. package/lib/mcp/tools/order/getTopSellingProductsHandler.d.ts.map +1 -0
  50. package/lib/mcp/tools/order/getTopSellingProductsHandler.js +99 -0
  51. package/lib/mcp/tools/order/getTopSellingProductsHandler.js.map +1 -0
  52. package/lib/mcp/tools/order/index.d.ts +4 -0
  53. package/lib/mcp/tools/order/index.d.ts.map +1 -0
  54. package/lib/mcp/tools/order/index.js +13 -0
  55. package/lib/mcp/tools/order/index.js.map +1 -0
  56. package/lib/mcp/tools/order/ordersListHandler.d.ts +108 -0
  57. package/lib/mcp/tools/order/ordersListHandler.d.ts.map +1 -0
  58. package/lib/mcp/tools/order/ordersListHandler.js +91 -0
  59. package/lib/mcp/tools/order/ordersListHandler.js.map +1 -0
  60. package/lib/mcp/tools/payment/createPaymentProviderHandler.d.ts.map +1 -1
  61. package/lib/mcp/tools/payment/createPaymentProviderHandler.js +5 -2
  62. package/lib/mcp/tools/payment/createPaymentProviderHandler.js.map +1 -1
  63. package/lib/mcp/tools/payment/index.js +1 -1
  64. package/lib/mcp/tools/payment/index.js.map +1 -1
  65. package/lib/mcp/tools/payment/paymentInterfacesHandler.d.ts +2 -2
  66. package/lib/mcp/tools/payment/paymentInterfacesHandler.d.ts.map +1 -1
  67. package/lib/mcp/tools/payment/paymentInterfacesHandler.js +7 -5
  68. package/lib/mcp/tools/payment/paymentInterfacesHandler.js.map +1 -1
  69. package/lib/mcp/tools/payment/paymentProviderByIdHandler.js +1 -1
  70. package/lib/mcp/tools/payment/paymentProviderByIdHandler.js.map +1 -1
  71. package/lib/mcp/tools/payment/paymentProvidersListHandler.d.ts +4 -0
  72. package/lib/mcp/tools/payment/paymentProvidersListHandler.d.ts.map +1 -1
  73. package/lib/mcp/tools/payment/paymentProvidersListHandler.js +12 -3
  74. package/lib/mcp/tools/payment/paymentProvidersListHandler.js.map +1 -1
  75. package/lib/mcp/tools/payment/removePaymentProviderHandler.d.ts.map +1 -1
  76. package/lib/mcp/tools/payment/removePaymentProviderHandler.js +5 -4
  77. package/lib/mcp/tools/payment/removePaymentProviderHandler.js.map +1 -1
  78. package/lib/mcp/tools/payment/updatePaymentProviderHandler.d.ts +66 -10
  79. package/lib/mcp/tools/payment/updatePaymentProviderHandler.d.ts.map +1 -1
  80. package/lib/mcp/tools/payment/updatePaymentProviderHandler.js +18 -3
  81. package/lib/mcp/tools/payment/updatePaymentProviderHandler.js.map +1 -1
  82. package/lib/mcp/tools/warehousing/createWarehousingProviderHandler.d.ts +44 -0
  83. package/lib/mcp/tools/warehousing/createWarehousingProviderHandler.d.ts.map +1 -0
  84. package/lib/mcp/tools/warehousing/createWarehousingProviderHandler.js +48 -0
  85. package/lib/mcp/tools/warehousing/createWarehousingProviderHandler.js.map +1 -0
  86. package/lib/mcp/tools/warehousing/index.d.ts +4 -0
  87. package/lib/mcp/tools/warehousing/index.d.ts.map +1 -0
  88. package/lib/mcp/tools/warehousing/index.js +17 -0
  89. package/lib/mcp/tools/warehousing/index.js.map +1 -0
  90. package/lib/mcp/tools/warehousing/removeWarehousingProviderHandler.d.ts +20 -0
  91. package/lib/mcp/tools/warehousing/removeWarehousingProviderHandler.d.ts.map +1 -0
  92. package/lib/mcp/tools/warehousing/removeWarehousingProviderHandler.js +39 -0
  93. package/lib/mcp/tools/warehousing/removeWarehousingProviderHandler.js.map +1 -0
  94. package/lib/mcp/tools/warehousing/updateWarehousingProviderHandler.d.ts +96 -0
  95. package/lib/mcp/tools/warehousing/updateWarehousingProviderHandler.d.ts.map +1 -0
  96. package/lib/mcp/tools/warehousing/updateWarehousingProviderHandler.js +58 -0
  97. package/lib/mcp/tools/warehousing/updateWarehousingProviderHandler.js.map +1 -0
  98. package/lib/mcp/tools/warehousing/warehousingInterfacesHandler.d.ts +20 -0
  99. package/lib/mcp/tools/warehousing/warehousingInterfacesHandler.d.ts.map +1 -0
  100. package/lib/mcp/tools/warehousing/warehousingInterfacesHandler.js +45 -0
  101. package/lib/mcp/tools/warehousing/warehousingInterfacesHandler.js.map +1 -0
  102. package/lib/mcp/tools/warehousing/warehousingProviderHandler.d.ts +20 -0
  103. package/lib/mcp/tools/warehousing/warehousingProviderHandler.d.ts.map +1 -0
  104. package/lib/mcp/tools/warehousing/warehousingProviderHandler.js +45 -0
  105. package/lib/mcp/tools/warehousing/warehousingProviderHandler.js.map +1 -0
  106. package/lib/mcp/tools/warehousing/warehousingProvidersCountHandler.d.ts +20 -0
  107. package/lib/mcp/tools/warehousing/warehousingProvidersCountHandler.d.ts.map +1 -0
  108. package/lib/mcp/tools/warehousing/warehousingProvidersCountHandler.js +36 -0
  109. package/lib/mcp/tools/warehousing/warehousingProvidersCountHandler.js.map +1 -0
  110. package/lib/mcp/tools/warehousing/warehousingProvidersListHandler.d.ts +24 -0
  111. package/lib/mcp/tools/warehousing/warehousingProvidersListHandler.d.ts.map +1 -0
  112. package/lib/mcp/tools/warehousing/warehousingProvidersListHandler.js +44 -0
  113. package/lib/mcp/tools/warehousing/warehousingProvidersListHandler.js.map +1 -0
  114. package/lib/mcp/utils/orderFilters.d.ts +22 -0
  115. package/lib/mcp/utils/orderFilters.d.ts.map +1 -0
  116. package/lib/mcp/utils/orderFilters.js +34 -0
  117. package/lib/mcp/utils/orderFilters.js.map +1 -0
  118. package/lib/mcp/utils/sharedSchemas.d.ts +11 -0
  119. package/lib/mcp/utils/sharedSchemas.d.ts.map +1 -0
  120. package/lib/mcp/utils/sharedSchemas.js +11 -0
  121. package/lib/mcp/utils/sharedSchemas.js.map +1 -0
  122. package/lib/resolvers/queries/orders/orders.d.ts.map +1 -1
  123. package/lib/resolvers/queries/orders/orders.js +33 -4
  124. package/lib/resolvers/queries/orders/orders.js.map +1 -1
  125. package/lib/resolvers/queries/orders/ordersCount.d.ts.map +1 -1
  126. package/lib/resolvers/queries/orders/ordersCount.js +29 -1
  127. package/lib/resolvers/queries/orders/ordersCount.js.map +1 -1
  128. package/lib/schema/query.d.ts.map +1 -1
  129. package/lib/schema/query.js +11 -1
  130. package/lib/schema/query.js.map +1 -1
  131. package/package.json +1 -1
  132. package/src/mcp/index.ts +6 -1
  133. package/src/mcp/tools/delivery/createDeliveryProviderHandler.ts +62 -0
  134. package/src/mcp/tools/delivery/deliveryInterfacesHandler.ts +56 -0
  135. package/src/mcp/tools/delivery/deliveryProvider.ts +51 -0
  136. package/src/mcp/tools/delivery/deliveryProvidersCountHandler.ts +46 -0
  137. package/src/mcp/tools/delivery/deliveryProvidersListHandler.ts +54 -0
  138. package/src/mcp/tools/delivery/index.ts +74 -0
  139. package/src/mcp/tools/delivery/removeDeliveryProviderHandler.ts +45 -0
  140. package/src/mcp/tools/delivery/updateDeliveryProviderHandler.ts +68 -0
  141. package/src/mcp/tools/order/getMonthlySalesBreakdownHandler.ts +106 -0
  142. package/src/mcp/tools/order/getSalesSummaryHandler.ts +103 -0
  143. package/src/mcp/tools/order/getTopCustomersHandler.ts +123 -0
  144. package/src/mcp/tools/order/getTopSellingProductsHandler.ts +112 -0
  145. package/src/mcp/tools/order/index.ts +50 -0
  146. package/src/mcp/tools/order/ordersListHandler.ts +119 -0
  147. package/src/mcp/tools/payment/createPaymentProviderHandler.ts +7 -2
  148. package/src/mcp/tools/payment/index.ts +1 -1
  149. package/src/mcp/tools/payment/paymentInterfacesHandler.ts +13 -10
  150. package/src/mcp/tools/payment/paymentProviderByIdHandler.ts +1 -1
  151. package/src/mcp/tools/payment/paymentProvidersListHandler.ts +14 -4
  152. package/src/mcp/tools/payment/removePaymentProviderHandler.ts +6 -8
  153. package/src/mcp/tools/payment/updatePaymentProviderHandler.ts +23 -4
  154. package/src/mcp/tools/warehousing/createWarehousingProviderHandler.ts +61 -0
  155. package/src/mcp/tools/warehousing/index.ts +81 -0
  156. package/src/mcp/tools/warehousing/removeWarehousingProviderHandler.ts +46 -0
  157. package/src/mcp/tools/warehousing/updateWarehousingProviderHandler.ts +72 -0
  158. package/src/mcp/tools/warehousing/warehousingInterfacesHandler.ts +58 -0
  159. package/src/mcp/tools/warehousing/warehousingProviderHandler.ts +55 -0
  160. package/src/mcp/tools/warehousing/warehousingProvidersCountHandler.ts +46 -0
  161. package/src/mcp/tools/warehousing/warehousingProvidersListHandler.ts +55 -0
  162. package/src/mcp/utils/orderFilters.ts +52 -0
  163. package/src/mcp/utils/sharedSchemas.ts +12 -0
  164. package/src/resolvers/queries/orders/orders.ts +46 -5
  165. package/src/resolvers/queries/orders/ordersCount.ts +42 -1
  166. package/src/schema/query.ts +11 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateDeliveryProviderHandler.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/delivery/updateDeliveryProviderHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAS9C,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmBxC,CAAC;AAEF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyC,CAAC;AACtF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAE3F,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,4BAA4B;;;;;GA+BrC"}
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ import { log } from '@unchainedshop/logger';
3
+ import { DeliverProviderNotFoundError } from '../../../errors.js';
4
+ const ConfigurationEntry = z.object({
5
+ key: z.string().min(1).describe('Configuration key'),
6
+ value: z.any().describe('Configuration value'),
7
+ });
8
+ export const UpdateDeliveryProviderSchema = {
9
+ deliveryProviderId: z.string().min(1).describe('ID of the delivery provider to update'),
10
+ deliveryProvider: z
11
+ .object({
12
+ configuration: z
13
+ .array(ConfigurationEntry)
14
+ .optional()
15
+ .describe('List of key-value configuration entries'),
16
+ })
17
+ .refine((data) => {
18
+ const keys = data.configuration?.map((entry) => entry.key) || [];
19
+ return new Set(keys).size === keys.length;
20
+ }, {
21
+ message: 'Duplicate keys are not allowed in configuration.',
22
+ path: ['configuration'],
23
+ }),
24
+ };
25
+ export const UpdateDeliveryProviderZodSchema = z.object(UpdateDeliveryProviderSchema);
26
+ export async function updateDeliveryProviderHandler(context, params) {
27
+ const { modules, userId } = context;
28
+ const { deliveryProviderId, deliveryProvider } = params;
29
+ try {
30
+ log('handler updateDeliveryProviderHandler', { userId, deliveryProviderId, deliveryProvider });
31
+ if (!(await modules.delivery.providerExists({ deliveryProviderId })))
32
+ throw new DeliverProviderNotFoundError({ deliveryProviderId });
33
+ const updated = await modules.delivery.update(deliveryProviderId, deliveryProvider);
34
+ return {
35
+ content: [
36
+ {
37
+ type: 'text',
38
+ text: JSON.stringify({ provider: updated }),
39
+ },
40
+ ],
41
+ };
42
+ }
43
+ catch (error) {
44
+ return {
45
+ content: [
46
+ {
47
+ type: 'text',
48
+ text: `Error updating delivery provider: ${error.message}`,
49
+ },
50
+ ],
51
+ };
52
+ }
53
+ }
54
+ //# sourceMappingURL=updateDeliveryProviderHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateDeliveryProviderHandler.js","sourceRoot":"","sources":["../../../../src/mcp/tools/delivery/updateDeliveryProviderHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACvF,gBAAgB,EAAE,CAAC;SAChB,MAAM,CAAC;QACN,aAAa,EAAE,CAAC;aACb,KAAK,CAAC,kBAAkB,CAAC;aACzB,QAAQ,EAAE;aACV,QAAQ,CAAC,yCAAyC,CAAC;KACvD,CAAC;SACD,MAAM,CACL,CAAC,IAAI,EAAE,EAAE;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACjE,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC;IAC5C,CAAC,EACD;QACE,OAAO,EAAE,kDAAkD;QAC3D,IAAI,EAAE,CAAC,eAAe,CAAC;KACxB,CACF;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAGtF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAgB,EAChB,MAAoC;IAEpC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACpC,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAExD,IAAI,CAAC;QACH,GAAG,CAAC,uCAAuC,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAE/F,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAClE,MAAM,IAAI,4BAA4B,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAEjE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,gBAAuB,CAAC,CAAC;QAE3F,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;iBAC5C;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qCAAsC,KAAe,CAAC,OAAO,EAAE;iBACtE;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../../context.js';
3
+ export declare const MonthlySalesBreakdownSchema: {
4
+ paymentProviderIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
5
+ deliveryProviderIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
6
+ status: z.ZodOptional<z.ZodArray<z.ZodEnum<["PENDING", "CONFIRMED", "SHIPPED", "DELIVERED", "CANCELLED"]>, "many">>;
7
+ from: z.ZodOptional<z.ZodString>;
8
+ to: z.ZodOptional<z.ZodString>;
9
+ };
10
+ export declare const MonthlySalesBreakdownZodSchema: z.ZodObject<{
11
+ paymentProviderIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
12
+ deliveryProviderIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
13
+ status: z.ZodOptional<z.ZodArray<z.ZodEnum<["PENDING", "CONFIRMED", "SHIPPED", "DELIVERED", "CANCELLED"]>, "many">>;
14
+ from: z.ZodOptional<z.ZodString>;
15
+ to: z.ZodOptional<z.ZodString>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ status?: ("PENDING" | "CONFIRMED" | "SHIPPED" | "DELIVERED" | "CANCELLED")[];
18
+ from?: string;
19
+ paymentProviderIds?: string[];
20
+ deliveryProviderIds?: string[];
21
+ to?: string;
22
+ }, {
23
+ status?: ("PENDING" | "CONFIRMED" | "SHIPPED" | "DELIVERED" | "CANCELLED")[];
24
+ from?: string;
25
+ paymentProviderIds?: string[];
26
+ deliveryProviderIds?: string[];
27
+ to?: string;
28
+ }>;
29
+ export type MonthlySalesBreakdownParams = z.infer<typeof MonthlySalesBreakdownZodSchema>;
30
+ export declare function getMonthlySalesBreakdownHandler(context: Context, params: MonthlySalesBreakdownParams): Promise<{
31
+ content: {
32
+ type: "text";
33
+ text: string;
34
+ }[];
35
+ }>;
36
+ //# sourceMappingURL=getMonthlySalesBreakdownHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMonthlySalesBreakdownHandler.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/order/getMonthlySalesBreakdownHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAK9C,eAAO,MAAM,2BAA2B;;;;;;CAGvC,CAAC;AAEF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;EAAwC,CAAC;AACpF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEzF,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,2BAA2B;;;;;GAyFpC"}
@@ -0,0 +1,89 @@
1
+ import { z } from 'zod';
2
+ import { log } from '@unchainedshop/logger';
3
+ import { DateRangeSchema, OrderFilterSchema } from '../../utils/sharedSchemas.js';
4
+ import { formatSummaryMap, resolveDateRange, resolveOrderFilters } from '../../utils/orderFilters.js';
5
+ export const MonthlySalesBreakdownSchema = {
6
+ ...DateRangeSchema,
7
+ ...OrderFilterSchema,
8
+ };
9
+ export const MonthlySalesBreakdownZodSchema = z.object(MonthlySalesBreakdownSchema);
10
+ export async function getMonthlySalesBreakdownHandler(context, params) {
11
+ const { modules, userId } = context;
12
+ try {
13
+ log('handler getMonthlySalesBreakdownHandler', { userId, params });
14
+ const { from, to, paymentProviderIds, deliveryProviderIds, status } = params;
15
+ const { startDate, endDate } = resolveDateRange(from, to);
16
+ const filters = await resolveOrderFilters(modules, { paymentProviderIds, deliveryProviderIds });
17
+ if (!filters) {
18
+ return {
19
+ content: [
20
+ {
21
+ type: 'text',
22
+ text: JSON.stringify({
23
+ totalSalesAmount: 0,
24
+ orderCount: 0,
25
+ averageOrderValue: 0,
26
+ currencyCode: null,
27
+ summary: [],
28
+ dateRange: { start: startDate.toISOString(), end: endDate.toISOString() },
29
+ }),
30
+ },
31
+ ],
32
+ };
33
+ }
34
+ const orders = await modules.orders.findOrders({
35
+ dateRange: { start: startDate.toISOString(), end: endDate.toISOString() },
36
+ status,
37
+ ...filters,
38
+ });
39
+ let totalSalesAmount = 0;
40
+ let orderCount = 0;
41
+ const monthlyMap = new Map();
42
+ for (let i = 0; i < 12; i++) {
43
+ const date = new Date(endDate.getFullYear(), endDate.getMonth() - i, 1);
44
+ const label = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`;
45
+ monthlyMap.set(label, { sales: 0, orders: 0 });
46
+ }
47
+ for (const order of orders) {
48
+ const orderDate = new Date(order.created);
49
+ if (orderDate < startDate || orderDate > endDate)
50
+ continue;
51
+ orderCount++;
52
+ const itemsAmount = order.calculation?.find((c) => c.category === 'ITEMS')?.amount || 0;
53
+ totalSalesAmount += itemsAmount;
54
+ const label = `${orderDate.getFullYear()}-${String(orderDate.getMonth() + 1).padStart(2, '0')}`;
55
+ const entry = monthlyMap.get(label);
56
+ if (entry) {
57
+ entry.sales += itemsAmount;
58
+ entry.orders += 1;
59
+ }
60
+ }
61
+ const averageOrderValue = orderCount > 0 ? totalSalesAmount / orderCount : 0;
62
+ return {
63
+ content: [
64
+ {
65
+ type: 'text',
66
+ text: JSON.stringify({
67
+ totalSalesAmount,
68
+ orderCount,
69
+ averageOrderValue,
70
+ currencyCode: orders[0]?.currencyCode ?? null,
71
+ summary: formatSummaryMap(monthlyMap),
72
+ dateRange: { start: startDate.toISOString(), end: endDate.toISOString() },
73
+ }),
74
+ },
75
+ ],
76
+ };
77
+ }
78
+ catch (error) {
79
+ return {
80
+ content: [
81
+ {
82
+ type: 'text',
83
+ text: `Error fetching monthly sales breakdown: ${error.message}`,
84
+ },
85
+ ],
86
+ };
87
+ }
88
+ }
89
+ //# sourceMappingURL=getMonthlySalesBreakdownHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMonthlySalesBreakdownHandler.js","sourceRoot":"","sources":["../../../../src/mcp/tools/order/getMonthlySalesBreakdownHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../../context.js';
3
+ export declare const SalesSummarySchema: {
4
+ days: z.ZodOptional<z.ZodNumber>;
5
+ paymentProviderIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
6
+ deliveryProviderIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
7
+ status: z.ZodOptional<z.ZodArray<z.ZodEnum<["PENDING", "CONFIRMED", "SHIPPED", "DELIVERED", "CANCELLED"]>, "many">>;
8
+ from: z.ZodOptional<z.ZodString>;
9
+ to: z.ZodOptional<z.ZodString>;
10
+ };
11
+ export declare const SalesSummaryZodSchema: z.ZodObject<{
12
+ days: z.ZodOptional<z.ZodNumber>;
13
+ paymentProviderIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
14
+ deliveryProviderIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
15
+ status: z.ZodOptional<z.ZodArray<z.ZodEnum<["PENDING", "CONFIRMED", "SHIPPED", "DELIVERED", "CANCELLED"]>, "many">>;
16
+ from: z.ZodOptional<z.ZodString>;
17
+ to: z.ZodOptional<z.ZodString>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ status?: ("PENDING" | "CONFIRMED" | "SHIPPED" | "DELIVERED" | "CANCELLED")[];
20
+ from?: string;
21
+ paymentProviderIds?: string[];
22
+ deliveryProviderIds?: string[];
23
+ to?: string;
24
+ days?: number;
25
+ }, {
26
+ status?: ("PENDING" | "CONFIRMED" | "SHIPPED" | "DELIVERED" | "CANCELLED")[];
27
+ from?: string;
28
+ paymentProviderIds?: string[];
29
+ deliveryProviderIds?: string[];
30
+ to?: string;
31
+ days?: number;
32
+ }>;
33
+ export type SalesSummaryParams = z.infer<typeof SalesSummaryZodSchema>;
34
+ export declare function getSalesSummaryHandler(context: Context, params: SalesSummaryParams): Promise<{
35
+ content: {
36
+ type: "text";
37
+ text: string;
38
+ }[];
39
+ }>;
40
+ //# sourceMappingURL=getSalesSummaryHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSalesSummaryHandler.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/order/getSalesSummaryHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAK9C,eAAO,MAAM,kBAAkB;;;;;;;CAI9B,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;EAA+B,CAAC;AAClE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEvE,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB;;;;;GAuFxF"}
@@ -0,0 +1,90 @@
1
+ import { z } from 'zod';
2
+ import { log } from '@unchainedshop/logger';
3
+ import { DateRangeSchema, OrderFilterSchema } from '../../utils/sharedSchemas.js';
4
+ import { formatSummaryMap, resolveDateRange, resolveOrderFilters } from '../../utils/orderFilters.js';
5
+ export const SalesSummarySchema = {
6
+ ...DateRangeSchema,
7
+ ...OrderFilterSchema,
8
+ days: z.number().int().min(1).max(365).optional(),
9
+ };
10
+ export const SalesSummaryZodSchema = z.object(SalesSummarySchema);
11
+ export async function getSalesSummaryHandler(context, params) {
12
+ const { modules, userId } = context;
13
+ try {
14
+ log('handler getSalesSummaryHandler', { userId, params });
15
+ const { from, to, days = 30, paymentProviderIds, deliveryProviderIds, status } = params;
16
+ const { startDate, endDate } = resolveDateRange(from, to, days);
17
+ const filters = await resolveOrderFilters(modules, { paymentProviderIds, deliveryProviderIds });
18
+ if (!filters) {
19
+ return {
20
+ content: [
21
+ {
22
+ type: 'text',
23
+ text: JSON.stringify({
24
+ totalSalesAmount: 0,
25
+ orderCount: 0,
26
+ averageOrderValue: 0,
27
+ currencyCode: null,
28
+ summary: [],
29
+ dateRange: { start: startDate.toISOString(), end: endDate.toISOString() },
30
+ }),
31
+ },
32
+ ],
33
+ };
34
+ }
35
+ const orders = await modules.orders.findOrders({
36
+ dateRange: { start: startDate.toISOString(), end: endDate.toISOString() },
37
+ ...filters,
38
+ status,
39
+ });
40
+ let totalSalesAmount = 0;
41
+ let orderCount = 0;
42
+ const dateMap = new Map();
43
+ for (let i = 0; i < days; i++) {
44
+ const date = new Date(endDate.getTime() - i * 86400000);
45
+ const label = date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
46
+ dateMap.set(label, { sales: 0, orders: 0 });
47
+ }
48
+ for (const order of orders) {
49
+ const orderDate = new Date(order.created);
50
+ if (orderDate < startDate || orderDate > endDate)
51
+ continue;
52
+ orderCount++;
53
+ const itemsAmount = order.calculation?.find((c) => c.category === 'ITEMS')?.amount || 0;
54
+ totalSalesAmount += itemsAmount;
55
+ const label = orderDate.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
56
+ const entry = dateMap.get(label);
57
+ if (entry) {
58
+ entry.sales += itemsAmount;
59
+ entry.orders += 1;
60
+ }
61
+ }
62
+ const averageOrderValue = orderCount > 0 ? totalSalesAmount / orderCount : 0;
63
+ return {
64
+ content: [
65
+ {
66
+ type: 'text',
67
+ text: JSON.stringify({
68
+ totalSalesAmount,
69
+ orderCount,
70
+ averageOrderValue,
71
+ currencyCode: orders[0]?.currencyCode ?? null,
72
+ summary: formatSummaryMap(dateMap),
73
+ dateRange: { start: startDate.toISOString(), end: endDate.toISOString() },
74
+ }),
75
+ },
76
+ ],
77
+ };
78
+ }
79
+ catch (error) {
80
+ return {
81
+ content: [
82
+ {
83
+ type: 'text',
84
+ text: `Error fetching sales summary: ${error.message}`,
85
+ },
86
+ ],
87
+ };
88
+ }
89
+ }
90
+ //# sourceMappingURL=getSalesSummaryHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSalesSummaryHandler.js","sourceRoot":"","sources":["../../../../src/mcp/tools/order/getSalesSummaryHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../../context.js';
3
+ export declare const GetTopCustomersSchema: {
4
+ limit: z.ZodOptional<z.ZodNumber>;
5
+ status: z.ZodOptional<z.ZodString>;
6
+ dateRange: z.ZodOptional<z.ZodObject<{
7
+ start: z.ZodOptional<z.ZodString>;
8
+ end: z.ZodOptional<z.ZodString>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ end?: string;
11
+ start?: string;
12
+ }, {
13
+ end?: string;
14
+ start?: string;
15
+ }>>;
16
+ };
17
+ export declare const GetTopCustomersZodSchema: z.ZodObject<{
18
+ limit: z.ZodOptional<z.ZodNumber>;
19
+ status: z.ZodOptional<z.ZodString>;
20
+ dateRange: z.ZodOptional<z.ZodObject<{
21
+ start: z.ZodOptional<z.ZodString>;
22
+ end: z.ZodOptional<z.ZodString>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ end?: string;
25
+ start?: string;
26
+ }, {
27
+ end?: string;
28
+ start?: string;
29
+ }>>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ status?: string;
32
+ limit?: number;
33
+ dateRange?: {
34
+ end?: string;
35
+ start?: string;
36
+ };
37
+ }, {
38
+ status?: string;
39
+ limit?: number;
40
+ dateRange?: {
41
+ end?: string;
42
+ start?: string;
43
+ };
44
+ }>;
45
+ export type GetTopCustomersParams = z.infer<typeof GetTopCustomersZodSchema>;
46
+ export declare function getTopCustomersHandler(context: Context, params: GetTopCustomersParams): Promise<{
47
+ content: {
48
+ type: "text";
49
+ text: string;
50
+ }[];
51
+ }>;
52
+ //# sourceMappingURL=getTopCustomersHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTopCustomersHandler.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/order/getTopCustomersHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAK9C,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;CAUjC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAkC,CAAC;AACxE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE7E,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,qBAAqB;;;;;GAqG3F"}
@@ -0,0 +1,111 @@
1
+ import { z } from 'zod';
2
+ import { log } from '@unchainedshop/logger';
3
+ import { resolveDateRange } from '../../utils/orderFilters.js';
4
+ import { OrderStatus } from '@unchainedshop/core-orders';
5
+ export const GetTopCustomersSchema = {
6
+ limit: z.number().int().min(1).max(100).optional().describe('Max number of customers to return'),
7
+ status: z.string().optional().describe('Order status to filter by (e.g., CONFIRMED, DELIVERED)'),
8
+ dateRange: z
9
+ .object({
10
+ start: z.string().datetime().optional(),
11
+ end: z.string().datetime().optional(),
12
+ })
13
+ .optional()
14
+ .describe('Optional date range to filter orders'),
15
+ };
16
+ export const GetTopCustomersZodSchema = z.object(GetTopCustomersSchema);
17
+ export async function getTopCustomersHandler(context, params) {
18
+ const { modules, userId, loaders } = context;
19
+ const { status, dateRange, limit = 10 } = params;
20
+ try {
21
+ log('handler getTopCustomersHandler', { userId, params });
22
+ const match = { status };
23
+ const { startDate, endDate } = resolveDateRange(dateRange.start, dateRange.end);
24
+ const orders = await modules.orders.findOrders({
25
+ status: [OrderStatus.CONFIRMED, OrderStatus.FULLFILLED],
26
+ dateRange: { start: startDate.toISOString(), end: endDate.toISOString() },
27
+ }, {
28
+ projection: {
29
+ _id: 1,
30
+ },
31
+ });
32
+ const orderIds = orders.map(({ _id }) => _id);
33
+ if (startDate)
34
+ match.created = { ...(match.created || {}), $gte: startDate.toISOString() };
35
+ if (endDate)
36
+ match.created = { ...(match.created || {}), $lte: endDate.toISOString() };
37
+ if (orderIds?.length)
38
+ match._id = { $in: orderIds };
39
+ const topCustomers = await modules.orders.aggregateOrders({
40
+ match,
41
+ project: {
42
+ userId: 1,
43
+ created: 1,
44
+ itemAmount: {
45
+ $let: {
46
+ vars: {
47
+ item: {
48
+ $first: {
49
+ $filter: {
50
+ input: '$calculation',
51
+ as: 'c',
52
+ cond: { $eq: ['$$c.category', 'ITEMS'] },
53
+ },
54
+ },
55
+ },
56
+ },
57
+ in: '$$item.amount',
58
+ },
59
+ },
60
+ },
61
+ group: {
62
+ _id: '$userId',
63
+ totalSpent: { $sum: '$itemAmount' },
64
+ orderCount: { $sum: 1 },
65
+ lastOrderDate: { $max: '$created' },
66
+ },
67
+ addFields: {
68
+ averageOrderValue: {
69
+ $cond: [{ $eq: ['$orderCount', 0] }, 0, { $divide: ['$totalSpent', '$orderCount'] }],
70
+ },
71
+ },
72
+ sort: { totalSpent: -1 },
73
+ limit,
74
+ });
75
+ const normalizedCustomers = await Promise.all(topCustomers.map(async (c) => {
76
+ const user = await modules.users.findUserById(c._id);
77
+ const avatar = await loaders.fileLoader.load({
78
+ fileId: user?.avatarId,
79
+ });
80
+ return {
81
+ userId: c._id?.toString?.() ?? null,
82
+ user: {
83
+ avatar,
84
+ },
85
+ totalSpent: c.totalSpent,
86
+ orderCount: c.orderCount,
87
+ lastOrderDate: c.lastOrderDate,
88
+ averageOrderValue: Math.round(c.averageOrderValue),
89
+ };
90
+ }));
91
+ return {
92
+ content: [
93
+ {
94
+ type: 'text',
95
+ text: JSON.stringify({ customers: normalizedCustomers }),
96
+ },
97
+ ],
98
+ };
99
+ }
100
+ catch (error) {
101
+ return {
102
+ content: [
103
+ {
104
+ type: 'text',
105
+ text: `Error fetching top customers: ${error.message}`,
106
+ },
107
+ ],
108
+ };
109
+ }
110
+ }
111
+ //# sourceMappingURL=getTopCustomersHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTopCustomersHandler.js","sourceRoot":"","sources":["../../../../src/mcp/tools/order/getTopCustomersHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../../context.js';
3
+ export declare const TopSellingProductsSchema: {
4
+ from: z.ZodOptional<z.ZodString>;
5
+ to: z.ZodOptional<z.ZodString>;
6
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
7
+ };
8
+ export declare const TopSellingProductsZodSchema: z.ZodObject<{
9
+ from: z.ZodOptional<z.ZodString>;
10
+ to: z.ZodOptional<z.ZodString>;
11
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ limit?: number;
14
+ from?: string;
15
+ to?: string;
16
+ }, {
17
+ limit?: number;
18
+ from?: string;
19
+ to?: string;
20
+ }>;
21
+ export type TopSellingProductsParams = z.infer<typeof TopSellingProductsZodSchema>;
22
+ export declare function getTopSellingProductsHandler(context: Context, params: TopSellingProductsParams): Promise<{
23
+ content: {
24
+ type: "text";
25
+ text: string;
26
+ }[];
27
+ }>;
28
+ //# sourceMappingURL=getTopSellingProductsHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTopSellingProductsHandler.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/order/getTopSellingProductsHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAM9C,eAAO,MAAM,wBAAwB;;;;CAIpC,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;EAAqC,CAAC;AAC9E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEnF,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,wBAAwB;;;;;GA+FpG"}
@@ -0,0 +1,99 @@
1
+ import { z } from 'zod';
2
+ import { log } from '@unchainedshop/logger';
3
+ import { getNormalizedProductDetails } from '../../utils/getNormalizedProductDetails.js';
4
+ import { OrderStatus } from '@unchainedshop/core-orders';
5
+ import { resolveDateRange } from '../../utils/orderFilters.js';
6
+ export const TopSellingProductsSchema = {
7
+ from: z.string().datetime().optional().describe('Start date (ISO format)'),
8
+ to: z.string().datetime().optional().describe('End date (ISO format)'),
9
+ limit: z.number().int().min(1).max(100).optional().default(10),
10
+ };
11
+ export const TopSellingProductsZodSchema = z.object(TopSellingProductsSchema);
12
+ export async function getTopSellingProductsHandler(context, params) {
13
+ const { modules, userId } = context;
14
+ const { from, to, limit } = params;
15
+ try {
16
+ log('handler getTopSellingProductsHandler', { userId, params });
17
+ const match = {};
18
+ const { startDate, endDate } = resolveDateRange(from, to);
19
+ const orders = await modules.orders.findOrders({
20
+ status: [OrderStatus.CONFIRMED, OrderStatus.FULLFILLED],
21
+ dateRange: { start: startDate.toISOString(), end: endDate.toISOString() },
22
+ }, {
23
+ projection: {
24
+ _id: 1,
25
+ },
26
+ });
27
+ const orderIds = orders.map(({ _id }) => _id);
28
+ if (startDate)
29
+ match.created = { ...(match.created || {}), $gte: startDate.toISOString() };
30
+ if (endDate)
31
+ match.created = { ...(match.created || {}), $lte: endDate.toISOString() };
32
+ if (orderIds?.length)
33
+ match.orderId = { $in: orderIds };
34
+ const topProducts = await modules.orders.positions.aggregatePositions({
35
+ match,
36
+ project: {
37
+ productId: 1,
38
+ quantity: 1,
39
+ itemAmount: {
40
+ $let: {
41
+ vars: {
42
+ item: {
43
+ $first: {
44
+ $filter: {
45
+ input: '$calculation',
46
+ as: 'c',
47
+ cond: { $eq: ['$$c.category', 'ITEM'] },
48
+ },
49
+ },
50
+ },
51
+ },
52
+ in: '$$item.amount',
53
+ },
54
+ },
55
+ },
56
+ group: {
57
+ _id: '$productId',
58
+ totalSold: { $sum: '$quantity' },
59
+ totalRevenue: { $sum: '$itemAmount' },
60
+ },
61
+ sort: { totalSold: -1 },
62
+ limit,
63
+ });
64
+ const normalizedTopSellingProducts = await Promise.all(topProducts.map(async (p) => {
65
+ const product = await getNormalizedProductDetails(p._id, context);
66
+ return {
67
+ productId: p._id?.toString?.() ?? null,
68
+ product,
69
+ totalSold: p.totalSold,
70
+ totalRevenue: p.totalRevenue,
71
+ };
72
+ }));
73
+ return {
74
+ content: [
75
+ {
76
+ type: 'text',
77
+ text: JSON.stringify({
78
+ products: normalizedTopSellingProducts,
79
+ dateRange: {
80
+ start: from ? new Date(from).toISOString() : null,
81
+ end: to ? new Date(to).toISOString() : null,
82
+ },
83
+ }),
84
+ },
85
+ ],
86
+ };
87
+ }
88
+ catch (error) {
89
+ return {
90
+ content: [
91
+ {
92
+ type: 'text',
93
+ text: `Error fetching top-selling products: ${error.message}`,
94
+ },
95
+ ],
96
+ };
97
+ }
98
+ }
99
+ //# sourceMappingURL=getTopSellingProductsHandler.js.map