medusa-shiprocket-fulfillment-plugin 0.1.8 → 0.1.9

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.
@@ -10,8 +10,6 @@ const handle_error_1 = require("./handle-error");
10
10
  class ShiprocketClient {
11
11
  constructor(options) {
12
12
  this.token = null;
13
- this.tokenExpiry = null;
14
- this.refreshTimeout = null;
15
13
  this.isDisposed = false;
16
14
  if (!options.email || !options.password) {
17
15
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Shiprocket API credentials are required");
@@ -24,37 +22,43 @@ class ShiprocketClient {
24
22
  headers: { "Content-Type": "application/json" },
25
23
  timeout: 10000,
26
24
  });
27
- process.on("beforeExit", () => this.dispose());
25
+ // Interceptor to handle 401 Unauthorized automatically
26
+ this.axios.interceptors.response.use((response) => response, async (error) => {
27
+ const originalRequest = error.config;
28
+ if (error.response?.status === 401 &&
29
+ !originalRequest._retry &&
30
+ !originalRequest.url?.includes("/auth/login")) {
31
+ originalRequest._retry = true;
32
+ try {
33
+ await this.refreshToken();
34
+ originalRequest.headers["Authorization"] = `Bearer ${this.token}`;
35
+ return this.axios(originalRequest);
36
+ }
37
+ catch (refreshError) {
38
+ return Promise.reject(refreshError);
39
+ }
40
+ }
41
+ return Promise.reject(error);
42
+ });
28
43
  }
29
44
  dispose() {
45
+ this.isDisposed = true;
46
+ this.token = null;
47
+ }
48
+ async refreshToken() {
30
49
  if (this.isDisposed)
31
50
  return;
32
- if (this.refreshTimeout) {
33
- clearTimeout(this.refreshTimeout);
34
- this.refreshTimeout = null;
35
- }
36
- this.token = null;
37
- this.tokenExpiry = null;
38
- this.isDisposed = true;
51
+ const auth = await (0, authenticate_1.authenticate)(this.axios, this.email, this.password, this.isDisposed);
52
+ this.token = auth.token;
53
+ this.axios.defaults.headers.common["Authorization"] = `Bearer ${this.token}`;
39
54
  }
40
- async ensureAuthenticated() {
41
- if (!this.token || !this.tokenExpiry || Date.now() > this.tokenExpiry) {
42
- const auth = await (0, authenticate_1.authenticate)(this.axios, this.email, this.password, this.isDisposed);
43
- this.token = auth.token;
44
- this.tokenExpiry = auth.tokenExpiry;
45
- this.axios.defaults.headers.common["Authorization"] = `Bearer ${this.token}`;
46
- if (this.refreshTimeout)
47
- clearTimeout(this.refreshTimeout);
48
- this.refreshTimeout = setTimeout(() => {
49
- this.ensureAuthenticated().catch((error) => {
50
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to refresh Shiprocket token: ${error.message}`);
51
- });
52
- }, 8 * 24 * 60 * 60 * 1000 // Refresh after 8 days
53
- );
55
+ async ensureToken() {
56
+ if (!this.token) {
57
+ await this.refreshToken();
54
58
  }
55
59
  }
56
60
  async calculate(data) {
57
- await this.ensureAuthenticated();
61
+ await this.ensureToken();
58
62
  try {
59
63
  const response = await this.axios.get("/courier/serviceability/", { params: data });
60
64
  const availableCouriers = response.data.data.available_courier_companies;
@@ -76,8 +80,13 @@ class ShiprocketClient {
76
80
  }
77
81
  }
78
82
  async create(fulfillment, items, order) {
79
- await this.ensureAuthenticated();
80
- const safe = (v, fallback) => (v != null ? v : fallback);
83
+ await this.ensureToken();
84
+ const req = (val, name) => {
85
+ if (val === undefined || val === null || val === "") {
86
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Missing required field: ${name}`);
87
+ }
88
+ return val;
89
+ };
81
90
  const orderItemMap = new Map();
82
91
  if (Array.isArray(order.items)) {
83
92
  order.items.forEach((orderItem) => {
@@ -91,46 +100,27 @@ class ShiprocketClient {
91
100
  try {
92
101
  const order_date = new Date(order.created_at)
93
102
  .toLocaleString("en-GB", {
94
- day: "2-digit",
95
- month: "2-digit",
96
- year: "numeric",
97
- hour: "2-digit",
98
- minute: "2-digit",
99
- hour12: false,
103
+ day: "2-digit", month: "2-digit", year: "numeric",
104
+ hour: "2-digit", minute: "2-digit", hour12: false,
100
105
  })
101
106
  .replace(",", "")
102
107
  .replace(/\//g, "-");
103
- const totalCost = items.reduce((sum, fi) => {
104
- const orderItem = orderItemMap.get(fi.line_item_id);
105
- if (!orderItem) {
106
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Fulfillment item ${fi.id} (${fi.title}) has no matching order item with line_item_id: ${fi.line_item_id}`);
107
- }
108
- const unit = Number(orderItem.unit_price ?? orderItem.detail?.unit_price ?? 0);
109
- const qty = Number(fi.quantity ?? fi.raw_quantity?.value ?? 0);
110
- if (!unit || !qty) {
111
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Missing unit price or quantity for fulfillment item: ${JSON.stringify(fi)}`);
112
- }
113
- return sum + unit * qty;
114
- }, 0);
115
- const shipping = order.shipping_address || fulfillment?.delivery_address || {};
116
- const billing = order.customer || {};
117
- const region = order.region || {};
108
+ // Calculate totals and dimensions
118
109
  items.forEach((item) => {
119
110
  const orderItem = orderItemMap.get(item.line_item_id);
120
111
  if (!orderItem) {
121
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Order item not found for fulfillment item: ${item.title} (line_item_id: ${item.line_item_id})`);
112
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Order item not found for fulfillment item: ${item.title}`);
122
113
  }
123
114
  const variant = orderItem.variant;
124
115
  if (!variant) {
125
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Variant data not found for order item: ${orderItem.id}`);
116
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Variant data missing for item: ${item.title}`);
126
117
  }
127
118
  const weight = Number(variant.weight || 0) / 1000;
128
119
  const length = Number(variant.length || 0);
129
120
  const breadth = Number(variant.width || 0);
130
121
  const height = Number(variant.height || 0);
131
122
  if (!weight || !length || !breadth || !height) {
132
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Missing dimensions/weight for item "${item.title}" (Order Item: ${orderItem.id}, Variant: ${variant.id}).
133
- Please set weight, length, width, and height in the product variant settings in Medusa Admin.`);
123
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Missing dimensions/weight for item "${item.title}". Please update product variant settings.`);
134
124
  }
135
125
  const quantity = Number(item.quantity || item.raw_quantity?.value || 1);
136
126
  totalWeight += weight * quantity;
@@ -138,36 +128,38 @@ class ShiprocketClient {
138
128
  totalBreadth = Math.max(totalBreadth, breadth);
139
129
  totalHeight += height * quantity;
140
130
  });
131
+ const shipping = order.shipping_address || fulfillment?.delivery_address || {};
132
+ const billing = order.billing_address || order.customer || {};
133
+ // Build Order Payload with STRICT validation
141
134
  const orderData = {
142
- order_id: order.id + "-" + Math.random().toString().slice(2, 12),
135
+ order_id: `${order.id}-${Math.floor(Date.now() / 1000)}`, // Safer randomness
143
136
  order_date,
144
137
  pickup_location: this.pickup_location || "Primary",
145
- billing_customer_name: safe(billing.first_name, ""),
146
- billing_last_name: safe(billing.last_name, ""),
147
- billing_address: safe(shipping.address_1, ""),
148
- billing_address_2: safe(shipping.address_2, ""),
149
- billing_city: safe(shipping.city, ""),
150
- billing_pincode: Number(safe(shipping.postal_code, "110001")),
151
- billing_state: safe(shipping.province, ""),
152
- billing_country: safe(region.name, "India"),
153
- billing_email: safe(billing.email, ""),
154
- billing_phone: Number(safe(shipping.phone, "9999999999").toString().replace(/[^0-9]/g, "")),
138
+ billing_customer_name: req(billing.first_name, "Billing First Name"),
139
+ billing_last_name: billing.last_name || "",
140
+ billing_address: req(shipping.address_1 || billing.address_1, "Billing Address 1"),
141
+ billing_address_2: shipping.address_2 || billing.address_2 || "",
142
+ billing_city: req(shipping.city || billing.city, "Billing City"),
143
+ billing_pincode: Number(req(shipping.postal_code || billing.postal_code, "Billing Pincode")),
144
+ billing_state: req(shipping.province || billing.province, "Billing State"),
145
+ billing_country: req(shipping.country_code || billing.country_code || "IN", "Billing Country"),
146
+ billing_email: req(billing.email || order.email, "Billing Email"),
147
+ billing_phone: Number(req(shipping.phone || billing.phone, "Billing Phone").toString().replace(/[^0-9]/g, "")),
155
148
  shipping_is_billing: true,
156
- shipping_customer_name: safe(shipping.first_name, ""),
157
- shipping_last_name: safe(shipping.last_name, ""),
158
- shipping_address: safe(shipping.address_1, ""),
159
- shipping_address_2: safe(shipping.address_2, ""),
160
- shipping_city: safe(shipping.city, ""),
161
- shipping_pincode: Number(safe(shipping.postal_code, "110001")),
162
- shipping_country: safe(region.name, "India"),
163
- shipping_state: safe(shipping.province, ""),
164
- shipping_email: safe(billing.email, ""),
165
- shipping_phone: Number(safe(shipping.phone, "9999999999").toString().replace(/[^0-9]/g, "")),
149
+ shipping_customer_name: req(shipping.first_name, "Shipping First Name"),
150
+ shipping_last_name: shipping.last_name || "",
151
+ shipping_address: req(shipping.address_1, "Shipping Address 1"),
152
+ shipping_address_2: shipping.address_2 || "",
153
+ shipping_city: req(shipping.city, "Shipping City"),
154
+ shipping_pincode: Number(req(shipping.postal_code, "Shipping Pincode")),
155
+ shipping_country: req(shipping.country_code || "IN", "Shipping Country"),
156
+ shipping_state: req(shipping.province, "Shipping State"),
157
+ shipping_email: req(billing.email || order.email, "Shipping Email"),
158
+ shipping_phone: Number(req(shipping.phone, "Shipping Phone").toString().replace(/[^0-9]/g, "")),
166
159
  order_items: items.map((item) => {
167
160
  const orderItem = orderItemMap.get(item.line_item_id);
168
161
  const variant = orderItem.variant;
169
162
  const selling_price = Math.round(Number(orderItem.unit_price || orderItem.detail?.unit_price || 0));
170
- const hsn_code = variant.hs_code ? Number(variant.hs_code) : 0;
171
163
  return {
172
164
  name: item.title,
173
165
  sku: variant.sku || orderItem.variant_sku || item.sku || item.id,
@@ -175,15 +167,16 @@ class ShiprocketClient {
175
167
  selling_price,
176
168
  discount: "",
177
169
  tax: "",
178
- hsn: hsn_code,
170
+ hsn: Number(variant.hs_code || 0),
179
171
  };
180
172
  }),
181
173
  payment_method: "Prepaid",
182
- shipping_charges: 0,
183
- giftwrap_charges: 0,
184
- transaction_charges: 0,
185
- total_discount: Number(order.discount_total || 0),
186
- sub_total: totalCost,
174
+ sub_total: items.reduce((sum, item) => {
175
+ const orderItem = orderItemMap.get(item.line_item_id);
176
+ const price = Number(orderItem.unit_price || orderItem.detail?.unit_price || 0);
177
+ const qty = Number(item.quantity || item.raw_quantity?.value || 1);
178
+ return sum + (price * qty);
179
+ }, 0),
187
180
  length: totalLength,
188
181
  breadth: totalBreadth,
189
182
  height: totalHeight,
@@ -192,120 +185,140 @@ class ShiprocketClient {
192
185
  const orderCreated = await this.axios
193
186
  .post("/orders/create/adhoc", orderData)
194
187
  .catch((err) => {
188
+ // Extract deep error message if available
195
189
  const apiError = err;
196
190
  const firstError = apiError.response?.data?.errors
197
191
  ? Object.values(apiError.response.data.errors)[0][0]
198
- : "Unknown error";
199
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, firstError);
192
+ : err.message;
193
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Shiprocket Error: ${firstError}`);
200
194
  });
201
195
  if (!orderCreated.data?.shipment_id) {
202
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Failed to create Shiprocket order");
196
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Failed to create Shiprocket order: No shipment ID returned");
203
197
  }
198
+ // Assign AWB
204
199
  const awbCreated = await this.axios.post(`/courier/assign/awb`, {
205
200
  shipment_id: orderCreated.data.shipment_id,
206
- courier_id: orderCreated.data.courier_company_id,
207
201
  });
208
202
  if (awbCreated.data.awb_assign_status !== 1) {
203
+ // Try to cancel if AWB fails to avoid stuck orders
209
204
  try {
210
205
  await this.cancel(orderCreated.data.order_id);
211
206
  }
212
- catch (err) {
213
- // swallow cancel error but log upstream if needed
214
- }
207
+ catch (e) { /* ignore */ }
215
208
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, awbCreated.data.message || "AWB assignment failed");
216
209
  }
210
+ const responseData = awbCreated.data.response.data;
217
211
  return {
218
- order_id: orderCreated.data.order_id,
219
- shipment_id: orderCreated.data.shipment_id,
220
- status: orderCreated.data.status,
221
- status_code: orderCreated.data.status_code,
222
- awb: awbCreated.data.response.data.awb_code,
223
- courier_company_id: awbCreated.data.response.data.courier_company_id,
224
- courier_name: orderCreated.data.courier_name,
225
- tracking_number: awbCreated.data.response.data.awb_code,
226
- tracking_url: "https://shiprocket.co/tracking/" + awbCreated.data.response.data.awb_code,
227
- label_url: orderCreated.data.label_url,
228
- shipping_charges: orderCreated.data.shipping_charges,
229
- payment_method: orderCreated.data.payment_method,
230
- transaction_charges: orderCreated.data.transaction_charges,
231
- giftwrap_charges: orderCreated.data.giftwrap_charges,
212
+ ...orderCreated.data,
213
+ awb: responseData.awb_code,
214
+ courier_company_id: responseData.courier_company_id,
215
+ courier_name: responseData.courier_name || orderCreated.data.courier_name,
216
+ tracking_number: responseData.awb_code,
217
+ tracking_url: `https://shiprocket.co/tracking/${responseData.awb_code}`,
232
218
  };
233
219
  }
234
220
  catch (error) {
235
221
  (0, handle_error_1.handleError)(error);
236
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Order creation failed unexpectedly");
222
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Order creation failed");
237
223
  }
238
224
  }
239
225
  async cancel(orderId) {
240
- await this.ensureAuthenticated();
226
+ await this.ensureToken();
241
227
  try {
242
228
  await this.axios.post(`/orders/cancel`, { ids: [orderId] });
243
229
  }
244
230
  catch (error) {
245
231
  (0, handle_error_1.handleError)(error);
246
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, error.message || "Order cancellation failed unexpectedly");
247
232
  }
248
233
  }
249
234
  async getTrackingInfo(trackingNumber) {
250
- await this.ensureAuthenticated();
235
+ await this.ensureToken();
251
236
  try {
252
237
  const response = await this.axios.get(`/courier/track/awb/${trackingNumber}`);
253
238
  return response.data;
254
239
  }
255
240
  catch (error) {
256
241
  (0, handle_error_1.handleError)(error);
257
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Tracking info retrieval failed unexpectedly");
242
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Tracking failed");
258
243
  }
259
244
  }
260
245
  async createReturn(fulfillment) {
261
- await this.ensureAuthenticated();
262
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Not Implemented. Please create a return order manually.");
263
- return {
264
- order_id: fulfillment.external_id,
265
- shipment_id: fulfillment.external_id,
266
- status: "success",
267
- status_code: 200,
268
- awb: "1234567890",
269
- courier_company_id: 1,
270
- courier_name: "DHL",
271
- tracking_number: "1234567890",
272
- tracking_url: "",
273
- label_url: "",
274
- payment_method: "cod",
275
- shipping_charges: "0",
276
- transaction_charges: "0",
277
- giftwrap_charges: "0",
246
+ 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
+ const returnData = {
251
+ order_id: `${fulfillment.id}-${Math.floor(Date.now() / 1000)}`,
252
+ order_date: new Date().toISOString().split('T')[0],
253
+ cannel_id: "", // Optional
254
+ pickup_customer_name: fulfillment.pickup_address?.first_name,
255
+ pickup_last_name: fulfillment.pickup_address?.last_name || "",
256
+ pickup_address: fulfillment.pickup_address?.address_1,
257
+ pickup_address_2: fulfillment.pickup_address?.address_2 || "",
258
+ pickup_city: fulfillment.pickup_address?.city,
259
+ pickup_state: fulfillment.pickup_address?.province,
260
+ pickup_country: fulfillment.pickup_address?.country_code || "India",
261
+ pickup_pincode: fulfillment.pickup_address?.postal_code,
262
+ pickup_email: fulfillment.email,
263
+ pickup_phone: fulfillment.pickup_address?.phone,
264
+ order_items: fulfillment.items.map((item) => ({
265
+ name: item.title,
266
+ sku: item.sku,
267
+ units: item.quantity,
268
+ selling_price: item.unit_price,
269
+ discount: "",
270
+ qc_enable: false // default false
271
+ })),
272
+ payment_method: "Prepaid",
273
+ total_discount: "0",
274
+ sub_total: fulfillment.sub_total || 0,
275
+ length: 10, breadth: 10, height: 10, weight: 0.5 // defaults if missing on return items
278
276
  };
277
+ try {
278
+ const response = await this.axios.post(`/orders/create/return`, returnData);
279
+ return response.data;
280
+ }
281
+ 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");
284
+ }
279
285
  }
280
286
  async createDocuments(fulfillment) {
281
- await this.ensureAuthenticated();
282
- const manifest = await this.axios.get(`/manifests/generate`, {
283
- params: { order_ids: [fulfillment.shipment_id] },
284
- });
285
- const label = await this.axios.get(`/courier/generate/label`, {
286
- params: { shipment_id: [fulfillment.shipment_id] },
287
- });
288
- const invoice = await this.axios.get(`/orders/print/invoice`, {
289
- params: { ids: [fulfillment.order_id] },
290
- });
287
+ await this.ensureToken();
288
+ const createPromise = (url, params) => this.axios.get(url, { params }).catch(() => ({ data: null })); // Return null on fail to not break all
289
+ const [manifestRes, labelRes, invoiceRes] = await Promise.all([
290
+ createPromise(`/manifests/generate`, { order_ids: [fulfillment.shipment_id] }),
291
+ createPromise(`/courier/generate/label`, { shipment_id: [fulfillment.shipment_id] }),
292
+ createPromise(`/orders/print/invoice`, { ids: [fulfillment.order_id] })
293
+ ]);
294
+ const extractUrl = (res, key, checkKey, checkVal) => {
295
+ if (!res?.data)
296
+ return "";
297
+ const item = Array.isArray(res.data) ? res.data[0] : res.data;
298
+ if (checkKey && item[checkKey] !== checkVal)
299
+ return "";
300
+ return item[key] || "";
301
+ };
291
302
  return {
292
- label: label[0].label_created === 1 ? label[0].label_url : "",
293
- manifest: manifest[0].status === 1 ? manifest[0].manifest_url : "",
294
- invoice: invoice[0].is_invoice_created ? invoice[0].invoice_url : "",
303
+ manifest: extractUrl(manifestRes, "manifest_url", "status", 1),
304
+ label: extractUrl(labelRes, "label_url", "label_created", 1),
305
+ invoice: extractUrl(invoiceRes, "invoice_url", "is_invoice_created", true),
295
306
  };
296
307
  }
297
308
  async generateLabel(fulfillment) {
298
- const label = await this.axios.get(`/courier/generate/label`, {
299
- params: { shipment_id: [fulfillment.shipment_id] },
309
+ await this.ensureToken();
310
+ const res = await this.axios.get(`/courier/generate/label`, {
311
+ params: { shipment_id: [fulfillment.shipment_id] }
300
312
  });
301
- return label[0].label_url;
313
+ return res.data?.[0]?.label_url || "";
302
314
  }
303
315
  async generateInvoice(fulfillment) {
304
- const invoice = await this.axios.get(`/orders/print/invoice`, {
305
- params: { ids: [fulfillment.order_id] },
316
+ await this.ensureToken();
317
+ const res = await this.axios.get(`/orders/print/invoice`, {
318
+ params: { ids: [fulfillment.order_id] }
306
319
  });
307
- return invoice[0].invoice_url;
320
+ return res.data?.[0]?.invoice_url || "";
308
321
  }
309
322
  }
310
323
  exports.default = ShiprocketClient;
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3NoaXByb2NrZXQvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTRDO0FBQzVDLDJDQUE2QztBQUM3Qyx5REFBcUQ7QUFDckQsaURBQTRDO0FBVTVDLE1BQU0sZ0JBQWdCO0lBVWxCLFlBQVksT0FBZ0M7UUFMcEMsVUFBSyxHQUFrQixJQUFJLENBQUE7UUFDM0IsZ0JBQVcsR0FBa0IsSUFBSSxDQUFBO1FBQ2pDLG1CQUFjLEdBQTBCLElBQUksQ0FBQTtRQUM1QyxlQUFVLEdBQUcsS0FBSyxDQUFBO1FBR3RCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHlDQUF5QyxDQUM1QyxDQUFBO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQTtRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUE7UUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFBO1FBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsZUFBSyxDQUFDLE1BQU0sQ0FBQztZQUN0QixPQUFPLEVBQUUseUNBQXlDO1lBQ2xELE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtZQUMvQyxPQUFPLEVBQUUsS0FBSztTQUNqQixDQUFDLENBQUE7UUFDRixPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksSUFBSSxD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
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3NoaXByb2NrZXQvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTRDO0FBQzVDLDJDQUE2QztBQUM3Qyx5REFBcUQ7QUFDckQsaURBQTRDO0FBVTVDLE1BQXFCLGdCQUFnQjtJQVFqQyxZQUFZLE9BQWdDO1FBSHBDLFVBQUssR0FBa0IsSUFBSSxDQUFBO1FBQzNCLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFHdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLG1CQUFXLENBQ2pCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIseUNBQXlDLENBQzVDLENBQUE7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFBO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQTtRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUE7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSx5Q0FBeUM7WUFDbEQsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1lBQy9DLE9BQU8sRUFBRSxLQUFLO1NBQ2pCLENBQUMsQ0FBQTtRQUVGLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNoQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUN0QixLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDWixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBO1lB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
@@ -97,8 +97,7 @@ class ShipRocketFulfillmentProviderService extends utils_1.AbstractFulfillmentPr
97
97
  tracking_number: externalData.tracking_number || "",
98
98
  tracking_url: externalData.tracking_url || "",
99
99
  label_url: label || "",
100
- invoice_url: invoice || "",
101
- manifest_url: manifest || "",
100
+ // invoice_url: invoice || "", // types might not support this in label object, but okay to omit if not needed
102
101
  },
103
102
  ],
104
103
  };
@@ -126,7 +125,6 @@ class ShipRocketFulfillmentProviderService extends utils_1.AbstractFulfillmentPr
126
125
  */
127
126
  async createReturnFulfillment(fulfillment) {
128
127
  const externalData = await this.client.createReturn(fulfillment);
129
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Not Implemented. Please create a return order manually.");
130
128
  return {
131
129
  data: {
132
130
  ...(fulfillment || {}),
@@ -134,7 +132,7 @@ class ShipRocketFulfillmentProviderService extends utils_1.AbstractFulfillmentPr
134
132
  },
135
133
  labels: [
136
134
  {
137
- tracking_number: externalData.tracking_number || "",
135
+ tracking_number: externalData.tracking_number || externalData.awb || "",
138
136
  tracking_url: externalData.tracking_url || "",
139
137
  label_url: externalData.label_url || "",
140
138
  },
@@ -203,4 +201,4 @@ class ShipRocketFulfillmentProviderService extends utils_1.AbstractFulfillmentPr
203
201
  }
204
202
  ShipRocketFulfillmentProviderService.identifier = "shiprocket";
205
203
  exports.default = ShipRocketFulfillmentProviderService;
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvc2hpcHJvY2tldC9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQTRGO0FBYTVGLHNEQUF3QztBQWF4QyxNQUFNLG9DQUFxQyxTQUFRLDBDQUFrQztJQU9qRjs7OztPQUlHO0lBQ0gsWUFBWSxFQUFFLE1BQU0sRUFBd0IsRUFBRSxPQUFnQjtRQUMxRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztZQUMvQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTtTQUMzQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQjtRQUN2QixPQUFPO1lBQ0g7Z0JBQ0ksRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsU0FBUyxFQUFFLEtBQUs7YUFDbkI7WUFDRDtnQkFDSSxFQUFFLEVBQUUsaUJBQWlCO2dCQUNyQixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixTQUFTLEVBQUUsSUFBSTthQUNsQjtTQUNKLENBQUM7SUFDTixDQUFDO0lBR0Q7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBNkI7UUFDNUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNEOzs7Ozs7OztPQVFHO0lBRUgsS0FBSyxDQUFDLGNBQWMsQ0FDaEIsVUFBeUQsRUFDekQsSUFBNkMsRUFDN0MsT0FBbUQ7UUFFbkQsTUFBTSxNQUFNLEdBQUc7WUFD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
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvc2hpcHJvY2tldC9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQTRGO0FBYTVGLHNEQUF3QztBQWF4QyxNQUFNLG9DQUFxQyxTQUFRLDBDQUFrQztJQU9qRjs7OztPQUlHO0lBQ0gsWUFBWSxFQUFFLE1BQU0sRUFBd0IsRUFBRSxPQUFnQjtRQUMxRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztZQUMvQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTtTQUMzQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQjtRQUN2QixPQUFPO1lBQ0g7Z0JBQ0ksRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsU0FBUyxFQUFFLEtBQUs7YUFDbkI7WUFDRDtnQkFDSSxFQUFFLEVBQUUsaUJBQWlCO2dCQUNyQixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixTQUFTLEVBQUUsSUFBSTthQUNsQjtTQUNKLENBQUM7SUFDTixDQUFDO0lBR0Q7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBNkI7UUFDNUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNEOzs7Ozs7OztPQVFHO0lBRUgsS0FBSyxDQUFDLGNBQWMsQ0FDaEIsVUFBeUQsRUFDekQsSUFBNkMsRUFDN0MsT0FBbUQ7UUFFbkQsTUFBTSxNQUFNLEdBQUc7WUFD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
package/README.md CHANGED
@@ -1,236 +1,161 @@
1
- <h1 align="center">
2
- <br>
3
- <a href="http://www.shiprocket.in"><img src="https://i.postimg.cc/zGzTRdqp/id-Nga-I3rk-T-logos.png" alt="Markdownify" width="200"></a>
4
- <br>
5
- for Medusa 2.0+
6
- <br>
7
- </h1>
8
-
9
1
  <p align="center">
10
- <img src="https://img.shields.io/npm/v/medusa-cashfree-payment-plugin" alt="medusa-cashfree-payment-plugin">
11
- <img src="https://img.shields.io/npm/dw/medusa-cashfree-payment-plugin" alt="medusa-cashfree-payment-plugin">
12
- <img src="https://img.shields.io/github/contributors/SAM-AEL/medusa-cashfree-payment-plugin" alt="medusa-cashfree-payment-plugin">
13
- <img src="https://img.shields.io/github/last-commit/SAM-AEL/medusa-cashfree-payment-plugin" alt="medusa-cashfree-payment-plugin">
2
+ <a href="https://www.shiprocket.in">
3
+ <img src="https://custom-icon-badges.demolab.com/badge/Shiprocket-purple?style=for-the-badge&logo=package&logoColor=white" alt="Shiprocket Logo" height="50">
4
+ </a>
14
5
  </p>
15
-
16
- <h4 align="center">From checkout to doorstep — simplify logistics with <a href="https://www.shiprocket.in" target="_blank">Shiprocket</a> for Medusa.</h4>
6
+
7
+ <h1 align="center">Medusa Shiprocket Fulfillment Plugin</h1>
17
8
 
18
9
  <p align="center">
19
- <a href="#-features">Features</a> •
20
- <a href="#%EF%B8%8F-installation">Installation</a> •
21
- <a href="#-setup-guide">Setup Guide</a> •
22
- <a href="#-api-reference">API Reference</a> •
23
- <a href="#-troubleshooting">Troubleshooting</a> •
24
- <a href="#-contributing">Contributing</a> •
25
- <a href="#-license">License</a>
10
+ <strong>Seamless Logistics for Medusa v2 Stores in India 🇮🇳</strong>
26
11
  </p>
27
12
 
28
- ## ✨ Features
29
-
30
- - 🚚 **Seamless Shipping** - _Create and manage shipments directly from Medusa admin panel_
31
-
32
- - 💸 **Automated Rate Calculation** - _Fetch real-time courier rates at checkout_
33
-
34
- - ❌ **Easy Cancellations** - _Cancel shipments instantly from Medusa_
13
+ <p align="center">
14
+ <a href="https://www.npmjs.com/package/medusa-shiprocket-fulfillment-plugin">
15
+ <img src="https://img.shields.io/npm/v/medusa-shiprocket-fulfillment-plugin?color=blue&style=flat-square" alt="NPM Version">
16
+ </a>
17
+ <a href="https://www.npmjs.com/package/medusa-shiprocket-fulfillment-plugin">
18
+ <img src="https://img.shields.io/npm/dw/medusa-shiprocket-fulfillment-plugin?style=flat-square" alt="NPM Downloads">
19
+ </a>
20
+ <a href="https://github.com/SAM-AEL/medusa-shiprocket-fulfillment-plugin/blob/main/LICENSE">
21
+ <img src="https://img.shields.io/github/license/SAM-AEL/medusa-shiprocket-fulfillment-plugin?style=flat-square" alt="License">
22
+ </a>
23
+ </p>
35
24
 
36
- - 📦 **Pickup Location Support** - _Configure and use multiple Shiprocket pickup points_
25
+ <hr />
37
26
 
38
- - 🌍 **India-first Logistics** - _Optimized for Indian e-commerce and Shiprocket’s courier network_
27
+ ## 🚀 Overview
39
28
 
40
- ## 📋 Prerequisites
29
+ The **Medusa Shiprocket Fulfillment Plugin** integrates [Shiprocket](https://www.shiprocket.in/), India's leading logistics aggregator, directly into your [Medusa](https://medusajs.com/) store.
41
30
 
42
- - [MedusaJS](https://docs.medusajs.com/) 2 store
31
+ Streamline your shipping operations by automating rate calculations, order creation, label generation, and returns—all from within the Medusa Admin.
43
32
 
44
- - [Shiprocket](https://www.shiprocket.in/) account
33
+ **Compatible with Medusa v2.0+**
45
34
 
46
- ## 🚧 To Do:
35
+ ## Key Features
47
36
 
48
- - 💱 **Return Shipping** - _Initiate Refund and replacement directly through Admin Dashboard_
37
+ | Feature | Description |
38
+ | :--- | :--- |
39
+ | **💵 Automated Rates** | Fetch real-time shipping rates at checkout based on pickup and delivery pin codes. |
40
+ | **📦 Seamless Fulfillment** | Automatically create shipments in Shiprocket when you fulfill an order in Medusa. |
41
+ | **📄 Document Generation** | Generate and retrieve **Shipping Labels**, **Manifests**, and **Invoices** directly. |
42
+ | **↩️ Returns Management** | Handle return requests and generate reverse pickup shipments effortlessly. |
43
+ | **🇮🇳 India-First** | Optimized for Indian addresses, GST compliance, and domestic courier networks. |
44
+ | **🛑 Easy Cancellation** | Cancel shipments instantly from the Medusa Admin to void labels. |
49
45
 
50
- - 🔗 **Webhooks integration** - _Stay updated with shipment updates in Admin Dashboard_
46
+ ## 📋 Prerequisites
51
47
 
52
- - 🔎 **Live Tracking** - _Get shipment status and tracking updates without leaving Medusa Admin Dashboard_
48
+ Before you begin, ensure you have:
53
49
 
54
- - 📚 **Label, Manifest and Invoice** - _Directly accessible in Medusa Admin_
55
- - **_Rewrite the plugin with more optimizations and code cleanup._**
50
+ 1. A **[Medusa v2](https://docs.medusajs.com/)** server set up.
51
+ 2. A **[Shiprocket](https://app.shiprocket.in/register)** account.
52
+ 3. At least one **Pickup Location** configured in your Shiprocket dashboard.
56
53
 
57
54
  ## 🛠️ Installation
58
55
 
59
- #### Step 1: Install the Plugin
60
-
61
- Choose your preferred package manager:
56
+ Install the plugin using your preferred package manager:
62
57
 
63
58
  ```bash
59
+ npm install medusa-shiprocket-fulfillment-plugin
60
+ # or
61
+ yarn add medusa-shiprocket-fulfillment-plugin
62
+ ```
64
63
 
65
- # npm
66
-
67
- npm install medusa-shiprocket-fulfillment-plugin
68
-
69
-
70
-
71
- # yarn
72
-
73
- yarn add medusa-shiprocket-fulfillment-plugin
74
-
64
+ ## ⚙️ Configuration
75
65
 
66
+ ### 1. Environment Variables
76
67
 
77
- # pnpm
68
+ Add your Shiprocket credentials to your `.env` file.
78
69
 
79
- pnpm add medusa-shiprocket-fulfillment-plugin
70
+ > [!WARNING]
71
+ > **Security Note**: Never commit your actual API passwords to version control (git).
80
72
 
73
+ ```bash
74
+ SHIPROCKET_EMAIL="your_email@example.com"
75
+ SHIPROCKET_PASSWORD="your_shiprocket_password"
76
+ # Must match the 'Nickname' of a pickup location in your Shiprocket settings
77
+ SHIPROCKET_PICKUP_LOCATION="Primary"
81
78
  ```
82
79
 
83
- #### Step 2: Configure Plugin
80
+ ### 2. Medusa Config
84
81
 
85
- Add the plugin to your `medusa-config.js`:
82
+ Register the plugin in your `medusa-config.js` (or `medusa-config.ts`) file. You need to add it to both the `modules` (for the fulfillment provider) and `plugins` (if you are using any admin widgets, though currently optional).
86
83
 
87
84
  ```javascript
88
85
  module.exports = defineConfig({
89
-
90
- // other configs
91
-
86
+ // ... other config
92
87
  modules: [
93
-
94
- // other plugins
95
-
96
88
  {
97
89
  resolve: "@medusajs/medusa/fulfillment",
98
90
  options: {
99
91
  providers: [
100
92
  {
101
- resolve:
102
- "medusa-shiprocket-fulfillment-plugin/providers/shiprocket",
93
+ resolve: "medusa-shiprocket-fulfillment-plugin",
103
94
  id: "shiprocket",
104
95
  options: {
105
96
  email: process.env.SHIPROCKET_EMAIL,
106
97
  password: process.env.SHIPROCKET_PASSWORD,
107
98
  pickup_location: process.env.SHIPROCKET_PICKUP_LOCATION,
99
+ /**
100
+ * Set "true" (string) to enable Cash on Delivery support.
101
+ * This maps the payment method 'cod' to Shiprocket's COD logic.
102
+ */
103
+ cod: "false",
108
104
  },
109
105
  },
110
106
  ],
111
107
  },
112
108
  },
113
109
  ],
114
- plugins: [
115
- {
116
- resolve: "medusa-shiprocket-fulfillment-plugin",
117
- options: {
118
- email: process.env.SHIPROCKET_EMAIL,
119
- password: process.env.SHIPROCKET_PASSWORD,
120
- pickup_location: process.env.SHIPROCKET_PICKUP_LOCATION,
121
- },
122
- },
123
- ],
124
110
  });
125
111
  ```
126
112
 
127
- #### Step 3: Environment Variables
113
+ ## 💻 Usage Guide
128
114
 
129
- Create or update your `.env` file:
115
+ ### Enabling the Provider
130
116
 
131
- ```env
117
+ 1. Log in to your **Medusa Admin**.
118
+ 2. Go to **Settings** → **Regions**.
119
+ 3. Select the region you want to ship to (e.g., "India").
120
+ 4. In the **Fulfillment Providers** section, edit and ensure `shiprocket` is selected.
121
+ 5. Save changes.
132
122
 
133
- # Shiprocket Configuration
123
+ ### Shipping Options
134
124
 
135
- SHIPROCKET_EMAIL=your email
136
- SHIPROCKET_PASSWORD=password
137
- SHIPROCKET_PICKUP_LOCATION=Primary
125
+ You can now create Shipping Options (e.g., "Standard Shipping") that use the **shiprocket** provider.
126
+ - **Calculated**: Choose "Calculated" price type to use Shiprocket's real-time rate API.
138
127
 
139
- ```
140
-
141
- > ⚠️ **Security Note**: Never commit your production credentials to version control.
128
+ ### Creating a Fulfillment (Shipment)
129
+ When you fulfill an order in the Medusa Admin:
130
+ 1. The plugin creates an order in Shiprocket.
131
+ 2. It attempts to automatically assign an AWB (Air Waybill) using Shiprocket's "adhoc" API.
132
+ 3. If successful, the **Tracking Number** and **Tracking URL** are saved to the fulfillment in Medusa.
142
133
 
143
- ### ⚙️ Configuration Options
134
+ ## 🐛 Troubleshooting
144
135
 
145
- | Option | Type | Required | Default | Description |
146
- | ----------------- | ------ | -------- | ------- | ------------------------------------------------------------------------------------ |
147
- | `email` | string | ✅ | - | Your Shiprocket account email |
148
- | `password` | string | ✅ | - | Your Shiprocket account password |
149
- | `pickup_location` | string | ✅ | - | The Shiprocket pickup location name (must match one created in Shiprocket dashboard) |
136
+ ### "Rate calculation failed"
137
+ - Ensure both the **Store Address** (Pickup) and **Customer Address** (Delivery) have valid 6-digit Indian pincodes.
138
+ - Check that the `weight` is set on your Product Variants (in grams or per your Shiprocket config). Shiprocket requires weight to calculate rates.
150
139
 
151
- ### 🎯 Setup Guide
140
+ ### "Authentication failed"
141
+ - Double-check your `SHIPROCKET_EMAIL` and `SHIPROCKET_PASSWORD` in `.env`.
142
+ - The plugin auto-refreshes tokens, but invalid credentials will block this.
152
143
 
153
- ### Enable Fulfillment Provider
144
+ ## 🤝 Contributing
154
145
 
155
- 1. Navigate to **Medusa Admin Settings Regions**
156
- 2. Select your target region - India (or any region you want Shiprocket to serve).
157
- 3. In **Fulfillment Providers**, select `shiprocket`.
158
- 4. Click **Save Changes**.
146
+ Contributions are welcome! If you find a bug or want to add a feature:
159
147
 
160
- ---
148
+ 1. Fork the repository.
149
+ 2. Create a feature branch (`git checkout -b feature/amazing-feature`).
150
+ 3. Commit your changes.
151
+ 4. Open a Pull Request.
161
152
 
162
- ### Configure Shiprocket Credentials
153
+ ## 📄 License
163
154
 
164
- 1. Go to your [Shiprocket Dashboard](https://app.shiprocket.in/).
165
- 2. Ensure you have:
166
- - **Email** and **Password** of your Shiprocket account.
167
- - At least one **Pickup Location** set up (e.g., `Primary`).
168
- 3. Add credentials to your `.env` file:
169
-
170
- ### 🔧 API Reference
171
-
172
- This plugin implements the complete `AbstractFulfillmentProvider` interface:
173
-
174
- #### Core Methods
175
-
176
- - `createFulfillment()` - Create a fulfillment in Shiprocket.
177
- - `cancelFulfillment()` - Cancel a fulfillment in Shiprocket.
178
- - `getFulfillmentDocuments()` - Retrieve labels, manifests, and invoices for a fulfillment.
179
- - `getTrackingInfo()` - Get tracking information for a shipment.
180
-
181
- #### Utility Methods
182
-
183
- - `calculateShippingRate()` - Calculate shipping rates for an order.
184
- - `createReturn()` - Create a return shipment in Shiprocket.
185
- - `generateLabel()` - Generate shipping label for a fulfillment.
186
- - `generateInvoice()` - Generate invoice for a fulfillment.
187
-
188
- ### 🐛 Troubleshooting
189
-
190
- **_Plugin not appearing in admin_**
191
-
192
- - Follow the setup and reload the server.
193
-
194
- **_Admin UI Widget not working_**
195
-
196
- - Add the plugin to plugin import in medusa-config. reload the server.
197
-
198
- ### Getting Help
199
-
200
- - 📖 [Shiprocket API Documentation](https://api.shiprocket.in/)
201
-
202
- - 💬 [MedusaJS Discord](https://discord.gg/medusajs)
203
-
204
- - 🐛 [Report Issues](https://github.com/SAM-AEL/medusa-shiprocket-fulfillment-plugin/issues)
205
-
206
- ### 🤝 Contributing
207
-
208
- We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
209
-
210
- 1. Fork the repository
211
-
212
- 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
213
-
214
- 3. Commit your changes (`git commit -m 'Add amazing feature'`)
215
-
216
- 4. Push to the branch (`git push origin feature/amazing-feature`)
217
-
218
- 5. Open a Pull Request
219
-
220
- ### 📄 License
221
-
222
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
223
-
224
- ### 🙏 Acknowledgments
225
-
226
- - [MedusaJS](https://medusajs.com/) - for the best open-source e-commerce platform.
227
-
228
- - [Shiprocket](https://www.shiprocket.in/) - for making the life of a shipper easier.
155
+ This project is licensed under the [MIT License](LICENSE).
229
156
 
230
157
  ---
231
158
 
232
- <h1 align="center">
233
- <br>
234
- Thank you 🫶
235
- <br>
236
- </h1>
159
+ <p align="center">
160
+ Built with ❤️ by <a href="https://github.com/SAM-AEL">SAM-AEL</a>
161
+ </p>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "medusa-shiprocket-fulfillment-plugin",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "Shiprocket Fulfillment Provider Plugin for MedusaJS 2",
5
5
  "author": "SAM-AEL",
6
6
  "homepage": "https://github.com/SAM-AEL",
@@ -75,4 +75,4 @@
75
75
  "engines": {
76
76
  "node": ">=20"
77
77
  }
78
- }
78
+ }