@soulbatical/tetra-core 0.1.13 → 0.1.15

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.

Potentially problematic release.


This version of @soulbatical/tetra-core might be problematic. Click here for more details.

Files changed (77) hide show
  1. package/dist/generators/rls-auditor.d.ts +39 -0
  2. package/dist/generators/rls-auditor.d.ts.map +1 -0
  3. package/dist/generators/rls-auditor.js +505 -0
  4. package/dist/generators/rls-auditor.js.map +1 -0
  5. package/dist/generators/rls-checker.d.ts +94 -0
  6. package/dist/generators/rls-checker.d.ts.map +1 -0
  7. package/dist/generators/rls-checker.js +215 -0
  8. package/dist/generators/rls-checker.js.map +1 -0
  9. package/dist/generators/rls-generator.d.ts +77 -0
  10. package/dist/generators/rls-generator.d.ts.map +1 -0
  11. package/dist/generators/rls-generator.js +402 -0
  12. package/dist/generators/rls-generator.js.map +1 -0
  13. package/dist/generators/rpc/detail-rpc-generator.d.ts +58 -0
  14. package/dist/generators/rpc/detail-rpc-generator.d.ts.map +1 -0
  15. package/dist/generators/rpc/detail-rpc-generator.js +163 -0
  16. package/dist/generators/rpc/detail-rpc-generator.js.map +1 -0
  17. package/dist/generators/rpc/index.d.ts +24 -0
  18. package/dist/generators/rpc/index.d.ts.map +1 -0
  19. package/dist/generators/rpc/index.js +20 -0
  20. package/dist/generators/rpc/index.js.map +1 -0
  21. package/dist/generators/rpc/rpc-generator.d.ts +150 -0
  22. package/dist/generators/rpc/rpc-generator.d.ts.map +1 -0
  23. package/dist/generators/rpc/rpc-generator.js +743 -0
  24. package/dist/generators/rpc/rpc-generator.js.map +1 -0
  25. package/dist/generators/rpc/templates/array.d.ts +29 -0
  26. package/dist/generators/rpc/templates/array.d.ts.map +1 -0
  27. package/dist/generators/rpc/templates/array.js +40 -0
  28. package/dist/generators/rpc/templates/array.js.map +1 -0
  29. package/dist/generators/rpc/templates/auth.d.ts +85 -0
  30. package/dist/generators/rpc/templates/auth.d.ts.map +1 -0
  31. package/dist/generators/rpc/templates/auth.js +233 -0
  32. package/dist/generators/rpc/templates/auth.js.map +1 -0
  33. package/dist/generators/rpc/templates/column.d.ts +39 -0
  34. package/dist/generators/rpc/templates/column.d.ts.map +1 -0
  35. package/dist/generators/rpc/templates/column.js +97 -0
  36. package/dist/generators/rpc/templates/column.js.map +1 -0
  37. package/dist/generators/rpc/templates/enum.d.ts +33 -0
  38. package/dist/generators/rpc/templates/enum.d.ts.map +1 -0
  39. package/dist/generators/rpc/templates/enum.js +93 -0
  40. package/dist/generators/rpc/templates/enum.js.map +1 -0
  41. package/dist/generators/rpc/templates/nullable.d.ts +31 -0
  42. package/dist/generators/rpc/templates/nullable.d.ts.map +1 -0
  43. package/dist/generators/rpc/templates/nullable.js +50 -0
  44. package/dist/generators/rpc/templates/nullable.js.map +1 -0
  45. package/dist/generators/rpc/templates/related.d.ts +47 -0
  46. package/dist/generators/rpc/templates/related.d.ts.map +1 -0
  47. package/dist/generators/rpc/templates/related.js +182 -0
  48. package/dist/generators/rpc/templates/related.js.map +1 -0
  49. package/dist/generators/rpc/templates/search.d.ts +42 -0
  50. package/dist/generators/rpc/templates/search.d.ts.map +1 -0
  51. package/dist/generators/rpc/templates/search.js +81 -0
  52. package/dist/generators/rpc/templates/search.js.map +1 -0
  53. package/dist/generators/rpc/templates/time.d.ts +44 -0
  54. package/dist/generators/rpc/templates/time.d.ts.map +1 -0
  55. package/dist/generators/rpc/templates/time.js +143 -0
  56. package/dist/generators/rpc/templates/time.js.map +1 -0
  57. package/dist/generators/rpc/utils.d.ts +58 -0
  58. package/dist/generators/rpc/utils.d.ts.map +1 -0
  59. package/dist/generators/rpc/utils.js +92 -0
  60. package/dist/generators/rpc/utils.js.map +1 -0
  61. package/dist/generators/rpc/validator.d.ts +21 -0
  62. package/dist/generators/rpc/validator.d.ts.map +1 -0
  63. package/dist/generators/rpc/validator.js +398 -0
  64. package/dist/generators/rpc/validator.js.map +1 -0
  65. package/dist/index.d.ts +9 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +6 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/shared/auth/index.d.ts +1 -1
  70. package/dist/shared/auth/index.d.ts.map +1 -1
  71. package/dist/shared/auth/routes.d.ts +4 -1
  72. package/dist/shared/auth/routes.d.ts.map +1 -1
  73. package/dist/shared/auth/routes.js +83 -1
  74. package/dist/shared/auth/routes.js.map +1 -1
  75. package/dist/shared/auth/types.d.ts +24 -0
  76. package/dist/shared/auth/types.d.ts.map +1 -1
  77. package/package.json +1 -1
@@ -0,0 +1,398 @@
1
+ /**
2
+ * SQL Generator Validator
3
+ * Validates feature configs before generating SQL
4
+ */
5
+ /**
6
+ * Validate feature config for SQL generation
7
+ */
8
+ export function validateConfig(config) {
9
+ const errors = [];
10
+ const warnings = [];
11
+ // Check required fields
12
+ if (!config.tableName) {
13
+ errors.push({
14
+ type: 'error',
15
+ field: 'tableName',
16
+ message: 'tableName is required',
17
+ suggestion: 'Add tableName to feature config'
18
+ });
19
+ }
20
+ if (!config.organizationIdField) {
21
+ errors.push({
22
+ type: 'error',
23
+ field: 'organizationIdField',
24
+ message: 'organizationIdField is required',
25
+ suggestion: 'Add organizationIdField to feature config (usually "organization_id")'
26
+ });
27
+ }
28
+ if (!config.filters || config.filters.length === 0) {
29
+ errors.push({
30
+ type: 'error',
31
+ field: 'filters',
32
+ message: 'No filters defined',
33
+ suggestion: 'Add at least one filter to filters array'
34
+ });
35
+ return { valid: false, errors, warnings };
36
+ }
37
+ // Validate searchFields (root level)
38
+ if (config.searchFields) {
39
+ const supportedRelations = ['user', 'order'];
40
+ config.searchFields.forEach((field, index) => {
41
+ if (field.includes('.')) {
42
+ const [relation] = field.split('.');
43
+ if (!supportedRelations.includes(relation)) {
44
+ errors.push({
45
+ type: 'error',
46
+ field: `searchFields[${index}]`,
47
+ message: `Unsupported relation "${relation}" in field "${field}"`,
48
+ suggestion: `Supported relations: ${supportedRelations.join(', ')}`
49
+ });
50
+ }
51
+ }
52
+ });
53
+ }
54
+ // Validate each filter
55
+ const filterNames = new Set();
56
+ const countsKeys = new Set();
57
+ config.filters.forEach((filter, index) => {
58
+ // Check duplicate filter names
59
+ if (filterNames.has(filter.name)) {
60
+ errors.push({
61
+ type: 'error',
62
+ field: `filters[${index}].name`,
63
+ message: `Duplicate filter name: ${filter.name}`,
64
+ suggestion: 'Filter names must be unique'
65
+ });
66
+ }
67
+ filterNames.add(filter.name);
68
+ // Check filter name is snake_case (for RPC param naming)
69
+ if (filter.name.match(/[A-Z]/)) {
70
+ errors.push({
71
+ type: 'error',
72
+ field: `filters[${index}].name`,
73
+ message: `Filter name "${filter.name}" uses camelCase, must be snake_case`,
74
+ suggestion: `Change to snake_case (e.g., "paymentStatus" → "payment_status")`
75
+ });
76
+ }
77
+ // CRITICAL: Validate customWhereClause handles 'all' for ALL filter types
78
+ validateCustomWhereClause(filter, index, errors);
79
+ // Validate filter based on type
80
+ switch (filter.type) {
81
+ case 'enum':
82
+ validateEnumFilter(filter, index, errors, warnings);
83
+ break;
84
+ case 'boolean':
85
+ // Boolean is treated as enum with custom SQL
86
+ validateBooleanFilter(filter, index, errors, warnings);
87
+ break;
88
+ case 'column':
89
+ validateColumnFilter(filter, index, errors, warnings);
90
+ break;
91
+ case 'nullable':
92
+ validateNullableFilter(filter, index, errors, warnings);
93
+ break;
94
+ case 'related':
95
+ validateRelatedFilter(filter, index, errors, warnings);
96
+ break;
97
+ case 'time':
98
+ validateTimeFilter(filter, index, errors, warnings);
99
+ break;
100
+ case 'search':
101
+ validateSearchFilter(filter, index, errors, warnings);
102
+ break;
103
+ case 'array':
104
+ validateArrayFilter(filter, index, errors, warnings);
105
+ break;
106
+ default:
107
+ errors.push({
108
+ type: 'error',
109
+ field: `filters[${index}].type`,
110
+ message: `Unsupported filter type: ${filter.type}`,
111
+ suggestion: 'Use: enum, boolean, column, nullable, related, time, search, or array'
112
+ });
113
+ }
114
+ // Check duplicate counts keys
115
+ if (filter.countsKey) {
116
+ if (countsKeys.has(filter.countsKey)) {
117
+ errors.push({
118
+ type: 'error',
119
+ field: `filters[${index}].countsKey`,
120
+ message: `Duplicate countsKey: ${filter.countsKey}`,
121
+ suggestion: 'Counts keys must be unique'
122
+ });
123
+ }
124
+ countsKeys.add(filter.countsKey);
125
+ }
126
+ // Validate UI config
127
+ if (!filter.ui) {
128
+ warnings.push({
129
+ type: 'warning',
130
+ field: `filters[${index}].ui`,
131
+ message: `Filter "${filter.name}" missing UI config`,
132
+ suggestion: 'Add ui object with label, placeholder, options'
133
+ });
134
+ }
135
+ });
136
+ return {
137
+ valid: errors.length === 0,
138
+ errors,
139
+ warnings
140
+ };
141
+ }
142
+ /**
143
+ * CRITICAL VALIDATION: Validate customWhereClause handles 'all' value
144
+ *
145
+ * When a filter has customWhereClause, mapFiltersToRPC() does NOT convert 'all' to null.
146
+ * This means the SQL MUST explicitly handle the 'all' value, otherwise it returns 0 items!
147
+ *
148
+ * Exception: Array filters (type='array') are excluded from this check because
149
+ * mapFiltersToRPC() ALWAYS converts 'all' to null for array parameters (line 237-242).
150
+ * Array parameters cannot be 'all' string - PostgreSQL expects array or null.
151
+ *
152
+ * Example problem:
153
+ * - Frontend sends: search=all (default value)
154
+ * - Backend passes: p_search='all' to RPC
155
+ * - SQL says: WHERE p_search IS NULL OR p_search = '' OR EXISTS(...)
156
+ * - Result: 0 items! (because 'all' !== NULL and 'all' !== '')
157
+ *
158
+ * Solution:
159
+ * - SQL must include: p_search IS NULL OR p_search = '' OR p_search = 'all' OR EXISTS(...)
160
+ */
161
+ function validateCustomWhereClause(filter, index, errors) {
162
+ const customWhereClause = filter.sqlGeneration?.customWhereClause;
163
+ if (!customWhereClause) {
164
+ return; // No custom WHERE clause, no validation needed
165
+ }
166
+ // SKIP validation for array filters - they never receive 'all' value
167
+ // mapFiltersToRPC() converts 'all' → null for array types (config-driven-filters.ts:237-242)
168
+ if (filter.type === 'array') {
169
+ return; // Array filters are safe - no 'all' check needed
170
+ }
171
+ const paramName = `p_${filter.rpcParam || filter.name}`;
172
+ // Check if customWhereClause handles the 'all' value
173
+ const hasAllCheck = customWhereClause.includes(`${paramName} = 'all'`) ||
174
+ customWhereClause.includes(`${paramName} = "all"`);
175
+ if (!hasAllCheck) {
176
+ errors.push({
177
+ type: 'error',
178
+ field: `filters[${index}].sqlGeneration.customWhereClause`,
179
+ message: `CRITICAL: Filter "${filter.name}" with customWhereClause MUST handle 'all' value!`,
180
+ suggestion: `Your SQL will return 0 items when this filter is set to 'all' (the default)!\n\n` +
181
+ `Fix: Add this to your WHERE clause:\n` +
182
+ `${paramName} IS NULL OR ${paramName} = '' OR ${paramName} = 'all'\n\n` +
183
+ `Why: Filters with customWhereClause don't auto-convert 'all' to null,\n` +
184
+ `so the SQL must explicitly handle it. Without this, the API returns empty results!`
185
+ });
186
+ }
187
+ }
188
+ function validateEnumFilter(filter, index, errors, warnings) {
189
+ if (!filter.column) {
190
+ errors.push({
191
+ type: 'error',
192
+ field: `filters[${index}].column`,
193
+ message: `Enum filter "${filter.name}" missing column`,
194
+ suggestion: 'Add column property (e.g., column: "status")'
195
+ });
196
+ }
197
+ if (!filter.values || filter.values.length === 0) {
198
+ errors.push({
199
+ type: 'error',
200
+ field: `filters[${index}].values`,
201
+ message: `Enum filter "${filter.name}" missing values`,
202
+ suggestion: 'Add values array (e.g., values: ["paid", "pending"])'
203
+ });
204
+ }
205
+ if (!filter.countsKey) {
206
+ warnings.push({
207
+ type: 'warning',
208
+ field: `filters[${index}].countsKey`,
209
+ message: `Enum filter "${filter.name}" missing countsKey`,
210
+ suggestion: 'Add countsKey (e.g., countsKey: "byStatus")'
211
+ });
212
+ }
213
+ }
214
+ function validateBooleanFilter(filter, index, errors, warnings) {
215
+ if (!filter.column) {
216
+ errors.push({
217
+ type: 'error',
218
+ field: `filters[${index}].column`,
219
+ message: `Boolean filter "${filter.name}" missing column`,
220
+ suggestion: 'Add column property (e.g., column: "is_active")'
221
+ });
222
+ }
223
+ if (!filter.values || filter.values.length !== 2) {
224
+ errors.push({
225
+ type: 'error',
226
+ field: `filters[${index}].values`,
227
+ message: `Boolean filter "${filter.name}" must have exactly 2 values: ['true', 'false']`,
228
+ suggestion: 'Add values: ["true", "false"]'
229
+ });
230
+ }
231
+ if (!filter.countsKey) {
232
+ warnings.push({
233
+ type: 'warning',
234
+ field: `filters[${index}].countsKey`,
235
+ message: `Boolean filter "${filter.name}" missing countsKey`,
236
+ suggestion: 'Add countsKey (e.g., countsKey: "byIsActive")'
237
+ });
238
+ }
239
+ // Boolean type requires custom SQL (handled by generator)
240
+ if (!filter.sqlGeneration?.customWhereClause) {
241
+ warnings.push({
242
+ type: 'warning',
243
+ field: `filters[${index}].sqlGeneration.customWhereClause`,
244
+ message: `Boolean filter "${filter.name}" missing custom WHERE clause`,
245
+ suggestion: 'Add sqlGeneration.customWhereClause for boolean conversion (::boolean cast)'
246
+ });
247
+ }
248
+ }
249
+ function validateColumnFilter(filter, index, errors, warnings) {
250
+ if (!filter.column) {
251
+ errors.push({
252
+ type: 'error',
253
+ field: `filters[${index}].column`,
254
+ message: `Column filter "${filter.name}" missing column`,
255
+ suggestion: 'Add column property'
256
+ });
257
+ }
258
+ if (!filter.countsKey) {
259
+ warnings.push({
260
+ type: 'warning',
261
+ field: `filters[${index}].countsKey`,
262
+ message: `Column filter "${filter.name}" missing countsKey`,
263
+ suggestion: 'Add countsKey for dynamic counts'
264
+ });
265
+ }
266
+ }
267
+ function validateNullableFilter(filter, index, errors, warnings) {
268
+ if (!filter.column) {
269
+ errors.push({
270
+ type: 'error',
271
+ field: `filters[${index}].column`,
272
+ message: `Nullable filter "${filter.name}" missing column`,
273
+ suggestion: 'Add column property to check for NULL'
274
+ });
275
+ }
276
+ if (!filter.countsKey) {
277
+ warnings.push({
278
+ type: 'warning',
279
+ field: `filters[${index}].countsKey`,
280
+ message: `Nullable filter "${filter.name}" missing countsKey`,
281
+ suggestion: 'Add countsKey (e.g., countsKey: "byUser")'
282
+ });
283
+ }
284
+ }
285
+ function validateRelatedFilter(filter, index, errors, warnings) {
286
+ if (!filter.relatedTable) {
287
+ errors.push({
288
+ type: 'error',
289
+ field: `filters[${index}].relatedTable`,
290
+ message: `Related filter "${filter.name}" missing relatedTable`,
291
+ suggestion: 'Add relatedTable property'
292
+ });
293
+ }
294
+ if (!filter.foreignKey) {
295
+ errors.push({
296
+ type: 'error',
297
+ field: `filters[${index}].foreignKey`,
298
+ message: `Related filter "${filter.name}" missing foreignKey`,
299
+ suggestion: 'Add foreignKey property'
300
+ });
301
+ }
302
+ if (!filter.countsKey) {
303
+ warnings.push({
304
+ type: 'warning',
305
+ field: `filters[${index}].countsKey`,
306
+ message: `Related filter "${filter.name}" missing countsKey`,
307
+ suggestion: 'Add countsKey (e.g., countsKey: "byVoucher")'
308
+ });
309
+ }
310
+ }
311
+ function validateTimeFilter(filter, index, _errors, warnings) {
312
+ if (!filter.dateField && !filter.column) {
313
+ warnings.push({
314
+ type: 'warning',
315
+ field: `filters[${index}].dateField`,
316
+ message: `Time filter "${filter.name}" missing dateField, will use created_at`,
317
+ suggestion: 'Add dateField property or column (e.g., dateField: "order_date")'
318
+ });
319
+ }
320
+ if (!filter.countsKey) {
321
+ warnings.push({
322
+ type: 'warning',
323
+ field: `filters[${index}].countsKey`,
324
+ message: `Time filter "${filter.name}" missing countsKey`,
325
+ suggestion: 'Add countsKey (e.g., countsKey: "byTimePeriod")'
326
+ });
327
+ }
328
+ }
329
+ function validateSearchFilter(filter, index, errors, _warnings) {
330
+ const searchFields = filter.sqlGeneration?.searchFields;
331
+ if (!searchFields || searchFields.length === 0) {
332
+ errors.push({
333
+ type: 'error',
334
+ field: `filters[${index}].sqlGeneration.searchFields`,
335
+ message: `Search filter "${filter.name}" missing searchFields`,
336
+ suggestion: 'Add sqlGeneration.searchFields array (e.g., ["reference", "email"])'
337
+ });
338
+ return;
339
+ }
340
+ // Validate relation syntax (e.g., "order.reference")
341
+ searchFields.forEach((field, fieldIndex) => {
342
+ if (field.includes('.')) {
343
+ const [relation, columnName] = field.split('.');
344
+ // Check if relation is supported
345
+ const supportedRelations = ['user', 'order'];
346
+ if (!supportedRelations.includes(relation)) {
347
+ errors.push({
348
+ type: 'error',
349
+ field: `filters[${index}].sqlGeneration.searchFields[${fieldIndex}]`,
350
+ message: `Unsupported relation "${relation}" in field "${field}"`,
351
+ suggestion: `Supported relations: ${supportedRelations.join(', ')}`
352
+ });
353
+ }
354
+ // Warn if column name looks wrong
355
+ if (columnName.includes('_') && !columnName.match(/^[a-z_]+$/)) {
356
+ _warnings.push({
357
+ type: 'warning',
358
+ field: `filters[${index}].sqlGeneration.searchFields[${fieldIndex}]`,
359
+ message: `Column name "${columnName}" in "${field}" looks unusual`,
360
+ suggestion: 'Database columns are usually snake_case (e.g., first_name)'
361
+ });
362
+ }
363
+ }
364
+ });
365
+ }
366
+ /**
367
+ * Validate array filter (for by-ids navigation)
368
+ */
369
+ function validateArrayFilter(filter, index, errors, warnings) {
370
+ // Array filters need dbField or column to know which field to filter
371
+ if (!filter.dbField && !filter.column) {
372
+ errors.push({
373
+ type: 'error',
374
+ field: `filters[${index}].dbField`,
375
+ message: 'Array filters require dbField or column',
376
+ suggestion: 'Add dbField: "id" (or another field to filter by)'
377
+ });
378
+ }
379
+ // Array filters don't need countsKey (no counts generated)
380
+ if (filter.countsKey) {
381
+ warnings.push({
382
+ type: 'warning',
383
+ field: `filters[${index}].countsKey`,
384
+ message: 'Array filters don\'t generate counts - countsKey will be ignored',
385
+ suggestion: 'Remove countsKey (array filters are for specific item lookup)'
386
+ });
387
+ }
388
+ // Array filters don't need UI config (not rendered in UI)
389
+ if (filter.ui) {
390
+ warnings.push({
391
+ type: 'warning',
392
+ field: `filters[${index}].ui`,
393
+ message: 'Array filters are not rendered in UI - ui config will be ignored',
394
+ suggestion: 'Remove ui config (array filters are for backend-only filtering)'
395
+ });
396
+ }
397
+ }
398
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/generators/rpc/validator.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -84,7 +84,15 @@ export { defaultAffiliateFeatureConfig } from './shared/affiliate/affiliateFeatu
84
84
  export { addAffiliateAdminRoutes, addAffiliateUserRoutes, addAffiliatePublicRoutes } from './shared/affiliate/routes.js';
85
85
  export type { AffiliateConfig, AffiliateTierConfig, AffiliateAttribution, AffiliateOrder, Affiliate, AffiliateCommission, AffiliateClick, AffiliatePayment, AffiliateTierHistory, AffiliateFilters, AffiliateDashboard, AffiliateDashboardStats, AffiliateDashboardCommission, AffiliateTierProgress } from './shared/affiliate/types.js';
86
86
  export { addPublicAuthRoutes } from './shared/auth/routes.js';
87
- export type { PublicAuthRoutesConfig, OnNewUserResult, OAuthProvider, InviteConfig, UserProfileOrg } from './shared/auth/types.js';
87
+ export type { PublicAuthRoutesConfig, OnNewUserResult, OAuthProvider, InviteConfig, MagicLinkConfig, UserProfileOrg } from './shared/auth/types.js';
88
+ export { generateRLS, generateRLSBatch } from './generators/rls-generator.js';
89
+ export type { RLSConfig, RLSTableType, RLSGeneratorResult } from './generators/rls-generator.js';
90
+ export { getAuditChecks, generateAuditSQL } from './generators/rls-auditor.js';
91
+ export type { AuditCheck } from './generators/rls-auditor.js';
92
+ export { runRLSCheck, runRLSCheckDebug } from './generators/rls-checker.js';
93
+ export type { RLSReport, RLSCheckResult, RLSViolation, RLSCategorySummary } from './generators/rls-checker.js';
94
+ export { RPCGenerator, DetailRPCGenerator, validateConfig as validateRPCConfig, generateAuthCheck, generateAuthWhereClause, generateAuthDeclarations, generateTimestamp, getTableAlias, escapeIdentifier } from './generators/rpc/index.js';
95
+ export type { GeneratedSQL, FilterDefinition, RPCGeneratorOptions, DetailRPCGeneratorOptions, ValidationResult as RPCValidationResult, ValidationError as RPCValidationError, AccessLevel, CreatorVisibilityConfig as RPCCreatorVisibilityConfig } from './generators/rpc/index.js';
88
96
  export { createApp } from './core/createApp.js';
89
97
  export type { CreateAppConfig } from './core/createApp.js';
90
98
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,uBAAuB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAClY,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACjF,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACjG,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC/J,YAAY,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAG9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAG9F,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAC3G,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACvG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,YAAY,EAAE,iBAAiB,IAAI,UAAU,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AACnH,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,wBAAwB,EAAE,WAAW,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC9N,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACvH,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAChJ,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC9K,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAGjH,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AACtP,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAGjI,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AACpO,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACtJ,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACpH,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzF,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC1H,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAGpI,YAAY,EAAE,oBAAoB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAOjL,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACzH,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,cAAc,EAAE,SAAS,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAG1U,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGnI,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -81,6 +81,12 @@ export { defaultAffiliateFeatureConfig } from './shared/affiliate/affiliateFeatu
81
81
  export { addAffiliateAdminRoutes, addAffiliateUserRoutes, addAffiliatePublicRoutes } from './shared/affiliate/routes.js';
82
82
  // ─── Public Auth Routes ─────────────────────────────────────
83
83
  export { addPublicAuthRoutes } from './shared/auth/routes.js';
84
+ // ─── Generators ──────────────────────────────────────────────
85
+ export { generateRLS, generateRLSBatch } from './generators/rls-generator.js';
86
+ export { getAuditChecks, generateAuditSQL } from './generators/rls-auditor.js';
87
+ export { runRLSCheck, runRLSCheckDebug } from './generators/rls-checker.js';
88
+ // RPC Generator (SQL Generator v3.17)
89
+ export { RPCGenerator, DetailRPCGenerator, validateConfig as validateRPCConfig, generateAuthCheck, generateAuthWhereClause, generateAuthDeclarations, generateTimestamp, getTableAlias, escapeIdentifier } from './generators/rpc/index.js';
84
90
  // ─── App Bootstrap ──────────────────────────────────────────
85
91
  export { createApp } from './core/createApp.js';
86
92
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export { addPublicAuthRoutes } from './routes.js';
2
- export type { PublicAuthRoutesConfig, OnNewUserResult, OAuthProvider, InviteConfig, UserProfileOrg } from './types.js';
2
+ export type { PublicAuthRoutesConfig, OnNewUserResult, OAuthProvider, InviteConfig, MagicLinkConfig, UserProfileOrg } from './types.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Standardized authentication routes for all Tetra projects.
5
5
  * Handles: login, signup, OAuth, token refresh, session, /me, register,
6
- * logout, and optionally invites.
6
+ * logout, and optionally magic link and invites.
7
7
  *
8
8
  * Usage:
9
9
  * ```typescript
@@ -39,6 +39,9 @@ import type { PublicAuthRoutesConfig } from './types.js';
39
39
  * Routes created (enableMe, default true):
40
40
  * - GET /me — Full user profile + organizations + role
41
41
  *
42
+ * Routes created (enableMagicLink):
43
+ * - POST /magic-link — Send passwordless login email
44
+ *
42
45
  * Routes created (enableInvites):
43
46
  * - POST /invite — Create org invite (requires auth)
44
47
  * - POST /invite/accept — Accept invite (requires auth)
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/shared/auth/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAIpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAyBzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,sBAA2B,GAClC,IAAI,CA6pBN"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/shared/auth/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAIpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAkDzD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,sBAA2B,GAClC,IAAI,CAquBN"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Standardized authentication routes for all Tetra projects.
5
5
  * Handles: login, signup, OAuth, token refresh, session, /me, register,
6
- * logout, and optionally invites.
6
+ * logout, and optionally magic link and invites.
7
7
  *
8
8
  * Usage:
9
9
  * ```typescript
@@ -42,6 +42,25 @@ function extractToken(req) {
42
42
  return null;
43
43
  return header.substring(7);
44
44
  }
45
+ // ─── Auto-provision helper ───────────────────────────────────
46
+ async function autoProvisionIfNeeded(user, supabase, onNewUser) {
47
+ if (!onNewUser)
48
+ return;
49
+ const { data: existing } = await supabase
50
+ .from('users_public')
51
+ .select('id')
52
+ .eq('id', user.id)
53
+ .maybeSingle();
54
+ if (existing)
55
+ return;
56
+ const result = await onNewUser(user, supabase);
57
+ if (result) {
58
+ logger.info({ userId: user.id, email: user.email, organizationId: result.organizationId }, 'Auto-provisioned new user');
59
+ }
60
+ else {
61
+ logger.warn({ userId: user.id, email: user.email }, 'onNewUser returned null during auto-provision');
62
+ }
63
+ }
45
64
  // ─── Route Factory ───────────────────────────────────────────
46
65
  /**
47
66
  * Add standard public authentication routes to a router.
@@ -59,6 +78,9 @@ function extractToken(req) {
59
78
  * Routes created (enableMe, default true):
60
79
  * - GET /me — Full user profile + organizations + role
61
80
  *
81
+ * Routes created (enableMagicLink):
82
+ * - POST /magic-link — Send passwordless login email
83
+ *
62
84
  * Routes created (enableInvites):
63
85
  * - POST /invite — Create org invite (requires auth)
64
86
  * - POST /invite/accept — Accept invite (requires auth)
@@ -137,6 +159,8 @@ export function addPublicAuthRoutes(router, config = {}) {
137
159
  });
138
160
  return;
139
161
  }
162
+ // Auto-provision users_public + org if onNewUser is configured
163
+ await autoProvisionIfNeeded(data.user, supabase, config.onNewUser);
140
164
  logger.info({ email, userId: data.user.id }, 'Signup successful');
141
165
  res.status(201).json({
142
166
  success: true,
@@ -312,6 +336,8 @@ export function addPublicAuthRoutes(router, config = {}) {
312
336
  RFC7807ErrorResponse.unauthorized(res, 'Failed to exchange authorization code');
313
337
  return;
314
338
  }
339
+ // Auto-provision users_public + org for new OAuth users
340
+ await autoProvisionIfNeeded(data.user, supabase, config.onNewUser);
315
341
  logger.info({ email: data.user.email, userId: data.user.id }, 'OAuth login successful');
316
342
  res.json({
317
343
  success: true,
@@ -403,6 +429,62 @@ export function addPublicAuthRoutes(router, config = {}) {
403
429
  res.json({ success: true });
404
430
  }
405
431
  });
432
+ // ── POST /magic-link (optional) ─────────────────────────────
433
+ if (config.enableMagicLink) {
434
+ const mlConfig = config.magicLinkConfig || {};
435
+ const mlRedirectPath = mlConfig.redirectPath || callbackPath;
436
+ router.post('/magic-link', async (req, res) => {
437
+ const { email } = req.body;
438
+ if (!email) {
439
+ RFC7807ErrorResponse.badRequest(res, 'Email is required');
440
+ return;
441
+ }
442
+ // Basic email validation
443
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
444
+ RFC7807ErrorResponse.badRequest(res, 'Invalid email format');
445
+ return;
446
+ }
447
+ try {
448
+ const supabase = getSystemDB();
449
+ const redirectTo = `${frontendUrl}${mlRedirectPath}`;
450
+ if (mlConfig.sendEmail) {
451
+ // Custom email sender: generate link via admin API (does NOT send email)
452
+ const { data: linkData, error: linkError } = await supabase.auth.admin.generateLink({
453
+ type: 'magiclink',
454
+ email,
455
+ options: { redirectTo },
456
+ });
457
+ if (linkError || !linkData.properties?.action_link) {
458
+ logger.error({ error: linkError?.message, email }, 'Magic link generation failed');
459
+ RFC7807ErrorResponse.internalError(res, 'Failed to generate magic link');
460
+ return;
461
+ }
462
+ await mlConfig.sendEmail(email, linkData.properties.action_link, supabase);
463
+ }
464
+ else {
465
+ // Default: let Supabase send the email
466
+ const { error } = await supabase.auth.signInWithOtp({
467
+ email,
468
+ options: { emailRedirectTo: redirectTo },
469
+ });
470
+ if (error) {
471
+ logger.error({ error: error.message, email }, 'Magic link send failed');
472
+ RFC7807ErrorResponse.internalError(res, 'Failed to send magic link');
473
+ return;
474
+ }
475
+ }
476
+ logger.info({ email }, 'Magic link sent');
477
+ res.json({
478
+ success: true,
479
+ data: { message: 'Check your email for the login link.' },
480
+ });
481
+ }
482
+ catch (err) {
483
+ logger.error({ err }, 'Magic link error');
484
+ RFC7807ErrorResponse.internalError(res, 'Internal server error');
485
+ }
486
+ });
487
+ }
406
488
  // ── Invite Routes (optional) ──────────────────────────────
407
489
  if (config.enableInvites) {
408
490
  const invCfg = config.inviteConfig || {};