@infuro/cms-core 1.0.71 → 1.0.72

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
@@ -895,7 +895,7 @@ var init_admin_config_context = __esm({
895
895
  var CMS_VERSION;
896
896
  var init_cms_version = __esm({
897
897
  "src/lib/cms-version.ts"() {
898
- CMS_VERSION = "1.0.71" ;
898
+ CMS_VERSION = "1.0.72" ;
899
899
  }
900
900
  });
901
901
  function useCatalogCategories(enabled = true) {
@@ -24475,7 +24475,8 @@ function DetailPageHeader({ title, subtitle, backHref, backLabel = "Back", close
24475
24475
  size: "icon",
24476
24476
  className: "h-8 w-8 border border-gray-600 bg-transparent text-white hover:bg-gray-700",
24477
24477
  onClick: item.onClick,
24478
- title: item.label
24478
+ title: item.label,
24479
+ disabled: item.disabled
24479
24480
  }, /* @__PURE__ */ React.createElement(Icon2, {
24480
24481
  className: "h-4 w-4"
24481
24482
  }), /* @__PURE__ */ React.createElement("span", {
@@ -24489,7 +24490,8 @@ function DetailPageHeader({ title, subtitle, backHref, backLabel = "Back", close
24489
24490
  key: i,
24490
24491
  variant: item.variant ?? "outline",
24491
24492
  size: "sm",
24492
- onClick: item.onClick
24493
+ onClick: item.onClick,
24494
+ disabled: item.disabled
24493
24495
  }, /* @__PURE__ */ React.createElement(Icon2, {
24494
24496
  className: "h-4 w-4 mr-1"
24495
24497
  }), item.label);
@@ -37319,6 +37321,7 @@ function VendorEditPage({ vendorId }) {
37319
37321
  const create = isCreate6(vendorId);
37320
37322
  const [loading, setLoading] = React26.useState(!create);
37321
37323
  const [saving, setSaving] = React26.useState(false);
37324
+ const createInFlightRef = React26.useRef(false);
37322
37325
  const [errors, setErrors] = React26.useState([]);
37323
37326
  const [name, setName] = React26.useState("");
37324
37327
  const [legalName, setLegalName] = React26.useState("");
@@ -37677,7 +37680,7 @@ function VendorEditPage({ vendorId }) {
37677
37680
  router.push(listReturnUrl);
37678
37681
  }, "closeInviteDialog");
37679
37682
  const handleCreate = /* @__PURE__ */ __name(async () => {
37680
- setSaving(true);
37683
+ if (createInFlightRef.current) return;
37681
37684
  setErrors([]);
37682
37685
  const createMissing = [];
37683
37686
  if (!name.trim()) createMissing.push("Store name is required");
@@ -37685,14 +37688,12 @@ function VendorEditPage({ vendorId }) {
37685
37688
  if (!ownerEmail.trim()) createMissing.push("Owner email is required");
37686
37689
  if (createMissing.length) {
37687
37690
  setErrors(createMissing);
37688
- setSaving(false);
37689
37691
  return;
37690
37692
  }
37691
37693
  if (!termsAccepted) {
37692
37694
  setErrors([
37693
37695
  "You must confirm that the vendor has accepted the terms and conditions"
37694
37696
  ]);
37695
- setSaving(false);
37696
37697
  return;
37697
37698
  }
37698
37699
  const formattedOwnerPhone = formatPhoneWithCountryCode(ownerPhoneCode, ownerPhoneNum);
@@ -37703,7 +37704,6 @@ function VendorEditPage({ vendorId }) {
37703
37704
  setErrors([
37704
37705
  taxError
37705
37706
  ]);
37706
- setSaving(false);
37707
37707
  return;
37708
37708
  }
37709
37709
  const personErr = validatePersonKyc({
@@ -37716,25 +37716,22 @@ function VendorEditPage({ vendorId }) {
37716
37716
  setErrors([
37717
37717
  personErr
37718
37718
  ]);
37719
- setSaving(false);
37720
37719
  return;
37721
37720
  }
37722
37721
  if (!ownerAddressLine1.trim()) {
37723
37722
  setErrors([
37724
37723
  "Owner address line 1 is required"
37725
37724
  ]);
37726
- setSaving(false);
37727
37725
  return;
37728
37726
  }
37729
- const abortController = new AbortController();
37730
- const timeoutId = setTimeout(() => abortController.abort(), 15e3);
37727
+ createInFlightRef.current = true;
37728
+ setSaving(true);
37731
37729
  try {
37732
37730
  const res = await fetch("/api/admin/vendors/onboard", {
37733
37731
  method: "POST",
37734
37732
  headers: {
37735
37733
  "Content-Type": "application/json"
37736
37734
  },
37737
- signal: abortController.signal,
37738
37735
  body: JSON.stringify({
37739
37736
  activation: "invite",
37740
37737
  sendOwnerEmail: false,
@@ -37755,7 +37752,6 @@ function VendorEditPage({ vendorId }) {
37755
37752
  }
37756
37753
  })
37757
37754
  });
37758
- clearTimeout(timeoutId);
37759
37755
  const data = await res.json().catch(() => ({}));
37760
37756
  if (!res.ok) {
37761
37757
  setErrors([
@@ -37781,17 +37777,11 @@ function VendorEditPage({ vendorId }) {
37781
37777
  inviteLink
37782
37778
  });
37783
37779
  } catch (err) {
37784
- if (err instanceof DOMException && err.name === "AbortError") {
37785
- setErrors([
37786
- "Request timed out. Your entered data is preserved. Please click submit again."
37787
- ]);
37788
- } else {
37789
- setErrors([
37790
- err instanceof Error && err.message || "Request failed"
37791
- ]);
37792
- }
37780
+ setErrors([
37781
+ err instanceof Error && err.message || "Request failed"
37782
+ ]);
37793
37783
  } finally {
37794
- clearTimeout(timeoutId);
37784
+ createInFlightRef.current = false;
37795
37785
  setSaving(false);
37796
37786
  }
37797
37787
  }, "handleCreate");
@@ -37919,13 +37909,15 @@ function VendorEditPage({ vendorId }) {
37919
37909
  {
37920
37910
  label: saving ? "Creating\u2026" : "Create vendor",
37921
37911
  icon: LucideIcons.Save,
37922
- onClick: handleCreate
37912
+ onClick: handleCreate,
37913
+ disabled: saving
37923
37914
  }
37924
37915
  ] : [
37925
37916
  {
37926
37917
  label: saving ? "Saving\u2026" : "Save",
37927
37918
  icon: LucideIcons.Save,
37928
- onClick: handleSave
37919
+ onClick: handleSave,
37920
+ disabled: saving
37929
37921
  },
37930
37922
  {
37931
37923
  label: active ? "Deactivate" : "Activate",
package/dist/admin.d.cts CHANGED
@@ -523,6 +523,7 @@ interface DetailPageHeaderMenuItem {
523
523
  className?: string;
524
524
  }>;
525
525
  variant?: "default" | "outline" | "secondary" | "destructive";
526
+ disabled?: boolean;
526
527
  }
527
528
  interface DetailPageHeaderProps {
528
529
  title: React.ReactNode;
package/dist/admin.d.ts CHANGED
@@ -523,6 +523,7 @@ interface DetailPageHeaderMenuItem {
523
523
  className?: string;
524
524
  }>;
525
525
  variant?: "default" | "outline" | "secondary" | "destructive";
526
+ disabled?: boolean;
526
527
  }
527
528
  interface DetailPageHeaderProps {
528
529
  title: React.ReactNode;
package/dist/admin.js CHANGED
@@ -861,7 +861,7 @@ var init_admin_config_context = __esm({
861
861
  var CMS_VERSION;
862
862
  var init_cms_version = __esm({
863
863
  "src/lib/cms-version.ts"() {
864
- CMS_VERSION = "1.0.71" ;
864
+ CMS_VERSION = "1.0.72" ;
865
865
  }
866
866
  });
867
867
  function useCatalogCategories(enabled = true) {
@@ -24441,7 +24441,8 @@ function DetailPageHeader({ title, subtitle, backHref, backLabel = "Back", close
24441
24441
  size: "icon",
24442
24442
  className: "h-8 w-8 border border-gray-600 bg-transparent text-white hover:bg-gray-700",
24443
24443
  onClick: item.onClick,
24444
- title: item.label
24444
+ title: item.label,
24445
+ disabled: item.disabled
24445
24446
  }, /* @__PURE__ */ React.createElement(Icon2, {
24446
24447
  className: "h-4 w-4"
24447
24448
  }), /* @__PURE__ */ React.createElement("span", {
@@ -24455,7 +24456,8 @@ function DetailPageHeader({ title, subtitle, backHref, backLabel = "Back", close
24455
24456
  key: i,
24456
24457
  variant: item.variant ?? "outline",
24457
24458
  size: "sm",
24458
- onClick: item.onClick
24459
+ onClick: item.onClick,
24460
+ disabled: item.disabled
24459
24461
  }, /* @__PURE__ */ React.createElement(Icon2, {
24460
24462
  className: "h-4 w-4 mr-1"
24461
24463
  }), item.label);
@@ -37285,6 +37287,7 @@ function VendorEditPage({ vendorId }) {
37285
37287
  const create = isCreate6(vendorId);
37286
37288
  const [loading, setLoading] = useState(!create);
37287
37289
  const [saving, setSaving] = useState(false);
37290
+ const createInFlightRef = useRef(false);
37288
37291
  const [errors, setErrors] = useState([]);
37289
37292
  const [name, setName] = useState("");
37290
37293
  const [legalName, setLegalName] = useState("");
@@ -37643,7 +37646,7 @@ function VendorEditPage({ vendorId }) {
37643
37646
  router.push(listReturnUrl);
37644
37647
  }, "closeInviteDialog");
37645
37648
  const handleCreate = /* @__PURE__ */ __name(async () => {
37646
- setSaving(true);
37649
+ if (createInFlightRef.current) return;
37647
37650
  setErrors([]);
37648
37651
  const createMissing = [];
37649
37652
  if (!name.trim()) createMissing.push("Store name is required");
@@ -37651,14 +37654,12 @@ function VendorEditPage({ vendorId }) {
37651
37654
  if (!ownerEmail.trim()) createMissing.push("Owner email is required");
37652
37655
  if (createMissing.length) {
37653
37656
  setErrors(createMissing);
37654
- setSaving(false);
37655
37657
  return;
37656
37658
  }
37657
37659
  if (!termsAccepted) {
37658
37660
  setErrors([
37659
37661
  "You must confirm that the vendor has accepted the terms and conditions"
37660
37662
  ]);
37661
- setSaving(false);
37662
37663
  return;
37663
37664
  }
37664
37665
  const formattedOwnerPhone = formatPhoneWithCountryCode(ownerPhoneCode, ownerPhoneNum);
@@ -37669,7 +37670,6 @@ function VendorEditPage({ vendorId }) {
37669
37670
  setErrors([
37670
37671
  taxError
37671
37672
  ]);
37672
- setSaving(false);
37673
37673
  return;
37674
37674
  }
37675
37675
  const personErr = validatePersonKyc({
@@ -37682,25 +37682,22 @@ function VendorEditPage({ vendorId }) {
37682
37682
  setErrors([
37683
37683
  personErr
37684
37684
  ]);
37685
- setSaving(false);
37686
37685
  return;
37687
37686
  }
37688
37687
  if (!ownerAddressLine1.trim()) {
37689
37688
  setErrors([
37690
37689
  "Owner address line 1 is required"
37691
37690
  ]);
37692
- setSaving(false);
37693
37691
  return;
37694
37692
  }
37695
- const abortController = new AbortController();
37696
- const timeoutId = setTimeout(() => abortController.abort(), 15e3);
37693
+ createInFlightRef.current = true;
37694
+ setSaving(true);
37697
37695
  try {
37698
37696
  const res = await fetch("/api/admin/vendors/onboard", {
37699
37697
  method: "POST",
37700
37698
  headers: {
37701
37699
  "Content-Type": "application/json"
37702
37700
  },
37703
- signal: abortController.signal,
37704
37701
  body: JSON.stringify({
37705
37702
  activation: "invite",
37706
37703
  sendOwnerEmail: false,
@@ -37721,7 +37718,6 @@ function VendorEditPage({ vendorId }) {
37721
37718
  }
37722
37719
  })
37723
37720
  });
37724
- clearTimeout(timeoutId);
37725
37721
  const data = await res.json().catch(() => ({}));
37726
37722
  if (!res.ok) {
37727
37723
  setErrors([
@@ -37747,17 +37743,11 @@ function VendorEditPage({ vendorId }) {
37747
37743
  inviteLink
37748
37744
  });
37749
37745
  } catch (err) {
37750
- if (err instanceof DOMException && err.name === "AbortError") {
37751
- setErrors([
37752
- "Request timed out. Your entered data is preserved. Please click submit again."
37753
- ]);
37754
- } else {
37755
- setErrors([
37756
- err instanceof Error && err.message || "Request failed"
37757
- ]);
37758
- }
37746
+ setErrors([
37747
+ err instanceof Error && err.message || "Request failed"
37748
+ ]);
37759
37749
  } finally {
37760
- clearTimeout(timeoutId);
37750
+ createInFlightRef.current = false;
37761
37751
  setSaving(false);
37762
37752
  }
37763
37753
  }, "handleCreate");
@@ -37885,13 +37875,15 @@ function VendorEditPage({ vendorId }) {
37885
37875
  {
37886
37876
  label: saving ? "Creating\u2026" : "Create vendor",
37887
37877
  icon: Save,
37888
- onClick: handleCreate
37878
+ onClick: handleCreate,
37879
+ disabled: saving
37889
37880
  }
37890
37881
  ] : [
37891
37882
  {
37892
37883
  label: saving ? "Saving\u2026" : "Save",
37893
37884
  icon: Save,
37894
- onClick: handleSave
37885
+ onClick: handleSave,
37886
+ disabled: saving
37895
37887
  },
37896
37888
  {
37897
37889
  label: active ? "Deactivate" : "Activate",
package/dist/api.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkOP624LWU_cjs = require('./chunk-OP624LWU.cjs');
3
+ var chunkSRGDHASW_cjs = require('./chunk-SRGDHASW.cjs');
4
4
  require('./chunk-TTOEY7AH.cjs');
5
5
  require('./chunk-KB7EBYPR.cjs');
6
6
  require('./chunk-KJB5LBFQ.cjs');
@@ -29,131 +29,131 @@ require('./chunk-XHPRD45G.cjs');
29
29
 
30
30
  Object.defineProperty(exports, "autoExpireOrderIfPaymentTimeExceeded", {
31
31
  enumerable: true,
32
- get: function () { return chunkOP624LWU_cjs.autoExpireOrderIfPaymentTimeExceeded; }
32
+ get: function () { return chunkSRGDHASW_cjs.autoExpireOrderIfPaymentTimeExceeded; }
33
33
  });
34
34
  Object.defineProperty(exports, "createAnalyticsHandlers", {
35
35
  enumerable: true,
36
- get: function () { return chunkOP624LWU_cjs.createAnalyticsHandlers; }
36
+ get: function () { return chunkSRGDHASW_cjs.createAnalyticsHandlers; }
37
37
  });
38
38
  Object.defineProperty(exports, "createBlogBySlugHandler", {
39
39
  enumerable: true,
40
- get: function () { return chunkOP624LWU_cjs.createBlogBySlugHandler; }
40
+ get: function () { return chunkSRGDHASW_cjs.createBlogBySlugHandler; }
41
41
  });
42
42
  Object.defineProperty(exports, "createChangePasswordHandler", {
43
43
  enumerable: true,
44
- get: function () { return chunkOP624LWU_cjs.createChangePasswordHandler; }
44
+ get: function () { return chunkSRGDHASW_cjs.createChangePasswordHandler; }
45
45
  });
46
46
  Object.defineProperty(exports, "createCmsApiHandler", {
47
47
  enumerable: true,
48
- get: function () { return chunkOP624LWU_cjs.createCmsApiHandler; }
48
+ get: function () { return chunkSRGDHASW_cjs.createCmsApiHandler; }
49
49
  });
50
50
  Object.defineProperty(exports, "createCrudByIdHandler", {
51
51
  enumerable: true,
52
- get: function () { return chunkOP624LWU_cjs.createCrudByIdHandler; }
52
+ get: function () { return chunkSRGDHASW_cjs.createCrudByIdHandler; }
53
53
  });
54
54
  Object.defineProperty(exports, "createCrudHandler", {
55
55
  enumerable: true,
56
- get: function () { return chunkOP624LWU_cjs.createCrudHandler; }
56
+ get: function () { return chunkSRGDHASW_cjs.createCrudHandler; }
57
57
  });
58
58
  Object.defineProperty(exports, "createDashboardStatsHandler", {
59
59
  enumerable: true,
60
- get: function () { return chunkOP624LWU_cjs.createDashboardStatsHandler; }
60
+ get: function () { return chunkSRGDHASW_cjs.createDashboardStatsHandler; }
61
61
  });
62
62
  Object.defineProperty(exports, "createEcommerceAnalyticsHandler", {
63
63
  enumerable: true,
64
- get: function () { return chunkOP624LWU_cjs.createEcommerceAnalyticsHandler; }
64
+ get: function () { return chunkSRGDHASW_cjs.createEcommerceAnalyticsHandler; }
65
65
  });
66
66
  Object.defineProperty(exports, "createForgotPasswordHandler", {
67
67
  enumerable: true,
68
- get: function () { return chunkOP624LWU_cjs.createForgotPasswordHandler; }
68
+ get: function () { return chunkSRGDHASW_cjs.createForgotPasswordHandler; }
69
69
  });
70
70
  Object.defineProperty(exports, "createFormBySlugHandler", {
71
71
  enumerable: true,
72
- get: function () { return chunkOP624LWU_cjs.createFormBySlugHandler; }
72
+ get: function () { return chunkSRGDHASW_cjs.createFormBySlugHandler; }
73
73
  });
74
74
  Object.defineProperty(exports, "createInviteAcceptHandler", {
75
75
  enumerable: true,
76
- get: function () { return chunkOP624LWU_cjs.createInviteAcceptHandler; }
76
+ get: function () { return chunkSRGDHASW_cjs.createInviteAcceptHandler; }
77
77
  });
78
78
  Object.defineProperty(exports, "createJobScheduleHandlers", {
79
79
  enumerable: true,
80
- get: function () { return chunkOP624LWU_cjs.createJobScheduleHandlers; }
80
+ get: function () { return chunkSRGDHASW_cjs.createJobScheduleHandlers; }
81
81
  });
82
82
  Object.defineProperty(exports, "createLlmAgentKnowledgeHandlers", {
83
83
  enumerable: true,
84
- get: function () { return chunkOP624LWU_cjs.createLlmAgentKnowledgeHandlers; }
84
+ get: function () { return chunkSRGDHASW_cjs.createLlmAgentKnowledgeHandlers; }
85
85
  });
86
86
  Object.defineProperty(exports, "createMediaZipExtractHandler", {
87
87
  enumerable: true,
88
- get: function () { return chunkOP624LWU_cjs.createMediaZipExtractHandler; }
88
+ get: function () { return chunkSRGDHASW_cjs.createMediaZipExtractHandler; }
89
89
  });
90
90
  Object.defineProperty(exports, "createSetPasswordHandler", {
91
91
  enumerable: true,
92
- get: function () { return chunkOP624LWU_cjs.createSetPasswordHandler; }
92
+ get: function () { return chunkSRGDHASW_cjs.createSetPasswordHandler; }
93
93
  });
94
94
  Object.defineProperty(exports, "createSettingsApiHandlers", {
95
95
  enumerable: true,
96
- get: function () { return chunkOP624LWU_cjs.createSettingsApiHandlers; }
96
+ get: function () { return chunkSRGDHASW_cjs.createSettingsApiHandlers; }
97
97
  });
98
98
  Object.defineProperty(exports, "createStorefrontApiHandler", {
99
99
  enumerable: true,
100
- get: function () { return chunkOP624LWU_cjs.createStorefrontApiHandler; }
100
+ get: function () { return chunkSRGDHASW_cjs.createStorefrontApiHandler; }
101
101
  });
102
102
  Object.defineProperty(exports, "createUploadHandler", {
103
103
  enumerable: true,
104
- get: function () { return chunkOP624LWU_cjs.createUploadHandler; }
104
+ get: function () { return chunkSRGDHASW_cjs.createUploadHandler; }
105
105
  });
106
106
  Object.defineProperty(exports, "createUserAuthApiRouter", {
107
107
  enumerable: true,
108
- get: function () { return chunkOP624LWU_cjs.createUserAuthApiRouter; }
108
+ get: function () { return chunkSRGDHASW_cjs.createUserAuthApiRouter; }
109
109
  });
110
110
  Object.defineProperty(exports, "createUserAvatarHandler", {
111
111
  enumerable: true,
112
- get: function () { return chunkOP624LWU_cjs.createUserAvatarHandler; }
112
+ get: function () { return chunkSRGDHASW_cjs.createUserAvatarHandler; }
113
113
  });
114
114
  Object.defineProperty(exports, "createUserProfileHandler", {
115
115
  enumerable: true,
116
- get: function () { return chunkOP624LWU_cjs.createUserProfileHandler; }
116
+ get: function () { return chunkSRGDHASW_cjs.createUserProfileHandler; }
117
117
  });
118
118
  Object.defineProperty(exports, "createUsersApiHandlers", {
119
119
  enumerable: true,
120
- get: function () { return chunkOP624LWU_cjs.createUsersApiHandlers; }
120
+ get: function () { return chunkSRGDHASW_cjs.createUsersApiHandlers; }
121
121
  });
122
122
  Object.defineProperty(exports, "createVendorDashboardHandler", {
123
123
  enumerable: true,
124
- get: function () { return chunkOP624LWU_cjs.createVendorDashboardHandler; }
124
+ get: function () { return chunkSRGDHASW_cjs.createVendorDashboardHandler; }
125
125
  });
126
126
  Object.defineProperty(exports, "createVendorOnboardHandlers", {
127
127
  enumerable: true,
128
- get: function () { return chunkOP624LWU_cjs.createVendorOnboardHandlers; }
128
+ get: function () { return chunkSRGDHASW_cjs.createVendorOnboardHandlers; }
129
129
  });
130
130
  Object.defineProperty(exports, "getPublicSettingsGroup", {
131
131
  enumerable: true,
132
- get: function () { return chunkOP624LWU_cjs.getPublicSettingsGroup; }
132
+ get: function () { return chunkSRGDHASW_cjs.getPublicSettingsGroup; }
133
133
  });
134
134
  Object.defineProperty(exports, "mergeGuardrailsIntoSystemPrompt", {
135
135
  enumerable: true,
136
- get: function () { return chunkOP624LWU_cjs.mergeGuardrailsIntoSystemPrompt; }
136
+ get: function () { return chunkSRGDHASW_cjs.mergeGuardrailsIntoSystemPrompt; }
137
137
  });
138
138
  Object.defineProperty(exports, "parseLlmAgentValidationRules", {
139
139
  enumerable: true,
140
- get: function () { return chunkOP624LWU_cjs.parseLlmAgentValidationRules; }
140
+ get: function () { return chunkSRGDHASW_cjs.parseLlmAgentValidationRules; }
141
141
  });
142
142
  Object.defineProperty(exports, "simpleDecrypt", {
143
143
  enumerable: true,
144
- get: function () { return chunkOP624LWU_cjs.simpleDecrypt; }
144
+ get: function () { return chunkSRGDHASW_cjs.simpleDecrypt; }
145
145
  });
146
146
  Object.defineProperty(exports, "simpleEncrypt", {
147
147
  enumerable: true,
148
- get: function () { return chunkOP624LWU_cjs.simpleEncrypt; }
148
+ get: function () { return chunkSRGDHASW_cjs.simpleEncrypt; }
149
149
  });
150
150
  Object.defineProperty(exports, "validateUserMessageAgainstAgentRules", {
151
151
  enumerable: true,
152
- get: function () { return chunkOP624LWU_cjs.validateUserMessageAgainstAgentRules; }
152
+ get: function () { return chunkSRGDHASW_cjs.validateUserMessageAgainstAgentRules; }
153
153
  });
154
154
  Object.defineProperty(exports, "validateUserMessageAgainstStructuredRules", {
155
155
  enumerable: true,
156
- get: function () { return chunkOP624LWU_cjs.validateUserMessageAgainstStructuredRules; }
156
+ get: function () { return chunkSRGDHASW_cjs.validateUserMessageAgainstStructuredRules; }
157
157
  });
158
158
  Object.defineProperty(exports, "createCmsAuthBundle", {
159
159
  enumerable: true,
package/dist/api.js CHANGED
@@ -1,4 +1,4 @@
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-7NQMGB2S.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-43UVXBEH.js';
2
2
  import './chunk-3LF4RYAJ.js';
3
3
  import './chunk-ECUGNV2I.js';
4
4
  import './chunk-K6JT7BKY.js';
@@ -14423,26 +14423,51 @@ async function sendVendorOnboardEmails(input, deps) {
14423
14423
  __name(sendVendorOnboardEmails, "sendVendorOnboardEmails");
14424
14424
 
14425
14425
  // src/lib/seed-vendor-roles.ts
14426
- async function insertRolePermissions(exec, vendorRoleId, permissions) {
14426
+ function appendValuesRow(params, values, cols) {
14427
+ const start = params.length;
14428
+ values.push(`(${cols.map((_, i) => `$${start + i + 1}`).join(", ")})`);
14429
+ params.push(...cols);
14430
+ }
14431
+ __name(appendValuesRow, "appendValuesRow");
14432
+ async function insertRolePermissions(exec, rows) {
14433
+ if (rows.length === 0) return;
14434
+ const values = [];
14435
+ const params = [];
14436
+ for (const row of rows) {
14437
+ appendValuesRow(params, values, [
14438
+ row.vendorRoleId,
14439
+ row.entity,
14440
+ row.canCreate,
14441
+ row.canRead,
14442
+ row.canUpdate,
14443
+ row.canDelete
14444
+ ]);
14445
+ }
14446
+ await exec.query(`
14447
+ INSERT INTO "vendor_role_permissions"
14448
+ ("vendorRoleId", "entity", "canCreate", "canRead", "canUpdate", "canDelete")
14449
+ VALUES ${values.join(", ")}
14450
+ ON CONFLICT ("vendorRoleId", "entity") DO NOTHING
14451
+ `, params);
14452
+ }
14453
+ __name(insertRolePermissions, "insertRolePermissions");
14454
+ function permissionRowsForRole(vendorRoleId, permissions) {
14455
+ const rows = [];
14427
14456
  for (const entity of VENDOR_RBAC_ENTITIES) {
14428
14457
  const flags = permissions[entity];
14429
14458
  if (!flags) continue;
14430
- await exec.query(`
14431
- INSERT INTO "vendor_role_permissions"
14432
- ("vendorRoleId", "entity", "canCreate", "canRead", "canUpdate", "canDelete")
14433
- VALUES ($1, $2, $3, $4, $5, $6)
14434
- ON CONFLICT ("vendorRoleId", "entity") DO NOTHING
14435
- `, [
14459
+ rows.push({
14436
14460
  vendorRoleId,
14437
14461
  entity,
14438
- flags.canCreate,
14439
- flags.canRead,
14440
- flags.canUpdate,
14441
- flags.canDelete
14442
- ]);
14462
+ canCreate: flags.canCreate,
14463
+ canRead: flags.canRead,
14464
+ canUpdate: flags.canUpdate,
14465
+ canDelete: flags.canDelete
14466
+ });
14443
14467
  }
14468
+ return rows;
14444
14469
  }
14445
- __name(insertRolePermissions, "insertRolePermissions");
14470
+ __name(permissionRowsForRole, "permissionRowsForRole");
14446
14471
  async function seedVendorDefaultRoles(em, vendorId) {
14447
14472
  const exec = em;
14448
14473
  const existing = await exec.query(`SELECT id, name, "isOwnerRole" FROM "vendor_roles" WHERE "vendorId" = $1 AND "deleted" = false`, [
@@ -14463,29 +14488,40 @@ async function seedVendorDefaultRoles(em, vendorId) {
14463
14488
  viewerRoleId: viewerRoleId2
14464
14489
  };
14465
14490
  }
14466
- const roleIdsByName = {};
14467
- let ownerRoleId = 0;
14468
- let viewerRoleId = 0;
14491
+ const roleValues = [];
14492
+ const roleParams = [];
14469
14493
  for (const def of DEFAULT_VENDOR_ROLE_DEFS) {
14470
- const inserted = await exec.query(`
14471
- INSERT INTO "vendor_roles"
14472
- ("vendorId", "name", "description", "isSystem", "isOwnerRole")
14473
- VALUES ($1, $2, $3, $4, $5)
14474
- RETURNING id
14475
- `, [
14494
+ appendValuesRow(roleParams, roleValues, [
14476
14495
  vendorId,
14477
14496
  def.name,
14478
14497
  def.description,
14479
14498
  def.isSystem,
14480
14499
  def.isOwnerRole
14481
14500
  ]);
14482
- const roleId = Number(inserted[0]?.id);
14501
+ }
14502
+ const inserted = await exec.query(`
14503
+ INSERT INTO "vendor_roles"
14504
+ ("vendorId", "name", "description", "isSystem", "isOwnerRole")
14505
+ VALUES ${roleValues.join(", ")}
14506
+ RETURNING id, name, "isOwnerRole"
14507
+ `, roleParams);
14508
+ const roleIdsByName = {};
14509
+ let ownerRoleId = 0;
14510
+ let viewerRoleId = 0;
14511
+ for (const r of inserted) {
14512
+ const id = Number(r.id);
14513
+ if (!id) continue;
14514
+ roleIdsByName[r.name] = id;
14515
+ if (r.isOwnerRole) ownerRoleId = id;
14516
+ if (r.name === VENDOR_VIEWER_ROLE_NAME) viewerRoleId = id;
14517
+ }
14518
+ const permRows = [];
14519
+ for (const def of DEFAULT_VENDOR_ROLE_DEFS) {
14520
+ const roleId = roleIdsByName[def.name];
14483
14521
  if (!roleId) continue;
14484
- roleIdsByName[def.name] = roleId;
14485
- if (def.isOwnerRole) ownerRoleId = roleId;
14486
- if (def.name === VENDOR_VIEWER_ROLE_NAME) viewerRoleId = roleId;
14487
- await insertRolePermissions(exec, roleId, def.permissions);
14522
+ permRows.push(...permissionRowsForRole(roleId, def.permissions));
14488
14523
  }
14524
+ await insertRolePermissions(exec, permRows);
14489
14525
  return {
14490
14526
  roleIdsByName,
14491
14527
  ownerRoleId,
@@ -15345,25 +15381,25 @@ function createVendorOnboardHandlers(config) {
15345
15381
  vendorUserProfileId: personRow.id
15346
15382
  });
15347
15383
  }
15348
- if (entityMap.customer) {
15349
- try {
15350
- await ensureCustomerForUser(em, entityMap.customer, {
15351
- id: newUser.id,
15352
- name: userName,
15353
- email: userEmail,
15354
- phone: trimOrNull(body.vendor?.phone) ?? ownerPhone
15355
- }, {
15356
- phone: trimOrNull(body.vendor?.phone) ?? ownerPhone
15357
- });
15358
- } catch (customerErr) {
15359
- console.error("[vendor-onboard] ensureCustomerForUser skipped", customerErr);
15360
- }
15361
- }
15362
15384
  return {
15363
15385
  vendor,
15364
15386
  user: newUser
15365
15387
  };
15366
15388
  });
15389
+ if (entityMap.customer) {
15390
+ try {
15391
+ await ensureCustomerForUser(dataSource, entityMap.customer, {
15392
+ id: result.user.id,
15393
+ name: userName,
15394
+ email: userEmail,
15395
+ phone: trimOrNull(body.vendor?.phone) ?? ownerPhone
15396
+ }, {
15397
+ phone: trimOrNull(body.vendor?.phone) ?? ownerPhone
15398
+ });
15399
+ } catch (customerErr) {
15400
+ console.error("[vendor-onboard] ensureCustomerForUser skipped", customerErr);
15401
+ }
15402
+ }
15367
15403
  let inviteLink;
15368
15404
  const token = readVendorInviteToken(result.vendor.metadata);
15369
15405
  if (token) {