@revealui/auth 0.5.5 → 0.5.6
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/dist/server/admission-waitlist.d.ts +10 -0
- package/dist/server/admission-waitlist.d.ts.map +1 -1
- package/dist/server/admission-waitlist.js +23 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +11 -17
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/package.json +2 -2
|
@@ -29,6 +29,16 @@ export declare function getAdmissionWaitlistByTokenAnyStatus(rawToken: string):
|
|
|
29
29
|
export declare function markAdmissionWaitlistConverted(id: string, now?: Date): Promise<void>;
|
|
30
30
|
/** Mask email for public status (anti-enumeration still requires valid token). */
|
|
31
31
|
export declare function maskAdmissionEmail(email: string): string;
|
|
32
|
+
/** True when a waitlist row is claim-dead and should drain to `expired`. */
|
|
33
|
+
export declare function shouldExpireWaitlistRow(row: {
|
|
34
|
+
status: string;
|
|
35
|
+
expiresAt: Date | null;
|
|
36
|
+
}, now: Date): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* GAP-256 PR-8 — mark stale pending/invited rows expired.
|
|
39
|
+
* Flag gating lives in the cron runner (ADMISSION_WAITLIST_DRAIN_ENABLED).
|
|
40
|
+
*/
|
|
41
|
+
export declare function expireStaleAdmissionWaitlist(now?: Date): Promise<number>;
|
|
32
42
|
/** Position estimate among pending (best-effort; null on failure). */
|
|
33
43
|
export declare function estimateAdmissionWaitlistPosition(id: string): Promise<number | null>;
|
|
34
44
|
//# sourceMappingURL=admission-waitlist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admission-waitlist.d.ts","sourceRoot":"","sources":["../../src/server/admission-waitlist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,KAAK,oBAAoB,EAAqB,MAAM,qBAAqB,CAAC;AAKnF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AA0BD,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,8BAA8B,GACrC,OAAO,CAAC,8BAA8B,CAAC,CA8FzC;AAED,iEAAiE;AACjE,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAqBtC;AAED,wBAAsB,oCAAoC,CACxD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAYtC;AAED,wBAAsB,8BAA8B,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1F;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED,sEAAsE;AACtE,wBAAsB,iCAAiC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2B1F"}
|
|
1
|
+
{"version":3,"file":"admission-waitlist.d.ts","sourceRoot":"","sources":["../../src/server/admission-waitlist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,KAAK,oBAAoB,EAAqB,MAAM,qBAAqB,CAAC;AAKnF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AA0BD,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,8BAA8B,GACrC,OAAO,CAAC,8BAA8B,CAAC,CA8FzC;AAED,iEAAiE;AACjE,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAqBtC;AAED,wBAAsB,oCAAoC,CACxD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAYtC;AAED,wBAAsB,8BAA8B,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1F;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CACrC,GAAG,EAAE;IACH,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB,EACD,GAAG,EAAE,IAAI,GACR,OAAO,CAIT;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAe9E;AAED,sEAAsE;AACtE,wBAAsB,iCAAiC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2B1F"}
|
|
@@ -7,7 +7,7 @@ import { createHash, randomBytes } from 'node:crypto';
|
|
|
7
7
|
import { logger } from '@revealui/core/observability/logger';
|
|
8
8
|
import { getClient } from '@revealui/db';
|
|
9
9
|
import { admissionWaitlist } from '@revealui/db/schema';
|
|
10
|
-
import { and, count, eq, gt, inArray, isNull, or, sql } from 'drizzle-orm';
|
|
10
|
+
import { and, count, eq, gt, inArray, isNotNull, isNull, lt, or, sql } from 'drizzle-orm';
|
|
11
11
|
const TOKEN_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
12
12
|
export function hashAdmissionToken(raw) {
|
|
13
13
|
return createHash('sha256').update(raw).digest('hex');
|
|
@@ -182,6 +182,28 @@ export function maskAdmissionEmail(email) {
|
|
|
182
182
|
const visible = local.slice(0, 1);
|
|
183
183
|
return `${visible}***@${domain}`;
|
|
184
184
|
}
|
|
185
|
+
/** True when a waitlist row is claim-dead and should drain to `expired`. */
|
|
186
|
+
export function shouldExpireWaitlistRow(row, now) {
|
|
187
|
+
if (row.status !== 'pending' && row.status !== 'invited')
|
|
188
|
+
return false;
|
|
189
|
+
if (row.expiresAt == null)
|
|
190
|
+
return false;
|
|
191
|
+
return row.expiresAt.getTime() < now.getTime();
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* GAP-256 PR-8 — mark stale pending/invited rows expired.
|
|
195
|
+
* Flag gating lives in the cron runner (ADMISSION_WAITLIST_DRAIN_ENABLED).
|
|
196
|
+
*/
|
|
197
|
+
export async function expireStaleAdmissionWaitlist(now) {
|
|
198
|
+
const db = getClient();
|
|
199
|
+
const cutoff = now ?? new Date();
|
|
200
|
+
const rows = await db
|
|
201
|
+
.update(admissionWaitlist)
|
|
202
|
+
.set({ status: 'expired' })
|
|
203
|
+
.where(and(inArray(admissionWaitlist.status, ['pending', 'invited']), isNotNull(admissionWaitlist.expiresAt), lt(admissionWaitlist.expiresAt, cutoff)))
|
|
204
|
+
.returning();
|
|
205
|
+
return rows.length;
|
|
206
|
+
}
|
|
185
207
|
/** Position estimate among pending (best-effort; null on failure). */
|
|
186
208
|
export async function estimateAdmissionWaitlistPosition(id) {
|
|
187
209
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAQ,MAAM,aAAa,CAAC;AAQpE;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,OAAO,CAAC,YAAY,CAAC,CAsQvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAoBtD;AAED;;;;;;;;GAQG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,YAAY,CAAC,CAwOvB"}
|
package/dist/server/auth.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Sign in and sign up functionality with password hashing.
|
|
5
5
|
*/
|
|
6
6
|
import { createHash, randomBytes } from 'node:crypto';
|
|
7
|
+
import { isHostedDeployment } from '@revealui/core/deployment-mode';
|
|
7
8
|
import { logger } from '@revealui/core/observability/logger';
|
|
8
9
|
import { getClient } from '@revealui/db/client';
|
|
9
10
|
import { accountMemberships, accounts, oauthAccounts, users } from '@revealui/db/schema';
|
|
@@ -15,8 +16,6 @@ import { validatePasswordStrength } from './password-validation.js';
|
|
|
15
16
|
import { ensureAccountOwnerPlatformAdmin } from './platform-roles.js';
|
|
16
17
|
import { checkRateLimit } from './rate-limit.js';
|
|
17
18
|
import { createSession, rotateSession } from './session.js';
|
|
18
|
-
/** Grace period after signup during which unverified users can still sign in (24 hours) */
|
|
19
|
-
const EMAIL_VERIFICATION_GRACE_PERIOD_MS = 24 * 60 * 60 * 1000;
|
|
20
19
|
/**
|
|
21
20
|
* Sign in with email and password
|
|
22
21
|
*
|
|
@@ -166,20 +165,16 @@ export async function signIn(email, password, options) {
|
|
|
166
165
|
: String(clearAttemptsError),
|
|
167
166
|
});
|
|
168
167
|
}
|
|
169
|
-
//
|
|
170
|
-
//
|
|
171
|
-
// (
|
|
172
|
-
//
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
reason: 'email_not_verified',
|
|
180
|
-
error: 'Please verify your email address before signing in.',
|
|
181
|
-
};
|
|
182
|
-
}
|
|
168
|
+
// Hosted SaaS requires a verified email before password sign-in.
|
|
169
|
+
// Self-host / Forge keeps sign-in for unverified bootstrap admins
|
|
170
|
+
// (onInit first owner often has no mailer). A 24h hosted grace window
|
|
171
|
+
// let brand-new studio accounts skip verification (smoke 2026-09-02).
|
|
172
|
+
if (!user.emailVerified && isHostedDeployment(process.env)) {
|
|
173
|
+
return {
|
|
174
|
+
success: false,
|
|
175
|
+
reason: 'email_not_verified',
|
|
176
|
+
error: 'Please verify your email address before signing in.',
|
|
177
|
+
};
|
|
183
178
|
}
|
|
184
179
|
// Check if MFA is enabled - if so, return early and require TOTP verification
|
|
185
180
|
if (user.mfaEnabled) {
|
|
@@ -470,7 +465,6 @@ export async function signUp(email, password, name, options) {
|
|
|
470
465
|
// this if it fails here, so a transient error never blocks signup. Skipped on
|
|
471
466
|
// self-hosted (Forge) deployments — single-tenant, no per-user accounts
|
|
472
467
|
// (GAP-260 P4-1: REVEALUI_DEPLOYMENT_MODE, fallback private-key presence).
|
|
473
|
-
const { isHostedDeployment } = await import('@revealui/core/deployment-mode');
|
|
474
468
|
if (isHostedDeployment(process.env)) {
|
|
475
469
|
try {
|
|
476
470
|
const accountId = crypto.randomUUID();
|
package/dist/server/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Inspired by Better Auth and Neon Auth patterns.
|
|
6
6
|
*/
|
|
7
7
|
export type { SignInResult, SignUpResult } from '../types.js';
|
|
8
|
-
export { type EnqueueAdmissionWaitlistParams, type EnqueueAdmissionWaitlistResult, enqueueAdmissionWaitlist, estimateAdmissionWaitlistPosition, generateAdmissionToken, getAdmissionWaitlistByToken, getAdmissionWaitlistByTokenAnyStatus, hashAdmissionToken, markAdmissionWaitlistConverted, maskAdmissionEmail, } from './admission-waitlist.js';
|
|
8
|
+
export { type EnqueueAdmissionWaitlistParams, type EnqueueAdmissionWaitlistResult, enqueueAdmissionWaitlist, estimateAdmissionWaitlistPosition, expireStaleAdmissionWaitlist, generateAdmissionToken, getAdmissionWaitlistByToken, getAdmissionWaitlistByTokenAnyStatus, hashAdmissionToken, markAdmissionWaitlistConverted, maskAdmissionEmail, shouldExpireWaitlistRow, } from './admission-waitlist.js';
|
|
9
9
|
export { auditAccountLocked, auditLoginFailure, auditLoginSuccess, auditMfaDisabled, auditMfaEnabled, auditPasswordChange, auditPasswordReset, auditSessionRevoked, auditSsoConfigChanged, auditSsoLoginFailure, auditSsoLoginSuccess, type SsoAuditContext, } from './audit-bridge.js';
|
|
10
10
|
export { isSignupAllowed, signIn, signUp } from './auth.js';
|
|
11
11
|
export { clearFailedAttempts, configureBruteForce, getFailedAttemptCount, isAccountLocked, recordFailedAttempt, resetBruteForceConfig, } from './brute-force.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EACL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACnC,wBAAwB,EACxB,iCAAiC,EACjC,sBAAsB,EACtB,2BAA2B,EAC3B,oCAAoC,EACpC,kBAAkB,EAClB,8BAA8B,EAC9B,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Inspired by Better Auth and Neon Auth patterns.
|
|
6
6
|
*/
|
|
7
7
|
// GAP-256 admission waitlist (NOT marketing waitlist)
|
|
8
|
-
export { enqueueAdmissionWaitlist, estimateAdmissionWaitlistPosition, generateAdmissionToken, getAdmissionWaitlistByToken, getAdmissionWaitlistByTokenAnyStatus, hashAdmissionToken, markAdmissionWaitlistConverted, maskAdmissionEmail, } from './admission-waitlist.js';
|
|
8
|
+
export { enqueueAdmissionWaitlist, estimateAdmissionWaitlistPosition, expireStaleAdmissionWaitlist, generateAdmissionToken, getAdmissionWaitlistByToken, getAdmissionWaitlistByTokenAnyStatus, hashAdmissionToken, markAdmissionWaitlistConverted, maskAdmissionEmail, shouldExpireWaitlistRow, } from './admission-waitlist.js';
|
|
9
9
|
// Audit bridge
|
|
10
10
|
export { auditAccountLocked, auditLoginFailure, auditLoginSuccess, auditMfaDisabled, auditMfaEnabled, auditPasswordChange, auditPasswordReset, auditSessionRevoked, auditSsoConfigChanged, auditSsoLoginFailure, auditSsoLoginSuccess, } from './audit-bridge.js';
|
|
11
11
|
// NOTE (GAP-338): the audit storage boundary lives at the DEDICATED subpath
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revealui/auth",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.6",
|
|
4
4
|
"description": "Database-backed session auth for Hono and Next.js — bcrypt, OAuth, brute-force protection, rate limiting, password reset. Ships with RevealUI.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"auth",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"zod": "^4.4.3",
|
|
19
19
|
"@revealui/config": "0.6.0",
|
|
20
20
|
"@revealui/contracts": "0.8.3",
|
|
21
|
-
"@revealui/core": "0.14.
|
|
21
|
+
"@revealui/core": "0.14.2",
|
|
22
22
|
"@revealui/db": "0.10.0",
|
|
23
23
|
"@revealui/security": "0.8.0"
|
|
24
24
|
},
|