@infuro/cms-core 1.0.34 → 1.0.36

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.
Files changed (152) hide show
  1. package/README.md +13 -0
  2. package/dist/OrderTrackPage-W3J6WIG2.js +426 -0
  3. package/dist/OrderTrackPage-Z6FCJQYY.cjs +428 -0
  4. package/dist/admin.cjs +35254 -21613
  5. package/dist/admin.d.cts +192 -9
  6. package/dist/admin.d.ts +192 -9
  7. package/dist/admin.js +34301 -20755
  8. package/dist/api.cjs +137 -17531
  9. package/dist/api.d.cts +633 -3
  10. package/dist/api.d.ts +633 -3
  11. package/dist/api.js +15 -17528
  12. package/dist/auth.cjs +192 -1034
  13. package/dist/auth.d.cts +197 -54
  14. package/dist/auth.d.ts +197 -54
  15. package/dist/auth.js +4 -966
  16. package/dist/chunk-2AEVFOQP.cjs +30436 -0
  17. package/dist/chunk-3DZRIZOD.cjs +52 -0
  18. package/dist/chunk-5ELSW2UP.js +150 -0
  19. package/dist/chunk-7NMT3GBR.cjs +29 -0
  20. package/dist/chunk-COBORIJH.cjs +2373 -0
  21. package/dist/chunk-CRFV5WJK.js +16 -0
  22. package/dist/chunk-D5FBNKQM.cjs +104 -0
  23. package/dist/chunk-FG6I64HP.js +604 -0
  24. package/dist/chunk-GO7PPYNU.js +76 -0
  25. package/dist/chunk-HCIRL37O.js +21 -0
  26. package/dist/chunk-HF3L2GIT.cjs +194 -0
  27. package/dist/chunk-HT5DI3XW.cjs +82 -0
  28. package/dist/chunk-JC6DLWTE.js +21 -0
  29. package/dist/chunk-JS2W7XZ4.js +30312 -0
  30. package/dist/chunk-JXF23MPG.js +25 -0
  31. package/dist/chunk-KFFB6EMZ.js +123 -0
  32. package/dist/chunk-KPKFNLQQ.cjs +648 -0
  33. package/dist/chunk-LI2IXVAY.js +171 -0
  34. package/dist/chunk-MQBT33IV.js +48 -0
  35. package/dist/chunk-OOTLNH63.cjs +18 -0
  36. package/dist/chunk-PNOKNSG2.cjs +222 -0
  37. package/dist/chunk-SHUYVCID.js +4 -0
  38. package/dist/chunk-SPQFNIYJ.cjs +132 -0
  39. package/dist/chunk-SYBOCAWB.js +97 -0
  40. package/dist/chunk-TDV6EJHV.js +192 -0
  41. package/dist/chunk-UCKN4BBY.cjs +24 -0
  42. package/dist/chunk-UF3BYUXY.js +616 -0
  43. package/dist/chunk-UPLVMVRX.cjs +23 -0
  44. package/dist/chunk-USNT2KNT.cjs +6 -0
  45. package/dist/chunk-VMY2S32H.js +2342 -0
  46. package/dist/chunk-WEMDMVHQ.js +216 -0
  47. package/dist/chunk-WO2DW4AU.cjs +182 -0
  48. package/dist/chunk-X47PBV4I.js +79 -0
  49. package/dist/chunk-X6H5VBQ2.cjs +620 -0
  50. package/dist/chunk-XQ3QUHWR.cjs +83 -0
  51. package/dist/chunk-XW5ATPRW.cjs +155 -0
  52. package/dist/cli.cjs +107 -86
  53. package/dist/cli.js +66 -29
  54. package/dist/email-queue-CGZBVVAS.js +2 -0
  55. package/dist/email-queue-TPZWLTIV.cjs +23 -0
  56. package/dist/emit-order-notification-trigger-D2N3KFHL.cjs +16 -0
  57. package/dist/emit-order-notification-trigger-IVLWKKJL.js +3 -0
  58. package/dist/erp-config-enabled-CUMQ6N2V.cjs +11 -0
  59. package/dist/erp-config-enabled-T37X7T34.js +2 -0
  60. package/dist/erp-order-invoice-3YISSOWW.js +3 -0
  61. package/dist/erp-order-invoice-ZR5F2KTA.cjs +12 -0
  62. package/dist/event-order-defaults-EMWBIGL3.cjs +39 -0
  63. package/dist/event-order-defaults-SDRNAZHC.js +2 -0
  64. package/dist/hooks.cjs +259 -132
  65. package/dist/hooks.d.cts +42 -1
  66. package/dist/hooks.d.ts +42 -1
  67. package/dist/hooks.js +234 -91
  68. package/dist/index.cjs +3679 -22356
  69. package/dist/index.d.cts +2173 -643
  70. package/dist/index.d.ts +2173 -643
  71. package/dist/index.js +2587 -22119
  72. package/dist/interpolate-WAKPN56R.cjs +11 -0
  73. package/dist/interpolate-WDUWDF3I.js +2 -0
  74. package/dist/migrations/1779400000000-ConvertStatusToEnum.ts +142 -0
  75. package/dist/migrations/1779400000000-SeedDefaultCurrencies.ts +33 -0
  76. package/dist/migrations/1779500000000-VendorRolesAndPermissions.ts +102 -0
  77. package/dist/migrations/1779600000000-VendorRegistrationProfile.ts +52 -0
  78. package/dist/migrations/1779700000000-CollectionIsCatalog.ts +22 -0
  79. package/dist/migrations/1779710000000-CollectionPlatformCatalog.ts +60 -0
  80. package/dist/migrations/1779720000000-ProductCategoryPlatformCatalog.ts +157 -0
  81. package/dist/migrations/1779800000000-EventsAndEventProducts.ts +173 -0
  82. package/dist/migrations/1779810000000-BackfillVendorRoleEventsPermissions.ts +38 -0
  83. package/dist/migrations/1779820000000-FixProductsCategoryForeignKey.ts +70 -0
  84. package/dist/migrations/1779830000000-ProductTitleColumn.ts +32 -0
  85. package/dist/migrations/1779840000000-EventAboutAndVisibilityFields.ts +34 -0
  86. package/dist/migrations/1779850000000-EventCityCountrySplit.ts +43 -0
  87. package/dist/migrations/1779860000000-CreateCombos.ts +140 -0
  88. package/dist/migrations/1780100000000-OrderAttendeesEventId.ts +55 -0
  89. package/dist/migrations/1780110000000-EventContactFormId.ts +49 -0
  90. package/dist/migrations/1780130000000-ProductVariants.ts +54 -0
  91. package/dist/migrations/1780140000000-EventManagementEnhancements.ts +44 -0
  92. package/dist/migrations/1780160000000-EventRegistrationGstProductContactForm.ts +79 -0
  93. package/dist/migrations/1780170000000-ComboCurrencyPrices.ts +20 -0
  94. package/dist/migrations/1781110000000-VendorOwnerCombosPermission.ts +38 -0
  95. package/dist/migrations/1781120000000-RefundPoliciesAndRequests.ts +225 -0
  96. package/dist/migrations/1781130000000-CreateAttendees.ts +44 -0
  97. package/dist/migrations/1781140000000-EventOrderNotifications.ts +29 -0
  98. package/dist/migrations/1781150000000-EventNamedLists.ts +28 -0
  99. package/dist/migrations/1781160000000-RefundPolicyEventTiers.ts +27 -0
  100. package/dist/migrations/1781170000000-EventRefundPolicy.ts +42 -0
  101. package/dist/migrations/1781180000000-RemoveCartItemsUniqueConstraint.ts +15 -0
  102. package/dist/migrations/1781190000000-RenameProductTaxesToProductConfig.ts +84 -0
  103. package/dist/migrations/1781200000000-VendorOwnerProductConfigPermissions.ts +51 -0
  104. package/dist/migrations/1781210000000-VendorRoleProductConfigPermissions.ts +46 -0
  105. package/dist/migrations/1781220000000-AddWhatsappTriggerBindings.ts +23 -0
  106. package/dist/migrations/1781230000000-AddOrderNotificationTriggers.ts +46 -0
  107. package/dist/migrations/1781240000000-DropEventOrderNotificationColumns.ts +29 -0
  108. package/dist/migrations/1781250000000-RemoveOrderRefundedTrigger.ts +36 -0
  109. package/dist/migrations/helpers/vendor-role-seed.ts +243 -0
  110. package/dist/paid-order-erp-3USEG6WL.js +3 -0
  111. package/dist/paid-order-erp-FSQ3GSXE.cjs +12 -0
  112. package/dist/pg-boss-service-4XF2TQ2E.js +2 -0
  113. package/dist/pg-boss-service-L6MTF4EQ.cjs +15 -0
  114. package/dist/razorpay-KLO2KNCB.js +49 -0
  115. package/dist/razorpay-U23LGY72.cjs +56 -0
  116. package/dist/rbac-debug-db-HWP65A4O.cjs +35 -0
  117. package/dist/rbac-debug-db-QJH3AD34.js +33 -0
  118. package/dist/sms-defaults-2NL24H57.js +2 -0
  119. package/dist/sms-defaults-KCOPKQBA.cjs +19 -0
  120. package/dist/stripe-4FD27QVJ.js +51 -0
  121. package/dist/stripe-VU6OEG2D.cjs +57 -0
  122. package/dist/theme.cjs +31 -59
  123. package/dist/theme.d.cts +78 -3
  124. package/dist/theme.d.ts +78 -3
  125. package/dist/theme.js +23 -20
  126. package/dist/vendor-invite-status-77O7ZQ3U.cjs +19 -0
  127. package/dist/vendor-invite-status-PWJ3DE76.js +2 -0
  128. package/dist/whatsapp-trigger-dispatcher-ONHXI7UY.cjs +19 -0
  129. package/dist/whatsapp-trigger-dispatcher-PWFI4FKP.js +6 -0
  130. package/package.json +147 -142
  131. package/dist/admin.cjs.map +0 -1
  132. package/dist/admin.js.map +0 -1
  133. package/dist/api.cjs.map +0 -1
  134. package/dist/api.js.map +0 -1
  135. package/dist/auth.cjs.map +0 -1
  136. package/dist/auth.js.map +0 -1
  137. package/dist/cli.cjs.map +0 -1
  138. package/dist/cli.js.map +0 -1
  139. package/dist/config-DJ5CmQvS.d.cts +0 -8
  140. package/dist/config-DJ5CmQvS.d.ts +0 -8
  141. package/dist/hooks.cjs.map +0 -1
  142. package/dist/hooks.js.map +0 -1
  143. package/dist/index-Bf5GO8fu.d.cts +0 -583
  144. package/dist/index-DOiJuMQA.d.ts +0 -583
  145. package/dist/index.cjs.map +0 -1
  146. package/dist/index.js.map +0 -1
  147. package/dist/theme.cjs.map +0 -1
  148. package/dist/theme.js.map +0 -1
  149. package/dist/types-DCVaXlPV.d.cts +0 -78
  150. package/dist/types-DCVaXlPV.d.ts +0 -78
  151. package/dist/vendor-scope-DTYhJk_I.d.cts +0 -129
  152. package/dist/vendor-scope-DTYhJk_I.d.ts +0 -129
@@ -0,0 +1,194 @@
1
+ 'use strict';
2
+
3
+ var chunkD5FBNKQM_cjs = require('./chunk-D5FBNKQM.cjs');
4
+ var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
5
+
6
+ // src/plugins/erp/paid-order-erp.ts
7
+ function roundMoney(major) {
8
+ return Math.round(major * 100) / 100;
9
+ }
10
+ chunkUSNT2KNT_cjs.__name(roundMoney, "roundMoney");
11
+ function addressToWebhookDto(a) {
12
+ if (!a) return {};
13
+ return {
14
+ line1: a.line1 ?? "",
15
+ line2: a.line2 ?? "",
16
+ city: a.city ?? "",
17
+ state: a.state ?? "",
18
+ postalCode: a.postalCode ?? "",
19
+ country: a.country ?? ""
20
+ };
21
+ }
22
+ chunkUSNT2KNT_cjs.__name(addressToWebhookDto, "addressToWebhookDto");
23
+ function orderStatusLabel(status) {
24
+ const s = (status || "").toLowerCase();
25
+ if (s === "confirmed") return "Confirmed";
26
+ if (s === "pending") return "Pending";
27
+ if (!status) return "Pending";
28
+ return status.charAt(0).toUpperCase() + status.slice(1);
29
+ }
30
+ chunkUSNT2KNT_cjs.__name(orderStatusLabel, "orderStatusLabel");
31
+ function paymentRowToWebhookDto(p, amountMajorOverride) {
32
+ const currency = String(p.currency || "INR");
33
+ const amountMajor = amountMajorOverride != null && Number.isFinite(amountMajorOverride) ? amountMajorOverride : Number(p.amount);
34
+ const meta = {
35
+ ...p.metadata || {}
36
+ };
37
+ delete meta.amount;
38
+ delete meta.currency;
39
+ return {
40
+ id: String(p.externalReference || `payment_${p.id}`),
41
+ amount: roundMoney(amountMajor),
42
+ currency_code: currency,
43
+ captured_at: p.paidAt ? new Date(p.paidAt).toISOString() : (/* @__PURE__ */ new Date()).toISOString(),
44
+ provider_id: String(p.method || "unknown"),
45
+ data: {
46
+ status: "captured",
47
+ ...meta
48
+ }
49
+ };
50
+ }
51
+ chunkUSNT2KNT_cjs.__name(paymentRowToWebhookDto, "paymentRowToWebhookDto");
52
+ async function queueErpPaidOrderForOrderId(cms, dataSource, entityMap, orderId) {
53
+ try {
54
+ const configRepo = dataSource.getRepository(entityMap.configs);
55
+ const cfgRows = await configRepo.find({
56
+ where: {
57
+ settings: "erp",
58
+ deleted: false
59
+ }
60
+ });
61
+ for (const row of cfgRows) {
62
+ const r = row;
63
+ if (r.key === "enabled" && r.value === "false") {
64
+ chunkD5FBNKQM_cjs.logErp("paid-order:skip", {
65
+ orderId,
66
+ reason: "erp_config_disabled"
67
+ });
68
+ return;
69
+ }
70
+ }
71
+ if (!cms.getPlugin("erp")) {
72
+ chunkD5FBNKQM_cjs.logErp("paid-order:skip", {
73
+ orderId,
74
+ reason: "erp_plugin_missing"
75
+ });
76
+ return;
77
+ }
78
+ const orderRepo = dataSource.getRepository(entityMap.orders);
79
+ const ord = await orderRepo.findOne({
80
+ where: {
81
+ id: orderId
82
+ },
83
+ relations: [
84
+ "items",
85
+ "items.product",
86
+ "contact",
87
+ "billingAddress",
88
+ "shippingAddress",
89
+ "payments"
90
+ ]
91
+ });
92
+ if (!ord) {
93
+ chunkD5FBNKQM_cjs.logErp("paid-order:skip", {
94
+ orderId,
95
+ reason: "order_not_found"
96
+ });
97
+ return;
98
+ }
99
+ const o = ord;
100
+ const okKind = o.orderKind === void 0 || o.orderKind === null || o.orderKind === "sale";
101
+ if (!okKind) {
102
+ chunkD5FBNKQM_cjs.logErp("paid-order:skip", {
103
+ orderId,
104
+ reason: "order_kind_not_sale",
105
+ orderKind: o.orderKind
106
+ });
107
+ return;
108
+ }
109
+ const rawPayments = o.payments ?? [];
110
+ const completedPayments = rawPayments.filter((pay) => pay.status === "completed" && pay.deleted !== true);
111
+ if (!completedPayments.length) {
112
+ chunkD5FBNKQM_cjs.logErp("paid-order:skip", {
113
+ orderId,
114
+ reason: "no_completed_payments"
115
+ });
116
+ return;
117
+ }
118
+ const rawItems = o.items ?? [];
119
+ const lines = rawItems.filter((it) => it.product).map((it) => {
120
+ const p = it.product;
121
+ const sku = p.sku || `SKU-${p.id}`;
122
+ const itemType = typeof it.productType === "string" && it.productType.trim() ? String(it.productType).trim() : p.type === "service" ? "service" : "product";
123
+ return {
124
+ sku,
125
+ quantity: Number(it.quantity) || 1,
126
+ unitPrice: Number(it.unitPrice),
127
+ title: p.name || sku,
128
+ discount: 0,
129
+ tax: Number(it.tax) || 0,
130
+ uom: (typeof it.uom === "string" && it.uom.trim() ? it.uom : p.uom) || void 0,
131
+ tax_code: typeof it.taxCode === "string" && it.taxCode.trim() ? String(it.taxCode).trim() : void 0,
132
+ hsn_number: (typeof it.hsn === "string" && it.hsn.trim() ? it.hsn : p.hsn) || void 0,
133
+ type: itemType
134
+ };
135
+ });
136
+ if (!lines.length) {
137
+ chunkD5FBNKQM_cjs.logErp("paid-order:skip", {
138
+ orderId,
139
+ reason: "no_line_items_with_product"
140
+ });
141
+ return;
142
+ }
143
+ const contact = o.contact;
144
+ const orderTotalMajor = Number(o.total);
145
+ const paymentDtos = completedPayments.length === 1 && Number.isFinite(orderTotalMajor) ? [
146
+ paymentRowToWebhookDto(completedPayments[0], orderTotalMajor)
147
+ ] : completedPayments.map((pay) => paymentRowToWebhookDto(pay));
148
+ const baseMeta = o.metadata && typeof o.metadata === "object" && !Array.isArray(o.metadata) ? {
149
+ ...o.metadata
150
+ } : {};
151
+ const orderDto = {
152
+ platformType: "website",
153
+ platformOrderId: String(o.orderNumber),
154
+ platformOrderNumber: String(o.orderNumber),
155
+ order_date: o.createdAt ? new Date(o.createdAt).toISOString() : void 0,
156
+ status: orderStatusLabel(o.status),
157
+ customer: {
158
+ name: contact?.name || "",
159
+ email: contact?.email || "",
160
+ phone: contact?.phone || ""
161
+ },
162
+ shippingAddress: addressToWebhookDto(o.shippingAddress),
163
+ billingAddress: addressToWebhookDto(o.billingAddress),
164
+ items: lines,
165
+ payments: paymentDtos,
166
+ metadata: {
167
+ ...baseMeta,
168
+ source: "storefront"
169
+ }
170
+ };
171
+ chunkD5FBNKQM_cjs.logErp("paid-order:payload_built", {
172
+ orderId,
173
+ platformOrderId: orderDto.platformOrderId,
174
+ status: orderDto.status,
175
+ itemCount: lines.length,
176
+ skus: lines.map((l) => l.sku),
177
+ paymentCount: paymentDtos.length,
178
+ paymentIds: paymentDtos.map((p) => p.id),
179
+ total: orderTotalMajor
180
+ });
181
+ await chunkD5FBNKQM_cjs.queueErp(cms, {
182
+ kind: "order",
183
+ order: orderDto
184
+ });
185
+ } catch (e) {
186
+ chunkD5FBNKQM_cjs.errorErp("paid-order:enqueue_failed", {
187
+ orderId,
188
+ message: e instanceof Error ? e.message : String(e)
189
+ });
190
+ }
191
+ }
192
+ chunkUSNT2KNT_cjs.__name(queueErpPaidOrderForOrderId, "queueErpPaidOrderForOrderId");
193
+
194
+ exports.queueErpPaidOrderForOrderId = queueErpPaidOrderForOrderId;
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+
3
+ var chunkUCKN4BBY_cjs = require('./chunk-UCKN4BBY.cjs');
4
+ var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
5
+
6
+ // src/lib/emit-order-notification-trigger.ts
7
+ function maskPhone(raw) {
8
+ const digits = String(raw ?? "").replace(/\D/g, "");
9
+ if (digits.length <= 4) return "(none)";
10
+ return `***${digits.slice(-4)}`;
11
+ }
12
+ chunkUSNT2KNT_cjs.__name(maskPhone, "maskPhone");
13
+ async function emitOrderNotificationTrigger(triggerKey, orderId, deps, extra) {
14
+ if (!deps.entityMap.orders) {
15
+ console.warn("[notification-triggers] skip emit: orders entity missing from entityMap", {
16
+ triggerKey,
17
+ orderId
18
+ });
19
+ return;
20
+ }
21
+ const listenerCount = chunkUCKN4BBY_cjs.notificationTriggerEmitter.listenerCount("__any__");
22
+ if (listenerCount === 0) {
23
+ console.warn("[notification-triggers] no WhatsApp dispatcher listener \u2014 ensure createCmsApiHandler passes getCms (initWhatsappTriggerDispatcher)");
24
+ }
25
+ const orderRepo = deps.dataSource.getRepository(deps.entityMap.orders);
26
+ const fullOrder = await orderRepo.findOne({
27
+ where: {
28
+ id: orderId,
29
+ deleted: false
30
+ },
31
+ relations: [
32
+ "contact"
33
+ ]
34
+ });
35
+ if (!fullOrder) {
36
+ console.warn("[notification-triggers] skip emit: order not found", {
37
+ triggerKey,
38
+ orderId
39
+ });
40
+ return;
41
+ }
42
+ const fo = fullOrder;
43
+ const phone = fo.contact?.phone ?? null;
44
+ console.log("[notification-triggers] emit", {
45
+ triggerKey,
46
+ orderId,
47
+ orderNumber: fo.orderNumber ?? null,
48
+ phone: maskPhone(phone),
49
+ listeners: listenerCount
50
+ });
51
+ if (!phone?.trim()) {
52
+ console.warn("[notification-triggers] order contact has no phone \u2014 WhatsApp will be skipped", {
53
+ orderId
54
+ });
55
+ }
56
+ chunkUCKN4BBY_cjs.notificationTriggerEmitter.emitTrigger(triggerKey, {
57
+ orderId,
58
+ orderNumber: String(fo.orderNumber ?? ""),
59
+ customerName: fo.contact?.name ?? "",
60
+ customerPhone: phone,
61
+ total: fo.total ?? 0,
62
+ currency: String(fo.currency ?? "INR"),
63
+ vendorId: fo.vendorId ?? null,
64
+ ...extra?.refundAmount != null ? {
65
+ refundAmount: extra.refundAmount
66
+ } : {}
67
+ });
68
+ }
69
+ chunkUSNT2KNT_cjs.__name(emitOrderNotificationTrigger, "emitOrderNotificationTrigger");
70
+ function fireOrderNotificationTrigger(triggerKey, orderId, deps, extra) {
71
+ console.log("[notification-triggers] fire", {
72
+ triggerKey,
73
+ orderId
74
+ });
75
+ void emitOrderNotificationTrigger(triggerKey, orderId, deps, extra).catch((err) => {
76
+ console.error("[notification-triggers]", triggerKey, orderId, err);
77
+ });
78
+ }
79
+ chunkUSNT2KNT_cjs.__name(fireOrderNotificationTrigger, "fireOrderNotificationTrigger");
80
+
81
+ exports.emitOrderNotificationTrigger = emitOrderNotificationTrigger;
82
+ exports.fireOrderNotificationTrigger = fireOrderNotificationTrigger;
@@ -0,0 +1,21 @@
1
+ import { __name } from './chunk-SHUYVCID.js';
2
+
3
+ // src/plugins/erp/erp-config-enabled.ts
4
+ async function isErpIntegrationEnabled(cms, dataSource, entityMap) {
5
+ if (!cms.getPlugin("erp")) return false;
6
+ const configRepo = dataSource.getRepository(entityMap.configs);
7
+ const cfgRows = await configRepo.find({
8
+ where: {
9
+ settings: "erp",
10
+ deleted: false
11
+ }
12
+ });
13
+ for (const row of cfgRows) {
14
+ const r = row;
15
+ if (r.key === "enabled" && r.value === "false") return false;
16
+ }
17
+ return true;
18
+ }
19
+ __name(isErpIntegrationEnabled, "isErpIntegrationEnabled");
20
+
21
+ export { isErpIntegrationEnabled };