@nextsparkjs/core 0.1.0-beta.196 → 0.1.0-beta.197
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/README.md +2 -0
- package/dist/components/auth/forms/SignupForm.d.ts.map +1 -1
- package/dist/components/auth/forms/SignupForm.js +55 -45
- package/dist/components/dashboard/block-editor/config-panel.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/config-panel.js +3 -2
- package/dist/components/dashboard/block-editor/entity-fields-sidebar.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/entity-fields-sidebar.js +3 -2
- package/dist/components/users/tables/UsersTable.d.ts.map +1 -1
- package/dist/components/users/tables/UsersTable.js +3 -4
- package/dist/hooks/useAuthReadiness.d.ts +1 -0
- package/dist/hooks/useAuthReadiness.d.ts.map +1 -1
- package/dist/hooks/useAuthReadiness.js +3 -1
- package/dist/lib/actions/entity.actions.js +2 -2
- package/dist/lib/actions/team.actions.js +2 -2
- package/dist/lib/actions/user.actions.js +4 -4
- package/dist/lib/api/auth/dual-auth.d.ts.map +1 -1
- package/dist/lib/api/auth/dual-auth.js +3 -2
- package/dist/lib/api/auth.d.ts.map +1 -1
- package/dist/lib/api/auth.js +7 -0
- package/dist/lib/api/entity/generic-handler.d.ts.map +1 -1
- package/dist/lib/api/entity/generic-handler.js +66 -12
- package/dist/lib/api/entity-handler.js +2 -2
- package/dist/lib/api/helpers.d.ts.map +1 -1
- package/dist/lib/api/helpers.js +4 -2
- package/dist/lib/api/post-categories.d.ts +29 -0
- package/dist/lib/api/post-categories.d.ts.map +1 -0
- package/dist/lib/api/post-categories.js +33 -0
- package/dist/lib/auth/auth-methods.d.ts +5 -2
- package/dist/lib/auth/auth-methods.d.ts.map +1 -1
- package/dist/lib/auth/auth-methods.js +4 -2
- package/dist/lib/auth/authorization-session.d.ts +14 -0
- package/dist/lib/auth/authorization-session.d.ts.map +1 -0
- package/dist/lib/auth/authorization-session.js +10 -0
- package/dist/lib/auth/request-session.d.ts +5 -0
- package/dist/lib/auth/request-session.d.ts.map +1 -1
- package/dist/lib/auth/request-session.js +3 -0
- package/dist/lib/auth/runtime-readiness.d.ts +7 -4
- package/dist/lib/auth/runtime-readiness.d.ts.map +1 -1
- package/dist/lib/auth/runtime-readiness.js +7 -6
- package/dist/lib/auth/sample-accounts.d.ts +2 -1
- package/dist/lib/auth/sample-accounts.d.ts.map +1 -1
- package/dist/lib/auth/sample-accounts.js +4 -1
- package/dist/lib/auth/suspension.d.ts +22 -0
- package/dist/lib/auth/suspension.d.ts.map +1 -0
- package/dist/lib/auth/suspension.js +43 -0
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +15 -15
- package/dist/lib/config/app.config.d.ts.map +1 -1
- package/dist/lib/config/app.config.js +6 -7
- package/dist/lib/config/types.d.ts +8 -6
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/db-pool.d.ts +31 -0
- package/dist/lib/db-pool.d.ts.map +1 -0
- package/dist/lib/db-pool.js +75 -0
- package/dist/lib/db.d.ts +1 -1
- package/dist/lib/db.d.ts.map +1 -1
- package/dist/lib/db.js +11 -14
- package/dist/lib/entities/api-generator.js +5 -5
- package/dist/lib/oauth/token-refresh.d.ts.map +1 -1
- package/dist/lib/oauth/token-refresh.js +3 -6
- package/dist/lib/permissions/check.d.ts +9 -0
- package/dist/lib/permissions/check.d.ts.map +1 -1
- package/dist/lib/permissions/check.js +11 -1
- package/dist/lib/services/generic-entity.service.d.ts.map +1 -1
- package/dist/lib/services/generic-entity.service.js +39 -7
- package/dist/lib/services/transactional-meta.service.d.ts.map +1 -1
- package/dist/lib/services/transactional-meta.service.js +7 -8
- package/dist/lib/validation.d.ts +5 -0
- package/dist/lib/validation.d.ts.map +1 -1
- package/dist/lib/validation.js +2 -0
- package/dist/migrations/030_taxonomies_team_writes.sql +29 -0
- package/dist/migrations/031_users_role_suspended.sql +41 -0
- package/dist/routes/(auth)/signup/page.cc.d.ts +3 -1
- package/dist/routes/(auth)/signup/page.cc.d.ts.map +1 -1
- package/dist/routes/(auth)/signup/page.cc.js +2 -2
- package/dist/routes/(auth)/signup/page.d.ts +3 -1
- package/dist/routes/(auth)/signup/page.d.ts.map +1 -1
- package/dist/routes/(auth)/signup/page.js +4 -3
- package/dist/routes/_internal/area-access.js +2 -2
- package/dist/routes/api/devtools/config/entities/route.js +2 -2
- package/dist/routes/api/devtools/config/theme/route.js +2 -2
- package/dist/routes/api/devtools/tests/[...path]/route.js +2 -2
- package/dist/routes/api/devtools/tests/route.js +2 -2
- package/dist/routes/api/superadmin/subscriptions/route.js +2 -2
- package/dist/routes/api/superadmin/teams/[teamId]/route.js +2 -2
- package/dist/routes/api/superadmin/teams/route.js +2 -2
- package/dist/routes/api/superadmin/users/[userId]/route.d.ts +5 -3
- package/dist/routes/api/superadmin/users/[userId]/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/users/[userId]/route.js +46 -23
- package/dist/routes/api/superadmin/users/route.js +2 -2
- package/dist/routes/api/user/delete-account/route.d.ts.map +1 -1
- package/dist/routes/api/user/delete-account/route.js +2 -3
- package/dist/routes/api/user/plan-flags/route.d.ts.map +1 -1
- package/dist/routes/api/user/plan-flags/route.js +5 -5
- package/dist/routes/api/user/profile/route.js +3 -3
- package/dist/routes/api/v1/auth/signup-with-invite/route.d.ts.map +1 -1
- package/dist/routes/api/v1/auth/signup-with-invite/route.js +80 -44
- package/dist/routes/api/v1/post-categories/[id]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/post-categories/[id]/route.js +39 -34
- package/dist/routes/api/v1/post-categories/route.d.ts.map +1 -1
- package/dist/routes/api/v1/post-categories/route.js +18 -14
- package/dist/routes/api/v1/team-invitations/route.d.ts.map +1 -1
- package/dist/routes/api/v1/team-invitations/route.js +12 -5
- package/dist/routes/superadmin/users/page.js +2 -2
- package/dist/templates/next.config.mjs +11 -31
- package/dist/templates/projects/blog/package.json +1 -1
- package/dist/templates/projects/crm/package.json +1 -1
- package/dist/templates/projects/productivity/package.json +1 -1
- package/dist/templates/projects/starter/config/app.config.ts +8 -0
- package/dist/templates/proxy.ts +6 -3
- package/migrations/030_taxonomies_team_writes.sql +29 -0
- package/migrations/031_users_role_suspended.sql +41 -0
- package/package.json +3 -3
- package/scripts/build/registry/__tests__/build-output.test.mjs +1 -1
- package/scripts/build/registry/__tests__/project-mode-root-first.test.mjs +6 -6
- package/scripts/build/registry/__tests__/write-places.test.mjs +1 -1
- package/scripts/build/registry/contracts/__tests__/contracts-wire.test.mjs +1 -1
- package/scripts/build/registry/contracts/__tests__/contracts.test.mjs +1 -1
- package/scripts/build/registry/host/README.md +2 -2
- package/scripts/build/registry/host/__tests__/facade-emitter.test.mjs +14 -13
- package/scripts/build/registry/host/__tests__/host-mode.test.mjs +1 -1
- package/scripts/build/registry/host/__tests__/host-project-composition.test.mjs +1 -1
- package/scripts/build/registry/host/__tests__/host-project.test.mjs +2 -2
- package/scripts/build/registry/host/__tests__/host-proxy-areas.test.mjs +29 -2
- package/scripts/build/registry/host/__tests__/host-robustness.test.mjs +1 -1
- package/scripts/build/registry/host/facade-emitter.mjs +1 -1
- package/scripts/build/registry/host/next-route-exports.json +2 -2
- package/scripts/build/registry/host/proxy-areas.mjs +29 -2
- package/scripts/db/verify-theme-migrations.mjs +1 -1
- package/templates/next.config.mjs +11 -31
- package/templates/projects/blog/package.json +1 -1
- package/templates/projects/crm/package.json +1 -1
- package/templates/projects/productivity/package.json +1 -1
- package/templates/projects/starter/config/app.config.ts +8 -0
- package/templates/proxy.ts +6 -3
- package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +5 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getAuthorizationSession } from "../auth/authorization-session.js";
|
|
2
2
|
import { entityRegistry, ensureInitialized } from "../entities/registry.js";
|
|
3
3
|
import {
|
|
4
4
|
createApiResponse,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
import { afterEntityCreate, afterEntityUpdate, afterEntityDelete } from "../entities/entity-hooks.js";
|
|
14
14
|
async function checkBasicAuth(request, entityName) {
|
|
15
15
|
try {
|
|
16
|
-
const session = await
|
|
16
|
+
const session = await getAuthorizationSession(request.headers);
|
|
17
17
|
if (!session) {
|
|
18
18
|
return {
|
|
19
19
|
allowed: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/lib/api/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAsC,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/lib/api/helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api/helpers.js
CHANGED
|
@@ -5,6 +5,7 @@ import { apiKeyRateLimitResponse } from "./rate-limit.js";
|
|
|
5
5
|
import { getRecordedClientIp } from "./client-ip.js";
|
|
6
6
|
import { getApplicationConfig } from "../config/index.js";
|
|
7
7
|
import { auth } from "../auth.js";
|
|
8
|
+
import { isSuspendedRole } from "../auth/suspension.js";
|
|
8
9
|
import { MetaService } from "../services/meta.service.js";
|
|
9
10
|
import { ScopeService } from "../services/scope.service.js";
|
|
10
11
|
import { getChildEntities } from "../entities/queries.js";
|
|
@@ -25,9 +26,10 @@ async function validateAndAuthenticateRequest(request, options = {}) {
|
|
|
25
26
|
const session = await auth.api.getSession({
|
|
26
27
|
headers: new Headers({
|
|
27
28
|
cookie: cookieHeader
|
|
28
|
-
})
|
|
29
|
+
}),
|
|
30
|
+
query: { disableCookieCache: true }
|
|
29
31
|
});
|
|
30
|
-
if ((_a = session == null ? void 0 : session.user) == null ? void 0 : _a.id) {
|
|
32
|
+
if (((_a = session == null ? void 0 : session.user) == null ? void 0 : _a.id) && !isSuspendedRole(session.user.role)) {
|
|
31
33
|
const userRole = session.user.role || "member";
|
|
32
34
|
const userFlags = session.user.flags || [];
|
|
33
35
|
const sessionAuth = {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
/**
|
|
3
|
+
* Post categories (`taxonomies` rows of type `post_category`) belong to a team: they are created in the caller's
|
|
4
|
+
* team (`x-team-id`) and read, changed and deleted only there, under the same team-role permissions as the posts
|
|
5
|
+
* entity (`posts.list`, `posts.create`, `posts.update`, `posts.delete`). Rows without a team (the only kind before
|
|
6
|
+
* categories were scoped) stay readable by every team and by visitors; only a superadmin can change or delete them.
|
|
7
|
+
*/
|
|
8
|
+
/** A refusal the route returns as it is. */
|
|
9
|
+
export type Refusal = {
|
|
10
|
+
response: NextResponse;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* The team whose categories a read sees, besides the rows without a team. No `x-team-id`: none (a visitor, or a
|
|
14
|
+
* caller without a team context, sees only the rows without a team). With one: the caller must be able to list
|
|
15
|
+
* posts there.
|
|
16
|
+
*/
|
|
17
|
+
export declare function categoryReadTeam(request: NextRequest): Promise<{
|
|
18
|
+
teamId: string | null;
|
|
19
|
+
} | Refusal>;
|
|
20
|
+
export interface CategoryWriter {
|
|
21
|
+
userId: string;
|
|
22
|
+
/** The caller's team (`x-team-id`), when the caller holds `posts.<action>` there. */
|
|
23
|
+
teamId: string | null;
|
|
24
|
+
/** A superadmin may change or delete the rows without a team. */
|
|
25
|
+
superadmin: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** Who writes, and in which team, after the API-key scope and the team-role check for `posts.<action>`. */
|
|
28
|
+
export declare function categoryWriter(request: NextRequest, action: 'create' | 'update' | 'delete'): Promise<CategoryWriter | Refusal>;
|
|
29
|
+
//# sourceMappingURL=post-categories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-categories.d.ts","sourceRoot":"","sources":["../../../src/lib/api/post-categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAIvD;;;;;GAKG;AAEH,4CAA4C;AAC5C,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,EAAE,YAAY,CAAA;CAAE,CAAA;AAOhD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,CASzG;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,qFAAqF;IACrF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,iEAAiE;IACjE,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,2GAA2G;AAC3G,wBAAsB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,CAYpI"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import { authenticateRequest, createAuthFailureResponse } from "./auth/dual-auth.js";
|
|
3
|
+
import { checkPermission } from "../permissions/check.js";
|
|
4
|
+
const deny = (status, code, error) => ({ response: NextResponse.json({ success: false, error, code }, { status }) });
|
|
5
|
+
const isSuperadmin = (auth) => {
|
|
6
|
+
var _a;
|
|
7
|
+
return ((_a = auth.user) == null ? void 0 : _a.role) === "superadmin";
|
|
8
|
+
};
|
|
9
|
+
async function categoryReadTeam(request) {
|
|
10
|
+
const teamId = request.headers.get("x-team-id");
|
|
11
|
+
if (!teamId) return { teamId: null };
|
|
12
|
+
const auth = await authenticateRequest(request, { requiredScope: "posts:read" });
|
|
13
|
+
if (!auth.success || !auth.user) return { response: createAuthFailureResponse(auth) };
|
|
14
|
+
if (!isSuperadmin(auth) && !await checkPermission(auth.user.id, teamId, "posts.list")) {
|
|
15
|
+
return deny(403, "PERMISSION_DENIED", "Permission denied: insufficient permissions for posts.list");
|
|
16
|
+
}
|
|
17
|
+
return { teamId };
|
|
18
|
+
}
|
|
19
|
+
async function categoryWriter(request, action) {
|
|
20
|
+
const auth = await authenticateRequest(request, { requiredScope: action === "delete" ? "posts:delete" : "posts:write" });
|
|
21
|
+
if (!auth.success || !auth.user) return { response: createAuthFailureResponse(auth) };
|
|
22
|
+
const superadmin = isSuperadmin(auth);
|
|
23
|
+
const requested = request.headers.get("x-team-id");
|
|
24
|
+
const teamId = requested && await checkPermission(auth.user.id, requested, `posts.${action}`) ? requested : null;
|
|
25
|
+
if (!teamId && !(superadmin && action !== "create")) {
|
|
26
|
+
return requested ? deny(403, "PERMISSION_DENIED", `Permission denied: insufficient permissions for posts.${action}`) : deny(400, "TEAM_CONTEXT_REQUIRED", "Team context required. Include x-team-id header.");
|
|
27
|
+
}
|
|
28
|
+
return { userId: auth.user.id, teamId, superadmin };
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
categoryReadTeam,
|
|
32
|
+
categoryWriter
|
|
33
|
+
};
|
|
@@ -46,7 +46,10 @@ export declare function getPrimaryEmailMethod(methods: readonly AuthLoginMethod[
|
|
|
46
46
|
export declare function matchAuthPreset(methods: readonly AuthLoginMethod[]): AuthPreset | null;
|
|
47
47
|
/**
|
|
48
48
|
* Server-side: should Better Auth's email + password endpoints be enabled?
|
|
49
|
-
*
|
|
49
|
+
* An explicit `emailAndPassword.enabled` decides. Otherwise they are on when
|
|
50
|
+
* `methods` lists `'email-password'`, and outside production (so the dev
|
|
51
|
+
* keyring, `db:seed` users and Cypress sign in with a password); a production
|
|
52
|
+
* app on the passwordless preset serves no password endpoint.
|
|
50
53
|
*/
|
|
51
|
-
export declare function isPasswordLoginEnabled(authConfig?: Pick<AuthConfig, 'emailAndPassword'> | null): boolean;
|
|
54
|
+
export declare function isPasswordLoginEnabled(authConfig?: Pick<AuthConfig, 'methods' | 'emailAndPassword'> | null, nodeEnv?: string | undefined): boolean;
|
|
52
55
|
//# sourceMappingURL=auth-methods.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-methods.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/auth-methods.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE9E,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAA8C,CAAA;AAEvG,uEAAuE;AACvE,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC,CAKjF,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,EAAE,SAAS,eAAe,EAA8B,CAAA;AAEzF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,GAChF,eAAe,EAAE,CAkBnB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAEzG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,eAAe,EAAE,GAClC,OAAO,CAAC,eAAe,EAAE,WAAW,GAAG,gBAAgB,CAAC,GAAG,IAAI,CAKjE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,UAAU,GAAG,IAAI,CAMtF;AAED
|
|
1
|
+
{"version":3,"file":"auth-methods.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/auth-methods.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE9E,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAA8C,CAAA;AAEvG,uEAAuE;AACvE,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC,CAKjF,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,EAAE,SAAS,eAAe,EAA8B,CAAA;AAEzF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,GAChF,eAAe,EAAE,CAkBnB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAEzG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,eAAe,EAAE,GAClC,OAAO,CAAC,eAAe,EAAE,WAAW,GAAG,gBAAgB,CAAC,GAAG,IAAI,CAKjE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,UAAU,GAAG,IAAI,CAMtF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,kBAAkB,CAAC,GAAG,IAAI,EACpE,OAAO,GAAE,MAAM,GAAG,SAAgC,GACjD,OAAO,CAIT"}
|
|
@@ -45,9 +45,11 @@ function matchAuthPreset(methods) {
|
|
|
45
45
|
}
|
|
46
46
|
return null;
|
|
47
47
|
}
|
|
48
|
-
function isPasswordLoginEnabled(authConfig) {
|
|
48
|
+
function isPasswordLoginEnabled(authConfig, nodeEnv = process.env.NODE_ENV) {
|
|
49
49
|
var _a;
|
|
50
|
-
|
|
50
|
+
const declared = (_a = authConfig == null ? void 0 : authConfig.emailAndPassword) == null ? void 0 : _a.enabled;
|
|
51
|
+
if (typeof declared === "boolean") return declared;
|
|
52
|
+
return ((authConfig == null ? void 0 : authConfig.methods) ?? []).includes("email-password") || nodeEnv !== "production";
|
|
51
53
|
}
|
|
52
54
|
export {
|
|
53
55
|
AUTH_LOGIN_METHODS,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type TypedSession } from '../auth';
|
|
2
|
+
/**
|
|
3
|
+
* The request's session as the database has it now, for authorization reads: the API entry points (dual-auth,
|
|
4
|
+
* `validateAndAuthenticateRequest`), the /api/user routes, the server actions, generateEntityAPI, the /superadmin and
|
|
5
|
+
* /devtools API and page checks, and the proxy template's gate.
|
|
6
|
+
*
|
|
7
|
+
* Better Auth's cookie cache (`session.cookieCache`, on by default for 5 minutes) answers `getSession` from the
|
|
8
|
+
* signed `session_data` cookie without reading the database, so a signed-out or revoked session, or a role changed
|
|
9
|
+
* since sign-in, would keep its old answer until that cookie expires. `disableCookieCache` reads the session and its
|
|
10
|
+
* user from the database instead (one query). Reads that only display data keep the cache. A suspended account's
|
|
11
|
+
* session is no session (lib/auth/suspension.ts).
|
|
12
|
+
*/
|
|
13
|
+
export declare function getAuthorizationSession(headers: Headers): Promise<TypedSession | null>;
|
|
14
|
+
//# sourceMappingURL=authorization-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization-session.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/authorization-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAGjD;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAG5F"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { auth } from "../auth.js";
|
|
2
|
+
import { isSuspendedRole } from "./suspension.js";
|
|
3
|
+
async function getAuthorizationSession(headers) {
|
|
4
|
+
var _a;
|
|
5
|
+
const session = await auth.api.getSession({ headers, query: { disableCookieCache: true } });
|
|
6
|
+
return session && !isSuspendedRole((_a = session.user) == null ? void 0 : _a.role) ? session : null;
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
getAuthorizationSession
|
|
10
|
+
};
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { type TypedSession } from '../auth';
|
|
2
2
|
/** The request's verified session, or null; one lookup per request however many callers ask. */
|
|
3
3
|
export declare const getRequestSession: () => Promise<TypedSession | null>;
|
|
4
|
+
/**
|
|
5
|
+
* The same, read from the database instead of better-auth's cookie cache, once per request: the /superadmin and
|
|
6
|
+
* /devtools checks use it, so a sign-out or a role change counts at once (lib/auth/authorization-session.ts).
|
|
7
|
+
*/
|
|
8
|
+
export declare const getAuthorizationRequestSession: () => Promise<TypedSession | null>;
|
|
4
9
|
/** The team the session chose (the activeTeamId cookie, only when this session wrote it), or null. */
|
|
5
10
|
export declare function getSessionActiveTeamId(session: TypedSession): Promise<string | null>;
|
|
6
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-session.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/request-session.ts"],"names":[],"mappings":"AAWA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"request-session.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/request-session.ts"],"names":[],"mappings":"AAWA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAK5D,gGAAgG;AAChG,eAAO,MAAM,iBAAiB,QAAmB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAsC,CAAA;AAElH;;;GAGG;AACH,eAAO,MAAM,8BAA8B,QAAmB,OAAO,CAAC,YAAY,GAAG,IAAI,CAA8C,CAAA;AAEvI,sGAAsG;AACtG,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE1F;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,IAAI,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAK/G"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { cache } from "react";
|
|
2
2
|
import { cookies, headers } from "next/headers";
|
|
3
3
|
import { getTypedSession } from "../auth.js";
|
|
4
|
+
import { getAuthorizationSession } from "./authorization-session.js";
|
|
4
5
|
import { ACTIVE_TEAM_COOKIE, activeTeamIdForSession } from "../teams/active-team-cookie.js";
|
|
5
6
|
import { getDashboardTeamId } from "../teams/dashboard-team.js";
|
|
6
7
|
const getRequestSession = cache(async () => getTypedSession(await headers()));
|
|
8
|
+
const getAuthorizationRequestSession = cache(async () => getAuthorizationSession(await headers()));
|
|
7
9
|
async function getSessionActiveTeamId(session) {
|
|
8
10
|
var _a, _b;
|
|
9
11
|
return activeTeamIdForSession((_a = (await cookies()).get(ACTIVE_TEAM_COOKIE)) == null ? void 0 : _a.value, (_b = session.session) == null ? void 0 : _b.id);
|
|
@@ -16,6 +18,7 @@ async function getDashboardPermissionContext() {
|
|
|
16
18
|
return { userId, teamId: await getDashboardTeamId(userId, await getSessionActiveTeamId(session)) };
|
|
17
19
|
}
|
|
18
20
|
export {
|
|
21
|
+
getAuthorizationRequestSession,
|
|
19
22
|
getDashboardPermissionContext,
|
|
20
23
|
getRequestSession,
|
|
21
24
|
getSessionActiveTeamId
|
|
@@ -8,12 +8,15 @@ export interface RuntimeAuthReadinessOptions {
|
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* Server-derived flows that do not follow the login UI intent (`auth.methods`).
|
|
11
|
-
* The password backend (`
|
|
12
|
-
*
|
|
13
|
-
* not
|
|
11
|
+
* The password backend (`isPasswordLoginEnabled`) can be on without
|
|
12
|
+
* `'email-password'` in `methods` (outside production, or declared), so
|
|
13
|
+
* invitation registration and password recovery are not inferred from
|
|
14
|
+
* `availableMethods`.
|
|
14
15
|
*/
|
|
15
16
|
export interface PublicAuthCapabilities {
|
|
16
|
-
/** `/api/v1/auth/signup-with-invite`
|
|
17
|
+
/** `/api/v1/auth/signup-with-invite` creates the invited account: always, with or without a password. */
|
|
18
|
+
invitationSignup: boolean;
|
|
19
|
+
/** `/api/v1/auth/signup-with-invite` takes a password (backend switch only); otherwise the account signs in by code. */
|
|
17
20
|
invitationPasswordSignup: boolean;
|
|
18
21
|
/** `/request-password-reset` can run: password backend + usable email delivery. */
|
|
19
22
|
passwordRecovery: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-readiness.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/runtime-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAIlE,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAA;AAEpB,KAAK,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAE5D,MAAM,WAAW,2BAA2B;IAC1C,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,WAAW,GAAG,kBAAkB,CAAC,GAAG,IAAI,CAAA;IAClF,GAAG,CAAC,EAAE,kBAAkB,CAAA;CACzB;AAED
|
|
1
|
+
{"version":3,"file":"runtime-readiness.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/runtime-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAIlE,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAA;AAEpB,KAAK,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAE5D,MAAM,WAAW,2BAA2B;IAC1C,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,WAAW,GAAG,kBAAkB,CAAC,GAAG,IAAI,CAAA;IAClF,GAAG,CAAC,EAAE,kBAAkB,CAAA;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,yGAAyG;IACzG,gBAAgB,EAAE,OAAO,CAAA;IACzB,wHAAwH;IACxH,wBAAwB,EAAE,OAAO,CAAA;IACjC,mFAAmF;IACnF,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,GAAG,aAAa,CAAA;IAC/B,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,YAAY,EAAE,sBAAsB,CAAA;CACrC;AAaD,qEAAqE;AACrE,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,2BAAgC,GAAG,mBAAmB,CAEtG;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,2BAAgC,GAAG,IAAI,CAgBzF;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,2BAAgC,GAAG,mBAAmB,CAarG;AAiBD,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAE1F;AAED,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAE3F;AAmDD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA4E1B;AAED,sFAAsF;AACtF,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,EAChC,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,QAAQ,CAAC,CAGnB"}
|
|
@@ -39,11 +39,12 @@ function logAuthReadinessAtStartup(options = {}) {
|
|
|
39
39
|
function getPublicAuthReadiness(options = {}) {
|
|
40
40
|
const result = getRuntimeAuthReadiness(options);
|
|
41
41
|
const authConfig = options.authConfig === void 0 ? AUTH_CONFIG : options.authConfig;
|
|
42
|
-
const passwordBackend = isPasswordLoginEnabled(authConfig);
|
|
42
|
+
const passwordBackend = isPasswordLoginEnabled(authConfig, (options.env ?? process.env).NODE_ENV);
|
|
43
43
|
return {
|
|
44
44
|
status: result.outcome === "ready" ? "ready" : "unavailable",
|
|
45
45
|
availableMethods: result.availableMethods,
|
|
46
46
|
capabilities: {
|
|
47
|
+
invitationSignup: true,
|
|
47
48
|
invitationPasswordSignup: passwordBackend,
|
|
48
49
|
passwordRecovery: passwordBackend && isRuntimeEmailAvailable(options)
|
|
49
50
|
}
|
|
@@ -70,7 +71,7 @@ function authRoutePath(pathname) {
|
|
|
70
71
|
const marker = "/api/auth";
|
|
71
72
|
const index = pathname.lastIndexOf(marker);
|
|
72
73
|
if (index === -1) return null;
|
|
73
|
-
const suffix = pathname.slice(index + marker.length);
|
|
74
|
+
const suffix = pathname.slice(index + marker.length).replace(/\/+$/, "");
|
|
74
75
|
return suffix || "/";
|
|
75
76
|
}
|
|
76
77
|
function jsonResponse(body, status = 200) {
|
|
@@ -105,7 +106,7 @@ async function requestedSocialProvider(request) {
|
|
|
105
106
|
}
|
|
106
107
|
}
|
|
107
108
|
async function getAuthReadinessResponse(request, options = {}) {
|
|
108
|
-
var _a, _b
|
|
109
|
+
var _a, _b;
|
|
109
110
|
const pathname = new URL(request.url).pathname;
|
|
110
111
|
const route = authRoutePath(pathname);
|
|
111
112
|
if (!route) return null;
|
|
@@ -140,10 +141,10 @@ async function getAuthReadinessResponse(request, options = {}) {
|
|
|
140
141
|
return unavailableResponse(method, diagnostics, pathname);
|
|
141
142
|
}
|
|
142
143
|
}
|
|
143
|
-
if (isPasswordOperation && (
|
|
144
|
+
if (isPasswordOperation && !isPasswordLoginEnabled(authConfig, (options.env ?? process.env).NODE_ENV)) {
|
|
144
145
|
return unavailableResponse("email-password", [{
|
|
145
146
|
code: "EMAIL_PASSWORD_POLICY_DISABLED",
|
|
146
|
-
message: "Password authentication is
|
|
147
|
+
message: "Password authentication is off: auth.methods has no email-password and auth.emailAndPassword.enabled is not true."
|
|
147
148
|
}], pathname);
|
|
148
149
|
}
|
|
149
150
|
if (isPasswordEmailDeliveryOperation || isGeneralEmailDeliveryOperation) {
|
|
@@ -160,7 +161,7 @@ async function getAuthReadinessResponse(request, options = {}) {
|
|
|
160
161
|
method = "google";
|
|
161
162
|
const readiness = evaluateProvider("google", options);
|
|
162
163
|
diagnostics = readiness.diagnostics;
|
|
163
|
-
if (((
|
|
164
|
+
if (((_b = (_a = authConfig == null ? void 0 : authConfig.providers) == null ? void 0 : _a.google) == null ? void 0 : _b.enabled) === false) {
|
|
164
165
|
return unavailableResponse(method, [{
|
|
165
166
|
code: "GOOGLE_POLICY_DISABLED",
|
|
166
167
|
message: "Google authentication is disabled by auth.providers.google.enabled."
|
|
@@ -10,7 +10,8 @@ type QueryRows = (text: string, params?: unknown[]) => Promise<Array<{
|
|
|
10
10
|
}>>;
|
|
11
11
|
/**
|
|
12
12
|
* In production, logs one warning when accounts with a sample password exist.
|
|
13
|
-
* Never throws
|
|
13
|
+
* Never throws. When the query fails it logs one line with the error code or class name only
|
|
14
|
+
* (never the error object, which can carry the connection string).
|
|
14
15
|
*/
|
|
15
16
|
export declare function warnSampleAccountsAtStartup(env?: Record<string, string | undefined>, queryRows?: QueryRows): Promise<void>;
|
|
16
17
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sample-accounts.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/sample-accounts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,qVAGzB,CAAA;AAEV,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAA;AAExF
|
|
1
|
+
{"version":3,"file":"sample-accounts.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/sample-accounts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,qVAGzB,CAAA;AAEV,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAA;AAExF;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
|
@@ -13,7 +13,10 @@ async function warnSampleAccountsAtStartup(env = process.env, queryRows) {
|
|
|
13
13
|
if (row && row.count > 0) {
|
|
14
14
|
console.warn(`[auth-readiness] ${row.count} account(s) still have a sample-data password; pnpm db:migrate disables them once; if it already ran, see the CHANGELOG upgrade notes`);
|
|
15
15
|
}
|
|
16
|
-
} catch {
|
|
16
|
+
} catch (error) {
|
|
17
|
+
const safe = (value) => typeof value === "string" && /^[A-Za-z0-9_]{1,40}$/.test(value) ? value : void 0;
|
|
18
|
+
const reason = safe(error == null ? void 0 : error.code) ?? safe(error == null ? void 0 : error.name) ?? "unknown error";
|
|
19
|
+
console.warn(`[auth-readiness] could not check for sample-data passwords at startup (query failed: ${reason}); check DATABASE_URL, then run the read-only query in the 0.1.0-beta.196 CHANGELOG upgrade notes`);
|
|
17
20
|
}
|
|
18
21
|
}
|
|
19
22
|
export {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A suspended account: `users.role = 'suspended'` (allowed by `check_users_role` since migration 031). It gets no new
|
|
3
|
+
* session (the session create hook in lib/auth.ts), and its existing session and its API keys are refused where core
|
|
4
|
+
* authenticates: dual-auth, `validateAndAuthenticateRequest`, getAuthorizationSession, validateApiKey and the proxy
|
|
5
|
+
* template.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SUSPENDED_ROLE = "suspended";
|
|
8
|
+
export declare function isSuspendedRole(role: unknown): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Suspends `userId` in one statement: sets the role, deletes the user's sessions and deactivates their active API keys
|
|
11
|
+
* (`status = 'inactive'`, so the audit log keeps the rows; unsuspending does not bring them back). A superadmin is never
|
|
12
|
+
* suspended. Returns null when no user was suspended (unknown id, or a superadmin).
|
|
13
|
+
*/
|
|
14
|
+
export declare function suspendUser(userId: string, actorId: string): Promise<{
|
|
15
|
+
sessions: number;
|
|
16
|
+
apiKeys: number;
|
|
17
|
+
} | null>;
|
|
18
|
+
/** Gives a suspended user back the `member` role. Their deactivated API keys stay deactivated. Null if not suspended. */
|
|
19
|
+
export declare function unsuspendUser(userId: string, actorId: string): Promise<{
|
|
20
|
+
id: string;
|
|
21
|
+
} | null>;
|
|
22
|
+
//# sourceMappingURL=suspension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suspension.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/suspension.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,eAAO,MAAM,cAAc,cAAc,CAAA;AAEzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAEtD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAuBxH;AAED,yHAAyH;AACzH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAOnG"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { queryWithRLS } from "../db.js";
|
|
2
|
+
import { invalidateApiKeyCache } from "../api/auth.js";
|
|
3
|
+
const SUSPENDED_ROLE = "suspended";
|
|
4
|
+
function isSuspendedRole(role) {
|
|
5
|
+
return role === SUSPENDED_ROLE;
|
|
6
|
+
}
|
|
7
|
+
async function suspendUser(userId, actorId) {
|
|
8
|
+
const [result] = await queryWithRLS(
|
|
9
|
+
`WITH suspended AS (
|
|
10
|
+
UPDATE "users" SET role = '${SUSPENDED_ROLE}', "updatedAt" = NOW()
|
|
11
|
+
WHERE id = $1 AND role <> 'superadmin'
|
|
12
|
+
RETURNING id
|
|
13
|
+
), sessions AS (
|
|
14
|
+
DELETE FROM "session" WHERE "userId" IN (SELECT id FROM suspended) RETURNING id
|
|
15
|
+
), keys AS (
|
|
16
|
+
UPDATE "api_key" SET status = 'inactive'
|
|
17
|
+
WHERE "userId" IN (SELECT id FROM suspended) AND status = 'active'
|
|
18
|
+
RETURNING "keyHash"
|
|
19
|
+
)
|
|
20
|
+
SELECT (SELECT COUNT(*) FROM suspended)::int AS suspended,
|
|
21
|
+
(SELECT COUNT(*) FROM sessions)::int AS sessions,
|
|
22
|
+
COALESCE((SELECT json_agg("keyHash") FROM keys), '[]'::json) AS "keyHashes"`,
|
|
23
|
+
[userId],
|
|
24
|
+
actorId
|
|
25
|
+
);
|
|
26
|
+
if (!(result == null ? void 0 : result.suspended)) return null;
|
|
27
|
+
for (const keyHash of result.keyHashes) invalidateApiKeyCache(keyHash);
|
|
28
|
+
return { sessions: result.sessions, apiKeys: result.keyHashes.length };
|
|
29
|
+
}
|
|
30
|
+
async function unsuspendUser(userId, actorId) {
|
|
31
|
+
const [row] = await queryWithRLS(
|
|
32
|
+
`UPDATE "users" SET role = 'member', "updatedAt" = NOW() WHERE id = $1 AND role = '${SUSPENDED_ROLE}' RETURNING id`,
|
|
33
|
+
[userId],
|
|
34
|
+
actorId
|
|
35
|
+
);
|
|
36
|
+
return row ?? null;
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
SUSPENDED_ROLE,
|
|
40
|
+
isSuspendedRole,
|
|
41
|
+
suspendUser,
|
|
42
|
+
unsuspendUser
|
|
43
|
+
};
|
package/dist/lib/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAWA,OAAO,EAA0F,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAmBjI;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQlF;AAED;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnF;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyHD,eAAO,MAAM,IAAI,qEAsXf,CAAC;AAEH,MAAM,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACjD,MAAM,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,kBAAkB,EAAE,QAAQ,EAAE,CAAC;CAC/C,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAO9B"}
|
package/dist/lib/auth.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { betterAuth } from "better-auth";
|
|
2
|
-
import {
|
|
1
|
+
import { betterAuth, APIError } from "better-auth";
|
|
2
|
+
import { createPool } from "./db-pool.js";
|
|
3
3
|
import { nextCookies } from "better-auth/next-js";
|
|
4
4
|
import { emailOTP } from "better-auth/plugins";
|
|
5
5
|
import { parseSSLConfig, stripSSLParams, queryOne } from "./db.js";
|
|
@@ -44,12 +44,9 @@ const isPoolerUrl = /:6543(\/|$|\?)/.test(databaseUrl) || /pooler/i.test(databas
|
|
|
44
44
|
const connectionString = isPoolerUrl ? cleanUrl.includes("?") ? `${cleanUrl}&pgbouncer=true` : `${cleanUrl}?pgbouncer=true` : cleanUrl;
|
|
45
45
|
const AUTH_POOLS = /* @__PURE__ */ Symbol.for("nextspark.auth.pools");
|
|
46
46
|
const authPools = globalThis[AUTH_POOLS] ??= /* @__PURE__ */ new Map();
|
|
47
|
-
const pool = authPools.get(databaseUrl) ??
|
|
47
|
+
const pool = authPools.get(databaseUrl) ?? createPool("auth", {
|
|
48
48
|
connectionString,
|
|
49
|
-
ssl: parseSSLConfig(databaseUrl)
|
|
50
|
-
connectionTimeoutMillis: 1e4,
|
|
51
|
-
idleTimeoutMillis: 3e4,
|
|
52
|
-
max: 20
|
|
49
|
+
ssl: parseSSLConfig(databaseUrl)
|
|
53
50
|
});
|
|
54
51
|
authPools.set(databaseUrl, pool);
|
|
55
52
|
const sessionConfig = resolveSessionConfig(AUTH_CONFIG);
|
|
@@ -140,10 +137,9 @@ const auth = betterAuth({
|
|
|
140
137
|
}
|
|
141
138
|
},
|
|
142
139
|
emailAndPassword: {
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
// `auth.emailAndPassword.enabled: false`.
|
|
140
|
+
// On when AUTH_CONFIG.methods lists 'email-password', and outside production
|
|
141
|
+
// (seeded test users, the dev keyring). A production passwordless app opts
|
|
142
|
+
// in with `auth.emailAndPassword.enabled: true` (API logins, test users).
|
|
147
143
|
enabled: isPasswordLoginEnabled(AUTH_CONFIG),
|
|
148
144
|
requireEmailVerification: true,
|
|
149
145
|
minPasswordLength: 8,
|
|
@@ -336,16 +332,20 @@ const auth = betterAuth({
|
|
|
336
332
|
// Enforce domain restrictions on EVERY login (not just signup)
|
|
337
333
|
// @ts-expect-error — pre-existing type error, tracked in https://github.com/NextSpark-js/nextspark/issues/131
|
|
338
334
|
before: async (session) => {
|
|
339
|
-
var _a, _b, _c, _d, _e;
|
|
340
|
-
const
|
|
335
|
+
var _a, _b, _c, _d, _e, _f;
|
|
336
|
+
const owner = await pool.query("SELECT role FROM users WHERE id = $1 LIMIT 1", [session.userId]);
|
|
337
|
+
if (((_a = owner.rows[0]) == null ? void 0 : _a.role) === "suspended") {
|
|
338
|
+
throw new APIError("FORBIDDEN", { message: "This account is suspended", code: "ACCOUNT_SUSPENDED" });
|
|
339
|
+
}
|
|
340
|
+
const registrationMode = ((_c = (_b = AUTH_CONFIG) == null ? void 0 : _b.registration) == null ? void 0 : _c.mode) ?? "open";
|
|
341
341
|
if (registrationMode === "domain-restricted" || registrationMode === "domain-open") {
|
|
342
|
-
const allowedDomains = ((
|
|
342
|
+
const allowedDomains = ((_e = (_d = AUTH_CONFIG) == null ? void 0 : _d.registration) == null ? void 0 : _e.allowedDomains) ?? [];
|
|
343
343
|
if (allowedDomains.length > 0) {
|
|
344
344
|
const result = await pool.query(
|
|
345
345
|
"SELECT email FROM users WHERE id = $1 LIMIT 1",
|
|
346
346
|
[session.userId]
|
|
347
347
|
);
|
|
348
|
-
const email = (
|
|
348
|
+
const email = (_f = result.rows[0]) == null ? void 0 : _f.email;
|
|
349
349
|
if (email && !isDomainAllowed(email, allowedDomains)) {
|
|
350
350
|
console.log(`[Auth] Blocked sign-in for a user at ${email.split("@").pop()}: domain not in allowedDomains`);
|
|
351
351
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/app.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,SAAS,CAAA;AAOzD,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"app.config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/app.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,SAAS,CAAA;AAOzD,eAAO,MAAM,kBAAkB,EAAE,SA6gBhC,CAAA"}
|
|
@@ -337,14 +337,13 @@ const DEFAULT_APP_CONFIG = {
|
|
|
337
337
|
*/
|
|
338
338
|
methods: ["email-otp", "google"],
|
|
339
339
|
/**
|
|
340
|
-
* Better Auth's email + password endpoints
|
|
341
|
-
*
|
|
342
|
-
*
|
|
343
|
-
*
|
|
340
|
+
* Better Auth's email + password endpoints. Left undeclared, they follow
|
|
341
|
+
* `methods`: on when it lists 'email-password', and always outside
|
|
342
|
+
* production (seeded test users, the dev keyring). Set `enabled: true` to
|
|
343
|
+
* keep password logins (API clients, test users) in a passwordless
|
|
344
|
+
* production app, or `false` to turn them off everywhere.
|
|
344
345
|
*/
|
|
345
|
-
emailAndPassword: {
|
|
346
|
-
enabled: true
|
|
347
|
-
},
|
|
346
|
+
emailAndPassword: {},
|
|
348
347
|
/**
|
|
349
348
|
* Whether Better Auth automatically sends the verification email on signup.
|
|
350
349
|
*
|
|
@@ -532,18 +532,20 @@ export interface AuthConfig {
|
|
|
532
532
|
* auth: { methods: ['email-otp', 'email-password', 'google'] } // both, OTP first
|
|
533
533
|
* ```
|
|
534
534
|
*
|
|
535
|
-
* This
|
|
536
|
-
* endpoints
|
|
535
|
+
* This shapes the UI and the signup page, and decides whether Better Auth's
|
|
536
|
+
* password endpoints run in production (see `emailAndPassword`).
|
|
537
537
|
*/
|
|
538
538
|
methods?: AuthLoginMethod[];
|
|
539
539
|
/**
|
|
540
540
|
* Server-side switch for Better Auth's email + password endpoints
|
|
541
541
|
* (`sign-in/email`, `sign-up/email`, forget/reset/change-password).
|
|
542
542
|
*
|
|
543
|
-
* Default: `
|
|
544
|
-
*
|
|
545
|
-
*
|
|
546
|
-
*
|
|
543
|
+
* Default (undeclared): on when `methods` lists `'email-password'`, and
|
|
544
|
+
* outside production (`NODE_ENV !== 'production'`) so the dev keyring,
|
|
545
|
+
* `db:seed` users and Cypress can sign in with a password. A production app
|
|
546
|
+
* on the passwordless preset serves no password endpoint. Set
|
|
547
|
+
* `{ enabled: true }` to keep password logins (API clients, test users) in
|
|
548
|
+
* production, or `{ enabled: false }` to turn them off everywhere.
|
|
547
549
|
*/
|
|
548
550
|
emailAndPassword?: {
|
|
549
551
|
enabled?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/config/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/config/types.ts"],"names":[],"mappings":"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"}
|