@hexclave/shared 1.0.10 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  2. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +10 -2
  3. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  4. package/dist/config/schema.d.ts +44 -44
  5. package/dist/config-rendering.d.ts.map +1 -1
  6. package/dist/config-rendering.js +7 -2
  7. package/dist/config-rendering.js.map +1 -1
  8. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  9. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +10 -2
  10. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  11. package/dist/esm/config/schema.d.ts +44 -44
  12. package/dist/esm/config-rendering.d.ts.map +1 -1
  13. package/dist/esm/config-rendering.js +7 -2
  14. package/dist/esm/config-rendering.js.map +1 -1
  15. package/dist/esm/hexclave-config-file.d.ts.map +1 -1
  16. package/dist/esm/hexclave-config-file.js +2 -1
  17. package/dist/esm/hexclave-config-file.js.map +1 -1
  18. package/dist/esm/interface/admin-interface.d.ts +9 -1
  19. package/dist/esm/interface/admin-interface.d.ts.map +1 -1
  20. package/dist/esm/interface/admin-interface.js +32 -2
  21. package/dist/esm/interface/admin-interface.js.map +1 -1
  22. package/dist/esm/interface/admin-metrics.d.ts +123 -7
  23. package/dist/esm/interface/admin-metrics.d.ts.map +1 -1
  24. package/dist/esm/interface/admin-metrics.js +21 -2
  25. package/dist/esm/interface/admin-metrics.js.map +1 -1
  26. package/dist/esm/interface/conversations.d.ts +27 -27
  27. package/dist/esm/interface/crud/current-user.d.ts +6 -6
  28. package/dist/esm/interface/crud/email-outbox.d.ts +224 -224
  29. package/dist/esm/interface/crud/invoices.d.ts +2 -2
  30. package/dist/esm/interface/crud/project-api-keys.d.ts +2 -2
  31. package/dist/esm/interface/crud/projects.d.ts +99 -99
  32. package/dist/esm/interface/crud/team-member-profiles.d.ts +16 -16
  33. package/dist/esm/interface/crud/users.d.ts +2 -2
  34. package/dist/esm/schema-fields.d.ts.map +1 -1
  35. package/dist/esm/schema-fields.js +1 -1
  36. package/dist/esm/schema-fields.js.map +1 -1
  37. package/dist/esm/sessions.d.ts +10 -0
  38. package/dist/esm/sessions.d.ts.map +1 -1
  39. package/dist/esm/sessions.js +20 -2
  40. package/dist/esm/sessions.js.map +1 -1
  41. package/dist/esm/sessions.test.d.ts +1 -0
  42. package/dist/esm/sessions.test.js +178 -0
  43. package/dist/esm/sessions.test.js.map +1 -0
  44. package/dist/hexclave-config-file.d.ts.map +1 -1
  45. package/dist/hexclave-config-file.js +2 -1
  46. package/dist/hexclave-config-file.js.map +1 -1
  47. package/dist/interface/admin-interface.d.ts +9 -1
  48. package/dist/interface/admin-interface.d.ts.map +1 -1
  49. package/dist/interface/admin-interface.js +32 -2
  50. package/dist/interface/admin-interface.js.map +1 -1
  51. package/dist/interface/admin-metrics.d.ts +123 -7
  52. package/dist/interface/admin-metrics.d.ts.map +1 -1
  53. package/dist/interface/admin-metrics.js +22 -1
  54. package/dist/interface/admin-metrics.js.map +1 -1
  55. package/dist/interface/conversations.d.ts +27 -27
  56. package/dist/interface/crud/current-user.d.ts +6 -6
  57. package/dist/interface/crud/email-outbox.d.ts +224 -224
  58. package/dist/interface/crud/invoices.d.ts +2 -2
  59. package/dist/interface/crud/project-api-keys.d.ts +2 -2
  60. package/dist/interface/crud/projects.d.ts +99 -99
  61. package/dist/interface/crud/team-member-profiles.d.ts +16 -16
  62. package/dist/interface/crud/users.d.ts +2 -2
  63. package/dist/schema-fields.d.ts.map +1 -1
  64. package/dist/schema-fields.js +1 -1
  65. package/dist/schema-fields.js.map +1 -1
  66. package/dist/sessions.d.ts +10 -0
  67. package/dist/sessions.d.ts.map +1 -1
  68. package/dist/sessions.js +20 -2
  69. package/dist/sessions.js.map +1 -1
  70. package/dist/sessions.test.d.ts +1 -0
  71. package/dist/sessions.test.js +178 -0
  72. package/dist/sessions.test.js.map +1 -0
  73. package/package.json +1 -1
  74. package/src/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.ts +10 -2
  75. package/src/config-rendering.ts +11 -2
  76. package/src/hexclave-config-file.ts +7 -1
  77. package/src/interface/admin-interface.ts +49 -2
  78. package/src/interface/admin-metrics.ts +33 -2
  79. package/src/schema-fields.ts +4 -1
  80. package/src/sessions.test.ts +147 -0
  81. package/src/sessions.ts +26 -0
@@ -84,7 +84,7 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
84
84
  sourceOfTruth: {
85
85
  type: "hosted";
86
86
  };
87
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
87
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
88
88
  payments?: {
89
89
  blockNewPurchases?: boolean | undefined;
90
90
  autoPay?: {
@@ -134,9 +134,6 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
134
134
  otp: {
135
135
  allowSignIn?: boolean | undefined;
136
136
  };
137
- passkey: {
138
- allowSignIn?: boolean | undefined;
139
- };
140
137
  oauth: {
141
138
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
142
139
  providers: Record<string, {
@@ -145,6 +142,9 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
145
142
  allowConnectedAccounts?: boolean | undefined;
146
143
  }>;
147
144
  };
145
+ passkey: {
146
+ allowSignIn?: boolean | undefined;
147
+ };
148
148
  signUpRules: Record<string, {
149
149
  displayName?: string | undefined;
150
150
  enabled?: boolean | undefined;
@@ -190,6 +190,7 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
190
190
  users: {
191
191
  allowClientUserDeletion?: boolean | undefined;
192
192
  };
193
+ domains: {};
193
194
  apiKeys: {
194
195
  enabled: {
195
196
  team?: boolean | undefined;
@@ -201,7 +202,6 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
201
202
  enabled?: boolean | undefined;
202
203
  }>;
203
204
  };
204
- domains: {};
205
205
  dbSync: {
206
206
  externalDatabases: Record<string, {
207
207
  connectionString?: string | undefined;
@@ -218,7 +218,7 @@ declare const branchConfigSchema: yup$1.Schema<Omit<Omit<{
218
218
  project: {
219
219
  requirePublishableClientKey: undefined;
220
220
  };
221
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
221
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
222
222
  rbac: {
223
223
  permissions: undefined;
224
224
  defaultPermissions: {
@@ -293,7 +293,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
293
293
  sourceOfTruth: {
294
294
  type: "hosted";
295
295
  };
296
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
296
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
297
297
  payments?: {
298
298
  blockNewPurchases?: boolean | undefined;
299
299
  autoPay?: {
@@ -343,9 +343,6 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
343
343
  otp: {
344
344
  allowSignIn?: boolean | undefined;
345
345
  };
346
- passkey: {
347
- allowSignIn?: boolean | undefined;
348
- };
349
346
  oauth: {
350
347
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
351
348
  providers: Record<string, {
@@ -354,6 +351,9 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
354
351
  allowConnectedAccounts?: boolean | undefined;
355
352
  }>;
356
353
  };
354
+ passkey: {
355
+ allowSignIn?: boolean | undefined;
356
+ };
357
357
  signUpRules: Record<string, {
358
358
  displayName?: string | undefined;
359
359
  enabled?: boolean | undefined;
@@ -399,6 +399,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
399
399
  users: {
400
400
  allowClientUserDeletion?: boolean | undefined;
401
401
  };
402
+ domains: {};
402
403
  apiKeys: {
403
404
  enabled: {
404
405
  team?: boolean | undefined;
@@ -410,7 +411,6 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
410
411
  enabled?: boolean | undefined;
411
412
  }>;
412
413
  };
413
- domains: {};
414
414
  dbSync: {
415
415
  externalDatabases: Record<string, {
416
416
  connectionString?: string | undefined;
@@ -474,9 +474,6 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
474
474
  otp: {
475
475
  allowSignIn?: boolean | undefined;
476
476
  };
477
- passkey: {
478
- allowSignIn?: boolean | undefined;
479
- };
480
477
  oauth: {
481
478
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
482
479
  providers: Record<string, {
@@ -485,6 +482,9 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
485
482
  allowConnectedAccounts?: boolean | undefined;
486
483
  }>;
487
484
  };
485
+ passkey: {
486
+ allowSignIn?: boolean | undefined;
487
+ };
488
488
  signUpRules: Record<string, {
489
489
  displayName?: string | undefined;
490
490
  enabled?: boolean | undefined;
@@ -535,10 +535,10 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
535
535
  server: {
536
536
  provider?: "resend" | "smtp" | "managed" | undefined;
537
537
  password?: string | undefined;
538
- isShared?: boolean | undefined;
539
538
  host?: string | undefined;
540
539
  port?: number | undefined;
541
540
  username?: string | undefined;
541
+ isShared?: boolean | undefined;
542
542
  senderName?: string | undefined;
543
543
  senderEmail?: string | undefined;
544
544
  managedSubdomain?: string | undefined;
@@ -572,7 +572,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
572
572
  project: {
573
573
  requirePublishableClientKey: undefined;
574
574
  };
575
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
575
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
576
576
  rbac: {
577
577
  permissions: undefined;
578
578
  defaultPermissions: {
@@ -645,7 +645,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
645
645
  project: {
646
646
  requirePublishableClientKey: undefined;
647
647
  };
648
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
648
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
649
649
  rbac: {
650
650
  permissions: undefined;
651
651
  defaultPermissions: {
@@ -718,7 +718,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
718
718
  project: {
719
719
  requirePublishableClientKey: undefined;
720
720
  };
721
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
721
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
722
722
  rbac: {
723
723
  permissions: undefined;
724
724
  defaultPermissions: {
@@ -794,7 +794,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
794
794
  project: {
795
795
  requirePublishableClientKey: undefined;
796
796
  };
797
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
797
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
798
798
  rbac: {
799
799
  permissions: undefined;
800
800
  defaultPermissions: {
@@ -880,7 +880,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
880
880
  project: {
881
881
  requirePublishableClientKey: undefined;
882
882
  };
883
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
883
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
884
884
  rbac: {
885
885
  permissions: undefined;
886
886
  defaultPermissions: {
@@ -956,7 +956,7 @@ declare const environmentConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<Omit<{
956
956
  project: {
957
957
  requirePublishableClientKey: undefined;
958
958
  };
959
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
959
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
960
960
  rbac: {
961
961
  permissions: undefined;
962
962
  defaultPermissions: {
@@ -1038,7 +1038,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1038
1038
  sourceOfTruth: {
1039
1039
  type: "hosted";
1040
1040
  };
1041
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1041
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
1042
1042
  payments?: {
1043
1043
  blockNewPurchases?: boolean | undefined;
1044
1044
  autoPay?: {
@@ -1088,9 +1088,6 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1088
1088
  otp: {
1089
1089
  allowSignIn?: boolean | undefined;
1090
1090
  };
1091
- passkey: {
1092
- allowSignIn?: boolean | undefined;
1093
- };
1094
1091
  oauth: {
1095
1092
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
1096
1093
  providers: Record<string, {
@@ -1099,6 +1096,9 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1099
1096
  allowConnectedAccounts?: boolean | undefined;
1100
1097
  }>;
1101
1098
  };
1099
+ passkey: {
1100
+ allowSignIn?: boolean | undefined;
1101
+ };
1102
1102
  signUpRules: Record<string, {
1103
1103
  displayName?: string | undefined;
1104
1104
  enabled?: boolean | undefined;
@@ -1144,6 +1144,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1144
1144
  users: {
1145
1145
  allowClientUserDeletion?: boolean | undefined;
1146
1146
  };
1147
+ domains: {};
1147
1148
  apiKeys: {
1148
1149
  enabled: {
1149
1150
  team?: boolean | undefined;
@@ -1155,7 +1156,6 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1155
1156
  enabled?: boolean | undefined;
1156
1157
  }>;
1157
1158
  };
1158
- domains: {};
1159
1159
  dbSync: {
1160
1160
  externalDatabases: Record<string, {
1161
1161
  connectionString?: string | undefined;
@@ -1219,9 +1219,6 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1219
1219
  otp: {
1220
1220
  allowSignIn?: boolean | undefined;
1221
1221
  };
1222
- passkey: {
1223
- allowSignIn?: boolean | undefined;
1224
- };
1225
1222
  oauth: {
1226
1223
  accountMergeStrategy?: "link_method" | "raise_error" | "allow_duplicates" | undefined;
1227
1224
  providers: Record<string, {
@@ -1230,6 +1227,9 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1230
1227
  allowConnectedAccounts?: boolean | undefined;
1231
1228
  }>;
1232
1229
  };
1230
+ passkey: {
1231
+ allowSignIn?: boolean | undefined;
1232
+ };
1233
1233
  signUpRules: Record<string, {
1234
1234
  displayName?: string | undefined;
1235
1235
  enabled?: boolean | undefined;
@@ -1280,10 +1280,10 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1280
1280
  server: {
1281
1281
  provider?: "resend" | "smtp" | "managed" | undefined;
1282
1282
  password?: string | undefined;
1283
- isShared?: boolean | undefined;
1284
1283
  host?: string | undefined;
1285
1284
  port?: number | undefined;
1286
1285
  username?: string | undefined;
1286
+ isShared?: boolean | undefined;
1287
1287
  senderName?: string | undefined;
1288
1288
  senderEmail?: string | undefined;
1289
1289
  managedSubdomain?: string | undefined;
@@ -1317,7 +1317,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1317
1317
  project: {
1318
1318
  requirePublishableClientKey: undefined;
1319
1319
  };
1320
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1320
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
1321
1321
  rbac: {
1322
1322
  permissions: undefined;
1323
1323
  defaultPermissions: {
@@ -1390,7 +1390,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1390
1390
  project: {
1391
1391
  requirePublishableClientKey: undefined;
1392
1392
  };
1393
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1393
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
1394
1394
  rbac: {
1395
1395
  permissions: undefined;
1396
1396
  defaultPermissions: {
@@ -1463,7 +1463,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1463
1463
  project: {
1464
1464
  requirePublishableClientKey: undefined;
1465
1465
  };
1466
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1466
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
1467
1467
  rbac: {
1468
1468
  permissions: undefined;
1469
1469
  defaultPermissions: {
@@ -1539,7 +1539,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1539
1539
  project: {
1540
1540
  requirePublishableClientKey: undefined;
1541
1541
  };
1542
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1542
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
1543
1543
  rbac: {
1544
1544
  permissions: undefined;
1545
1545
  defaultPermissions: {
@@ -1625,7 +1625,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1625
1625
  project: {
1626
1626
  requirePublishableClientKey: undefined;
1627
1627
  };
1628
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1628
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
1629
1629
  rbac: {
1630
1630
  permissions: undefined;
1631
1631
  defaultPermissions: {
@@ -1701,7 +1701,7 @@ declare const organizationConfigSchema: yup$1.Schema<Omit<NonNullable<Omit<NonNu
1701
1701
  project: {
1702
1702
  requirePublishableClientKey: undefined;
1703
1703
  };
1704
- }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "apiKeys" | "apps" | "domains" | "dbSync" | "dataVault"> & {
1704
+ }, string>, "auth" | "onboarding" | "teams" | "rbac" | "payments" | "emails" | "users" | "domains" | "apiKeys" | "apps" | "dbSync" | "dataVault"> & {
1705
1705
  rbac: {
1706
1706
  permissions: undefined;
1707
1707
  defaultPermissions: {
@@ -2072,7 +2072,6 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
2072
2072
  type: "allow" | "reject" | "restrict" | "log";
2073
2073
  };
2074
2074
  }>;
2075
- allowSignUp: boolean;
2076
2075
  password: {
2077
2076
  allowSignIn: boolean;
2078
2077
  };
@@ -2082,6 +2081,7 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
2082
2081
  passkey: {
2083
2082
  allowSignIn: boolean;
2084
2083
  };
2084
+ allowSignUp: boolean;
2085
2085
  signUpRulesDefaultAction: string;
2086
2086
  };
2087
2087
  emails: {
@@ -2102,10 +2102,10 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
2102
2102
  server: {
2103
2103
  provider: "resend" | "smtp" | "managed";
2104
2104
  password: string | undefined;
2105
- isShared: boolean;
2106
2105
  host: string | undefined;
2107
2106
  port: number | undefined;
2108
2107
  username: string | undefined;
2108
+ isShared: boolean;
2109
2109
  senderName: string | undefined;
2110
2110
  senderEmail: string | undefined;
2111
2111
  managedSubdomain: string | undefined;
@@ -2221,12 +2221,6 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
2221
2221
  users: {
2222
2222
  allowClientUserDeletion: boolean;
2223
2223
  };
2224
- apiKeys: {
2225
- enabled: {
2226
- team: boolean;
2227
- user: boolean;
2228
- };
2229
- };
2230
2224
  domains: {
2231
2225
  allowLocalhost: boolean;
2232
2226
  trustedDomains: {
@@ -2236,6 +2230,12 @@ declare function sanitizeOrganizationConfig(config: OrganizationRenderedConfigBe
2236
2230
  };
2237
2231
  };
2238
2232
  };
2233
+ apiKeys: {
2234
+ enabled: {
2235
+ team: boolean;
2236
+ user: boolean;
2237
+ };
2238
+ };
2239
2239
  dbSync: {
2240
2240
  externalDatabases: {
2241
2241
  [x: string]: {
@@ -1 +1 @@
1
- {"version":3,"file":"config-rendering.d.ts","names":[],"sources":["../src/config-rendering.ts"],"mappings":";;;;AA4BA;;;;iBAAgB,yBAAA,CAA0B,YAAA;AAa1C;;;;AAAA,iBAAgB,0BAAA,CAA2B,GAAA"}
1
+ {"version":3,"file":"config-rendering.d.ts","names":[],"sources":["../src/config-rendering.ts"],"mappings":";;;;AA6BA;;;;iBAAgB,yBAAA,CAA0B,YAAA;AAa1C;;;;AAAA,iBAAgB,0BAAA,CAA2B,GAAA"}
@@ -16,6 +16,7 @@ let __hexclave_config_file_js = require("./hexclave-config-file.js");
16
16
  const CONFIG_IMPORT_PACKAGES = [
17
17
  "@hexclave/next",
18
18
  "@hexclave/react",
19
+ "@hexclave/tanstack-start",
19
20
  "@hexclave/js",
20
21
  "@hexclave/template",
21
22
  "@stackframe/stack",
@@ -99,15 +100,19 @@ function detectImportPackageFromDir(dir) {
99
100
  expect(() => (0, __hexclave_config_file_js.renderConfigFileContent)(null)).toThrowErrorMatchingInlineSnapshot(`[Error: Invalid config: expected a plain object.]`);
100
101
  });
101
102
  (void 0)?.test("renderConfigFileContent uses custom import package", ({ expect }) => {
102
- expect((0, __hexclave_config_file_js.renderConfigFileContent)({}, "@hexclave/next")).toContain("import type { HexclaveConfig } from \"@hexclave/next\";");
103
+ expect((0, __hexclave_config_file_js.renderConfigFileContent)({}, "@hexclave/next")).toContain("import type { HexclaveConfig } from \"@hexclave/next/config\";");
103
104
  });
104
105
  (void 0)?.test("renderConfigFileContent defaults to @hexclave/js", ({ expect }) => {
105
- expect((0, __hexclave_config_file_js.renderConfigFileContent)({})).toContain("import type { HexclaveConfig } from \"@hexclave/js\";");
106
+ expect((0, __hexclave_config_file_js.renderConfigFileContent)({})).toContain("import type { HexclaveConfig } from \"@hexclave/js/config\";");
107
+ });
108
+ (void 0)?.test("renderConfigFileContent keeps legacy @stackframe packages on their root entrypoint", ({ expect }) => {
109
+ expect((0, __hexclave_config_file_js.renderConfigFileContent)({}, "@stackframe/next")).toContain("import type { HexclaveConfig } from \"@stackframe/next\";");
106
110
  });
107
111
  (void 0)?.test("detectConfigImportPackage picks first matching package by priority", ({ expect }) => {
108
112
  expect(detectConfigImportPackage(["@hexclave/next", "@hexclave/js"])).toBe("@hexclave/next");
109
113
  expect(detectConfigImportPackage(["@hexclave/react", "@hexclave/js"])).toBe("@hexclave/react");
110
114
  expect(detectConfigImportPackage(["@hexclave/js"])).toBe("@hexclave/js");
115
+ expect(detectConfigImportPackage(["@hexclave/tanstack-start"])).toBe("@hexclave/tanstack-start");
111
116
  expect(detectConfigImportPackage(["@stackframe/stack", "@hexclave/next"])).toBe("@hexclave/next");
112
117
  expect(detectConfigImportPackage(["@stackframe/stack"])).toBe("@stackframe/stack");
113
118
  expect(detectConfigImportPackage(["@stackframe/template"])).toBe("@stackframe/template");
@@ -1 +1 @@
1
- {"version":3,"file":"config-rendering.js","names":[],"sources":["../src/config-rendering.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"fs\";\nimport path from \"path\";\nimport { parseHexclaveConfigFileContent, renderConfigFileContent } from \"./hexclave-config-file\";\nexport { parseHexclaveConfigFileContent, renderConfigFileContent };\n\n/**\n * Packages that export the `HexclaveConfig` type, in priority order.\n * The first match found in a project's dependencies wins. Hexclave-branded\n * packages come first (canonical); the legacy `@stackframe/*` names remain\n * so projects pinned to the last legacy release still render a config file\n * that compiles against their installed SDK.\n */\nconst CONFIG_IMPORT_PACKAGES = [\n \"@hexclave/next\",\n \"@hexclave/react\",\n \"@hexclave/js\",\n \"@hexclave/template\",\n \"@stackframe/stack\",\n \"@stackframe/react\",\n \"@stackframe/js\",\n \"@stackframe/template\",\n] as const;\n\n/**\n * Given a list of dependency names (from package.json), returns the SDK\n * package that should be used for the `HexclaveConfig` import, or `undefined`\n * if none of the known packages are installed.\n */\nexport function detectConfigImportPackage(dependencies: string[]): string | undefined {\n for (const pkg of CONFIG_IMPORT_PACKAGES) {\n if (dependencies.includes(pkg)) {\n return pkg;\n }\n }\n return undefined;\n}\n\n/**\n * Walks up from `dir` to find the nearest `package.json` and returns the\n * best SDK package to use for the `HexclaveConfig` type import.\n */\nexport function detectImportPackageFromDir(dir: string): string | undefined {\n let current = dir;\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n const deps = [\n ...Object.keys(pkg.dependencies ?? {}),\n ...Object.keys(pkg.devDependencies ?? {}),\n ];\n return detectConfigImportPackage(deps);\n } catch {\n return undefined;\n }\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return undefined;\n}\n\nimport.meta.vitest?.test(\"renderConfigFileContent normalizes config exports\", ({ expect }) => {\n expect(renderConfigFileContent({\n \"payments.items.todos.displayName\": \"Todo Slots\",\n \"payments.items.todos.customerType\": \"user\",\n })).toContain(`export const config: HexclaveConfig = {\n \"payments\": {\n \"items\": {\n \"todos\": {\n \"displayName\": \"Todo Slots\",\n \"customerType\": \"user\"\n }\n }\n }\n};`);\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent parses static config exports\", ({ expect }) => {\n expect(parseHexclaveConfigFileContent(`\n import type { StackConfig } from \"@hexclave/js\";\n export const config: StackConfig = {\n auth: { allowSignUp: true },\n payments: { testMode: false },\n };\n `, \"stack.config.ts\")).toMatchInlineSnapshot(`\n {\n \"auth\": {\n \"allowSignUp\": true,\n },\n \"payments\": {\n \"testMode\": false,\n },\n }\n `);\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent parses show-onboarding\", ({ expect }) => {\n expect(parseHexclaveConfigFileContent('export const config = \"show-onboarding\";', \"stack.config.ts\")).toBe(\"show-onboarding\");\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent rejects dynamic config exports\", ({ expect }) => {\n expect(() => parseHexclaveConfigFileContent(\"export const config = makeConfig();\", \"stack.config.ts\")).toThrow(/Unsupported config expression/);\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent rejects conflicting dotted keys\", ({ expect }) => {\n expect(() => renderConfigFileContent({\n \"a.b\": 1,\n \"a.b.c\": 2,\n })).toThrowError(/conflicting keys.*\"a\\.b\\.c\"/);\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent rejects invalid config exports\", ({ expect }) => {\n expect(() => renderConfigFileContent(null)).toThrowErrorMatchingInlineSnapshot(\n `[Error: Invalid config: expected a plain object.]`,\n );\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent uses custom import package\", ({ expect }) => {\n const content = renderConfigFileContent({}, \"@hexclave/next\");\n expect(content).toContain('import type { HexclaveConfig } from \"@hexclave/next\";');\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent defaults to @hexclave/js\", ({ expect }) => {\n const content = renderConfigFileContent({});\n expect(content).toContain('import type { HexclaveConfig } from \"@hexclave/js\";');\n});\n\nimport.meta.vitest?.test(\"detectConfigImportPackage picks first matching package by priority\", ({ expect }) => {\n expect(detectConfigImportPackage([\"@hexclave/next\", \"@hexclave/js\"])).toBe(\"@hexclave/next\");\n expect(detectConfigImportPackage([\"@hexclave/react\", \"@hexclave/js\"])).toBe(\"@hexclave/react\");\n expect(detectConfigImportPackage([\"@hexclave/js\"])).toBe(\"@hexclave/js\");\n // Hexclave names take priority over legacy stackframe names when both appear.\n expect(detectConfigImportPackage([\"@stackframe/stack\", \"@hexclave/next\"])).toBe(\"@hexclave/next\");\n // Legacy fallback still works for projects pinned to the last @stackframe/* release.\n expect(detectConfigImportPackage([\"@stackframe/stack\"])).toBe(\"@stackframe/stack\");\n expect(detectConfigImportPackage([\"@stackframe/template\"])).toBe(\"@stackframe/template\");\n expect(detectConfigImportPackage([\"lodash\", \"express\"])).toBeUndefined();\n expect(detectConfigImportPackage([])).toBeUndefined();\n});\n"],"mappings":";;;;;;;;;;;;;;;AAYA,MAAM,yBAAyB;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;AAOD,SAAgB,0BAA0B,cAA4C;AACpF,MAAK,MAAM,OAAO,uBAChB,KAAI,aAAa,SAAS,IAAI,CAC5B,QAAO;;;;;;AAUb,SAAgB,2BAA2B,KAAiC;CAC1E,IAAI,UAAU;AACd,QAAO,MAAM;EACX,MAAM,UAAU,aAAK,KAAK,SAAS,eAAe;AAClD,yBAAe,QAAQ,CACrB,KAAI;GACF,MAAM,MAAM,KAAK,2BAAmB,SAAS,QAAQ,CAAC;AAKtD,UAAO,0BAJM,CACX,GAAG,OAAO,KAAK,IAAI,gBAAgB,EAAE,CAAC,EACtC,GAAG,OAAO,KAAK,IAAI,mBAAmB,EAAE,CAAC,CAC1C,CACqC;UAChC;AACN;;EAGJ,MAAM,SAAS,aAAK,QAAQ,QAAQ;AACpC,MAAI,WAAW,QAAS;AACxB,YAAU;;;CAKd,SAAW,KAAC,sDAAwD,EAAA,aAAa;AAC/E,+DAA+B;EAC7B,oCAAoC;EACpC,qCAAqC;EACtC,CAAC,CAAC,CAAC,UAAU;;;;;;;;;IASZ;EACF;CAEF,SAAW,KAAC,gEAAkE,EAAA,aAAa;AACzF,sEAAsC;;;;;;KAMnC,kBAAkB,CAAC,CAAC,sBAAsB;;;;;;;;;IAS3C;EACF;CAEF,SAAW,KAAC,0DAAyD,EAAA,aAAgB;AACnF,sEAAsC,8CAA4C,kBAAkB,CAAC,CAAC,KAAK,kBAAkB;EAC7H;CAEF,SAAW,KAAC,kEAAoE,EAAA,aAAa;AAC3F,4EAA4C,uCAAuC,kBAAkB,CAAC,CAAC,QAAQ,gCAAgC;EAC/I;CAEF,SAAW,KAAC,4DAAgE,EAAC,aAAU;AACrF,qEAAqC;EACnC,OAAO;EACP,SAAS;EACV,CAAC,CAAC,CAAC,aAAa,8BAA8B;EAC/C;CAEF,SAAW,KAAC,2DAA6D,EAAA,aAAa;AACpF,qEAAqC,KAAK,CAAC,CAAC,mCAC1C,oDACD;EACD;CAEF,SAAW,KAAC,uDAAyD,EAAA,aAAa;AAEhF,+DADwC,EAAE,EAAE,iBAAiB,CAC9C,CAAC,UAAU,0DAAwD;EAClF;CAEF,SAAW,KAAC,qDAAmD,EAAQ,aAAS;AAE9E,+DADwC,EAAE,CAAC,CAC5B,CAAC,UAAU,wDAAsD;EAChF;CAEF,SAAW,KAAC,uEAAwE,EAAA,aAAc;AAChG,QAAO,0BAA0B,CAAC,kBAAkB,eAAe,CAAC,CAAC,CAAC,KAAK,iBAAiB;AAC5F,QAAO,0BAA0B,CAAC,mBAAmB,eAAe,CAAC,CAAC,CAAC,KAAK,kBAAkB;AAC9F,QAAO,0BAA0B,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,eAAe;AAExE,QAAO,0BAA0B,CAAC,qBAAqB,iBAAiB,CAAC,CAAC,CAAC,KAAK,iBAAiB;AAEjG,QAAO,0BAA0B,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,oBAAoB;AAClF,QAAO,0BAA0B,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,uBAAuB;AACxF,QAAO,0BAA0B,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,eAAe;AACxE,QAAO,0BAA0B,EAAE,CAAC,CAAC,CAAC,eAAe;EACrD"}
1
+ {"version":3,"file":"config-rendering.js","names":[],"sources":["../src/config-rendering.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"fs\";\nimport path from \"path\";\nimport { parseHexclaveConfigFileContent, renderConfigFileContent } from \"./hexclave-config-file\";\nexport { parseHexclaveConfigFileContent, renderConfigFileContent };\n\n/**\n * Packages that export the `HexclaveConfig` type, in priority order.\n * The first match found in a project's dependencies wins. Hexclave-branded\n * packages come first (canonical); the legacy `@stackframe/*` names remain\n * so projects pinned to the last legacy release still render a config file\n * that compiles against their installed SDK.\n */\nconst CONFIG_IMPORT_PACKAGES = [\n \"@hexclave/next\",\n \"@hexclave/react\",\n \"@hexclave/tanstack-start\",\n \"@hexclave/js\",\n \"@hexclave/template\",\n \"@stackframe/stack\",\n \"@stackframe/react\",\n \"@stackframe/js\",\n \"@stackframe/template\",\n] as const;\n\n/**\n * Given a list of dependency names (from package.json), returns the SDK\n * package that should be used for the `HexclaveConfig` import, or `undefined`\n * if none of the known packages are installed.\n */\nexport function detectConfigImportPackage(dependencies: string[]): string | undefined {\n for (const pkg of CONFIG_IMPORT_PACKAGES) {\n if (dependencies.includes(pkg)) {\n return pkg;\n }\n }\n return undefined;\n}\n\n/**\n * Walks up from `dir` to find the nearest `package.json` and returns the\n * best SDK package to use for the `HexclaveConfig` type import.\n */\nexport function detectImportPackageFromDir(dir: string): string | undefined {\n let current = dir;\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n const deps = [\n ...Object.keys(pkg.dependencies ?? {}),\n ...Object.keys(pkg.devDependencies ?? {}),\n ];\n return detectConfigImportPackage(deps);\n } catch {\n return undefined;\n }\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return undefined;\n}\n\nimport.meta.vitest?.test(\"renderConfigFileContent normalizes config exports\", ({ expect }) => {\n expect(renderConfigFileContent({\n \"payments.items.todos.displayName\": \"Todo Slots\",\n \"payments.items.todos.customerType\": \"user\",\n })).toContain(`export const config: HexclaveConfig = {\n \"payments\": {\n \"items\": {\n \"todos\": {\n \"displayName\": \"Todo Slots\",\n \"customerType\": \"user\"\n }\n }\n }\n};`);\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent parses static config exports\", ({ expect }) => {\n expect(parseHexclaveConfigFileContent(`\n import type { StackConfig } from \"@hexclave/js\";\n export const config: StackConfig = {\n auth: { allowSignUp: true },\n payments: { testMode: false },\n };\n `, \"stack.config.ts\")).toMatchInlineSnapshot(`\n {\n \"auth\": {\n \"allowSignUp\": true,\n },\n \"payments\": {\n \"testMode\": false,\n },\n }\n `);\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent parses show-onboarding\", ({ expect }) => {\n expect(parseHexclaveConfigFileContent('export const config = \"show-onboarding\";', \"stack.config.ts\")).toBe(\"show-onboarding\");\n});\n\nimport.meta.vitest?.test(\"parseHexclaveConfigFileContent rejects dynamic config exports\", ({ expect }) => {\n expect(() => parseHexclaveConfigFileContent(\"export const config = makeConfig();\", \"stack.config.ts\")).toThrow(/Unsupported config expression/);\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent rejects conflicting dotted keys\", ({ expect }) => {\n expect(() => renderConfigFileContent({\n \"a.b\": 1,\n \"a.b.c\": 2,\n })).toThrowError(/conflicting keys.*\"a\\.b\\.c\"/);\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent rejects invalid config exports\", ({ expect }) => {\n expect(() => renderConfigFileContent(null)).toThrowErrorMatchingInlineSnapshot(\n `[Error: Invalid config: expected a plain object.]`,\n );\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent uses custom import package\", ({ expect }) => {\n const content = renderConfigFileContent({}, \"@hexclave/next\");\n expect(content).toContain('import type { HexclaveConfig } from \"@hexclave/next/config\";');\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent defaults to @hexclave/js\", ({ expect }) => {\n const content = renderConfigFileContent({});\n expect(content).toContain('import type { HexclaveConfig } from \"@hexclave/js/config\";');\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent keeps legacy @stackframe packages on their root entrypoint\", ({ expect }) => {\n // The lightweight `/config` subpath only exists on Hexclave-branded packages;\n // already-published @stackframe/* releases predate it.\n const content = renderConfigFileContent({}, \"@stackframe/next\");\n expect(content).toContain('import type { HexclaveConfig } from \"@stackframe/next\";');\n});\n\nimport.meta.vitest?.test(\"detectConfigImportPackage picks first matching package by priority\", ({ expect }) => {\n expect(detectConfigImportPackage([\"@hexclave/next\", \"@hexclave/js\"])).toBe(\"@hexclave/next\");\n expect(detectConfigImportPackage([\"@hexclave/react\", \"@hexclave/js\"])).toBe(\"@hexclave/react\");\n expect(detectConfigImportPackage([\"@hexclave/js\"])).toBe(\"@hexclave/js\");\n expect(detectConfigImportPackage([\"@hexclave/tanstack-start\"])).toBe(\"@hexclave/tanstack-start\");\n // Hexclave names take priority over legacy stackframe names when both appear.\n expect(detectConfigImportPackage([\"@stackframe/stack\", \"@hexclave/next\"])).toBe(\"@hexclave/next\");\n // Legacy fallback still works for projects pinned to the last @stackframe/* release.\n expect(detectConfigImportPackage([\"@stackframe/stack\"])).toBe(\"@stackframe/stack\");\n expect(detectConfigImportPackage([\"@stackframe/template\"])).toBe(\"@stackframe/template\");\n expect(detectConfigImportPackage([\"lodash\", \"express\"])).toBeUndefined();\n expect(detectConfigImportPackage([])).toBeUndefined();\n});\n"],"mappings":";;;;;;;;;;;;;;;AAYA,MAAM,yBAAyB;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;AAOD,SAAgB,0BAA0B,cAA4C;AACpF,MAAK,MAAM,OAAO,uBAChB,KAAI,aAAa,SAAS,IAAI,CAC5B,QAAO;;;;;;AAUb,SAAgB,2BAA2B,KAAiC;CAC1E,IAAI,UAAU;AACd,QAAO,MAAM;EACX,MAAM,UAAU,aAAK,KAAK,SAAS,eAAe;AAClD,yBAAe,QAAQ,CACrB,KAAI;GACF,MAAM,MAAM,KAAK,2BAAmB,SAAS,QAAQ,CAAC;AAKtD,UAAO,0BAJM,CACX,GAAG,OAAO,KAAK,IAAI,gBAAgB,EAAE,CAAC,EACtC,GAAG,OAAO,KAAK,IAAI,mBAAmB,EAAE,CAAC,CAC1C,CACqC;UAChC;AACN;;EAGJ,MAAM,SAAS,aAAK,QAAQ,QAAQ;AACpC,MAAI,WAAW,QAAS;AACxB,YAAU;;;CAKd,SAAW,KAAC,sDAAwD,EAAA,aAAa;AAC/E,+DAA+B;EAC7B,oCAAoC;EACpC,qCAAqC;EACtC,CAAC,CAAC,CAAC,UAAU;;;;;;;;;IASZ;EACF;CAEF,SAAW,KAAC,gEAAkE,EAAA,aAAa;AACzF,sEAAsC;;;;;;KAMnC,kBAAkB,CAAC,CAAC,sBAAsB;;;;;;;;;IAS3C;EACF;CAEF,SAAW,KAAC,0DAAyD,EAAA,aAAgB;AACnF,sEAAsC,8CAA4C,kBAAkB,CAAC,CAAC,KAAK,kBAAkB;EAC7H;CAEF,SAAW,KAAC,kEAAoE,EAAA,aAAa;AAC3F,4EAA4C,uCAAuC,kBAAkB,CAAC,CAAC,QAAQ,gCAAgC;EAC/I;CAEF,SAAW,KAAC,4DAAgE,EAAC,aAAU;AACrF,qEAAqC;EACnC,OAAO;EACP,SAAS;EACV,CAAC,CAAC,CAAC,aAAa,8BAA8B;EAC/C;CAEF,SAAW,KAAC,2DAA6D,EAAA,aAAa;AACpF,qEAAqC,KAAK,CAAC,CAAC,mCAC1C,oDACD;EACD;CAEF,SAAW,KAAC,uDAAyD,EAAA,aAAa;AAEhF,+DADwC,EAAE,EAAE,iBAAiB,CAC9C,CAAC,UAAU,iEAA+D;EACzF;CAEF,SAAW,KAAC,qDAAmD,EAAQ,aAAS;AAE9E,+DADwC,EAAE,CAAC,CAC5B,CAAC,UAAU,+DAA6D;EACvF;CAEF,SAAW,KAAC,uFAAsF,EAAA,aAAgB;AAIhH,+DADwC,EAAE,EAAE,mBAAmB,CAChD,CAAC,UAAU,4DAA0D;EACpF;CAEF,SAAW,KAAC,uEAAwE,EAAA,aAAc;AAChG,QAAO,0BAA0B,CAAC,kBAAkB,eAAe,CAAC,CAAC,CAAC,KAAK,iBAAiB;AAC5F,QAAO,0BAA0B,CAAC,mBAAmB,eAAe,CAAC,CAAC,CAAC,KAAK,kBAAkB;AAC9F,QAAO,0BAA0B,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,eAAe;AACxE,QAAO,0BAA0B,CAAC,2BAA2B,CAAC,CAAC,CAAC,KAAK,2BAA2B;AAEhG,QAAO,0BAA0B,CAAC,qBAAqB,iBAAiB,CAAC,CAAC,CAAC,KAAK,iBAAiB;AAEjG,QAAO,0BAA0B,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,oBAAoB;AAClF,QAAO,0BAA0B,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,uBAAuB;AACxF,QAAO,0BAA0B,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,eAAe;AACxE,QAAO,0BAA0B,EAAE,CAAC,CAAC,CAAC,eAAe;EACrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai-setup-prompt.d.ts","names":[],"sources":["../../../../../src/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.ts"],"mappings":";cAEa,iBAAA;AAAA,cA6FA,mBAAA;AAAA,cAmKA,cAAA;AAAA,cA0QA,wBAAA;AAAA,cACA,yBAAA;AAAA,cAEA,8BAAA;AAAA,cAkCA,eAAA;AAAA,iBAIG,iBAAA,CAAkB,QAAA;AAAA,cAgdrB,aAAA"}
1
+ {"version":3,"file":"ai-setup-prompt.d.ts","names":[],"sources":["../../../../../src/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.ts"],"mappings":";cAEa,iBAAA;AAAA,cA6FA,mBAAA;AAAA,cAmKA,cAAA;AAAA,cA4QA,wBAAA;AAAA,cACA,yBAAA;AAAA,cAEA,8BAAA;AAAA,cAkCA,eAAA;AAAA,iBAIG,iBAAA,CAAkB,QAAA;AAAA,cAsdrB,aAAA"}
@@ -351,11 +351,13 @@ function getRestBackendSetupPrompt(kind) {
351
351
  If this project already has a \`hexclave.config.ts\` file for another frontend or backend, reuse that same file so the whole project shares one Hexclave config. Otherwise, create a new \`hexclave.config.ts\` file in your workspace:
352
352
 
353
353
  \`\`\`ts hexclave.config.ts
354
- import type { HexclaveConfig } from "@hexclave/js";
354
+ import type { HexclaveConfig } from "@hexclave/js/config";
355
355
 
356
356
  export const config: HexclaveConfig = "show-onboarding";
357
357
  \`\`\`
358
358
 
359
+ The \`/config\` entrypoint is lightweight and free of framework runtime code, so it can be safely loaded by tooling such as the local dashboard. If you later switch to a config object and want type-checking, wrap it with \`defineHexclaveConfig\` imported from the same \`@hexclave/js/config\` path (never from \`@hexclave/js\` directly, which would pull in the whole SDK and fail to load).
360
+
359
361
  Run your backend through the Hexclave CLI so it starts the local dashboard and injects the Hexclave environment variables:
360
362
 
361
363
  \`\`\`json package.json
@@ -642,6 +644,10 @@ function getSdkSetupPrompt(mainType) {
642
644
  },
643
645
  });
644
646
  \`\`\`
647
+
648
+ <Note>
649
+ The SDK auto-captures page-view and click analytics. To turn this off (and silence the \`ANALYTICS_NOT_ENABLED\` console warning that appears until you enable the Analytics app in your dashboard), pass \`analytics: { enabled: false }\`.
650
+ </Note>
645
651
  ` : ""}
646
652
 
647
653
  ${isMaybeBackend ? deindent`
@@ -699,12 +705,14 @@ function getSdkSetupPrompt(mainType) {
699
705
  First, create a \`hexclave.config.ts\` configuration file in the root directory of the workspace (or anywhere else):
700
706
 
701
707
  \`\`\`ts hexclave.config.ts
702
- import type { HexclaveConfig } from "${packageName}";
708
+ import type { HexclaveConfig } from "${packageName}/config";
703
709
 
704
710
  // default: show-onboarding, which shows the onboarding flow for this project when Hexclave starts
705
711
  export const config: HexclaveConfig = "show-onboarding";
706
712
  \`\`\`
707
713
 
714
+ The \`/config\` entrypoint is lightweight and free of framework runtime code, so it can be safely loaded by tooling such as the local dashboard. If you later switch to a config object and want type-checking, wrap it with \`defineHexclaveConfig\` imported from the same \`${packageName}/config\` path (never from \`${packageName}\` directly, which would pull in the whole SDK and fail to load).
715
+
708
716
  To run your application with Hexclave, you can then start the dev environment and set environment variables expected by your application. Hexclave's CLI has a \`dev\` command does both of these, so let's install it as a dev dependency and wrap your existing \`dev\` script in your package.json:
709
717
 
710
718
  \`\`\`sh