@getstrata/core 1.1.8 → 2.0.0

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 (49) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/core/database/transaction.d.ts +2 -1
  3. package/dist/core/database/transactionControl.d.ts +5 -0
  4. package/dist/core/events/deferredModelEvents.d.ts +3 -0
  5. package/dist/core/events/index.d.ts +1 -0
  6. package/dist/core/http/loginThrottleMiddleware.d.ts +3 -0
  7. package/dist/core/http/metricsMiddleware.d.ts +1 -2
  8. package/dist/core/http/requestMetaContext.d.ts +2 -0
  9. package/dist/core/http/throttleMiddleware.d.ts +11 -2
  10. package/dist/core/metrics/prometheus.d.ts +11 -1
  11. package/dist/core/queue/jobRunner.d.ts +3 -1
  12. package/dist/core/queue/redisQueue.d.ts +20 -3
  13. package/dist/core/tenant/databaseTenantContext.d.ts +5 -1
  14. package/dist/entries/audit/exportAuditLogs.js +751 -97
  15. package/dist/entries/auth/accessControl.js +16 -2
  16. package/dist/entries/auth/basicAuthGuard.js +271 -224
  17. package/dist/entries/auth/membershipMiddleware.js +17 -0
  18. package/dist/entries/auth/membershipScope.js +21 -6
  19. package/dist/entries/auth/membershipService.js +20 -5
  20. package/dist/entries/auth/oauth/samlProvider.js +187 -142
  21. package/dist/entries/auth/oneTimeToken.js +142 -123
  22. package/dist/entries/auth/passwordLogin.js +212 -191
  23. package/dist/entries/auth/policy.js +16 -2
  24. package/dist/entries/auth/saml/samlServiceProvider.js +187 -142
  25. package/dist/entries/auth/scimAuthMiddleware.js +732 -64
  26. package/dist/entries/database/migrations.js +144 -125
  27. package/dist/entries/database/schema.js +58 -39
  28. package/dist/entries/http/csrfMiddleware.js +28 -14
  29. package/dist/entries/http/csrfToken.js +28 -14
  30. package/dist/entries/http/flashMiddleware.js +28 -14
  31. package/dist/entries/http/metricsMiddleware.js +124 -27
  32. package/dist/entries/http/response.js +107 -0
  33. package/dist/entries/http/routeMiddleware.js +40 -0
  34. package/dist/entries/http/throttleMiddleware.js +124 -11
  35. package/dist/entries/jobs/exportAuditLogsJob.js +751 -97
  36. package/dist/entries/metrics/prometheus.js +71 -11
  37. package/dist/entries/queue/createAppQueue.js +215 -21
  38. package/dist/entries/queue/jobRunner.js +3 -2
  39. package/dist/entries/queue/publicQueue.js +215 -21
  40. package/dist/entries/queue/queueMetrics.js +215 -21
  41. package/dist/entries/queue/redisQueue.js +223 -22
  42. package/dist/entries/runtime/asyncContextStore.js +16 -0
  43. package/dist/entries/tenant/databaseTenantContext.js +666 -11
  44. package/dist/entries/tenant/tenancyConfig.js +19 -1
  45. package/dist/entries/tenant/tenantDatabaseScope.js +688 -18
  46. package/dist/entries/tracing/tracingMiddleware.js +28 -14
  47. package/dist/framework/public-api.d.ts +3 -3
  48. package/dist/index.js +1344 -651
  49. package/package.json +1 -1
@@ -1,6 +1,15 @@
1
1
  // @bun
2
- // ../../src/core/auth/accessControl.ts
3
- import { ForbiddenError } from "@getstrata/core/errors/http";
2
+ var __esm = (fn, res, err) => () => {
3
+ if (fn)
4
+ try {
5
+ res = fn(fn = 0);
6
+ } catch (e) {
7
+ err = [e];
8
+ }
9
+ if (err)
10
+ throw err[0];
11
+ return res;
12
+ };
4
13
 
5
14
  // ../../src/core/runtime/asyncContextStore.ts
6
15
  import { AsyncLocalStorage } from "async_hooks";
@@ -15,8 +24,13 @@ function createAsyncContextStore(key) {
15
24
  globalRecord[symbol] = store;
16
25
  return store;
17
26
  }
27
+ var init_asyncContextStore = () => {};
28
+
29
+ // ../../src/core/auth/accessControl.ts
30
+ import { ForbiddenError } from "@getstrata/core/errors/http";
18
31
 
19
32
  // ../../src/core/auth/authContext.ts
33
+ init_asyncContextStore();
20
34
  var authContext = createAsyncContextStore("@getstrata/authContext");
21
35
  var credentialSourceContext = createAsyncContextStore("@getstrata/credentialSource");
22
36
  function currentAuthUser() {
@@ -1,51 +1,17 @@
1
1
  // @bun
2
- // ../../src/core/contracts/serviceTokens.ts
3
- var CORE_CONFIG_TOKEN = "core.config";
4
- var CORE_CACHE_TOKEN = "core.cache";
5
- var CORE_QUEUE_TOKEN = "core.queue";
6
- var CORE_EVENT_BUS_TOKEN = "core.eventBus";
7
- var CORE_POLICY_GATE_TOKEN = "core.policyGate";
8
- var CORE_AUTH_TOKEN = "core.auth";
9
- var CORE_TOKEN_SERVICE_TOKEN = "core.tokenService";
10
- var CORE_ABILITY_CHECKER_TOKEN = "core.abilityChecker";
11
- var CORE_AUTH_USER_DIRECTORY_TOKEN = "core.authUserDirectory";
12
- function isAbilityChecker(value) {
13
- if (!value || typeof value !== "object") {
14
- return false;
15
- }
16
- const candidate = value;
17
- return typeof candidate.tokenCan === "function" && typeof candidate.requireAbility === "function";
18
- }
19
- function isAuthUserDirectory(value) {
20
- if (!value || typeof value !== "object") {
21
- return false;
22
- }
23
- return typeof value.findByIdOrThrow === "function";
24
- }
25
- function resolveAbilityChecker(container) {
26
- if (container.has(CORE_ABILITY_CHECKER_TOKEN)) {
27
- return container.resolve(CORE_ABILITY_CHECKER_TOKEN);
28
- }
29
- return container.resolve(CORE_TOKEN_SERVICE_TOKEN);
30
- }
31
- function resolveAuthUserDirectory(container) {
32
- if (container.has(CORE_AUTH_USER_DIRECTORY_TOKEN)) {
33
- const directory = container.resolve(CORE_AUTH_USER_DIRECTORY_TOKEN);
34
- if (isAuthUserDirectory(directory)) {
35
- return directory;
36
- }
37
- }
38
- if (container.has(CORE_TOKEN_SERVICE_TOKEN)) {
39
- const tokenService = container.resolve(CORE_TOKEN_SERVICE_TOKEN);
40
- if (isAuthUserDirectory(tokenService)) {
41
- return tokenService;
2
+ var __esm = (fn, res, err) => () => {
3
+ if (fn)
4
+ try {
5
+ res = fn(fn = 0);
6
+ } catch (e) {
7
+ err = [e];
42
8
  }
43
- }
44
- return null;
45
- }
9
+ if (err)
10
+ throw err[0];
11
+ return res;
12
+ };
46
13
 
47
14
  // ../../src/core/database/boundConnection.ts
48
- var BOUND_CONNECTION_KEY = Symbol.for("@getstrata/boundDatabaseConnection");
49
15
  function boundConnectionState() {
50
16
  const globalRecord = globalThis;
51
17
  const existing = globalRecord[BOUND_CONNECTION_KEY];
@@ -59,6 +25,10 @@ function boundConnectionState() {
59
25
  function getBoundDatabaseConnection() {
60
26
  return boundConnectionState().connection;
61
27
  }
28
+ var BOUND_CONNECTION_KEY;
29
+ var init_boundConnection = __esm(() => {
30
+ BOUND_CONNECTION_KEY = Symbol.for("@getstrata/boundDatabaseConnection");
31
+ });
62
32
 
63
33
  // ../../src/core/runtime/asyncContextStore.ts
64
34
  import { AsyncLocalStorage } from "async_hooks";
@@ -73,9 +43,9 @@ function createAsyncContextStore(key) {
73
43
  globalRecord[symbol] = store;
74
44
  return store;
75
45
  }
46
+ var init_asyncContextStore = () => {};
76
47
 
77
48
  // ../../src/core/database/connectionContext.ts
78
- var activeConnection = createAsyncContextStore("@getstrata/databaseConnectionContext");
79
49
  function runWithDatabaseConnection(connection, callback) {
80
50
  return activeConnection.run(connection, callback);
81
51
  }
@@ -85,12 +55,20 @@ function getActiveDatabaseConnection(fallback) {
85
55
  function hasActiveDatabaseConnection() {
86
56
  return activeConnection.getStore() !== undefined;
87
57
  }
58
+ var activeConnection;
59
+ var init_connectionContext = __esm(() => {
60
+ init_asyncContextStore();
61
+ activeConnection = createAsyncContextStore("@getstrata/databaseConnectionContext");
62
+ });
88
63
 
89
64
  // ../../src/core/database/queryProxy.ts
90
- var POOL_CONNECTION_METHODS = new Set(["begin", "close", "connect"]);
65
+ var POOL_CONNECTION_METHODS;
66
+ var init_queryProxy = __esm(() => {
67
+ init_connectionContext();
68
+ POOL_CONNECTION_METHODS = new Set(["begin", "close", "connect"]);
69
+ });
91
70
 
92
71
  // ../../src/core/database/defaultConnection.ts
93
- var DEFAULT_CONNECTION_KEY = Symbol.for("@getstrata/defaultDatabaseConnection");
94
72
  function defaultConnectionState() {
95
73
  const globalRecord = globalThis;
96
74
  const existing = globalRecord[DEFAULT_CONNECTION_KEY];
@@ -108,6 +86,250 @@ function getDefaultDatabasePool() {
108
86
  }
109
87
  return pool;
110
88
  }
89
+ function getDefaultDatabaseQuery() {
90
+ const query = defaultConnectionState().query;
91
+ if (!query) {
92
+ throw new Error("Default database query handle is not registered. Call registerDefaultDatabasePool() during app bootstrap.");
93
+ }
94
+ return query;
95
+ }
96
+ var DEFAULT_CONNECTION_KEY;
97
+ var init_defaultConnection = __esm(() => {
98
+ init_queryProxy();
99
+ DEFAULT_CONNECTION_KEY = Symbol.for("@getstrata/defaultDatabaseConnection");
100
+ });
101
+
102
+ // ../../src/core/database/schema/driver.ts
103
+ function normalizeConnectionName(connection) {
104
+ const normalized = connection.trim().toLowerCase();
105
+ if (normalized === "pgsql" || normalized === "postgres" || normalized === "postgresql") {
106
+ return "pgsql";
107
+ }
108
+ if (normalized === "mysql" || normalized === "mariadb") {
109
+ return "mysql";
110
+ }
111
+ if (normalized === "sqlite") {
112
+ return "sqlite";
113
+ }
114
+ throw new Error(`Unsupported DB_CONNECTION: ${connection}`);
115
+ }
116
+ function resolveDriverFromUrl(url) {
117
+ const normalized = url.trim().toLowerCase();
118
+ if (normalized.startsWith("postgres://") || normalized.startsWith("postgresql://") || normalized.startsWith("postgres:")) {
119
+ return "pgsql";
120
+ }
121
+ if (normalized.startsWith("mysql://") || normalized.startsWith("mysql:")) {
122
+ return "mysql";
123
+ }
124
+ if (normalized.startsWith("sqlite:")) {
125
+ return "sqlite";
126
+ }
127
+ return null;
128
+ }
129
+ function resolveDatabaseDriver(options = {}) {
130
+ const connection = options.connection ?? process.env.DB_CONNECTION;
131
+ if (connection) {
132
+ return normalizeConnectionName(connection);
133
+ }
134
+ const url = options.url ?? process.env.DATABASE_URL ?? "";
135
+ const fromUrl = resolveDriverFromUrl(url);
136
+ if (fromUrl) {
137
+ return fromUrl;
138
+ }
139
+ return "pgsql";
140
+ }
141
+ var init_driver = () => {};
142
+
143
+ // ../../src/core/database/dialect.ts
144
+ function assertSafeIdentifier(identifier) {
145
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(identifier)) {
146
+ throw new Error(`Invalid SQL identifier: ${identifier}`);
147
+ }
148
+ return identifier;
149
+ }
150
+ function quoteIdentifierFor(dialect, column) {
151
+ return dialect.quoteIdentifier(column);
152
+ }
153
+ function dialectFor(driver) {
154
+ return dialects[driver];
155
+ }
156
+ function currentSqlDialect() {
157
+ return dialectContext.getStore() ?? dialectOverride ?? dialectFor(resolveDatabaseDriver());
158
+ }
159
+ var postgresDialect, mysqlDialect, sqliteDialect, dialects, dialectContext, dialectOverride = null;
160
+ var init_dialect = __esm(() => {
161
+ init_asyncContextStore();
162
+ init_driver();
163
+ postgresDialect = {
164
+ driver: "pgsql",
165
+ placeholder(index) {
166
+ return `$${index}`;
167
+ },
168
+ quoteIdentifier(identifier) {
169
+ return `"${assertSafeIdentifier(identifier)}"`;
170
+ },
171
+ nowExpression() {
172
+ return "NOW()";
173
+ },
174
+ timestampValue(value) {
175
+ return value.toISOString();
176
+ },
177
+ returningClause(columns) {
178
+ return ` RETURNING ${columns}`;
179
+ },
180
+ ilikeOperator() {
181
+ return "ILIKE";
182
+ },
183
+ nullsLastSuffix() {
184
+ return " NULLS LAST";
185
+ },
186
+ castToText(expression) {
187
+ return `${expression}::text`;
188
+ },
189
+ upsertSuffix(conflictColumns, updateColumns) {
190
+ const target = conflictColumns.map((column) => quoteIdentifierFor(this, column)).join(", ");
191
+ if (updateColumns.length === 0) {
192
+ return ` ON CONFLICT (${target}) DO NOTHING`;
193
+ }
194
+ const assignments = updateColumns.map((column) => {
195
+ const quoted = quoteIdentifierFor(this, column);
196
+ return `${quoted} = excluded.${quoted}`;
197
+ }).join(", ");
198
+ return ` ON CONFLICT (${target}) DO UPDATE SET ${assignments}`;
199
+ }
200
+ };
201
+ mysqlDialect = {
202
+ driver: "mysql",
203
+ placeholder() {
204
+ return "?";
205
+ },
206
+ quoteIdentifier(identifier) {
207
+ return `\`${assertSafeIdentifier(identifier)}\``;
208
+ },
209
+ nowExpression() {
210
+ return "CURRENT_TIMESTAMP";
211
+ },
212
+ timestampValue(value) {
213
+ return value.toISOString().slice(0, 19).replace("T", " ");
214
+ },
215
+ returningClause() {
216
+ return "";
217
+ },
218
+ ilikeOperator() {
219
+ return "LIKE";
220
+ },
221
+ nullsLastSuffix() {
222
+ return "";
223
+ },
224
+ castToText(expression) {
225
+ return `CAST(${expression} AS CHAR)`;
226
+ },
227
+ upsertSuffix(conflictColumns, updateColumns) {
228
+ if (updateColumns.length === 0) {
229
+ const anchor = quoteIdentifierFor(this, conflictColumns[0] ?? "");
230
+ return ` ON DUPLICATE KEY UPDATE ${anchor} = ${anchor}`;
231
+ }
232
+ const assignments = updateColumns.map((column) => {
233
+ const quoted = quoteIdentifierFor(this, column);
234
+ return `${quoted} = VALUES(${quoted})`;
235
+ }).join(", ");
236
+ return ` ON DUPLICATE KEY UPDATE ${assignments}`;
237
+ }
238
+ };
239
+ sqliteDialect = {
240
+ driver: "sqlite",
241
+ placeholder() {
242
+ return "?";
243
+ },
244
+ quoteIdentifier(identifier) {
245
+ return `"${assertSafeIdentifier(identifier)}"`;
246
+ },
247
+ nowExpression() {
248
+ return "strftime('%Y-%m-%dT%H:%M:%fZ', 'now')";
249
+ },
250
+ timestampValue(value) {
251
+ return value.toISOString();
252
+ },
253
+ returningClause(columns) {
254
+ return ` RETURNING ${columns}`;
255
+ },
256
+ ilikeOperator() {
257
+ return "LIKE";
258
+ },
259
+ nullsLastSuffix() {
260
+ return "";
261
+ },
262
+ castToText(expression) {
263
+ return `CAST(${expression} AS TEXT)`;
264
+ },
265
+ upsertSuffix(conflictColumns, updateColumns) {
266
+ const target = conflictColumns.map((column) => quoteIdentifierFor(this, column)).join(", ");
267
+ if (updateColumns.length === 0) {
268
+ return ` ON CONFLICT (${target}) DO NOTHING`;
269
+ }
270
+ const assignments = updateColumns.map((column) => {
271
+ const quoted = quoteIdentifierFor(this, column);
272
+ return `${quoted} = excluded.${quoted}`;
273
+ }).join(", ");
274
+ return ` ON CONFLICT (${target}) DO UPDATE SET ${assignments}`;
275
+ }
276
+ };
277
+ dialects = {
278
+ pgsql: postgresDialect,
279
+ mysql: mysqlDialect,
280
+ sqlite: sqliteDialect
281
+ };
282
+ dialectContext = createAsyncContextStore("@getstrata/sqlDialect");
283
+ });
284
+
285
+ // ../../src/core/contracts/serviceTokens.ts
286
+ var CORE_CONFIG_TOKEN = "core.config";
287
+ var CORE_CACHE_TOKEN = "core.cache";
288
+ var CORE_QUEUE_TOKEN = "core.queue";
289
+ var CORE_EVENT_BUS_TOKEN = "core.eventBus";
290
+ var CORE_POLICY_GATE_TOKEN = "core.policyGate";
291
+ var CORE_AUTH_TOKEN = "core.auth";
292
+ var CORE_TOKEN_SERVICE_TOKEN = "core.tokenService";
293
+ var CORE_ABILITY_CHECKER_TOKEN = "core.abilityChecker";
294
+ var CORE_AUTH_USER_DIRECTORY_TOKEN = "core.authUserDirectory";
295
+ function isAbilityChecker(value) {
296
+ if (!value || typeof value !== "object") {
297
+ return false;
298
+ }
299
+ const candidate = value;
300
+ return typeof candidate.tokenCan === "function" && typeof candidate.requireAbility === "function";
301
+ }
302
+ function isAuthUserDirectory(value) {
303
+ if (!value || typeof value !== "object") {
304
+ return false;
305
+ }
306
+ return typeof value.findByIdOrThrow === "function";
307
+ }
308
+ function resolveAbilityChecker(container) {
309
+ if (container.has(CORE_ABILITY_CHECKER_TOKEN)) {
310
+ return container.resolve(CORE_ABILITY_CHECKER_TOKEN);
311
+ }
312
+ return container.resolve(CORE_TOKEN_SERVICE_TOKEN);
313
+ }
314
+ function resolveAuthUserDirectory(container) {
315
+ if (container.has(CORE_AUTH_USER_DIRECTORY_TOKEN)) {
316
+ const directory = container.resolve(CORE_AUTH_USER_DIRECTORY_TOKEN);
317
+ if (isAuthUserDirectory(directory)) {
318
+ return directory;
319
+ }
320
+ }
321
+ if (container.has(CORE_TOKEN_SERVICE_TOKEN)) {
322
+ const tokenService = container.resolve(CORE_TOKEN_SERVICE_TOKEN);
323
+ if (isAuthUserDirectory(tokenService)) {
324
+ return tokenService;
325
+ }
326
+ }
327
+ return null;
328
+ }
329
+
330
+ // ../../src/core/auth/basicAuthGuard.ts
331
+ init_boundConnection();
332
+ init_defaultConnection();
111
333
 
112
334
  // ../../src/core/http/statelessAuth.ts
113
335
  function authorizationScheme(request) {
@@ -289,183 +511,8 @@ function revealMfaSecret(stored) {
289
511
  return decryptField(stored, key);
290
512
  }
291
513
 
292
- // ../../src/core/database/schema/driver.ts
293
- function normalizeConnectionName(connection) {
294
- const normalized = connection.trim().toLowerCase();
295
- if (normalized === "pgsql" || normalized === "postgres" || normalized === "postgresql") {
296
- return "pgsql";
297
- }
298
- if (normalized === "mysql" || normalized === "mariadb") {
299
- return "mysql";
300
- }
301
- if (normalized === "sqlite") {
302
- return "sqlite";
303
- }
304
- throw new Error(`Unsupported DB_CONNECTION: ${connection}`);
305
- }
306
- function resolveDriverFromUrl(url) {
307
- const normalized = url.trim().toLowerCase();
308
- if (normalized.startsWith("postgres://") || normalized.startsWith("postgresql://") || normalized.startsWith("postgres:")) {
309
- return "pgsql";
310
- }
311
- if (normalized.startsWith("mysql://") || normalized.startsWith("mysql:")) {
312
- return "mysql";
313
- }
314
- if (normalized.startsWith("sqlite:")) {
315
- return "sqlite";
316
- }
317
- return null;
318
- }
319
- function resolveDatabaseDriver(options = {}) {
320
- const connection = options.connection ?? process.env.DB_CONNECTION;
321
- if (connection) {
322
- return normalizeConnectionName(connection);
323
- }
324
- const url = options.url ?? process.env.DATABASE_URL ?? "";
325
- const fromUrl = resolveDriverFromUrl(url);
326
- if (fromUrl) {
327
- return fromUrl;
328
- }
329
- return "pgsql";
330
- }
331
-
332
- // ../../src/core/database/dialect.ts
333
- function assertSafeIdentifier(identifier) {
334
- if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(identifier)) {
335
- throw new Error(`Invalid SQL identifier: ${identifier}`);
336
- }
337
- return identifier;
338
- }
339
- function quoteIdentifierFor(dialect, column) {
340
- return dialect.quoteIdentifier(column);
341
- }
342
- var postgresDialect = {
343
- driver: "pgsql",
344
- placeholder(index) {
345
- return `$${index}`;
346
- },
347
- quoteIdentifier(identifier) {
348
- return `"${assertSafeIdentifier(identifier)}"`;
349
- },
350
- nowExpression() {
351
- return "NOW()";
352
- },
353
- timestampValue(value) {
354
- return value.toISOString();
355
- },
356
- returningClause(columns) {
357
- return ` RETURNING ${columns}`;
358
- },
359
- ilikeOperator() {
360
- return "ILIKE";
361
- },
362
- nullsLastSuffix() {
363
- return " NULLS LAST";
364
- },
365
- castToText(expression) {
366
- return `${expression}::text`;
367
- },
368
- upsertSuffix(conflictColumns, updateColumns) {
369
- const target = conflictColumns.map((column) => quoteIdentifierFor(this, column)).join(", ");
370
- if (updateColumns.length === 0) {
371
- return ` ON CONFLICT (${target}) DO NOTHING`;
372
- }
373
- const assignments = updateColumns.map((column) => {
374
- const quoted = quoteIdentifierFor(this, column);
375
- return `${quoted} = excluded.${quoted}`;
376
- }).join(", ");
377
- return ` ON CONFLICT (${target}) DO UPDATE SET ${assignments}`;
378
- }
379
- };
380
- var mysqlDialect = {
381
- driver: "mysql",
382
- placeholder() {
383
- return "?";
384
- },
385
- quoteIdentifier(identifier) {
386
- return `\`${assertSafeIdentifier(identifier)}\``;
387
- },
388
- nowExpression() {
389
- return "CURRENT_TIMESTAMP";
390
- },
391
- timestampValue(value) {
392
- return value.toISOString().slice(0, 19).replace("T", " ");
393
- },
394
- returningClause() {
395
- return "";
396
- },
397
- ilikeOperator() {
398
- return "LIKE";
399
- },
400
- nullsLastSuffix() {
401
- return "";
402
- },
403
- castToText(expression) {
404
- return `CAST(${expression} AS CHAR)`;
405
- },
406
- upsertSuffix(conflictColumns, updateColumns) {
407
- if (updateColumns.length === 0) {
408
- const anchor = quoteIdentifierFor(this, conflictColumns[0] ?? "");
409
- return ` ON DUPLICATE KEY UPDATE ${anchor} = ${anchor}`;
410
- }
411
- const assignments = updateColumns.map((column) => {
412
- const quoted = quoteIdentifierFor(this, column);
413
- return `${quoted} = VALUES(${quoted})`;
414
- }).join(", ");
415
- return ` ON DUPLICATE KEY UPDATE ${assignments}`;
416
- }
417
- };
418
- var sqliteDialect = {
419
- driver: "sqlite",
420
- placeholder() {
421
- return "?";
422
- },
423
- quoteIdentifier(identifier) {
424
- return `"${assertSafeIdentifier(identifier)}"`;
425
- },
426
- nowExpression() {
427
- return "strftime('%Y-%m-%dT%H:%M:%fZ', 'now')";
428
- },
429
- timestampValue(value) {
430
- return value.toISOString();
431
- },
432
- returningClause(columns) {
433
- return ` RETURNING ${columns}`;
434
- },
435
- ilikeOperator() {
436
- return "LIKE";
437
- },
438
- nullsLastSuffix() {
439
- return "";
440
- },
441
- castToText(expression) {
442
- return `CAST(${expression} AS TEXT)`;
443
- },
444
- upsertSuffix(conflictColumns, updateColumns) {
445
- const target = conflictColumns.map((column) => quoteIdentifierFor(this, column)).join(", ");
446
- if (updateColumns.length === 0) {
447
- return ` ON CONFLICT (${target}) DO NOTHING`;
448
- }
449
- const assignments = updateColumns.map((column) => {
450
- const quoted = quoteIdentifierFor(this, column);
451
- return `${quoted} = excluded.${quoted}`;
452
- }).join(", ");
453
- return ` ON CONFLICT (${target}) DO UPDATE SET ${assignments}`;
454
- }
455
- };
456
- var dialects = {
457
- pgsql: postgresDialect,
458
- mysql: mysqlDialect,
459
- sqlite: sqliteDialect
460
- };
461
- var dialectContext = createAsyncContextStore("@getstrata/sqlDialect");
462
- var dialectOverride = null;
463
- function dialectFor(driver) {
464
- return dialects[driver];
465
- }
466
- function currentSqlDialect() {
467
- return dialectContext.getStore() ?? dialectOverride ?? dialectFor(resolveDatabaseDriver());
468
- }
514
+ // ../../src/core/auth/passwordLogin.ts
515
+ init_dialect();
469
516
 
470
517
  // ../../src/core/security/recoveryCodes.ts
471
518
  import { randomBytes as randomBytes2 } from "crypto";
@@ -1,4 +1,16 @@
1
1
  // @bun
2
+ var __esm = (fn, res, err) => () => {
3
+ if (fn)
4
+ try {
5
+ res = fn(fn = 0);
6
+ } catch (e) {
7
+ err = [e];
8
+ }
9
+ if (err)
10
+ throw err[0];
11
+ return res;
12
+ };
13
+
2
14
  // ../../src/core/runtime/asyncContextStore.ts
3
15
  import { AsyncLocalStorage } from "async_hooks";
4
16
  function createAsyncContextStore(key) {
@@ -12,11 +24,16 @@ function createAsyncContextStore(key) {
12
24
  globalRecord[symbol] = store;
13
25
  return store;
14
26
  }
27
+ var init_asyncContextStore = () => {};
28
+
29
+ // ../../src/core/auth/membershipContext.ts
30
+ init_asyncContextStore();
15
31
 
16
32
  // ../../src/core/auth/accessControl.ts
17
33
  import { ForbiddenError } from "@getstrata/core/errors/http";
18
34
 
19
35
  // ../../src/core/auth/authContext.ts
36
+ init_asyncContextStore();
20
37
  var authContext = createAsyncContextStore("@getstrata/authContext");
21
38
  var credentialSourceContext = createAsyncContextStore("@getstrata/credentialSource");
22
39
  function currentAuthUser() {
@@ -1,10 +1,15 @@
1
1
  // @bun
2
- // ../../src/core/auth/membershipScope.ts
3
- import { NotFoundError } from "@getstrata/core/errors/http";
4
- import { currentTenantId } from "@getstrata/core/tenant/tenantContext";
5
-
6
- // ../../src/core/auth/accessControl.ts
7
- import { ForbiddenError } from "@getstrata/core/errors/http";
2
+ var __esm = (fn, res, err) => () => {
3
+ if (fn)
4
+ try {
5
+ res = fn(fn = 0);
6
+ } catch (e) {
7
+ err = [e];
8
+ }
9
+ if (err)
10
+ throw err[0];
11
+ return res;
12
+ };
8
13
 
9
14
  // ../../src/core/runtime/asyncContextStore.ts
10
15
  import { AsyncLocalStorage } from "async_hooks";
@@ -19,8 +24,17 @@ function createAsyncContextStore(key) {
19
24
  globalRecord[symbol] = store;
20
25
  return store;
21
26
  }
27
+ var init_asyncContextStore = () => {};
28
+
29
+ // ../../src/core/auth/membershipScope.ts
30
+ import { NotFoundError } from "@getstrata/core/errors/http";
31
+ import { currentTenantId } from "@getstrata/core/tenant/tenantContext";
32
+
33
+ // ../../src/core/auth/accessControl.ts
34
+ import { ForbiddenError } from "@getstrata/core/errors/http";
22
35
 
23
36
  // ../../src/core/auth/authContext.ts
37
+ init_asyncContextStore();
24
38
  var authContext = createAsyncContextStore("@getstrata/authContext");
25
39
  var credentialSourceContext = createAsyncContextStore("@getstrata/credentialSource");
26
40
  function currentAuthUser() {
@@ -58,6 +72,7 @@ function resolveUserId(user) {
58
72
  }
59
73
 
60
74
  // ../../src/core/auth/membershipContext.ts
75
+ init_asyncContextStore();
61
76
  var membershipContext = createAsyncContextStore("@getstrata/membershipContext");
62
77
  var uninitializedMembershipLookup = {
63
78
  async listForUser() {
@@ -1,9 +1,15 @@
1
1
  // @bun
2
- // ../../src/core/auth/membershipService.ts
3
- import { ForbiddenError as ForbiddenError2 } from "@getstrata/core/errors/http";
4
-
5
- // ../../src/core/auth/accessControl.ts
6
- import { ForbiddenError } from "@getstrata/core/errors/http";
2
+ var __esm = (fn, res, err) => () => {
3
+ if (fn)
4
+ try {
5
+ res = fn(fn = 0);
6
+ } catch (e) {
7
+ err = [e];
8
+ }
9
+ if (err)
10
+ throw err[0];
11
+ return res;
12
+ };
7
13
 
8
14
  // ../../src/core/runtime/asyncContextStore.ts
9
15
  import { AsyncLocalStorage } from "async_hooks";
@@ -18,8 +24,16 @@ function createAsyncContextStore(key) {
18
24
  globalRecord[symbol] = store;
19
25
  return store;
20
26
  }
27
+ var init_asyncContextStore = () => {};
28
+
29
+ // ../../src/core/auth/membershipService.ts
30
+ import { ForbiddenError as ForbiddenError2 } from "@getstrata/core/errors/http";
31
+
32
+ // ../../src/core/auth/accessControl.ts
33
+ import { ForbiddenError } from "@getstrata/core/errors/http";
21
34
 
22
35
  // ../../src/core/auth/authContext.ts
36
+ init_asyncContextStore();
23
37
  var authContext = createAsyncContextStore("@getstrata/authContext");
24
38
  var credentialSourceContext = createAsyncContextStore("@getstrata/credentialSource");
25
39
  function currentAuthUser() {
@@ -57,6 +71,7 @@ function resolveUserId(user) {
57
71
  }
58
72
 
59
73
  // ../../src/core/auth/membershipContext.ts
74
+ init_asyncContextStore();
60
75
  var membershipContext = createAsyncContextStore("@getstrata/membershipContext");
61
76
  var uninitializedMembershipLookup = {
62
77
  async listForUser() {