medusa-shiprocket-fulfillment-plugin 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.
- package/.medusa/server/src/providers/shiprocket/client/handle-error.js +54 -22
- package/.medusa/server/src/providers/shiprocket/client/index.js +113 -74
- package/.medusa/server/src/providers/shiprocket/client/methods/authenticate.js +15 -16
- package/.medusa/server/src/providers/shiprocket/service.js +79 -76
- package/package.json +8 -8
- package/.medusa/server/src/admin/vite-env.d.js +0 -1
- package/.medusa/server/src/admin/widgets/printables.js +0 -82
|
@@ -1,27 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleError =
|
|
3
|
+
exports.handleError = handleError;
|
|
4
4
|
const utils_1 = require("@medusajs/utils");
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Handles Shiprocket API errors and converts them to MedusaError with appropriate types
|
|
7
|
+
* @param error - The Axios error from the API call
|
|
8
|
+
* @param context - Optional context about the operation for better error messages
|
|
9
|
+
*/
|
|
10
|
+
function handleError(error, context) {
|
|
11
|
+
const axiosError = error;
|
|
12
|
+
const statusCode = axiosError?.response?.status || 0;
|
|
13
|
+
const responseData = axiosError?.response?.data;
|
|
14
|
+
// Extract error message from Shiprocket response
|
|
15
|
+
let message = responseData?.message || axiosError?.message || "Unknown Shiprocket error";
|
|
16
|
+
// Add context to message if available
|
|
17
|
+
const contextStr = context?.operation
|
|
18
|
+
? `[${context.operation}]`
|
|
19
|
+
: "";
|
|
20
|
+
// Handle validation errors (field-level errors from Shiprocket)
|
|
21
|
+
if (responseData?.errors && typeof responseData.errors === "object") {
|
|
22
|
+
const validationErrors = Object.entries(responseData.errors)
|
|
23
|
+
.map(([field, msgs]) => {
|
|
24
|
+
const msgStr = Array.isArray(msgs) ? msgs.join(", ") : String(msgs);
|
|
25
|
+
return `${field}: ${msgStr}`;
|
|
26
|
+
})
|
|
17
27
|
.join("; ");
|
|
18
|
-
|
|
28
|
+
message = `Validation failed: ${validationErrors}`;
|
|
19
29
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
// Map HTTP status codes to appropriate MedusaError types
|
|
31
|
+
switch (statusCode) {
|
|
32
|
+
case 401:
|
|
33
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, `${contextStr} Shiprocket authentication failed. Please verify your API credentials.`);
|
|
34
|
+
case 404:
|
|
35
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `${contextStr} ${message}`);
|
|
36
|
+
case 429:
|
|
37
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, `${contextStr} Shiprocket rate limit exceeded. Please retry after a few seconds.`);
|
|
38
|
+
case 400:
|
|
39
|
+
case 422:
|
|
40
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `${contextStr} ${message}`);
|
|
41
|
+
case 405:
|
|
42
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `${contextStr} Invalid API method. This may indicate a plugin bug.`);
|
|
43
|
+
case 500:
|
|
44
|
+
case 502:
|
|
45
|
+
case 503:
|
|
46
|
+
case 504:
|
|
47
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `${contextStr} Shiprocket server error (${statusCode}). Please try again later.`);
|
|
48
|
+
default:
|
|
49
|
+
// Network errors or unknown status codes
|
|
50
|
+
if (axiosError?.code === "ECONNABORTED") {
|
|
51
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `${contextStr} Shiprocket request timed out. Please try again.`);
|
|
52
|
+
}
|
|
53
|
+
if (axiosError?.code === "ENOTFOUND" || axiosError?.code === "ECONNREFUSED") {
|
|
54
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `${contextStr} Unable to connect to Shiprocket. Please check your network connection.`);
|
|
55
|
+
}
|
|
56
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `${contextStr} ${message}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9zaGlwcm9ja2V0L2NsaWVudC9oYW5kbGUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwQkEsa0NBdUZDO0FBakhELDJDQUE2QztBQXFCN0M7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxLQUFjLEVBQUUsT0FBc0I7SUFDOUQsTUFBTSxVQUFVLEdBQUcsS0FBb0MsQ0FBQTtJQUN2RCxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUE7SUFDcEQsTUFBTSxZQUFZLEdBQUcsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUE7SUFFL0MsaURBQWlEO0lBQ2pELElBQUksT0FBTyxHQUFHLFlBQVksRUFBRSxPQUFPLElBQUksVUFBVSxFQUFFLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQTtJQUV4RixzQ0FBc0M7SUFDdEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxFQUFFLFNBQVM7UUFDakMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsR0FBRztRQUMxQixDQUFDLENBQUMsRUFBRSxDQUFBO0lBRVIsZ0VBQWdFO0lBQ2hFLElBQUksWUFBWSxFQUFFLE1BQU0sSUFBSSxPQUFPLFlBQVksQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7YUFDdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNuQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbkUsT0FBTyxHQUFHLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQTtRQUNoQyxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDZixPQUFPLEdBQUcsc0JBQXNCLGdCQUFnQixFQUFFLENBQUE7SUFDdEQsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCxRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ2pCLEtBQUssR0FBRztZQUNKLE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLEdBQUcsVUFBVSx3RUFBd0UsQ0FDeEYsQ0FBQTtRQUVMLEtBQUssR0FBRztZQUNKLE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLEdBQUcsVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUM3QixDQUFBO1FBRUwsS0FBSyxHQUFHO1lBQ0osTUFBTSxJQUFJLG1CQUFXLENBQ2pCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFDN0IsR0FBRyxVQUFVLG9FQUFvRSxDQUNwRixDQUFBO1FBRUwsS0FBSyxHQUFHLENBQUM7UUFDVCxLQUFLLEdBQUc7WUFDSixNQUFNLElBQUksbUJBQVcsQ0FDakIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixHQUFHLFVBQVUsSUFBSSxPQUFPLEVBQUUsQ0FDN0IsQ0FBQTtRQUVMLEtBQUssR0FBRztZQUNKLE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLEdBQUcsVUFBVSxzREFBc0QsQ0FDdEUsQ0FBQTtRQUVMLEtBQUssR0FBRyxDQUFDO1FBQ1QsS0FBSyxHQUFHLENBQUM7UUFDVCxLQUFLLEdBQUcsQ0FBQztRQUNULEtBQUssR0FBRztZQUNKLE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsR0FBRyxVQUFVLDZCQUE2QixVQUFVLDRCQUE0QixDQUNuRixDQUFBO1FBRUw7WUFDSSx5Q0FBeUM7WUFDekMsSUFBSSxVQUFVLEVBQUUsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksbUJBQVcsQ0FDakIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLEdBQUcsVUFBVSxrREFBa0QsQ0FDbEUsQ0FBQTtZQUNMLENBQUM7WUFFRCxJQUFJLFVBQVUsRUFBRSxJQUFJLEtBQUssV0FBVyxJQUFJLFVBQVUsRUFBRSxJQUFJLEtBQUssY0FBYyxFQUFFLENBQUM7Z0JBQzFFLE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsR0FBRyxVQUFVLHlFQUF5RSxDQUN6RixDQUFBO1lBQ0wsQ0FBQztZQUVELE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsR0FBRyxVQUFVLElBQUksT0FBTyxFQUFFLENBQzdCLENBQUE7SUFDVCxDQUFDO0FBQ0wsQ0FBQyJ9
|
|
@@ -7,6 +7,7 @@ const axios_1 = __importDefault(require("axios"));
|
|
|
7
7
|
const utils_1 = require("@medusajs/utils");
|
|
8
8
|
const authenticate_1 = require("./methods/authenticate");
|
|
9
9
|
const handle_error_1 = require("./handle-error");
|
|
10
|
+
const DEFAULT_TIMEOUT = 15000; // 15 seconds
|
|
10
11
|
class ShiprocketClient {
|
|
11
12
|
constructor(options) {
|
|
12
13
|
this.token = null;
|
|
@@ -20,9 +21,9 @@ class ShiprocketClient {
|
|
|
20
21
|
this.axios = axios_1.default.create({
|
|
21
22
|
baseURL: "https://apiv2.shiprocket.in/v1/external",
|
|
22
23
|
headers: { "Content-Type": "application/json" },
|
|
23
|
-
timeout:
|
|
24
|
+
timeout: options.timeout || DEFAULT_TIMEOUT,
|
|
24
25
|
});
|
|
25
|
-
// Interceptor to handle 401 Unauthorized
|
|
26
|
+
// Interceptor to handle 401 Unauthorized - auto-refresh token
|
|
26
27
|
this.axios.interceptors.response.use((response) => response, async (error) => {
|
|
27
28
|
const originalRequest = error.config;
|
|
28
29
|
if (error.response?.status === 401 &&
|
|
@@ -57,36 +58,46 @@ class ShiprocketClient {
|
|
|
57
58
|
await this.refreshToken();
|
|
58
59
|
}
|
|
59
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Calculate shipping rate for a route
|
|
63
|
+
*/
|
|
60
64
|
async calculate(data) {
|
|
61
65
|
await this.ensureToken();
|
|
62
66
|
try {
|
|
63
67
|
const response = await this.axios.get("/courier/serviceability/", { params: data });
|
|
64
68
|
const availableCouriers = response.data.data.available_courier_companies;
|
|
65
69
|
if (!availableCouriers?.length) {
|
|
66
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND,
|
|
70
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `No couriers available for route ${data.pickup_postcode} -> ${data.delivery_postcode}`);
|
|
67
71
|
}
|
|
72
|
+
// Filter by allowed courier IDs if specified
|
|
68
73
|
const filtered = data.allowed_courier_ids?.length
|
|
69
74
|
? availableCouriers.filter((c) => data.allowed_courier_ids.includes(c.id))
|
|
70
75
|
: availableCouriers;
|
|
71
76
|
if (!filtered?.length) {
|
|
72
77
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "No allowed couriers available for this route");
|
|
73
78
|
}
|
|
79
|
+
// Return cheapest rate
|
|
74
80
|
const cheapest = filtered.reduce((min, curr) => Number(curr.rate) < Number(min.rate) ? curr : min);
|
|
75
81
|
return Math.ceil(Number(cheapest?.rate) || 0);
|
|
76
82
|
}
|
|
77
83
|
catch (error) {
|
|
78
|
-
(
|
|
79
|
-
|
|
84
|
+
if (error instanceof utils_1.MedusaError)
|
|
85
|
+
throw error;
|
|
86
|
+
(0, handle_error_1.handleError)(error, { operation: "calculate" });
|
|
80
87
|
}
|
|
81
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Create an order in Shiprocket and assign AWB
|
|
91
|
+
*/
|
|
82
92
|
async create(fulfillment, items, order) {
|
|
83
93
|
await this.ensureToken();
|
|
84
|
-
const
|
|
94
|
+
const require = (val, name) => {
|
|
85
95
|
if (val === undefined || val === null || val === "") {
|
|
86
96
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Missing required field: ${name}`);
|
|
87
97
|
}
|
|
88
98
|
return val;
|
|
89
99
|
};
|
|
100
|
+
// Map order items by ID for quick lookup
|
|
90
101
|
const orderItemMap = new Map();
|
|
91
102
|
if (Array.isArray(order.items)) {
|
|
92
103
|
order.items.forEach((orderItem) => {
|
|
@@ -98,7 +109,8 @@ class ShiprocketClient {
|
|
|
98
109
|
let totalBreadth = 0;
|
|
99
110
|
let totalHeight = 0;
|
|
100
111
|
try {
|
|
101
|
-
|
|
112
|
+
// Format date as DD-MM-YYYY HH:mm
|
|
113
|
+
const orderDate = new Date(order.created_at)
|
|
102
114
|
.toLocaleString("en-GB", {
|
|
103
115
|
day: "2-digit", month: "2-digit", year: "numeric",
|
|
104
116
|
hour: "2-digit", minute: "2-digit", hour12: false,
|
|
@@ -106,7 +118,7 @@ class ShiprocketClient {
|
|
|
106
118
|
.replace(",", "")
|
|
107
119
|
.replace(/\//g, "-");
|
|
108
120
|
// Calculate totals and dimensions
|
|
109
|
-
|
|
121
|
+
for (const item of items) {
|
|
110
122
|
const orderItem = orderItemMap.get(item.line_item_id);
|
|
111
123
|
if (!orderItem) {
|
|
112
124
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Order item not found for fulfillment item: ${item.title}`);
|
|
@@ -115,47 +127,47 @@ class ShiprocketClient {
|
|
|
115
127
|
if (!variant) {
|
|
116
128
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Variant data missing for item: ${item.title}`);
|
|
117
129
|
}
|
|
118
|
-
const weight = Number(variant.weight || 0) / 1000;
|
|
130
|
+
const weight = Number(variant.weight || 0) / 1000; // Convert grams to kg
|
|
119
131
|
const length = Number(variant.length || 0);
|
|
120
132
|
const breadth = Number(variant.width || 0);
|
|
121
133
|
const height = Number(variant.height || 0);
|
|
122
134
|
if (!weight || !length || !breadth || !height) {
|
|
123
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Missing dimensions/weight for
|
|
135
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Missing dimensions/weight for "${item.title}". Update product variant settings.`);
|
|
124
136
|
}
|
|
125
137
|
const quantity = Number(item.quantity || item.raw_quantity?.value || 1);
|
|
126
138
|
totalWeight += weight * quantity;
|
|
127
139
|
totalLength = Math.max(totalLength, length);
|
|
128
140
|
totalBreadth = Math.max(totalBreadth, breadth);
|
|
129
141
|
totalHeight += height * quantity;
|
|
130
|
-
}
|
|
142
|
+
}
|
|
131
143
|
const shipping = order.shipping_address || fulfillment?.delivery_address || {};
|
|
132
144
|
const billing = order.billing_address || order.customer || {};
|
|
133
|
-
// Build
|
|
145
|
+
// Build order payload
|
|
134
146
|
const orderData = {
|
|
135
|
-
order_id: `${order.id}-${Math.floor(Date.now() / 1000)}`,
|
|
136
|
-
order_date,
|
|
147
|
+
order_id: `${order.id}-${Math.floor(Date.now() / 1000)}`,
|
|
148
|
+
order_date: orderDate,
|
|
137
149
|
pickup_location: this.pickup_location || "Primary",
|
|
138
|
-
billing_customer_name:
|
|
150
|
+
billing_customer_name: require(billing.first_name, "Billing First Name"),
|
|
139
151
|
billing_last_name: billing.last_name || "",
|
|
140
|
-
billing_address:
|
|
152
|
+
billing_address: require(shipping.address_1 || billing.address_1, "Billing Address"),
|
|
141
153
|
billing_address_2: shipping.address_2 || billing.address_2 || "",
|
|
142
|
-
billing_city:
|
|
143
|
-
billing_pincode: Number(
|
|
144
|
-
billing_state:
|
|
145
|
-
billing_country:
|
|
146
|
-
billing_email:
|
|
147
|
-
billing_phone: Number(
|
|
154
|
+
billing_city: require(shipping.city || billing.city, "Billing City"),
|
|
155
|
+
billing_pincode: Number(require(shipping.postal_code || billing.postal_code, "Billing Pincode")),
|
|
156
|
+
billing_state: require(shipping.province || billing.province, "Billing State"),
|
|
157
|
+
billing_country: require(shipping.country_code || billing.country_code || "IN", "Billing Country"),
|
|
158
|
+
billing_email: require(billing.email || order.email, "Billing Email"),
|
|
159
|
+
billing_phone: Number(require(shipping.phone || billing.phone, "Billing Phone").toString().replace(/[^0-9]/g, "")),
|
|
148
160
|
shipping_is_billing: true,
|
|
149
|
-
shipping_customer_name:
|
|
161
|
+
shipping_customer_name: require(shipping.first_name, "Shipping First Name"),
|
|
150
162
|
shipping_last_name: shipping.last_name || "",
|
|
151
|
-
shipping_address:
|
|
163
|
+
shipping_address: require(shipping.address_1, "Shipping Address"),
|
|
152
164
|
shipping_address_2: shipping.address_2 || "",
|
|
153
|
-
shipping_city:
|
|
154
|
-
shipping_pincode: Number(
|
|
155
|
-
shipping_country:
|
|
156
|
-
shipping_state:
|
|
157
|
-
shipping_email:
|
|
158
|
-
shipping_phone: Number(
|
|
165
|
+
shipping_city: require(shipping.city, "Shipping City"),
|
|
166
|
+
shipping_pincode: Number(require(shipping.postal_code, "Shipping Pincode")),
|
|
167
|
+
shipping_country: require(shipping.country_code || "IN", "Shipping Country"),
|
|
168
|
+
shipping_state: require(shipping.province, "Shipping State"),
|
|
169
|
+
shipping_email: require(billing.email || order.email, "Shipping Email"),
|
|
170
|
+
shipping_phone: Number(require(shipping.phone, "Shipping Phone").toString().replace(/[^0-9]/g, "")),
|
|
159
171
|
order_items: items.map((item) => {
|
|
160
172
|
const orderItem = orderItemMap.get(item.line_item_id);
|
|
161
173
|
const variant = orderItem.variant;
|
|
@@ -182,30 +194,31 @@ class ShiprocketClient {
|
|
|
182
194
|
height: totalHeight,
|
|
183
195
|
weight: totalWeight,
|
|
184
196
|
};
|
|
197
|
+
// Create order
|
|
185
198
|
const orderCreated = await this.axios
|
|
186
199
|
.post("/orders/create/adhoc", orderData)
|
|
187
200
|
.catch((err) => {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
:
|
|
193
|
-
|
|
201
|
+
const apiError = err?.response?.data?.errors;
|
|
202
|
+
if (apiError) {
|
|
203
|
+
const firstError = Object.values(apiError)[0];
|
|
204
|
+
const msg = Array.isArray(firstError) ? firstError[0] : firstError;
|
|
205
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Shiprocket: ${msg}`);
|
|
206
|
+
}
|
|
207
|
+
throw err;
|
|
194
208
|
});
|
|
195
209
|
if (!orderCreated.data?.shipment_id) {
|
|
196
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "
|
|
210
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Shiprocket order created but no shipment ID returned");
|
|
197
211
|
}
|
|
198
212
|
// Assign AWB
|
|
199
|
-
const
|
|
200
|
-
|
|
201
|
-
});
|
|
213
|
+
const awbPayload = { shipment_id: orderCreated.data.shipment_id };
|
|
214
|
+
const awbCreated = await this.axios.post("/courier/assign/awb", awbPayload);
|
|
202
215
|
if (awbCreated.data.awb_assign_status !== 1) {
|
|
203
|
-
//
|
|
216
|
+
// Cancel order to avoid stuck state
|
|
204
217
|
try {
|
|
205
218
|
await this.cancel(orderCreated.data.order_id);
|
|
206
219
|
}
|
|
207
|
-
catch
|
|
208
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, awbCreated.data.message || "AWB assignment failed");
|
|
220
|
+
catch { /* ignore */ }
|
|
221
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, awbCreated.data.message || "AWB assignment failed - no courier available");
|
|
209
222
|
}
|
|
210
223
|
const responseData = awbCreated.data.response.data;
|
|
211
224
|
return {
|
|
@@ -218,19 +231,26 @@ class ShiprocketClient {
|
|
|
218
231
|
};
|
|
219
232
|
}
|
|
220
233
|
catch (error) {
|
|
221
|
-
(
|
|
222
|
-
|
|
234
|
+
if (error instanceof utils_1.MedusaError)
|
|
235
|
+
throw error;
|
|
236
|
+
(0, handle_error_1.handleError)(error, { operation: "create", orderId: order?.id });
|
|
223
237
|
}
|
|
224
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* Cancel an order in Shiprocket
|
|
241
|
+
*/
|
|
225
242
|
async cancel(orderId) {
|
|
226
243
|
await this.ensureToken();
|
|
227
244
|
try {
|
|
228
|
-
await this.axios.post(
|
|
245
|
+
await this.axios.post("/orders/cancel", { ids: [orderId] });
|
|
229
246
|
}
|
|
230
247
|
catch (error) {
|
|
231
|
-
(0, handle_error_1.handleError)(error);
|
|
248
|
+
(0, handle_error_1.handleError)(error, { operation: "cancel", orderId });
|
|
232
249
|
}
|
|
233
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* Get tracking information for a shipment
|
|
253
|
+
*/
|
|
234
254
|
async getTrackingInfo(trackingNumber) {
|
|
235
255
|
await this.ensureToken();
|
|
236
256
|
try {
|
|
@@ -238,19 +258,17 @@ class ShiprocketClient {
|
|
|
238
258
|
return response.data;
|
|
239
259
|
}
|
|
240
260
|
catch (error) {
|
|
241
|
-
(0, handle_error_1.handleError)(error);
|
|
242
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Tracking failed");
|
|
261
|
+
(0, handle_error_1.handleError)(error, { operation: "tracking" });
|
|
243
262
|
}
|
|
244
263
|
}
|
|
264
|
+
/**
|
|
265
|
+
* Create a return order in Shiprocket
|
|
266
|
+
*/
|
|
245
267
|
async createReturn(fulfillment) {
|
|
246
268
|
await this.ensureToken();
|
|
247
|
-
// Implementation of Return Order
|
|
248
|
-
// Note: Shiprocket Return API requires specific fields.
|
|
249
|
-
// We assume 'fulfillment' contains necessary return details linked to the original order.
|
|
250
269
|
const returnData = {
|
|
251
270
|
order_id: `${fulfillment.id}-${Math.floor(Date.now() / 1000)}`,
|
|
252
|
-
order_date: new Date().toISOString().split(
|
|
253
|
-
cannel_id: "", // Optional
|
|
271
|
+
order_date: new Date().toISOString().split("T")[0],
|
|
254
272
|
pickup_customer_name: fulfillment.pickup_address?.first_name,
|
|
255
273
|
pickup_last_name: fulfillment.pickup_address?.last_name || "",
|
|
256
274
|
pickup_address: fulfillment.pickup_address?.address_1,
|
|
@@ -261,35 +279,40 @@ class ShiprocketClient {
|
|
|
261
279
|
pickup_pincode: fulfillment.pickup_address?.postal_code,
|
|
262
280
|
pickup_email: fulfillment.email,
|
|
263
281
|
pickup_phone: fulfillment.pickup_address?.phone,
|
|
264
|
-
order_items: fulfillment.items
|
|
282
|
+
order_items: fulfillment.items?.map((item) => ({
|
|
265
283
|
name: item.title,
|
|
266
284
|
sku: item.sku,
|
|
267
285
|
units: item.quantity,
|
|
268
286
|
selling_price: item.unit_price,
|
|
269
287
|
discount: "",
|
|
270
|
-
qc_enable: false
|
|
271
|
-
})),
|
|
288
|
+
qc_enable: false,
|
|
289
|
+
})) || [],
|
|
272
290
|
payment_method: "Prepaid",
|
|
273
291
|
total_discount: "0",
|
|
274
292
|
sub_total: fulfillment.sub_total || 0,
|
|
275
|
-
length: 10,
|
|
293
|
+
length: 10,
|
|
294
|
+
breadth: 10,
|
|
295
|
+
height: 10,
|
|
296
|
+
weight: 0.5,
|
|
276
297
|
};
|
|
277
298
|
try {
|
|
278
|
-
const response = await this.axios.post(
|
|
299
|
+
const response = await this.axios.post("/orders/create/return", returnData);
|
|
279
300
|
return response.data;
|
|
280
301
|
}
|
|
281
302
|
catch (error) {
|
|
282
|
-
(0, handle_error_1.handleError)(error);
|
|
283
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Failed to create return order");
|
|
303
|
+
(0, handle_error_1.handleError)(error, { operation: "createReturn" });
|
|
284
304
|
}
|
|
285
305
|
}
|
|
306
|
+
/**
|
|
307
|
+
* Generate documents (manifest, label, invoice) for a shipment
|
|
308
|
+
*/
|
|
286
309
|
async createDocuments(fulfillment) {
|
|
287
310
|
await this.ensureToken();
|
|
288
|
-
const
|
|
311
|
+
const safeGet = (url, params) => this.axios.get(url, { params }).catch(() => ({ data: null }));
|
|
289
312
|
const [manifestRes, labelRes, invoiceRes] = await Promise.all([
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
313
|
+
safeGet("/manifests/generate", { order_ids: [fulfillment.shipment_id] }),
|
|
314
|
+
safeGet("/courier/generate/label", { shipment_id: [fulfillment.shipment_id] }),
|
|
315
|
+
safeGet("/orders/print/invoice", { ids: [fulfillment.order_id] }),
|
|
293
316
|
]);
|
|
294
317
|
const extractUrl = (res, key, checkKey, checkVal) => {
|
|
295
318
|
if (!res?.data)
|
|
@@ -305,20 +328,36 @@ class ShiprocketClient {
|
|
|
305
328
|
invoice: extractUrl(invoiceRes, "invoice_url", "is_invoice_created", true),
|
|
306
329
|
};
|
|
307
330
|
}
|
|
331
|
+
/**
|
|
332
|
+
* Generate label for a shipment
|
|
333
|
+
*/
|
|
308
334
|
async generateLabel(fulfillment) {
|
|
309
335
|
await this.ensureToken();
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
336
|
+
try {
|
|
337
|
+
const res = await this.axios.get("/courier/generate/label", {
|
|
338
|
+
params: { shipment_id: [fulfillment.shipment_id] },
|
|
339
|
+
});
|
|
340
|
+
return res.data?.[0]?.label_url || "";
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
return "";
|
|
344
|
+
}
|
|
314
345
|
}
|
|
346
|
+
/**
|
|
347
|
+
* Generate invoice for an order
|
|
348
|
+
*/
|
|
315
349
|
async generateInvoice(fulfillment) {
|
|
316
350
|
await this.ensureToken();
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
351
|
+
try {
|
|
352
|
+
const res = await this.axios.get("/orders/print/invoice", {
|
|
353
|
+
params: { ids: [fulfillment.order_id] },
|
|
354
|
+
});
|
|
355
|
+
return res.data?.[0]?.invoice_url || "";
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
return "";
|
|
359
|
+
}
|
|
321
360
|
}
|
|
322
361
|
}
|
|
323
362
|
exports.default = ShiprocketClient;
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3NoaXByb2NrZXQvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTRDO0FBQzVDLDJDQUE2QztBQUM3Qyx5REFBcUQ7QUFDckQsaURBQTRDO0FBVTVDLE1BQXFCLGdCQUFnQjtJQVFqQyxZQUFZLE9BQWdDO1FBSHBDLFVBQUssR0FBa0IsSUFBSSxDQUFBO1FBQzNCLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFHdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLG1CQUFXLENBQ2pCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIseUNBQXlDLENBQzVDLENBQUE7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFBO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQTtRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUE7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSx5Q0FBeUM7WUFDbEQsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1lBQy9DLE9BQU8sRUFBRSxLQUFLO1NBQ2pCLENBQUMsQ0FBQTtRQUVGLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNoQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUN0QixLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDWixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBO1lB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
|
|
363
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3NoaXByb2NrZXQvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTRDO0FBQzVDLDJDQUE2QztBQUM3Qyx5REFBcUQ7QUFDckQsaURBQTRDO0FBVTVDLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQSxDQUFDLGFBQWE7QUFFM0MsTUFBcUIsZ0JBQWdCO0lBUWpDLFlBQVksT0FBZ0M7UUFIcEMsVUFBSyxHQUFrQixJQUFJLENBQUE7UUFDM0IsZUFBVSxHQUFHLEtBQUssQ0FBQTtRQUd0QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksbUJBQVcsQ0FDakIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5Q0FBeUMsQ0FDNUMsQ0FBQTtRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUE7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQTtRQUU5QyxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7WUFDdEIsT0FBTyxFQUFFLHlDQUF5QztZQUNsRCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksZUFBZTtTQUM5QyxDQUFDLENBQUE7UUFFRiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDaEMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFDdEIsS0FBSyxF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
|
|
@@ -1,38 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.authenticate =
|
|
3
|
+
exports.authenticate = authenticate;
|
|
4
4
|
const utils_1 = require("@medusajs/utils");
|
|
5
5
|
const handle_error_1 = require("../handle-error");
|
|
6
6
|
/**
|
|
7
7
|
* Authenticates with the Shiprocket API to get a token.
|
|
8
|
-
*
|
|
9
|
-
* @param email - The user's email.
|
|
10
|
-
* @param password - The user's password.
|
|
11
|
-
* @param isDisposed - Whether the client is disposed.
|
|
12
|
-
* @returns The authentication token and its expiry time.
|
|
8
|
+
* Token is valid for 10 days per Shiprocket docs.
|
|
13
9
|
*/
|
|
14
|
-
|
|
10
|
+
async function authenticate(axios, email, password, isDisposed) {
|
|
15
11
|
if (isDisposed) {
|
|
16
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Cannot authenticate disposed
|
|
12
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Cannot authenticate: client is disposed");
|
|
17
13
|
}
|
|
18
14
|
try {
|
|
19
15
|
const response = await axios.post("/auth/login", {
|
|
20
16
|
email,
|
|
21
17
|
password,
|
|
22
18
|
});
|
|
23
|
-
if (!response.data
|
|
24
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "
|
|
19
|
+
if (!response.data?.token) {
|
|
20
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Shiprocket authentication failed: no token received");
|
|
25
21
|
}
|
|
26
22
|
return {
|
|
27
23
|
token: response.data.token,
|
|
28
|
-
// Token valid for 10 days, refresh after 8
|
|
24
|
+
// Token valid for 10 days, refresh proactively after 8 days
|
|
29
25
|
tokenExpiry: Date.now() + 8 * 24 * 60 * 60 * 1000,
|
|
30
26
|
};
|
|
31
27
|
}
|
|
32
28
|
catch (error) {
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
// If it's already a MedusaError, rethrow it
|
|
30
|
+
if (error instanceof utils_1.MedusaError) {
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
// Otherwise, let handleError process the API error
|
|
34
|
+
(0, handle_error_1.handleError)(error, { operation: "authenticate" });
|
|
35
35
|
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9zaGlwcm9ja2V0L2NsaWVudC9tZXRob2RzL2F1dGhlbnRpY2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBNkM7QUFFN0Msa0RBQTZDO0FBRzdDOzs7Ozs7O0dBT0c7QUFDSSxNQUFNLFlBQVksR0FBRyxLQUFLLEVBQzdCLEtBQW9CLEVBQ3BCLEtBQWEsRUFDYixRQUFnQixFQUNoQixVQUFtQixFQUM0QixFQUFFO0lBQ2pELElBQUksVUFBVSxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDakIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLHFDQUFxQyxDQUN4QyxDQUFBO0lBQ0wsQ0FBQztJQUVELElBQUksQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBeUIsYUFBYSxFQUFFO1lBQ3JFLEtBQUs7WUFDTCxRQUFRO1NBQ1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLG1CQUFXLENBQ2pCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsOENBQThDLENBQ2pELENBQUE7UUFDTCxDQUFDO1FBRUQsT0FBTztZQUNILEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDMUIsMkNBQTJDO1lBQzNDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7U0FDcEQsQ0FBQTtJQUNMLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBQSwwQkFBVyxFQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xCLE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsb0NBQW9DLENBQ3ZDLENBQUE7SUFDTCxDQUFDO0FBQ0wsQ0FBQyxDQUFBO0FBdENZLFFBQUEsWUFBWSxnQkFzQ3hCIn0=
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9zaGlwcm9ja2V0L2NsaWVudC9tZXRob2RzL2F1dGhlbnRpY2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLG9DQXVDQztBQWhERCwyQ0FBNkM7QUFFN0Msa0RBQTZDO0FBRzdDOzs7R0FHRztBQUNJLEtBQUssVUFBVSxZQUFZLENBQzlCLEtBQW9CLEVBQ3BCLEtBQWEsRUFDYixRQUFnQixFQUNoQixVQUFtQjtJQUVuQixJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLG1CQUFXLENBQ2pCLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyx5Q0FBeUMsQ0FDNUMsQ0FBQTtJQUNMLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQXlCLGFBQWEsRUFBRTtZQUNyRSxLQUFLO1lBQ0wsUUFBUTtTQUNYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFEQUFxRCxDQUN4RCxDQUFBO1FBQ0wsQ0FBQztRQUVELE9BQU87WUFDSCxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQzFCLDREQUE0RDtZQUM1RCxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO1NBQ3BELENBQUE7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztRQUN0Qiw0Q0FBNEM7UUFDNUMsSUFBSSxLQUFLLFlBQVksbUJBQVcsRUFBRSxDQUFDO1lBQy9CLE1BQU0sS0FBSyxDQUFBO1FBQ2YsQ0FBQztRQUNELG1EQUFtRDtRQUNuRCxJQUFBLDBCQUFXLEVBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7SUFDckQsQ0FBQztBQUNMLENBQUMifQ==
|
|
@@ -6,10 +6,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const utils_1 = require("@medusajs/framework/utils");
|
|
7
7
|
const client_1 = __importDefault(require("./client"));
|
|
8
8
|
class ShipRocketFulfillmentProviderService extends utils_1.AbstractFulfillmentProviderService {
|
|
9
|
+
/**
|
|
10
|
+
* Validates the plugin options at startup.
|
|
11
|
+
* @param options - The plugin configuration options
|
|
12
|
+
* @throws Error if required options are missing
|
|
13
|
+
*/
|
|
14
|
+
static validateOptions(options) {
|
|
15
|
+
if (!options.email || typeof options.email !== "string") {
|
|
16
|
+
throw new Error("Shiprocket plugin requires 'email' option (API user email)");
|
|
17
|
+
}
|
|
18
|
+
if (!options.password || typeof options.password !== "string") {
|
|
19
|
+
throw new Error("Shiprocket plugin requires 'password' option (API user password)");
|
|
20
|
+
}
|
|
21
|
+
// Validate pickup_location if provided
|
|
22
|
+
if (options.pickup_location && typeof options.pickup_location !== "string") {
|
|
23
|
+
throw new Error("Shiprocket 'pickup_location' option must be a string");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
9
26
|
/**
|
|
10
27
|
* Constructs a new instance of the ShipRocketFulfillmentProviderService.
|
|
11
|
-
* @param {Logger} logger - The logger instance.
|
|
12
|
-
* @param {Options} options - The options for the Shiprocket client.
|
|
13
28
|
*/
|
|
14
29
|
constructor({ logger }, options) {
|
|
15
30
|
super();
|
|
@@ -19,21 +34,22 @@ class ShipRocketFulfillmentProviderService extends utils_1.AbstractFulfillmentPr
|
|
|
19
34
|
email: options.email,
|
|
20
35
|
password: options.password,
|
|
21
36
|
pickup_location: options.pickup_location,
|
|
37
|
+
timeout: options.timeout,
|
|
22
38
|
});
|
|
39
|
+
this.logger_.info("Shiprocket fulfillment provider initialized");
|
|
23
40
|
}
|
|
24
41
|
/**
|
|
25
42
|
* Returns the fulfillment options for Shiprocket.
|
|
26
|
-
* @returns An array of fulfillment options.
|
|
27
43
|
*/
|
|
28
44
|
async getFulfillmentOptions() {
|
|
29
45
|
return [
|
|
30
46
|
{
|
|
31
|
-
id: "
|
|
47
|
+
id: "shiprocket-standard",
|
|
32
48
|
name: "Standard Shipping",
|
|
33
49
|
is_return: false,
|
|
34
50
|
},
|
|
35
51
|
{
|
|
36
|
-
id: "
|
|
52
|
+
id: "shiprocket-return",
|
|
37
53
|
name: "Return Shipping",
|
|
38
54
|
is_return: true,
|
|
39
55
|
},
|
|
@@ -41,35 +57,41 @@ class ShipRocketFulfillmentProviderService extends utils_1.AbstractFulfillmentPr
|
|
|
41
57
|
}
|
|
42
58
|
/**
|
|
43
59
|
* Determines whether the fulfillment option can calculate the shipping rate.
|
|
44
|
-
* @param data - The fulfillment option data.
|
|
45
|
-
* @returns A promise that resolves to a boolean indicating whether the option can calculate the rate.
|
|
46
60
|
*/
|
|
47
|
-
async canCalculate(
|
|
61
|
+
async canCalculate(_data) {
|
|
48
62
|
return true;
|
|
49
63
|
}
|
|
50
64
|
/**
|
|
51
65
|
* Calculates the shipping rate for a given order.
|
|
52
|
-
* @param optionData - The fulfillment option data.
|
|
53
|
-
* @param data - The fulfillment data.
|
|
54
|
-
* @param context - The fulfillment context.
|
|
55
|
-
* @returns The calculated shipping rate.
|
|
56
|
-
* @throws {Error} If either pickup or delivery postcodes are missing.
|
|
57
|
-
* @throws {Error} If weight is missing.
|
|
58
66
|
*/
|
|
59
|
-
async calculatePrice(
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
throw new Error("Both pickup and delivery postcodes are required for rate calculation.");
|
|
67
|
+
async calculatePrice(_optionData, _data, context) {
|
|
68
|
+
const pickupPostcode = context["from_location"]?.address?.postal_code;
|
|
69
|
+
const deliveryPostcode = context["shipping_address"]?.postal_code;
|
|
70
|
+
if (!pickupPostcode) {
|
|
71
|
+
this.logger_.warn("Shiprocket: Missing pickup postcode. Ensure a Stock Location with an address is linked to the Sales Channel.");
|
|
72
|
+
}
|
|
73
|
+
if (!pickupPostcode || !deliveryPostcode) {
|
|
74
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Both pickup and delivery postcodes are required for rate calculation");
|
|
68
75
|
}
|
|
69
|
-
|
|
70
|
-
|
|
76
|
+
// Calculate total weight from items
|
|
77
|
+
const items = (context["items"] || []);
|
|
78
|
+
let totalWeightGrams = 0;
|
|
79
|
+
for (const item of items) {
|
|
80
|
+
const quantity = item.quantity || 1;
|
|
81
|
+
const itemWeight = item.variant?.weight ?? item.metadata?.weight ?? 0;
|
|
82
|
+
totalWeightGrams += itemWeight * quantity;
|
|
71
83
|
}
|
|
84
|
+
// Convert to kg, default to 0.5kg if no weight set
|
|
85
|
+
const weightKg = totalWeightGrams > 0 ? totalWeightGrams / 1000 : 0.5;
|
|
86
|
+
const params = {
|
|
87
|
+
pickup_postcode: pickupPostcode,
|
|
88
|
+
delivery_postcode: deliveryPostcode,
|
|
89
|
+
weight: weightKg,
|
|
90
|
+
cod: (this.options_.cod === "true" || this.options_.cod === 1) ? 1 : 0,
|
|
91
|
+
};
|
|
92
|
+
this.logger_.debug(`Shiprocket: Calculating rate for ${pickupPostcode} -> ${deliveryPostcode}, weight: ${weightKg}kg`);
|
|
72
93
|
const price = await this.client.calculate(params);
|
|
94
|
+
this.logger_.debug(`Shiprocket: Calculated rate: ${price}`);
|
|
73
95
|
return {
|
|
74
96
|
calculated_amount: price,
|
|
75
97
|
is_calculated_price_tax_inclusive: true,
|
|
@@ -77,15 +99,14 @@ class ShipRocketFulfillmentProviderService extends utils_1.AbstractFulfillmentPr
|
|
|
77
99
|
}
|
|
78
100
|
/**
|
|
79
101
|
* Creates a fulfillment in Shiprocket.
|
|
80
|
-
* @param data - The fulfillment data.
|
|
81
|
-
* @param items - The items in the fulfillment.
|
|
82
|
-
* @param order - The order associated with the fulfillment.
|
|
83
|
-
* @param fulfillment - The fulfillment data.
|
|
84
|
-
* @returns The created fulfillment data.
|
|
85
102
|
*/
|
|
86
103
|
async createFulfillment(data, items, order, fulfillment) {
|
|
104
|
+
const orderId = order?.id || "unknown";
|
|
105
|
+
this.logger_.info(`Shiprocket: Creating fulfillment for order ${orderId}`);
|
|
87
106
|
try {
|
|
88
107
|
const externalData = await this.client.create(fulfillment, items, order);
|
|
108
|
+
this.logger_.info(`Shiprocket: Fulfillment created - Order ID: ${externalData.order_id}, ` +
|
|
109
|
+
`Shipment ID: ${externalData.shipment_id}, AWB: ${externalData.awb}`);
|
|
89
110
|
const { label, manifest, invoice } = await this.client.createDocuments(externalData);
|
|
90
111
|
return {
|
|
91
112
|
data: {
|
|
@@ -97,34 +118,34 @@ class ShipRocketFulfillmentProviderService extends utils_1.AbstractFulfillmentPr
|
|
|
97
118
|
tracking_number: externalData.tracking_number || "",
|
|
98
119
|
tracking_url: externalData.tracking_url || "",
|
|
99
120
|
label_url: label || "",
|
|
100
|
-
// invoice_url: invoice || "", // types might not support this in label object, but okay to omit if not needed
|
|
101
121
|
},
|
|
102
122
|
],
|
|
103
123
|
};
|
|
104
124
|
}
|
|
105
125
|
catch (err) {
|
|
106
|
-
|
|
126
|
+
this.logger_.error(`Shiprocket: Failed to create fulfillment for order ${orderId}: ${err.message}`);
|
|
127
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, err?.message || "Failed to create fulfillment");
|
|
107
128
|
}
|
|
108
129
|
}
|
|
109
130
|
/**
|
|
110
131
|
* Cancels a fulfillment in Shiprocket.
|
|
111
|
-
* @param data - The fulfillment data.
|
|
112
|
-
* @throws {MedusaError} If the order ID is not provided.
|
|
113
132
|
*/
|
|
114
133
|
async cancelFulfillment(data) {
|
|
115
|
-
const
|
|
116
|
-
if (!
|
|
117
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "
|
|
134
|
+
const orderId = data.order_id;
|
|
135
|
+
if (!orderId) {
|
|
136
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Shiprocket order_id is required to cancel fulfillment");
|
|
118
137
|
}
|
|
119
|
-
|
|
138
|
+
this.logger_.info(`Shiprocket: Cancelling fulfillment for order ${orderId}`);
|
|
139
|
+
await this.client.cancel(orderId);
|
|
140
|
+
this.logger_.info(`Shiprocket: Fulfillment cancelled for order ${orderId}`);
|
|
120
141
|
}
|
|
121
142
|
/**
|
|
122
143
|
* Creates a return fulfillment in Shiprocket.
|
|
123
|
-
* @param fulfillment - The fulfillment data.
|
|
124
|
-
* @returns The created return fulfillment data.
|
|
125
144
|
*/
|
|
126
145
|
async createReturnFulfillment(fulfillment) {
|
|
146
|
+
this.logger_.info(`Shiprocket: Creating return fulfillment`);
|
|
127
147
|
const externalData = await this.client.createReturn(fulfillment);
|
|
148
|
+
this.logger_.info(`Shiprocket: Return fulfillment created - AWB: ${externalData.awb || externalData.tracking_number}`);
|
|
128
149
|
return {
|
|
129
150
|
data: {
|
|
130
151
|
...(fulfillment || {}),
|
|
@@ -140,65 +161,47 @@ class ShipRocketFulfillmentProviderService extends utils_1.AbstractFulfillmentPr
|
|
|
140
161
|
};
|
|
141
162
|
}
|
|
142
163
|
/**
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
const invoice = await this.client.generateInvoice(data);
|
|
149
|
-
return invoice || [];
|
|
164
|
+
* Retrieves the documents associated with a fulfillment.
|
|
165
|
+
*/
|
|
166
|
+
async getFulfillmentDocuments(_data) {
|
|
167
|
+
// Shiprocket documents are fetched during fulfillment creation
|
|
168
|
+
return [];
|
|
150
169
|
}
|
|
151
170
|
/**
|
|
152
171
|
* Retrieves the documents associated with a shipment.
|
|
153
|
-
* @param data - The shipment data.
|
|
154
|
-
* @returns An array of documents associated with the shipment.
|
|
155
172
|
*/
|
|
156
|
-
async getShipmentDocuments(
|
|
157
|
-
|
|
158
|
-
return
|
|
173
|
+
async getShipmentDocuments(_data) {
|
|
174
|
+
// Shiprocket documents are fetched during fulfillment creation
|
|
175
|
+
return [];
|
|
159
176
|
}
|
|
160
177
|
/**
|
|
161
178
|
* Retrieves the documents associated with a return fulfillment.
|
|
162
|
-
* @param data - The return fulfillment data.
|
|
163
|
-
* @returns An empty array, as document retrieval is not supported for returns.
|
|
164
179
|
*/
|
|
165
|
-
async getReturnDocuments(
|
|
180
|
+
async getReturnDocuments(_data) {
|
|
166
181
|
return [];
|
|
167
182
|
}
|
|
168
183
|
/**
|
|
169
|
-
* Retrieves the documents associated with a fulfillment
|
|
170
|
-
* @param fulfillmentData - The fulfillment data.
|
|
171
|
-
* @param documentType - The type of documents to retrieve.
|
|
172
|
-
* @returns A promise that resolves once the documents have been retrieved.
|
|
173
|
-
* @remarks Document retrieval is not supported by this provider.
|
|
184
|
+
* Retrieves the documents associated with a fulfillment by type.
|
|
174
185
|
*/
|
|
175
|
-
async retrieveDocuments(
|
|
176
|
-
this.logger_.debug("Document retrieval not supported");
|
|
186
|
+
async retrieveDocuments(_fulfillmentData, _documentType) {
|
|
187
|
+
this.logger_.debug("Shiprocket: Document retrieval by type not supported");
|
|
177
188
|
}
|
|
178
189
|
/**
|
|
179
|
-
* Validates the fulfillment data
|
|
180
|
-
* If the external ID is not present, it will be generated automatically.
|
|
181
|
-
* @param optionData - The data provided by the user when creating a fulfillment option.
|
|
182
|
-
* @param data - The data provided by the user when creating a fulfillment.
|
|
183
|
-
* @param context - The context of the fulfillment.
|
|
184
|
-
* @returns A promise that resolves with the validated fulfillment data.
|
|
190
|
+
* Validates the fulfillment data.
|
|
185
191
|
*/
|
|
186
|
-
async validateFulfillmentData(
|
|
192
|
+
async validateFulfillmentData(_optionData, data, _context) {
|
|
187
193
|
return {
|
|
188
194
|
...data,
|
|
189
|
-
external_id: `
|
|
195
|
+
external_id: `shiprocket_${Date.now()}`,
|
|
190
196
|
};
|
|
191
197
|
}
|
|
192
198
|
/**
|
|
193
|
-
* Validates a fulfillment option
|
|
194
|
-
* @param data - The data provided by the user when creating a fulfillment option.
|
|
195
|
-
* @returns A promise that resolves with a boolean indicating whether the option is valid.
|
|
196
|
-
* @remarks A fulfillment option is valid if it has an external ID.
|
|
199
|
+
* Validates a fulfillment option.
|
|
197
200
|
*/
|
|
198
201
|
async validateOption(data) {
|
|
199
|
-
return data.external_id !== undefined;
|
|
202
|
+
return data.id === "shiprocket-standard" || data.id === "shiprocket-return" || data.external_id !== undefined;
|
|
200
203
|
}
|
|
201
204
|
}
|
|
202
205
|
ShipRocketFulfillmentProviderService.identifier = "shiprocket";
|
|
203
206
|
exports.default = ShipRocketFulfillmentProviderService;
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvc2hpcHJvY2tldC9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQTRGO0FBYTVGLHNEQUF3QztBQWN4QyxNQUFNLG9DQUFxQyxTQUFRLDBDQUFrQztJQU9qRjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFnQztRQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFDRCx1Q0FBdUM7UUFDdkMsSUFBSSxPQUFPLENBQUMsZUFBZSxJQUFJLE9BQU8sT0FBTyxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6RSxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVksRUFBRSxNQUFNLEVBQXdCLEVBQUUsT0FBZ0I7UUFDMUQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZ0JBQWdCLENBQUM7WUFDL0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixl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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "medusa-shiprocket-fulfillment-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Shiprocket Fulfillment Provider Plugin for MedusaJS 2",
|
|
5
5
|
"author": "SAM-AEL",
|
|
6
6
|
"homepage": "https://github.com/SAM-AEL",
|
|
@@ -9,18 +9,15 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
".medusa/server"
|
|
11
11
|
],
|
|
12
|
+
"main": ".medusa/server/src/providers/shiprocket/index.js",
|
|
12
13
|
"exports": {
|
|
14
|
+
".": "./.medusa/server/src/providers/shiprocket/index.js",
|
|
13
15
|
"./package.json": "./package.json",
|
|
14
16
|
"./workflows": "./.medusa/server/src/workflows/index.js",
|
|
15
17
|
"./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
16
18
|
"./modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
17
19
|
"./providers/*": "./.medusa/server/src/providers/*/index.js",
|
|
18
|
-
"./*": "./.medusa/server/src/*.js"
|
|
19
|
-
"./admin": {
|
|
20
|
-
"import": "./.medusa/server/src/admin/index.mjs",
|
|
21
|
-
"require": "./.medusa/server/src/admin/index.js",
|
|
22
|
-
"default": "./.medusa/server/src/admin/index.js"
|
|
23
|
-
}
|
|
20
|
+
"./*": "./.medusa/server/src/*.js"
|
|
24
21
|
},
|
|
25
22
|
"keywords": [
|
|
26
23
|
"medusa",
|
|
@@ -34,6 +31,9 @@
|
|
|
34
31
|
"dev": "medusa plugin:develop",
|
|
35
32
|
"prepublishOnly": "medusa plugin:build"
|
|
36
33
|
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"axios": "^1.7.0"
|
|
36
|
+
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@medusajs/admin-sdk": "2.4.0",
|
|
39
39
|
"@medusajs/cli": "2.4.0",
|
|
@@ -80,4 +80,4 @@
|
|
|
80
80
|
"engines": {
|
|
81
81
|
"node": ">=20"
|
|
82
82
|
}
|
|
83
|
-
}
|
|
83
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
-
import { defineWidgetConfig } from "@medusajs/admin-sdk";
|
|
3
|
-
import { Container, Heading, Text } from "@medusajs/ui";
|
|
4
|
-
const ShiprocketTrackingWidget = ({ data: order }) => {
|
|
5
|
-
var _a;
|
|
6
|
-
if (!(order == null ? void 0 : order.id) || !(order == null ? void 0 : order.fulfillments)) return null;
|
|
7
|
-
const activeShipments = (_a = order.fulfillments) == null ? void 0 : _a.filter(
|
|
8
|
-
(f) => {
|
|
9
|
-
var _a2;
|
|
10
|
-
return !f.canceled_at && f.data.awb && f.data.shipment_id && ((_a2 = f.provider) == null ? void 0 : _a2.id) === "shiprocket_shiprocket";
|
|
11
|
-
}
|
|
12
|
-
);
|
|
13
|
-
return /* @__PURE__ */ jsxs(Container, { className: "p-6 rounded-lg shadow-lg border border-neutral-700", children: [
|
|
14
|
-
/* @__PURE__ */ jsx("header", { className: "mb-6", children: /* @__PURE__ */ jsx(Heading, { level: "h2", className: "font-semibold text-lg text-white", children: "Shiprocket Printables" }) }),
|
|
15
|
-
(activeShipments == null ? void 0 : activeShipments.length) === 0 ? /* @__PURE__ */ jsx(Text, { className: "text-sm italic text-gray-400", children: "No active shipments" }) : /* @__PURE__ */ jsx("ul", { className: "space-y-6", children: activeShipments.map((fulfillment) => {
|
|
16
|
-
var _a2, _b, _c, _d, _e, _f, _g;
|
|
17
|
-
return /* @__PURE__ */ jsxs(
|
|
18
|
-
"li",
|
|
19
|
-
{
|
|
20
|
-
className: "bg-neutral-900/10 rounded-xl shadow-none p-5 flex flex-col gap-4 border border-neutral-900/10",
|
|
21
|
-
children: [
|
|
22
|
-
/* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center", children: [
|
|
23
|
-
/* @__PURE__ */ jsxs(Text, { className: "text-sm text-gray-300 font-normal", children: [
|
|
24
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-normal text-white", children: "Shipment ID:" }),
|
|
25
|
-
" ",
|
|
26
|
-
((_a2 = fulfillment.data) == null ? void 0 : _a2.shipment_id) || "No AWB found"
|
|
27
|
-
] }),
|
|
28
|
-
/* @__PURE__ */ jsx("span", { className: `
|
|
29
|
-
px-2 py-1 rounded-lg shadow-none text-[9px] font-semibold uppercase select-none
|
|
30
|
-
${fulfillment.status === "delivered" ? "bg-green-500 text-black" : fulfillment.status === "pending" ? "bg-yellow-400 text-black" : "bg-red-700 text-white"}
|
|
31
|
-
min-w-[4.5rem] text-center`, children: fulfillment.status || "Cancelled" })
|
|
32
|
-
] }),
|
|
33
|
-
JSON.stringify(fulfillment, null, 2),
|
|
34
|
-
/* @__PURE__ */ jsxs("div", { className: "flex justify-center items-center gap-3 mt-4", children: [
|
|
35
|
-
((_b = fulfillment.labels) == null ? void 0 : _b.label_url) && /* @__PURE__ */ jsx(
|
|
36
|
-
"a",
|
|
37
|
-
{
|
|
38
|
-
href: `${(_c = fulfillment.labels) == null ? void 0 : _c.label_url}`,
|
|
39
|
-
target: "_blank",
|
|
40
|
-
rel: "noopener noreferrer",
|
|
41
|
-
className: "flex-1 px-4 py-1 text-xs bg-neutral-900/60 font-medium hover:bg-neutral-900/90 rounded-lg transition-colors text-center",
|
|
42
|
-
"aria-disabled": "false",
|
|
43
|
-
children: "Label"
|
|
44
|
-
}
|
|
45
|
-
),
|
|
46
|
-
((_d = fulfillment.labels) == null ? void 0 : _d.manifest_url) && /* @__PURE__ */ jsx(
|
|
47
|
-
"a",
|
|
48
|
-
{
|
|
49
|
-
href: `${(_e = fulfillment.labels) == null ? void 0 : _e.manifest_url}`,
|
|
50
|
-
target: "_blank",
|
|
51
|
-
rel: "noopener noreferrer",
|
|
52
|
-
className: "flex-1 px-4 py-1 text-xs bg-neutral-900/60 font-medium hover:bg-neutral-900/90 rounded-lg transition-colors text-center",
|
|
53
|
-
"aria-disabled": "false",
|
|
54
|
-
children: "Manifest"
|
|
55
|
-
}
|
|
56
|
-
),
|
|
57
|
-
((_f = fulfillment.labels) == null ? void 0 : _f.invoice_url) && /* @__PURE__ */ jsx(
|
|
58
|
-
"a",
|
|
59
|
-
{
|
|
60
|
-
href: `${(_g = fulfillment.labels) == null ? void 0 : _g.invoice_url}`,
|
|
61
|
-
target: "_blank",
|
|
62
|
-
rel: "noopener noreferrer",
|
|
63
|
-
className: "flex-1 px-4 py-1 text-xs bg-neutral-900/60 font-medium hover:bg-neutral-900/90 rounded-lg transition-colors text-center",
|
|
64
|
-
"aria-disabled": "false",
|
|
65
|
-
children: "Invoice"
|
|
66
|
-
}
|
|
67
|
-
)
|
|
68
|
-
] })
|
|
69
|
-
]
|
|
70
|
-
},
|
|
71
|
-
fulfillment.id
|
|
72
|
-
);
|
|
73
|
-
}) })
|
|
74
|
-
] });
|
|
75
|
-
};
|
|
76
|
-
const config = defineWidgetConfig({
|
|
77
|
-
zone: "order.details.side.after"
|
|
78
|
-
});
|
|
79
|
-
export {
|
|
80
|
-
config,
|
|
81
|
-
ShiprocketTrackingWidget as default
|
|
82
|
-
};
|