@infuro/cms-core 1.0.58 → 1.0.59

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/dist/admin.cjs CHANGED
@@ -887,7 +887,7 @@ var init_admin_config_context = __esm({
887
887
  var CMS_VERSION;
888
888
  var init_cms_version = __esm({
889
889
  "src/lib/cms-version.ts"() {
890
- CMS_VERSION = "1.0.58" ;
890
+ CMS_VERSION = "1.0.59" ;
891
891
  }
892
892
  });
893
893
  function useCatalogCategories(enabled = true) {
package/dist/admin.js CHANGED
@@ -853,7 +853,7 @@ var init_admin_config_context = __esm({
853
853
  var CMS_VERSION;
854
854
  var init_cms_version = __esm({
855
855
  "src/lib/cms-version.ts"() {
856
- CMS_VERSION = "1.0.58" ;
856
+ CMS_VERSION = "1.0.59" ;
857
857
  }
858
858
  });
859
859
  function useCatalogCategories(enabled = true) {
package/dist/api.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkBHUEXLD2_cjs = require('./chunk-BHUEXLD2.cjs');
3
+ var chunkMCCA7WLQ_cjs = require('./chunk-MCCA7WLQ.cjs');
4
4
  require('./chunk-XQ3QUHWR.cjs');
5
5
  require('./chunk-HY3AXLOI.cjs');
6
6
  require('./chunk-HXLC56ZK.cjs');
@@ -20,129 +20,133 @@ require('./chunk-USNT2KNT.cjs');
20
20
 
21
21
 
22
22
 
23
+ Object.defineProperty(exports, "autoExpireOrderIfPaymentTimeExceeded", {
24
+ enumerable: true,
25
+ get: function () { return chunkMCCA7WLQ_cjs.autoExpireOrderIfPaymentTimeExceeded; }
26
+ });
23
27
  Object.defineProperty(exports, "createAnalyticsHandlers", {
24
28
  enumerable: true,
25
- get: function () { return chunkBHUEXLD2_cjs.createAnalyticsHandlers; }
29
+ get: function () { return chunkMCCA7WLQ_cjs.createAnalyticsHandlers; }
26
30
  });
27
31
  Object.defineProperty(exports, "createBlogBySlugHandler", {
28
32
  enumerable: true,
29
- get: function () { return chunkBHUEXLD2_cjs.createBlogBySlugHandler; }
33
+ get: function () { return chunkMCCA7WLQ_cjs.createBlogBySlugHandler; }
30
34
  });
31
35
  Object.defineProperty(exports, "createChangePasswordHandler", {
32
36
  enumerable: true,
33
- get: function () { return chunkBHUEXLD2_cjs.createChangePasswordHandler; }
37
+ get: function () { return chunkMCCA7WLQ_cjs.createChangePasswordHandler; }
34
38
  });
35
39
  Object.defineProperty(exports, "createCmsApiHandler", {
36
40
  enumerable: true,
37
- get: function () { return chunkBHUEXLD2_cjs.createCmsApiHandler; }
41
+ get: function () { return chunkMCCA7WLQ_cjs.createCmsApiHandler; }
38
42
  });
39
43
  Object.defineProperty(exports, "createCrudByIdHandler", {
40
44
  enumerable: true,
41
- get: function () { return chunkBHUEXLD2_cjs.createCrudByIdHandler; }
45
+ get: function () { return chunkMCCA7WLQ_cjs.createCrudByIdHandler; }
42
46
  });
43
47
  Object.defineProperty(exports, "createCrudHandler", {
44
48
  enumerable: true,
45
- get: function () { return chunkBHUEXLD2_cjs.createCrudHandler; }
49
+ get: function () { return chunkMCCA7WLQ_cjs.createCrudHandler; }
46
50
  });
47
51
  Object.defineProperty(exports, "createDashboardStatsHandler", {
48
52
  enumerable: true,
49
- get: function () { return chunkBHUEXLD2_cjs.createDashboardStatsHandler; }
53
+ get: function () { return chunkMCCA7WLQ_cjs.createDashboardStatsHandler; }
50
54
  });
51
55
  Object.defineProperty(exports, "createEcommerceAnalyticsHandler", {
52
56
  enumerable: true,
53
- get: function () { return chunkBHUEXLD2_cjs.createEcommerceAnalyticsHandler; }
57
+ get: function () { return chunkMCCA7WLQ_cjs.createEcommerceAnalyticsHandler; }
54
58
  });
55
59
  Object.defineProperty(exports, "createForgotPasswordHandler", {
56
60
  enumerable: true,
57
- get: function () { return chunkBHUEXLD2_cjs.createForgotPasswordHandler; }
61
+ get: function () { return chunkMCCA7WLQ_cjs.createForgotPasswordHandler; }
58
62
  });
59
63
  Object.defineProperty(exports, "createFormBySlugHandler", {
60
64
  enumerable: true,
61
- get: function () { return chunkBHUEXLD2_cjs.createFormBySlugHandler; }
65
+ get: function () { return chunkMCCA7WLQ_cjs.createFormBySlugHandler; }
62
66
  });
63
67
  Object.defineProperty(exports, "createInviteAcceptHandler", {
64
68
  enumerable: true,
65
- get: function () { return chunkBHUEXLD2_cjs.createInviteAcceptHandler; }
69
+ get: function () { return chunkMCCA7WLQ_cjs.createInviteAcceptHandler; }
66
70
  });
67
71
  Object.defineProperty(exports, "createJobScheduleHandlers", {
68
72
  enumerable: true,
69
- get: function () { return chunkBHUEXLD2_cjs.createJobScheduleHandlers; }
73
+ get: function () { return chunkMCCA7WLQ_cjs.createJobScheduleHandlers; }
70
74
  });
71
75
  Object.defineProperty(exports, "createLlmAgentKnowledgeHandlers", {
72
76
  enumerable: true,
73
- get: function () { return chunkBHUEXLD2_cjs.createLlmAgentKnowledgeHandlers; }
77
+ get: function () { return chunkMCCA7WLQ_cjs.createLlmAgentKnowledgeHandlers; }
74
78
  });
75
79
  Object.defineProperty(exports, "createMediaZipExtractHandler", {
76
80
  enumerable: true,
77
- get: function () { return chunkBHUEXLD2_cjs.createMediaZipExtractHandler; }
81
+ get: function () { return chunkMCCA7WLQ_cjs.createMediaZipExtractHandler; }
78
82
  });
79
83
  Object.defineProperty(exports, "createSetPasswordHandler", {
80
84
  enumerable: true,
81
- get: function () { return chunkBHUEXLD2_cjs.createSetPasswordHandler; }
85
+ get: function () { return chunkMCCA7WLQ_cjs.createSetPasswordHandler; }
82
86
  });
83
87
  Object.defineProperty(exports, "createSettingsApiHandlers", {
84
88
  enumerable: true,
85
- get: function () { return chunkBHUEXLD2_cjs.createSettingsApiHandlers; }
89
+ get: function () { return chunkMCCA7WLQ_cjs.createSettingsApiHandlers; }
86
90
  });
87
91
  Object.defineProperty(exports, "createStorefrontApiHandler", {
88
92
  enumerable: true,
89
- get: function () { return chunkBHUEXLD2_cjs.createStorefrontApiHandler; }
93
+ get: function () { return chunkMCCA7WLQ_cjs.createStorefrontApiHandler; }
90
94
  });
91
95
  Object.defineProperty(exports, "createUploadHandler", {
92
96
  enumerable: true,
93
- get: function () { return chunkBHUEXLD2_cjs.createUploadHandler; }
97
+ get: function () { return chunkMCCA7WLQ_cjs.createUploadHandler; }
94
98
  });
95
99
  Object.defineProperty(exports, "createUserAuthApiRouter", {
96
100
  enumerable: true,
97
- get: function () { return chunkBHUEXLD2_cjs.createUserAuthApiRouter; }
101
+ get: function () { return chunkMCCA7WLQ_cjs.createUserAuthApiRouter; }
98
102
  });
99
103
  Object.defineProperty(exports, "createUserAvatarHandler", {
100
104
  enumerable: true,
101
- get: function () { return chunkBHUEXLD2_cjs.createUserAvatarHandler; }
105
+ get: function () { return chunkMCCA7WLQ_cjs.createUserAvatarHandler; }
102
106
  });
103
107
  Object.defineProperty(exports, "createUserProfileHandler", {
104
108
  enumerable: true,
105
- get: function () { return chunkBHUEXLD2_cjs.createUserProfileHandler; }
109
+ get: function () { return chunkMCCA7WLQ_cjs.createUserProfileHandler; }
106
110
  });
107
111
  Object.defineProperty(exports, "createUsersApiHandlers", {
108
112
  enumerable: true,
109
- get: function () { return chunkBHUEXLD2_cjs.createUsersApiHandlers; }
113
+ get: function () { return chunkMCCA7WLQ_cjs.createUsersApiHandlers; }
110
114
  });
111
115
  Object.defineProperty(exports, "createVendorDashboardHandler", {
112
116
  enumerable: true,
113
- get: function () { return chunkBHUEXLD2_cjs.createVendorDashboardHandler; }
117
+ get: function () { return chunkMCCA7WLQ_cjs.createVendorDashboardHandler; }
114
118
  });
115
119
  Object.defineProperty(exports, "createVendorOnboardHandlers", {
116
120
  enumerable: true,
117
- get: function () { return chunkBHUEXLD2_cjs.createVendorOnboardHandlers; }
121
+ get: function () { return chunkMCCA7WLQ_cjs.createVendorOnboardHandlers; }
118
122
  });
119
123
  Object.defineProperty(exports, "getPublicSettingsGroup", {
120
124
  enumerable: true,
121
- get: function () { return chunkBHUEXLD2_cjs.getPublicSettingsGroup; }
125
+ get: function () { return chunkMCCA7WLQ_cjs.getPublicSettingsGroup; }
122
126
  });
123
127
  Object.defineProperty(exports, "mergeGuardrailsIntoSystemPrompt", {
124
128
  enumerable: true,
125
- get: function () { return chunkBHUEXLD2_cjs.mergeGuardrailsIntoSystemPrompt; }
129
+ get: function () { return chunkMCCA7WLQ_cjs.mergeGuardrailsIntoSystemPrompt; }
126
130
  });
127
131
  Object.defineProperty(exports, "parseLlmAgentValidationRules", {
128
132
  enumerable: true,
129
- get: function () { return chunkBHUEXLD2_cjs.parseLlmAgentValidationRules; }
133
+ get: function () { return chunkMCCA7WLQ_cjs.parseLlmAgentValidationRules; }
130
134
  });
131
135
  Object.defineProperty(exports, "simpleDecrypt", {
132
136
  enumerable: true,
133
- get: function () { return chunkBHUEXLD2_cjs.simpleDecrypt; }
137
+ get: function () { return chunkMCCA7WLQ_cjs.simpleDecrypt; }
134
138
  });
135
139
  Object.defineProperty(exports, "simpleEncrypt", {
136
140
  enumerable: true,
137
- get: function () { return chunkBHUEXLD2_cjs.simpleEncrypt; }
141
+ get: function () { return chunkMCCA7WLQ_cjs.simpleEncrypt; }
138
142
  });
139
143
  Object.defineProperty(exports, "validateUserMessageAgainstAgentRules", {
140
144
  enumerable: true,
141
- get: function () { return chunkBHUEXLD2_cjs.validateUserMessageAgainstAgentRules; }
145
+ get: function () { return chunkMCCA7WLQ_cjs.validateUserMessageAgainstAgentRules; }
142
146
  });
143
147
  Object.defineProperty(exports, "validateUserMessageAgainstStructuredRules", {
144
148
  enumerable: true,
145
- get: function () { return chunkBHUEXLD2_cjs.validateUserMessageAgainstStructuredRules; }
149
+ get: function () { return chunkMCCA7WLQ_cjs.validateUserMessageAgainstStructuredRules; }
146
150
  });
147
151
  Object.defineProperty(exports, "createCmsAuthBundle", {
148
152
  enumerable: true,
package/dist/api.d.cts CHANGED
@@ -68,6 +68,7 @@ type VendorScope = {
68
68
  };
69
69
 
70
70
  type EntityMap = Record<string, typeorm.EntityTarget<typeorm.ObjectLiteral>>;
71
+ declare function autoExpireOrderIfPaymentTimeExceeded(dataSource: typeorm.DataSource, entityMap: Record<string, unknown>, order: Record<string, unknown> | null | undefined): Promise<Record<string, unknown> | null | undefined>;
71
72
  interface CrudHandlerOptions {
72
73
  requireAuth: (req: Request) => Promise<Response | null>;
73
74
  json: (body: unknown, init?: {
@@ -641,4 +642,4 @@ declare function createStorefrontApiHandler(config: StorefrontApiConfig): {
641
642
  handle(method: string, path: string[], req: Request): Promise<Response>;
642
643
  };
643
644
 
644
- export { type AnalyticsHandlerConfig, type AuthHandlersConfig, type BlogBySlugConfig, type ChangePasswordConfig, type ChatPublicConfig, type CmsApiHandlerConfig, type CmsGetter, type CrudHandlerOptions, type DashboardStatsConfig, type EcommerceAnalyticsConfig, type EntityMap, type ForgotPasswordConfig, type FormBySlugConfig, type GetPublicSettingsGroupConfig, type GetPublicSettingsGroupDataSource, type InviteAcceptConfig, type JobScheduleApiConfig, type LlmAgentKnowledgeApiConfig, type LlmAgentValidationRulesJson, type ParsedLlmAgentValidation, type SetPasswordConfig, type SettingsApiConfig, type StorefrontApiConfig, type StorefrontOtpFlags, type UploadHandlerConfig, type UserAuthApiConfig, type UserAvatarConfig, type UserProfileConfig, type UsersApiConfig, type VendorDashboardConfig, type VendorOnboardHandlersConfig, type VendorOwnerActivation, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCmsAuthBundle, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createSetPasswordHandler, createSettingsApiHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, getPublicSettingsGroup, mergeGuardrailsIntoSystemPrompt, parseLlmAgentValidationRules, simpleDecrypt, simpleEncrypt, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules };
645
+ export { type AnalyticsHandlerConfig, type AuthHandlersConfig, type BlogBySlugConfig, type ChangePasswordConfig, type ChatPublicConfig, type CmsApiHandlerConfig, type CmsGetter, type CrudHandlerOptions, type DashboardStatsConfig, type EcommerceAnalyticsConfig, type EntityMap, type ForgotPasswordConfig, type FormBySlugConfig, type GetPublicSettingsGroupConfig, type GetPublicSettingsGroupDataSource, type InviteAcceptConfig, type JobScheduleApiConfig, type LlmAgentKnowledgeApiConfig, type LlmAgentValidationRulesJson, type ParsedLlmAgentValidation, type SetPasswordConfig, type SettingsApiConfig, type StorefrontApiConfig, type StorefrontOtpFlags, type UploadHandlerConfig, type UserAuthApiConfig, type UserAvatarConfig, type UserProfileConfig, type UsersApiConfig, type VendorDashboardConfig, type VendorOnboardHandlersConfig, type VendorOwnerActivation, autoExpireOrderIfPaymentTimeExceeded, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCmsAuthBundle, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createSetPasswordHandler, createSettingsApiHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, getPublicSettingsGroup, mergeGuardrailsIntoSystemPrompt, parseLlmAgentValidationRules, simpleDecrypt, simpleEncrypt, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules };
package/dist/api.d.ts CHANGED
@@ -68,6 +68,7 @@ type VendorScope = {
68
68
  };
69
69
 
70
70
  type EntityMap = Record<string, typeorm.EntityTarget<typeorm.ObjectLiteral>>;
71
+ declare function autoExpireOrderIfPaymentTimeExceeded(dataSource: typeorm.DataSource, entityMap: Record<string, unknown>, order: Record<string, unknown> | null | undefined): Promise<Record<string, unknown> | null | undefined>;
71
72
  interface CrudHandlerOptions {
72
73
  requireAuth: (req: Request) => Promise<Response | null>;
73
74
  json: (body: unknown, init?: {
@@ -641,4 +642,4 @@ declare function createStorefrontApiHandler(config: StorefrontApiConfig): {
641
642
  handle(method: string, path: string[], req: Request): Promise<Response>;
642
643
  };
643
644
 
644
- export { type AnalyticsHandlerConfig, type AuthHandlersConfig, type BlogBySlugConfig, type ChangePasswordConfig, type ChatPublicConfig, type CmsApiHandlerConfig, type CmsGetter, type CrudHandlerOptions, type DashboardStatsConfig, type EcommerceAnalyticsConfig, type EntityMap, type ForgotPasswordConfig, type FormBySlugConfig, type GetPublicSettingsGroupConfig, type GetPublicSettingsGroupDataSource, type InviteAcceptConfig, type JobScheduleApiConfig, type LlmAgentKnowledgeApiConfig, type LlmAgentValidationRulesJson, type ParsedLlmAgentValidation, type SetPasswordConfig, type SettingsApiConfig, type StorefrontApiConfig, type StorefrontOtpFlags, type UploadHandlerConfig, type UserAuthApiConfig, type UserAvatarConfig, type UserProfileConfig, type UsersApiConfig, type VendorDashboardConfig, type VendorOnboardHandlersConfig, type VendorOwnerActivation, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCmsAuthBundle, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createSetPasswordHandler, createSettingsApiHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, getPublicSettingsGroup, mergeGuardrailsIntoSystemPrompt, parseLlmAgentValidationRules, simpleDecrypt, simpleEncrypt, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules };
645
+ export { type AnalyticsHandlerConfig, type AuthHandlersConfig, type BlogBySlugConfig, type ChangePasswordConfig, type ChatPublicConfig, type CmsApiHandlerConfig, type CmsGetter, type CrudHandlerOptions, type DashboardStatsConfig, type EcommerceAnalyticsConfig, type EntityMap, type ForgotPasswordConfig, type FormBySlugConfig, type GetPublicSettingsGroupConfig, type GetPublicSettingsGroupDataSource, type InviteAcceptConfig, type JobScheduleApiConfig, type LlmAgentKnowledgeApiConfig, type LlmAgentValidationRulesJson, type ParsedLlmAgentValidation, type SetPasswordConfig, type SettingsApiConfig, type StorefrontApiConfig, type StorefrontOtpFlags, type UploadHandlerConfig, type UserAuthApiConfig, type UserAvatarConfig, type UserProfileConfig, type UsersApiConfig, type VendorDashboardConfig, type VendorOnboardHandlersConfig, type VendorOwnerActivation, autoExpireOrderIfPaymentTimeExceeded, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCmsAuthBundle, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createSetPasswordHandler, createSettingsApiHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, getPublicSettingsGroup, mergeGuardrailsIntoSystemPrompt, parseLlmAgentValidationRules, simpleDecrypt, simpleEncrypt, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules };
package/dist/api.js CHANGED
@@ -1,4 +1,4 @@
1
- export { createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createSetPasswordHandler, createSettingsApiHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, getPublicSettingsGroup, mergeGuardrailsIntoSystemPrompt, parseLlmAgentValidationRules, simpleDecrypt, simpleEncrypt, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules } from './chunk-AGU3B5JW.js';
1
+ export { autoExpireOrderIfPaymentTimeExceeded, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createSetPasswordHandler, createSettingsApiHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, getPublicSettingsGroup, mergeGuardrailsIntoSystemPrompt, parseLlmAgentValidationRules, simpleDecrypt, simpleEncrypt, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules } from './chunk-BTUEUA5H.js';
2
2
  import './chunk-GO7PPYNU.js';
3
3
  import './chunk-3K5AIEIZ.js';
4
4
  import './chunk-HYW3MUXT.js';
@@ -1510,6 +1510,36 @@ async function validateLlmAgentScopeForWrite(dataSource, entityMap, scope, exclu
1510
1510
  __name(validateLlmAgentScopeForWrite, "validateLlmAgentScopeForWrite");
1511
1511
 
1512
1512
  // src/api/crud.ts
1513
+ async function autoExpireOrderIfPaymentTimeExceeded(dataSource, entityMap, order) {
1514
+ if (!order || typeof order !== "object") return order;
1515
+ const status = String(order.status ?? "").toLowerCase();
1516
+ if (status !== "pending") return order;
1517
+ const meta = typeof order.metadata === "object" && order.metadata ? order.metadata : {};
1518
+ const expiresAtStr = meta.paymentExpiresAt ? String(meta.paymentExpiresAt) : null;
1519
+ if (!expiresAtStr) return order;
1520
+ const expiresMs = new Date(expiresAtStr).getTime();
1521
+ if (Number.isNaN(expiresMs) || Date.now() <= expiresMs) return order;
1522
+ try {
1523
+ const orderId = Number(order.id);
1524
+ if (orderId && entityMap.orders) {
1525
+ const orderRepo = dataSource.getRepository(entityMap.orders);
1526
+ const updatedMeta = {
1527
+ ...meta,
1528
+ cancelReason: "Payment window expired (10 minutes)"
1529
+ };
1530
+ await orderRepo.update(orderId, {
1531
+ status: "cancelled",
1532
+ metadata: updatedMeta
1533
+ });
1534
+ order.status = "cancelled";
1535
+ order.metadata = updatedMeta;
1536
+ }
1537
+ } catch (err) {
1538
+ console.error("[payment-expiry] Auto-cancelling expired order failed", err);
1539
+ }
1540
+ return order;
1541
+ }
1542
+ __name(autoExpireOrderIfPaymentTimeExceeded, "autoExpireOrderIfPaymentTimeExceeded");
1513
1543
  var CRUD_LOG = "[cms-crud]";
1514
1544
  function logCrudClientError(op, detail) {
1515
1545
  console.warn(CRUD_LOG, op, detail);
@@ -3554,6 +3584,12 @@ function createCrudHandler(dataSource, entityMap, options) {
3554
3584
  }
3555
3585
  const itemsSummary = parts.join(", ") || "\u2014";
3556
3586
  const { payments: _payments, ...orderWithoutPayments } = order;
3587
+ const rawPayStatus = String(orderPayments[0]?.status ?? "unpaid").toLowerCase();
3588
+ const orderStatus = String(order.status ?? "").toLowerCase();
3589
+ let paymentStatus2 = rawPayStatus;
3590
+ if (orderStatus === "cancelled" && rawPayStatus !== "paid" && rawPayStatus !== "captured" && rawPayStatus !== "refunded") {
3591
+ paymentStatus2 = "unpaid";
3592
+ }
3557
3593
  return {
3558
3594
  ...orderWithoutPayments,
3559
3595
  contact: contact ? {
@@ -3563,7 +3599,7 @@ function createCrudHandler(dataSource, entityMap, options) {
3563
3599
  phone: contact.phone
3564
3600
  } : null,
3565
3601
  itemsSummary,
3566
- paymentStatus: orderPayments[0]?.status ?? "unpaid"
3602
+ paymentStatus: paymentStatus2
3567
3603
  };
3568
3604
  }));
3569
3605
  return json({
@@ -5448,6 +5484,9 @@ function createCrudByIdHandler(dataSource, entityMap, options) {
5448
5484
  "payments"
5449
5485
  ]
5450
5486
  });
5487
+ if (order) {
5488
+ await autoExpireOrderIfPaymentTimeExceeded(dataSource, entityMap, order);
5489
+ }
5451
5490
  const orderDenied = await vendorScopeAccessJson(order, scope2, resource);
5452
5491
  if (orderDenied) return orderDenied;
5453
5492
  const relatedOrders = await repo.find({
@@ -32884,6 +32923,23 @@ function createStorefrontApiHandler(config) {
32884
32923
  });
32885
32924
  return json(body);
32886
32925
  }
32926
+ if (path2[0] === "cart" && path2.length === 1 && method === "DELETE") {
32927
+ const { cart, err } = await getOrCreateCart(req);
32928
+ if (err) return err;
32929
+ const cartId = cart?.id;
32930
+ if (cartId && Number.isFinite(cartId) && cartId > 0) {
32931
+ await cartItemRepo().delete({
32932
+ cartId
32933
+ });
32934
+ await cartRepo().update(cartId, {
32935
+ updatedAt: /* @__PURE__ */ new Date()
32936
+ });
32937
+ }
32938
+ return json({
32939
+ ok: true,
32940
+ message: "Cart cleared"
32941
+ });
32942
+ }
32887
32943
  if (path2[0] === "cart" && path2[1] === "items" && path2.length === 2 && method === "POST") {
32888
32944
  const body = await req.json().catch(() => ({}));
32889
32945
  const capCart = await assertCaptchaOk(getCms, body, req, json);
@@ -33403,7 +33459,8 @@ function createStorefrontApiHandler(config) {
33403
33459
  total: prepOrd.orderTotal,
33404
33460
  currency: cart.currency || "INR",
33405
33461
  metadata: {
33406
- cartId
33462
+ cartId,
33463
+ paymentExpiresAt: new Date(Date.now() + 10 * 60 * 1e3).toISOString()
33407
33464
  }
33408
33465
  }));
33409
33466
  const oid = ord.id;
@@ -33476,7 +33533,11 @@ function createStorefrontApiHandler(config) {
33476
33533
  tax: prepChk.orderTax,
33477
33534
  discount: 0,
33478
33535
  total: prepChk.orderTotal,
33479
- currency: cart.currency || "INR"
33536
+ currency: cart.currency || "INR",
33537
+ metadata: {
33538
+ cartId: cart.id,
33539
+ paymentExpiresAt: new Date(Date.now() + 10 * 60 * 1e3).toISOString()
33540
+ }
33480
33541
  }));
33481
33542
  const oid = ord.id;
33482
33543
  await orderRepo().update(oid, {
@@ -33722,6 +33783,7 @@ function createStorefrontApiHandler(config) {
33722
33783
  status: 404
33723
33784
  });
33724
33785
  const o = order;
33786
+ await autoExpireOrderIfPaymentTimeExceeded(dataSource, entityMap, o);
33725
33787
  const lines = (o.items || []).map((line) => {
33726
33788
  const p = line.product;
33727
33789
  return {
@@ -33782,6 +33844,73 @@ function createStorefrontApiHandler(config) {
33782
33844
  fulfillmentPreview: fulfillmentPreview || void 0
33783
33845
  });
33784
33846
  }
33847
+ if (path2[0] === "orders" && path2.length === 3 && path2[2] === "cancel" && method === "POST") {
33848
+ const orderId = parseInt(path2[1], 10);
33849
+ if (!Number.isFinite(orderId)) return json({
33850
+ error: "Invalid order id"
33851
+ }, {
33852
+ status: 400
33853
+ });
33854
+ const order = await orderRepo().findOne({
33855
+ where: {
33856
+ id: orderId,
33857
+ deleted: false
33858
+ }
33859
+ });
33860
+ if (!order) return json({
33861
+ error: "Not found"
33862
+ }, {
33863
+ status: 404
33864
+ });
33865
+ const o = order;
33866
+ const status = String(o.status || "").toLowerCase();
33867
+ if (status === "pending") {
33868
+ const meta = typeof o.metadata === "object" && o.metadata ? o.metadata : {};
33869
+ const updatedMeta = {
33870
+ ...meta,
33871
+ cancelReason: "Cancelled by user during payment window"
33872
+ };
33873
+ await orderRepo().update(orderId, {
33874
+ status: "cancelled",
33875
+ metadata: updatedMeta
33876
+ });
33877
+ try {
33878
+ if (entityMap.payments) {
33879
+ const payRepo = dataSource.getRepository(entityMap.payments);
33880
+ const pendingPayment = await payRepo.findOne({
33881
+ where: {
33882
+ orderId,
33883
+ status: "pending"
33884
+ }
33885
+ });
33886
+ if (pendingPayment) {
33887
+ await payRepo.update(pendingPayment.id, {
33888
+ status: "unpaid"
33889
+ });
33890
+ }
33891
+ }
33892
+ } catch {
33893
+ }
33894
+ try {
33895
+ const { cart } = await getOrCreateCart(req);
33896
+ const cartId = cart?.id;
33897
+ if (cartId && Number.isFinite(cartId) && cartId > 0) {
33898
+ await cartItemRepo().delete({
33899
+ cartId
33900
+ });
33901
+ await cartRepo().update(cartId, {
33902
+ updatedAt: /* @__PURE__ */ new Date()
33903
+ });
33904
+ }
33905
+ } catch {
33906
+ }
33907
+ }
33908
+ return json({
33909
+ ok: true,
33910
+ orderId,
33911
+ status: "cancelled"
33912
+ });
33913
+ }
33785
33914
  return json({
33786
33915
  error: "Not found"
33787
33916
  }, {
@@ -33799,4 +33928,4 @@ function createStorefrontApiHandler(config) {
33799
33928
  }
33800
33929
  __name(createStorefrontApiHandler, "createStorefrontApiHandler");
33801
33930
 
33802
- export { Address, Attendee, Attribute, BLOG_GENERATOR_AGENT_NAME, BLOG_GENERATOR_DEFAULT_SYSTEM_INSTRUCTION, BLOG_GENERATOR_DEFAULT_VALIDATION_RULES, BLOG_GENERATOR_LLM_AGENT_SLUG, BLOG_GENERATOR_MARKDOWN_ARTICLE_SEPARATOR, BLOG_METADATA_ENRICHER_AGENT_NAME, BLOG_METADATA_ENRICHER_DEFAULT_SYSTEM_INSTRUCTION, BLOG_METADATA_ENRICHER_DEFAULT_VALIDATION_RULES, BLOG_METADATA_ENRICHER_LLM_AGENT_SLUG, Blog, BlogGeneratorService, Brand, CMS_ENTITY_MAP, Cart, CartItem, Category, ChatConversation, ChatMessage, Collection, Combo, ComboItem, Comment, Config, Contact, Currency, CurrencyExchange, Customer, Customer_Contacts, Discount, DiscountRules, Event, EventProduct, Form, FormField, FormSubmission, JobSchedule, JobScheduleRun, KnowledgeBaseChunk, KnowledgeBaseDocument, LlmAgent, LlmAgentKnowledgeDocument, Media, MessageTemplate, Order, OrderAddresses, OrderDiscounts, OrderItem, OrderNotificationBinding, OrderNotificationTrigger, OtpChallenge, Page, PasswordResetToken, Payment, Permission, Product, ProductAttribute, ProductCategory, ProductConfig, ProductVariant, RefundPolicy, RefundRequest, RssArticle, RssFeed, Seo, Tag, Tax, User, UserDeviceToken, UserGroup, Vendor, VendorCustomer, VendorRole, VendorRolePermission, VendorUser, VendorUserProfile, Wishlist, WishlistItem, ZIP_MIME_TYPES, applyApprovalStatusSideEffects, applyEventApprovalStatusSideEffects, applyRotatingVendorInvite, applyVendorCustomersContactFilter, applyVendorEventCreateApproval, applyVendorProductCreateApproval, assertCaptchaOk, assertContactAllowedForVendorOrder, assertEventApprovalUpdate, assertProductApprovalUpdate, buildBlogMetadataUserPrompt, buildCronFromSchedule, buildRssUserPromptFromFeeds, buildUserInviteLink, buildVendorInviteLink, calculateOrderRefundPreview, calculateRefundFromPolicy, checkAndIncrementDiscountUsage, checkEventsEnabled, checkMultiVendorEnabled, completeUserInviteAccept, consumeAppliedDiscountUsages, contactIsVendorCustomer, countDiscountOrdersForContact, countRecentOtpSends, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCmsApp, createCmsAppWithMessaging, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createEventOrderMessageTemplateHandlers, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createMessageTemplateRowLoader, createOtpChallenge, createSetPasswordHandler, createSettingsApiHandlers, createSocialMediaHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, daysBeforeEventStart, decrementDiscountUsage, describeEventTierPolicy, ensureMessagingPluginsOnCms, ensureScheduleQueueWorker, ensureVendorCustomerForOrderContact, ensureVendorCustomersForOrder, findActiveRefundPolicyForVendor, findUserByInviteToken, findVendorByInviteToken, formatTierRange, generateNumericOtp, getPublicSettingsGroup, getRequireEventApproval, getRequireProductApproval, getRssArticleSummaryFromItem, getVendorCatalogCreateFlags, hashOtpCode, hydrateVendorSessionUser, invalidateEventsCache, invalidateMultiVendorCache, invalidateRequireEventApprovalCache, invalidateRequireProductApprovalCache, invalidateVendorCatalogCreateFlagsCache, isCustomerTypeContact, isMaxPerUserUsageReached, isMaxTotalUsageReached, isZipMedia, llmAgentToChatAgentOptions, loadSettingsGroupFromDb, loadUserVendorContext, mergeGuardrailsIntoSystemPrompt, messagingPlugins, metaFetchUserManagedPages, metaPostPageFeed, metaPostPagePhoto, metaResolvePageAccessToken, newUserInviteToken, normalizePhoneE164, normalizeRefundTiers, overlayCmsPlugins, parseBlogGeneratorAgentContent, parseBlogGeneratorModelOutput, parseBlogMetadataEnrichmentJson, parseLlmAgentValidationRules, pgBossScheduleNameForId, queueErpCreateContactIfEnabled, queueJobScheduleNow, queuePlugin, queueSms, recordDiscountUsage, registerJobRunnerWorker, registerMessagingQueueProcessors, registerSmsQueueProcessor, relativePathFromMediaParentId, resolveBlogCategoryIdByName, resolveSettingsEncryptionKey, resolveVendorIdForContactCheck, sanitizeMediaFolderPath, sanitizeStorageSegment, sendVendorOnboardEmails, simpleDecrypt, simpleEncrypt, syncJobScheduleToPgBoss, validateRefundTiers, validateScheduleInput, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules, verifyAndConsumeOtpChallenge, verifyOtpCodeHash, whatsappPlugin, wrapGetCmsWithMessaging };
33931
+ export { Address, Attendee, Attribute, BLOG_GENERATOR_AGENT_NAME, BLOG_GENERATOR_DEFAULT_SYSTEM_INSTRUCTION, BLOG_GENERATOR_DEFAULT_VALIDATION_RULES, BLOG_GENERATOR_LLM_AGENT_SLUG, BLOG_GENERATOR_MARKDOWN_ARTICLE_SEPARATOR, BLOG_METADATA_ENRICHER_AGENT_NAME, BLOG_METADATA_ENRICHER_DEFAULT_SYSTEM_INSTRUCTION, BLOG_METADATA_ENRICHER_DEFAULT_VALIDATION_RULES, BLOG_METADATA_ENRICHER_LLM_AGENT_SLUG, Blog, BlogGeneratorService, Brand, CMS_ENTITY_MAP, Cart, CartItem, Category, ChatConversation, ChatMessage, Collection, Combo, ComboItem, Comment, Config, Contact, Currency, CurrencyExchange, Customer, Customer_Contacts, Discount, DiscountRules, Event, EventProduct, Form, FormField, FormSubmission, JobSchedule, JobScheduleRun, KnowledgeBaseChunk, KnowledgeBaseDocument, LlmAgent, LlmAgentKnowledgeDocument, Media, MessageTemplate, Order, OrderAddresses, OrderDiscounts, OrderItem, OrderNotificationBinding, OrderNotificationTrigger, OtpChallenge, Page, PasswordResetToken, Payment, Permission, Product, ProductAttribute, ProductCategory, ProductConfig, ProductVariant, RefundPolicy, RefundRequest, RssArticle, RssFeed, Seo, Tag, Tax, User, UserDeviceToken, UserGroup, Vendor, VendorCustomer, VendorRole, VendorRolePermission, VendorUser, VendorUserProfile, Wishlist, WishlistItem, ZIP_MIME_TYPES, applyApprovalStatusSideEffects, applyEventApprovalStatusSideEffects, applyRotatingVendorInvite, applyVendorCustomersContactFilter, applyVendorEventCreateApproval, applyVendorProductCreateApproval, assertCaptchaOk, assertContactAllowedForVendorOrder, assertEventApprovalUpdate, assertProductApprovalUpdate, autoExpireOrderIfPaymentTimeExceeded, buildBlogMetadataUserPrompt, buildCronFromSchedule, buildRssUserPromptFromFeeds, buildUserInviteLink, buildVendorInviteLink, calculateOrderRefundPreview, calculateRefundFromPolicy, checkAndIncrementDiscountUsage, checkEventsEnabled, checkMultiVendorEnabled, completeUserInviteAccept, consumeAppliedDiscountUsages, contactIsVendorCustomer, countDiscountOrdersForContact, countRecentOtpSends, createAnalyticsHandlers, createBlogBySlugHandler, createChangePasswordHandler, createCmsApiHandler, createCmsApp, createCmsAppWithMessaging, createCrudByIdHandler, createCrudHandler, createDashboardStatsHandler, createEcommerceAnalyticsHandler, createEventOrderMessageTemplateHandlers, createForgotPasswordHandler, createFormBySlugHandler, createInviteAcceptHandler, createJobScheduleHandlers, createLlmAgentKnowledgeHandlers, createMediaZipExtractHandler, createMessageTemplateRowLoader, createOtpChallenge, createSetPasswordHandler, createSettingsApiHandlers, createSocialMediaHandlers, createStorefrontApiHandler, createUploadHandler, createUserAuthApiRouter, createUserAvatarHandler, createUserProfileHandler, createUsersApiHandlers, createVendorDashboardHandler, createVendorOnboardHandlers, daysBeforeEventStart, decrementDiscountUsage, describeEventTierPolicy, ensureMessagingPluginsOnCms, ensureScheduleQueueWorker, ensureVendorCustomerForOrderContact, ensureVendorCustomersForOrder, findActiveRefundPolicyForVendor, findUserByInviteToken, findVendorByInviteToken, formatTierRange, generateNumericOtp, getPublicSettingsGroup, getRequireEventApproval, getRequireProductApproval, getRssArticleSummaryFromItem, getVendorCatalogCreateFlags, hashOtpCode, hydrateVendorSessionUser, invalidateEventsCache, invalidateMultiVendorCache, invalidateRequireEventApprovalCache, invalidateRequireProductApprovalCache, invalidateVendorCatalogCreateFlagsCache, isCustomerTypeContact, isMaxPerUserUsageReached, isMaxTotalUsageReached, isZipMedia, llmAgentToChatAgentOptions, loadSettingsGroupFromDb, loadUserVendorContext, mergeGuardrailsIntoSystemPrompt, messagingPlugins, metaFetchUserManagedPages, metaPostPageFeed, metaPostPagePhoto, metaResolvePageAccessToken, newUserInviteToken, normalizePhoneE164, normalizeRefundTiers, overlayCmsPlugins, parseBlogGeneratorAgentContent, parseBlogGeneratorModelOutput, parseBlogMetadataEnrichmentJson, parseLlmAgentValidationRules, pgBossScheduleNameForId, queueErpCreateContactIfEnabled, queueJobScheduleNow, queuePlugin, queueSms, recordDiscountUsage, registerJobRunnerWorker, registerMessagingQueueProcessors, registerSmsQueueProcessor, relativePathFromMediaParentId, resolveBlogCategoryIdByName, resolveSettingsEncryptionKey, resolveVendorIdForContactCheck, sanitizeMediaFolderPath, sanitizeStorageSegment, sendVendorOnboardEmails, simpleDecrypt, simpleEncrypt, syncJobScheduleToPgBoss, validateRefundTiers, validateScheduleInput, validateUserMessageAgainstAgentRules, validateUserMessageAgainstStructuredRules, verifyAndConsumeOtpChallenge, verifyOtpCodeHash, whatsappPlugin, wrapGetCmsWithMessaging };
@@ -1520,6 +1520,36 @@ async function validateLlmAgentScopeForWrite(dataSource, entityMap, scope, exclu
1520
1520
  chunkUSNT2KNT_cjs.__name(validateLlmAgentScopeForWrite, "validateLlmAgentScopeForWrite");
1521
1521
 
1522
1522
  // src/api/crud.ts
1523
+ async function autoExpireOrderIfPaymentTimeExceeded(dataSource, entityMap, order) {
1524
+ if (!order || typeof order !== "object") return order;
1525
+ const status = String(order.status ?? "").toLowerCase();
1526
+ if (status !== "pending") return order;
1527
+ const meta = typeof order.metadata === "object" && order.metadata ? order.metadata : {};
1528
+ const expiresAtStr = meta.paymentExpiresAt ? String(meta.paymentExpiresAt) : null;
1529
+ if (!expiresAtStr) return order;
1530
+ const expiresMs = new Date(expiresAtStr).getTime();
1531
+ if (Number.isNaN(expiresMs) || Date.now() <= expiresMs) return order;
1532
+ try {
1533
+ const orderId = Number(order.id);
1534
+ if (orderId && entityMap.orders) {
1535
+ const orderRepo = dataSource.getRepository(entityMap.orders);
1536
+ const updatedMeta = {
1537
+ ...meta,
1538
+ cancelReason: "Payment window expired (10 minutes)"
1539
+ };
1540
+ await orderRepo.update(orderId, {
1541
+ status: "cancelled",
1542
+ metadata: updatedMeta
1543
+ });
1544
+ order.status = "cancelled";
1545
+ order.metadata = updatedMeta;
1546
+ }
1547
+ } catch (err) {
1548
+ console.error("[payment-expiry] Auto-cancelling expired order failed", err);
1549
+ }
1550
+ return order;
1551
+ }
1552
+ chunkUSNT2KNT_cjs.__name(autoExpireOrderIfPaymentTimeExceeded, "autoExpireOrderIfPaymentTimeExceeded");
1523
1553
  var CRUD_LOG = "[cms-crud]";
1524
1554
  function logCrudClientError(op, detail) {
1525
1555
  console.warn(CRUD_LOG, op, detail);
@@ -3564,6 +3594,12 @@ function createCrudHandler(dataSource, entityMap, options) {
3564
3594
  }
3565
3595
  const itemsSummary = parts.join(", ") || "\u2014";
3566
3596
  const { payments: _payments, ...orderWithoutPayments } = order;
3597
+ const rawPayStatus = String(orderPayments[0]?.status ?? "unpaid").toLowerCase();
3598
+ const orderStatus = String(order.status ?? "").toLowerCase();
3599
+ let paymentStatus2 = rawPayStatus;
3600
+ if (orderStatus === "cancelled" && rawPayStatus !== "paid" && rawPayStatus !== "captured" && rawPayStatus !== "refunded") {
3601
+ paymentStatus2 = "unpaid";
3602
+ }
3567
3603
  return {
3568
3604
  ...orderWithoutPayments,
3569
3605
  contact: contact ? {
@@ -3573,7 +3609,7 @@ function createCrudHandler(dataSource, entityMap, options) {
3573
3609
  phone: contact.phone
3574
3610
  } : null,
3575
3611
  itemsSummary,
3576
- paymentStatus: orderPayments[0]?.status ?? "unpaid"
3612
+ paymentStatus: paymentStatus2
3577
3613
  };
3578
3614
  }));
3579
3615
  return json({
@@ -5458,6 +5494,9 @@ function createCrudByIdHandler(dataSource, entityMap, options) {
5458
5494
  "payments"
5459
5495
  ]
5460
5496
  });
5497
+ if (order) {
5498
+ await autoExpireOrderIfPaymentTimeExceeded(dataSource, entityMap, order);
5499
+ }
5461
5500
  const orderDenied = await vendorScopeAccessJson(order, scope2, resource);
5462
5501
  if (orderDenied) return orderDenied;
5463
5502
  const relatedOrders = await repo.find({
@@ -32894,6 +32933,23 @@ function createStorefrontApiHandler(config) {
32894
32933
  });
32895
32934
  return json(body);
32896
32935
  }
32936
+ if (path2[0] === "cart" && path2.length === 1 && method === "DELETE") {
32937
+ const { cart, err } = await getOrCreateCart(req);
32938
+ if (err) return err;
32939
+ const cartId = cart?.id;
32940
+ if (cartId && Number.isFinite(cartId) && cartId > 0) {
32941
+ await cartItemRepo().delete({
32942
+ cartId
32943
+ });
32944
+ await cartRepo().update(cartId, {
32945
+ updatedAt: /* @__PURE__ */ new Date()
32946
+ });
32947
+ }
32948
+ return json({
32949
+ ok: true,
32950
+ message: "Cart cleared"
32951
+ });
32952
+ }
32897
32953
  if (path2[0] === "cart" && path2[1] === "items" && path2.length === 2 && method === "POST") {
32898
32954
  const body = await req.json().catch(() => ({}));
32899
32955
  const capCart = await assertCaptchaOk(getCms, body, req, json);
@@ -33413,7 +33469,8 @@ function createStorefrontApiHandler(config) {
33413
33469
  total: prepOrd.orderTotal,
33414
33470
  currency: cart.currency || "INR",
33415
33471
  metadata: {
33416
- cartId
33472
+ cartId,
33473
+ paymentExpiresAt: new Date(Date.now() + 10 * 60 * 1e3).toISOString()
33417
33474
  }
33418
33475
  }));
33419
33476
  const oid = ord.id;
@@ -33486,7 +33543,11 @@ function createStorefrontApiHandler(config) {
33486
33543
  tax: prepChk.orderTax,
33487
33544
  discount: 0,
33488
33545
  total: prepChk.orderTotal,
33489
- currency: cart.currency || "INR"
33546
+ currency: cart.currency || "INR",
33547
+ metadata: {
33548
+ cartId: cart.id,
33549
+ paymentExpiresAt: new Date(Date.now() + 10 * 60 * 1e3).toISOString()
33550
+ }
33490
33551
  }));
33491
33552
  const oid = ord.id;
33492
33553
  await orderRepo().update(oid, {
@@ -33732,6 +33793,7 @@ function createStorefrontApiHandler(config) {
33732
33793
  status: 404
33733
33794
  });
33734
33795
  const o = order;
33796
+ await autoExpireOrderIfPaymentTimeExceeded(dataSource, entityMap, o);
33735
33797
  const lines = (o.items || []).map((line) => {
33736
33798
  const p = line.product;
33737
33799
  return {
@@ -33792,6 +33854,73 @@ function createStorefrontApiHandler(config) {
33792
33854
  fulfillmentPreview: fulfillmentPreview || void 0
33793
33855
  });
33794
33856
  }
33857
+ if (path2[0] === "orders" && path2.length === 3 && path2[2] === "cancel" && method === "POST") {
33858
+ const orderId = parseInt(path2[1], 10);
33859
+ if (!Number.isFinite(orderId)) return json({
33860
+ error: "Invalid order id"
33861
+ }, {
33862
+ status: 400
33863
+ });
33864
+ const order = await orderRepo().findOne({
33865
+ where: {
33866
+ id: orderId,
33867
+ deleted: false
33868
+ }
33869
+ });
33870
+ if (!order) return json({
33871
+ error: "Not found"
33872
+ }, {
33873
+ status: 404
33874
+ });
33875
+ const o = order;
33876
+ const status = String(o.status || "").toLowerCase();
33877
+ if (status === "pending") {
33878
+ const meta = typeof o.metadata === "object" && o.metadata ? o.metadata : {};
33879
+ const updatedMeta = {
33880
+ ...meta,
33881
+ cancelReason: "Cancelled by user during payment window"
33882
+ };
33883
+ await orderRepo().update(orderId, {
33884
+ status: "cancelled",
33885
+ metadata: updatedMeta
33886
+ });
33887
+ try {
33888
+ if (entityMap.payments) {
33889
+ const payRepo = dataSource.getRepository(entityMap.payments);
33890
+ const pendingPayment = await payRepo.findOne({
33891
+ where: {
33892
+ orderId,
33893
+ status: "pending"
33894
+ }
33895
+ });
33896
+ if (pendingPayment) {
33897
+ await payRepo.update(pendingPayment.id, {
33898
+ status: "unpaid"
33899
+ });
33900
+ }
33901
+ }
33902
+ } catch {
33903
+ }
33904
+ try {
33905
+ const { cart } = await getOrCreateCart(req);
33906
+ const cartId = cart?.id;
33907
+ if (cartId && Number.isFinite(cartId) && cartId > 0) {
33908
+ await cartItemRepo().delete({
33909
+ cartId
33910
+ });
33911
+ await cartRepo().update(cartId, {
33912
+ updatedAt: /* @__PURE__ */ new Date()
33913
+ });
33914
+ }
33915
+ } catch {
33916
+ }
33917
+ }
33918
+ return json({
33919
+ ok: true,
33920
+ orderId,
33921
+ status: "cancelled"
33922
+ });
33923
+ }
33795
33924
  return json({
33796
33925
  error: "Not found"
33797
33926
  }, {
@@ -33831,6 +33960,7 @@ exports.assertCaptchaOk = assertCaptchaOk;
33831
33960
  exports.assertContactAllowedForVendorOrder = assertContactAllowedForVendorOrder;
33832
33961
  exports.assertEventApprovalUpdate = assertEventApprovalUpdate;
33833
33962
  exports.assertProductApprovalUpdate = assertProductApprovalUpdate;
33963
+ exports.autoExpireOrderIfPaymentTimeExceeded = autoExpireOrderIfPaymentTimeExceeded;
33834
33964
  exports.buildBlogMetadataUserPrompt = buildBlogMetadataUserPrompt;
33835
33965
  exports.buildCronFromSchedule = buildCronFromSchedule;
33836
33966
  exports.buildRssUserPromptFromFeeds = buildRssUserPromptFromFeeds;