medusa-plugin-veeqo 0.2.0 → 0.3.1

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 (29) hide show
  1. package/.medusa/server/medusa-config.js +3 -3
  2. package/.medusa/server/src/api/admin/veeqo/orders/[orderId]/replacements/sync/route.d.ts +2 -0
  3. package/.medusa/server/src/api/admin/veeqo/orders/[orderId]/replacements/sync/route.js +45 -0
  4. package/.medusa/server/src/api/admin/veeqo/orders/[orderId]/sync/route.js +5 -2
  5. package/.medusa/server/src/api/admin/veeqo/sync/route.d.ts +2 -0
  6. package/.medusa/server/src/api/admin/veeqo/sync/route.js +39 -0
  7. package/.medusa/server/src/modules/veeqo/index.d.ts +1 -0
  8. package/.medusa/server/src/modules/veeqo/index.js +4 -2
  9. package/.medusa/server/src/modules/veeqo/migrations/Migration20260508120000.d.ts +5 -0
  10. package/.medusa/server/src/modules/veeqo/migrations/Migration20260508120000.js +34 -0
  11. package/.medusa/server/src/modules/veeqo/models/veeqo-customer.d.ts +7 -3
  12. package/.medusa/server/src/modules/veeqo/models/veeqo-order.d.ts +12 -3
  13. package/.medusa/server/src/modules/veeqo/models/veeqo-order.js +24 -6
  14. package/.medusa/server/src/modules/veeqo/models/veeqo-shipment.d.ts +7 -3
  15. package/.medusa/server/src/modules/veeqo/service.d.ts +60 -10
  16. package/.medusa/server/src/modules/veeqo/service.js +53 -20
  17. package/.medusa/server/src/modules/veeqo/types.d.ts +3 -4
  18. package/.medusa/server/src/subscribers/claim-dispatcher.d.ts +6 -0
  19. package/.medusa/server/src/subscribers/claim-dispatcher.js +19 -0
  20. package/.medusa/server/src/subscribers/exchange-dispatcher.d.ts +6 -0
  21. package/.medusa/server/src/subscribers/exchange-dispatcher.js +19 -0
  22. package/.medusa/server/src/subscribers/{veeqo-dispatcher.d.ts → place-order-dispatcher.d.ts} +1 -1
  23. package/.medusa/server/src/subscribers/place-order-dispatcher.js +12 -0
  24. package/.medusa/server/src/workflows/order.d.ts +169 -15
  25. package/.medusa/server/src/workflows/order.js +468 -76
  26. package/.medusa/server/src/workflows/shipments.js +5 -1
  27. package/README.md +39 -0
  28. package/package.json +13 -13
  29. package/.medusa/server/src/subscribers/veeqo-dispatcher.js +0 -12
@@ -121,6 +121,32 @@ class VeeqoService extends (0, utils_1.MedusaService)({
121
121
  throw new utils_2.MedusaError(utils_2.MedusaError.Types.NOT_FOUND, `Veeqo delivery method with veeqo_delivery_method_id ${veeqoDeliveryMethodId} not found`);
122
122
  });
123
123
  }
124
+ /**
125
+ * Searches Veeqo for an order whose `number` field exactly matches the given value.
126
+ *
127
+ * Veeqo's list-orders endpoint only supports a free-text `query` parameter, so we
128
+ * search and then filter client-side for an exact `number` match. Used by
129
+ * createVeeqoOrderStep to recover from the API-succeeded-DB-failed window —
130
+ * if a Veeqo order already exists for the number we're about to create, we
131
+ * adopt it instead of creating a duplicate.
132
+ *
133
+ * Returns the matching order or null if not found.
134
+ */
135
+ async findOrderByNumber(number) {
136
+ const response = await this.fetch({
137
+ path: `/orders?query=${encodeURIComponent(number)}&page_size=20`,
138
+ method: 'GET'
139
+ });
140
+ if (!response.ok) {
141
+ this.logger_.warn(`veeqo findOrderByNumber: HTTP ${response.status} for query "${number}"`);
142
+ return null;
143
+ }
144
+ const body = await response.json().catch(() => null);
145
+ if (!Array.isArray(body))
146
+ return null;
147
+ const exact = body.find(o => o?.number === number);
148
+ return exact ?? null;
149
+ }
124
150
  /**
125
151
  * Fetches an order from Veeqo by Veeqo Order ID. Returns the Veeqo order or null if not found.
126
152
  */
@@ -252,28 +278,30 @@ class VeeqoService extends (0, utils_1.MedusaService)({
252
278
  return veeqoDeliveryMethod;
253
279
  }
254
280
  /**
255
- * Adds an order to Veeqo and links it to the corresponding order in Medusa. First argument is the Medusa order ID, second argument is the input data to create the order in Veeqo. Returns the created Veeqo order.
281
+ * Creates an order in Veeqo via the Veeqo API and returns the response.
282
+ *
283
+ * Persistence of the local VeeqoOrder DB row is the caller's responsibility (see
284
+ * createVeeqoOrderStep in workflows/order.ts, which uses the placeholder-row pattern).
285
+ * This separation lets the workflow handle the (source_type, source_id) discriminator,
286
+ * idempotency, and failure tracking, while this method stays focused on the API call.
256
287
  */
257
- async addOrder(orderId, orderInput) {
258
- const veeqoOrder = (await this.fetch({
288
+ async addOrder(input) {
289
+ const response = await this.fetch({
259
290
  path: `/orders`,
260
291
  method: 'POST',
261
- body: { order: orderInput }
262
- })
263
- .then(response => response.json())
264
- .catch(err => this.logger_.error(err)));
265
- if (!veeqoOrder?.id) {
266
- throw new utils_2.MedusaError(utils_2.MedusaError.Types.UNEXPECTED_STATE, `Failed to create order in Veeqo for order ${orderId}`);
267
- }
268
- // Resolve the local VeeqoCustomer DB record so we can set the required FK
269
- const dbCustomers = await this.listVeeqoCustomers({ veeqo_customer_id: orderInput.customer_id }, { take: 1 });
270
- const dbCustomer = dbCustomers[0];
271
- await this.createVeeqoOrders({
272
- order_id: orderId,
273
- veeqo_order_id: veeqoOrder.id,
274
- ...(dbCustomer ? { veeqo_customer_id: dbCustomer.id } : {})
292
+ body: { order: input.veeqo_input }
275
293
  });
276
- return veeqoOrder;
294
+ const body = await response.json().catch(() => null);
295
+ if (!response.ok || !body?.id) {
296
+ // Surface the Veeqo error so callers (and createVeeqoOrderStep) can persist
297
+ // it as last_sync_error rather than throwing an opaque "Failed" message.
298
+ const detail = body && typeof body === 'object'
299
+ ? JSON.stringify(body)
300
+ : `HTTP ${response.status}`;
301
+ this.logger_.error(`veeqo addOrder failed (number: ${input.veeqo_input.number}): ${detail}`);
302
+ throw new utils_2.MedusaError(utils_2.MedusaError.Types.UNEXPECTED_STATE, `Failed to create order in Veeqo (number: ${input.veeqo_input.number}): ${detail}`);
303
+ }
304
+ return body;
277
305
  }
278
306
  /**
279
307
  * Adds a product to Veeqo and links it to the corresponding product in Medusa. First argument is the Medusa product ID, second argument is the input data to create the product in Veeqo. Returns the created Veeqo product.
@@ -479,7 +507,12 @@ class VeeqoService extends (0, utils_1.MedusaService)({
479
507
  * Cancels an order in Veeqo by Medusa order ID and unlinks it in Medusa. Veeqo does not allow deleting orders, but canceling the order will hide it in the Veeqo interface.
480
508
  */
481
509
  async deleteOrder(orderId, cancelReason = '') {
482
- const [veeqoOrder] = await this.listVeeqoOrders({ order_id: orderId });
510
+ // Scoped to ORDER_PLACED replacement VeeqoOrders (claim/exchange) are not
511
+ // touched by this delete; warehouse handles those independently if needed.
512
+ const [veeqoOrder] = await this.listVeeqoOrders({
513
+ order_id: orderId,
514
+ source_type: veeqo_order_1.SourceType.ORDER_PLACED
515
+ });
483
516
  if (!veeqoOrder) {
484
517
  throw new utils_2.MedusaError(utils_2.MedusaError.Types.NOT_FOUND, `Veeqo order linked to order ${orderId} not found`);
485
518
  }
@@ -563,4 +596,4 @@ class VeeqoService extends (0, utils_1.MedusaService)({
563
596
  }
564
597
  }
565
598
  exports.VeeqoService = VeeqoService;
566
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3ZlZXFvL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXNDO0FBQ3RDLHFEQUF5RDtBQUV6RCxxREFBdUQ7QUFxQnZELDBEQUFxRDtBQUNyRCw0REFBdUQ7QUFDdkQsMEVBQW9FO0FBQ3BFLHNEQUFpRDtBQUNqRCwwREFBcUQ7QUFDckQsNERBQXVEO0FBQ3ZELDREQUF1RDtBQUN2RCw4REFBeUQ7QUFrQnpELE1BQWEsWUFBYSxTQUFRLElBQUEscUJBQWEsRUFBQztJQUMvQyxZQUFZLEVBQVosNEJBQVk7SUFDWixhQUFhLEVBQWIsOEJBQWE7SUFDYixtQkFBbUIsRUFBbkIsMkNBQW1CO0lBQ25CLFVBQVUsRUFBVix3QkFBVTtJQUNWLFlBQVksRUFBWiw0QkFBWTtJQUNaLGFBQWEsRUFBYiw4QkFBYTtJQUNiLGFBQWEsRUFBYiw4QkFBYTtJQUNiLGNBQWMsRUFBZCxnQ0FBYztDQUNkLENBQUM7SUFZRCxZQUNDLFNBRUMsRUFDRCxPQUFxQjtRQUVyQixLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQTtRQWZwQiwrRkFBK0Y7UUFDL0Ysd0VBQXdFO1FBQ3hFLG9HQUFvRztRQUNwRyxnTkFBZ047UUFDeE0sY0FBUyxHQUFHLElBQUEsc0JBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUN4QixVQUFLLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQVc5RixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUE7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNkLEdBQUcsQ0FBQyxJ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
599
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3ZlZXFvL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXNDO0FBQ3RDLHFEQUF5RDtBQUV6RCxxREFBdUQ7QUFxQnZELDBEQUFxRDtBQUNyRCw0REFBdUQ7QUFDdkQsMEVBQW9FO0FBQ3BFLHNEQUE2RDtBQUM3RCwwREFBcUQ7QUFDckQsNERBQXVEO0FBQ3ZELDREQUF1RDtBQUN2RCw4REFBeUQ7QUFrQnpELE1BQWEsWUFBYSxTQUFRLElBQUEscUJBQWEsRUFBQztJQUMvQyxZQUFZLEVBQVosNEJBQVk7SUFDWixhQUFhLEVBQWIsOEJBQWE7SUFDYixtQkFBbUIsRUFBbkIsMkNBQW1CO0lBQ25CLFVBQVUsRUFBVix3QkFBVTtJQUNWLFlBQVksRUFBWiw0QkFBWTtJQUNaLGFBQWEsRUFBYiw4QkFBYTtJQUNiLGFBQWEsRUFBYiw4QkFBYTtJQUNiLGNBQWMsRUFBZCxnQ0FBYztDQUNkLENBQUM7SUFZRCxZQUNDLFNBRUMsRUFDRCxPQUFxQjtRQUVyQixLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQTtRQWZwQiwrRkFBK0Y7UUFDL0Ysd0VBQXdFO1FBQ3hFLG9HQUFvRztRQUNwRyxnTkFBZ047UUFDeE0sY0FBUyxHQUFHLElBQUEsc0JBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUN4QixVQUFLLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQVc5RixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUE7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNkLEdBQUcsQ0FBQyxJ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
@@ -70,9 +70,6 @@ export type OrderForVeeqoOrderInput = {
70
70
  provider_id?: string | null;
71
71
  }[] | null;
72
72
  }[] | null;
73
- veeqo_order?: {
74
- veeqo_order_id?: number | null;
75
- } | null;
76
73
  };
77
74
  export type ProductVariantForVeeqoProductInput = {
78
75
  id: string;
@@ -182,7 +179,9 @@ export interface VeeqoOrderInput {
182
179
  payment_type: string;
183
180
  reference_number: string;
184
181
  };
185
- tags?: string[];
182
+ employee_notes_attributes?: {
183
+ text: string;
184
+ }[];
186
185
  }
187
186
  export interface VeeqoProductDTO {
188
187
  id: number;
@@ -0,0 +1,6 @@
1
+ import type { SubscriberArgs, SubscriberConfig } from '@medusajs/framework';
2
+ export declare const config: SubscriberConfig;
3
+ export default function claimDispatchHandler({ event: { data: { order_id, claim_id } }, container }: SubscriberArgs<{
4
+ order_id: string;
5
+ claim_id: string;
6
+ }>): Promise<void>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = claimDispatchHandler;
5
+ const order_1 = require("../workflows/order");
6
+ const veeqo_order_1 = require("../modules/veeqo/models/veeqo-order");
7
+ exports.config = {
8
+ event: 'order.claim_created'
9
+ };
10
+ async function claimDispatchHandler({ event: { data: { order_id, claim_id } }, container }) {
11
+ await (0, order_1.syncReplacementToVeeqoWorkflow)(container).run({
12
+ input: {
13
+ orderId: order_id,
14
+ sourceType: veeqo_order_1.SourceType.CLAIM,
15
+ sourceId: claim_id
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhaW0tZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9jbGFpbS1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLHVDQWFDO0FBcEJELDhDQUFtRTtBQUNuRSxxRUFBZ0U7QUFFbkQsUUFBQSxNQUFNLEdBQXFCO0lBQ3ZDLEtBQUssRUFBRSxxQkFBcUI7Q0FDNUIsQ0FBQTtBQUVjLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxFQUNsRCxLQUFLLEVBQUUsRUFDTixJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQzVCLEVBQ0QsU0FBUyxFQUMrQztJQUN4RCxNQUFNLElBQUEsc0NBQThCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ25ELEtBQUssRUFBRTtZQUNOLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLFVBQVUsRUFBRSx3QkFBVSxDQUFDLEtBQUs7WUFDNUIsUUFBUSxFQUFFLFFBQVE7U0FDbEI7S0FDRCxDQUFDLENBQUE7QUFDSCxDQUFDIn0=
@@ -0,0 +1,6 @@
1
+ import type { SubscriberArgs, SubscriberConfig } from '@medusajs/framework';
2
+ export declare const config: SubscriberConfig;
3
+ export default function exchangeDispatchHandler({ event: { data: { order_id, exchange_id } }, container }: SubscriberArgs<{
4
+ order_id: string;
5
+ exchange_id: string;
6
+ }>): Promise<void>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = exchangeDispatchHandler;
5
+ const order_1 = require("../workflows/order");
6
+ const veeqo_order_1 = require("../modules/veeqo/models/veeqo-order");
7
+ exports.config = {
8
+ event: 'order.exchange_created'
9
+ };
10
+ async function exchangeDispatchHandler({ event: { data: { order_id, exchange_id } }, container }) {
11
+ await (0, order_1.syncReplacementToVeeqoWorkflow)(container).run({
12
+ input: {
13
+ orderId: order_id,
14
+ sourceType: veeqo_order_1.SourceType.EXCHANGE,
15
+ sourceId: exchange_id
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjaGFuZ2UtZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9leGNoYW5nZS1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLDBDQWFDO0FBcEJELDhDQUFtRTtBQUNuRSxxRUFBZ0U7QUFFbkQsUUFBQSxNQUFNLEdBQXFCO0lBQ3ZDLEtBQUssRUFBRSx3QkFBd0I7Q0FDL0IsQ0FBQTtBQUVjLEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxFQUNyRCxLQUFLLEVBQUUsRUFDTixJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQy9CLEVBQ0QsU0FBUyxFQUNrRDtJQUMzRCxNQUFNLElBQUEsc0NBQThCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ25ELEtBQUssRUFBRTtZQUNOLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLFVBQVUsRUFBRSx3QkFBVSxDQUFDLFFBQVE7WUFDL0IsUUFBUSxFQUFFLFdBQVc7U0FDckI7S0FDRCxDQUFDLENBQUE7QUFDSCxDQUFDIn0=
@@ -1,5 +1,5 @@
1
1
  import type { SubscriberArgs, SubscriberConfig } from '@medusajs/framework';
2
2
  export declare const config: SubscriberConfig;
3
- export default function veeqoDispatchHandler({ event: { data: { id: orderId } }, container }: SubscriberArgs<{
3
+ export default function placeOrderDispatchHandler({ event: { data: { id: orderId } }, container }: SubscriberArgs<{
4
4
  id: string;
5
5
  }>): Promise<void>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = placeOrderDispatchHandler;
5
+ const order_1 = require("../workflows/order");
6
+ exports.config = {
7
+ event: 'order.placed'
8
+ };
9
+ async function placeOrderDispatchHandler({ event: { data: { id: orderId } }, container }) {
10
+ await (0, order_1.syncOrderToVeeqoWorkflow)(container).run({ input: orderId });
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utb3JkZXItZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9wbGFjZS1vcmRlci1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLDRDQU9DO0FBYkQsOENBQTZEO0FBRWhELFFBQUEsTUFBTSxHQUFxQjtJQUN2QyxLQUFLLEVBQUUsY0FBYztDQUNyQixDQUFBO0FBRWMsS0FBSyxVQUFVLHlCQUF5QixDQUFDLEVBQ3ZELEtBQUssRUFBRSxFQUNOLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFDckIsRUFDRCxTQUFTLEVBQ3VCO0lBQ2hDLE1BQU0sSUFBQSxnQ0FBd0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtBQUNsRSxDQUFDIn0=
@@ -1,21 +1,175 @@
1
- import { OrderForVeeqoOrderInput, VeeqoOrderDTO } from '../modules/veeqo/types';
1
+ import { OrderForVeeqoOrderInput, VeeqoOrderDTO, VeeqoOrderInput } from '../modules/veeqo/types';
2
+ import { SourceType } from '../modules/veeqo/models/veeqo-order';
3
+ type ReplacementItem = {
4
+ id: string;
5
+ quantity: number;
6
+ variant_id: string | null;
7
+ unit_price: number;
8
+ };
9
+ type ReplacementContext = {
10
+ order_id: string;
11
+ source_type: SourceType;
12
+ source_id: string;
13
+ additional_items: ReplacementItem[];
14
+ customer: {
15
+ id: string;
16
+ email: string | null;
17
+ phone: string | null;
18
+ } | null;
19
+ shipping_address: any;
20
+ sales_channel: {
21
+ id: string;
22
+ veeqo_channel_id?: number | null;
23
+ } | null;
24
+ shipping_method: {
25
+ id: string;
26
+ veeqo_delivery_method_id?: number | null;
27
+ } | null;
28
+ parent_veeqo_order_id: number | null;
29
+ variants_with_sellable: Record<string, {
30
+ veeqo_sellable_id: number | string | undefined;
31
+ }>;
32
+ };
33
+ /**
34
+ * Looks up a VeeqoOrder row by its (source_type, source_id) key.
35
+ *
36
+ * Used as the idempotency primitive for both the original-order and replacement flows.
37
+ * Returns the row if it exists, null otherwise. Note: a returned row may have
38
+ * veeqo_order_id=NULL (placeholder from a failed prior create attempt) — callers
39
+ * decide whether to retry or skip based on that.
40
+ */
41
+ export declare const findVeeqoOrderBySourceStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
42
+ source_type: SourceType;
43
+ source_id: string;
44
+ }, {
45
+ id: string;
46
+ status: import("../modules/veeqo/models/veeqo-order").Status;
47
+ last_synced_at: Date | null;
48
+ order_id: string;
49
+ source_type: SourceType;
50
+ source_id: string;
51
+ veeqo_order_id: number | null;
52
+ veeqo_status: string | null;
53
+ last_sync_error: string | null;
54
+ last_sync_attempted_at: Date | null;
55
+ veeqo_customer: {
56
+ id: string;
57
+ customer_id: string;
58
+ veeqo_customer_id: number;
59
+ veeqo_orders: /*elided*/ any[];
60
+ created_at: Date;
61
+ updated_at: Date;
62
+ deleted_at: Date | null;
63
+ };
64
+ veeqo_shipments: {
65
+ id: string;
66
+ fulfillment_id: string;
67
+ veeqo_allocation_id: number;
68
+ veeqo_shipment_id: number;
69
+ carrier: Record<string, unknown> | null;
70
+ tracking_number: Record<string, unknown> | null;
71
+ shipped_by: Record<string, unknown> | null;
72
+ shipped_at: Date | null;
73
+ veeqo_tracking_events: Record<string, unknown> | null;
74
+ veeqo_order: /*elided*/ any;
75
+ created_at: Date;
76
+ updated_at: Date;
77
+ deleted_at: Date | null;
78
+ veeqo_order_id: string;
79
+ }[];
80
+ raw_veeqo_order_id: Record<string, unknown> | null;
81
+ created_at: Date;
82
+ updated_at: Date;
83
+ deleted_at: Date | null;
84
+ veeqo_customer_id: string;
85
+ }>;
86
+ /**
87
+ * Creates a Veeqo order via the API and persists the corresponding VeeqoOrder row.
88
+ *
89
+ * Uses the placeholder-row pattern for failure visibility:
90
+ * 1. Insert/update a row marking the attempt (veeqo_order_id=NULL initially).
91
+ * 2. Call Veeqo API.
92
+ * 3. On success: update the row with veeqo_order_id, clear last_sync_error.
93
+ * 4. On retryable failure: persist last_sync_error, throw so subscriber retries.
94
+ * 5. On non-retryable failure: persist last_sync_error, return null (no retry).
95
+ *
96
+ * If the input.veeqo_input is null (sentinel from the replacement mapper for refund-only
97
+ * claims), this step is a clean no-op — no row, no API call.
98
+ */
99
+ export declare const createVeeqoOrderStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
100
+ order_id: string;
101
+ source_type: SourceType;
102
+ source_id: string;
103
+ veeqo_input: VeeqoOrderInput | null;
104
+ }, VeeqoOrderDTO | null>;
2
105
  export declare const getOrderDetailsStep: import("@medusajs/framework/workflows-sdk").StepFunction<string, OrderForVeeqoOrderInput>;
3
106
  export declare const processVeeqoStatusChangesStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
4
107
  order: OrderForVeeqoOrderInput;
5
108
  veeqo_order: VeeqoOrderDTO;
6
109
  }, undefined>;
7
- export declare const fetchOrderFromVeeqoStep: import("@medusajs/framework/workflows-sdk").StepFunction<string, VeeqoOrderDTO>;
8
- export declare const getVeeqoOrderWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<string, VeeqoOrderDTO, []>;
9
- export declare const addOrderToVeeqoStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
10
- order: OrderForVeeqoOrderInput;
11
- veeqo_customer_id: number;
12
- }, VeeqoOrderDTO | undefined>;
13
- export declare const addOrderToVeeqoWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<string, VeeqoOrderDTO | undefined, []>;
14
- export declare const updateOrderInVeeqoStep: import("@medusajs/framework/workflows-sdk").StepFunction<any, VeeqoOrderDTO>;
15
- export declare const updateOrderInVeeqoWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<string, VeeqoOrderDTO, []>;
16
- export declare const addOrUpdateOrderInVeeqoStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
17
- order: OrderForVeeqoOrderInput;
18
- veeqo_customer_id: number;
19
- }, VeeqoOrderDTO | undefined>;
20
- export declare const syncOrderToVeeqoWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<string, VeeqoOrderDTO | undefined, []>;
110
+ export declare const fetchOrderFromVeeqoStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
111
+ source_type: SourceType;
112
+ source_id: string;
113
+ }, VeeqoOrderDTO>;
114
+ export declare const getVeeqoOrderWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<{
115
+ source_type: SourceType;
116
+ source_id: string;
117
+ }, VeeqoOrderDTO, []>;
118
+ export declare const addOrderToVeeqoWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<string, VeeqoOrderDTO | null, []>;
119
+ export declare const updateOrderInVeeqoStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
120
+ source_type: SourceType;
121
+ source_id: string;
122
+ }, VeeqoOrderDTO>;
123
+ export declare const updateOrderInVeeqoWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<{
124
+ source_type: SourceType;
125
+ source_id: string;
126
+ }, VeeqoOrderDTO, []>;
127
+ /**
128
+ * Step that handles the existing-order side of syncOrderToVeeqoWorkflow:
129
+ * fetches the latest Veeqo state and triggers shipment sync.
130
+ *
131
+ * The "create new Veeqo order" branch is now delegated to createVeeqoOrderStep
132
+ * at the workflow level — see syncOrderToVeeqoWorkflow below.
133
+ */
134
+ export declare const refreshExistingPlacedVeeqoOrderStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
135
+ order_id: string;
136
+ }, VeeqoOrderDTO | null>;
137
+ /**
138
+ * Idempotency check for the placement flow. If a healthy ORDER_PLACED VeeqoOrder
139
+ * already exists, syncOrderToVeeqoWorkflow takes the refresh path; otherwise it
140
+ * takes the create path via createVeeqoOrderStep.
141
+ *
142
+ * This step's role is purely to read and report; the conditional execution
143
+ * happens via createVeeqoOrderStep's own existence check.
144
+ */
145
+ export declare const syncOrderToVeeqoWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<string, VeeqoOrderDTO | null, []>;
146
+ /**
147
+ * Fetches everything needed to construct a Veeqo order for a claim or exchange:
148
+ * - the claim/exchange's additional_items (the outbound items being shipped to the customer)
149
+ * - the parent order's customer, shipping address, sales channel, shipping method
150
+ * - the parent VeeqoOrder's veeqo_order_id (for the "Replacement for #N" note)
151
+ *
152
+ * Returns a ReplacementContext shape consumed by mapReplacementContextToVeeqoOrderInput.
153
+ */
154
+ export declare const getReplacementContextStep: import("@medusajs/framework/workflows-sdk").StepFunction<{
155
+ order_id: string;
156
+ source_type: SourceType;
157
+ source_id: string;
158
+ }, ReplacementContext>;
159
+ /**
160
+ * Top-level workflow for syncing a claim or exchange's outbound shipment to Veeqo.
161
+ *
162
+ * Flow:
163
+ * 1. Fetch replacement context (claim/exchange items + parent order context).
164
+ * 2. Sync the customer to Veeqo (existing reused workflow).
165
+ * 3. Build the VeeqoOrderInput from context. Returns null sentinel for refund-only claims.
166
+ * 4. Call createVeeqoOrderStep, which handles the placeholder-row pattern, idempotency,
167
+ * Veeqo API call, and post-success row update.
168
+ */
169
+ export declare const syncReplacementToVeeqoWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<{
170
+ orderId: string;
171
+ sourceType: SourceType;
172
+ sourceId: string;
173
+ }, VeeqoOrderDTO | null, []>;
21
174
  export declare const findAndDeleteOrderFromVeeqoStep: import("@medusajs/framework/workflows-sdk").StepFunction<string, undefined>;
175
+ export {};