medusa-shiprocket-fulfillment-plugin 0.3.1 → 0.3.2
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/api/middlewares.js +15 -0
- package/.medusa/server/src/api/store/shiprocket/delivery-estimate/cache.js +54 -0
- package/.medusa/server/src/api/store/shiprocket/delivery-estimate/rate-limiter.js +92 -0
- package/.medusa/server/src/api/store/shiprocket/delivery-estimate/route.js +150 -0
- package/.medusa/server/src/providers/shiprocket/client/index.js +88 -1
- package/README.md +51 -0
- package/package.json +2 -2
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const http_1 = require("@medusajs/framework/http");
|
|
4
|
+
exports.default = (0, http_1.defineMiddlewares)({
|
|
5
|
+
routes: [
|
|
6
|
+
{
|
|
7
|
+
// Make delivery estimate endpoint public (no API key required)
|
|
8
|
+
matcher: "/store/shiprocket/delivery-estimate",
|
|
9
|
+
middlewares: [],
|
|
10
|
+
// Disable authentication for this route
|
|
11
|
+
bodyParser: { sizeLimit: "1kb" },
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBQTREO0FBRTVELGtCQUFlLElBQUEsd0JBQWlCLEVBQUM7SUFDN0IsTUFBTSxFQUFFO1FBQ0o7WUFDSSwrREFBK0Q7WUFDL0QsT0FBTyxFQUFFLHFDQUFxQztZQUM5QyxXQUFXLEVBQUUsRUFBRTtZQUNmLHdDQUF3QztZQUN4QyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1NBQ25DO0tBQ0o7Q0FDSixDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Simple in-memory cache with TTL for delivery estimates
|
|
4
|
+
* Cache key: `${pickup_pincode}-${delivery_pincode}-${weight}-${cod}`
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.deliveryEstimateCache = void 0;
|
|
8
|
+
exports.getCacheKey = getCacheKey;
|
|
9
|
+
class SimpleCache {
|
|
10
|
+
constructor(ttlMs = 10 * 60 * 1000, maxSize = 1000) {
|
|
11
|
+
this.cache = new Map();
|
|
12
|
+
// Default: 10 minutes TTL, max 1000 entries
|
|
13
|
+
this.ttlMs = ttlMs;
|
|
14
|
+
this.maxSize = maxSize;
|
|
15
|
+
}
|
|
16
|
+
get(key) {
|
|
17
|
+
const entry = this.cache.get(key);
|
|
18
|
+
if (!entry)
|
|
19
|
+
return null;
|
|
20
|
+
// Check if expired
|
|
21
|
+
if (Date.now() > entry.expiresAt) {
|
|
22
|
+
this.cache.delete(key);
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return entry.data;
|
|
26
|
+
}
|
|
27
|
+
set(key, data) {
|
|
28
|
+
// Evict oldest entries if cache is full
|
|
29
|
+
if (this.cache.size >= this.maxSize) {
|
|
30
|
+
const oldestKey = this.cache.keys().next().value;
|
|
31
|
+
if (oldestKey)
|
|
32
|
+
this.cache.delete(oldestKey);
|
|
33
|
+
}
|
|
34
|
+
this.cache.set(key, {
|
|
35
|
+
data,
|
|
36
|
+
expiresAt: Date.now() + this.ttlMs,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
clear() {
|
|
40
|
+
this.cache.clear();
|
|
41
|
+
}
|
|
42
|
+
get size() {
|
|
43
|
+
return this.cache.size;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Singleton cache instance for delivery estimates (10 min TTL)
|
|
47
|
+
exports.deliveryEstimateCache = new SimpleCache(10 * 60 * 1000);
|
|
48
|
+
/**
|
|
49
|
+
* Generate cache key for delivery estimate
|
|
50
|
+
*/
|
|
51
|
+
function getCacheKey(pickupPincode, deliveryPincode, weight, cod) {
|
|
52
|
+
return `${pickupPincode}-${deliveryPincode}-${weight || 0.5}-${cod || 0}`;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3NoaXByb2NrZXQvZGVsaXZlcnktZXN0aW1hdGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBMkRILGtDQU9DO0FBM0RELE1BQU0sV0FBVztJQUtiLFlBQVksUUFBZ0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsVUFBa0IsSUFBSTtRQUoxRCxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUE7UUFLNUMsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO0lBQzFCLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBVztRQUNYLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFdkIsbUJBQW1CO1FBQ25CLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN0QixPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUE7SUFDckIsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBTztRQUNwQix3Q0FBd0M7UUFDeEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUE7WUFDaEQsSUFBSSxTQUFTO2dCQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQy9DLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDaEIsSUFBSTtZQUNKLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUs7U0FDckMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3RCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFBO0lBQzFCLENBQUM7Q0FDSjtBQUVELCtEQUErRDtBQUNsRCxRQUFBLHFCQUFxQixHQUFHLElBQUksV0FBVyxDQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUE7QUFFekU7O0dBRUc7QUFDSCxTQUFnQixXQUFXLENBQ3ZCLGFBQXFCLEVBQ3JCLGVBQXVCLEVBQ3ZCLE1BQWUsRUFDZixHQUFZO0lBRVosT0FBTyxHQUFHLGFBQWEsSUFBSSxlQUFlLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7QUFDN0UsQ0FBQyJ9
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Simple in-memory rate limiter using sliding window
|
|
4
|
+
* Limits requests per IP address
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.rateLimiter = void 0;
|
|
8
|
+
exports.getClientIdentifier = getClientIdentifier;
|
|
9
|
+
class RateLimiter {
|
|
10
|
+
constructor(maxRequests = 30, windowMs = 60 * 1000) {
|
|
11
|
+
this.requests = new Map();
|
|
12
|
+
// Default: 30 requests per minute per IP
|
|
13
|
+
this.maxRequests = maxRequests;
|
|
14
|
+
this.windowMs = windowMs;
|
|
15
|
+
// Cleanup old entries every 5 minutes
|
|
16
|
+
setInterval(() => this.cleanup(), 5 * 60 * 1000);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Check if request should be allowed
|
|
20
|
+
* @returns true if allowed, false if rate limited
|
|
21
|
+
*/
|
|
22
|
+
isAllowed(identifier) {
|
|
23
|
+
const now = Date.now();
|
|
24
|
+
const entry = this.requests.get(identifier);
|
|
25
|
+
if (!entry) {
|
|
26
|
+
// First request from this identifier
|
|
27
|
+
this.requests.set(identifier, { count: 1, windowStart: now });
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
// Check if window has expired
|
|
31
|
+
if (now - entry.windowStart > this.windowMs) {
|
|
32
|
+
// Reset window
|
|
33
|
+
this.requests.set(identifier, { count: 1, windowStart: now });
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
// Window still active
|
|
37
|
+
if (entry.count >= this.maxRequests) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
// Increment count
|
|
41
|
+
entry.count++;
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get remaining requests for an identifier
|
|
46
|
+
*/
|
|
47
|
+
getRemaining(identifier) {
|
|
48
|
+
const entry = this.requests.get(identifier);
|
|
49
|
+
if (!entry)
|
|
50
|
+
return this.maxRequests;
|
|
51
|
+
const now = Date.now();
|
|
52
|
+
if (now - entry.windowStart > this.windowMs) {
|
|
53
|
+
return this.maxRequests;
|
|
54
|
+
}
|
|
55
|
+
return Math.max(0, this.maxRequests - entry.count);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get time until rate limit resets (in seconds)
|
|
59
|
+
*/
|
|
60
|
+
getResetTime(identifier) {
|
|
61
|
+
const entry = this.requests.get(identifier);
|
|
62
|
+
if (!entry)
|
|
63
|
+
return 0;
|
|
64
|
+
const now = Date.now();
|
|
65
|
+
const resetAt = entry.windowStart + this.windowMs;
|
|
66
|
+
return Math.max(0, Math.ceil((resetAt - now) / 1000));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Clean up expired entries
|
|
70
|
+
*/
|
|
71
|
+
cleanup() {
|
|
72
|
+
const now = Date.now();
|
|
73
|
+
for (const [key, entry] of this.requests.entries()) {
|
|
74
|
+
if (now - entry.windowStart > this.windowMs) {
|
|
75
|
+
this.requests.delete(key);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Singleton rate limiter: 30 requests per minute
|
|
81
|
+
exports.rateLimiter = new RateLimiter(30, 60 * 1000);
|
|
82
|
+
/**
|
|
83
|
+
* Get client identifier from request (IP address)
|
|
84
|
+
*/
|
|
85
|
+
function getClientIdentifier(req) {
|
|
86
|
+
return (req.headers["x-forwarded-for"]?.split(",")[0]?.trim() ||
|
|
87
|
+
req.headers["x-real-ip"] ||
|
|
88
|
+
req.socket?.remoteAddress ||
|
|
89
|
+
req.ip ||
|
|
90
|
+
"unknown");
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZS1saW1pdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9zdG9yZS9zaGlwcm9ja2V0L2RlbGl2ZXJ5LWVzdGltYXRlL3JhdGUtbGltaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFrR0gsa0RBUUM7QUFuR0QsTUFBTSxXQUFXO0lBS2IsWUFBWSxjQUFzQixFQUFFLEVBQUUsV0FBbUIsRUFBRSxHQUFHLElBQUk7UUFKMUQsYUFBUSxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFBO1FBS2hELHlDQUF5QztRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUV4QixzQ0FBc0M7UUFDdEMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsVUFBa0I7UUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRTNDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNULHFDQUFxQztZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1lBQzdELE9BQU8sSUFBSSxDQUFBO1FBQ2YsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMx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
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AUTHENTICATE = void 0;
|
|
7
|
+
exports.GET = GET;
|
|
8
|
+
const client_1 = __importDefault(require("../../../../providers/shiprocket/client"));
|
|
9
|
+
const cache_1 = require("./cache");
|
|
10
|
+
const rate_limiter_1 = require("./rate-limiter");
|
|
11
|
+
// Make this route public (no publishable API key required)
|
|
12
|
+
exports.AUTHENTICATE = false;
|
|
13
|
+
// Cache for pickup location pincode (long TTL - 1 hour)
|
|
14
|
+
let cachedPickupPincode = null;
|
|
15
|
+
/**
|
|
16
|
+
* GET /store/shiprocket/delivery-estimate
|
|
17
|
+
*
|
|
18
|
+
* Check delivery serviceability and get estimated delivery dates for a pincode.
|
|
19
|
+
*
|
|
20
|
+
* Features:
|
|
21
|
+
* - Rate limited: 30 requests per minute per IP
|
|
22
|
+
* - Cached: Results cached for 10 minutes
|
|
23
|
+
* - Auto-fetches pickup pincode from Shiprocket using SHIPROCKET_PICKUP_LOCATION
|
|
24
|
+
*
|
|
25
|
+
* Query parameters:
|
|
26
|
+
* - delivery_pincode: The delivery destination pincode (required)
|
|
27
|
+
* - pickup_pincode: The pickup location pincode (optional, auto-fetched from SHIPROCKET_PICKUP_LOCATION)
|
|
28
|
+
* - weight: Package weight in kg (optional, defaults to 0.5)
|
|
29
|
+
* - cod: Cash on delivery flag, 0 or 1 (optional, defaults to 0)
|
|
30
|
+
*
|
|
31
|
+
* Returns:
|
|
32
|
+
* - serviceable: boolean indicating if delivery is possible
|
|
33
|
+
* - fastest_delivery: the fastest courier option with estimated date
|
|
34
|
+
* - all_options: all available courier options sorted by delivery time
|
|
35
|
+
*/
|
|
36
|
+
async function GET(req, res) {
|
|
37
|
+
// Rate limiting check
|
|
38
|
+
const clientId = (0, rate_limiter_1.getClientIdentifier)(req);
|
|
39
|
+
if (!rate_limiter_1.rateLimiter.isAllowed(clientId)) {
|
|
40
|
+
const resetTime = rate_limiter_1.rateLimiter.getResetTime(clientId);
|
|
41
|
+
res.setHeader("X-RateLimit-Limit", "30");
|
|
42
|
+
res.setHeader("X-RateLimit-Remaining", "0");
|
|
43
|
+
res.setHeader("X-RateLimit-Reset", resetTime.toString());
|
|
44
|
+
res.setHeader("Retry-After", resetTime.toString());
|
|
45
|
+
return res.status(429).json({
|
|
46
|
+
error: "Too many requests",
|
|
47
|
+
message: `Rate limit exceeded. Try again in ${resetTime} seconds.`,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Set rate limit headers
|
|
51
|
+
res.setHeader("X-RateLimit-Limit", "30");
|
|
52
|
+
res.setHeader("X-RateLimit-Remaining", rate_limiter_1.rateLimiter.getRemaining(clientId).toString());
|
|
53
|
+
const { pickup_pincode, delivery_pincode, weight, cod } = req.query;
|
|
54
|
+
// Get credentials from environment
|
|
55
|
+
const email = process.env.SHIPROCKET_EMAIL;
|
|
56
|
+
const password = process.env.SHIPROCKET_PASSWORD;
|
|
57
|
+
const pickupLocation = process.env.SHIPROCKET_PICKUP_LOCATION;
|
|
58
|
+
// Validate credentials are configured
|
|
59
|
+
if (!email || !password) {
|
|
60
|
+
return res.status(500).json({
|
|
61
|
+
error: "Configuration error",
|
|
62
|
+
message: "Shiprocket credentials not configured. Set SHIPROCKET_EMAIL and SHIPROCKET_PASSWORD environment variables.",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Validate delivery pincode is provided
|
|
66
|
+
if (!delivery_pincode) {
|
|
67
|
+
return res.status(400).json({
|
|
68
|
+
error: "Missing delivery_pincode",
|
|
69
|
+
message: "'delivery_pincode' query parameter is required",
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Validate delivery pincode format (Indian pincodes are 6 digits)
|
|
73
|
+
const pincodeRegex = /^\d{6}$/;
|
|
74
|
+
if (!pincodeRegex.test(delivery_pincode)) {
|
|
75
|
+
return res.status(400).json({
|
|
76
|
+
error: "Invalid delivery_pincode",
|
|
77
|
+
message: "Delivery pincode must be a 6-digit number",
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
let client = null;
|
|
81
|
+
try {
|
|
82
|
+
// Create client instance
|
|
83
|
+
client = new client_1.default({ email, password });
|
|
84
|
+
// Determine pickup pincode
|
|
85
|
+
let pickupPincode = pickup_pincode;
|
|
86
|
+
if (!pickupPincode) {
|
|
87
|
+
// Check if we have a cached pickup pincode
|
|
88
|
+
if (cachedPickupPincode && Date.now() < cachedPickupPincode.expiresAt) {
|
|
89
|
+
pickupPincode = cachedPickupPincode.value;
|
|
90
|
+
}
|
|
91
|
+
else if (pickupLocation) {
|
|
92
|
+
// Fetch from Shiprocket using the location name
|
|
93
|
+
const fetchedPincode = await client.getPickupPincode(pickupLocation);
|
|
94
|
+
if (fetchedPincode) {
|
|
95
|
+
pickupPincode = fetchedPincode;
|
|
96
|
+
// Cache for 1 hour
|
|
97
|
+
cachedPickupPincode = {
|
|
98
|
+
value: fetchedPincode,
|
|
99
|
+
expiresAt: Date.now() + 60 * 60 * 1000,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (!pickupPincode) {
|
|
105
|
+
return res.status(400).json({
|
|
106
|
+
error: "Missing pickup pincode",
|
|
107
|
+
message: "Either provide 'pickup_pincode' query parameter or set SHIPROCKET_PICKUP_LOCATION environment variable to auto-fetch the pincode",
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// Validate pickup pincode format
|
|
111
|
+
if (!pincodeRegex.test(pickupPincode)) {
|
|
112
|
+
return res.status(400).json({
|
|
113
|
+
error: "Invalid pickup_pincode",
|
|
114
|
+
message: "Pickup pincode must be a 6-digit number",
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
// Check cache for delivery estimate
|
|
118
|
+
const cacheKey = (0, cache_1.getCacheKey)(pickupPincode, delivery_pincode, weight ? parseFloat(weight) : undefined, cod ? parseInt(cod) : undefined);
|
|
119
|
+
const cachedResult = cache_1.deliveryEstimateCache.get(cacheKey);
|
|
120
|
+
if (cachedResult) {
|
|
121
|
+
res.setHeader("X-Cache", "HIT");
|
|
122
|
+
return res.json(cachedResult);
|
|
123
|
+
}
|
|
124
|
+
res.setHeader("X-Cache", "MISS");
|
|
125
|
+
// Get delivery estimate
|
|
126
|
+
const estimate = await client.getDeliveryEstimate({
|
|
127
|
+
pickup_postcode: pickupPincode,
|
|
128
|
+
delivery_postcode: delivery_pincode,
|
|
129
|
+
weight: weight ? parseFloat(weight) : undefined,
|
|
130
|
+
cod: cod ? parseInt(cod) : undefined,
|
|
131
|
+
});
|
|
132
|
+
// Cache the result
|
|
133
|
+
cache_1.deliveryEstimateCache.set(cacheKey, estimate);
|
|
134
|
+
return res.json(estimate);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
console.error("Delivery estimate error:", error);
|
|
138
|
+
return res.status(500).json({
|
|
139
|
+
error: "Failed to get delivery estimate",
|
|
140
|
+
message: error.message || "An unexpected error occurred",
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
// Dispose client after use
|
|
145
|
+
if (client) {
|
|
146
|
+
client.dispose();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3NoaXByb2NrZXQvZGVsaXZlcnktZXN0aW1hdGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBZ0NBLGtCQTJJQztBQTFLRCxxRkFBc0U7QUFDdEUsbUNBQTREO0FBQzVELGlEQUFpRTtBQUVqRSwyREFBMkQ7QUFDOUMsUUFBQSxZQUFZLEdBQUcsS0FBSyxDQUFBO0FBRWpDLHdEQUF3RDtBQUN4RCxJQUFJLG1CQUFtQixHQUFnRCxJQUFJLENBQUE7QUFFM0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0ksS0FBSyxVQUFVLEdBQUcsQ0FDckIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsc0JBQXNCO0lBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUEsa0NBQW1CLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDekMsSUFBSSxDQUFDLDBCQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsMEJBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDcEQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4QyxHQUFHLENBQUMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzNDLEdBQUcsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDeEQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDbEQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN4QixLQUFLLEVBQUUsbUJBQW1CO1lBQzFCLE9BQU8sRUFBRSxxQ0FB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
|
|
@@ -58,6 +58,33 @@ class ShiprocketClient {
|
|
|
58
58
|
await this.refreshToken();
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Get all pickup locations with their pincodes
|
|
63
|
+
* @param locationName Optional - filter by location name/nickname
|
|
64
|
+
*/
|
|
65
|
+
async getPickupLocations(locationName) {
|
|
66
|
+
await this.ensureToken();
|
|
67
|
+
try {
|
|
68
|
+
const response = await this.axios.get("/settings/company/pickup");
|
|
69
|
+
const locations = response.data.data.shipping_address || [];
|
|
70
|
+
// Filter by location name if provided
|
|
71
|
+
if (locationName) {
|
|
72
|
+
return locations.filter((loc) => loc.pickup_location.toLowerCase() === locationName.toLowerCase());
|
|
73
|
+
}
|
|
74
|
+
return locations;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
(0, handle_error_1.handleError)(error, { operation: "getPickupLocations" });
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get pincode for a pickup location by name
|
|
83
|
+
*/
|
|
84
|
+
async getPickupPincode(locationName) {
|
|
85
|
+
const locations = await this.getPickupLocations(locationName);
|
|
86
|
+
return locations[0]?.pin_code || null;
|
|
87
|
+
}
|
|
61
88
|
/**
|
|
62
89
|
* Calculate shipping rate for a route
|
|
63
90
|
*/
|
|
@@ -86,6 +113,66 @@ class ShiprocketClient {
|
|
|
86
113
|
(0, handle_error_1.handleError)(error, { operation: "calculate" });
|
|
87
114
|
}
|
|
88
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Get delivery estimate for a route - returns fastest delivery date
|
|
118
|
+
*/
|
|
119
|
+
async getDeliveryEstimate(data) {
|
|
120
|
+
await this.ensureToken();
|
|
121
|
+
try {
|
|
122
|
+
const response = await this.axios.get("/courier/serviceability/", {
|
|
123
|
+
params: {
|
|
124
|
+
pickup_postcode: data.pickup_postcode,
|
|
125
|
+
delivery_postcode: data.delivery_postcode,
|
|
126
|
+
weight: data.weight || 0.5,
|
|
127
|
+
cod: data.cod || 0,
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
const availableCouriers = response.data.data.available_courier_companies;
|
|
131
|
+
if (!availableCouriers?.length) {
|
|
132
|
+
return {
|
|
133
|
+
serviceable: false,
|
|
134
|
+
fastest_delivery: null,
|
|
135
|
+
all_options: [],
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// Calculate estimated delivery date based on days
|
|
139
|
+
const today = new Date();
|
|
140
|
+
const calculateDeliveryDate = (days) => {
|
|
141
|
+
const deliveryDate = new Date(today);
|
|
142
|
+
deliveryDate.setDate(deliveryDate.getDate() + days);
|
|
143
|
+
return deliveryDate.toISOString().split("T")[0];
|
|
144
|
+
};
|
|
145
|
+
// Map and sort by delivery days (fastest first)
|
|
146
|
+
const allOptions = availableCouriers
|
|
147
|
+
.map((courier) => ({
|
|
148
|
+
courier_name: courier.courier_name,
|
|
149
|
+
courier_company_id: courier.id,
|
|
150
|
+
estimated_days: parseInt(courier.days) || 0,
|
|
151
|
+
estimated_delivery_date: calculateDeliveryDate(parseInt(courier.days) || 0),
|
|
152
|
+
rate: Math.ceil(Number(courier.rate) || 0),
|
|
153
|
+
is_surface: courier.is_surface,
|
|
154
|
+
}))
|
|
155
|
+
.sort((a, b) => a.estimated_days - b.estimated_days);
|
|
156
|
+
return {
|
|
157
|
+
serviceable: true,
|
|
158
|
+
fastest_delivery: allOptions[0] || null,
|
|
159
|
+
all_options: allOptions,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
if (error instanceof utils_1.MedusaError)
|
|
164
|
+
throw error;
|
|
165
|
+
// Return not serviceable for 404 errors
|
|
166
|
+
if (error?.response?.status === 404) {
|
|
167
|
+
return {
|
|
168
|
+
serviceable: false,
|
|
169
|
+
fastest_delivery: null,
|
|
170
|
+
all_options: [],
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
(0, handle_error_1.handleError)(error, { operation: "getDeliveryEstimate" });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
89
176
|
/**
|
|
90
177
|
* Create an order in Shiprocket and assign AWB
|
|
91
178
|
*/
|
|
@@ -360,4 +447,4 @@ class ShiprocketClient {
|
|
|
360
447
|
}
|
|
361
448
|
}
|
|
362
449
|
exports.default = ShiprocketClient;
|
|
363
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3NoaXByb2NrZXQvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTRDO0FBQzVDLDJDQUE2QztBQUM3Qyx5REFBcUQ7QUFDckQsaURBQTRDO0FBVTVDLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQSxDQUFDLGFBQWE7QUFFM0MsTUFBcUIsZ0JBQWdCO0lBUWpDLFlBQVksT0FBZ0M7UUFIcEMsVUFBSyxHQUFrQixJQUFJLENBQUE7UUFDM0IsZUFBVSxHQUFHLEtBQUssQ0FBQTtRQUd0QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksbUJBQVcsQ0FDakIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5Q0FBeUMsQ0FDNUMsQ0FBQTtRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUE7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQTtRQUU5QyxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7WUFDdEIsT0FBTyxFQUFFLHlDQUF5QztZQUNsRCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksZUFBZTtTQUM5QyxDQUFDLENBQUE7UUFFRiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDaEMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFDdEIsS0FBSyxF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
|
|
450
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3NoaXByb2NrZXQvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTRDO0FBQzVDLDJDQUE2QztBQUM3Qyx5REFBcUQ7QUFDckQsaURBQTRDO0FBYzVDLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQSxDQUFDLGFBQWE7QUFFM0MsTUFBcUIsZ0JBQWdCO0lBUWpDLFlBQVksT0FBZ0M7UUFIcEMsVUFBSyxHQUFrQixJQUFJLENBQUE7UUFDM0IsZUFBVSxHQUFHLEtBQUssQ0FBQTtRQUd0QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksbUJBQVcsQ0FDakIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5Q0FBeUMsQ0FDNUMsQ0FBQTtRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUE7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQTtRQUU5QyxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7WUFDdEIsT0FBTyxFQUFFLHlDQUF5QztZQUNsRCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksZUFBZTtTQUM5QyxDQUFDLENBQUE7UUFFRiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDaEMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFDdEIsS0FBSyxF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
|
package/README.md
CHANGED
|
@@ -74,6 +74,7 @@ Add your Shiprocket credentials to your `.env` file.
|
|
|
74
74
|
SHIPROCKET_EMAIL="your_email@example.com"
|
|
75
75
|
SHIPROCKET_PASSWORD="your_shiprocket_password"
|
|
76
76
|
# Must match the 'Nickname' of a pickup location in your Shiprocket settings
|
|
77
|
+
# This is also used to auto-fetch the pickup pincode for the delivery estimate API
|
|
77
78
|
SHIPROCKET_PICKUP_LOCATION="Primary"
|
|
78
79
|
```
|
|
79
80
|
|
|
@@ -110,6 +111,56 @@ module.exports = defineConfig({
|
|
|
110
111
|
});
|
|
111
112
|
```
|
|
112
113
|
|
|
114
|
+
## 🌐 API Endpoints
|
|
115
|
+
|
|
116
|
+
### Delivery Estimate API
|
|
117
|
+
|
|
118
|
+
Check serviceability and get estimated delivery dates for any pincode without creating an order.
|
|
119
|
+
|
|
120
|
+
**Endpoint:** `GET /store/shiprocket/delivery-estimate`
|
|
121
|
+
|
|
122
|
+
> [!NOTE]
|
|
123
|
+
> This endpoint is public — no API key required. Rate limited to **30 requests/min per IP**. Results are cached for **10 minutes**.
|
|
124
|
+
|
|
125
|
+
**Query Parameters:**
|
|
126
|
+
| Parameter | Required | Description |
|
|
127
|
+
| :--- | :--- | :--- |
|
|
128
|
+
| `delivery_pincode` | ✅ Yes | The destination pincode (6 digits) |
|
|
129
|
+
| `pickup_pincode` | ❌ No | Pickup location pincode. If not provided, auto-fetched from `SHIPROCKET_PICKUP_LOCATION` |
|
|
130
|
+
| `weight` | ❌ No | Package weight in kg (defaults to 0.5) |
|
|
131
|
+
| `cod` | ❌ No | Cash on delivery: 0 or 1 (defaults to 0) |
|
|
132
|
+
|
|
133
|
+
**Example Request:**
|
|
134
|
+
```bash
|
|
135
|
+
curl "https://your-store.com/store/shiprocket/delivery-estimate?delivery_pincode=110001"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Example Response:**
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"serviceable": true,
|
|
142
|
+
"fastest_delivery": {
|
|
143
|
+
"courier_name": "Delhivery Surface",
|
|
144
|
+
"courier_company_id": 21,
|
|
145
|
+
"estimated_days": 2,
|
|
146
|
+
"estimated_delivery_date": "2025-01-06",
|
|
147
|
+
"rate": 45,
|
|
148
|
+
"is_surface": true
|
|
149
|
+
},
|
|
150
|
+
"all_options": [...]
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Response Headers:**
|
|
155
|
+
| Header | Description |
|
|
156
|
+
| :--- | :--- |
|
|
157
|
+
| `X-RateLimit-Limit` | Max requests per minute (30) |
|
|
158
|
+
| `X-RateLimit-Remaining` | Requests remaining |
|
|
159
|
+
| `X-Cache` | `HIT` if cached, `MISS` if fresh |
|
|
160
|
+
|
|
161
|
+
> [!TIP]
|
|
162
|
+
> Set `SHIPROCKET_PICKUP_LOCATION` in your `.env` to auto-fetch the pickup pincode from your Shiprocket account. No need to pass `pickup_pincode` in every request!
|
|
163
|
+
|
|
113
164
|
## 💻 Usage Guide
|
|
114
165
|
|
|
115
166
|
### Enabling the Provider
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "medusa-shiprocket-fulfillment-plugin",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Shiprocket Fulfillment Provider Plugin for MedusaJS 2",
|
|
5
5
|
"author": "SAM-AEL",
|
|
6
6
|
"homepage": "https://github.com/SAM-AEL",
|
|
@@ -80,4 +80,4 @@
|
|
|
80
80
|
"engines": {
|
|
81
81
|
"node": ">=20"
|
|
82
82
|
}
|
|
83
|
-
}
|
|
83
|
+
}
|