@unchainedshop/api 4.0.0-rc.10 → 4.0.0-rc.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 (179) 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 +114 -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/delivery/deliveryInterfaces.d.ts +2 -2
  123. package/lib/resolvers/queries/delivery/deliveryInterfaces.d.ts.map +1 -1
  124. package/lib/resolvers/queries/delivery/deliveryInterfaces.js +6 -4
  125. package/lib/resolvers/queries/delivery/deliveryInterfaces.js.map +1 -1
  126. package/lib/resolvers/queries/orders/orders.d.ts.map +1 -1
  127. package/lib/resolvers/queries/orders/orders.js +21 -4
  128. package/lib/resolvers/queries/orders/orders.js.map +1 -1
  129. package/lib/resolvers/queries/orders/ordersCount.d.ts.map +1 -1
  130. package/lib/resolvers/queries/orders/ordersCount.js +17 -1
  131. package/lib/resolvers/queries/orders/ordersCount.js.map +1 -1
  132. package/lib/resolvers/queries/payment/paymentInterfaces.d.ts.map +1 -1
  133. package/lib/resolvers/queries/payment/paymentInterfaces.js +5 -3
  134. package/lib/resolvers/queries/payment/paymentInterfaces.js.map +1 -1
  135. package/lib/resolvers/queries/warehousing/warehousingInterfaces.d.ts.map +1 -1
  136. package/lib/resolvers/queries/warehousing/warehousingInterfaces.js +5 -3
  137. package/lib/resolvers/queries/warehousing/warehousingInterfaces.js.map +1 -1
  138. package/lib/schema/query.d.ts.map +1 -1
  139. package/lib/schema/query.js +14 -4
  140. package/lib/schema/query.js.map +1 -1
  141. package/package.json +1 -1
  142. package/src/mcp/index.ts +6 -1
  143. package/src/mcp/tools/delivery/createDeliveryProviderHandler.ts +62 -0
  144. package/src/mcp/tools/delivery/deliveryInterfacesHandler.ts +56 -0
  145. package/src/mcp/tools/delivery/deliveryProvider.ts +51 -0
  146. package/src/mcp/tools/delivery/deliveryProvidersCountHandler.ts +46 -0
  147. package/src/mcp/tools/delivery/deliveryProvidersListHandler.ts +54 -0
  148. package/src/mcp/tools/delivery/index.ts +74 -0
  149. package/src/mcp/tools/delivery/removeDeliveryProviderHandler.ts +45 -0
  150. package/src/mcp/tools/delivery/updateDeliveryProviderHandler.ts +68 -0
  151. package/src/mcp/tools/order/getMonthlySalesBreakdownHandler.ts +106 -0
  152. package/src/mcp/tools/order/getSalesSummaryHandler.ts +103 -0
  153. package/src/mcp/tools/order/getTopCustomersHandler.ts +124 -0
  154. package/src/mcp/tools/order/getTopSellingProductsHandler.ts +112 -0
  155. package/src/mcp/tools/order/index.ts +50 -0
  156. package/src/mcp/tools/order/ordersListHandler.ts +119 -0
  157. package/src/mcp/tools/payment/createPaymentProviderHandler.ts +7 -2
  158. package/src/mcp/tools/payment/index.ts +1 -1
  159. package/src/mcp/tools/payment/paymentInterfacesHandler.ts +13 -10
  160. package/src/mcp/tools/payment/paymentProviderByIdHandler.ts +1 -1
  161. package/src/mcp/tools/payment/paymentProvidersListHandler.ts +14 -4
  162. package/src/mcp/tools/payment/removePaymentProviderHandler.ts +6 -8
  163. package/src/mcp/tools/payment/updatePaymentProviderHandler.ts +23 -4
  164. package/src/mcp/tools/warehousing/createWarehousingProviderHandler.ts +61 -0
  165. package/src/mcp/tools/warehousing/index.ts +81 -0
  166. package/src/mcp/tools/warehousing/removeWarehousingProviderHandler.ts +46 -0
  167. package/src/mcp/tools/warehousing/updateWarehousingProviderHandler.ts +72 -0
  168. package/src/mcp/tools/warehousing/warehousingInterfacesHandler.ts +58 -0
  169. package/src/mcp/tools/warehousing/warehousingProviderHandler.ts +55 -0
  170. package/src/mcp/tools/warehousing/warehousingProvidersCountHandler.ts +46 -0
  171. package/src/mcp/tools/warehousing/warehousingProvidersListHandler.ts +55 -0
  172. package/src/mcp/utils/orderFilters.ts +52 -0
  173. package/src/mcp/utils/sharedSchemas.ts +12 -0
  174. package/src/resolvers/queries/delivery/deliveryInterfaces.ts +8 -4
  175. package/src/resolvers/queries/orders/orders.ts +25 -5
  176. package/src/resolvers/queries/orders/ordersCount.ts +21 -1
  177. package/src/resolvers/queries/payment/paymentInterfaces.ts +11 -7
  178. package/src/resolvers/queries/warehousing/warehousingInterfaces.ts +5 -3
  179. package/src/schema/query.ts +14 -4
@@ -0,0 +1,72 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../../context.js';
3
+ import { log } from '@unchainedshop/logger';
4
+ import { WarehousingProviderNotFoundError } from '../../../errors.js';
5
+
6
+ const ConfigurationEntry = z.object({
7
+ key: z.string().min(1).describe('Configuration key'),
8
+ value: z.any().describe('Configuration value'),
9
+ });
10
+
11
+ export const UpdateWarehousingProviderSchema = {
12
+ warehousingProviderId: z.string().min(1).describe('ID of the warehousing provider to update'),
13
+ warehousingProvider: z
14
+ .object({
15
+ configuration: z
16
+ .array(ConfigurationEntry)
17
+ .optional()
18
+ .describe('List of key-value configuration entries'),
19
+ })
20
+ .refine(
21
+ (data) => {
22
+ const keys = data.configuration?.map((entry) => entry.key) || [];
23
+ return new Set(keys).size === keys.length;
24
+ },
25
+ {
26
+ message: 'Duplicate keys are not allowed in configuration.',
27
+ path: ['configuration'],
28
+ },
29
+ ),
30
+ };
31
+
32
+ export const UpdateWarehousingProviderZodSchema = z.object(UpdateWarehousingProviderSchema);
33
+ export type UpdateWarehousingProviderParams = z.infer<typeof UpdateWarehousingProviderZodSchema>;
34
+
35
+ export async function updateWarehousingProviderHandler(
36
+ context: Context,
37
+ params: UpdateWarehousingProviderParams,
38
+ ) {
39
+ const { modules, userId } = context;
40
+ const { warehousingProviderId, warehousingProvider } = params;
41
+
42
+ try {
43
+ log('handler updateWarehousingProviderHandler', {
44
+ userId,
45
+ warehousingProviderId,
46
+ warehousingProvider,
47
+ });
48
+
49
+ if (!(await modules.warehousing.providerExists({ warehousingProviderId })))
50
+ throw new WarehousingProviderNotFoundError({ warehousingProviderId });
51
+
52
+ const provider = await modules.warehousing.update(warehousingProviderId, warehousingProvider as any);
53
+
54
+ return {
55
+ content: [
56
+ {
57
+ type: 'text' as const,
58
+ text: JSON.stringify({ provider }),
59
+ },
60
+ ],
61
+ };
62
+ } catch (error) {
63
+ return {
64
+ content: [
65
+ {
66
+ type: 'text' as const,
67
+ text: `Error updating warehousing provider: ${(error as Error).message}`,
68
+ },
69
+ ],
70
+ };
71
+ }
72
+ }
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../../context.js';
3
+ import { log } from '@unchainedshop/logger';
4
+ import { WarehousingDirector } from '@unchainedshop/core';
5
+ import { WarehousingProviderType } from '@unchainedshop/core-warehousing';
6
+
7
+ const WarehousingProviderTypeEnum = z
8
+ .enum(['PHYSICAL', 'VIRTUAL'])
9
+ .describe('Warehousing provider type');
10
+
11
+ export const WarehousingInterfacesSchema = {
12
+ type: WarehousingProviderTypeEnum.optional().describe('Optional filter by warehousing provider type'),
13
+ };
14
+
15
+ export const WarehousingInterfacesZodSchema = z.object(WarehousingInterfacesSchema);
16
+ export type WarehousingInterfacesParams = z.infer<typeof WarehousingInterfacesZodSchema>;
17
+
18
+ export async function warehousingInterfacesHandler(
19
+ context: Context,
20
+ params: WarehousingInterfacesParams,
21
+ ) {
22
+ const { userId } = context;
23
+ const { type } = params;
24
+
25
+ try {
26
+ log('handler warehousingInterfacesHandler', { userId, type });
27
+
28
+ const allAdapters = await WarehousingDirector.getAdapters();
29
+
30
+ const filteredAdapters = type
31
+ ? allAdapters.filter((Adapter) => Adapter.typeSupported(type as WarehousingProviderType))
32
+ : allAdapters;
33
+
34
+ const interfaces = filteredAdapters.map((Adapter) => ({
35
+ _id: Adapter.key,
36
+ label: Adapter.label,
37
+ version: Adapter.version,
38
+ }));
39
+
40
+ return {
41
+ content: [
42
+ {
43
+ type: 'text' as const,
44
+ text: JSON.stringify({ interfaces }),
45
+ },
46
+ ],
47
+ };
48
+ } catch (error) {
49
+ return {
50
+ content: [
51
+ {
52
+ type: 'text' as const,
53
+ text: `Error fetching warehousing interfaces: ${(error as Error).message}`,
54
+ },
55
+ ],
56
+ };
57
+ }
58
+ }
@@ -0,0 +1,55 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../../context.js';
3
+ import { log } from '@unchainedshop/logger';
4
+
5
+ export const WarehousingProviderByIdSchema = {
6
+ warehousingProviderId: z.string().min(1).describe('ID of the warehousing provider'),
7
+ };
8
+
9
+ export const WarehousingProviderByIdZodSchema = z.object(WarehousingProviderByIdSchema);
10
+ export type WarehousingProviderByIdParams = z.infer<typeof WarehousingProviderByIdZodSchema>;
11
+
12
+ export async function warehousingProviderHandler(
13
+ context: Context,
14
+ params: WarehousingProviderByIdParams,
15
+ ) {
16
+ const { modules, userId } = context;
17
+ const { warehousingProviderId } = params;
18
+
19
+ try {
20
+ log('handler warehousingProviderHandler', { userId, warehousingProviderId });
21
+
22
+ const provider = await modules.warehousing.findProvider({
23
+ warehousingProviderId,
24
+ });
25
+
26
+ if (!provider) {
27
+ return {
28
+ content: [
29
+ {
30
+ type: 'text' as const,
31
+ text: `Warehousing provider not found for ID: ${warehousingProviderId}`,
32
+ },
33
+ ],
34
+ };
35
+ }
36
+
37
+ return {
38
+ content: [
39
+ {
40
+ type: 'text' as const,
41
+ text: JSON.stringify({ provider }),
42
+ },
43
+ ],
44
+ };
45
+ } catch (error) {
46
+ return {
47
+ content: [
48
+ {
49
+ type: 'text' as const,
50
+ text: `Error fetching warehousing provider: ${(error as Error).message}`,
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ }
@@ -0,0 +1,46 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../../context.js';
3
+ import { log } from '@unchainedshop/logger';
4
+
5
+ const WarehousingProviderTypeEnum = z
6
+ .enum(['PHYSICAL', 'VIRTUAL'])
7
+ .describe('Warehousing provider type');
8
+
9
+ export const WarehousingProvidersCountSchema = {
10
+ type: WarehousingProviderTypeEnum.optional(),
11
+ };
12
+
13
+ export const WarehousingProvidersCountZodSchema = z.object(WarehousingProvidersCountSchema);
14
+ export type WarehousingProvidersCountParams = z.infer<typeof WarehousingProvidersCountZodSchema>;
15
+
16
+ export async function warehousingProvidersCountHandler(
17
+ context: Context,
18
+ params: WarehousingProvidersCountParams,
19
+ ) {
20
+ const { modules, userId } = context;
21
+ const { type } = params;
22
+
23
+ try {
24
+ log('handler warehousingProvidersCountHandler', { userId, type });
25
+
26
+ const count = await modules.warehousing.count(params as any);
27
+
28
+ return {
29
+ content: [
30
+ {
31
+ type: 'text' as const,
32
+ text: JSON.stringify({ count }),
33
+ },
34
+ ],
35
+ };
36
+ } catch (error) {
37
+ return {
38
+ content: [
39
+ {
40
+ type: 'text' as const,
41
+ text: `Error counting warehousing providers: ${(error as Error).message}`,
42
+ },
43
+ ],
44
+ };
45
+ }
46
+ }
@@ -0,0 +1,55 @@
1
+ import { z } from 'zod';
2
+ import { Context } from '../../../context.js';
3
+ import { log } from '@unchainedshop/logger';
4
+
5
+ const WarehousingProviderTypeEnum = z
6
+ .enum(['PHYSICAL', 'VIRTUAL'])
7
+ .describe('Warehousing provider type');
8
+
9
+ export const WarehousingProvidersListSchema = {
10
+ type: WarehousingProviderTypeEnum.optional().describe('Optional filter by provider type'),
11
+ queryString: z.string().min(1).optional().describe('Search by _id or adapterKey (partial match)'),
12
+ };
13
+
14
+ export const WarehousingProvidersListZodSchema = z.object(WarehousingProvidersListSchema);
15
+ export type WarehousingProvidersListParams = z.infer<typeof WarehousingProvidersListZodSchema>;
16
+
17
+ export async function warehousingProvidersListHandler(
18
+ context: Context,
19
+ params: WarehousingProvidersListParams,
20
+ ) {
21
+ const { modules, userId } = context;
22
+ const { type, queryString } = params;
23
+
24
+ try {
25
+ log('handler warehousingProvidersListHandler', { userId, type, queryString });
26
+
27
+ const selector: Record<string, any> = {};
28
+ if (type) selector.type = type;
29
+
30
+ if (queryString) {
31
+ const regex = new RegExp(queryString, 'i');
32
+ selector.$or = [{ _id: regex }, { adapterKey: regex }];
33
+ }
34
+
35
+ const providers = await modules.warehousing.findProviders(selector);
36
+
37
+ return {
38
+ content: [
39
+ {
40
+ type: 'text' as const,
41
+ text: JSON.stringify({ providers }),
42
+ },
43
+ ],
44
+ };
45
+ } catch (error) {
46
+ return {
47
+ content: [
48
+ {
49
+ type: 'text' as const,
50
+ text: `Error fetching warehousing providers: ${(error as Error).message}`,
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ }
@@ -0,0 +1,52 @@
1
+ import { Context } from '../../context.js';
2
+
3
+ export const resolveOrderFilters = async (
4
+ modules: Context['modules'],
5
+ {
6
+ paymentProviderIds,
7
+ deliveryProviderIds,
8
+ }: {
9
+ paymentProviderIds?: string[];
10
+ deliveryProviderIds?: string[];
11
+ },
12
+ ) => {
13
+ const [orderPayments, orderDeliveries] = await Promise.all([
14
+ paymentProviderIds?.length
15
+ ? modules.orders.payments.findOrderPaymentsByProviderIds({ paymentProviderIds })
16
+ : [],
17
+ deliveryProviderIds?.length
18
+ ? modules.orders.deliveries.findDeliveryByProvidersId({ deliveryProviderIds })
19
+ : [],
20
+ ]);
21
+
22
+ if (
23
+ (paymentProviderIds?.length && !orderPayments.length) ||
24
+ (deliveryProviderIds?.length && !orderDeliveries.length)
25
+ ) {
26
+ return null;
27
+ }
28
+
29
+ return {
30
+ paymentIds: orderPayments.map((p) => p._id),
31
+ deliveryIds: orderDeliveries.map((d) => d._id),
32
+ };
33
+ };
34
+
35
+ export const formatSummaryMap = (
36
+ map: Map<string, { sales: number; orders: number }>,
37
+ ): { date: string; sales: number; orders: number; avgOrderValue: number }[] => {
38
+ return Array.from(map.entries())
39
+ .reverse()
40
+ .map(([date, { sales, orders }]) => ({
41
+ date,
42
+ sales: Number(sales.toFixed(2)),
43
+ orders,
44
+ avgOrderValue: orders > 0 ? Math.round(sales / orders) : 0,
45
+ }));
46
+ };
47
+
48
+ export const resolveDateRange = (from?: string, to?: string, fallbackDays = 30) => {
49
+ const endDate = to ? new Date(to) : new Date();
50
+ const startDate = from ? new Date(from) : new Date(endDate.getTime() - (fallbackDays - 1) * 86400000);
51
+ return { startDate, endDate };
52
+ };
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+
3
+ export const OrderFilterSchema = {
4
+ paymentProviderIds: z.array(z.string()).optional(),
5
+ deliveryProviderIds: z.array(z.string()).optional(),
6
+ status: z.array(z.enum(['PENDING', 'CONFIRMED', 'SHIPPED', 'DELIVERED', 'CANCELLED'])).optional(),
7
+ };
8
+
9
+ export const DateRangeSchema = {
10
+ from: z.string().datetime().optional(),
11
+ to: z.string().datetime().optional(),
12
+ };
@@ -3,16 +3,20 @@ import { Context } from '../../../context.js';
3
3
  import { DeliveryProviderType } from '@unchainedshop/core-delivery';
4
4
  import { log } from '@unchainedshop/logger';
5
5
 
6
- export default function deliveryInterfaces(
6
+ export default async function deliveryInterfaces(
7
7
  root: never,
8
8
  { type }: { type: DeliveryProviderType },
9
9
  { userId }: Context,
10
10
  ) {
11
11
  log(`query deliveryInterfaces ${type}`, { userId });
12
12
 
13
- return DeliveryDirector.getAdapters({
14
- adapterFilter: (Adapter) => Adapter.typeSupported(type),
15
- }).map((Adapter) => ({
13
+ const allAdapters = await DeliveryDirector.getAdapters();
14
+
15
+ const filteredAdapters = type
16
+ ? allAdapters.filter((Adapter) => Adapter.typeSupported(type as DeliveryProviderType))
17
+ : allAdapters;
18
+
19
+ return filteredAdapters.map((Adapter) => ({
16
20
  _id: Adapter.key,
17
21
  label: Adapter.label,
18
22
  version: Adapter.version,
@@ -8,11 +8,31 @@ export default async function orders(
8
8
  params: OrderQuery & { limit?: number; offset?: number; sort?: SortOption[] },
9
9
  { modules, userId }: Context,
10
10
  ) {
11
- const { includeCarts, limit, offset, queryString } = params;
11
+ const { limit, offset, paymentProviderIds, deliveryProviderIds, ...restParams } = params;
12
+ log(`query orders: ${limit} ${offset} ${restParams?.queryString || ''}`, { userId });
12
13
 
13
- log(`query orders: ${limit} ${offset} ${includeCarts} ${queryString}`, {
14
- userId,
15
- });
14
+ const promises: Promise<any>[] = [];
15
+
16
+ await Promise.all(promises);
17
+ const [orderPayments, orderDeliveries] = await Promise.all([
18
+ paymentProviderIds?.length
19
+ ? modules.orders.payments.findOrderPaymentsByProviderIds({ paymentProviderIds })
20
+ : [],
21
+ deliveryProviderIds?.length
22
+ ? modules.orders.deliveries.findDeliveryByProvidersId({ deliveryProviderIds })
23
+ : [],
24
+ ]);
25
+ if (
26
+ (paymentProviderIds?.length && !orderPayments.length) ||
27
+ (deliveryProviderIds?.length && !orderDeliveries.length)
28
+ )
29
+ return [];
30
+ const paymentIds = orderPayments.map((p) => p._id);
31
+ const deliveryIds = orderDeliveries.map((d) => d._id);
16
32
 
17
- return modules.orders.findOrders(params);
33
+ return modules.orders.findOrders({
34
+ ...restParams,
35
+ paymentIds,
36
+ deliveryIds,
37
+ });
18
38
  }
@@ -7,7 +7,27 @@ export default async function ordersCount(
7
7
  params: OrderQuery,
8
8
  { modules, userId }: Context,
9
9
  ) {
10
+ const { paymentProviderIds, deliveryProviderIds, ...restParams } = params;
10
11
  log(`query ordersCount: ${params.includeCarts ? 'includeCart' : ''}`, { userId });
11
12
 
12
- return modules.orders.count(params);
13
+ const promises: Promise<any>[] = [];
14
+
15
+ await Promise.all(promises);
16
+ const [orderPayments, orderDeliveries] = await Promise.all([
17
+ paymentProviderIds?.length
18
+ ? modules.orders.payments.findOrderPaymentsByProviderIds({ paymentProviderIds })
19
+ : [],
20
+ deliveryProviderIds?.length
21
+ ? modules.orders.deliveries.findDeliveryByProvidersId({ deliveryProviderIds })
22
+ : [],
23
+ ]);
24
+ if (
25
+ (paymentProviderIds?.length && !orderPayments.length) ||
26
+ (deliveryProviderIds?.length && !orderDeliveries.length)
27
+ )
28
+ return 0;
29
+ const paymentIds = orderPayments.map((p) => p._id);
30
+ const deliveryIds = orderDeliveries.map((d) => d._id);
31
+
32
+ return modules.orders.count({ ...restParams, paymentIds, deliveryIds });
13
33
  }
@@ -10,11 +10,15 @@ export default async function paymentInterfaces(
10
10
  ) {
11
11
  log(`query paymentInterfaces ${type}`, { userId });
12
12
 
13
- return PaymentDirector.getAdapters()
14
- .filter((Adapter) => Adapter.typeSupported(type))
15
- .map((Adapter) => ({
16
- _id: Adapter.key,
17
- label: Adapter.label,
18
- version: Adapter.version,
19
- }));
13
+ const allAdapters = await PaymentDirector.getAdapters();
14
+
15
+ const filteredAdapters = type
16
+ ? allAdapters.filter((Adapter) => Adapter.typeSupported(type as PaymentProviderType))
17
+ : allAdapters;
18
+
19
+ return filteredAdapters.map((Adapter) => ({
20
+ _id: Adapter.key,
21
+ label: Adapter.label,
22
+ version: Adapter.version,
23
+ }));
20
24
  }
@@ -9,10 +9,12 @@ export default async function warehousingInterfaces(
9
9
  { userId }: Context,
10
10
  ) {
11
11
  log(`query warehousingInterfaces ${type}`, { userId });
12
+ const allAdapters = await WarehousingDirector.getAdapters();
13
+ const filteredAdapters = type
14
+ ? allAdapters.filter((Adapter) => Adapter.typeSupported(type as WarehousingProviderType))
15
+ : allAdapters;
12
16
 
13
- return WarehousingDirector.getAdapters({
14
- adapterFilter: (Adapter) => Adapter.typeSupported(type),
15
- }).map((Adapter) => ({
17
+ return filteredAdapters.map((Adapter) => ({
16
18
  _id: Adapter.key,
17
19
  label: Adapter.label,
18
20
  version: Adapter.version,
@@ -181,7 +181,7 @@ export default [
181
181
  """
182
182
  Get all delivery interfaces filtered by type
183
183
  """
184
- deliveryInterfaces(type: DeliveryProviderType!): [DeliveryInterface!]!
184
+ deliveryInterfaces(type: DeliveryProviderType): [DeliveryInterface!]!
185
185
  @cacheControl(scope: PRIVATE, maxAge: 0)
186
186
 
187
187
  """
@@ -205,7 +205,7 @@ export default [
205
205
  """
206
206
  Get all warehousing interfaces filtered by type
207
207
  """
208
- warehousingInterfaces(type: WarehousingProviderType!): [WarehousingInterface!]!
208
+ warehousingInterfaces(type: WarehousingProviderType): [WarehousingInterface!]!
209
209
  @cacheControl(scope: PRIVATE, maxAge: 0)
210
210
 
211
211
  """
@@ -242,13 +242,20 @@ export default [
242
242
  """
243
243
  Get all payment interfaces filtered by type
244
244
  """
245
- paymentInterfaces(type: PaymentProviderType!): [PaymentInterface!]!
245
+ paymentInterfaces(type: PaymentProviderType): [PaymentInterface!]!
246
246
  @cacheControl(scope: PRIVATE, maxAge: 0)
247
247
 
248
248
  """
249
249
  Returns total number of orders
250
250
  """
251
- ordersCount(includeCarts: Boolean = false, queryString: String): Int!
251
+ ordersCount(
252
+ includeCarts: Boolean = false
253
+ queryString: String
254
+ paymentProviderIds: [String!]
255
+ deliveryProviderIds: [String!]
256
+ dateRange: DateFilterInput
257
+ status: [OrderStatus!]
258
+ ): Int!
252
259
 
253
260
  """
254
261
  Get all orders, by default sorted by creation date (descending)
@@ -260,6 +267,9 @@ export default [
260
267
  queryString: String
261
268
  status: [OrderStatus!]
262
269
  sort: [SortOptionInput!]
270
+ paymentProviderIds: [String!]
271
+ deliveryProviderIds: [String!]
272
+ dateRange: DateFilterInput
263
273
  ): [Order!]!
264
274
 
265
275
  """