medusa-pos-plugin 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +23 -0
- package/.medusa/server/src/admin/index.mjs +24 -0
- package/.medusa/server/src/api/admin/pos/catalog/route.js +139 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/confirm-lite/route.js +41 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/customer/route.js +68 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/finalize/route.js +424 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/items/route.js +452 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/items/update/route.js +137 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/manual-discount/route.js +386 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/promotions/route.js +59 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/route.js +178 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/wallet-debit/route.js +220 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/route.js +193 -0
- package/.medusa/server/src/api/admin/pos/manual-discounts/route.js +76 -0
- package/.medusa/server/src/api/admin/pos/orders/[id]/fulfill/route.js +103 -0
- package/.medusa/server/src/api/admin/pos/orders/[id]/returns/route.js +512 -0
- package/.medusa/server/src/api/admin/pos/orders/fulfill-pos-items.js +63 -0
- package/.medusa/server/src/api/admin/pos/orders/validators.js +62 -0
- package/.medusa/server/src/api/admin/pos/payments/config/route.js +15 -0
- package/.medusa/server/src/api/admin/pos/payments/device/[orderId]/route.js +39 -0
- package/.medusa/server/src/api/admin/pos/payments/device/cancel/route.js +27 -0
- package/.medusa/server/src/api/admin/pos/payments/device/route.js +107 -0
- package/.medusa/server/src/api/admin/pos/payments/qr/[qrId]/close/route.js +36 -0
- package/.medusa/server/src/api/admin/pos/payments/qr/[qrId]/route.js +42 -0
- package/.medusa/server/src/api/admin/pos/payments/qr/route.js +78 -0
- package/.medusa/server/src/index.js +8 -0
- package/.medusa/server/src/types.js +3 -0
- package/.medusa/server/src/utils/pos-draft-edit.js +178 -0
- package/.medusa/server/src/utils/pos-finalize.js +166 -0
- package/.medusa/server/src/utils/pos-inventory.js +265 -0
- package/.medusa/server/src/utils/pos-returns.js +339 -0
- package/.medusa/server/src/utils/razorpay-pos-device.js +122 -0
- package/.medusa/server/src/utils/razorpay-pos.js +134 -0
- package/README.md +39 -0
- package/index.js +9 -0
- package/package.json +82 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PosFinalizeDraftSchema = exports.PosWalletDebitSchema = exports.PosFulfillOrderSchema = exports.PosCreateReturnSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.PosCreateReturnSchema = zod_1.z.object({
|
|
6
|
+
items: zod_1.z
|
|
7
|
+
.array(zod_1.z.object({
|
|
8
|
+
id: zod_1.z.string().min(1),
|
|
9
|
+
quantity: zod_1.z.number().int().positive(),
|
|
10
|
+
note: zod_1.z.string().optional(),
|
|
11
|
+
}))
|
|
12
|
+
.min(1),
|
|
13
|
+
refund_method: zod_1.z.enum(["cash", "wallet"]),
|
|
14
|
+
location_id: zod_1.z.string().min(1).optional(),
|
|
15
|
+
note: zod_1.z.string().optional(),
|
|
16
|
+
customer: zod_1.z
|
|
17
|
+
.object({
|
|
18
|
+
email: zod_1.z.string().trim().optional(),
|
|
19
|
+
phone: zod_1.z.string().optional(),
|
|
20
|
+
first_name: zod_1.z.string().optional(),
|
|
21
|
+
last_name: zod_1.z.string().optional(),
|
|
22
|
+
})
|
|
23
|
+
.optional(),
|
|
24
|
+
});
|
|
25
|
+
exports.PosFulfillOrderSchema = zod_1.z.object({
|
|
26
|
+
location_id: zod_1.z.string().min(1),
|
|
27
|
+
items: zod_1.z
|
|
28
|
+
.array(zod_1.z.object({
|
|
29
|
+
id: zod_1.z.string().min(1),
|
|
30
|
+
quantity: zod_1.z.number().int().positive(),
|
|
31
|
+
}))
|
|
32
|
+
.optional(),
|
|
33
|
+
});
|
|
34
|
+
exports.PosWalletDebitSchema = zod_1.z.object({
|
|
35
|
+
amount: zod_1.z.number().positive(),
|
|
36
|
+
});
|
|
37
|
+
const PosAddressSchema = zod_1.z.object({
|
|
38
|
+
first_name: zod_1.z.string().optional(),
|
|
39
|
+
last_name: zod_1.z.string().optional(),
|
|
40
|
+
company: zod_1.z.string().optional(),
|
|
41
|
+
address_1: zod_1.z.string().min(1),
|
|
42
|
+
address_2: zod_1.z.string().optional(),
|
|
43
|
+
city: zod_1.z.string().optional(),
|
|
44
|
+
province: zod_1.z.string().optional(),
|
|
45
|
+
postal_code: zod_1.z.string().optional(),
|
|
46
|
+
country_code: zod_1.z.string().min(2),
|
|
47
|
+
phone: zod_1.z.string().optional(),
|
|
48
|
+
});
|
|
49
|
+
exports.PosFinalizeDraftSchema = zod_1.z.object({
|
|
50
|
+
payment_method: zod_1.z.enum(["cash", "google_pay", "upi_qr", "pos_machine", "wallet"]),
|
|
51
|
+
wallet_amount: zod_1.z.number().positive().optional(),
|
|
52
|
+
charged_total: zod_1.z.number().positive().optional(),
|
|
53
|
+
razorpay_qr_id: zod_1.z.string().min(1).optional(),
|
|
54
|
+
razorpay_payment_id: zod_1.z.string().min(1).optional(),
|
|
55
|
+
location_id: zod_1.z.string().min(1).optional(),
|
|
56
|
+
sales_channel_id: zod_1.z.string().min(1).optional(),
|
|
57
|
+
cart_opened_at: zod_1.z.string().min(1).optional(),
|
|
58
|
+
checkout_duration_ms: zod_1.z.number().nonnegative().optional(),
|
|
59
|
+
shipping_address: PosAddressSchema.optional(),
|
|
60
|
+
billing_address: PosAddressSchema.optional(),
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vcG9zL29yZGVycy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF1QjtBQUVWLFFBQUEscUJBQXFCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxLQUFLLEVBQUUsT0FBQztTQUNMLEtBQUssQ0FDSixPQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1AsRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3JDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzVCLENBQUMsQ0FDSDtTQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDVCxhQUFhLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QyxXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDekMsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0IsUUFBUSxFQUFFLE9BQUM7U0FDUixNQUFNLENBQUM7UUFDTixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNuQyxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUM1QixVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNqQyxTQUFTLEVBQUUsT0FBQyxDQUFD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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const razorpay_pos_1 = require("../../../../../utils/razorpay-pos");
|
|
5
|
+
/**
|
|
6
|
+
* GET /admin/pos/payments/config
|
|
7
|
+
*
|
|
8
|
+
* Lets POS hide Online · Razorpay when credentials are not configured.
|
|
9
|
+
*/
|
|
10
|
+
async function GET(_req, res) {
|
|
11
|
+
res.status(200).json({
|
|
12
|
+
razorpay_enabled: (0, razorpay_pos_1.isRazorpayConfigured)(),
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9wYXltZW50cy9jb25maWcvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSxrQkFJQztBQVhELG9FQUF3RTtBQUV4RTs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLEdBQUcsQ0FBQyxJQUFtQixFQUFFLEdBQW1CO0lBQ2hFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25CLGdCQUFnQixFQUFFLElBQUEsbUNBQW9CLEdBQUU7S0FDekMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const razorpay_pos_device_1 = require("../../../../../../utils/razorpay-pos-device");
|
|
5
|
+
async function GET(req, res) {
|
|
6
|
+
const { orderId } = req.params;
|
|
7
|
+
if (!orderId) {
|
|
8
|
+
res.status(400).json({ message: "orderId is required" });
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
// Integration-test pseudo ids are not on Razorpay
|
|
12
|
+
if (orderId.startsWith("sim_")) {
|
|
13
|
+
res.status(200).json({
|
|
14
|
+
razorpay_order_id: orderId,
|
|
15
|
+
status: "pending",
|
|
16
|
+
integration_test: true,
|
|
17
|
+
});
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const order = await (0, razorpay_pos_device_1.fetchPosDeviceOrder)(orderId);
|
|
22
|
+
const status = (0, razorpay_pos_device_1.getPosOrderPaymentStatus)(order);
|
|
23
|
+
res.status(200).json({
|
|
24
|
+
razorpay_order_id: order.id,
|
|
25
|
+
status,
|
|
26
|
+
amount: order.amount,
|
|
27
|
+
amount_paid: order.amount_paid,
|
|
28
|
+
currency: order.currency,
|
|
29
|
+
integration_test: false,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error("Failed to fetch POS device order:", error);
|
|
34
|
+
res.status(500).json({
|
|
35
|
+
message: error?.error?.description || error?.message || "Failed to fetch POS payment status",
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9wYXltZW50cy9kZXZpY2UvW29yZGVySWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsa0JBb0NDO0FBekNELHFGQUdvRDtBQUU3QyxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFFOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFBO1FBQ3hELE9BQU07SUFDUixDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQy9CLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLGlCQUFpQixFQUFFLE9BQU87WUFDMUIsTUFBTSxFQUFFLFNBQVM7WUFDakIsZ0JBQWdCLEVBQUUsSUFBSTtTQUN2QixDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBQSx5Q0FBbUIsRUFBQyxPQUFPLENBQUMsQ0FBQTtRQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDhDQUF3QixFQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTlDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzNCLE1BQU07WUFDTixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDekQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxJQUFJLEtBQUssRUFBRSxPQUFPLElBQUksb0NBQW9DO1NBQzdGLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const razorpay_pos_device_1 = require("../../../../../../utils/razorpay-pos-device");
|
|
5
|
+
async function POST(req, res) {
|
|
6
|
+
if ((0, razorpay_pos_device_1.isPosIntegrationTestMode)()) {
|
|
7
|
+
res.status(200).json({ closed: true, integration_test: true });
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
await (0, razorpay_pos_device_1.closePosDeviceCheckout)();
|
|
12
|
+
res.status(200).json({ closed: true, integration_test: false });
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
// Soft-success for UX when nothing to close
|
|
16
|
+
const description = error?.error?.description || error?.message || "";
|
|
17
|
+
if (/close|not found|no active|already/i.test(description)) {
|
|
18
|
+
res.status(200).json({ closed: true, soft: true });
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
console.error("Failed to close POS checkout:", error);
|
|
22
|
+
res.status(500).json({
|
|
23
|
+
message: description || "Failed to cancel POS checkout",
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9wYXltZW50cy9kZXZpY2UvY2FuY2VsL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esb0JBc0JDO0FBNUJELHFGQUE4RztBQU12RyxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQThCLEVBQUUsR0FBbUI7SUFDNUUsSUFBSSxJQUFBLDhDQUF3QixHQUFFLEVBQUUsQ0FBQztRQUMvQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM5RCxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sSUFBQSw0Q0FBc0IsR0FBRSxDQUFBO1FBQzlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLDRDQUE0QztRQUM1QyxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsSUFBSSxLQUFLLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUNyRSxJQUFJLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzNELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtZQUNsRCxPQUFNO1FBQ1IsQ0FBQztRQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDckQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLFdBQVcsSUFBSSwrQkFBK0I7U0FDeEQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const razorpay_pos_device_1 = require("../../../../../utils/razorpay-pos-device");
|
|
6
|
+
const razorpay_pos_1 = require("../../../../../utils/razorpay-pos");
|
|
7
|
+
function resolveAmount(value) {
|
|
8
|
+
if (value == null)
|
|
9
|
+
return null;
|
|
10
|
+
if (typeof value === "object") {
|
|
11
|
+
const obj = value;
|
|
12
|
+
if (typeof obj.numeric === "number")
|
|
13
|
+
return obj.numeric;
|
|
14
|
+
if (typeof obj.numeric === "string")
|
|
15
|
+
return Number(obj.numeric);
|
|
16
|
+
if (typeof obj.value === "number")
|
|
17
|
+
return obj.value;
|
|
18
|
+
if (typeof obj.value === "string")
|
|
19
|
+
return Number(obj.value);
|
|
20
|
+
}
|
|
21
|
+
const n = Number(value);
|
|
22
|
+
return Number.isFinite(n) ? n : null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Option B — start POS machine payment (integration-test friendly).
|
|
26
|
+
* When RAZORPAY_POS_INTEGRATION_TEST=true, UI can simulate success/fail without a device.
|
|
27
|
+
*/
|
|
28
|
+
async function POST(req, res) {
|
|
29
|
+
const draftOrderId = req.body?.draft_order_id;
|
|
30
|
+
const amount = resolveAmount(req.body?.amount);
|
|
31
|
+
const integrationTest = (0, razorpay_pos_device_1.isPosIntegrationTestMode)();
|
|
32
|
+
if (!draftOrderId) {
|
|
33
|
+
res.status(400).json({ message: "draft_order_id is required" });
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (amount == null || amount <= 0) {
|
|
37
|
+
res.status(400).json({ message: "Valid amount is required" });
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const orderModule = req.scope.resolve(utils_1.Modules.ORDER);
|
|
42
|
+
const order = await orderModule.retrieveOrder(draftOrderId, {
|
|
43
|
+
select: ["id", "status", "display_id", "currency_code"],
|
|
44
|
+
});
|
|
45
|
+
if (order.status !== "draft") {
|
|
46
|
+
res.status(400).json({ message: "Order is no longer a draft" });
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const description = `POS Machine Order #${order.display_id ?? draftOrderId}`;
|
|
50
|
+
// Integration test mode: no Razorpay device required — client simulates success/fail
|
|
51
|
+
if (integrationTest) {
|
|
52
|
+
res.status(200).json({
|
|
53
|
+
mode: "integration_test",
|
|
54
|
+
integration_test: true,
|
|
55
|
+
draft_order_id: draftOrderId,
|
|
56
|
+
amount: (0, razorpay_pos_1.toPaise)(amount),
|
|
57
|
+
currency: order.currency_code?.toUpperCase() || "INR",
|
|
58
|
+
razorpay_order_id: null,
|
|
59
|
+
activity_id: null,
|
|
60
|
+
status: "pending",
|
|
61
|
+
message: "Integration test mode: use Simulate Success / Simulate Failed (no physical device needed).",
|
|
62
|
+
});
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const rzOrder = await (0, razorpay_pos_device_1.createPosDeviceOrder)({
|
|
66
|
+
amount,
|
|
67
|
+
draftOrderId,
|
|
68
|
+
description,
|
|
69
|
+
});
|
|
70
|
+
let activity = null;
|
|
71
|
+
let initiateError = null;
|
|
72
|
+
try {
|
|
73
|
+
activity = await (0, razorpay_pos_device_1.initiatePosDeviceCheckout)({
|
|
74
|
+
razorpayOrderId: rzOrder.id,
|
|
75
|
+
amount,
|
|
76
|
+
draftOrderId,
|
|
77
|
+
description,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
initiateError = error?.error?.description || error?.message || "initiate_checkout failed";
|
|
82
|
+
console.warn("POS initiate_checkout failed (order still created):", initiateError);
|
|
83
|
+
}
|
|
84
|
+
res.status(200).json({
|
|
85
|
+
mode: "live_device",
|
|
86
|
+
integration_test: false,
|
|
87
|
+
draft_order_id: draftOrderId,
|
|
88
|
+
amount: rzOrder.amount,
|
|
89
|
+
currency: rzOrder.currency || "INR",
|
|
90
|
+
razorpay_order_id: rzOrder.id,
|
|
91
|
+
activity_id: activity?.id ?? null,
|
|
92
|
+
status: "pending",
|
|
93
|
+
initiate_error: initiateError,
|
|
94
|
+
message: initiateError
|
|
95
|
+
? `Order created but device checkout failed: ${initiateError}`
|
|
96
|
+
: "Checkout sent to POS device. Waiting for payment.",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
console.error("Failed to start POS machine payment:", error);
|
|
101
|
+
res.status(500).json({
|
|
102
|
+
message: error?.error?.description || error?.message || "Failed to start POS machine payment",
|
|
103
|
+
integration_test: integrationTest,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9wYXltZW50cy9kZXZpY2Uvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErQkEsb0JBdUZDO0FBckhELHFEQUFtRDtBQUNuRCxrRkFJaUQ7QUFDakQsb0VBQTJEO0FBTzNELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsSUFBSSxLQUFLLElBQUksSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFBO0lBQzlCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLEdBQUcsS0FBZ0MsQ0FBQTtRQUM1QyxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQUUsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFBO1FBQ3ZELElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFFBQVE7WUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDL0QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssUUFBUTtZQUFFLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQTtRQUNuRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxRQUFRO1lBQUUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUN0QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLElBQUksQ0FBQyxHQUE4QixFQUFFLEdBQW1CO0lBQzVFLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FB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
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const razorpay_pos_1 = require("../../../../../../../utils/razorpay-pos");
|
|
5
|
+
async function POST(req, res) {
|
|
6
|
+
const { qrId } = req.params;
|
|
7
|
+
if (!qrId) {
|
|
8
|
+
res.status(400).json({ message: "qrId is required" });
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const qr = await (0, razorpay_pos_1.closePosUpiQr)(qrId);
|
|
13
|
+
const status = (0, razorpay_pos_1.getUpiQrStatus)(qr);
|
|
14
|
+
res.status(200).json({
|
|
15
|
+
qr_id: qr.id,
|
|
16
|
+
status,
|
|
17
|
+
closed: true,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
const description = error?.error?.description || error?.message || "";
|
|
22
|
+
if (/closed|paid|already/i.test(description)) {
|
|
23
|
+
res.status(200).json({
|
|
24
|
+
qr_id: qrId,
|
|
25
|
+
status: "closed",
|
|
26
|
+
closed: true,
|
|
27
|
+
});
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
console.error("Failed to close POS UPI QR:", error);
|
|
31
|
+
res.status(500).json({
|
|
32
|
+
message: description || "Failed to close UPI QR",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9wYXltZW50cy9xci9bcXJJZF0vY2xvc2Uvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxvQkFpQ0M7QUFuQ0QsMEVBQXVGO0FBRWhGLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUNoRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUUzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUE7UUFDckQsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsNEJBQWEsRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLDZCQUFjLEVBQUMsRUFBRSxDQUFDLENBQUE7UUFFakMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ1osTUFBTTtZQUNOLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLElBQUksS0FBSyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFDckUsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbkIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQyxDQUFBO1lBQ0YsT0FBTTtRQUNSLENBQUM7UUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ25ELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxXQUFXLElBQUksd0JBQXdCO1NBQ2pELENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const razorpay_pos_1 = require("../../../../../../utils/razorpay-pos");
|
|
5
|
+
async function GET(req, res) {
|
|
6
|
+
const { qrId } = req.params;
|
|
7
|
+
if (!qrId) {
|
|
8
|
+
res.status(400).json({ message: "qrId is required" });
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const qr = await (0, razorpay_pos_1.fetchPosUpiQr)(qrId);
|
|
13
|
+
const status = (0, razorpay_pos_1.getUpiQrStatus)(qr);
|
|
14
|
+
let paymentId = null;
|
|
15
|
+
if (status === "paid") {
|
|
16
|
+
try {
|
|
17
|
+
const payments = await (0, razorpay_pos_1.fetchPosUpiQrPayments)(qrId);
|
|
18
|
+
paymentId = payments?.items?.[0]?.id ?? null;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
console.warn("Could not fetch QR payments:", error);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
res.status(200).json({
|
|
25
|
+
qr_id: qr.id,
|
|
26
|
+
status,
|
|
27
|
+
image_url: qr.image_url,
|
|
28
|
+
payment_url: null,
|
|
29
|
+
amount: qr.payment_amount,
|
|
30
|
+
draft_order_id: qr.notes?.draft_order_id ?? null,
|
|
31
|
+
razorpay_payment_id: paymentId,
|
|
32
|
+
payments_count_received: qr.payments_count_received ?? 0,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
console.error("Failed to fetch POS UPI QR:", error);
|
|
37
|
+
res.status(500).json({
|
|
38
|
+
message: error?.error?.description || error?.message || "Failed to fetch UPI QR status",
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9wYXltZW50cy9xci9bcXJJZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSxrQkFzQ0M7QUE1Q0QsdUVBSTZDO0FBRXRDLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUUzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUE7UUFDckQsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsNEJBQWEsRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLDZCQUFjLEVBQUMsRUFBRSxDQUFDLENBQUE7UUFFakMsSUFBSSxTQUFTLEdBQWtCLElBQUksQ0FBQTtRQUNuQyxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLG9DQUFxQixFQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNsRCxTQUFTLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUE7WUFDOUMsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNyRCxDQUFDO1FBQ0gsQ0FBQztRQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNaLE1BQU07WUFDTixTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVM7WUFDdkIsV0FBVyxFQUFFLElBQUk7WUFDakIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxjQUFjO1lBQ3pCLGNBQWMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLGNBQWMsSUFBSSxJQUFJO1lBQ2hELG1CQUFtQixFQUFFLFNBQVM7WUFDOUIsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixJQUFJLENBQUM7U0FDekQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNuRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLElBQUksS0FBSyxFQUFFLE9BQU8sSUFBSSwrQkFBK0I7U0FDeEYsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const razorpay_pos_1 = require("../../../../../utils/razorpay-pos");
|
|
6
|
+
function resolveAmount(value) {
|
|
7
|
+
if (value == null)
|
|
8
|
+
return null;
|
|
9
|
+
if (typeof value === "object") {
|
|
10
|
+
const obj = value;
|
|
11
|
+
if (typeof obj.numeric === "number")
|
|
12
|
+
return obj.numeric;
|
|
13
|
+
if (typeof obj.numeric === "string")
|
|
14
|
+
return Number(obj.numeric);
|
|
15
|
+
if (typeof obj.value === "number")
|
|
16
|
+
return obj.value;
|
|
17
|
+
if (typeof obj.value === "string")
|
|
18
|
+
return Number(obj.value);
|
|
19
|
+
if (typeof obj.valueOf === "function") {
|
|
20
|
+
const v = Number(obj.valueOf());
|
|
21
|
+
if (Number.isFinite(v))
|
|
22
|
+
return v;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const n = Number(value);
|
|
26
|
+
return Number.isFinite(n) ? n : null;
|
|
27
|
+
}
|
|
28
|
+
async function POST(req, res) {
|
|
29
|
+
const draftOrderId = req.body?.draft_order_id;
|
|
30
|
+
const bodyAmount = resolveAmount(req.body?.amount);
|
|
31
|
+
if (!draftOrderId) {
|
|
32
|
+
res.status(400).json({ message: "draft_order_id is required" });
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const orderModule = req.scope.resolve(utils_1.Modules.ORDER);
|
|
37
|
+
const order = await orderModule.retrieveOrder(draftOrderId, {
|
|
38
|
+
select: ["id", "status", "currency_code", "display_id"],
|
|
39
|
+
});
|
|
40
|
+
if (order.status !== "draft") {
|
|
41
|
+
res.status(400).json({ message: "Order is no longer a draft" });
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const amount = bodyAmount;
|
|
45
|
+
if (amount == null || amount <= 0) {
|
|
46
|
+
res.status(400).json({
|
|
47
|
+
message: "Could not determine order total for payment. Pass amount in request body.",
|
|
48
|
+
});
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const qr = await (0, razorpay_pos_1.createPosUpiQr)({
|
|
52
|
+
amount,
|
|
53
|
+
draftOrderId,
|
|
54
|
+
description: `POS Order #${order.display_id ?? draftOrderId}`,
|
|
55
|
+
});
|
|
56
|
+
res.status(200).json({
|
|
57
|
+
qr_id: qr.id,
|
|
58
|
+
// Razorpay-hosted QR image (contains native UPI payload when scanned)
|
|
59
|
+
image_url: qr.image_url,
|
|
60
|
+
payment_url: null,
|
|
61
|
+
amount: qr.payment_amount,
|
|
62
|
+
currency: order.currency_code?.toUpperCase() || "INR",
|
|
63
|
+
status: qr.status,
|
|
64
|
+
draft_order_id: draftOrderId,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error("Failed to create POS UPI QR:", error);
|
|
69
|
+
if (error?.type === "not_found" || /not found/i.test(error?.message || "")) {
|
|
70
|
+
res.status(404).json({ message: "Draft order not found" });
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
res.status(500).json({
|
|
74
|
+
message: error?.error?.description || error?.message || "Failed to create UPI QR",
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9wYXltZW50cy9xci9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRCQSxvQkF3REM7QUFuRkQscURBQW1EO0FBQ25ELG9FQUFrRTtBQU9sRSxTQUFTLGFBQWEsQ0FBQyxLQUFjO0lBQ25DLElBQUksS0FBSyxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUU5QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLEtBQWdDLENBQUE7UUFDNUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQTtRQUN2RCxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQUUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQy9ELElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUE7UUFDbkQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssUUFBUTtZQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMzRCxJQUFJLE9BQVEsR0FBbUMsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFFLEdBQWtDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUMvRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZCLE9BQU8s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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Plugin entry point. API routes are discovered from the file structure.
|
|
5
|
+
*/
|
|
6
|
+
const plugin = {};
|
|
7
|
+
exports.default = plugin;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7R0FFRztBQUNILE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtBQUNqQixrQkFBZSxNQUFNLENBQUEifQ==
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POS_CART_FIELDS = exports.toAmount = exports.timed = void 0;
|
|
4
|
+
exports.normalizeCartItems = normalizeCartItems;
|
|
5
|
+
exports.normalizeCartOrder = normalizeCartOrder;
|
|
6
|
+
exports.beginEditSafe = beginEditSafe;
|
|
7
|
+
exports.confirmEditLite = confirmEditLite;
|
|
8
|
+
exports.retrievePosCart = retrievePosCart;
|
|
9
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
10
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
11
|
+
const timed = async (label, timings, fn) => {
|
|
12
|
+
const t0 = performance.now();
|
|
13
|
+
try {
|
|
14
|
+
return await fn();
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
timings[label] = Math.round(performance.now() - t0);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.timed = timed;
|
|
21
|
+
/** Medusa query may return BigNumber-like `{ value, precision }` instead of a plain number. */
|
|
22
|
+
const toAmount = (value) => {
|
|
23
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
24
|
+
return value;
|
|
25
|
+
if (typeof value === "string" && value.trim() !== "") {
|
|
26
|
+
const n = Number(value);
|
|
27
|
+
return Number.isFinite(n) ? n : 0;
|
|
28
|
+
}
|
|
29
|
+
if (value && typeof value === "object") {
|
|
30
|
+
const obj = value;
|
|
31
|
+
if ("numeric" in obj) {
|
|
32
|
+
const n = Number(obj.numeric);
|
|
33
|
+
if (Number.isFinite(n))
|
|
34
|
+
return n;
|
|
35
|
+
}
|
|
36
|
+
if ("value" in obj) {
|
|
37
|
+
const n = Number(obj.value);
|
|
38
|
+
if (Number.isFinite(n))
|
|
39
|
+
return n;
|
|
40
|
+
}
|
|
41
|
+
if (typeof obj.valueOf === "function") {
|
|
42
|
+
const n = Number(obj.valueOf());
|
|
43
|
+
if (Number.isFinite(n))
|
|
44
|
+
return n;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const n = Number(value);
|
|
48
|
+
return Number.isFinite(n) ? n : 0;
|
|
49
|
+
};
|
|
50
|
+
exports.toAmount = toAmount;
|
|
51
|
+
exports.POS_CART_FIELDS = [
|
|
52
|
+
"id",
|
|
53
|
+
"display_id",
|
|
54
|
+
"status",
|
|
55
|
+
"is_draft_order",
|
|
56
|
+
"currency_code",
|
|
57
|
+
"email",
|
|
58
|
+
"total",
|
|
59
|
+
"subtotal",
|
|
60
|
+
"tax_total",
|
|
61
|
+
"discount_total",
|
|
62
|
+
"metadata",
|
|
63
|
+
"customer.id",
|
|
64
|
+
"customer.email",
|
|
65
|
+
"customer.phone",
|
|
66
|
+
"customer.first_name",
|
|
67
|
+
"customer.last_name",
|
|
68
|
+
"items.id",
|
|
69
|
+
"items.title",
|
|
70
|
+
"items.subtitle",
|
|
71
|
+
"items.thumbnail",
|
|
72
|
+
"items.variant_id",
|
|
73
|
+
"items.product_title",
|
|
74
|
+
"items.variant_title",
|
|
75
|
+
"items.quantity",
|
|
76
|
+
"items.unit_price",
|
|
77
|
+
"items.subtotal",
|
|
78
|
+
"items.total",
|
|
79
|
+
"items.metadata",
|
|
80
|
+
"items.variant.id",
|
|
81
|
+
"items.variant.title",
|
|
82
|
+
"items.variant.sku",
|
|
83
|
+
"items.variant.barcode",
|
|
84
|
+
"items.variant.inventory_quantity",
|
|
85
|
+
"items.variant.options.value",
|
|
86
|
+
"items.variant.options.option.title",
|
|
87
|
+
"items.adjustments.id",
|
|
88
|
+
"items.adjustments.code",
|
|
89
|
+
"items.adjustments.amount",
|
|
90
|
+
];
|
|
91
|
+
function normalizeCartItems(items) {
|
|
92
|
+
if (!items || !Array.isArray(items))
|
|
93
|
+
return items;
|
|
94
|
+
return items.map((item) => {
|
|
95
|
+
const quantity = (0, exports.toAmount)(item?.quantity ?? item?.raw_quantity) || 1;
|
|
96
|
+
const unit_price = (0, exports.toAmount)(item?.unit_price ?? item?.raw_unit_price);
|
|
97
|
+
const subtotal = (0, exports.toAmount)(item?.subtotal ?? item?.raw_subtotal) || unit_price * quantity;
|
|
98
|
+
const total = (0, exports.toAmount)(item?.total ?? item?.raw_total) || subtotal;
|
|
99
|
+
return {
|
|
100
|
+
...item,
|
|
101
|
+
quantity,
|
|
102
|
+
unit_price,
|
|
103
|
+
subtotal,
|
|
104
|
+
total,
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function normalizeCartOrder(order) {
|
|
109
|
+
if (!order)
|
|
110
|
+
return order;
|
|
111
|
+
const items = normalizeCartItems(order.items);
|
|
112
|
+
return {
|
|
113
|
+
...order,
|
|
114
|
+
items,
|
|
115
|
+
total: (0, exports.toAmount)(order.total ?? order.raw_total) || order.total,
|
|
116
|
+
subtotal: (0, exports.toAmount)(order.subtotal ?? order.raw_subtotal) || order.subtotal,
|
|
117
|
+
tax_total: (0, exports.toAmount)(order.tax_total ?? order.raw_tax_total) || order.tax_total,
|
|
118
|
+
discount_total: (0, exports.toAmount)(order.discount_total ?? order.raw_discount_total) || order.discount_total,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
async function beginEditSafe(scope, orderId) {
|
|
122
|
+
try {
|
|
123
|
+
await (0, core_flows_1.beginDraftOrderEditWorkflow)(scope).run({
|
|
124
|
+
input: { order_id: orderId },
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
const msg = String(err?.message || "").toLowerCase();
|
|
129
|
+
// Match upstream: treat "already open" as success; do not cancel/retry on soft failures.
|
|
130
|
+
if (msg.includes("active order change") ||
|
|
131
|
+
msg.includes("already has an existing") ||
|
|
132
|
+
msg.includes("existing active") ||
|
|
133
|
+
msg.includes("order change") ||
|
|
134
|
+
msg.includes("already")) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
console.warn(`[pos begin_edit] Note: ${err?.message || err}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Confirm pending draft edit WITHOUT payment-collection refresh.
|
|
142
|
+
* Full confirmDraftOrderEditWorkflow is slow mainly due to payment collection;
|
|
143
|
+
* but skip confirm entirely and Medusa retrieve returns items:[] → POS cart wipes.
|
|
144
|
+
*/
|
|
145
|
+
async function confirmEditLite(scope, orderId, confirmedBy) {
|
|
146
|
+
const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
147
|
+
const orderModule = scope.resolve(utils_1.Modules.ORDER);
|
|
148
|
+
const { data: changes = [] } = await query.graph({
|
|
149
|
+
entity: "order_change",
|
|
150
|
+
fields: ["id", "status", "order_id"],
|
|
151
|
+
filters: {
|
|
152
|
+
order_id: orderId,
|
|
153
|
+
status: [utils_1.OrderChangeStatus.PENDING, utils_1.OrderChangeStatus.REQUESTED],
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
const list = Array.isArray(changes) ? changes : changes ? [changes] : [];
|
|
157
|
+
const change = list[0];
|
|
158
|
+
if (!change?.id) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
await orderModule.confirmOrderChange({
|
|
162
|
+
id: change.id,
|
|
163
|
+
confirmed_by: confirmedBy,
|
|
164
|
+
});
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
/** Slim draft/order payload for POS cart paint after customer/discount/item writes. */
|
|
168
|
+
async function retrievePosCart(scope, orderId) {
|
|
169
|
+
const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
170
|
+
const { data: orders = [] } = await query.graph({
|
|
171
|
+
entity: "order",
|
|
172
|
+
fields: exports.POS_CART_FIELDS,
|
|
173
|
+
filters: { id: orderId },
|
|
174
|
+
});
|
|
175
|
+
const order = Array.isArray(orders) ? orders[0] : null;
|
|
176
|
+
return normalizeCartOrder(order);
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zLWRyYWZ0LWVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcG9zLWRyYWZ0LWVkaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMkZBLGdEQWVDO0FBRUQsZ0RBV0M7QUFFRCxzQ0FtQkM7QUFPRCwwQ0E0QkM7QUFHRCwwQ0FZQztBQTdMRCxxREFJa0M7QUFFbEMsNERBRW9DO0FBRTdCLE1BQU0sS0FBSyxHQUFHLEtBQUssRUFDeEIsS0FBYSxFQUNiLE9BQStCLEVBQy9CLEVBQW9CLEVBQ1IsRUFBRTtJQUNkLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUM1QixJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUE7SUFDbkIsQ0FBQztZQUFTLENBQUM7UUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDckQsQ0FBQztBQUNILENBQUMsQ0FBQTtBQVhZLFFBQUEsS0FBSyxTQVdqQjtBQUVELCtGQUErRjtBQUN4RixNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBVSxFQUFFO0lBQ2pELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDckUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN2QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFD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
|