medusa-plugin-veeqo 0.1.3
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.
- package/.medusa/server/medusa-config.js +29 -0
- package/.medusa/server/src/admin/index.js +686 -0
- package/.medusa/server/src/admin/index.mjs +685 -0
- package/.medusa/server/src/api/admin/veeqo/customers/[customerId]/sync/route.js +19 -0
- package/.medusa/server/src/api/admin/veeqo/customers/sync/route.js +16 -0
- package/.medusa/server/src/api/admin/veeqo/orders/[orderId]/sync/route.js +19 -0
- package/.medusa/server/src/api/admin/veeqo/orders/shipment-sync/route.js +30 -0
- package/.medusa/server/src/api/admin/veeqo/orders/sync/route.js +16 -0
- package/.medusa/server/src/api/admin/veeqo/products/[productId]/sync/route.js +19 -0
- package/.medusa/server/src/api/admin/veeqo/products/sync/route.js +14 -0
- package/.medusa/server/src/api/admin/veeqo/sales-channels/[salesChannelId]/sync/route.js +19 -0
- package/.medusa/server/src/api/admin/veeqo/sales-channels/sync/route.js +14 -0
- package/.medusa/server/src/api/admin/veeqo/shipments/[id]/tracking-events/route.js +20 -0
- package/.medusa/server/src/api/admin/veeqo/shipping-options/[shippingOptionId]/sync/route.js +19 -0
- package/.medusa/server/src/api/admin/veeqo/shipping-options/sync/route.js +14 -0
- package/.medusa/server/src/api/admin/veeqo/stock-locations/[stockLocationId]/sync/route.js +19 -0
- package/.medusa/server/src/api/admin/veeqo/stock-locations/sync/route.js +14 -0
- package/.medusa/server/src/api/middlewares.js +39 -0
- package/.medusa/server/src/api/validators.js +23 -0
- package/.medusa/server/src/jobs/veeqo-order-sync.js +34 -0
- package/.medusa/server/src/links/customer-veeqo-customer.js +18 -0
- package/.medusa/server/src/links/fulfillment-veeqo-shipment.js +18 -0
- package/.medusa/server/src/links/order-veeqo-order.js +18 -0
- package/.medusa/server/src/links/product-variant-veeqo-sellable.js +18 -0
- package/.medusa/server/src/links/product-veeqo-product.js +18 -0
- package/.medusa/server/src/links/sales-channel-veeqo-channel.js +18 -0
- package/.medusa/server/src/links/shipping-option-veeqo-delivery-method.js +18 -0
- package/.medusa/server/src/links/stock-location-veeqo-warehouse.js +18 -0
- package/.medusa/server/src/links/veeqo-channel-sales-channel.js +15 -0
- package/.medusa/server/src/links/veeqo-customer-customer.js +15 -0
- package/.medusa/server/src/links/veeqo-delivery-method.js +15 -0
- package/.medusa/server/src/links/veeqo-order-order.js +15 -0
- package/.medusa/server/src/links/veeqo-product-product.js +15 -0
- package/.medusa/server/src/links/veeqo-sellable-product-variant.js +15 -0
- package/.medusa/server/src/links/veeqo-shipment-fulfillment.js +15 -0
- package/.medusa/server/src/links/veeqo-warehouse-stock-location.js +15 -0
- package/.medusa/server/src/modules/veeqo/index.js +10 -0
- package/.medusa/server/src/modules/veeqo/migrations/Migration20260411222036.js +76 -0
- package/.medusa/server/src/modules/veeqo/models/veeqo-channel.js +10 -0
- package/.medusa/server/src/modules/veeqo/models/veeqo-customer.js +14 -0
- package/.medusa/server/src/modules/veeqo/models/veeqo-delivery-method.js +10 -0
- package/.medusa/server/src/modules/veeqo/models/veeqo-order.js +26 -0
- package/.medusa/server/src/modules/veeqo/models/veeqo-product.js +10 -0
- package/.medusa/server/src/modules/veeqo/models/veeqo-sellable.js +10 -0
- package/.medusa/server/src/modules/veeqo/models/veeqo-shipment.js +20 -0
- package/.medusa/server/src/modules/veeqo/models/veeqo-warehouse.js +10 -0
- package/.medusa/server/src/modules/veeqo/service.js +566 -0
- package/.medusa/server/src/modules/veeqo/types.js +3 -0
- package/.medusa/server/src/subscribers/veeqo-dispatcher.js +12 -0
- package/.medusa/server/src/workflows/channel.js +137 -0
- package/.medusa/server/src/workflows/customer.js +112 -0
- package/.medusa/server/src/workflows/delivery-method.js +116 -0
- package/.medusa/server/src/workflows/order.js +327 -0
- package/.medusa/server/src/workflows/product.js +163 -0
- package/.medusa/server/src/workflows/shipments.js +155 -0
- package/.medusa/server/src/workflows/warehouse.js +133 -0
- package/README.md +70 -0
- package/package.json +83 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.syncVeeqoOrderShipmentsWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
7
|
+
const veeqo_order_1 = require("../modules/veeqo/models/veeqo-order");
|
|
8
|
+
// ─── Step 1: Fetch data ────────────────────────────────────────────────────────
|
|
9
|
+
const fetchVeeqoOrderDataStep = (0, workflows_sdk_1.createStep)('fetch-veeqo-order-data-step', async (input, { container }) => {
|
|
10
|
+
const veeqoService = container.resolve('veeqo');
|
|
11
|
+
const [dbOrder] = await veeqoService.listVeeqoOrders({ id: input.veeqoOrderDbId }, { relations: ['veeqo_shipments'] });
|
|
12
|
+
if (!dbOrder) {
|
|
13
|
+
throw new Error(`VeeqoOrder with id ${input.veeqoOrderDbId} not found`);
|
|
14
|
+
}
|
|
15
|
+
const liveOrder = await veeqoService.fetchOrder(dbOrder.veeqo_order_id);
|
|
16
|
+
return new workflows_sdk_1.StepResponse({ dbOrder, liveOrder });
|
|
17
|
+
});
|
|
18
|
+
// ─── Step 2: Process new shipments ────────────────────────────────────────────
|
|
19
|
+
const processNewShipmentsStep = (0, workflows_sdk_1.createStep)('process-new-veeqo-shipments-step', async (data, { container }) => {
|
|
20
|
+
const { dbOrder, liveOrder } = data;
|
|
21
|
+
const veeqoService = container.resolve('veeqo');
|
|
22
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
23
|
+
const existingAllocationIds = new Set((dbOrder.veeqo_shipments ?? []).map((s) => s.veeqo_allocation_id));
|
|
24
|
+
const newAllocations = (liveOrder.allocations ?? []).filter((alloc) => alloc.shipment != null && !existingAllocationIds.has(alloc.id));
|
|
25
|
+
if (!newAllocations.length) {
|
|
26
|
+
return new workflows_sdk_1.StepResponse(void 0);
|
|
27
|
+
}
|
|
28
|
+
// Fetch order items once for all new shipments
|
|
29
|
+
const { data: orders } = await query.graph({
|
|
30
|
+
entity: 'order',
|
|
31
|
+
fields: ['id', 'items.id', 'items.detail.quantity'],
|
|
32
|
+
filters: { id: dbOrder.order_id }
|
|
33
|
+
});
|
|
34
|
+
const order = orders[0] ?? {};
|
|
35
|
+
const items = (order.items ?? []).map((item) => ({
|
|
36
|
+
id: item.id,
|
|
37
|
+
quantity: item.detail?.quantity ?? item.quantity ?? 1
|
|
38
|
+
}));
|
|
39
|
+
for (const alloc of newAllocations) {
|
|
40
|
+
const shipment = alloc.shipment;
|
|
41
|
+
// Create fulfillment linked to the order
|
|
42
|
+
const { result: fulfillment } = await (0, core_flows_1.createOrderFulfillmentWorkflow)(container).run({
|
|
43
|
+
input: { order_id: dbOrder.order_id, items }
|
|
44
|
+
});
|
|
45
|
+
// Build labels from Veeqo tracking data when available
|
|
46
|
+
const trackingNumber = shipment.tracking_number;
|
|
47
|
+
const labels = trackingNumber?.tracking_number
|
|
48
|
+
? [
|
|
49
|
+
{
|
|
50
|
+
tracking_number: trackingNumber.tracking_number,
|
|
51
|
+
tracking_url: trackingNumber.tracking_url ?? '',
|
|
52
|
+
label_url: ''
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
: [];
|
|
56
|
+
// Mark as shipped — emits shipment.created
|
|
57
|
+
await (0, core_flows_1.createOrderShipmentWorkflow)(container).run({
|
|
58
|
+
input: {
|
|
59
|
+
order_id: dbOrder.order_id,
|
|
60
|
+
fulfillment_id: fulfillment.id,
|
|
61
|
+
items,
|
|
62
|
+
...(labels.length ? { labels } : {})
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// Persist VeeqoShipment record
|
|
66
|
+
await veeqoService.createVeeqoShipments({
|
|
67
|
+
veeqo_order_id: dbOrder.id,
|
|
68
|
+
fulfillment_id: fulfillment.id,
|
|
69
|
+
veeqo_allocation_id: alloc.id,
|
|
70
|
+
veeqo_shipment_id: shipment.id,
|
|
71
|
+
carrier: shipment.carrier ?? null,
|
|
72
|
+
tracking_number: shipment.tracking_number ?? null,
|
|
73
|
+
shipped_by: shipment.shipped_by ?? null,
|
|
74
|
+
shipped_at: shipment.created_at ? new Date(shipment.created_at) : null
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return new workflows_sdk_1.StepResponse(void 0);
|
|
78
|
+
});
|
|
79
|
+
// ─── Step 2b: Complete order if shipped ──────────────────────────────────────
|
|
80
|
+
const completeOrderIfShippedStep = (0, workflows_sdk_1.createStep)('complete-order-if-shipped-step', async (data, { container }) => {
|
|
81
|
+
const { dbOrder } = data;
|
|
82
|
+
const veeqoService = container.resolve('veeqo');
|
|
83
|
+
const shipments = await veeqoService.listVeeqoShipments({
|
|
84
|
+
veeqo_order_id: dbOrder.id
|
|
85
|
+
});
|
|
86
|
+
if (shipments.length === 0) {
|
|
87
|
+
return new workflows_sdk_1.StepResponse(void 0);
|
|
88
|
+
}
|
|
89
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
90
|
+
const { data: [order] } = await query.graph({
|
|
91
|
+
entity: 'order',
|
|
92
|
+
fields: ['id', 'status'],
|
|
93
|
+
filters: { id: dbOrder.order_id }
|
|
94
|
+
});
|
|
95
|
+
if (order?.status === 'pending') {
|
|
96
|
+
await (0, core_flows_1.completeOrderWorkflow)(container).run({
|
|
97
|
+
input: { orderIds: [dbOrder.order_id] }
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return new workflows_sdk_1.StepResponse(void 0);
|
|
101
|
+
});
|
|
102
|
+
// ─── Step 3: Process delivered shipments ──────────────────────────────────────
|
|
103
|
+
const processDeliveredShipmentsStep = (0, workflows_sdk_1.createStep)('process-delivered-veeqo-shipments-step', async (data, { container }) => {
|
|
104
|
+
const { dbOrder } = data;
|
|
105
|
+
const veeqoService = container.resolve('veeqo');
|
|
106
|
+
// Re-query to include any shipments added in the previous step
|
|
107
|
+
const currentShipments = (await veeqoService.listVeeqoShipments({
|
|
108
|
+
veeqo_order_id: dbOrder.id
|
|
109
|
+
}));
|
|
110
|
+
const undelivered = currentShipments.filter((s) => s.veeqo_tracking_events == null);
|
|
111
|
+
for (const dbShipment of undelivered) {
|
|
112
|
+
const liveShipment = await veeqoService.fetchShipment(dbShipment.veeqo_shipment_id);
|
|
113
|
+
if (!liveShipment.tracking_number?.delivered_at)
|
|
114
|
+
continue;
|
|
115
|
+
const events = await veeqoService.fetchTrackingEvents(dbShipment.veeqo_shipment_id);
|
|
116
|
+
await (0, core_flows_1.markFulfillmentAsDeliveredWorkflow)(container).run({
|
|
117
|
+
input: { id: dbShipment.fulfillment_id }
|
|
118
|
+
});
|
|
119
|
+
await veeqoService.updateVeeqoShipments({
|
|
120
|
+
id: dbShipment.id,
|
|
121
|
+
veeqo_tracking_events: events
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return new workflows_sdk_1.StepResponse(void 0);
|
|
125
|
+
});
|
|
126
|
+
// ─── Step 4: Finalize ─────────────────────────────────────────────────────────
|
|
127
|
+
const finalizeVeeqoOrderSyncStep = (0, workflows_sdk_1.createStep)('finalize-veeqo-order-sync-step', async (data, { container }) => {
|
|
128
|
+
const { dbOrder } = data;
|
|
129
|
+
const veeqoService = container.resolve('veeqo');
|
|
130
|
+
const currentShipments = (await veeqoService.listVeeqoShipments({
|
|
131
|
+
veeqo_order_id: dbOrder.id
|
|
132
|
+
}));
|
|
133
|
+
const allDelivered = currentShipments.length > 0 &&
|
|
134
|
+
currentShipments.every((s) => s.veeqo_tracking_events != null);
|
|
135
|
+
await veeqoService.updateVeeqoOrders({
|
|
136
|
+
id: dbOrder.id,
|
|
137
|
+
last_synced_at: new Date(),
|
|
138
|
+
...(allDelivered ? { status: veeqo_order_1.Status.CLOSED } : {})
|
|
139
|
+
});
|
|
140
|
+
return new workflows_sdk_1.StepResponse(void 0);
|
|
141
|
+
});
|
|
142
|
+
// ─── Workflow ─────────────────────────────────────────────────────────────────
|
|
143
|
+
exports.syncVeeqoOrderShipmentsWorkflow = (0, workflows_sdk_1.createWorkflow)('sync-veeqo-order-shipments-workflow', function (input) {
|
|
144
|
+
const data = fetchVeeqoOrderDataStep(input);
|
|
145
|
+
// Steps must run sequentially: chain via transform to enforce ordering.
|
|
146
|
+
const _step2 = processNewShipmentsStep(data);
|
|
147
|
+
const step2bInput = (0, workflows_sdk_1.transform)({ data, _step2 }, ({ data }) => data);
|
|
148
|
+
const _step2b = completeOrderIfShippedStep(step2bInput);
|
|
149
|
+
const step3Input = (0, workflows_sdk_1.transform)({ data, _step2b }, ({ data }) => data);
|
|
150
|
+
const _step3 = processDeliveredShipmentsStep(step3Input);
|
|
151
|
+
const step4Input = (0, workflows_sdk_1.transform)({ data, _step3 }, ({ data }) => data);
|
|
152
|
+
finalizeVeeqoOrderSyncStep(step4Input);
|
|
153
|
+
return new workflows_sdk_1.WorkflowResponse(void 0);
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcG1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zaGlwbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBTTBDO0FBQzFDLHFEQUFxRTtBQUNyRSw0REFLb0M7QUFHcEMscUVBQTREO0FBVzVELGtGQUFrRjtBQUVsRixNQUFNLHVCQUF1QixHQUFHLElBQUEsMEJBQVUsRUFDekMsNkJBQTZCLEVBQzdCLEtBQUssRUFBRSxLQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN6QyxNQUFNLFlBQVksR0FBaUIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM3RCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxZQUFZLENBQUMsZUFBZSxDQUNuRCxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQzVCLEVBQUUsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUNsQyxDQUFBO0lBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxDQUFDLGNBQWMsWUFBWSxDQUFDLENBQUE7SUFDeEUsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDdkUsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFjLENBQUMsQ0FBQTtBQUM1RCxDQUFDLENBQ0QsQ0FBQTtBQUVELGlGQUFpRjtBQUVqRixNQUFNLHVCQUF1QixHQUFHLElBQUEsMEJBQVUsRUFDekMsa0NBQWtDLEVBQ2xDLEtBQUssRUFBRSxJQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdB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
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deleteWarehouseFromVeeqoWorkflow = exports.findAndDeleteWarehouseFromVeeqoStep = exports.syncWarehouseToVeeqoWorkflow = exports.addOrUpdateWarehouseInVeeqoStep = exports.updateWarehouseInVeeqoWorkflow = exports.updateWarehouseInVeeqoStep = exports.addWarehouseToVeeqoWorkflow = exports.addWarehouseToVeeqoStep = exports.getVeeqoWarehouseWorkflow = exports.fetchWarehouseFromVeeqoStep = exports.getStockLocationDetailsStep = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const mapStockLocationToVeeqoWarehouseInput = (stock_location) => {
|
|
7
|
+
const requiredFields = {
|
|
8
|
+
name: stock_location.name,
|
|
9
|
+
address_line_1: stock_location.address?.address_1,
|
|
10
|
+
city: stock_location.address?.city,
|
|
11
|
+
state: stock_location.address?.province?.toUpperCase(),
|
|
12
|
+
country: stock_location.address?.country_code?.toUpperCase(),
|
|
13
|
+
post_code: stock_location.address?.postal_code?.toUpperCase()
|
|
14
|
+
};
|
|
15
|
+
const missingFields = Object.entries(requiredFields)
|
|
16
|
+
.filter(([, value]) => value === undefined || value === null)
|
|
17
|
+
.map(([field]) => field);
|
|
18
|
+
if (missingFields.length) {
|
|
19
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Stock location ${stock_location.id} is missing required fields for Veeqo warehouse input: ${missingFields.join(', ')}`);
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
name: requiredFields.name,
|
|
23
|
+
address_line_1: requiredFields.address_line_1,
|
|
24
|
+
city: requiredFields.city,
|
|
25
|
+
region: requiredFields.state,
|
|
26
|
+
country: requiredFields.country,
|
|
27
|
+
post_code: requiredFields.post_code
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
exports.getStockLocationDetailsStep = (0, workflows_sdk_1.createStep)('get-stock-location-details-step', async (stock_location_id, { container }) => {
|
|
31
|
+
const query = container.resolve('query');
|
|
32
|
+
const { data: stock_locations } = await query.graph({
|
|
33
|
+
entity: 'stock_location',
|
|
34
|
+
fields: [
|
|
35
|
+
'id',
|
|
36
|
+
'name',
|
|
37
|
+
'address.address_1',
|
|
38
|
+
'address.city',
|
|
39
|
+
'address.province',
|
|
40
|
+
'address.country_code',
|
|
41
|
+
'address.postal_code',
|
|
42
|
+
'veeqo_warehouse.veeqo_warehouse_id'
|
|
43
|
+
],
|
|
44
|
+
filters: { id: stock_location_id }
|
|
45
|
+
});
|
|
46
|
+
const stockLocation = stock_locations[0];
|
|
47
|
+
if (!stockLocation) {
|
|
48
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Stock location with id ${stock_location_id} not found`);
|
|
49
|
+
}
|
|
50
|
+
return new workflows_sdk_1.StepResponse(stockLocation);
|
|
51
|
+
});
|
|
52
|
+
// GET --------------------------------------------------------------
|
|
53
|
+
exports.fetchWarehouseFromVeeqoStep = (0, workflows_sdk_1.createStep)('fetch-warehouse-from-veeqo-step', async (stock_location_id, { container }) => {
|
|
54
|
+
const query = container.resolve('query');
|
|
55
|
+
const { data: [veeqo_warehouse] } = await query.graph({
|
|
56
|
+
entity: 'veeqo_warehouse',
|
|
57
|
+
fields: ['veeqo_warehouse_id'],
|
|
58
|
+
filters: { stock_location_id }
|
|
59
|
+
});
|
|
60
|
+
const veeqoWarehouseId = veeqo_warehouse?.veeqo_warehouse_id;
|
|
61
|
+
if (!veeqoWarehouseId) {
|
|
62
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `No linked Veeqo warehouse found for stock location ${stock_location_id}`);
|
|
63
|
+
}
|
|
64
|
+
const veeqoService = container.resolve('veeqo');
|
|
65
|
+
const veeqo = (await veeqoService.fetchWarehouse(veeqoWarehouseId));
|
|
66
|
+
return new workflows_sdk_1.StepResponse({ veeqo_warehouse: veeqo });
|
|
67
|
+
});
|
|
68
|
+
exports.getVeeqoWarehouseWorkflow = (0, workflows_sdk_1.createWorkflow)('get-veeqo-warehouse-workflow', (stock_location_id) => {
|
|
69
|
+
const result = (0, exports.fetchWarehouseFromVeeqoStep)(stock_location_id);
|
|
70
|
+
return new workflows_sdk_1.WorkflowResponse(result);
|
|
71
|
+
});
|
|
72
|
+
// ADD --------------------------------------------------------------
|
|
73
|
+
exports.addWarehouseToVeeqoStep = (0, workflows_sdk_1.createStep)('add-warehouse-to-veeqo-step', async (stock_location, { container }) => {
|
|
74
|
+
if (stock_location.veeqo_warehouse?.veeqo_warehouse_id) {
|
|
75
|
+
return new workflows_sdk_1.StepResponse(void 0);
|
|
76
|
+
}
|
|
77
|
+
const veeqoWarehouseInput = mapStockLocationToVeeqoWarehouseInput(stock_location);
|
|
78
|
+
const veeqoService = container.resolve('veeqo');
|
|
79
|
+
const veeqoWarehouse = await veeqoService.addWarehouse(stock_location.id, veeqoWarehouseInput);
|
|
80
|
+
return new workflows_sdk_1.StepResponse(veeqoWarehouse);
|
|
81
|
+
});
|
|
82
|
+
exports.addWarehouseToVeeqoWorkflow = (0, workflows_sdk_1.createWorkflow)('add-warehouse-to-veeqo-workflow', (stock_location_id) => {
|
|
83
|
+
const stockLocation = (0, exports.getStockLocationDetailsStep)(stock_location_id);
|
|
84
|
+
const veeqoWarehouse = (0, exports.addWarehouseToVeeqoStep)(stockLocation);
|
|
85
|
+
return new workflows_sdk_1.WorkflowResponse(veeqoWarehouse);
|
|
86
|
+
});
|
|
87
|
+
// UPDATE --------------------------------------------------------------
|
|
88
|
+
exports.updateWarehouseInVeeqoStep = (0, workflows_sdk_1.createStep)('update-warehouse-in-veeqo-step', async (stock_location, { container }) => {
|
|
89
|
+
const veeqoWarehouseId = stock_location.veeqo_warehouse?.veeqo_warehouse_id;
|
|
90
|
+
if (!veeqoWarehouseId) {
|
|
91
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `No linked Veeqo warehouse found for stock location ${stock_location.id}`);
|
|
92
|
+
}
|
|
93
|
+
const veeqoWarehouseInput = mapStockLocationToVeeqoWarehouseInput(stock_location);
|
|
94
|
+
const veeqoService = container.resolve('veeqo');
|
|
95
|
+
const veeqoWarehouse = await veeqoService.updateWarehouse(veeqoWarehouseId, veeqoWarehouseInput);
|
|
96
|
+
return new workflows_sdk_1.StepResponse(veeqoWarehouse);
|
|
97
|
+
});
|
|
98
|
+
exports.updateWarehouseInVeeqoWorkflow = (0, workflows_sdk_1.createWorkflow)('update-warehouse-in-veeqo-workflow', (stock_location_id) => {
|
|
99
|
+
const stockLocation = (0, exports.getStockLocationDetailsStep)(stock_location_id);
|
|
100
|
+
const veeqoWarehouse = (0, exports.updateWarehouseInVeeqoStep)(stockLocation);
|
|
101
|
+
return new workflows_sdk_1.WorkflowResponse(veeqoWarehouse);
|
|
102
|
+
});
|
|
103
|
+
// SYNC --------------------------------------------------------------
|
|
104
|
+
exports.addOrUpdateWarehouseInVeeqoStep = (0, workflows_sdk_1.createStep)('add-or-update-warehouse-in-veeqo-step', async (stock_location, { container }) => {
|
|
105
|
+
const veeqoService = container.resolve('veeqo');
|
|
106
|
+
const veeqoWarehouseId = stock_location.veeqo_warehouse?.veeqo_warehouse_id;
|
|
107
|
+
if (!veeqoWarehouseId) {
|
|
108
|
+
const veeqoWarehouseInput = mapStockLocationToVeeqoWarehouseInput(stock_location);
|
|
109
|
+
const veeqoWarehouse = await veeqoService.addWarehouse(stock_location.id, veeqoWarehouseInput);
|
|
110
|
+
return new workflows_sdk_1.StepResponse(veeqoWarehouse);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
const veeqoWarehouseInput = mapStockLocationToVeeqoWarehouseInput(stock_location);
|
|
114
|
+
const veeqoWarehouse = await veeqoService.updateWarehouse(veeqoWarehouseId, veeqoWarehouseInput);
|
|
115
|
+
return new workflows_sdk_1.StepResponse(veeqoWarehouse);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
exports.syncWarehouseToVeeqoWorkflow = (0, workflows_sdk_1.createWorkflow)('sync-warehouse-to-veeqo-workflow', (stock_location_id) => {
|
|
119
|
+
const stockLocation = (0, exports.getStockLocationDetailsStep)(stock_location_id);
|
|
120
|
+
const veeqoWarehouse = (0, exports.addOrUpdateWarehouseInVeeqoStep)(stockLocation);
|
|
121
|
+
return new workflows_sdk_1.WorkflowResponse(veeqoWarehouse);
|
|
122
|
+
});
|
|
123
|
+
// DELETE --------------------------------------------------------------
|
|
124
|
+
exports.findAndDeleteWarehouseFromVeeqoStep = (0, workflows_sdk_1.createStep)('find-and-delete-warehouse-from-veeqo-step', async (stock_location_id, { container }) => {
|
|
125
|
+
const veeqoService = container.resolve('veeqo');
|
|
126
|
+
await veeqoService.deleteWarehouse(stock_location_id);
|
|
127
|
+
return new workflows_sdk_1.StepResponse(void 0);
|
|
128
|
+
});
|
|
129
|
+
exports.deleteWarehouseFromVeeqoWorkflow = (0, workflows_sdk_1.createWorkflow)('delete-warehouse-from-veeqo-workflow', (stock_location_id) => {
|
|
130
|
+
const result = (0, exports.findAndDeleteWarehouseFromVeeqoStep)(stock_location_id);
|
|
131
|
+
return new workflows_sdk_1.WorkflowResponse(result);
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FyZWhvdXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy93YXJlaG91c2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLHFEQUF1RDtBQVF2RCxNQUFNLHFDQUFxQyxHQUFHLENBQzdDLGNBQW1ELEVBQzdCLEVBQUU7SUFDeEIsTUFBTSxjQUFjLEdBQUc7UUFDdEIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO1FBQ3pCLGNBQWMsRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVM7UUFDakQsSUFBSSxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSTtRQUNsQyxLQUFLLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO1FBQ3RELE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUU7UUFDNUQsU0FBUyxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRTtLQUM3RCxDQUFBO0lBQ0QsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7U0FDbEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7U0FDNUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDekIsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLG1CQUFXLENBQ3BCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsa0JBQWtCLGNBQWMsQ0FBQyxFQUFFLDBEQUEwRCxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3ZILENBQUE7SUFD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
|
package/README.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# medusa-plugin-veeqo
|
|
2
|
+
|
|
3
|
+
Veeqo integration plugin for Medusa v2. Automatically send placed orders to Veeqo for shipping, ping Veeqo for updates on orders, and create Medusa fulfillments when items are shipped.
|
|
4
|
+
|
|
5
|
+
[Documentation](https://pevey.com/medusa-plugin-veeqo)
|
|
6
|
+
|
|
7
|
+
If you are not familiar with Medusa, you can learn more on [the project web site](https://www.medusajs.com/).
|
|
8
|
+
|
|
9
|
+
If you are not familiar with Veeqo, you can learn more on their [web site](https://www.veeqo.com/).
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
- Syncs from Medusa to Veeqo all required entities to send orders to Veeqo via their API (sales channels, stock locations, shipping options, products, product variants, and customers)
|
|
14
|
+
- Automatically sends orders to Veeqo for fulfillment
|
|
15
|
+
- Pings Veeqo every 4 hours for updates via a scheduled Job
|
|
16
|
+
- Automatically creates a Medusa fulfillment when a Veeqo shipment is detected. Stores tracking and delivery information in Medusa.
|
|
17
|
+
- Triggers the 'shipment.created' and 'delivery.created' events for easy integration with your notifications flow.
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
Inside your medusa backend root folder:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
yarn add medusa-plugin-veeqo
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Replace "yarn add" with the correct command for your package manager if you are using (for example) npm, pnpm, or bun.
|
|
28
|
+
|
|
29
|
+
## Configuration
|
|
30
|
+
|
|
31
|
+
Enable in your medusa-config.ts file. Example:
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
module.exports = defineConfig({
|
|
35
|
+
//... other config
|
|
36
|
+
plugins: [
|
|
37
|
+
{
|
|
38
|
+
resolve: 'medusa-plugin-veeqo',
|
|
39
|
+
options: {
|
|
40
|
+
apiKey: process.env.VEEQO_API_KEY,
|
|
41
|
+
timeout: 5000,
|
|
42
|
+
retry: 3
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// ... other plugins
|
|
46
|
+
]
|
|
47
|
+
})
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Options
|
|
51
|
+
|
|
52
|
+
| Option | Type | Required | Default | Description |
|
|
53
|
+
| ---------- | -------- | -------- | ----------------------- | -------------------------------------------- |
|
|
54
|
+
| `apiKey` | `string` | Yes | | Your Veeqo API key |
|
|
55
|
+
| `timeout` | `number` | No | `5000` | Request timeout in milliseconds |
|
|
56
|
+
| `retry` | `number` | No | `3` | Number of retry attempts for failed requests |
|
|
57
|
+
| `veeqoUrl` | `string` | No | `https://api.veeqo.com` | Override Veeqo API URL if desired |
|
|
58
|
+
|
|
59
|
+
## Admin UI
|
|
60
|
+
|
|
61
|
+
The plugin adds widgets to the following admin pages:
|
|
62
|
+
|
|
63
|
+
- **Products** - View and sync Veeqo product/sellable mappings
|
|
64
|
+
- **Orders** - View Veeqo order and shipment status
|
|
65
|
+
- **Customers** - View Veeqo customer mapping
|
|
66
|
+
- **Sales Channels** - View Veeqo channel mapping
|
|
67
|
+
- **Stock Locations** - View Veeqo warehouse mapping
|
|
68
|
+
- **Shipping Options** - View Veeqo delivery method mapping
|
|
69
|
+
|
|
70
|
+
A settings page at **Settings > Veeqo** provides a guided setup wizard for initial sync of all entity types. Revisit this wizard any time to check for items that may have been added since setup that need to be synced.
|
package/package.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "medusa-plugin-veeqo",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "Veeqo integration plugin for Medusa v2",
|
|
5
|
+
"author": "Lacey Pevey",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/pevey/medusa-plugins"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://pevey.com/medusa-plugin-veeqo",
|
|
12
|
+
"files": [
|
|
13
|
+
".medusa/server"
|
|
14
|
+
],
|
|
15
|
+
"exports": {
|
|
16
|
+
"./package.json": "./package.json",
|
|
17
|
+
"./admin": {
|
|
18
|
+
"import": "./.medusa/server/src/admin/index.mjs",
|
|
19
|
+
"require": "./.medusa/server/src/admin/index.js",
|
|
20
|
+
"default": "./.medusa/server/src/admin/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
23
|
+
"./modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
24
|
+
"./providers/*": "./.medusa/server/src/providers/*/index.js",
|
|
25
|
+
"./*": "./.medusa/server/src/*.js",
|
|
26
|
+
".": "./.medusa/server/src/modules/veeqo/index.js"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"medusa-plugin-integration",
|
|
30
|
+
"medusa-v2",
|
|
31
|
+
"medusa",
|
|
32
|
+
"veeqo",
|
|
33
|
+
"fulfillment",
|
|
34
|
+
"inventory",
|
|
35
|
+
"order sync"
|
|
36
|
+
],
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "medusa plugin:build",
|
|
39
|
+
"dev": "medusa plugin:develop",
|
|
40
|
+
"prepublishOnly": "medusa plugin:build",
|
|
41
|
+
"test:unit": "TEST_TYPE=unit NODE_OPTIONS=--experimental-vm-modules jest --silent --runInBand --detectOpenHandles --forceExit --passWithNoTests",
|
|
42
|
+
"test:integration:http": "TEST_TYPE=integration:http NODE_OPTIONS=--experimental-vm-modules jest --silent=false --runInBand --detectOpenHandles --forceExit"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"async-sema": "^3.1.1"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@medusajs/admin-sdk": "2.13.6",
|
|
49
|
+
"@medusajs/cli": "2.13.6",
|
|
50
|
+
"@medusajs/framework": "2.13.6",
|
|
51
|
+
"@medusajs/icons": "2.13.6",
|
|
52
|
+
"@medusajs/js-sdk": "2.13.6",
|
|
53
|
+
"@medusajs/medusa": "2.13.6",
|
|
54
|
+
"@medusajs/test-utils": "2.13.6",
|
|
55
|
+
"@medusajs/ui": "4.0.25",
|
|
56
|
+
"@swc/core": "^1.7.28",
|
|
57
|
+
"@swc/jest": "^0.2.39",
|
|
58
|
+
"@types/jest": "^30.0.0",
|
|
59
|
+
"@types/node": "^20.0.0",
|
|
60
|
+
"@types/react": "^18.3.2",
|
|
61
|
+
"@types/react-dom": "^18.2.25",
|
|
62
|
+
"jest": "^29.7.0",
|
|
63
|
+
"prop-types": "^15.8.1",
|
|
64
|
+
"react": "^18.2.0",
|
|
65
|
+
"react-dom": "^18.2.0",
|
|
66
|
+
"ts-node": "^10.9.2",
|
|
67
|
+
"typescript": "^5.6.2",
|
|
68
|
+
"vite": "^5.2.11",
|
|
69
|
+
"yalc": "^1.0.0-pre.53"
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"@medusajs/admin-sdk": "2.13.6",
|
|
73
|
+
"@medusajs/cli": "2.13.6",
|
|
74
|
+
"@medusajs/framework": "2.13.6",
|
|
75
|
+
"@medusajs/icons": "2.13.6",
|
|
76
|
+
"@medusajs/medusa": "2.13.6",
|
|
77
|
+
"@medusajs/test-utils": "2.13.6",
|
|
78
|
+
"@medusajs/ui": "4.0.25"
|
|
79
|
+
},
|
|
80
|
+
"engines": {
|
|
81
|
+
"node": ">=20"
|
|
82
|
+
}
|
|
83
|
+
}
|