medusa-shiprocket-fulfillment-plugin 0.3.0 → 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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZS1saW1pdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9zdG9yZS9zaGlwcm9ja2V0L2RlbGl2ZXJ5LWVzdGltYXRlL3JhdGUtbGltaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFrR0gsa0RBUUM7QUFuR0QsTUFBTSxXQUFXO0lBS2IsWUFBWSxjQUFzQixFQUFFLEVBQUUsV0FBbUIsRUFBRSxHQUFHLElBQUk7UUFKMUQsYUFBUSxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFBO1FBS2hELHlDQUF5QztRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUV4QixzQ0FBc0M7UUFDdEMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsVUFBa0I7UUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRTNDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNULHFDQUFxQztZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1lBQzdELE9BQU8sSUFBSSxDQUFBO1FBQ2YsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxlQUFlO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtZQUM3RCxPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNiLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLFVBQWtCO1FBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFBO1FBRW5DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUN0QixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUE7UUFDM0IsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLFVBQWtCO1FBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxDQUFDLENBQUE7UUFFcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtRQUNqRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxPQUFPO1FBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakQsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQzdCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBRUQsaURBQWlEO0FBQ3BDLFFBQUEsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUE7QUFFekQ7O0dBRUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxHQUFRO0lBQ3hDLE9BQU8sQ0FDSCxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRTtRQUNyRCxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN4QixHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWE7UUFDekIsR0FBRyxDQUFDLEVBQUU7UUFDTixTQUFTLENBQ1osQ0FBQTtBQUNMLENBQUMifQ==
@@ -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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
@@ -1,27 +1,59 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleError = void 0;
3
+ exports.handleError = handleError;
4
4
  const utils_1 = require("@medusajs/utils");
5
- const handleError = (error) => {
6
- const message = error.response?.data?.message || error.message;
7
- const code = error.response?.status || 500;
8
- if (code === 401) {
9
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, "Authentication failed with Shiprocket");
10
- }
11
- if (code === 429) {
12
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Rate limit exceeded. Please try again later.");
13
- }
14
- if (code === 400 && error.response?.data?.errors) {
15
- const validationErrors = Object.entries(error.response.data.errors)
16
- .map(([field, msgs]) => `${field}: ${Array.isArray(msgs) ? msgs.join(", ") : msgs}`)
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
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Validation failed: ${validationErrors}`);
28
+ message = `Validation failed: ${validationErrors}`;
19
29
  }
20
- throw new utils_1.MedusaError(code === 404
21
- ? utils_1.MedusaError.Types.NOT_FOUND
22
- : code === 400
23
- ? utils_1.MedusaError.Types.INVALID_DATA
24
- : utils_1.MedusaError.Types.UNEXPECTED_STATE, message);
25
- };
26
- exports.handleError = handleError;
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9zaGlwcm9ja2V0L2NsaWVudC9oYW5kbGUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQTZDO0FBR3RDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBa0MsRUFBUyxFQUFFO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFBO0lBQzlELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLEdBQUcsQ0FBQTtJQUUxQyxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHVDQUF1QyxDQUMxQyxDQUFBO0lBQ0wsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLG1CQUFXLENBQ2pCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsOENBQThDLENBQ2pELENBQUE7SUFDTCxDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDOUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ25GLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNmLE1BQU0sSUFBSSxtQkFBVyxDQUNqQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHNCQUFzQixnQkFBZ0IsRUFBRSxDQUMzQyxDQUFBO0lBQ0wsQ0FBQztJQUVELE1BQU0sSUFBSSxtQkFBVyxDQUNqQixJQUFJLEtBQUssR0FBRztRQUNSLENBQUMsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTO1FBQzdCLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRztZQUNkLENBQUMsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLENBQUMsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDeEMsT0FBTyxDQUNWLENBQUE7QUFDTCxDQUFDLENBQUE7QUFwQ1ksUUFBQSxXQUFXLGVBb0N2QiJ9
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