@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.
- package/CHANGELOG.md +23 -0
- package/dist/core/database/transaction.d.ts +2 -1
- package/dist/core/database/transactionControl.d.ts +5 -0
- package/dist/core/events/deferredModelEvents.d.ts +3 -0
- package/dist/core/events/index.d.ts +1 -0
- package/dist/core/http/loginThrottleMiddleware.d.ts +3 -0
- package/dist/core/http/metricsMiddleware.d.ts +1 -2
- package/dist/core/http/requestMetaContext.d.ts +2 -0
- package/dist/core/http/throttleMiddleware.d.ts +11 -2
- package/dist/core/metrics/prometheus.d.ts +11 -1
- package/dist/core/queue/jobRunner.d.ts +3 -1
- package/dist/core/queue/redisQueue.d.ts +20 -3
- package/dist/core/tenant/databaseTenantContext.d.ts +5 -1
- package/dist/entries/audit/exportAuditLogs.js +751 -97
- package/dist/entries/auth/accessControl.js +16 -2
- package/dist/entries/auth/basicAuthGuard.js +271 -224
- package/dist/entries/auth/membershipMiddleware.js +17 -0
- package/dist/entries/auth/membershipScope.js +21 -6
- package/dist/entries/auth/membershipService.js +20 -5
- package/dist/entries/auth/oauth/samlProvider.js +187 -142
- package/dist/entries/auth/oneTimeToken.js +142 -123
- package/dist/entries/auth/passwordLogin.js +212 -191
- package/dist/entries/auth/policy.js +16 -2
- package/dist/entries/auth/saml/samlServiceProvider.js +187 -142
- package/dist/entries/auth/scimAuthMiddleware.js +732 -64
- package/dist/entries/database/migrations.js +144 -125
- package/dist/entries/database/schema.js +58 -39
- package/dist/entries/http/csrfMiddleware.js +28 -14
- package/dist/entries/http/csrfToken.js +28 -14
- package/dist/entries/http/flashMiddleware.js +28 -14
- package/dist/entries/http/metricsMiddleware.js +124 -27
- package/dist/entries/http/response.js +107 -0
- package/dist/entries/http/routeMiddleware.js +40 -0
- package/dist/entries/http/throttleMiddleware.js +124 -11
- package/dist/entries/jobs/exportAuditLogsJob.js +751 -97
- package/dist/entries/metrics/prometheus.js +71 -11
- package/dist/entries/queue/createAppQueue.js +215 -21
- package/dist/entries/queue/jobRunner.js +3 -2
- package/dist/entries/queue/publicQueue.js +215 -21
- package/dist/entries/queue/queueMetrics.js +215 -21
- package/dist/entries/queue/redisQueue.js +223 -22
- package/dist/entries/runtime/asyncContextStore.js +16 -0
- package/dist/entries/tenant/databaseTenantContext.js +666 -11
- package/dist/entries/tenant/tenancyConfig.js +19 -1
- package/dist/entries/tenant/tenantDatabaseScope.js +688 -18
- package/dist/entries/tracing/tracingMiddleware.js +28 -14
- package/dist/framework/public-api.d.ts +3 -3
- package/dist/index.js +1344 -651
- package/package.json +1 -1
|
@@ -1,4 +1,214 @@
|
|
|
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
|
+
|
|
14
|
+
// ../../src/core/runtime/asyncContextStore.ts
|
|
15
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
16
|
+
function createAsyncContextStore(key) {
|
|
17
|
+
const symbol = Symbol.for(key);
|
|
18
|
+
const globalRecord = globalThis;
|
|
19
|
+
const existing = globalRecord[symbol];
|
|
20
|
+
if (existing) {
|
|
21
|
+
return existing;
|
|
22
|
+
}
|
|
23
|
+
const store = new AsyncLocalStorage;
|
|
24
|
+
globalRecord[symbol] = store;
|
|
25
|
+
return store;
|
|
26
|
+
}
|
|
27
|
+
var init_asyncContextStore = () => {};
|
|
28
|
+
|
|
29
|
+
// ../../src/core/database/schema/driver.ts
|
|
30
|
+
function normalizeConnectionName(connection) {
|
|
31
|
+
const normalized = connection.trim().toLowerCase();
|
|
32
|
+
if (normalized === "pgsql" || normalized === "postgres" || normalized === "postgresql") {
|
|
33
|
+
return "pgsql";
|
|
34
|
+
}
|
|
35
|
+
if (normalized === "mysql" || normalized === "mariadb") {
|
|
36
|
+
return "mysql";
|
|
37
|
+
}
|
|
38
|
+
if (normalized === "sqlite") {
|
|
39
|
+
return "sqlite";
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`Unsupported DB_CONNECTION: ${connection}`);
|
|
42
|
+
}
|
|
43
|
+
function resolveDriverFromUrl(url) {
|
|
44
|
+
const normalized = url.trim().toLowerCase();
|
|
45
|
+
if (normalized.startsWith("postgres://") || normalized.startsWith("postgresql://") || normalized.startsWith("postgres:")) {
|
|
46
|
+
return "pgsql";
|
|
47
|
+
}
|
|
48
|
+
if (normalized.startsWith("mysql://") || normalized.startsWith("mysql:")) {
|
|
49
|
+
return "mysql";
|
|
50
|
+
}
|
|
51
|
+
if (normalized.startsWith("sqlite:")) {
|
|
52
|
+
return "sqlite";
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
function resolveDatabaseDriver(options = {}) {
|
|
57
|
+
const connection = options.connection ?? process.env.DB_CONNECTION;
|
|
58
|
+
if (connection) {
|
|
59
|
+
return normalizeConnectionName(connection);
|
|
60
|
+
}
|
|
61
|
+
const url = options.url ?? process.env.DATABASE_URL ?? "";
|
|
62
|
+
const fromUrl = resolveDriverFromUrl(url);
|
|
63
|
+
if (fromUrl) {
|
|
64
|
+
return fromUrl;
|
|
65
|
+
}
|
|
66
|
+
return "pgsql";
|
|
67
|
+
}
|
|
68
|
+
var init_driver = () => {};
|
|
69
|
+
|
|
70
|
+
// ../../src/core/database/dialect.ts
|
|
71
|
+
function assertSafeIdentifier(identifier) {
|
|
72
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(identifier)) {
|
|
73
|
+
throw new Error(`Invalid SQL identifier: ${identifier}`);
|
|
74
|
+
}
|
|
75
|
+
return identifier;
|
|
76
|
+
}
|
|
77
|
+
function quoteIdentifierFor(dialect, column) {
|
|
78
|
+
return dialect.quoteIdentifier(column);
|
|
79
|
+
}
|
|
80
|
+
function dialectFor(driver) {
|
|
81
|
+
return dialects[driver];
|
|
82
|
+
}
|
|
83
|
+
function currentSqlDialect() {
|
|
84
|
+
return dialectContext.getStore() ?? dialectOverride ?? dialectFor(resolveDatabaseDriver());
|
|
85
|
+
}
|
|
86
|
+
var postgresDialect, mysqlDialect, sqliteDialect, dialects, dialectContext, dialectOverride = null;
|
|
87
|
+
var init_dialect = __esm(() => {
|
|
88
|
+
init_asyncContextStore();
|
|
89
|
+
init_driver();
|
|
90
|
+
postgresDialect = {
|
|
91
|
+
driver: "pgsql",
|
|
92
|
+
placeholder(index) {
|
|
93
|
+
return `$${index}`;
|
|
94
|
+
},
|
|
95
|
+
quoteIdentifier(identifier) {
|
|
96
|
+
return `"${assertSafeIdentifier(identifier)}"`;
|
|
97
|
+
},
|
|
98
|
+
nowExpression() {
|
|
99
|
+
return "NOW()";
|
|
100
|
+
},
|
|
101
|
+
timestampValue(value) {
|
|
102
|
+
return value.toISOString();
|
|
103
|
+
},
|
|
104
|
+
returningClause(columns) {
|
|
105
|
+
return ` RETURNING ${columns}`;
|
|
106
|
+
},
|
|
107
|
+
ilikeOperator() {
|
|
108
|
+
return "ILIKE";
|
|
109
|
+
},
|
|
110
|
+
nullsLastSuffix() {
|
|
111
|
+
return " NULLS LAST";
|
|
112
|
+
},
|
|
113
|
+
castToText(expression) {
|
|
114
|
+
return `${expression}::text`;
|
|
115
|
+
},
|
|
116
|
+
upsertSuffix(conflictColumns, updateColumns) {
|
|
117
|
+
const target = conflictColumns.map((column) => quoteIdentifierFor(this, column)).join(", ");
|
|
118
|
+
if (updateColumns.length === 0) {
|
|
119
|
+
return ` ON CONFLICT (${target}) DO NOTHING`;
|
|
120
|
+
}
|
|
121
|
+
const assignments = updateColumns.map((column) => {
|
|
122
|
+
const quoted = quoteIdentifierFor(this, column);
|
|
123
|
+
return `${quoted} = excluded.${quoted}`;
|
|
124
|
+
}).join(", ");
|
|
125
|
+
return ` ON CONFLICT (${target}) DO UPDATE SET ${assignments}`;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
mysqlDialect = {
|
|
129
|
+
driver: "mysql",
|
|
130
|
+
placeholder() {
|
|
131
|
+
return "?";
|
|
132
|
+
},
|
|
133
|
+
quoteIdentifier(identifier) {
|
|
134
|
+
return `\`${assertSafeIdentifier(identifier)}\``;
|
|
135
|
+
},
|
|
136
|
+
nowExpression() {
|
|
137
|
+
return "CURRENT_TIMESTAMP";
|
|
138
|
+
},
|
|
139
|
+
timestampValue(value) {
|
|
140
|
+
return value.toISOString().slice(0, 19).replace("T", " ");
|
|
141
|
+
},
|
|
142
|
+
returningClause() {
|
|
143
|
+
return "";
|
|
144
|
+
},
|
|
145
|
+
ilikeOperator() {
|
|
146
|
+
return "LIKE";
|
|
147
|
+
},
|
|
148
|
+
nullsLastSuffix() {
|
|
149
|
+
return "";
|
|
150
|
+
},
|
|
151
|
+
castToText(expression) {
|
|
152
|
+
return `CAST(${expression} AS CHAR)`;
|
|
153
|
+
},
|
|
154
|
+
upsertSuffix(conflictColumns, updateColumns) {
|
|
155
|
+
if (updateColumns.length === 0) {
|
|
156
|
+
const anchor = quoteIdentifierFor(this, conflictColumns[0] ?? "");
|
|
157
|
+
return ` ON DUPLICATE KEY UPDATE ${anchor} = ${anchor}`;
|
|
158
|
+
}
|
|
159
|
+
const assignments = updateColumns.map((column) => {
|
|
160
|
+
const quoted = quoteIdentifierFor(this, column);
|
|
161
|
+
return `${quoted} = VALUES(${quoted})`;
|
|
162
|
+
}).join(", ");
|
|
163
|
+
return ` ON DUPLICATE KEY UPDATE ${assignments}`;
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
sqliteDialect = {
|
|
167
|
+
driver: "sqlite",
|
|
168
|
+
placeholder() {
|
|
169
|
+
return "?";
|
|
170
|
+
},
|
|
171
|
+
quoteIdentifier(identifier) {
|
|
172
|
+
return `"${assertSafeIdentifier(identifier)}"`;
|
|
173
|
+
},
|
|
174
|
+
nowExpression() {
|
|
175
|
+
return "strftime('%Y-%m-%dT%H:%M:%fZ', 'now')";
|
|
176
|
+
},
|
|
177
|
+
timestampValue(value) {
|
|
178
|
+
return value.toISOString();
|
|
179
|
+
},
|
|
180
|
+
returningClause(columns) {
|
|
181
|
+
return ` RETURNING ${columns}`;
|
|
182
|
+
},
|
|
183
|
+
ilikeOperator() {
|
|
184
|
+
return "LIKE";
|
|
185
|
+
},
|
|
186
|
+
nullsLastSuffix() {
|
|
187
|
+
return "";
|
|
188
|
+
},
|
|
189
|
+
castToText(expression) {
|
|
190
|
+
return `CAST(${expression} AS TEXT)`;
|
|
191
|
+
},
|
|
192
|
+
upsertSuffix(conflictColumns, updateColumns) {
|
|
193
|
+
const target = conflictColumns.map((column) => quoteIdentifierFor(this, column)).join(", ");
|
|
194
|
+
if (updateColumns.length === 0) {
|
|
195
|
+
return ` ON CONFLICT (${target}) DO NOTHING`;
|
|
196
|
+
}
|
|
197
|
+
const assignments = updateColumns.map((column) => {
|
|
198
|
+
const quoted = quoteIdentifierFor(this, column);
|
|
199
|
+
return `${quoted} = excluded.${quoted}`;
|
|
200
|
+
}).join(", ");
|
|
201
|
+
return ` ON CONFLICT (${target}) DO UPDATE SET ${assignments}`;
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
dialects = {
|
|
205
|
+
pgsql: postgresDialect,
|
|
206
|
+
mysql: mysqlDialect,
|
|
207
|
+
sqlite: sqliteDialect
|
|
208
|
+
};
|
|
209
|
+
dialectContext = createAsyncContextStore("@getstrata/sqlDialect");
|
|
210
|
+
});
|
|
211
|
+
|
|
2
212
|
// ../../src/core/runtime/appEnv.ts
|
|
3
213
|
var NON_PRODUCTION_APP_ENVS = new Set(["local", "development", "dev", "test", "testing", "ci"]);
|
|
4
214
|
function normalizeEnvValue(value) {
|
|
@@ -126,197 +336,8 @@ function revealMfaSecret(stored) {
|
|
|
126
336
|
return decryptField(stored, key);
|
|
127
337
|
}
|
|
128
338
|
|
|
129
|
-
// ../../src/core/
|
|
130
|
-
|
|
131
|
-
function createAsyncContextStore(key) {
|
|
132
|
-
const symbol = Symbol.for(key);
|
|
133
|
-
const globalRecord = globalThis;
|
|
134
|
-
const existing = globalRecord[symbol];
|
|
135
|
-
if (existing) {
|
|
136
|
-
return existing;
|
|
137
|
-
}
|
|
138
|
-
const store = new AsyncLocalStorage;
|
|
139
|
-
globalRecord[symbol] = store;
|
|
140
|
-
return store;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// ../../src/core/database/schema/driver.ts
|
|
144
|
-
function normalizeConnectionName(connection) {
|
|
145
|
-
const normalized = connection.trim().toLowerCase();
|
|
146
|
-
if (normalized === "pgsql" || normalized === "postgres" || normalized === "postgresql") {
|
|
147
|
-
return "pgsql";
|
|
148
|
-
}
|
|
149
|
-
if (normalized === "mysql" || normalized === "mariadb") {
|
|
150
|
-
return "mysql";
|
|
151
|
-
}
|
|
152
|
-
if (normalized === "sqlite") {
|
|
153
|
-
return "sqlite";
|
|
154
|
-
}
|
|
155
|
-
throw new Error(`Unsupported DB_CONNECTION: ${connection}`);
|
|
156
|
-
}
|
|
157
|
-
function resolveDriverFromUrl(url) {
|
|
158
|
-
const normalized = url.trim().toLowerCase();
|
|
159
|
-
if (normalized.startsWith("postgres://") || normalized.startsWith("postgresql://") || normalized.startsWith("postgres:")) {
|
|
160
|
-
return "pgsql";
|
|
161
|
-
}
|
|
162
|
-
if (normalized.startsWith("mysql://") || normalized.startsWith("mysql:")) {
|
|
163
|
-
return "mysql";
|
|
164
|
-
}
|
|
165
|
-
if (normalized.startsWith("sqlite:")) {
|
|
166
|
-
return "sqlite";
|
|
167
|
-
}
|
|
168
|
-
return null;
|
|
169
|
-
}
|
|
170
|
-
function resolveDatabaseDriver(options = {}) {
|
|
171
|
-
const connection = options.connection ?? process.env.DB_CONNECTION;
|
|
172
|
-
if (connection) {
|
|
173
|
-
return normalizeConnectionName(connection);
|
|
174
|
-
}
|
|
175
|
-
const url = options.url ?? process.env.DATABASE_URL ?? "";
|
|
176
|
-
const fromUrl = resolveDriverFromUrl(url);
|
|
177
|
-
if (fromUrl) {
|
|
178
|
-
return fromUrl;
|
|
179
|
-
}
|
|
180
|
-
return "pgsql";
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// ../../src/core/database/dialect.ts
|
|
184
|
-
function assertSafeIdentifier(identifier) {
|
|
185
|
-
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(identifier)) {
|
|
186
|
-
throw new Error(`Invalid SQL identifier: ${identifier}`);
|
|
187
|
-
}
|
|
188
|
-
return identifier;
|
|
189
|
-
}
|
|
190
|
-
function quoteIdentifierFor(dialect, column) {
|
|
191
|
-
return dialect.quoteIdentifier(column);
|
|
192
|
-
}
|
|
193
|
-
var postgresDialect = {
|
|
194
|
-
driver: "pgsql",
|
|
195
|
-
placeholder(index) {
|
|
196
|
-
return `$${index}`;
|
|
197
|
-
},
|
|
198
|
-
quoteIdentifier(identifier) {
|
|
199
|
-
return `"${assertSafeIdentifier(identifier)}"`;
|
|
200
|
-
},
|
|
201
|
-
nowExpression() {
|
|
202
|
-
return "NOW()";
|
|
203
|
-
},
|
|
204
|
-
timestampValue(value) {
|
|
205
|
-
return value.toISOString();
|
|
206
|
-
},
|
|
207
|
-
returningClause(columns) {
|
|
208
|
-
return ` RETURNING ${columns}`;
|
|
209
|
-
},
|
|
210
|
-
ilikeOperator() {
|
|
211
|
-
return "ILIKE";
|
|
212
|
-
},
|
|
213
|
-
nullsLastSuffix() {
|
|
214
|
-
return " NULLS LAST";
|
|
215
|
-
},
|
|
216
|
-
castToText(expression) {
|
|
217
|
-
return `${expression}::text`;
|
|
218
|
-
},
|
|
219
|
-
upsertSuffix(conflictColumns, updateColumns) {
|
|
220
|
-
const target = conflictColumns.map((column) => quoteIdentifierFor(this, column)).join(", ");
|
|
221
|
-
if (updateColumns.length === 0) {
|
|
222
|
-
return ` ON CONFLICT (${target}) DO NOTHING`;
|
|
223
|
-
}
|
|
224
|
-
const assignments = updateColumns.map((column) => {
|
|
225
|
-
const quoted = quoteIdentifierFor(this, column);
|
|
226
|
-
return `${quoted} = excluded.${quoted}`;
|
|
227
|
-
}).join(", ");
|
|
228
|
-
return ` ON CONFLICT (${target}) DO UPDATE SET ${assignments}`;
|
|
229
|
-
}
|
|
230
|
-
};
|
|
231
|
-
var mysqlDialect = {
|
|
232
|
-
driver: "mysql",
|
|
233
|
-
placeholder() {
|
|
234
|
-
return "?";
|
|
235
|
-
},
|
|
236
|
-
quoteIdentifier(identifier) {
|
|
237
|
-
return `\`${assertSafeIdentifier(identifier)}\``;
|
|
238
|
-
},
|
|
239
|
-
nowExpression() {
|
|
240
|
-
return "CURRENT_TIMESTAMP";
|
|
241
|
-
},
|
|
242
|
-
timestampValue(value) {
|
|
243
|
-
return value.toISOString().slice(0, 19).replace("T", " ");
|
|
244
|
-
},
|
|
245
|
-
returningClause() {
|
|
246
|
-
return "";
|
|
247
|
-
},
|
|
248
|
-
ilikeOperator() {
|
|
249
|
-
return "LIKE";
|
|
250
|
-
},
|
|
251
|
-
nullsLastSuffix() {
|
|
252
|
-
return "";
|
|
253
|
-
},
|
|
254
|
-
castToText(expression) {
|
|
255
|
-
return `CAST(${expression} AS CHAR)`;
|
|
256
|
-
},
|
|
257
|
-
upsertSuffix(conflictColumns, updateColumns) {
|
|
258
|
-
if (updateColumns.length === 0) {
|
|
259
|
-
const anchor = quoteIdentifierFor(this, conflictColumns[0] ?? "");
|
|
260
|
-
return ` ON DUPLICATE KEY UPDATE ${anchor} = ${anchor}`;
|
|
261
|
-
}
|
|
262
|
-
const assignments = updateColumns.map((column) => {
|
|
263
|
-
const quoted = quoteIdentifierFor(this, column);
|
|
264
|
-
return `${quoted} = VALUES(${quoted})`;
|
|
265
|
-
}).join(", ");
|
|
266
|
-
return ` ON DUPLICATE KEY UPDATE ${assignments}`;
|
|
267
|
-
}
|
|
268
|
-
};
|
|
269
|
-
var sqliteDialect = {
|
|
270
|
-
driver: "sqlite",
|
|
271
|
-
placeholder() {
|
|
272
|
-
return "?";
|
|
273
|
-
},
|
|
274
|
-
quoteIdentifier(identifier) {
|
|
275
|
-
return `"${assertSafeIdentifier(identifier)}"`;
|
|
276
|
-
},
|
|
277
|
-
nowExpression() {
|
|
278
|
-
return "strftime('%Y-%m-%dT%H:%M:%fZ', 'now')";
|
|
279
|
-
},
|
|
280
|
-
timestampValue(value) {
|
|
281
|
-
return value.toISOString();
|
|
282
|
-
},
|
|
283
|
-
returningClause(columns) {
|
|
284
|
-
return ` RETURNING ${columns}`;
|
|
285
|
-
},
|
|
286
|
-
ilikeOperator() {
|
|
287
|
-
return "LIKE";
|
|
288
|
-
},
|
|
289
|
-
nullsLastSuffix() {
|
|
290
|
-
return "";
|
|
291
|
-
},
|
|
292
|
-
castToText(expression) {
|
|
293
|
-
return `CAST(${expression} AS TEXT)`;
|
|
294
|
-
},
|
|
295
|
-
upsertSuffix(conflictColumns, updateColumns) {
|
|
296
|
-
const target = conflictColumns.map((column) => quoteIdentifierFor(this, column)).join(", ");
|
|
297
|
-
if (updateColumns.length === 0) {
|
|
298
|
-
return ` ON CONFLICT (${target}) DO NOTHING`;
|
|
299
|
-
}
|
|
300
|
-
const assignments = updateColumns.map((column) => {
|
|
301
|
-
const quoted = quoteIdentifierFor(this, column);
|
|
302
|
-
return `${quoted} = excluded.${quoted}`;
|
|
303
|
-
}).join(", ");
|
|
304
|
-
return ` ON CONFLICT (${target}) DO UPDATE SET ${assignments}`;
|
|
305
|
-
}
|
|
306
|
-
};
|
|
307
|
-
var dialects = {
|
|
308
|
-
pgsql: postgresDialect,
|
|
309
|
-
mysql: mysqlDialect,
|
|
310
|
-
sqlite: sqliteDialect
|
|
311
|
-
};
|
|
312
|
-
var dialectContext = createAsyncContextStore("@getstrata/sqlDialect");
|
|
313
|
-
var dialectOverride = null;
|
|
314
|
-
function dialectFor(driver) {
|
|
315
|
-
return dialects[driver];
|
|
316
|
-
}
|
|
317
|
-
function currentSqlDialect() {
|
|
318
|
-
return dialectContext.getStore() ?? dialectOverride ?? dialectFor(resolveDatabaseDriver());
|
|
319
|
-
}
|
|
339
|
+
// ../../src/core/auth/passwordLogin.ts
|
|
340
|
+
init_dialect();
|
|
320
341
|
|
|
321
342
|
// ../../src/core/security/recoveryCodes.ts
|
|
322
343
|
import { randomBytes as randomBytes2 } from "crypto";
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
|
|
3
|
-
|
|
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/policy.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() {
|