@infuro/cms-core 1.0.40 → 1.0.41

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/api.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkT7GCOO5Y_cjs = require('./chunk-T7GCOO5Y.cjs');
3
+ var chunkQU554KAZ_cjs = require('./chunk-QU554KAZ.cjs');
4
4
  require('./chunk-22FFHLTO.cjs');
5
5
  require('./chunk-UCKN4BBY.cjs');
6
6
  require('./chunk-7NMT3GBR.cjs');
@@ -20,127 +20,127 @@ require('./chunk-USNT2KNT.cjs');
20
20
 
21
21
  Object.defineProperty(exports, "createAnalyticsHandlers", {
22
22
  enumerable: true,
23
- get: function () { return chunkT7GCOO5Y_cjs.createAnalyticsHandlers; }
23
+ get: function () { return chunkQU554KAZ_cjs.createAnalyticsHandlers; }
24
24
  });
25
25
  Object.defineProperty(exports, "createBlogBySlugHandler", {
26
26
  enumerable: true,
27
- get: function () { return chunkT7GCOO5Y_cjs.createBlogBySlugHandler; }
27
+ get: function () { return chunkQU554KAZ_cjs.createBlogBySlugHandler; }
28
28
  });
29
29
  Object.defineProperty(exports, "createChangePasswordHandler", {
30
30
  enumerable: true,
31
- get: function () { return chunkT7GCOO5Y_cjs.createChangePasswordHandler; }
31
+ get: function () { return chunkQU554KAZ_cjs.createChangePasswordHandler; }
32
32
  });
33
33
  Object.defineProperty(exports, "createCmsApiHandler", {
34
34
  enumerable: true,
35
- get: function () { return chunkT7GCOO5Y_cjs.createCmsApiHandler; }
35
+ get: function () { return chunkQU554KAZ_cjs.createCmsApiHandler; }
36
36
  });
37
37
  Object.defineProperty(exports, "createCrudByIdHandler", {
38
38
  enumerable: true,
39
- get: function () { return chunkT7GCOO5Y_cjs.createCrudByIdHandler; }
39
+ get: function () { return chunkQU554KAZ_cjs.createCrudByIdHandler; }
40
40
  });
41
41
  Object.defineProperty(exports, "createCrudHandler", {
42
42
  enumerable: true,
43
- get: function () { return chunkT7GCOO5Y_cjs.createCrudHandler; }
43
+ get: function () { return chunkQU554KAZ_cjs.createCrudHandler; }
44
44
  });
45
45
  Object.defineProperty(exports, "createDashboardStatsHandler", {
46
46
  enumerable: true,
47
- get: function () { return chunkT7GCOO5Y_cjs.createDashboardStatsHandler; }
47
+ get: function () { return chunkQU554KAZ_cjs.createDashboardStatsHandler; }
48
48
  });
49
49
  Object.defineProperty(exports, "createEcommerceAnalyticsHandler", {
50
50
  enumerable: true,
51
- get: function () { return chunkT7GCOO5Y_cjs.createEcommerceAnalyticsHandler; }
51
+ get: function () { return chunkQU554KAZ_cjs.createEcommerceAnalyticsHandler; }
52
52
  });
53
53
  Object.defineProperty(exports, "createForgotPasswordHandler", {
54
54
  enumerable: true,
55
- get: function () { return chunkT7GCOO5Y_cjs.createForgotPasswordHandler; }
55
+ get: function () { return chunkQU554KAZ_cjs.createForgotPasswordHandler; }
56
56
  });
57
57
  Object.defineProperty(exports, "createFormBySlugHandler", {
58
58
  enumerable: true,
59
- get: function () { return chunkT7GCOO5Y_cjs.createFormBySlugHandler; }
59
+ get: function () { return chunkQU554KAZ_cjs.createFormBySlugHandler; }
60
60
  });
61
61
  Object.defineProperty(exports, "createInviteAcceptHandler", {
62
62
  enumerable: true,
63
- get: function () { return chunkT7GCOO5Y_cjs.createInviteAcceptHandler; }
63
+ get: function () { return chunkQU554KAZ_cjs.createInviteAcceptHandler; }
64
64
  });
65
65
  Object.defineProperty(exports, "createJobScheduleHandlers", {
66
66
  enumerable: true,
67
- get: function () { return chunkT7GCOO5Y_cjs.createJobScheduleHandlers; }
67
+ get: function () { return chunkQU554KAZ_cjs.createJobScheduleHandlers; }
68
68
  });
69
69
  Object.defineProperty(exports, "createLlmAgentKnowledgeHandlers", {
70
70
  enumerable: true,
71
- get: function () { return chunkT7GCOO5Y_cjs.createLlmAgentKnowledgeHandlers; }
71
+ get: function () { return chunkQU554KAZ_cjs.createLlmAgentKnowledgeHandlers; }
72
72
  });
73
73
  Object.defineProperty(exports, "createMediaZipExtractHandler", {
74
74
  enumerable: true,
75
- get: function () { return chunkT7GCOO5Y_cjs.createMediaZipExtractHandler; }
75
+ get: function () { return chunkQU554KAZ_cjs.createMediaZipExtractHandler; }
76
76
  });
77
77
  Object.defineProperty(exports, "createSetPasswordHandler", {
78
78
  enumerable: true,
79
- get: function () { return chunkT7GCOO5Y_cjs.createSetPasswordHandler; }
79
+ get: function () { return chunkQU554KAZ_cjs.createSetPasswordHandler; }
80
80
  });
81
81
  Object.defineProperty(exports, "createSettingsApiHandlers", {
82
82
  enumerable: true,
83
- get: function () { return chunkT7GCOO5Y_cjs.createSettingsApiHandlers; }
83
+ get: function () { return chunkQU554KAZ_cjs.createSettingsApiHandlers; }
84
84
  });
85
85
  Object.defineProperty(exports, "createStorefrontApiHandler", {
86
86
  enumerable: true,
87
- get: function () { return chunkT7GCOO5Y_cjs.createStorefrontApiHandler; }
87
+ get: function () { return chunkQU554KAZ_cjs.createStorefrontApiHandler; }
88
88
  });
89
89
  Object.defineProperty(exports, "createUploadHandler", {
90
90
  enumerable: true,
91
- get: function () { return chunkT7GCOO5Y_cjs.createUploadHandler; }
91
+ get: function () { return chunkQU554KAZ_cjs.createUploadHandler; }
92
92
  });
93
93
  Object.defineProperty(exports, "createUserAuthApiRouter", {
94
94
  enumerable: true,
95
- get: function () { return chunkT7GCOO5Y_cjs.createUserAuthApiRouter; }
95
+ get: function () { return chunkQU554KAZ_cjs.createUserAuthApiRouter; }
96
96
  });
97
97
  Object.defineProperty(exports, "createUserAvatarHandler", {
98
98
  enumerable: true,
99
- get: function () { return chunkT7GCOO5Y_cjs.createUserAvatarHandler; }
99
+ get: function () { return chunkQU554KAZ_cjs.createUserAvatarHandler; }
100
100
  });
101
101
  Object.defineProperty(exports, "createUserProfileHandler", {
102
102
  enumerable: true,
103
- get: function () { return chunkT7GCOO5Y_cjs.createUserProfileHandler; }
103
+ get: function () { return chunkQU554KAZ_cjs.createUserProfileHandler; }
104
104
  });
105
105
  Object.defineProperty(exports, "createUsersApiHandlers", {
106
106
  enumerable: true,
107
- get: function () { return chunkT7GCOO5Y_cjs.createUsersApiHandlers; }
107
+ get: function () { return chunkQU554KAZ_cjs.createUsersApiHandlers; }
108
108
  });
109
109
  Object.defineProperty(exports, "createVendorDashboardHandler", {
110
110
  enumerable: true,
111
- get: function () { return chunkT7GCOO5Y_cjs.createVendorDashboardHandler; }
111
+ get: function () { return chunkQU554KAZ_cjs.createVendorDashboardHandler; }
112
112
  });
113
113
  Object.defineProperty(exports, "createVendorOnboardHandlers", {
114
114
  enumerable: true,
115
- get: function () { return chunkT7GCOO5Y_cjs.createVendorOnboardHandlers; }
115
+ get: function () { return chunkQU554KAZ_cjs.createVendorOnboardHandlers; }
116
116
  });
117
117
  Object.defineProperty(exports, "getPublicSettingsGroup", {
118
118
  enumerable: true,
119
- get: function () { return chunkT7GCOO5Y_cjs.getPublicSettingsGroup; }
119
+ get: function () { return chunkQU554KAZ_cjs.getPublicSettingsGroup; }
120
120
  });
121
121
  Object.defineProperty(exports, "mergeGuardrailsIntoSystemPrompt", {
122
122
  enumerable: true,
123
- get: function () { return chunkT7GCOO5Y_cjs.mergeGuardrailsIntoSystemPrompt; }
123
+ get: function () { return chunkQU554KAZ_cjs.mergeGuardrailsIntoSystemPrompt; }
124
124
  });
125
125
  Object.defineProperty(exports, "parseLlmAgentValidationRules", {
126
126
  enumerable: true,
127
- get: function () { return chunkT7GCOO5Y_cjs.parseLlmAgentValidationRules; }
127
+ get: function () { return chunkQU554KAZ_cjs.parseLlmAgentValidationRules; }
128
128
  });
129
129
  Object.defineProperty(exports, "simpleDecrypt", {
130
130
  enumerable: true,
131
- get: function () { return chunkT7GCOO5Y_cjs.simpleDecrypt; }
131
+ get: function () { return chunkQU554KAZ_cjs.simpleDecrypt; }
132
132
  });
133
133
  Object.defineProperty(exports, "simpleEncrypt", {
134
134
  enumerable: true,
135
- get: function () { return chunkT7GCOO5Y_cjs.simpleEncrypt; }
135
+ get: function () { return chunkQU554KAZ_cjs.simpleEncrypt; }
136
136
  });
137
137
  Object.defineProperty(exports, "validateUserMessageAgainstAgentRules", {
138
138
  enumerable: true,
139
- get: function () { return chunkT7GCOO5Y_cjs.validateUserMessageAgainstAgentRules; }
139
+ get: function () { return chunkQU554KAZ_cjs.validateUserMessageAgainstAgentRules; }
140
140
  });
141
141
  Object.defineProperty(exports, "validateUserMessageAgainstStructuredRules", {
142
142
  enumerable: true,
143
- get: function () { return chunkT7GCOO5Y_cjs.validateUserMessageAgainstStructuredRules; }
143
+ get: function () { return chunkQU554KAZ_cjs.validateUserMessageAgainstStructuredRules; }
144
144
  });
145
145
  Object.defineProperty(exports, "createCmsAuthBundle", {
146
146
  enumerable: true,
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-RCMUL6SZ.js';
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-EG4ICILK.js';
2
2
  import './chunk-NNQBWDCI.js';
3
3
  import './chunk-HCIRL37O.js';
4
4
  import './chunk-JXF23MPG.js';
@@ -12256,6 +12256,13 @@ function createVendorOnboardHandlers(config) {
12256
12256
  status: 400
12257
12257
  });
12258
12258
  }
12259
+ if (body.activation === "password" || body.user?.password) {
12260
+ return json({
12261
+ error: "Setting a password during vendor onboard is no longer supported. Create the vendor, then send an invite or copy the invite link so the owner can set their own password."
12262
+ }, {
12263
+ status: 400
12264
+ });
12265
+ }
12259
12266
  const profile = parseVendorProfileFromBody(body.vendor, {
12260
12267
  defaultRegistrationStatus: "approved"
12261
12268
  });
@@ -12265,34 +12272,8 @@ function createVendorOnboardHandlers(config) {
12265
12272
  }, {
12266
12273
  status: 400
12267
12274
  });
12268
- const activation = body.activation === "password" ? "password" : "invite";
12269
- const sendOwnerEmail = body.sendOwnerEmail !== false && body.sendInviteEmail !== false;
12270
- let ownerPasswordHash = null;
12271
- if (activation === "password") {
12272
- const plain = body.user?.password?.trim();
12273
- if (!plain) {
12274
- return json({
12275
- error: "Password is required when activating with a set password"
12276
- }, {
12277
- status: 400
12278
- });
12279
- }
12280
- if (plain.length < minPasswordLength) {
12281
- return json({
12282
- error: `Password must be at least ${minPasswordLength} characters`
12283
- }, {
12284
- status: 400
12285
- });
12286
- }
12287
- if (!hashPassword) {
12288
- return json({
12289
- error: "Password hashing is not configured on the server"
12290
- }, {
12291
- status: 501
12292
- });
12293
- }
12294
- ownerPasswordHash = await hashPassword(plain);
12295
- }
12275
+ const activation = "invite";
12276
+ const ownerPasswordHash = null;
12296
12277
  const slug = trimOrNull(body.vendor?.slug) || slugify(vendorName);
12297
12278
  if (!slug) return json({
12298
12279
  error: "Could not derive vendor slug"
@@ -12349,7 +12330,7 @@ function createVendorOnboardHandlers(config) {
12349
12330
  email: userEmail,
12350
12331
  phone: ownerPhone,
12351
12332
  password: ownerPasswordHash,
12352
- blocked: activation === "invite",
12333
+ blocked: true,
12353
12334
  groupId: ownerGroup.id,
12354
12335
  adminAccess: true,
12355
12336
  updatedAt: /* @__PURE__ */ new Date()
@@ -12366,15 +12347,14 @@ function createVendorOnboardHandlers(config) {
12366
12347
  email: userEmail,
12367
12348
  phone: ownerPhone,
12368
12349
  password: ownerPasswordHash,
12369
- blocked: activation === "invite",
12350
+ blocked: true,
12370
12351
  groupId: ownerGroup.id,
12371
12352
  adminAccess: true
12372
12353
  }));
12373
- const baseMetadata = buildVendorMetadata(null, {
12354
+ const metadata = applyRotatingVendorInvite(buildVendorMetadata(null, {
12374
12355
  ownerDesignation,
12375
12356
  termsAccepted: true
12376
- });
12377
- const metadata = activation === "invite" ? applyRotatingVendorInvite(baseMetadata) : baseMetadata;
12357
+ }));
12378
12358
  const vendor = await vendorRepo.save(vendorRepo.create({
12379
12359
  name: vendorName,
12380
12360
  slug,
@@ -12442,39 +12422,14 @@ function createVendorOnboardHandlers(config) {
12442
12422
  };
12443
12423
  });
12444
12424
  let inviteLink;
12445
- let emailSent = false;
12446
- if (activation === "invite") {
12447
- const token = readVendorInviteToken(result.vendor.metadata);
12448
- if (token) {
12449
- inviteLink = buildVendorInviteLink(baseUrl, token);
12450
- }
12451
- }
12452
- if (sendOwnerEmail) {
12453
- emailSent = await trySendVendorOnboardEmails({
12454
- vendorName,
12455
- vendorSlug: slug,
12456
- ownerName: userName,
12457
- ownerEmail: userEmail,
12458
- activation,
12459
- inviteLink,
12460
- sendToOwner: true
12461
- });
12462
- } else if (getCms) {
12463
- await trySendVendorOnboardEmails({
12464
- vendorName,
12465
- vendorSlug: slug,
12466
- ownerName: userName,
12467
- ownerEmail: userEmail,
12468
- activation,
12469
- inviteLink,
12470
- sendToOwner: false
12471
- });
12425
+ const token = readVendorInviteToken(result.vendor.metadata);
12426
+ if (token) {
12427
+ inviteLink = buildVendorInviteLink(baseUrl, token);
12472
12428
  }
12473
- const message = activation === "password" ? emailSent ? "Vendor onboarded successfully. Welcome email sent to the owner." : sendOwnerEmail ? "Vendor onboarded successfully. Owner can sign in with the password you set (welcome email may not have been sent \u2014 check email plugin)." : "Vendor onboarded successfully. Owner can sign in with the password you set." : emailSent ? "Vendor onboarded successfully. Invite email sent." : sendOwnerEmail ? "Vendor onboarded successfully. Invite link created (email may not have been sent \u2014 check email plugin)." : "Vendor onboarded successfully. Share the invite link with the owner.";
12474
12429
  return json({
12475
- message,
12430
+ message: "Vendor created successfully.",
12476
12431
  activation,
12477
- emailSent,
12432
+ emailSent: false,
12478
12433
  vendor: result.vendor,
12479
12434
  user: {
12480
12435
  id: result.user.id,
@@ -12509,9 +12464,11 @@ function createVendorOnboardHandlers(config) {
12509
12464
  });
12510
12465
  }
12511
12466
  let sendEmail = true;
12467
+ let rotate = true;
12512
12468
  try {
12513
12469
  const body = await req.json().catch(() => ({}));
12514
12470
  if (body.sendEmail === false) sendEmail = false;
12471
+ if (body.rotate === false) rotate = false;
12515
12472
  } catch {
12516
12473
  }
12517
12474
  try {
@@ -12577,12 +12534,16 @@ function createVendorOnboardHandlers(config) {
12577
12534
  status: 400
12578
12535
  });
12579
12536
  }
12580
- const rotatedMetadata = applyRotatingVendorInvite(v.metadata);
12581
- await vendorRepo.update(vendorId, {
12582
- metadata: rotatedMetadata,
12583
- inviteStatus: "pending"
12584
- });
12585
- const token = readVendorInviteToken(rotatedMetadata);
12537
+ const nextMetadata = rotate ? applyRotatingVendorInvite(v.metadata) : {
12538
+ ...v.metadata ?? {}
12539
+ };
12540
+ if (rotate || v.inviteStatus !== "pending") {
12541
+ await vendorRepo.update(vendorId, {
12542
+ metadata: nextMetadata,
12543
+ inviteStatus: "pending"
12544
+ });
12545
+ }
12546
+ const token = readVendorInviteToken(nextMetadata);
12586
12547
  if (!token) {
12587
12548
  return json({
12588
12549
  error: "Failed to generate invite token"
@@ -12603,8 +12564,9 @@ function createVendorOnboardHandlers(config) {
12603
12564
  sendToOwner: true
12604
12565
  });
12605
12566
  }
12567
+ const rotatedNote = rotate ? " Previous invite link is no longer valid." : "";
12606
12568
  return json({
12607
- message: emailSent ? "Invite resent. Previous invite link is no longer valid." : sendEmail ? "New invite link created (email may not have been sent \u2014 check email plugin). Previous link is invalid." : "New invite link created. Previous invite link is no longer valid.",
12569
+ message: emailSent ? `Invite email sent.${rotatedNote}` : sendEmail ? `Invite link ready (email may not have been sent \u2014 check email plugin).${rotatedNote}` : rotate ? "New invite link created. Previous invite link is no longer valid." : "Invite link ready.",
12608
12570
  emailSent,
12609
12571
  inviteLink,
12610
12572
  inviteStatus: "pending"
@@ -12266,6 +12266,13 @@ function createVendorOnboardHandlers(config) {
12266
12266
  status: 400
12267
12267
  });
12268
12268
  }
12269
+ if (body.activation === "password" || body.user?.password) {
12270
+ return json({
12271
+ error: "Setting a password during vendor onboard is no longer supported. Create the vendor, then send an invite or copy the invite link so the owner can set their own password."
12272
+ }, {
12273
+ status: 400
12274
+ });
12275
+ }
12269
12276
  const profile = parseVendorProfileFromBody(body.vendor, {
12270
12277
  defaultRegistrationStatus: "approved"
12271
12278
  });
@@ -12275,34 +12282,8 @@ function createVendorOnboardHandlers(config) {
12275
12282
  }, {
12276
12283
  status: 400
12277
12284
  });
12278
- const activation = body.activation === "password" ? "password" : "invite";
12279
- const sendOwnerEmail = body.sendOwnerEmail !== false && body.sendInviteEmail !== false;
12280
- let ownerPasswordHash = null;
12281
- if (activation === "password") {
12282
- const plain = body.user?.password?.trim();
12283
- if (!plain) {
12284
- return json({
12285
- error: "Password is required when activating with a set password"
12286
- }, {
12287
- status: 400
12288
- });
12289
- }
12290
- if (plain.length < minPasswordLength) {
12291
- return json({
12292
- error: `Password must be at least ${minPasswordLength} characters`
12293
- }, {
12294
- status: 400
12295
- });
12296
- }
12297
- if (!hashPassword) {
12298
- return json({
12299
- error: "Password hashing is not configured on the server"
12300
- }, {
12301
- status: 501
12302
- });
12303
- }
12304
- ownerPasswordHash = await hashPassword(plain);
12305
- }
12285
+ const activation = "invite";
12286
+ const ownerPasswordHash = null;
12306
12287
  const slug = trimOrNull(body.vendor?.slug) || slugify(vendorName);
12307
12288
  if (!slug) return json({
12308
12289
  error: "Could not derive vendor slug"
@@ -12359,7 +12340,7 @@ function createVendorOnboardHandlers(config) {
12359
12340
  email: userEmail,
12360
12341
  phone: ownerPhone,
12361
12342
  password: ownerPasswordHash,
12362
- blocked: activation === "invite",
12343
+ blocked: true,
12363
12344
  groupId: ownerGroup.id,
12364
12345
  adminAccess: true,
12365
12346
  updatedAt: /* @__PURE__ */ new Date()
@@ -12376,15 +12357,14 @@ function createVendorOnboardHandlers(config) {
12376
12357
  email: userEmail,
12377
12358
  phone: ownerPhone,
12378
12359
  password: ownerPasswordHash,
12379
- blocked: activation === "invite",
12360
+ blocked: true,
12380
12361
  groupId: ownerGroup.id,
12381
12362
  adminAccess: true
12382
12363
  }));
12383
- const baseMetadata = buildVendorMetadata(null, {
12364
+ const metadata = applyRotatingVendorInvite(buildVendorMetadata(null, {
12384
12365
  ownerDesignation,
12385
12366
  termsAccepted: true
12386
- });
12387
- const metadata = activation === "invite" ? applyRotatingVendorInvite(baseMetadata) : baseMetadata;
12367
+ }));
12388
12368
  const vendor = await vendorRepo.save(vendorRepo.create({
12389
12369
  name: vendorName,
12390
12370
  slug,
@@ -12452,39 +12432,14 @@ function createVendorOnboardHandlers(config) {
12452
12432
  };
12453
12433
  });
12454
12434
  let inviteLink;
12455
- let emailSent = false;
12456
- if (activation === "invite") {
12457
- const token = readVendorInviteToken(result.vendor.metadata);
12458
- if (token) {
12459
- inviteLink = buildVendorInviteLink(baseUrl, token);
12460
- }
12461
- }
12462
- if (sendOwnerEmail) {
12463
- emailSent = await trySendVendorOnboardEmails({
12464
- vendorName,
12465
- vendorSlug: slug,
12466
- ownerName: userName,
12467
- ownerEmail: userEmail,
12468
- activation,
12469
- inviteLink,
12470
- sendToOwner: true
12471
- });
12472
- } else if (getCms) {
12473
- await trySendVendorOnboardEmails({
12474
- vendorName,
12475
- vendorSlug: slug,
12476
- ownerName: userName,
12477
- ownerEmail: userEmail,
12478
- activation,
12479
- inviteLink,
12480
- sendToOwner: false
12481
- });
12435
+ const token = readVendorInviteToken(result.vendor.metadata);
12436
+ if (token) {
12437
+ inviteLink = buildVendorInviteLink(baseUrl, token);
12482
12438
  }
12483
- const message = activation === "password" ? emailSent ? "Vendor onboarded successfully. Welcome email sent to the owner." : sendOwnerEmail ? "Vendor onboarded successfully. Owner can sign in with the password you set (welcome email may not have been sent \u2014 check email plugin)." : "Vendor onboarded successfully. Owner can sign in with the password you set." : emailSent ? "Vendor onboarded successfully. Invite email sent." : sendOwnerEmail ? "Vendor onboarded successfully. Invite link created (email may not have been sent \u2014 check email plugin)." : "Vendor onboarded successfully. Share the invite link with the owner.";
12484
12439
  return json({
12485
- message,
12440
+ message: "Vendor created successfully.",
12486
12441
  activation,
12487
- emailSent,
12442
+ emailSent: false,
12488
12443
  vendor: result.vendor,
12489
12444
  user: {
12490
12445
  id: result.user.id,
@@ -12519,9 +12474,11 @@ function createVendorOnboardHandlers(config) {
12519
12474
  });
12520
12475
  }
12521
12476
  let sendEmail = true;
12477
+ let rotate = true;
12522
12478
  try {
12523
12479
  const body = await req.json().catch(() => ({}));
12524
12480
  if (body.sendEmail === false) sendEmail = false;
12481
+ if (body.rotate === false) rotate = false;
12525
12482
  } catch {
12526
12483
  }
12527
12484
  try {
@@ -12587,12 +12544,16 @@ function createVendorOnboardHandlers(config) {
12587
12544
  status: 400
12588
12545
  });
12589
12546
  }
12590
- const rotatedMetadata = applyRotatingVendorInvite(v.metadata);
12591
- await vendorRepo.update(vendorId, {
12592
- metadata: rotatedMetadata,
12593
- inviteStatus: "pending"
12594
- });
12595
- const token = readVendorInviteToken(rotatedMetadata);
12547
+ const nextMetadata = rotate ? applyRotatingVendorInvite(v.metadata) : {
12548
+ ...v.metadata ?? {}
12549
+ };
12550
+ if (rotate || v.inviteStatus !== "pending") {
12551
+ await vendorRepo.update(vendorId, {
12552
+ metadata: nextMetadata,
12553
+ inviteStatus: "pending"
12554
+ });
12555
+ }
12556
+ const token = readVendorInviteToken(nextMetadata);
12596
12557
  if (!token) {
12597
12558
  return json({
12598
12559
  error: "Failed to generate invite token"
@@ -12613,8 +12574,9 @@ function createVendorOnboardHandlers(config) {
12613
12574
  sendToOwner: true
12614
12575
  });
12615
12576
  }
12577
+ const rotatedNote = rotate ? " Previous invite link is no longer valid." : "";
12616
12578
  return json({
12617
- message: emailSent ? "Invite resent. Previous invite link is no longer valid." : sendEmail ? "New invite link created (email may not have been sent \u2014 check email plugin). Previous link is invalid." : "New invite link created. Previous invite link is no longer valid.",
12579
+ message: emailSent ? `Invite email sent.${rotatedNote}` : sendEmail ? `Invite link ready (email may not have been sent \u2014 check email plugin).${rotatedNote}` : rotate ? "New invite link created. Previous invite link is no longer valid." : "Invite link ready.",
12618
12580
  emailSent,
12619
12581
  inviteLink,
12620
12582
  inviteStatus: "pending"