@open-loyalty/mcp-server 1.6.0 → 1.7.0

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 (129) hide show
  1. package/dist/server.js +1 -0
  2. package/dist/tools/achievement/handlers.js +47 -0
  3. package/dist/tools/achievement/index.d.ts +11 -4
  4. package/dist/tools/achievement/index.js +12 -1
  5. package/dist/tools/achievement/schemas.d.ts +4 -4
  6. package/dist/tools/achievement/schemas.js +13 -12
  7. package/dist/tools/admin/handlers.d.ts +48 -0
  8. package/dist/tools/admin/handlers.js +159 -0
  9. package/dist/tools/admin/index.d.ts +86 -0
  10. package/dist/tools/admin/index.js +64 -0
  11. package/dist/tools/admin/schemas.d.ts +40 -0
  12. package/dist/tools/admin/schemas.js +40 -0
  13. package/dist/tools/analytics/handlers.d.ts +42 -0
  14. package/dist/tools/analytics/handlers.js +282 -0
  15. package/dist/tools/analytics/index.d.ts +108 -0
  16. package/dist/tools/analytics/index.js +91 -0
  17. package/dist/tools/analytics/schemas.d.ts +42 -0
  18. package/dist/tools/analytics/schemas.js +47 -0
  19. package/dist/tools/apikey/handlers.d.ts +15 -0
  20. package/dist/tools/apikey/handlers.js +53 -0
  21. package/dist/tools/apikey/index.d.ts +41 -0
  22. package/dist/tools/apikey/index.js +38 -0
  23. package/dist/tools/apikey/schemas.d.ts +31 -0
  24. package/dist/tools/apikey/schemas.js +15 -0
  25. package/dist/tools/audit/handlers.d.ts +20 -0
  26. package/dist/tools/audit/handlers.js +82 -0
  27. package/dist/tools/audit/index.d.ts +36 -0
  28. package/dist/tools/audit/index.js +28 -0
  29. package/dist/tools/audit/schemas.d.ts +62 -0
  30. package/dist/tools/audit/schemas.js +18 -0
  31. package/dist/tools/badge/handlers.d.ts +45 -0
  32. package/dist/tools/badge/handlers.js +135 -0
  33. package/dist/tools/badge/index.d.ts +68 -0
  34. package/dist/tools/badge/index.js +47 -0
  35. package/dist/tools/badge/schemas.d.ts +37 -0
  36. package/dist/tools/badge/schemas.js +31 -0
  37. package/dist/tools/campaign/handlers.js +61 -0
  38. package/dist/tools/campaign/index.d.ts +12 -0
  39. package/dist/tools/campaign/index.js +20 -1
  40. package/dist/tools/campaign/member-handlers.js +37 -1
  41. package/dist/tools/campaign/schemas.js +16 -14
  42. package/dist/tools/custom-event/handlers.d.ts +98 -0
  43. package/dist/tools/custom-event/handlers.js +238 -0
  44. package/dist/tools/custom-event/index.d.ts +139 -0
  45. package/dist/tools/custom-event/index.js +78 -0
  46. package/dist/tools/custom-event/schemas.d.ts +87 -0
  47. package/dist/tools/custom-event/schemas.js +59 -0
  48. package/dist/tools/export/handlers.d.ts +29 -0
  49. package/dist/tools/export/handlers.js +128 -0
  50. package/dist/tools/export/index.d.ts +56 -0
  51. package/dist/tools/export/index.js +46 -0
  52. package/dist/tools/export/schemas.d.ts +42 -0
  53. package/dist/tools/export/schemas.js +41 -0
  54. package/dist/tools/import/handlers.d.ts +22 -0
  55. package/dist/tools/import/handlers.js +123 -0
  56. package/dist/tools/import/index.d.ts +45 -0
  57. package/dist/tools/import/index.js +41 -0
  58. package/dist/tools/import/schemas.d.ts +57 -0
  59. package/dist/tools/import/schemas.js +39 -0
  60. package/dist/tools/index.d.ts +1 -0
  61. package/dist/tools/index.js +11 -11
  62. package/dist/tools/member/handlers.js +30 -0
  63. package/dist/tools/member/index.d.ts +10 -0
  64. package/dist/tools/member/index.js +10 -0
  65. package/dist/tools/member/schemas.js +13 -13
  66. package/dist/tools/points/handlers.js +73 -0
  67. package/dist/tools/points/index.d.ts +6 -0
  68. package/dist/tools/points/index.js +6 -0
  69. package/dist/tools/points/schemas.js +1 -1
  70. package/dist/tools/referral/index.d.ts +3 -0
  71. package/dist/tools/referral/index.js +3 -0
  72. package/dist/tools/reward/handlers.js +21 -13
  73. package/dist/tools/reward/index.d.ts +9 -0
  74. package/dist/tools/reward/index.js +12 -1
  75. package/dist/tools/reward/schemas.js +2 -2
  76. package/dist/tools/role/handlers.d.ts +35 -0
  77. package/dist/tools/role/handlers.js +127 -0
  78. package/dist/tools/role/index.d.ts +99 -0
  79. package/dist/tools/role/index.js +65 -0
  80. package/dist/tools/role/schemas.d.ts +56 -0
  81. package/dist/tools/role/schemas.js +35 -0
  82. package/dist/tools/segment/handlers.js +68 -1
  83. package/dist/tools/segment/index.d.ts +9 -0
  84. package/dist/tools/segment/index.js +13 -0
  85. package/dist/tools/segment/schemas.js +8 -5
  86. package/dist/tools/store/handlers.d.ts +25 -0
  87. package/dist/tools/store/handlers.js +89 -0
  88. package/dist/tools/store/index.d.ts +55 -0
  89. package/dist/tools/store/index.js +46 -0
  90. package/dist/tools/store/schemas.d.ts +38 -0
  91. package/dist/tools/store/schemas.js +23 -0
  92. package/dist/tools/tierset/handlers.js +92 -1
  93. package/dist/tools/tierset/index.d.ts +6 -0
  94. package/dist/tools/tierset/index.js +8 -1
  95. package/dist/tools/transaction/handlers.js +40 -0
  96. package/dist/tools/transaction/index.d.ts +4 -0
  97. package/dist/tools/transaction/index.js +4 -0
  98. package/dist/tools/transaction/schemas.js +3 -3
  99. package/dist/tools/wallet-type/index.d.ts +4 -0
  100. package/dist/tools/wallet-type/index.js +5 -1
  101. package/dist/tools/webhook/handlers.d.ts +34 -0
  102. package/dist/tools/webhook/handlers.js +147 -0
  103. package/dist/tools/webhook/index.d.ts +97 -0
  104. package/dist/tools/webhook/index.js +65 -0
  105. package/dist/tools/webhook/schemas.d.ts +72 -0
  106. package/dist/tools/{webhook.js → webhook/schemas.js} +0 -140
  107. package/dist/types/schemas/tierset.js +3 -1
  108. package/package.json +1 -1
  109. package/dist/tools/admin.d.ts +0 -165
  110. package/dist/tools/admin.js +0 -205
  111. package/dist/tools/analytics.d.ts +0 -180
  112. package/dist/tools/analytics.js +0 -255
  113. package/dist/tools/apikey.d.ts +0 -79
  114. package/dist/tools/apikey.js +0 -85
  115. package/dist/tools/audit.d.ts +0 -111
  116. package/dist/tools/audit.js +0 -94
  117. package/dist/tools/badge.d.ts +0 -143
  118. package/dist/tools/badge.js +0 -174
  119. package/dist/tools/custom-event.d.ts +0 -315
  120. package/dist/tools/custom-event.js +0 -271
  121. package/dist/tools/export.d.ts +0 -118
  122. package/dist/tools/export.js +0 -152
  123. package/dist/tools/import.d.ts +0 -116
  124. package/dist/tools/import.js +0 -143
  125. package/dist/tools/role.d.ts +0 -180
  126. package/dist/tools/role.js +0 -173
  127. package/dist/tools/store.d.ts +0 -109
  128. package/dist/tools/store.js +0 -125
  129. package/dist/tools/webhook.d.ts +0 -192
@@ -1,271 +0,0 @@
1
- import { z } from "zod";
2
- import { apiGet, apiPost, apiPut } from "../client/http.js";
3
- import { formatApiError } from "../utils/errors.js";
4
- import { getStoreCode } from "../config.js";
5
- // Input Schemas
6
- export const CustomEventSchemaListInputSchema = {
7
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
8
- page: z.number().optional().describe("Page number (default: 1)."),
9
- perPage: z.number().optional().describe("Items per page (default: 25)."),
10
- eventType: z.string().optional().describe("Filter by event type code."),
11
- name: z.string().optional().describe("Filter by event schema name."),
12
- active: z.boolean().optional().describe("Filter by active status."),
13
- };
14
- export const CustomEventSchemaGetInputSchema = {
15
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
16
- eventType: z.string().describe("The custom event type code to retrieve."),
17
- };
18
- const CustomEventSchemaFieldSchema = z.object({
19
- name: z.string().describe("Field name (e.g., 'minutes_watched', 'location_id')."),
20
- type: z.enum(["text", "number", "boolean", "datetime"]).describe("Field data type: 'text' (strings), 'number' (integers/decimals), 'boolean' (true/false), 'datetime' (ISO 8601 format)."),
21
- description: z.string().optional().describe("Field description."),
22
- });
23
- export const CustomEventSchemaCreateInputSchema = {
24
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
25
- eventType: z.string().describe("Unique event type code (e.g., 'location_visit', 'app_login', 'video_watch'). " +
26
- "Use snake_case. This is referenced in campaigns and achievements."),
27
- name: z.string().describe("Human-readable name for the event schema."),
28
- fields: z.array(CustomEventSchemaFieldSchema).describe("Array of fields. Example: [{name: 'minutes_watched', type: 'number'}, {name: 'location', type: 'text'}]. Valid types: text, number, boolean, datetime."),
29
- active: z.boolean().optional().describe("Whether the schema is active (default: true)."),
30
- };
31
- export const CustomEventSchemaUpdateInputSchema = {
32
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
33
- eventType: z.string().describe("The custom event type code to update."),
34
- name: z.string().describe("Human-readable name for the event schema."),
35
- fields: z.array(CustomEventSchemaFieldSchema).describe("Array of fields the event can contain."),
36
- active: z.boolean().optional().describe("Whether the schema is active."),
37
- };
38
- export const CustomEventSchemaActivateInputSchema = {
39
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
40
- eventType: z.string().describe("The custom event type code to activate/deactivate."),
41
- active: z.boolean().describe("Set to true to activate, false to deactivate."),
42
- };
43
- export const CustomEventSendInputSchema = {
44
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
45
- eventType: z.string().describe("The custom event type code (must match an existing schema)."),
46
- customerData: z.object({
47
- customerId: z.string().optional().describe("Member ID (UUID) for identification."),
48
- email: z.string().optional().describe("Member email for identification."),
49
- phone: z.string().optional().describe("Member phone for identification."),
50
- loyaltyCardNumber: z.string().optional().describe("Member loyalty card number for identification."),
51
- }).describe("Customer identification (provide at least one field)."),
52
- eventDate: z.string().describe("Event date/time in ISO format (e.g., '2025-01-15T14:30:00+00:00')."),
53
- body: z.record(z.unknown()).optional().describe("Event-specific data matching the schema fields."),
54
- eventId: z.string().optional().describe("Unique event identifier for deduplication (optional, max 255 chars)."),
55
- };
56
- export const CustomEventListInputSchema = {
57
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
58
- page: z.number().optional().describe("Page number (default: 1)."),
59
- perPage: z.number().optional().describe("Items per page (default: 25)."),
60
- type: z.string().optional().describe("Filter by event type."),
61
- customerId: z.string().optional().describe("Filter by member ID."),
62
- email: z.string().optional().describe("Filter by member email."),
63
- };
64
- export async function customEventSchemaList(input) {
65
- const storeCode = getStoreCode(input.storeCode);
66
- const params = new URLSearchParams();
67
- if (input.page)
68
- params.append("_page", String(input.page));
69
- if (input.perPage)
70
- params.append("_itemsOnPage", String(input.perPage));
71
- if (input.eventType)
72
- params.append("eventType", input.eventType);
73
- if (input.name)
74
- params.append("name", input.name);
75
- if (input.active !== undefined)
76
- params.append("active", String(input.active));
77
- const queryString = params.toString();
78
- const url = `/${storeCode}/customEvent/schema${queryString ? `?${queryString}` : ""}`;
79
- try {
80
- const response = await apiGet(url);
81
- const total = response.total || {};
82
- return {
83
- schemas: response.items || [],
84
- total: {
85
- all: typeof total.all === "number" ? total.all : undefined,
86
- filtered: typeof total.filtered === "number" ? total.filtered : undefined,
87
- },
88
- };
89
- }
90
- catch (error) {
91
- throw formatApiError(error, "ol_custom_event_schema_list");
92
- }
93
- }
94
- export async function customEventSchemaGet(input) {
95
- const storeCode = getStoreCode(input.storeCode);
96
- try {
97
- const response = await apiGet(`/${storeCode}/customEvent/schema/${input.eventType}`);
98
- return response;
99
- }
100
- catch (error) {
101
- throw formatApiError(error, "ol_custom_event_schema_get");
102
- }
103
- }
104
- export async function customEventSchemaCreate(input) {
105
- const storeCode = getStoreCode(input.storeCode);
106
- const schemaPayload = {
107
- customEventSchema: {
108
- eventType: input.eventType,
109
- name: input.name,
110
- schema: {
111
- fields: input.fields,
112
- },
113
- active: {
114
- isActive: input.active ?? true,
115
- },
116
- },
117
- };
118
- try {
119
- await apiPost(`/${storeCode}/customEvent/schema`, schemaPayload);
120
- }
121
- catch (error) {
122
- throw formatApiError(error, "ol_custom_event_schema_create");
123
- }
124
- }
125
- export async function customEventSchemaUpdate(input) {
126
- const storeCode = getStoreCode(input.storeCode);
127
- const schemaPayload = {
128
- customEventSchema: {
129
- name: input.name,
130
- schema: {
131
- fields: input.fields,
132
- },
133
- active: {
134
- isActive: input.active ?? true,
135
- },
136
- },
137
- };
138
- try {
139
- await apiPut(`/${storeCode}/customEvent/schema/${input.eventType}`, schemaPayload);
140
- }
141
- catch (error) {
142
- throw formatApiError(error, "ol_custom_event_schema_update");
143
- }
144
- }
145
- export async function customEventSchemaActivate(input) {
146
- const storeCode = getStoreCode(input.storeCode);
147
- try {
148
- await apiPost(`/${storeCode}/customEvent/schema/${input.eventType}/active`, {
149
- active: input.active,
150
- });
151
- }
152
- catch (error) {
153
- throw formatApiError(error, "ol_custom_event_schema_activate");
154
- }
155
- }
156
- export async function customEventSend(input) {
157
- const storeCode = getStoreCode(input.storeCode);
158
- const eventPayload = {
159
- event: {
160
- type: input.eventType,
161
- customerData: input.customerData,
162
- eventDate: input.eventDate,
163
- },
164
- };
165
- const eventObj = eventPayload.event;
166
- if (input.body)
167
- eventObj.body = input.body;
168
- if (input.eventId)
169
- eventObj.eventId = input.eventId;
170
- try {
171
- const response = await apiPost(`/${storeCode}/customEvent`, eventPayload);
172
- return { customEventId: response.customEventId };
173
- }
174
- catch (error) {
175
- throw formatApiError(error, "ol_custom_event_send");
176
- }
177
- }
178
- export async function customEventList(input) {
179
- const storeCode = getStoreCode(input.storeCode);
180
- const params = new URLSearchParams();
181
- if (input.page)
182
- params.append("_page", String(input.page));
183
- if (input.perPage)
184
- params.append("_itemsOnPage", String(input.perPage));
185
- if (input.type)
186
- params.append("type", input.type);
187
- if (input.customerId)
188
- params.append("customerId", input.customerId);
189
- if (input.email)
190
- params.append("customerData:email", input.email);
191
- const queryString = params.toString();
192
- const url = `/${storeCode}/customEvent${queryString ? `?${queryString}` : ""}`;
193
- try {
194
- const response = await apiGet(url);
195
- const total = response.total || {};
196
- return {
197
- events: response.items || [],
198
- total: {
199
- all: typeof total.all === "number" ? total.all : undefined,
200
- filtered: typeof total.filtered === "number" ? total.filtered : undefined,
201
- },
202
- };
203
- }
204
- catch (error) {
205
- throw formatApiError(error, "ol_custom_event_list");
206
- }
207
- }
208
- // Tool definitions
209
- export const customEventToolDefinitions = [
210
- {
211
- name: "ol_custom_event_schema_list",
212
- title: "List Custom Event Schemas",
213
- description: "List available custom event schemas. Custom event schemas define event types that can trigger campaigns and achievements. " +
214
- "Use this to discover existing event types before creating campaigns/achievements with trigger='custom_event'.",
215
- readOnly: true,
216
- inputSchema: CustomEventSchemaListInputSchema,
217
- handler: customEventSchemaList,
218
- },
219
- {
220
- name: "ol_custom_event_schema_get",
221
- title: "Get Custom Event Schema",
222
- description: "Get details of a specific custom event schema including its fields.",
223
- readOnly: true,
224
- inputSchema: CustomEventSchemaGetInputSchema,
225
- handler: customEventSchemaGet,
226
- },
227
- {
228
- name: "ol_custom_event_schema_create",
229
- title: "Create Custom Event Schema",
230
- description: "Create a new custom event schema. REQUIRED before using a custom event in campaigns or achievements. " +
231
- "Example: To track location visits, create schema with eventType='location_visit' and fields like [{name: 'location_id', type: 'text'}]. " +
232
- "Valid field types: 'text' (strings), 'number' (integers/decimals), 'boolean', 'datetime'. " +
233
- "Then use campaign_create with trigger='custom_event', event='location_visit'.",
234
- readOnly: false,
235
- inputSchema: CustomEventSchemaCreateInputSchema,
236
- handler: customEventSchemaCreate,
237
- },
238
- {
239
- name: "ol_custom_event_schema_update",
240
- title: "Update Custom Event Schema",
241
- description: "Update an existing custom event schema (name, fields, active status).",
242
- readOnly: false,
243
- inputSchema: CustomEventSchemaUpdateInputSchema,
244
- handler: customEventSchemaUpdate,
245
- },
246
- {
247
- name: "ol_custom_event_schema_activate",
248
- title: "Activate/Deactivate Custom Event Schema",
249
- description: "Activate or deactivate a custom event schema. Inactive schemas won't trigger campaigns/achievements.",
250
- readOnly: false,
251
- inputSchema: CustomEventSchemaActivateInputSchema,
252
- handler: customEventSchemaActivate,
253
- },
254
- {
255
- name: "ol_custom_event_send",
256
- title: "Send Custom Event",
257
- description: "Send a custom event for a member. Triggers any campaigns/achievements that match the event type. " +
258
- "The event schema must exist. Identify member by customerId, email, phone, or loyaltyCardNumber.",
259
- readOnly: false,
260
- inputSchema: CustomEventSendInputSchema,
261
- handler: customEventSend,
262
- },
263
- {
264
- name: "ol_custom_event_list",
265
- title: "List Custom Events",
266
- description: "List custom events that have been sent. Filter by event type or member to see event history.",
267
- readOnly: true,
268
- inputSchema: CustomEventListInputSchema,
269
- handler: customEventList,
270
- },
271
- ];
@@ -1,118 +0,0 @@
1
- import { z } from "zod";
2
- export interface Export {
3
- exportId: string;
4
- type?: string;
5
- status?: string;
6
- createdAt?: string;
7
- finishedAt?: string;
8
- criteria?: string;
9
- exportedRows?: number;
10
- message?: string;
11
- }
12
- export interface ExportListResponse {
13
- items: Export[];
14
- total?: {
15
- all?: number | string;
16
- filtered?: number | string;
17
- estimated?: boolean;
18
- };
19
- }
20
- export declare const ExportCreateInputSchema: {
21
- storeCode: z.ZodOptional<z.ZodString>;
22
- type: z.ZodEnum<["campaignCode", "member", "memberTier", "memberSegment", "rewardFulfillment"]>;
23
- filters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
24
- page: z.ZodOptional<z.ZodNumber>;
25
- perPage: z.ZodOptional<z.ZodNumber>;
26
- };
27
- export declare const ExportListInputSchema: {
28
- storeCode: z.ZodOptional<z.ZodString>;
29
- page: z.ZodOptional<z.ZodNumber>;
30
- perPage: z.ZodOptional<z.ZodNumber>;
31
- exportId: z.ZodOptional<z.ZodString>;
32
- type: z.ZodOptional<z.ZodEnum<["campaignCode", "member", "memberTier", "memberSegment", "rewardFulfillment"]>>;
33
- status: z.ZodOptional<z.ZodEnum<["pending", "done", "failed", "error"]>>;
34
- };
35
- export declare const ExportGetInputSchema: {
36
- storeCode: z.ZodOptional<z.ZodString>;
37
- exportId: z.ZodString;
38
- };
39
- export declare const ExportDownloadInputSchema: {
40
- storeCode: z.ZodOptional<z.ZodString>;
41
- exportId: z.ZodString;
42
- };
43
- export declare function exportCreate(input: {
44
- storeCode?: string;
45
- type: string;
46
- filters?: Record<string, unknown>;
47
- page?: number;
48
- perPage?: number;
49
- }): Promise<{
50
- exportId: string;
51
- }>;
52
- export declare function exportList(input: {
53
- storeCode?: string;
54
- page?: number;
55
- perPage?: number;
56
- exportId?: string;
57
- type?: string;
58
- status?: string;
59
- }): Promise<ExportListResponse>;
60
- export declare function exportGet(input: {
61
- storeCode?: string;
62
- exportId: string;
63
- }): Promise<Export>;
64
- export declare function exportDownload(input: {
65
- storeCode?: string;
66
- exportId: string;
67
- }): Promise<{
68
- content: string;
69
- contentType: string;
70
- }>;
71
- export declare const exportToolDefinitions: readonly [{
72
- readonly name: "ol_export_create";
73
- readonly title: "Create Data Export";
74
- readonly description: "Create a new data export. Returns exportId for async tracking. Export types: campaignCode (campaign redemption codes), member (member data), memberTier (member tier assignments), memberSegment (member segment membership), rewardFulfillment (reward fulfillment records). The export runs asynchronously - use export_get to check status and export_download when status is 'done'.";
75
- readonly readOnly: false;
76
- readonly inputSchema: {
77
- storeCode: z.ZodOptional<z.ZodString>;
78
- type: z.ZodEnum<["campaignCode", "member", "memberTier", "memberSegment", "rewardFulfillment"]>;
79
- filters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
80
- page: z.ZodOptional<z.ZodNumber>;
81
- perPage: z.ZodOptional<z.ZodNumber>;
82
- };
83
- readonly handler: typeof exportCreate;
84
- }, {
85
- readonly name: "ol_export_list";
86
- readonly title: "List Exports";
87
- readonly description: "List exports with optional filtering. Returns paginated list of exports with exportId, type, status, createdAt, and finishedAt. Status values: pending, done, failed, error.";
88
- readonly readOnly: true;
89
- readonly inputSchema: {
90
- storeCode: z.ZodOptional<z.ZodString>;
91
- page: z.ZodOptional<z.ZodNumber>;
92
- perPage: z.ZodOptional<z.ZodNumber>;
93
- exportId: z.ZodOptional<z.ZodString>;
94
- type: z.ZodOptional<z.ZodEnum<["campaignCode", "member", "memberTier", "memberSegment", "rewardFulfillment"]>>;
95
- status: z.ZodOptional<z.ZodEnum<["pending", "done", "failed", "error"]>>;
96
- };
97
- readonly handler: typeof exportList;
98
- }, {
99
- readonly name: "ol_export_get";
100
- readonly title: "Get Export Details";
101
- readonly description: "Get export details and status. Returns exportId, type, status, createdAt, finishedAt, exportedRows, and message. Check status before downloading - export must have status 'done'.";
102
- readonly readOnly: true;
103
- readonly inputSchema: {
104
- storeCode: z.ZodOptional<z.ZodString>;
105
- exportId: z.ZodString;
106
- };
107
- readonly handler: typeof exportGet;
108
- }, {
109
- readonly name: "ol_export_download";
110
- readonly title: "Download Export File";
111
- readonly description: "Download export file content. Returns CSV content. IMPORTANT: Only available when export status is 'done'. Check status with export_get first.";
112
- readonly readOnly: true;
113
- readonly inputSchema: {
114
- storeCode: z.ZodOptional<z.ZodString>;
115
- exportId: z.ZodString;
116
- };
117
- readonly handler: typeof exportDownload;
118
- }];
@@ -1,152 +0,0 @@
1
- import { z } from "zod";
2
- import { apiGet, apiPost } from "../client/http.js";
3
- import { formatApiError } from "../utils/errors.js";
4
- import { getConfig, getStoreCode } from "../config.js";
5
- import axios from "axios";
6
- // Input Schemas
7
- export const ExportCreateInputSchema = {
8
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
9
- type: z.enum([
10
- "campaignCode",
11
- "member",
12
- "memberTier",
13
- "memberSegment",
14
- "rewardFulfillment",
15
- ]).describe("Export type. Options: campaignCode, member, memberTier, memberSegment, rewardFulfillment."),
16
- filters: z.record(z.unknown()).optional().describe("Type-specific filters. For campaignCode: { campaignId?, code?, status?, codeId?, usedByMemberId?, createdAt?, usedAt? }. Filters vary by export type."),
17
- page: z.number().optional().describe("Page number for export (included in export criteria)."),
18
- perPage: z.number().optional().describe("Items per page for export."),
19
- };
20
- export const ExportListInputSchema = {
21
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
22
- page: z.number().optional().describe("Page number (default: 1)."),
23
- perPage: z.number().optional().describe("Items per page (default: 25)."),
24
- exportId: z.string().optional().describe("Filter by export ID."),
25
- type: z.enum([
26
- "campaignCode",
27
- "member",
28
- "memberTier",
29
- "memberSegment",
30
- "rewardFulfillment",
31
- ]).optional().describe("Filter by export type."),
32
- status: z.enum(["pending", "done", "failed", "error"]).optional().describe("Filter by export status."),
33
- };
34
- export const ExportGetInputSchema = {
35
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
36
- exportId: z.string().describe("The export ID (UUID) to retrieve."),
37
- };
38
- export const ExportDownloadInputSchema = {
39
- storeCode: z.string().optional().describe("INTERNAL: Auto-configured from server settings. NEVER ask the user for this value. Only set if the user explicitly requests a different store."),
40
- exportId: z.string().describe("The export ID (UUID) to download. Export must have status 'done'."),
41
- };
42
- // Handler functions
43
- export async function exportCreate(input) {
44
- const storeCode = getStoreCode(input.storeCode);
45
- // Build the payload with type-specific wrapper
46
- // The API expects { [type]: { ...filters, _page?, _itemsOnPage? } }
47
- const innerPayload = {
48
- ...(input.filters || {}),
49
- };
50
- if (input.page)
51
- innerPayload._page = input.page;
52
- if (input.perPage)
53
- innerPayload._itemsOnPage = input.perPage;
54
- const payload = {
55
- [input.type]: innerPayload,
56
- };
57
- try {
58
- const response = await apiPost(`/${storeCode}/export/${input.type}`, payload);
59
- return response;
60
- }
61
- catch (error) {
62
- throw formatApiError(error, "ol_export_create");
63
- }
64
- }
65
- export async function exportList(input) {
66
- const storeCode = getStoreCode(input.storeCode);
67
- const params = new URLSearchParams();
68
- if (input.page)
69
- params.append("_page", String(input.page));
70
- if (input.perPage)
71
- params.append("_itemsOnPage", String(input.perPage));
72
- if (input.exportId)
73
- params.append("exportId", input.exportId);
74
- if (input.type)
75
- params.append("type", input.type);
76
- if (input.status)
77
- params.append("status", input.status);
78
- const queryString = params.toString();
79
- const url = `/${storeCode}/export${queryString ? `?${queryString}` : ""}`;
80
- try {
81
- const response = await apiGet(url);
82
- return response;
83
- }
84
- catch (error) {
85
- throw formatApiError(error, "ol_export_list");
86
- }
87
- }
88
- export async function exportGet(input) {
89
- const storeCode = getStoreCode(input.storeCode);
90
- try {
91
- const response = await apiGet(`/${storeCode}/export/${input.exportId}`);
92
- return response;
93
- }
94
- catch (error) {
95
- throw formatApiError(error, "ol_export_get");
96
- }
97
- }
98
- export async function exportDownload(input) {
99
- const config = getConfig();
100
- const storeCode = getStoreCode(input.storeCode);
101
- try {
102
- const response = await axios.get(`${config.apiUrl}/${storeCode}/export/${input.exportId}/download`, {
103
- headers: {
104
- "X-AUTH-TOKEN": config.apiToken,
105
- "Accept": "text/csv",
106
- },
107
- responseType: "text",
108
- });
109
- return {
110
- content: response.data,
111
- contentType: response.headers["content-type"] || "text/csv",
112
- };
113
- }
114
- catch (error) {
115
- throw formatApiError(error, "ol_export_download");
116
- }
117
- }
118
- // Tool definitions
119
- export const exportToolDefinitions = [
120
- {
121
- name: "ol_export_create",
122
- title: "Create Data Export",
123
- description: "Create a new data export. Returns exportId for async tracking. Export types: campaignCode (campaign redemption codes), member (member data), memberTier (member tier assignments), memberSegment (member segment membership), rewardFulfillment (reward fulfillment records). The export runs asynchronously - use export_get to check status and export_download when status is 'done'.",
124
- readOnly: false,
125
- inputSchema: ExportCreateInputSchema,
126
- handler: exportCreate,
127
- },
128
- {
129
- name: "ol_export_list",
130
- title: "List Exports",
131
- description: "List exports with optional filtering. Returns paginated list of exports with exportId, type, status, createdAt, and finishedAt. Status values: pending, done, failed, error.",
132
- readOnly: true,
133
- inputSchema: ExportListInputSchema,
134
- handler: exportList,
135
- },
136
- {
137
- name: "ol_export_get",
138
- title: "Get Export Details",
139
- description: "Get export details and status. Returns exportId, type, status, createdAt, finishedAt, exportedRows, and message. Check status before downloading - export must have status 'done'.",
140
- readOnly: true,
141
- inputSchema: ExportGetInputSchema,
142
- handler: exportGet,
143
- },
144
- {
145
- name: "ol_export_download",
146
- title: "Download Export File",
147
- description: "Download export file content. Returns CSV content. IMPORTANT: Only available when export status is 'done'. Check status with export_get first.",
148
- readOnly: true,
149
- inputSchema: ExportDownloadInputSchema,
150
- handler: exportDownload,
151
- },
152
- ];
@@ -1,116 +0,0 @@
1
- import { z } from "zod";
2
- export interface Import {
3
- importId: string;
4
- type?: string;
5
- uploadedDate?: string;
6
- fileName?: string;
7
- itemsToImport?: number;
8
- user?: string;
9
- errorMessage?: string;
10
- additionalData?: Record<string, string>;
11
- }
12
- export interface ImportItem {
13
- importId?: string;
14
- status?: string;
15
- createdAt?: string;
16
- updatedAt?: string;
17
- message?: string;
18
- entity?: {
19
- id?: string;
20
- data?: Record<string, unknown>;
21
- };
22
- }
23
- export interface ImportListResponse {
24
- items: Import[];
25
- total?: {
26
- all?: number | string;
27
- filtered?: number | string;
28
- estimated?: boolean | number;
29
- };
30
- }
31
- export interface ImportDetailsResponse {
32
- items: ImportItem[];
33
- total?: {
34
- all?: number | string;
35
- filtered?: number | string;
36
- estimated?: boolean | number;
37
- };
38
- }
39
- export declare const ImportCreateInputSchema: {
40
- storeCode: z.ZodOptional<z.ZodString>;
41
- type: z.ZodEnum<["member", "groupValue", "segmentMembers", "unitTransferAdding", "unitTransferSpending", "transaction", "campaignCode", "rewardCoupon"]>;
42
- fileContent: z.ZodString;
43
- fileName: z.ZodOptional<z.ZodString>;
44
- };
45
- export declare const ImportListInputSchema: {
46
- storeCode: z.ZodOptional<z.ZodString>;
47
- page: z.ZodOptional<z.ZodNumber>;
48
- perPage: z.ZodOptional<z.ZodNumber>;
49
- importId: z.ZodOptional<z.ZodString>;
50
- type: z.ZodOptional<z.ZodEnum<["member", "groupValue", "segmentMembers", "unitTransferAdding", "unitTransferSpending", "transaction", "campaignCode", "rewardCoupon"]>>;
51
- };
52
- export declare const ImportGetInputSchema: {
53
- storeCode: z.ZodOptional<z.ZodString>;
54
- importId: z.ZodString;
55
- page: z.ZodOptional<z.ZodNumber>;
56
- perPage: z.ZodOptional<z.ZodNumber>;
57
- };
58
- export declare function importCreate(input: {
59
- storeCode?: string;
60
- type: string;
61
- fileContent: string;
62
- fileName?: string;
63
- }): Promise<{
64
- importId: string;
65
- }>;
66
- export declare function importList(input: {
67
- storeCode?: string;
68
- page?: number;
69
- perPage?: number;
70
- importId?: string;
71
- type?: string;
72
- }): Promise<ImportListResponse>;
73
- export declare function importGet(input: {
74
- storeCode?: string;
75
- importId: string;
76
- page?: number;
77
- perPage?: number;
78
- }): Promise<ImportDetailsResponse>;
79
- export declare const importToolDefinitions: readonly [{
80
- readonly name: "ol_import_create";
81
- readonly title: "Create Bulk Import";
82
- readonly description: string;
83
- readonly readOnly: false;
84
- readonly inputSchema: {
85
- storeCode: z.ZodOptional<z.ZodString>;
86
- type: z.ZodEnum<["member", "groupValue", "segmentMembers", "unitTransferAdding", "unitTransferSpending", "transaction", "campaignCode", "rewardCoupon"]>;
87
- fileContent: z.ZodString;
88
- fileName: z.ZodOptional<z.ZodString>;
89
- };
90
- readonly handler: typeof importCreate;
91
- }, {
92
- readonly name: "ol_import_list";
93
- readonly title: "List Imports";
94
- readonly description: "List imports with optional filtering. Returns paginated list of imports with importId, type, uploadedDate, fileName, and status information.";
95
- readonly readOnly: true;
96
- readonly inputSchema: {
97
- storeCode: z.ZodOptional<z.ZodString>;
98
- page: z.ZodOptional<z.ZodNumber>;
99
- perPage: z.ZodOptional<z.ZodNumber>;
100
- importId: z.ZodOptional<z.ZodString>;
101
- type: z.ZodOptional<z.ZodEnum<["member", "groupValue", "segmentMembers", "unitTransferAdding", "unitTransferSpending", "transaction", "campaignCode", "rewardCoupon"]>>;
102
- };
103
- readonly handler: typeof importList;
104
- }, {
105
- readonly name: "ol_import_get";
106
- readonly title: "Get Import Details";
107
- readonly description: "Get import details and individual item statuses. Returns paginated list of import items with their success/failure status and error messages.";
108
- readonly readOnly: true;
109
- readonly inputSchema: {
110
- storeCode: z.ZodOptional<z.ZodString>;
111
- importId: z.ZodString;
112
- page: z.ZodOptional<z.ZodNumber>;
113
- perPage: z.ZodOptional<z.ZodNumber>;
114
- };
115
- readonly handler: typeof importGet;
116
- }];