medusa-plugin-automation 0.1.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 (59) hide show
  1. package/.medusa/server/medusa-config.d.ts +1 -0
  2. package/.medusa/server/medusa-config.js +23 -0
  3. package/.medusa/server/src/admin/index.js +9920 -0
  4. package/.medusa/server/src/admin/index.mjs +9918 -0
  5. package/.medusa/server/src/admin/lib/medusa-events.d.ts +16 -0
  6. package/.medusa/server/src/admin/lib/medusa-events.js +131 -0
  7. package/.medusa/server/src/api/admin/automations/[id]/actions/[actionId]/deliveries/retry/route.d.ts +3 -0
  8. package/.medusa/server/src/api/admin/automations/[id]/actions/[actionId]/deliveries/retry/route.js +56 -0
  9. package/.medusa/server/src/api/admin/automations/[id]/actions/[actionId]/deliveries/route.d.ts +2 -0
  10. package/.medusa/server/src/api/admin/automations/[id]/actions/[actionId]/deliveries/route.js +26 -0
  11. package/.medusa/server/src/api/admin/automations/[id]/actions/[actionId]/query/route.d.ts +5 -0
  12. package/.medusa/server/src/api/admin/automations/[id]/actions/[actionId]/query/route.js +46 -0
  13. package/.medusa/server/src/api/admin/automations/[id]/actions/[actionId]/route.d.ts +5 -0
  14. package/.medusa/server/src/api/admin/automations/[id]/actions/[actionId]/route.js +37 -0
  15. package/.medusa/server/src/api/admin/automations/[id]/actions/route.d.ts +5 -0
  16. package/.medusa/server/src/api/admin/automations/[id]/actions/route.js +44 -0
  17. package/.medusa/server/src/api/admin/automations/[id]/receipts/route.d.ts +2 -0
  18. package/.medusa/server/src/api/admin/automations/[id]/receipts/route.js +17 -0
  19. package/.medusa/server/src/api/admin/automations/[id]/route.d.ts +5 -0
  20. package/.medusa/server/src/api/admin/automations/[id]/route.js +37 -0
  21. package/.medusa/server/src/api/admin/automations/route.d.ts +5 -0
  22. package/.medusa/server/src/api/admin/automations/route.js +36 -0
  23. package/.medusa/server/src/api/admin/automations/secrets/[id]/route.d.ts +2 -0
  24. package/.medusa/server/src/api/admin/automations/secrets/[id]/route.js +13 -0
  25. package/.medusa/server/src/api/admin/automations/secrets/route.d.ts +4 -0
  26. package/.medusa/server/src/api/admin/automations/secrets/route.js +38 -0
  27. package/.medusa/server/src/api/middlewares.d.ts +2 -0
  28. package/.medusa/server/src/api/middlewares.js +169 -0
  29. package/.medusa/server/src/api/validators.d.ts +470 -0
  30. package/.medusa/server/src/api/validators.js +123 -0
  31. package/.medusa/server/src/api/webhooks/[id]/route.d.ts +2 -0
  32. package/.medusa/server/src/api/webhooks/[id]/route.js +78 -0
  33. package/.medusa/server/src/lib/dispatch.d.ts +43 -0
  34. package/.medusa/server/src/lib/dispatch.js +400 -0
  35. package/.medusa/server/src/modules/automation/index.d.ts +92 -0
  36. package/.medusa/server/src/modules/automation/index.js +25 -0
  37. package/.medusa/server/src/modules/automation/migrations/Migration20260409171930.d.ts +5 -0
  38. package/.medusa/server/src/modules/automation/migrations/Migration20260409171930.js +47 -0
  39. package/.medusa/server/src/modules/automation/models/automation-action.d.ts +75 -0
  40. package/.medusa/server/src/modules/automation/models/automation-action.js +41 -0
  41. package/.medusa/server/src/modules/automation/models/automation-delivery.d.ts +57 -0
  42. package/.medusa/server/src/modules/automation/models/automation-delivery.js +23 -0
  43. package/.medusa/server/src/modules/automation/models/automation-query.d.ts +52 -0
  44. package/.medusa/server/src/modules/automation/models/automation-query.js +14 -0
  45. package/.medusa/server/src/modules/automation/models/automation-receipt.d.ts +53 -0
  46. package/.medusa/server/src/modules/automation/models/automation-receipt.js +29 -0
  47. package/.medusa/server/src/modules/automation/models/automation-secret.d.ts +5 -0
  48. package/.medusa/server/src/modules/automation/models/automation-secret.js +10 -0
  49. package/.medusa/server/src/modules/automation/models/automation-trigger.d.ts +56 -0
  50. package/.medusa/server/src/modules/automation/models/automation-trigger.js +27 -0
  51. package/.medusa/server/src/modules/automation/service.d.ts +274 -0
  52. package/.medusa/server/src/modules/automation/service.js +21 -0
  53. package/.medusa/server/src/modules/automation/types.d.ts +13 -0
  54. package/.medusa/server/src/modules/automation/types.js +3 -0
  55. package/.medusa/server/src/subscribers/automation-dispatcher.d.ts +3 -0
  56. package/.medusa/server/src/subscribers/automation-dispatcher.js +51 -0
  57. package/LICENSE.md +73 -0
  58. package/README.md +53 -0
  59. package/package.json +91 -0
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const automation_1 = require("../../../modules/automation");
6
+ const automation_trigger_1 = require("../../../modules/automation/models/automation-trigger");
7
+ const automation_receipt_1 = require("../../../modules/automation/models/automation-receipt");
8
+ const dispatch_1 = require("../../../lib/dispatch");
9
+ const POST = async (req, res) => {
10
+ const automationService = req.scope.resolve(automation_1.AUTOMATION_MODULE);
11
+ const { id } = req.params;
12
+ // Enforce configurable payload size limit before doing any DB work
13
+ const maxBytes = (0, dispatch_1.parseMaxBytes)(automationService.getOptions().maxPayloadSize);
14
+ const bodyBytes = Buffer.byteLength(JSON.stringify(req.body ?? ''));
15
+ if (bodyBytes > maxBytes) {
16
+ return res.status(413).json({ error: 'Payload too large' });
17
+ }
18
+ const [trigger] = await automationService.listAutomationTriggers({ id }, { take: 1 });
19
+ if (!trigger ||
20
+ trigger.trigger_type !== automation_trigger_1.AutomationTriggerType.INCOMING_WEBHOOK ||
21
+ !trigger.is_active) {
22
+ return res.status(404).json({ error: 'Webhook not found or not active' });
23
+ }
24
+ // Verify HMAC-SHA256 signature if a signing key is configured
25
+ if (trigger.trigger_signing_key) {
26
+ const signature = req.headers['x-webhook-signature'];
27
+ if (!signature) {
28
+ return res.status(401).json({ error: 'Missing x-webhook-signature header' });
29
+ }
30
+ const expected = (0, crypto_1.createHmac)('sha256', trigger.trigger_signing_key)
31
+ .update(JSON.stringify(req.body))
32
+ .digest('hex');
33
+ try {
34
+ const sigBuffer = Buffer.from(signature);
35
+ const expectedBuffer = Buffer.from(expected);
36
+ if (sigBuffer.length !== expectedBuffer.length ||
37
+ !(0, crypto_1.timingSafeEqual)(sigBuffer, expectedBuffer)) {
38
+ return res.status(401).json({ error: 'Invalid signature' });
39
+ }
40
+ }
41
+ catch {
42
+ return res.status(401).json({ error: 'Invalid signature' });
43
+ }
44
+ }
45
+ const incomingPayload = req.body;
46
+ // Log the receipt if enabled for this trigger
47
+ if (trigger.log_incoming) {
48
+ const requestIp = req.headers['x-forwarded-for']?.split(',')[0]?.trim() ??
49
+ req.socket?.remoteAddress ??
50
+ null;
51
+ await automationService.createAutomationReceipts({
52
+ trigger_id: trigger.id,
53
+ request_ip: requestIp,
54
+ payload: (0, automation_receipt_1.redactPayload)(incomingPayload)
55
+ });
56
+ }
57
+ // Load all active actions for this trigger
58
+ const [actions] = await automationService.listAndCountAutomationActions({
59
+ trigger_id: trigger.id,
60
+ is_active: true
61
+ });
62
+ if (actions.length === 0) {
63
+ return res.status(200).json({ received: true, actions_executed: 0 });
64
+ }
65
+ // Incoming webhooks don't sign outgoing payloads and don't do query augmentation
66
+ const opts = {
67
+ signOutgoing: false,
68
+ maxWorkflowIterations: automationService.getOptions().maxWorkflowIterations
69
+ };
70
+ const results = await Promise.allSettled(actions.map(action => (0, dispatch_1.dispatchAndRecord)(req.scope, action, incomingPayload, `incoming_webhook:${action.name}`, opts)));
71
+ const anyFailed = results.some(r => r.status === 'rejected' || (r.status === 'fulfilled' && r.value.status === 'failed'));
72
+ res.status(anyFailed ? 207 : 200).json({
73
+ received: true,
74
+ actions_executed: actions.length
75
+ });
76
+ };
77
+ exports.POST = POST;
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3dlYmhvb2tzL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsbUNBQW9EO0FBQ3BELDREQUErRDtBQUUvRCw4RkFBNkY7QUFDN0YsOEZBQXFGO0FBQ3JGLG9EQUF3RTtBQUVqRSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDckUsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyw4QkFBaUIsQ0FBc0IsQ0FBQTtJQUNuRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixtRUFBbUU7SUFDbkUsTUFBTSxRQUFRLEdBQUcsSUFBQSx3QkFBYSxFQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQzdFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDbkUsSUFBSSxTQUFTLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUVyRixJQUNDLENBQUMsT0FBTztRQUNSLE9BQU8sQ0FBQyxZQUFZLEtBQUssMENBQXFCLENBQUMsZ0JBQWdCO1FBQy9ELENB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
@@ -0,0 +1,43 @@
1
+ import { MedusaContainer } from '@medusajs/framework/types';
2
+ import { FieldMapping, StaticValue } from '../modules/automation/models/automation-action';
3
+ import { AutomationDeliveryStatus } from '../modules/automation/models/automation-delivery';
4
+ import { AutomationService } from '../modules/automation/service';
5
+ export declare function getNestedValue(obj: Record<string, unknown>, path: string): unknown;
6
+ export declare function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void;
7
+ export declare function applyMappings(source: Record<string, unknown>, mappings: FieldMapping[]): Record<string, unknown>;
8
+ export declare function applyMappingsWithCoercion(source: Record<string, unknown>, mappings: FieldMapping[]): Record<string, unknown>;
9
+ export declare function applyStaticValues(base: Record<string, unknown>, statics: StaticValue[]): Record<string, unknown>;
10
+ export declare function flattenForQueryParams(obj: Record<string, unknown>, prefix?: string): Record<string, string>;
11
+ export declare function resolveEventRefs(filters: unknown, eventData: Record<string, unknown>): Record<string, unknown>;
12
+ type FanoutMapping = {
13
+ arrayPath: string;
14
+ itemPath: string;
15
+ targetKey: string;
16
+ };
17
+ export declare function parseFanoutMappings(mappings: FieldMapping[]): FanoutMapping[];
18
+ export declare function buildIterationPayload(item: unknown, fanout: FanoutMapping[], direct: FieldMapping[], sourceData: Record<string, unknown>): Record<string, unknown>;
19
+ export declare function parseMaxBytes(value: string | number | undefined): number;
20
+ export declare function augmentWithQuery(container: MedusaContainer, automationService: AutomationService, actionId: string, eventData: Record<string, unknown>): Promise<Record<string, unknown>>;
21
+ export type DispatchResult = {
22
+ status: AutomationDeliveryStatus;
23
+ responseStatus: number | null;
24
+ responseBody: string | null;
25
+ errorMessage: string | null;
26
+ };
27
+ export type DispatchOptions = {
28
+ /** Whether to sign outgoing webhooks (subscriber: yes, incoming webhook handler: no) */
29
+ signOutgoing?: boolean;
30
+ /** Max workflow fan-out iterations (from plugin options) */
31
+ maxWorkflowIterations?: number;
32
+ };
33
+ /**
34
+ * Execute a single action's pipeline: mapping → HTTP/workflow → result.
35
+ * Does NOT record a delivery — the caller is responsible for that.
36
+ */
37
+ export declare function dispatchAction(container: MedusaContainer, action: any, sourceData: Record<string, unknown>, opts?: DispatchOptions): Promise<DispatchResult>;
38
+ /**
39
+ * Execute an action and record the delivery.
40
+ * This is the main entry point used by the subscriber and webhook handler.
41
+ */
42
+ export declare function dispatchAndRecord(container: MedusaContainer, action: any, sourceData: Record<string, unknown>, eventName: string, opts?: DispatchOptions): Promise<DispatchResult>;
43
+ export {};
@@ -0,0 +1,400 @@
1
+ "use strict";
2
+ // Shared action execution pipeline — used by the subscriber, webhook handler,
3
+ // and MCP tools. Each caller resolves the action + payload, this module
4
+ // handles mapping, HTTP calls / workflow execution, signing, and delivery recording.
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getNestedValue = getNestedValue;
40
+ exports.setNestedValue = setNestedValue;
41
+ exports.applyMappings = applyMappings;
42
+ exports.applyMappingsWithCoercion = applyMappingsWithCoercion;
43
+ exports.applyStaticValues = applyStaticValues;
44
+ exports.flattenForQueryParams = flattenForQueryParams;
45
+ exports.resolveEventRefs = resolveEventRefs;
46
+ exports.parseFanoutMappings = parseFanoutMappings;
47
+ exports.buildIterationPayload = buildIterationPayload;
48
+ exports.parseMaxBytes = parseMaxBytes;
49
+ exports.augmentWithQuery = augmentWithQuery;
50
+ exports.dispatchAction = dispatchAction;
51
+ exports.dispatchAndRecord = dispatchAndRecord;
52
+ const crypto_1 = require("crypto");
53
+ const coreFlows = __importStar(require("@medusajs/medusa/core-flows"));
54
+ const utils_1 = require("@medusajs/framework/utils");
55
+ const automation_action_1 = require("../modules/automation/models/automation-action");
56
+ const automation_delivery_1 = require("../modules/automation/models/automation-delivery");
57
+ const automation_1 = require("../modules/automation");
58
+ // ─── Mapping helpers ──────────────────────────────────────────────────────────
59
+ function getNestedValue(obj, path) {
60
+ return path.split('.').reduce((curr, key) => {
61
+ if (curr !== null && typeof curr === 'object') {
62
+ return curr[key];
63
+ }
64
+ return undefined;
65
+ }, obj);
66
+ }
67
+ function setNestedValue(obj, path, value) {
68
+ const keys = path.split('.');
69
+ let curr = obj;
70
+ for (let i = 0; i < keys.length - 1; i++) {
71
+ if (!(keys[i] in curr) || typeof curr[keys[i]] !== 'object') {
72
+ curr[keys[i]] = {};
73
+ }
74
+ curr = curr[keys[i]];
75
+ }
76
+ curr[keys[keys.length - 1]] = value;
77
+ }
78
+ function applyMappings(source, mappings) {
79
+ if (!mappings || mappings.length === 0)
80
+ return source;
81
+ const result = {};
82
+ for (const mapping of mappings) {
83
+ const value = getNestedValue(source, mapping.source_path);
84
+ if (value !== undefined)
85
+ setNestedValue(result, mapping.target_key, value);
86
+ }
87
+ return result;
88
+ }
89
+ function applyMappingsWithCoercion(source, mappings) {
90
+ if (!mappings || mappings.length === 0)
91
+ return source;
92
+ const result = {};
93
+ for (const mapping of mappings) {
94
+ let value = getNestedValue(source, mapping.source_path);
95
+ if (value === undefined)
96
+ continue;
97
+ let targetKey = mapping.target_key;
98
+ if (targetKey.endsWith('[]')) {
99
+ targetKey = targetKey.slice(0, -2);
100
+ if (!Array.isArray(value))
101
+ value = [value];
102
+ }
103
+ setNestedValue(result, targetKey, value);
104
+ }
105
+ return result;
106
+ }
107
+ function applyStaticValues(base, statics) {
108
+ if (!statics || statics.length === 0)
109
+ return base;
110
+ const result = { ...base };
111
+ for (const s of statics) {
112
+ if (s.key)
113
+ setNestedValue(result, s.key, s.value);
114
+ }
115
+ return result;
116
+ }
117
+ function flattenForQueryParams(obj, prefix = '') {
118
+ const result = {};
119
+ for (const [key, value] of Object.entries(obj)) {
120
+ const fullKey = prefix ? `${prefix}.${key}` : key;
121
+ if (value !== null &&
122
+ value !== undefined &&
123
+ typeof value === 'object' &&
124
+ !Array.isArray(value)) {
125
+ Object.assign(result, flattenForQueryParams(value, fullKey));
126
+ }
127
+ else if (value !== null && value !== undefined) {
128
+ result[fullKey] = String(value);
129
+ }
130
+ }
131
+ return result;
132
+ }
133
+ // ─── Query helpers ────────────────────────────────────────────────────────────
134
+ function resolveEventRefs(filters, eventData) {
135
+ function resolve(val) {
136
+ if (typeof val === 'string' && val.startsWith('$event.')) {
137
+ return getNestedValue(eventData, val.slice(7)) ?? val;
138
+ }
139
+ if (Array.isArray(val))
140
+ return val.map(resolve);
141
+ if (val !== null && typeof val === 'object') {
142
+ return Object.fromEntries(Object.entries(val).map(([k, v]) => [k, resolve(v)]));
143
+ }
144
+ return val;
145
+ }
146
+ if (!filters || typeof filters !== 'object')
147
+ return {};
148
+ return resolve(filters);
149
+ }
150
+ function parseFanoutMappings(mappings) {
151
+ const result = [];
152
+ for (const m of mappings) {
153
+ const match = m.source_path.match(/^(.+?)\[\]\.?(.*)$/);
154
+ if (match) {
155
+ result.push({ arrayPath: match[1], itemPath: match[2], targetKey: m.target_key });
156
+ }
157
+ }
158
+ return result;
159
+ }
160
+ function buildIterationPayload(item, fanout, direct, sourceData) {
161
+ const result = {};
162
+ for (const m of direct) {
163
+ let value = getNestedValue(sourceData, m.source_path);
164
+ if (value === undefined)
165
+ continue;
166
+ let targetKey = m.target_key;
167
+ if (targetKey.endsWith('[]')) {
168
+ targetKey = targetKey.slice(0, -2);
169
+ if (!Array.isArray(value))
170
+ value = [value];
171
+ }
172
+ setNestedValue(result, targetKey, value);
173
+ }
174
+ for (const f of fanout) {
175
+ let value = f.itemPath ? getNestedValue(item, f.itemPath) : item;
176
+ if (value === undefined)
177
+ continue;
178
+ let targetKey = f.targetKey;
179
+ if (targetKey.endsWith('[]')) {
180
+ targetKey = targetKey.slice(0, -2);
181
+ if (!Array.isArray(value))
182
+ value = [value];
183
+ }
184
+ setNestedValue(result, targetKey, value);
185
+ }
186
+ return result;
187
+ }
188
+ // ─── Payload size helper ──────────────────────────────────────────────────────
189
+ function parseMaxBytes(value) {
190
+ if (value === undefined)
191
+ return 100 * 1024;
192
+ if (typeof value === 'number')
193
+ return value;
194
+ const match = value.trim().match(/^(\d+(?:\.\d+)?)\s*(kb|mb|gb|b)?$/i);
195
+ if (!match)
196
+ return 100 * 1024;
197
+ const num = parseFloat(match[1]);
198
+ const unit = (match[2] ?? 'b').toLowerCase();
199
+ const multipliers = { b: 1, kb: 1024, mb: 1024 ** 2, gb: 1024 ** 3 };
200
+ return Math.floor(num * (multipliers[unit] ?? 1));
201
+ }
202
+ // ─── Query augmentation ───────────────────────────────────────────────────────
203
+ async function augmentWithQuery(container, automationService, actionId, eventData) {
204
+ const sourceData = { ...eventData };
205
+ const queryConfigs = await automationService.listAutomationQueries({ action_id: actionId }, { take: 1 });
206
+ const queryConfig = queryConfigs[0] ?? null;
207
+ if (queryConfig) {
208
+ try {
209
+ const medusaQuery = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
210
+ const resolvedFilters = resolveEventRefs(queryConfig.filters, eventData);
211
+ const { data } = await medusaQuery.graph({
212
+ entity: queryConfig.entity_name,
213
+ fields: queryConfig.fields ?? ['*'],
214
+ filters: resolvedFilters,
215
+ pagination: { take: Math.min(queryConfig.limit ?? 10, 100) }
216
+ });
217
+ sourceData[queryConfig.entity_name] = data[0] ?? null;
218
+ sourceData[`${queryConfig.entity_name}_list`] = data;
219
+ }
220
+ catch (err) {
221
+ sourceData._query_error = err instanceof Error ? err.message : String(err);
222
+ }
223
+ }
224
+ return sourceData;
225
+ }
226
+ /**
227
+ * Execute a single action's pipeline: mapping → HTTP/workflow → result.
228
+ * Does NOT record a delivery — the caller is responsible for that.
229
+ */
230
+ async function dispatchAction(container, action, sourceData, opts = {}) {
231
+ const automationService = container.resolve(automation_1.AUTOMATION_MODULE);
232
+ const mappings = Array.isArray(action.field_mappings)
233
+ ? action.field_mappings
234
+ : [];
235
+ const statics = Array.isArray(action.static_values)
236
+ ? action.static_values
237
+ : [];
238
+ let status = automation_delivery_1.AutomationDeliveryStatus.PENDING;
239
+ let responseStatus = null;
240
+ let responseBody = null;
241
+ let errorMessage = null;
242
+ try {
243
+ if (action.action_type === automation_action_1.AutomationActionType.OUTGOING_WEBHOOK) {
244
+ if (!action.target_url)
245
+ throw new Error('No target URL configured');
246
+ const dynamicPayload = applyMappings(sourceData, mappings);
247
+ const mappedPayload = applyStaticValues(dynamicPayload, statics);
248
+ const bodyStr = JSON.stringify(mappedPayload);
249
+ const headers = { 'Content-Type': 'application/json' };
250
+ if (Array.isArray(action.target_headers)) {
251
+ for (const h of action.target_headers) {
252
+ if (h.key)
253
+ headers[h.key] = h.value;
254
+ }
255
+ }
256
+ if (opts.signOutgoing && action.signing_secret_id) {
257
+ const [secret] = await automationService.listAutomationSecrets({ id: action.signing_secret_id }, { take: 1 });
258
+ if (secret?.secret) {
259
+ const sig = (0, crypto_1.createHmac)('sha256', secret.secret)
260
+ .update(bodyStr)
261
+ .digest('hex');
262
+ headers['x-webhook-signature'] = sig;
263
+ }
264
+ }
265
+ const controller = new AbortController();
266
+ const timeout = setTimeout(() => controller.abort(), 10000);
267
+ const response = await fetch(action.target_url, {
268
+ method: 'POST',
269
+ headers,
270
+ body: bodyStr,
271
+ signal: controller.signal
272
+ });
273
+ clearTimeout(timeout);
274
+ responseStatus = response.status;
275
+ responseBody = await response.text().catch(() => null);
276
+ status = response.ok
277
+ ? automation_delivery_1.AutomationDeliveryStatus.SUCCESS
278
+ : automation_delivery_1.AutomationDeliveryStatus.FAILED;
279
+ if (!response.ok) {
280
+ errorMessage = `HTTP ${response.status}: ${responseBody?.slice(0, 200) ?? 'no body'}`;
281
+ }
282
+ }
283
+ else if (action.action_type === 'outgoing_request') {
284
+ if (!action.target_url)
285
+ throw new Error('No target URL configured');
286
+ const method = action.request_method || 'POST';
287
+ const dynamicPayload = applyMappings(sourceData, mappings);
288
+ const mappedPayload = applyStaticValues(dynamicPayload, statics);
289
+ const headers = {};
290
+ if (Array.isArray(action.target_headers)) {
291
+ for (const h of action.target_headers) {
292
+ if (h.key)
293
+ headers[h.key] = h.value;
294
+ }
295
+ }
296
+ let requestUrl = action.target_url;
297
+ let requestBody;
298
+ if (method === 'GET' || method === 'DELETE') {
299
+ const flat = flattenForQueryParams(mappedPayload);
300
+ const qs = new URLSearchParams(flat).toString();
301
+ if (qs)
302
+ requestUrl = `${action.target_url}?${qs}`;
303
+ }
304
+ else {
305
+ headers['Content-Type'] = 'application/json';
306
+ requestBody = JSON.stringify(mappedPayload);
307
+ }
308
+ const controller = new AbortController();
309
+ const timeout = setTimeout(() => controller.abort(), 10000);
310
+ const response = await fetch(requestUrl, {
311
+ method,
312
+ headers,
313
+ body: requestBody,
314
+ signal: controller.signal
315
+ });
316
+ clearTimeout(timeout);
317
+ responseStatus = response.status;
318
+ responseBody = await response.text().catch(() => null);
319
+ status = response.ok
320
+ ? automation_delivery_1.AutomationDeliveryStatus.SUCCESS
321
+ : automation_delivery_1.AutomationDeliveryStatus.FAILED;
322
+ if (!response.ok) {
323
+ errorMessage = `HTTP ${response.status}: ${responseBody?.slice(0, 200) ?? 'no body'}`;
324
+ }
325
+ }
326
+ else if (action.action_type === automation_action_1.AutomationActionType.MEDUSA_WORKFLOW) {
327
+ if (!action.medusa_workflow)
328
+ throw new Error('No workflow configured');
329
+ const workflowFn = coreFlows[action.medusa_workflow];
330
+ if (typeof workflowFn !== 'function') {
331
+ throw new Error(`Unknown workflow: "${action.medusa_workflow}"`);
332
+ }
333
+ const run = workflowFn(container).run;
334
+ const fanoutMappings = parseFanoutMappings(mappings);
335
+ if (fanoutMappings.length > 0) {
336
+ const arrayPath = fanoutMappings[0].arrayPath;
337
+ const raw = getNestedValue(sourceData, arrayPath);
338
+ const items = Array.isArray(raw)
339
+ ? raw
340
+ : raw !== undefined && raw !== null
341
+ ? [raw]
342
+ : [];
343
+ const maxIter = opts.maxWorkflowIterations;
344
+ const cap = maxIter === 0 ? undefined : (maxIter ?? 50);
345
+ const cappedItems = cap !== undefined ? items.slice(0, cap) : items;
346
+ const directMappings = mappings.filter(m => !m.source_path.includes('[]'));
347
+ const iterErrors = [];
348
+ for (const item of cappedItems) {
349
+ const payload = buildIterationPayload(item, fanoutMappings, directMappings, sourceData);
350
+ const finalPayload = applyStaticValues(payload, statics);
351
+ try {
352
+ await run({ input: finalPayload });
353
+ }
354
+ catch (err) {
355
+ iterErrors.push(err instanceof Error ? err.message : String(err));
356
+ }
357
+ }
358
+ if (iterErrors.length === 0) {
359
+ status = automation_delivery_1.AutomationDeliveryStatus.SUCCESS;
360
+ }
361
+ else {
362
+ status = automation_delivery_1.AutomationDeliveryStatus.FAILED;
363
+ errorMessage = `${iterErrors.length}/${cappedItems.length} iterations failed: ${iterErrors.slice(0, 3).join('; ')}`;
364
+ }
365
+ }
366
+ else {
367
+ const mappedPayload = applyMappingsWithCoercion(sourceData, mappings);
368
+ const finalPayload = applyStaticValues(mappedPayload, statics);
369
+ await run({ input: finalPayload });
370
+ status = automation_delivery_1.AutomationDeliveryStatus.SUCCESS;
371
+ }
372
+ }
373
+ }
374
+ catch (err) {
375
+ status = automation_delivery_1.AutomationDeliveryStatus.FAILED;
376
+ errorMessage = err instanceof Error ? err.message : String(err);
377
+ }
378
+ return { status, responseStatus, responseBody, errorMessage };
379
+ }
380
+ // ─── High-level: dispatch + record delivery ───────────────────────────────────
381
+ /**
382
+ * Execute an action and record the delivery.
383
+ * This is the main entry point used by the subscriber and webhook handler.
384
+ */
385
+ async function dispatchAndRecord(container, action, sourceData, eventName, opts = {}) {
386
+ const automationService = container.resolve(automation_1.AUTOMATION_MODULE);
387
+ const result = await dispatchAction(container, action, sourceData, opts);
388
+ await automationService.createAutomationDeliveries({
389
+ action_id: action.id,
390
+ event_name: eventName,
391
+ request_payload: sourceData,
392
+ response_status: result.responseStatus,
393
+ response_body: result.responseBody,
394
+ status: result.status,
395
+ attempts: 1,
396
+ error_message: result.errorMessage
397
+ });
398
+ return result;
399
+ }
400
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Rpc3BhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw4RUFBOEU7QUFDOUUseUVBQXlFO0FBQ3pFLHFGQUFxRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhckYsd0NBT0M7QUFFRCx3Q0FVQztBQUVELHNDQVdDO0FBRUQsOERBaUJDO0FBRUQsOENBVUM7QUFFRCxzREFnQkM7QUFJRCw0Q0FrQkM7QUFVRCxrREFTQztBQUVELHNEQStCQztBQUlELHNDQVNDO0FBSUQsNENBbUNDO0FBc0JELHdDQStLQztBQVFELDhDQXNCQztBQTdiRCxtQ0FBbUM7QUFDbkMsdUVBQXdEO0FBRXhELHFEQUFxRTtBQUNyRSxzRkFBZ0g7QUFDaEgsMEZBQTJGO0FBRTNGLHNEQUF5RDtBQUV6RCxpRkFBaUY7QUFFakYsU0FBZ0IsY0FBYyxDQUFDLEdBQTRCLEVBQUUsSUFBWTtJQUN4RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBYSxFQUFFLEdBQVcsRUFBRSxFQUFFO1FBQzVELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxPQUFRLElBQWdDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDOUMsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFBO0lBQ2pCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtBQUNSLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsR0FBNEIsRUFBRSxJQUFZLEVBQUUsS0FBYztJQUN4RixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzVCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQTtJQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENB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
@@ -0,0 +1,92 @@
1
+ import { AutomationService } from './service';
2
+ export declare const AUTOMATION_MODULE = "automation";
3
+ declare const _default: import("@medusajs/types").ModuleExports<typeof AutomationService> & {
4
+ linkable: {
5
+ readonly automationTrigger: {
6
+ id: {
7
+ serviceName: "automation";
8
+ field: "automationTrigger";
9
+ linkable: "automation_trigger_id";
10
+ primaryKey: "id";
11
+ };
12
+ toJSON: () => {
13
+ serviceName: "automation";
14
+ field: "automationTrigger";
15
+ linkable: "automation_trigger_id";
16
+ primaryKey: "id";
17
+ };
18
+ };
19
+ readonly automationAction: {
20
+ id: {
21
+ serviceName: "automation";
22
+ field: "automationAction";
23
+ linkable: "automation_action_id";
24
+ primaryKey: "id";
25
+ };
26
+ toJSON: () => {
27
+ serviceName: "automation";
28
+ field: "automationAction";
29
+ linkable: "automation_action_id";
30
+ primaryKey: "id";
31
+ };
32
+ };
33
+ readonly automationDelivery: {
34
+ id: {
35
+ serviceName: "automation";
36
+ field: "automationDelivery";
37
+ linkable: "automation_delivery_id";
38
+ primaryKey: "id";
39
+ };
40
+ toJSON: () => {
41
+ serviceName: "automation";
42
+ field: "automationDelivery";
43
+ linkable: "automation_delivery_id";
44
+ primaryKey: "id";
45
+ };
46
+ };
47
+ readonly automationReceipt: {
48
+ id: {
49
+ serviceName: "automation";
50
+ field: "automationReceipt";
51
+ linkable: "automation_receipt_id";
52
+ primaryKey: "id";
53
+ };
54
+ toJSON: () => {
55
+ serviceName: "automation";
56
+ field: "automationReceipt";
57
+ linkable: "automation_receipt_id";
58
+ primaryKey: "id";
59
+ };
60
+ };
61
+ readonly automationQuery: {
62
+ id: {
63
+ serviceName: "automation";
64
+ field: "automationQuery";
65
+ linkable: "automation_query_id";
66
+ primaryKey: "id";
67
+ };
68
+ toJSON: () => {
69
+ serviceName: "automation";
70
+ field: "automationQuery";
71
+ linkable: "automation_query_id";
72
+ primaryKey: "id";
73
+ };
74
+ };
75
+ readonly automationSecret: {
76
+ id: {
77
+ serviceName: "automation";
78
+ field: "automationSecret";
79
+ linkable: "automation_secret_id";
80
+ primaryKey: "id";
81
+ };
82
+ toJSON: () => {
83
+ serviceName: "automation";
84
+ field: "automationSecret";
85
+ linkable: "automation_secret_id";
86
+ primaryKey: "id";
87
+ };
88
+ };
89
+ };
90
+ };
91
+ export default _default;
92
+ export * from './service';