@opensaas/stack-auth 0.37.0 → 0.39.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +60 -0
- package/CLAUDE.md +50 -3
- package/dist/config/adopt-better-auth-tables.d.ts +23 -3
- package/dist/config/adopt-better-auth-tables.d.ts.map +1 -1
- package/dist/config/adopt-better-auth-tables.js +7 -2
- package/dist/config/adopt-better-auth-tables.js.map +1 -1
- package/dist/config/derive-auth-lists.d.ts +6 -1
- package/dist/config/derive-auth-lists.d.ts.map +1 -1
- package/dist/config/derive-auth-lists.js +63 -16
- package/dist/config/derive-auth-lists.js.map +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +12 -5
- package/dist/config/index.js.map +1 -1
- package/dist/config/plugin.d.ts.map +1 -1
- package/dist/config/plugin.js +7 -2
- package/dist/config/plugin.js.map +1 -1
- package/dist/config/types.d.ts +62 -7
- package/dist/config/types.d.ts.map +1 -1
- package/dist/server/build-better-auth-options.test.d.ts +2 -0
- package/dist/server/build-better-auth-options.test.d.ts.map +1 -0
- package/dist/server/build-better-auth-options.test.js +29 -0
- package/dist/server/build-better-auth-options.test.js.map +1 -0
- package/dist/server/get-session-from-auth.test.d.ts +2 -0
- package/dist/server/get-session-from-auth.test.d.ts.map +1 -0
- package/dist/server/get-session-from-auth.test.js +25 -0
- package/dist/server/get-session-from-auth.test.js.map +1 -0
- package/dist/server/index.d.ts +108 -15
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +151 -63
- package/dist/server/index.js.map +1 -1
- package/dist/server/schema-converter.d.ts +15 -6
- package/dist/server/schema-converter.d.ts.map +1 -1
- package/dist/server/schema-converter.js +14 -2
- package/dist/server/schema-converter.js.map +1 -1
- package/package.json +5 -5
- package/src/config/adopt-better-auth-tables.ts +31 -4
- package/src/config/derive-auth-lists.ts +82 -21
- package/src/config/index.ts +18 -5
- package/src/config/plugin.ts +7 -2
- package/src/config/types.ts +63 -9
- package/src/server/build-better-auth-options.test.ts +59 -0
- package/src/server/get-session-from-auth.test.ts +52 -0
- package/src/server/index.ts +273 -41
- package/src/server/schema-converter.ts +29 -8
- package/tests/adopt-better-auth-tables.test.ts +73 -0
- package/tests/config.test.ts +161 -0
- package/tests/derive-auth-lists.test.ts +104 -0
- package/tests/generated-fk-shape.test.ts +81 -0
- package/tests/plugin-schema-placement.test.ts +39 -0
- package/tests/rate-limit-e2e.test.ts +239 -0
- package/tests/schema-converter.test.ts +58 -0
- package/tests/server.test.ts +310 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/vitest.config.ts +7 -1
package/dist/server/index.js
CHANGED
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
import { betterAuth } from 'better-auth';
|
|
2
2
|
import { prismaAdapter } from 'better-auth/adapters/prisma';
|
|
3
3
|
import { nextCookies } from 'better-auth/next-js';
|
|
4
|
+
/**
|
|
5
|
+
* Guard against the supplied plugin tuple silently drifting from the plugin
|
|
6
|
+
* array actually resolved from `authPlugin({ betterAuthPlugins })` — the
|
|
7
|
+
* supplied tuple exists for typing only, so if it isn't the exact same
|
|
8
|
+
* instances in the exact same order, the type it produces would be a lie
|
|
9
|
+
* about what `betterAuth()` is actually constructed with.
|
|
10
|
+
*/
|
|
11
|
+
function assertPluginTupleMatchesResolved(supplied, resolved) {
|
|
12
|
+
if (supplied.length !== resolved.length) {
|
|
13
|
+
throw new Error('[@opensaas/stack-auth] The plugin tuple passed to `buildBetterAuthOptions()` / `createAuth()` ' +
|
|
14
|
+
`has ${supplied.length} plugin(s), but the plugin array resolved from \`authPlugin({ ` +
|
|
15
|
+
`betterAuthPlugins })\` has ${resolved.length}. Pass the exact same array (without ` +
|
|
16
|
+
'`nextCookies()` — the stack appends that itself).');
|
|
17
|
+
}
|
|
18
|
+
const mismatchIndex = supplied.findIndex((plugin, index) => plugin !== resolved[index]);
|
|
19
|
+
if (mismatchIndex !== -1) {
|
|
20
|
+
throw new Error('[@opensaas/stack-auth] The plugin tuple passed to `buildBetterAuthOptions()` / `createAuth()` ' +
|
|
21
|
+
`does not match the plugin array resolved from \`authPlugin({ betterAuthPlugins })\` at index ` +
|
|
22
|
+
`${mismatchIndex} (got plugin "${supplied[mismatchIndex]?.id}", expected the same instance as ` +
|
|
23
|
+
`"${resolved[mismatchIndex]?.id}"). Pass the exact same array — same instances, same order.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
4
26
|
/**
|
|
5
27
|
* Get better-auth database configuration from OpenSaas config
|
|
6
28
|
*/
|
|
@@ -47,6 +69,16 @@ function assertNoUnsupportedPassthroughKeys(betterAuthOptions) {
|
|
|
47
69
|
'plugins are added through `authPlugin({ betterAuthPlugins: [...] })`, which the stack ' +
|
|
48
70
|
'appends `nextCookies()` after. Use `betterAuthPlugins` instead.');
|
|
49
71
|
}
|
|
72
|
+
const rateLimitOptions = betterAuthOptions.rateLimit;
|
|
73
|
+
if (rateLimitOptions &&
|
|
74
|
+
typeof rateLimitOptions === 'object' &&
|
|
75
|
+
!Array.isArray(rateLimitOptions) &&
|
|
76
|
+
'storage' in rateLimitOptions) {
|
|
77
|
+
throw new Error('[@opensaas/stack-auth] `betterAuthOptions.rateLimit.storage` is not supported — it has ' +
|
|
78
|
+
'schema consequences (deriving the `RateLimit` list) that a passthrough cannot also ' +
|
|
79
|
+
"apply to the generated Prisma schema. Use `authPlugin({ rateLimit: { storage: 'database' } })` " +
|
|
80
|
+
'instead.');
|
|
81
|
+
}
|
|
50
82
|
for (const model of MODELS_WITH_NO_ADDITIONAL_FIELDS_PASSTHROUGH) {
|
|
51
83
|
const modelOptions = betterAuthOptions[model];
|
|
52
84
|
if (modelOptions &&
|
|
@@ -87,27 +119,7 @@ function mergeBetterAuthOptions(base, overrides) {
|
|
|
87
119
|
}
|
|
88
120
|
return result;
|
|
89
121
|
}
|
|
90
|
-
|
|
91
|
-
* Build the `BetterAuthOptions` a better-auth instance for this OpenSaas
|
|
92
|
-
* config should be constructed with — the same options `createAuth()` uses
|
|
93
|
-
* internally, available standalone for an app that still needs to hand-wire
|
|
94
|
-
* its own `betterAuth()` instance (e.g. a third-party contract that requires
|
|
95
|
-
* a resolved instance at module-init time). Keeps the auth plugin
|
|
96
|
-
* authoritative for everything it models; the app's additions on top become
|
|
97
|
-
* an explicit, reviewable diff instead of a parallel, hand-duplicated config.
|
|
98
|
-
*
|
|
99
|
-
* @example
|
|
100
|
-
* ```typescript
|
|
101
|
-
* import { betterAuth } from 'better-auth'
|
|
102
|
-
* import { buildBetterAuthOptions } from '@opensaas/stack-auth/server'
|
|
103
|
-
*
|
|
104
|
-
* export const auth = betterAuth({
|
|
105
|
-
* ...(await buildBetterAuthOptions(config, context)),
|
|
106
|
-
* databaseHooks: { user: { create: { after: syncDomainUser } } },
|
|
107
|
-
* })
|
|
108
|
-
* ```
|
|
109
|
-
*/
|
|
110
|
-
export async function buildBetterAuthOptions(opensaasConfig, context) {
|
|
122
|
+
export async function buildBetterAuthOptions(opensaasConfig, context, plugins) {
|
|
111
123
|
const resolvedConfig = await Promise.resolve(opensaasConfig);
|
|
112
124
|
const resolvedContext = await Promise.resolve(context);
|
|
113
125
|
// Extract auth config from plugin data
|
|
@@ -133,6 +145,10 @@ export async function buildBetterAuthOptions(opensaasConfig, context) {
|
|
|
133
145
|
'`emailAndPassword.enabled` is false, so there is no password-based account to reset.');
|
|
134
146
|
}
|
|
135
147
|
assertNoUnsupportedPassthroughKeys(authConfig.betterAuthOptions);
|
|
148
|
+
const resolvedPlugins = authConfig.betterAuthPlugins || [];
|
|
149
|
+
if (plugins) {
|
|
150
|
+
assertPluginTupleMatchesResolved(plugins, resolvedPlugins);
|
|
151
|
+
}
|
|
136
152
|
// Build better-auth configuration
|
|
137
153
|
const betterAuthConfig = {
|
|
138
154
|
database: getDatabaseConfig(resolvedConfig.db, resolvedContext),
|
|
@@ -189,12 +205,19 @@ export async function buildBetterAuthOptions(opensaasConfig, context) {
|
|
|
189
205
|
}
|
|
190
206
|
return acc;
|
|
191
207
|
}, {}),
|
|
192
|
-
// Rate limiting configuration
|
|
208
|
+
// Rate limiting configuration. `modelName`/`fields` are only forwarded
|
|
209
|
+
// when `models.rateLimit` was derived (rateLimit.storage === 'database')
|
|
210
|
+
// — mirroring the running instance's model options back to the table the
|
|
211
|
+
// `RateLimit` Auth list was derived from.
|
|
193
212
|
rateLimit: authConfig.rateLimit
|
|
194
213
|
? {
|
|
195
214
|
enabled: authConfig.rateLimit.enabled,
|
|
196
215
|
window: authConfig.rateLimit.window,
|
|
197
216
|
max: authConfig.rateLimit.max,
|
|
217
|
+
...(authConfig.rateLimit.storage ? { storage: authConfig.rateLimit.storage } : {}),
|
|
218
|
+
...(authConfig.models.rateLimit
|
|
219
|
+
? toBetterAuthModelOptions(authConfig.models.rateLimit)
|
|
220
|
+
: {}),
|
|
198
221
|
}
|
|
199
222
|
: undefined,
|
|
200
223
|
// Pass through any additional Better Auth plugins, then append
|
|
@@ -203,29 +226,14 @@ export async function buildBetterAuthOptions(opensaasConfig, context) {
|
|
|
203
226
|
// cookie store. This is what makes the server-action auth forms (which
|
|
204
227
|
// call auth.api.signInEmail/signUpEmail/etc. server-side) actually
|
|
205
228
|
// persist a session. It must be the final plugin in the array.
|
|
206
|
-
plugins: [...
|
|
229
|
+
plugins: [...resolvedPlugins, nextCookies()],
|
|
207
230
|
};
|
|
208
231
|
return mergeBetterAuthOptions(betterAuthConfig, authConfig.betterAuthOptions);
|
|
209
232
|
}
|
|
210
|
-
|
|
211
|
-
* Create a better-auth instance from OpenSaas config
|
|
212
|
-
* This should be called once at app startup
|
|
213
|
-
*
|
|
214
|
-
* @example
|
|
215
|
-
* ```typescript
|
|
216
|
-
* // lib/auth.ts
|
|
217
|
-
* import { createAuth } from '@opensaas/stack-auth/server'
|
|
218
|
-
* import config from '../opensaas.config'
|
|
219
|
-
* import { rawOpensaasContext } from '@/.opensaas/context'
|
|
220
|
-
*
|
|
221
|
-
* export const auth = createAuth(config, rawOpensaasContext)
|
|
222
|
-
* ```
|
|
223
|
-
*/
|
|
224
|
-
export function createAuth(opensaasConfig, context) {
|
|
233
|
+
export function createAuth(opensaasConfig, context, plugins) {
|
|
225
234
|
// Resolve config and context asynchronously
|
|
226
235
|
const configPromise = Promise.resolve(opensaasConfig);
|
|
227
236
|
const contextPromise = Promise.resolve(context);
|
|
228
|
-
// Create auth instance lazily when needed
|
|
229
237
|
let authInstance = null;
|
|
230
238
|
let authPromise = null;
|
|
231
239
|
async function getAuthInstance() {
|
|
@@ -233,7 +241,9 @@ export function createAuth(opensaasConfig, context) {
|
|
|
233
241
|
return authInstance;
|
|
234
242
|
if (!authPromise) {
|
|
235
243
|
authPromise = (async () => {
|
|
236
|
-
const betterAuthConfig =
|
|
244
|
+
const betterAuthConfig = plugins
|
|
245
|
+
? await buildBetterAuthOptions(configPromise, contextPromise, plugins)
|
|
246
|
+
: await buildBetterAuthOptions(configPromise, contextPromise);
|
|
237
247
|
authInstance = betterAuth(betterAuthConfig);
|
|
238
248
|
return authInstance;
|
|
239
249
|
})();
|
|
@@ -282,34 +292,112 @@ export function createAuth(opensaasConfig, context) {
|
|
|
282
292
|
});
|
|
283
293
|
}
|
|
284
294
|
/**
|
|
285
|
-
*
|
|
295
|
+
* Field names already warned about failing to resolve against a session, so a
|
|
296
|
+
* given field warns at most once per process rather than once per request.
|
|
297
|
+
*/
|
|
298
|
+
const unresolvedSessionFieldWarnings = new Set();
|
|
299
|
+
/**
|
|
300
|
+
* Warn (once per field, per process) that a `sessionFields` entry could not
|
|
301
|
+
* be resolved from the session shape `auth.api.getSession()` actually
|
|
302
|
+
* returned — naming the field and what keys were available to check, so the
|
|
303
|
+
* gap is visible here instead of surfacing later as an access-control
|
|
304
|
+
* function silently reading `undefined`.
|
|
305
|
+
*/
|
|
306
|
+
function warnUnresolvedSessionField(field, resolvedSession) {
|
|
307
|
+
if (unresolvedSessionFieldWarnings.has(field))
|
|
308
|
+
return;
|
|
309
|
+
unresolvedSessionFieldWarnings.add(field);
|
|
310
|
+
const user = isPlainObject(resolvedSession.user) ? resolvedSession.user : undefined;
|
|
311
|
+
const sessionRow = isPlainObject(resolvedSession.session) ? resolvedSession.session : undefined;
|
|
312
|
+
console.warn(`[@opensaas/stack-auth] sessionFields: "${field}" was not found on the resolved session. ` +
|
|
313
|
+
`Checked its top-level keys (${Object.keys(resolvedSession).join(', ') || 'none'}), ` +
|
|
314
|
+
`its "user" object (${user ? Object.keys(user).join(', ') || 'none' : 'not present'}), ` +
|
|
315
|
+
`and its "session" object (${sessionRow ? Object.keys(sessionRow).join(', ') || 'none' : 'not present'}). ` +
|
|
316
|
+
`The field is omitted from the projected session. A \`customSession\` plugin that nests this ` +
|
|
317
|
+
`value elsewhere is the app's own to reconcile — see the \`sessionFields\` reference. ` +
|
|
318
|
+
`This warning will not repeat for "${field}".`);
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Resolve a single `sessionFields` entry off the resolved better-auth
|
|
322
|
+
* session (whatever `auth.api.getSession()` returned — the default `{
|
|
323
|
+
* session, user }` shape, or a `customSession` plugin's replaced shape).
|
|
286
324
|
*
|
|
287
|
-
*
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
*
|
|
291
|
-
*
|
|
325
|
+
* `userId` is special-cased to the authenticated user's `id` — the
|
|
326
|
+
* documented default apps depend on. Every other name resolves against a
|
|
327
|
+
* fixed precedence so a collision between sources is predictable rather
|
|
328
|
+
* than incidental: a top-level key on the resolved session object, then the
|
|
329
|
+
* `user` object, then the `session` sub-object.
|
|
330
|
+
*/
|
|
331
|
+
function resolveSessionField(field, resolvedSession) {
|
|
332
|
+
const user = isPlainObject(resolvedSession.user) ? resolvedSession.user : undefined;
|
|
333
|
+
if (field === 'userId') {
|
|
334
|
+
return user && 'id' in user ? { found: true, value: user.id } : { found: false };
|
|
335
|
+
}
|
|
336
|
+
if (field in resolvedSession) {
|
|
337
|
+
return { found: true, value: resolvedSession[field] };
|
|
338
|
+
}
|
|
339
|
+
if (user && field in user) {
|
|
340
|
+
return { found: true, value: user[field] };
|
|
341
|
+
}
|
|
342
|
+
const sessionRow = isPlainObject(resolvedSession.session) ? resolvedSession.session : undefined;
|
|
343
|
+
if (sessionRow && field in sessionRow) {
|
|
344
|
+
return { found: true, value: sessionRow[field] };
|
|
345
|
+
}
|
|
346
|
+
return { found: false };
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Get session from better-auth and transform it to OpenSaas session format —
|
|
350
|
+
* a flattened projection of `sessionFields` off the *resolved* session
|
|
351
|
+
* object, not just its `user` sub-object. This is what makes a
|
|
352
|
+
* `customSession` plugin's fields (added at the top level, or a
|
|
353
|
+
* session-only field like the admin plugin's `impersonatedBy`) reachable.
|
|
354
|
+
* See the `sessionFields` reference for the resolution precedence.
|
|
355
|
+
*
|
|
356
|
+
* Returns `null` only when there is genuinely no session — a resolved
|
|
357
|
+
* session with no `user` key (a `customSession` plugin that dropped it) is
|
|
358
|
+
* still a session and still gets projected, never misreported as anonymous.
|
|
359
|
+
* A listed field that can't be resolved from the session shape is omitted
|
|
360
|
+
* and warns once per field per process (see `warnUnresolvedSessionField`)
|
|
361
|
+
* instead of silently vanishing into an access-control function reading
|
|
362
|
+
* `undefined`.
|
|
363
|
+
*
|
|
364
|
+
* Errors from the underlying `auth.api.getSession()` call propagate rather
|
|
365
|
+
* than becoming `null` — collapsing a lookup failure (e.g. a session-store
|
|
366
|
+
* outage) into "anonymous" is indistinguishable from a mass sign-out under
|
|
367
|
+
* fail-closed access control, so the caller must see it.
|
|
368
|
+
*
|
|
369
|
+
* Not called by any generated code before this helper existed — apps used to
|
|
370
|
+
* hand-roll this same transform against `auth.api.getSession({ headers:
|
|
371
|
+
* await headers() })`. Exported as the single reusable implementation; pass
|
|
372
|
+
* the caller's request headers (e.g. Next.js `await headers()` in a Server
|
|
373
|
+
* Component/action) so a session cookie can actually be resolved.
|
|
374
|
+
*
|
|
375
|
+
* `auth` is typed structurally over just the one member this function reads
|
|
376
|
+
* — `api.getSession` — rather than a single concrete `Auth<Options>`
|
|
377
|
+
* instantiation, so it accepts an instance from either `createAuth()`
|
|
378
|
+
* overload: the widened `Auth<BetterAuthOptions>`, or the narrowed
|
|
379
|
+
* `Auth<ResolvedBetterAuthOptions<TPlugins>>` returned when a plugin tuple is
|
|
380
|
+
* passed. `TResolvedSession` is inferred from whatever `auth.api.getSession`
|
|
381
|
+
* actually returns (the default `{ session, user }` shape, or a
|
|
382
|
+
* `customSession` plugin's replaced shape) — it is not constrained, so no
|
|
383
|
+
* `any`/`unknown` is introduced at the call boundary.
|
|
292
384
|
*/
|
|
293
385
|
export async function getSessionFromAuth(auth, sessionFields, headers) {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
386
|
+
const resolvedSession = await auth.api.getSession({ headers });
|
|
387
|
+
if (!resolvedSession) {
|
|
388
|
+
return null;
|
|
389
|
+
}
|
|
390
|
+
const resolvedSessionRecord = resolvedSession;
|
|
391
|
+
const result = {};
|
|
392
|
+
for (const field of sessionFields) {
|
|
393
|
+
const resolved = resolveSessionField(field, resolvedSessionRecord);
|
|
394
|
+
if (resolved.found) {
|
|
395
|
+
result[field] = resolved.value;
|
|
298
396
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
for (const field of sessionFields) {
|
|
302
|
-
if (field === 'userId') {
|
|
303
|
-
result.userId = session.user.id;
|
|
304
|
-
}
|
|
305
|
-
else if (field in session.user) {
|
|
306
|
-
result[field] = session.user[field];
|
|
307
|
-
}
|
|
397
|
+
else {
|
|
398
|
+
warnUnresolvedSessionField(field, resolvedSessionRecord);
|
|
308
399
|
}
|
|
309
|
-
return result;
|
|
310
|
-
}
|
|
311
|
-
catch {
|
|
312
|
-
return null;
|
|
313
400
|
}
|
|
401
|
+
return result;
|
|
314
402
|
}
|
|
315
403
|
//# sourceMappingURL=index.js.map
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,23 +8,31 @@ import type { ListConfig } from '@opensaas/stack-core';
|
|
|
8
8
|
* Inferred from better-auth internal types
|
|
9
9
|
*/
|
|
10
10
|
type BetterAuthFieldAttribute = {
|
|
11
|
-
type: string;
|
|
11
|
+
type: string | string[];
|
|
12
12
|
required?: boolean;
|
|
13
13
|
unique?: boolean;
|
|
14
14
|
references?: {
|
|
15
15
|
model: string;
|
|
16
16
|
field: string;
|
|
17
|
-
onDelete?: 'cascade' | 'set null' | '
|
|
17
|
+
onDelete?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
|
|
18
18
|
};
|
|
19
19
|
defaultValue?: unknown;
|
|
20
20
|
returned?: boolean;
|
|
21
21
|
input?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* "If the field should be a bigint on the database instead of integer" —
|
|
24
|
+
* only meaningful alongside `type: 'number'`. Modelled here so the `number`
|
|
25
|
+
* branch below can read it; better-auth's rate limiter is the only shipped
|
|
26
|
+
* example (`lastRequest`, a millisecond epoch that overflows a 32-bit
|
|
27
|
+
* `Int`), but any plugin can declare it (issue #917).
|
|
28
|
+
*/
|
|
29
|
+
bigint?: boolean;
|
|
22
30
|
};
|
|
23
31
|
/**
|
|
24
32
|
* Better Auth table schema structure
|
|
25
33
|
*/
|
|
26
34
|
type BetterAuthTableSchema = {
|
|
27
|
-
modelName
|
|
35
|
+
modelName?: string;
|
|
28
36
|
fields: Record<string, BetterAuthFieldAttribute>;
|
|
29
37
|
};
|
|
30
38
|
/**
|
|
@@ -41,10 +49,11 @@ type BetterAuthTableSchema = {
|
|
|
41
49
|
*/
|
|
42
50
|
export declare function convertTableToList(tableName: string, tableSchema: BetterAuthTableSchema): ListConfig<any>;
|
|
43
51
|
/**
|
|
44
|
-
* Base better-auth model keys — the
|
|
45
|
-
*
|
|
52
|
+
* Base better-auth model keys — the tables the auth plugin's own model config
|
|
53
|
+
* (`user`/`session`/`account`/`verification`, plus `rateLimit` when
|
|
54
|
+
* `rateLimit.storage: 'database'` derives it) can remap via `modelName`.
|
|
46
55
|
*/
|
|
47
|
-
type BaseAuthModelKey = 'user' | 'session' | 'account' | 'verification';
|
|
56
|
+
type BaseAuthModelKey = 'user' | 'session' | 'account' | 'verification' | 'rateLimit';
|
|
48
57
|
/**
|
|
49
58
|
* Resolved list key for each base better-auth model, as derived by
|
|
50
59
|
* {@link deriveAuthLists} from the plugin's configured model-key remap (e.g.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-converter.d.ts","sourceRoot":"","sources":["../../src/server/schema-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,sBAAsB,CAAA;AAEnE;;;GAGG;AACH,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"schema-converter.d.ts","sourceRoot":"","sources":["../../src/server/schema-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,sBAAsB,CAAA;AAEnE;;;GAGG;AACH,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAA;KAC7E,CAAA;IACD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED;;GAEG;AACH,KAAK,qBAAqB,GAAG;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAA;CACjD,CAAA;AAqED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,qBAAqB,GAEjC,UAAU,CAAC,GAAG,CAAC,CA4BjB;AAED;;;;GAIG;AACH,KAAK,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,WAAW,CAAA;AAErF;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAA;AA4BzE;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC7C,aAAa,GAAE,iBAAsB,GAEpC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAejC"}
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
* Allows dynamic list generation from Better Auth plugins
|
|
4
4
|
*/
|
|
5
5
|
import { list } from '@opensaas/stack-core';
|
|
6
|
-
import { text, timestamp, checkbox, integer } from '@opensaas/stack-core/fields';
|
|
6
|
+
import { text, timestamp, checkbox, integer, bigInt } from '@opensaas/stack-core/fields';
|
|
7
7
|
/**
|
|
8
8
|
* Convert Better Auth field type to OpenSaaS field config
|
|
9
9
|
*/
|
|
10
10
|
function convertField(fieldName, betterAuthField) {
|
|
11
|
-
const { type, required, unique, defaultValue, references } = betterAuthField;
|
|
11
|
+
const { type, required, unique, defaultValue, references, bigint } = betterAuthField;
|
|
12
12
|
// System fields are auto-generated by OpenSaaS
|
|
13
13
|
if (fieldName === 'id' || fieldName === 'createdAt' || fieldName === 'updatedAt') {
|
|
14
14
|
return null;
|
|
@@ -28,6 +28,16 @@ function convertField(fieldName, betterAuthField) {
|
|
|
28
28
|
defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined,
|
|
29
29
|
});
|
|
30
30
|
case 'number':
|
|
31
|
+
// A millisecond epoch (e.g. Date.now()) overflows a 32-bit Int, so a
|
|
32
|
+
// field declaring `bigint: true` must generate a BigInt column instead
|
|
33
|
+
// (issue #917) — matching what deriveAuthLists produces for the same
|
|
34
|
+
// upstream declaration (e.g. the rate limiter's `lastRequest`).
|
|
35
|
+
if (bigint) {
|
|
36
|
+
return bigInt({
|
|
37
|
+
validation: { isRequired: required },
|
|
38
|
+
defaultValue: typeof defaultValue === 'number' ? defaultValue : undefined,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
31
41
|
return integer({
|
|
32
42
|
validation: { isRequired: required },
|
|
33
43
|
defaultValue: typeof defaultValue === 'number' ? defaultValue : undefined,
|
|
@@ -102,6 +112,8 @@ function resolveBaseModelKey(tableName, baseModelKeys) {
|
|
|
102
112
|
return baseModelKeys.account;
|
|
103
113
|
case 'verification':
|
|
104
114
|
return baseModelKeys.verification;
|
|
115
|
+
case 'ratelimit':
|
|
116
|
+
return baseModelKeys.rateLimit;
|
|
105
117
|
default:
|
|
106
118
|
return undefined;
|
|
107
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-converter.js","sourceRoot":"","sources":["../../src/server/schema-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"schema-converter.js","sourceRoot":"","sources":["../../src/server/schema-converter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensaas/stack-auth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.39.0",
|
|
4
4
|
"description": "Better-auth integration for OpenSaas Stack",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -60,13 +60,13 @@
|
|
|
60
60
|
"@typescript/native": "npm:typescript@^7.0.2",
|
|
61
61
|
"@vitest/coverage-v8": "^4.1.10",
|
|
62
62
|
"@vitest/ui": "^4.1.10",
|
|
63
|
-
"better-auth": "^1.
|
|
63
|
+
"better-auth": "^1.6.25",
|
|
64
64
|
"next": "^16.2.10",
|
|
65
|
-
"react": "^19.2.
|
|
65
|
+
"react": "^19.2.8",
|
|
66
66
|
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
67
67
|
"vitest": "^4.1.10",
|
|
68
|
-
"@opensaas/stack-cli": "0.
|
|
69
|
-
"@opensaas/stack-core": "0.
|
|
68
|
+
"@opensaas/stack-cli": "0.39.0",
|
|
69
|
+
"@opensaas/stack-core": "0.39.0"
|
|
70
70
|
},
|
|
71
71
|
"scripts": {
|
|
72
72
|
"build": "tsc",
|
|
@@ -104,6 +104,7 @@ export type AdoptBetterAuthTablesOptions = {
|
|
|
104
104
|
session?: Record<string, string>
|
|
105
105
|
account?: Record<string, string>
|
|
106
106
|
verification?: Record<string, string>
|
|
107
|
+
rateLimit?: Record<string, string>
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
/**
|
|
@@ -137,15 +138,32 @@ export type AdoptBetterAuthTablesOptions = {
|
|
|
137
138
|
session?: string
|
|
138
139
|
account?: string
|
|
139
140
|
verification?: string
|
|
141
|
+
rateLimit?: string
|
|
140
142
|
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Also adopt an existing database-backed rate limiter table, deriving a
|
|
146
|
+
* fifth `<prefix>RateLimit` Auth list alongside the other four (per
|
|
147
|
+
* ADR-0007). Better-auth only creates this table when
|
|
148
|
+
* `rateLimit.storage: 'database'` — most installs use the in-memory
|
|
149
|
+
* limiter, so this defaults to `false` and must be opted into explicitly.
|
|
150
|
+
* The returned fragment sets `rateLimit: { enabled: true, storage:
|
|
151
|
+
* 'database', modelName: ... }`; override `enabled`/`window`/`max` by
|
|
152
|
+
* setting `rateLimit` again on your own `authPlugin` config after spreading
|
|
153
|
+
* this fragment.
|
|
154
|
+
*
|
|
155
|
+
* @default false
|
|
156
|
+
*/
|
|
157
|
+
rateLimit?: boolean
|
|
141
158
|
}
|
|
142
159
|
|
|
143
|
-
/** The
|
|
160
|
+
/** The better-auth models and their default (unprefixed) model names. */
|
|
144
161
|
const MODEL_DEFAULT_NAMES = {
|
|
145
162
|
user: 'User',
|
|
146
163
|
session: 'Session',
|
|
147
164
|
account: 'Account',
|
|
148
165
|
verification: 'Verification',
|
|
166
|
+
rateLimit: 'RateLimit',
|
|
149
167
|
} as const
|
|
150
168
|
|
|
151
169
|
/** better-auth's own default lowercase table names, per model. */
|
|
@@ -154,17 +172,22 @@ const BETTER_AUTH_DEFAULT_TABLE_NAMES = {
|
|
|
154
172
|
session: 'session',
|
|
155
173
|
account: 'account',
|
|
156
174
|
verification: 'verification',
|
|
175
|
+
rateLimit: 'rateLimit',
|
|
157
176
|
} as const
|
|
158
177
|
|
|
159
178
|
/**
|
|
160
179
|
* The adoption-relevant slice of {@link AuthConfig}: the plugin-level `schema`
|
|
161
|
-
* and the per-model `modelName`/`fields
|
|
162
|
-
*
|
|
180
|
+
* and the per-model `modelName`/`fields` (`user`/`session`/`account`/
|
|
181
|
+
* `verification` always; `rateLimit` only when the `rateLimit` option is set).
|
|
182
|
+
* Returned (not the full `AuthConfig`) so it spreads cleanly into the
|
|
183
|
+
* developer's own `authPlugin` config.
|
|
163
184
|
*/
|
|
164
185
|
export type AdoptBetterAuthTablesConfig = Pick<
|
|
165
186
|
AuthConfig,
|
|
166
187
|
'schema' | 'user' | 'session' | 'account' | 'verification'
|
|
167
|
-
>
|
|
188
|
+
> & {
|
|
189
|
+
rateLimit?: AuthConfig['rateLimit']
|
|
190
|
+
}
|
|
168
191
|
|
|
169
192
|
/**
|
|
170
193
|
* Build the adoption {@link AuthConfig} fragment for a pre-existing better-auth
|
|
@@ -186,6 +209,7 @@ export function adoptBetterAuthTables(
|
|
|
186
209
|
fields = {},
|
|
187
210
|
useBetterAuthTableNames = false,
|
|
188
211
|
tableNames = {},
|
|
212
|
+
rateLimit = false,
|
|
189
213
|
} = options
|
|
190
214
|
|
|
191
215
|
const buildModel = (model: keyof typeof MODEL_DEFAULT_NAMES): AuthModelConfig => {
|
|
@@ -211,5 +235,8 @@ export function adoptBetterAuthTables(
|
|
|
211
235
|
session: buildModel('session'),
|
|
212
236
|
account: buildModel('account'),
|
|
213
237
|
verification: buildModel('verification'),
|
|
238
|
+
...(rateLimit
|
|
239
|
+
? { rateLimit: { enabled: true, storage: 'database' as const, ...buildModel('rateLimit') } }
|
|
240
|
+
: {}),
|
|
214
241
|
}
|
|
215
242
|
}
|