@venturekit/auth 0.0.0-dev.20260701100017 → 0.0.0-dev.20260701113915
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/{migrations → dist/migrations}/vk_auth_001_verification_codes.sql +7 -4
- package/dist/server/cookies.d.ts +21 -7
- package/dist/server/cookies.d.ts.map +1 -1
- package/dist/server/cookies.js +22 -6
- package/dist/server/cookies.js.map +1 -1
- package/dist/server/forgot-password.js +0 -1
- package/dist/server/forgot-password.js.map +1 -1
- 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/dist/server/index.js.map +1 -1
- package/dist/server/middleware.d.ts +35 -0
- package/dist/server/middleware.d.ts.map +1 -1
- package/dist/server/middleware.js +50 -10
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/revoke.js +0 -1
- package/dist/server/revoke.js.map +1 -1
- package/package.json +12 -8
- package/src/migrations/vk_auth_001_verification_codes.sql +55 -0
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
-- vk_auth_001_verification_codes.sql
|
|
2
2
|
--
|
|
3
|
-
-- Owned by `@venturekit/auth`.
|
|
4
|
-
--
|
|
3
|
+
-- Owned by `@venturekit/auth`. Creates the `vk_verification_codes`
|
|
4
|
+
-- table backing `VerificationCodeStore` (used by the OTP gating on
|
|
5
|
+
-- self-service sign-up + sign-in / passwordless). The table is
|
|
6
|
+
-- `vk_`-prefixed per VentureKit's "package-owned tables are prefixed"
|
|
7
|
+
-- convention; consumer-side stores must query `vk_verification_codes`.
|
|
5
8
|
--
|
|
6
9
|
-- Rows are pre-Cognito state — created BEFORE a user exists in either
|
|
7
10
|
-- Cognito or any consumer-side `users` mirror. The `identifier` is the
|
|
@@ -31,7 +34,7 @@
|
|
|
31
34
|
-- expectation is that those projects will then leave their old
|
|
32
35
|
-- migration file in place but stop hand-maintaining the schema here.
|
|
33
36
|
|
|
34
|
-
CREATE TABLE IF NOT EXISTS
|
|
37
|
+
CREATE TABLE IF NOT EXISTS vk_verification_codes (
|
|
35
38
|
channel TEXT NOT NULL,
|
|
36
39
|
identifier TEXT NOT NULL,
|
|
37
40
|
code_hash TEXT NOT NULL,
|
|
@@ -49,4 +52,4 @@ CREATE TABLE IF NOT EXISTS verification_codes (
|
|
|
49
52
|
);
|
|
50
53
|
|
|
51
54
|
CREATE INDEX IF NOT EXISTS idx_verification_codes_expires_at
|
|
52
|
-
ON
|
|
55
|
+
ON vk_verification_codes (expires_at);
|
package/dist/server/cookies.d.ts
CHANGED
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
* - `HttpOnly` — JS in the browser cannot read these. The browser
|
|
7
7
|
* attaches them automatically when fetching with
|
|
8
8
|
* `credentials: 'include'`.
|
|
9
|
-
* - `Secure` — set when {@link CookieOptions.secure} is true
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* - `Secure` — set when {@link CookieOptions.secure} is true. Defaults to
|
|
10
|
+
* ON everywhere except explicit local dev (`VENTURE_LOCAL === 'true'`,
|
|
11
|
+
* set by `vk dev`), so production cookies are always `Secure` while
|
|
12
|
+
* localhost over plain HTTP keeps working.
|
|
12
13
|
* - `SameSite=Lax` for the id/access cookies, `SameSite=Strict` for
|
|
13
14
|
* the refresh cookie. The refresh cookie is only ever sent to the
|
|
14
15
|
* paths under {@link CookieOptions.refreshPath} (default `/auth`)
|
|
@@ -34,8 +35,8 @@ export interface SessionTokens {
|
|
|
34
35
|
}
|
|
35
36
|
export interface CookieOptions {
|
|
36
37
|
/**
|
|
37
|
-
* Emit the `Secure` flag. Defaults to
|
|
38
|
-
* `
|
|
38
|
+
* Emit the `Secure` flag. Defaults to ON unless `VENTURE_LOCAL === 'true'`
|
|
39
|
+
* (local dev, set by `vk dev`).
|
|
39
40
|
*/
|
|
40
41
|
secure?: boolean;
|
|
41
42
|
/**
|
|
@@ -48,6 +49,19 @@ export interface CookieOptions {
|
|
|
48
49
|
*/
|
|
49
50
|
refreshMaxAgeSeconds?: number;
|
|
50
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Default value for the cookie `Secure` flag.
|
|
54
|
+
*
|
|
55
|
+
* Secure is ON everywhere EXCEPT explicit local development, detected via
|
|
56
|
+
* `VENTURE_LOCAL === 'true'` (set by `vk dev`). A deployed Lambda never sets
|
|
57
|
+
* `VENTURE_LOCAL`, so production cookies always get `Secure`.
|
|
58
|
+
*
|
|
59
|
+
* This deliberately does NOT key off `NODE_ENV`: the AWS Lambda runtime does
|
|
60
|
+
* not set `NODE_ENV=production`, and the infra layer historically did not
|
|
61
|
+
* inject it, so the old `NODE_ENV === 'production'` default silently shipped
|
|
62
|
+
* session cookies WITHOUT `Secure` in production.
|
|
63
|
+
*/
|
|
64
|
+
export declare function defaultSecure(): boolean;
|
|
51
65
|
/**
|
|
52
66
|
* Build the `Set-Cookie` header values to attach to a sign-in / refresh
|
|
53
67
|
* response. Returns an array — API Gateway v2 supports multi-valued
|
|
@@ -75,8 +89,8 @@ export declare function buildClearSessionCookies(options?: CookieOptions): strin
|
|
|
75
89
|
export declare function oauthStateCookieName(provider: string): string;
|
|
76
90
|
export interface OAuthStateCookieOptions {
|
|
77
91
|
/**
|
|
78
|
-
* Emit the `Secure` flag. Defaults to
|
|
79
|
-
* `
|
|
92
|
+
* Emit the `Secure` flag. Defaults to ON unless `VENTURE_LOCAL === 'true'`
|
|
93
|
+
* (local dev, set by `vk dev`).
|
|
80
94
|
*/
|
|
81
95
|
secure?: boolean;
|
|
82
96
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/server/cookies.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/server/cookies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAC7C,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AACrD,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAIvD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAQD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAoCD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,EAAE,CAqBV;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CAY1E;AAUD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,uBAAuB,GAChC,MAAM,CAWR;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,GAAG,MAAM,CAAC,GACzD,MAAM,CAQR;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAC1C,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAef"}
|
package/dist/server/cookies.js
CHANGED
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
* - `HttpOnly` — JS in the browser cannot read these. The browser
|
|
7
7
|
* attaches them automatically when fetching with
|
|
8
8
|
* `credentials: 'include'`.
|
|
9
|
-
* - `Secure` — set when {@link CookieOptions.secure} is true
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* - `Secure` — set when {@link CookieOptions.secure} is true. Defaults to
|
|
10
|
+
* ON everywhere except explicit local dev (`VENTURE_LOCAL === 'true'`,
|
|
11
|
+
* set by `vk dev`), so production cookies are always `Secure` while
|
|
12
|
+
* localhost over plain HTTP keeps working.
|
|
12
13
|
* - `SameSite=Lax` for the id/access cookies, `SameSite=Strict` for
|
|
13
14
|
* the refresh cookie. The refresh cookie is only ever sent to the
|
|
14
15
|
* paths under {@link CookieOptions.refreshPath} (default `/auth`)
|
|
@@ -25,9 +26,24 @@ export const ID_TOKEN_COOKIE = 'vk_id_token';
|
|
|
25
26
|
export const ACCESS_TOKEN_COOKIE = 'vk_access_token';
|
|
26
27
|
export const REFRESH_TOKEN_COOKIE = 'vk_refresh_token';
|
|
27
28
|
const REFRESH_MAX_AGE_SECONDS = 30 * 24 * 60 * 60; // 30 days
|
|
29
|
+
/**
|
|
30
|
+
* Default value for the cookie `Secure` flag.
|
|
31
|
+
*
|
|
32
|
+
* Secure is ON everywhere EXCEPT explicit local development, detected via
|
|
33
|
+
* `VENTURE_LOCAL === 'true'` (set by `vk dev`). A deployed Lambda never sets
|
|
34
|
+
* `VENTURE_LOCAL`, so production cookies always get `Secure`.
|
|
35
|
+
*
|
|
36
|
+
* This deliberately does NOT key off `NODE_ENV`: the AWS Lambda runtime does
|
|
37
|
+
* not set `NODE_ENV=production`, and the infra layer historically did not
|
|
38
|
+
* inject it, so the old `NODE_ENV === 'production'` default silently shipped
|
|
39
|
+
* session cookies WITHOUT `Secure` in production.
|
|
40
|
+
*/
|
|
41
|
+
export function defaultSecure() {
|
|
42
|
+
return process.env.VENTURE_LOCAL !== 'true';
|
|
43
|
+
}
|
|
28
44
|
function resolve(opts) {
|
|
29
45
|
return {
|
|
30
|
-
secure: opts?.secure ??
|
|
46
|
+
secure: opts?.secure ?? defaultSecure(),
|
|
31
47
|
refreshPath: opts?.refreshPath ?? '/auth',
|
|
32
48
|
refreshMaxAgeSeconds: opts?.refreshMaxAgeSeconds ?? REFRESH_MAX_AGE_SECONDS,
|
|
33
49
|
};
|
|
@@ -124,7 +140,7 @@ export function oauthStateCookieName(provider) {
|
|
|
124
140
|
* ```
|
|
125
141
|
*/
|
|
126
142
|
export function buildOAuthStateCookie(provider, value, options) {
|
|
127
|
-
const secure = options?.secure ??
|
|
143
|
+
const secure = options?.secure ?? defaultSecure();
|
|
128
144
|
return buildSetCookie(oauthStateCookieName(provider), value, {
|
|
129
145
|
path: options?.path ?? '/auth',
|
|
130
146
|
maxAge: options?.maxAgeSeconds ?? OAUTH_STATE_MAX_AGE_SECONDS,
|
|
@@ -136,7 +152,7 @@ export function buildOAuthStateCookie(provider, value, options) {
|
|
|
136
152
|
* flow so a stale `state` can't be replayed.
|
|
137
153
|
*/
|
|
138
154
|
export function clearOAuthStateCookie(provider, options) {
|
|
139
|
-
const secure = options?.secure ??
|
|
155
|
+
const secure = options?.secure ?? defaultSecure();
|
|
140
156
|
return buildSetCookie(oauthStateCookieName(provider), '', { path: options?.path ?? '/auth', maxAge: 0 }, secure);
|
|
141
157
|
}
|
|
142
158
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/server/cookies.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/server/cookies.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,7 +88,6 @@ export async function forgotPassword(input, config = loadAuthServerConfig()) {
|
|
|
88
88
|
await input.onSendCode(email, code);
|
|
89
89
|
}
|
|
90
90
|
else {
|
|
91
|
-
// eslint-disable-next-line no-console
|
|
92
91
|
console.log(`[dev] Forgot-password code for ${email}: ${code} (expires in 10 min)`);
|
|
93
92
|
}
|
|
94
93
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forgot-password.js","sourceRoot":"","sources":["../../src/server/forgot-password.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,GAEtB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA+CnF,uEAAuE;AAEvE,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AACrD,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,oFAAoF;AACpF,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAG/B,CAAC;AAEJ,SAAS,SAAS,CAAC,MAAwB;IACzC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3B,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,kCAAkC;IAChD,kBAAkB,CAAC,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,uEAAuE;AAEvE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAA0B,EAC1B,SAA2B,oBAAoB,EAAE;IAEjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAExC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,8DAA8D;QAC9D,mDAAmD;QACnD,MAAM,IAAI,GAAG,wBAAwB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC5C,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE;YAC5B,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe;YACvC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"forgot-password.js","sourceRoot":"","sources":["../../src/server/forgot-password.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export { verifyAndDecode } from './verify.js';
|
|
|
44
44
|
export type { SessionTokens, CookieOptions, OAuthStateCookieOptions, } from './cookies.js';
|
|
45
45
|
export { ID_TOKEN_COOKIE, ACCESS_TOKEN_COOKIE, REFRESH_TOKEN_COOKIE, buildSessionCookies, buildClearSessionCookies, readCookieFromHeader, buildOAuthStateCookie, clearOAuthStateCookie, oauthStateCookieName, } from './cookies.js';
|
|
46
46
|
export type { CookieAuthMiddlewareOptions } from './middleware.js';
|
|
47
|
-
export { cookieAuthMiddleware, extractToken } from './middleware.js';
|
|
47
|
+
export { cookieAuthMiddleware, extractToken, defaultScopeMapper } from './middleware.js';
|
|
48
48
|
export type { FederatedAuthRoutes, FederatedAuthRoutesOptions, FederatedCallbackBody, FederatedCallbackResult, FederatedOnSignInArgs, FederatedOnSignInResult, FederatedStartBody, } from './federated-routes.js';
|
|
49
49
|
export { createFederatedAuthRoutes } from './federated-routes.js';
|
|
50
50
|
export type { FederatedProvider, FederatedProfile, FederatedProviderCredentials, SignInAsFederatedUserInput, BuildAuthorizeUrlInput, ExchangeAuthorizationCodeInput, } from './federated.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7E,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,YAAY,EACV,aAAa,EACb,aAAa,EACb,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
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
|
@@ -33,7 +33,7 @@ export { changePassword } from './change-password.js';
|
|
|
33
33
|
export { forgotPassword, confirmForgotPassword } from './forgot-password.js';
|
|
34
34
|
export { verifyAndDecode } from './verify.js';
|
|
35
35
|
export { ID_TOKEN_COOKIE, ACCESS_TOKEN_COOKIE, REFRESH_TOKEN_COOKIE, buildSessionCookies, buildClearSessionCookies, readCookieFromHeader, buildOAuthStateCookie, clearOAuthStateCookie, oauthStateCookieName, } from './cookies.js';
|
|
36
|
-
export { cookieAuthMiddleware, extractToken } from './middleware.js';
|
|
36
|
+
export { cookieAuthMiddleware, extractToken, defaultScopeMapper } from './middleware.js';
|
|
37
37
|
export { createFederatedAuthRoutes } from './federated-routes.js';
|
|
38
38
|
export { loadFederatedProviderCredentials, generateOAuthState, verifyOAuthState, buildAuthorizeUrl, exchangeAuthorizationCode, signInAsFederatedUser, } from './federated.js';
|
|
39
39
|
export { generateVerificationCode, hashVerificationCode, requestVerificationCode, verifyVerificationCode, createInMemoryVerificationCodeStore, } from './verification.js';
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOlD,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQtD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO9C,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOlD,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQtD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO9C,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAWzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAUlE,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAUxB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,mCAAmC,GACpC,MAAM,mBAAmB,CAAC"}
|
|
@@ -45,6 +45,16 @@ export interface CookieAuthMiddlewareOptions {
|
|
|
45
45
|
* tests lets you construct a middleware without touching env.
|
|
46
46
|
*/
|
|
47
47
|
config?: AuthServerConfig;
|
|
48
|
+
/**
|
|
49
|
+
* Map verified JWT claims to the scope strings the
|
|
50
|
+
* `handler({ scopes })` gate checks. Defaults to
|
|
51
|
+
* {@link defaultScopeMapper}, which unions the access-token `scope`
|
|
52
|
+
* claim with Cognito `cognito:groups` and a `custom:scopes`
|
|
53
|
+
* attribute — so id-token browser sessions (which carry no `scope`
|
|
54
|
+
* claim) can still satisfy scoped routes via group / attribute
|
|
55
|
+
* membership. Provide your own to map app-specific claims.
|
|
56
|
+
*/
|
|
57
|
+
scopeMapper?: (claims: Record<string, unknown>) => string[];
|
|
48
58
|
}
|
|
49
59
|
/**
|
|
50
60
|
* Build a `@venturekit/runtime` middleware that verifies a session JWT
|
|
@@ -73,4 +83,29 @@ export declare function cookieAuthMiddleware(options?: CookieAuthMiddlewareOptio
|
|
|
73
83
|
* {@link cookieAuthMiddleware} instead.
|
|
74
84
|
*/
|
|
75
85
|
export declare function extractToken(event: APIGatewayProxyEventV2, cookieName?: string): string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Default claims→scopes mapper.
|
|
88
|
+
*
|
|
89
|
+
* Unions three sources so BOTH access-token and id-token sessions can
|
|
90
|
+
* satisfy the `handler({ scopes })` gate:
|
|
91
|
+
* - `scope` — space-separated, present on Cognito ACCESS tokens.
|
|
92
|
+
* - `cognito:groups` — `string[]` on both id and access tokens; group
|
|
93
|
+
* names double as coarse scopes (e.g. a `cms.admin` group satisfies
|
|
94
|
+
* `scopes: ['cms.admin']`).
|
|
95
|
+
* - `custom:scopes` — a custom user-pool attribute holding a space- or
|
|
96
|
+
* comma-separated scope list; the recommended way to attach scopes
|
|
97
|
+
* to id-token browser sessions, which otherwise carry no `scope`.
|
|
98
|
+
*
|
|
99
|
+
* De-duplicates and drops empties. Override via
|
|
100
|
+
* {@link CookieAuthMiddlewareOptions.scopeMapper} for app-specific claims.
|
|
101
|
+
*
|
|
102
|
+
* # id-token vs access-token (the A2 decision)
|
|
103
|
+
* The default {@link cookieAuthMiddleware} verifies ID tokens because the
|
|
104
|
+
* browser session cookie is an id token (it carries `email` + profile).
|
|
105
|
+
* ID tokens have no OAuth `scope`, so scope gating on id-token sessions
|
|
106
|
+
* MUST come from Cognito groups or a `custom:scopes` attribute — which
|
|
107
|
+
* this mapper reads out of the box. For service-to-service callers, use
|
|
108
|
+
* `cookieAuthMiddleware({ tokenUse: 'access' })` and the `scope` claim.
|
|
109
|
+
*/
|
|
110
|
+
export declare function defaultScopeMapper(claims: Record<string, unknown>): string[];
|
|
76
111
|
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAKzD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAKzD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,2BAAgC,GACxC,UAAU,CAAC,cAAc,CAAC,CAkC5B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,sBAAsB,EAC7B,UAAU,GAAE,MAAwB,GACnC,MAAM,GAAG,IAAI,CAoBf;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,EAAE,CAiBV"}
|
|
@@ -46,6 +46,7 @@ import { loadAuthServerConfig } from './config.js';
|
|
|
46
46
|
export function cookieAuthMiddleware(options = {}) {
|
|
47
47
|
const cookieName = options.cookieName ?? ID_TOKEN_COOKIE;
|
|
48
48
|
const tokenUse = options.tokenUse ?? 'id';
|
|
49
|
+
const scopeMapper = options.scopeMapper ?? defaultScopeMapper;
|
|
49
50
|
// Resolve config lazily so a route module can import the middleware
|
|
50
51
|
// factory at file-load time without the env vars being set (tests,
|
|
51
52
|
// local type-only imports, etc.). The first actual request resolves
|
|
@@ -70,7 +71,7 @@ export function cookieAuthMiddleware(options = {}) {
|
|
|
70
71
|
...(cfg.endpoint ? { endpoint: cfg.endpoint } : {}),
|
|
71
72
|
});
|
|
72
73
|
if (claims) {
|
|
73
|
-
ctx.user = claimsToUserContext(claims);
|
|
74
|
+
ctx.user = claimsToUserContext(claims, scopeMapper);
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
return next();
|
|
@@ -103,17 +104,56 @@ export function extractToken(event, cookieName = ID_TOKEN_COOKIE) {
|
|
|
103
104
|
: (headers['cookie'] ?? headers['Cookie']);
|
|
104
105
|
return readCookieFromHeader(cookieHeader, cookieName);
|
|
105
106
|
}
|
|
106
|
-
|
|
107
|
+
/**
|
|
108
|
+
* Default claims→scopes mapper.
|
|
109
|
+
*
|
|
110
|
+
* Unions three sources so BOTH access-token and id-token sessions can
|
|
111
|
+
* satisfy the `handler({ scopes })` gate:
|
|
112
|
+
* - `scope` — space-separated, present on Cognito ACCESS tokens.
|
|
113
|
+
* - `cognito:groups` — `string[]` on both id and access tokens; group
|
|
114
|
+
* names double as coarse scopes (e.g. a `cms.admin` group satisfies
|
|
115
|
+
* `scopes: ['cms.admin']`).
|
|
116
|
+
* - `custom:scopes` — a custom user-pool attribute holding a space- or
|
|
117
|
+
* comma-separated scope list; the recommended way to attach scopes
|
|
118
|
+
* to id-token browser sessions, which otherwise carry no `scope`.
|
|
119
|
+
*
|
|
120
|
+
* De-duplicates and drops empties. Override via
|
|
121
|
+
* {@link CookieAuthMiddlewareOptions.scopeMapper} for app-specific claims.
|
|
122
|
+
*
|
|
123
|
+
* # id-token vs access-token (the A2 decision)
|
|
124
|
+
* The default {@link cookieAuthMiddleware} verifies ID tokens because the
|
|
125
|
+
* browser session cookie is an id token (it carries `email` + profile).
|
|
126
|
+
* ID tokens have no OAuth `scope`, so scope gating on id-token sessions
|
|
127
|
+
* MUST come from Cognito groups or a `custom:scopes` attribute — which
|
|
128
|
+
* this mapper reads out of the box. For service-to-service callers, use
|
|
129
|
+
* `cookieAuthMiddleware({ tokenUse: 'access' })` and the `scope` claim.
|
|
130
|
+
*/
|
|
131
|
+
export function defaultScopeMapper(claims) {
|
|
132
|
+
const out = new Set();
|
|
133
|
+
const addAll = (raw, splitter) => {
|
|
134
|
+
if (typeof raw === 'string') {
|
|
135
|
+
for (const s of raw.split(splitter))
|
|
136
|
+
if (s)
|
|
137
|
+
out.add(s);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
// Access-token scope claim (space-separated).
|
|
141
|
+
addAll(claims['scope'], / +/);
|
|
142
|
+
// Cognito groups (array on id + access tokens).
|
|
143
|
+
const groups = claims['cognito:groups'];
|
|
144
|
+
if (Array.isArray(groups)) {
|
|
145
|
+
for (const g of groups)
|
|
146
|
+
if (typeof g === 'string' && g)
|
|
147
|
+
out.add(g);
|
|
148
|
+
}
|
|
149
|
+
// custom:scopes attribute (space- or comma-separated).
|
|
150
|
+
addAll(claims['custom:scopes'], /[\s,]+/);
|
|
151
|
+
return [...out];
|
|
152
|
+
}
|
|
153
|
+
function claimsToUserContext(claims, scopeMapper = defaultScopeMapper) {
|
|
107
154
|
const sub = claims['sub'];
|
|
108
155
|
const email = claims['email'];
|
|
109
|
-
|
|
110
|
-
// carry scopes; if the app uses ID tokens, scope-based route gating
|
|
111
|
-
// should be backed by `custom:*` role/scope attributes on the user
|
|
112
|
-
// pool and mapped in a downstream mapper.
|
|
113
|
-
const scopeClaim = claims['scope'];
|
|
114
|
-
const scopes = typeof scopeClaim === 'string'
|
|
115
|
-
? scopeClaim.split(' ').filter(Boolean)
|
|
116
|
-
: [];
|
|
156
|
+
const scopes = scopeMapper(claims);
|
|
117
157
|
return {
|
|
118
158
|
id: typeof sub === 'string' ? sub : '',
|
|
119
159
|
email: typeof email === 'string' ? email : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"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"}
|
package/dist/server/revoke.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../src/server/revoke.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,SAA2B,oBAAoB,EAAE;IAEjD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CACf,IAAI,kBAAkB,CAAC;YACrB,QAAQ,EAAE,MAAM,CAAC,WAAW;YAC5B,KAAK,EAAE,YAAY;SACpB,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../src/server/revoke.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,SAA2B,oBAAoB,EAAE;IAEjD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CACf,IAAI,kBAAkB,CAAC;YACrB,QAAQ,EAAE,MAAM,CAAC,WAAW;YAC5B,KAAK,EAAE,YAAY;SACpB,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAEb,OAAO,CAAC,IAAI,CAAC,kEAAkE,EAAE,GAAG,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,26 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venturekit/auth",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.20260701113915",
|
|
4
4
|
"description": "Authentication and authorization for VentureKit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
8
|
"files": [
|
|
9
9
|
"dist",
|
|
10
|
-
"migrations"
|
|
10
|
+
"src/migrations/*.sql"
|
|
11
11
|
],
|
|
12
12
|
"repository": {
|
|
13
13
|
"type": "git",
|
|
14
|
-
"url": "https://github.com/venturekit-dev/venturekit.
|
|
14
|
+
"url": "https://github.com/venturekit-dev/venturekit.git",
|
|
15
15
|
"directory": "packages/auth"
|
|
16
16
|
},
|
|
17
|
+
"homepage": "https://venturekit.dev",
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/venturekit-dev/venturekit/issues"
|
|
20
|
+
},
|
|
17
21
|
"publishConfig": {
|
|
18
22
|
"registry": "https://registry.npmjs.org",
|
|
19
23
|
"access": "public"
|
|
20
24
|
},
|
|
21
25
|
"license": "Apache-2.0",
|
|
22
26
|
"vk": {
|
|
23
|
-
"migrations": "migrations"
|
|
27
|
+
"migrations": "src/migrations"
|
|
24
28
|
},
|
|
25
29
|
"exports": {
|
|
26
30
|
".": {
|
|
@@ -33,13 +37,13 @@
|
|
|
33
37
|
}
|
|
34
38
|
},
|
|
35
39
|
"dependencies": {
|
|
36
|
-
"@venturekit/core": "0.0.0-dev.
|
|
40
|
+
"@venturekit/core": "0.0.0-dev.20260701113915",
|
|
37
41
|
"@aws-sdk/client-cognito-identity-provider": "^3.1068.0",
|
|
38
42
|
"@aws-sdk/client-secrets-manager": "^3.1068.0",
|
|
39
43
|
"aws-jwt-verify": "^4.0.1"
|
|
40
44
|
},
|
|
41
45
|
"peerDependencies": {
|
|
42
|
-
"@venturekit/runtime": "0.0.0-dev.
|
|
46
|
+
"@venturekit/runtime": "0.0.0-dev.20260701113915"
|
|
43
47
|
},
|
|
44
48
|
"peerDependenciesMeta": {
|
|
45
49
|
"@venturekit/runtime": {
|
|
@@ -47,13 +51,13 @@
|
|
|
47
51
|
}
|
|
48
52
|
},
|
|
49
53
|
"devDependencies": {
|
|
50
|
-
"@venturekit/runtime": "0.0.0-dev.
|
|
54
|
+
"@venturekit/runtime": "0.0.0-dev.20260701113915",
|
|
51
55
|
"@types/aws-lambda": "^8.10.131",
|
|
52
56
|
"@types/node": "^25.6.0",
|
|
53
57
|
"typescript": "^5.3.0"
|
|
54
58
|
},
|
|
55
59
|
"scripts": {
|
|
56
|
-
"build": "tsc",
|
|
60
|
+
"build": "tsc && node -e \"require('fs').cpSync('src/migrations','dist/migrations',{recursive:true})\"",
|
|
57
61
|
"dev": "tsc --watch",
|
|
58
62
|
"clean": "rm -rf dist"
|
|
59
63
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
-- vk_auth_001_verification_codes.sql
|
|
2
|
+
--
|
|
3
|
+
-- Owned by `@venturekit/auth`. Creates the `vk_verification_codes`
|
|
4
|
+
-- table backing `VerificationCodeStore` (used by the OTP gating on
|
|
5
|
+
-- self-service sign-up + sign-in / passwordless). The table is
|
|
6
|
+
-- `vk_`-prefixed per VentureKit's "package-owned tables are prefixed"
|
|
7
|
+
-- convention; consumer-side stores must query `vk_verification_codes`.
|
|
8
|
+
--
|
|
9
|
+
-- Rows are pre-Cognito state — created BEFORE a user exists in either
|
|
10
|
+
-- Cognito or any consumer-side `users` mirror. The `identifier` is the
|
|
11
|
+
-- email or E.164 phone number the code was sent to; `channel` is the
|
|
12
|
+
-- delivery surface.
|
|
13
|
+
--
|
|
14
|
+
-- Storage shape:
|
|
15
|
+
-- - `code_hash` is SHA-256 of the plaintext code (hex). Plaintext
|
|
16
|
+
-- never lands in the DB so a future leak still requires brute
|
|
17
|
+
-- force against the (short) TTL.
|
|
18
|
+
-- - `expires_at` is the wall-clock cutoff after which the
|
|
19
|
+
-- `verifyVerificationCode` helper deletes the row and surfaces
|
|
20
|
+
-- `verification_failed`.
|
|
21
|
+
-- - `attempts` is incremented on every wrong-code submission;
|
|
22
|
+
-- once it reaches `max_attempts` the row is deleted (forces the
|
|
23
|
+
-- user to request a fresh code).
|
|
24
|
+
--
|
|
25
|
+
-- Channel typing: stored as TEXT + CHECK rather than a Postgres enum
|
|
26
|
+
-- so this migration does not depend on `@venturekit/notify`'s
|
|
27
|
+
-- `notify_channel` enum (auth must be usable without notify — e.g. a
|
|
28
|
+
-- project that ships its own delivery layer). Add new values here when
|
|
29
|
+
-- the auth package learns to dispatch over them.
|
|
30
|
+
--
|
|
31
|
+
-- Idempotent: uses `CREATE TABLE IF NOT EXISTS` so projects that
|
|
32
|
+
-- previously created the table from their own migration (with a
|
|
33
|
+
-- compatible shape) can adopt this one without dropping data. The
|
|
34
|
+
-- expectation is that those projects will then leave their old
|
|
35
|
+
-- migration file in place but stop hand-maintaining the schema here.
|
|
36
|
+
|
|
37
|
+
CREATE TABLE IF NOT EXISTS vk_verification_codes (
|
|
38
|
+
channel TEXT NOT NULL,
|
|
39
|
+
identifier TEXT NOT NULL,
|
|
40
|
+
code_hash TEXT NOT NULL,
|
|
41
|
+
expires_at TIMESTAMPTZ NOT NULL,
|
|
42
|
+
attempts INT NOT NULL DEFAULT 0,
|
|
43
|
+
max_attempts INT NOT NULL DEFAULT 5,
|
|
44
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
45
|
+
PRIMARY KEY (channel, identifier),
|
|
46
|
+
CONSTRAINT verification_codes_channel_chk
|
|
47
|
+
CHECK (channel IN ('email', 'whatsapp', 'sms')),
|
|
48
|
+
CONSTRAINT verification_codes_attempts_chk
|
|
49
|
+
CHECK (attempts >= 0),
|
|
50
|
+
CONSTRAINT verification_codes_max_attempts_chk
|
|
51
|
+
CHECK (max_attempts >= 1)
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
CREATE INDEX IF NOT EXISTS idx_verification_codes_expires_at
|
|
55
|
+
ON vk_verification_codes (expires_at);
|