@growth-labs/auth 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +4 -2
- package/dist/middleware/auth.js.map +1 -1
- package/dist/options.d.ts +24 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +9 -1
- package/dist/options.js.map +1 -1
- package/dist/renderers.d.ts +36 -1
- package/dist/renderers.d.ts.map +1 -1
- package/dist/renderers.js +38 -4
- package/dist/renderers.js.map +1 -1
- package/dist/routes/api/code-request.d.ts +3 -0
- package/dist/routes/api/code-request.d.ts.map +1 -0
- package/dist/routes/api/code-request.js +13 -0
- package/dist/routes/api/code-request.js.map +1 -0
- package/dist/routes/api/code-verify.d.ts +3 -0
- package/dist/routes/api/code-verify.d.ts.map +1 -0
- package/dist/routes/api/code-verify.js +16 -0
- package/dist/routes/api/code-verify.js.map +1 -0
- package/dist/routes/api/password-reset-confirm.d.ts +3 -0
- package/dist/routes/api/password-reset-confirm.d.ts.map +1 -0
- package/dist/routes/api/password-reset-confirm.js +16 -0
- package/dist/routes/api/password-reset-confirm.js.map +1 -0
- package/dist/routes/api/password-reset-request.d.ts +3 -0
- package/dist/routes/api/password-reset-request.d.ts.map +1 -0
- package/dist/routes/api/password-reset-request.js +12 -0
- package/dist/routes/api/password-reset-request.js.map +1 -0
- package/dist/routes/api/password-verify.d.ts +3 -0
- package/dist/routes/api/password-verify.d.ts.map +1 -0
- package/dist/routes/api/password-verify.js +16 -0
- package/dist/routes/api/password-verify.js.map +1 -0
- package/dist/routes/api/shared.d.ts +11 -0
- package/dist/routes/api/shared.d.ts.map +1 -0
- package/dist/routes/api/shared.js +30 -0
- package/dist/routes/api/shared.js.map +1 -0
- package/dist/routes/flow.d.ts +9 -0
- package/dist/routes/flow.d.ts.map +1 -0
- package/dist/routes/flow.js +24 -0
- package/dist/routes/flow.js.map +1 -0
- package/dist/routes/login.d.ts.map +1 -1
- package/dist/routes/login.js +7 -1
- package/dist/routes/login.js.map +1 -1
- package/dist/routes/password.d.ts +3 -0
- package/dist/routes/password.d.ts.map +1 -0
- package/dist/routes/password.js +21 -0
- package/dist/routes/password.js.map +1 -0
- package/dist/routes/verify-code.d.ts +3 -0
- package/dist/routes/verify-code.d.ts.map +1 -0
- package/dist/routes/verify-code.js +22 -0
- package/dist/routes/verify-code.js.map +1 -0
- package/dist/server.d.ts +42 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +124 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +27 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/issuer.d.ts +3 -0
- package/dist/utils/issuer.d.ts.map +1 -0
- package/dist/utils/issuer.js +4 -0
- package/dist/utils/issuer.js.map +1 -0
- package/dist/utils/openauth.d.ts.map +1 -1
- package/dist/utils/openauth.js +5 -2
- package/dist/utils/openauth.js.map +1 -1
- package/dist/utils/pkce.d.ts +1 -0
- package/dist/utils/pkce.d.ts.map +1 -1
- package/dist/utils/pkce.js +5 -2
- package/dist/utils/pkce.js.map +1 -1
- package/package.json +8 -4
- package/dist/vite-plugin.d.ts +0 -4
- package/dist/vite-plugin.d.ts.map +0 -1
- package/dist/vite-plugin.js +0 -18
- package/dist/vite-plugin.js.map +0 -1
package/README.md
CHANGED
|
@@ -12,7 +12,8 @@ OpenAuth **client** package for Astro + Cloudflare. Verifies JWTs, manages sessi
|
|
|
12
12
|
import auth from '@growth-labs/auth'
|
|
13
13
|
|
|
14
14
|
auth({
|
|
15
|
-
issuer: 'https://auth.fedweek.com', // OpenAuth issuer URL
|
|
15
|
+
issuer: 'https://auth.fedweek.com', // Browser-facing OpenAuth issuer URL
|
|
16
|
+
issuerInternal: 'https://auth-internal.example.com', // Optional back-channel issuer URL
|
|
16
17
|
clientId: 'fedweek-prod', // Optional; defaults to request hostname
|
|
17
18
|
clientSecret: 'AUTH_CLIENT_SECRET', // Worker secret binding name, resolved at request time
|
|
18
19
|
resource: 'https://fedweek.com', // RFC 8707 resource/audience URI
|
|
@@ -22,6 +23,8 @@ auth({
|
|
|
22
23
|
loginPath: '/login', // Redirect target for unauthenticated users
|
|
23
24
|
logoutRedirect: '/',
|
|
24
25
|
callbackPath: '/api/auth/callback',
|
|
26
|
+
passwordPath: '/password', // Local branded password form when renderers.password is set
|
|
27
|
+
verifyCodePath: '/verify-code', // Local branded magic-code form when renderers.verifyCode is set
|
|
25
28
|
providers: ['google', 'password', 'email-code'],
|
|
26
29
|
loginPage: {
|
|
27
30
|
title: 'Sign in',
|
|
@@ -32,6 +35,8 @@ auth({
|
|
|
32
35
|
// Optional all-or-nothing UI overrides per auth surface.
|
|
33
36
|
// Flow logic, cookies, callback exchange, and issuer URLs remain package-owned.
|
|
34
37
|
login: { module: '/src/auth/auth-render', export: 'renderLogin' },
|
|
38
|
+
password: { module: '/src/auth/auth-render', export: 'renderPassword' },
|
|
39
|
+
verifyCode: { module: '/src/auth/auth-render', export: 'renderVerifyCode' },
|
|
35
40
|
},
|
|
36
41
|
accessTokenMaxAge: 900, // 15 min (seconds)
|
|
37
42
|
refreshTokenMaxAge: 2592000, // 30 days
|
|
@@ -42,28 +47,60 @@ auth({
|
|
|
42
47
|
|
|
43
48
|
**Middleware** (runs on every request):
|
|
44
49
|
1. Reads `{cookiePrefix}_at` and `{cookiePrefix}_rt` cookies
|
|
45
|
-
2. Verifies access token JWT against issuer's JWKS (`{issuer}/.well-known/jwks.json`, cached in Worker memory)
|
|
50
|
+
2. Verifies access token JWT against the internal issuer's JWKS (`{issuerInternal ?? issuer}/.well-known/jwks.json`, cached in Worker memory)
|
|
46
51
|
3. If expired but refresh token valid → silent refresh, set new cookies
|
|
47
52
|
4. Populates `context.locals.user` as `User | null`
|
|
48
53
|
5. If path matches `gatedPaths` and `user` is null → redirect to `loginPath`
|
|
49
54
|
|
|
50
55
|
**Routes:**
|
|
51
56
|
- `GET /login` — provider-selection page; `?provider=google|password|email-code` starts auth locally and redirects into the issuer's generic `/authorize` endpoint
|
|
52
|
-
- `GET /logout` — clears cookies, revokes refresh token at issuer, redirects
|
|
57
|
+
- `GET /logout` — clears cookies, revokes refresh token at the internal issuer, redirects
|
|
53
58
|
- `GET /api/auth/callback` — OAuth callback handler (PKCE code exchange, cookie setting)
|
|
54
|
-
- `GET /forgot-password` / `GET /reset-password` — local redirects to issuer-owned password UI
|
|
59
|
+
- `GET /forgot-password` / `GET /reset-password` — local redirects to issuer-owned password UI unless renderers are configured
|
|
60
|
+
- `GET /password` / `GET /verify-code` — local branded password and magic-code views when `renderers.password` / `renderers.verifyCode` are configured
|
|
61
|
+
- `POST /api/auth/password/verify`, `/api/auth/code/request`, `/api/auth/code/verify`, `/api/auth/password/reset/request`, `/api/auth/password/reset/confirm` — package-owned back-channel form handlers that call the issuer JSON API through `issuerInternal`
|
|
55
62
|
|
|
56
63
|
## Branded Auth UI
|
|
57
64
|
|
|
58
65
|
Consumers can supply `renderers.login`, `renderers.forgotPassword`, and
|
|
59
|
-
`renderers.resetPassword` in `auth()` options.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
`
|
|
66
|
+
`renderers.resetPassword` in `auth()` options. Consumers that want every
|
|
67
|
+
password and magic-code step to stay on their own domain can also supply
|
|
68
|
+
`renderers.password` and `renderers.verifyCode`. Each renderer receives a
|
|
69
|
+
typed payload from `@growth-labs/auth/types` with package-built local form
|
|
70
|
+
actions, provider or issuer URLs, and brand values, then returns either an
|
|
71
|
+
HTML string or a `Response`.
|
|
72
|
+
|
|
73
|
+
Renderers replace only GET form views. Callback, logout, token exchange,
|
|
74
|
+
cookies, PKCE/state, and issuer communication remain package-owned. When
|
|
75
|
+
`renderers.password` or `renderers.verifyCode` is configured, `/login`
|
|
76
|
+
links those provider buttons to the local branded routes; otherwise it
|
|
77
|
+
keeps the existing issuer-hosted OpenAuth UI flow.
|
|
78
|
+
|
|
79
|
+
Forgot/reset renderers receive both the historical issuer URL and the new
|
|
80
|
+
local API form target. Use `passwordResetRequestUrl` and
|
|
81
|
+
`passwordResetConfirmUrl` for consumer-hosted reset forms.
|
|
82
|
+
|
|
83
|
+
## Server SDK
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import { authClient } from '@growth-labs/auth/server'
|
|
87
|
+
|
|
88
|
+
const client = authClient(context)
|
|
89
|
+
|
|
90
|
+
await client.password.verify({ email, password })
|
|
91
|
+
await client.code.request({ email })
|
|
92
|
+
await client.code.verify({ email, code })
|
|
93
|
+
await client.password.reset.request({ email })
|
|
94
|
+
await client.password.reset.confirm({ token, newPassword })
|
|
95
|
+
```
|
|
63
96
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
97
|
+
`authClient(context)` reads the resolved integration config and Worker
|
|
98
|
+
bindings, posts to `{issuerInternal ?? issuer}/api/v1/auth/*`, resolves
|
|
99
|
+
`clientSecret` binding names at request time, sends `client_secret_basic`
|
|
100
|
+
for confidential clients, and includes `client_id`, `redirect_uri`, PKCE
|
|
101
|
+
`code_challenge`, `state`, and `resource` for authorization-code issuing
|
|
102
|
+
calls. The package-owned POST routes use this SDK directly; consumers can
|
|
103
|
+
also use it from custom server routes.
|
|
67
104
|
|
|
68
105
|
## Using `context.locals.user`
|
|
69
106
|
|
|
@@ -116,10 +153,10 @@ internal package-test helper and is not exported from
|
|
|
116
153
|
|
|
117
154
|
## OAuth Flow Summary
|
|
118
155
|
|
|
119
|
-
1. User clicks a provider on the local login page → browser hits `/login?provider=...`
|
|
156
|
+
1. User clicks a provider on the local login page → browser hits `/login?provider=...` or a local branded `/password` / `/verify-code` route when that renderer is configured
|
|
120
157
|
2. The local `/login` start route stores PKCE/state/redirect/provider cookies and redirects to `{issuer}/authorize?provider=...`; configured `resource` is sent as the RFC 8707 resource indicator
|
|
121
|
-
3.
|
|
122
|
-
4.
|
|
158
|
+
3. For consumer-hosted password or magic-code flows, package-owned POST routes call `{issuerInternal ?? issuer}/api/v1/auth/*` and redirect to `/api/auth/callback?code=...&state=...`
|
|
159
|
+
4. Issuer authenticates or issues a JSON authorization code → callback exchanges code at `{issuerInternal ?? issuer}/token` via PKCE, sends `Authorization: Basic base64(client_id:client_secret)` when `clientSecret` is configured, includes `resource`, reads `properties.isNewUser` from the JWT payload with fallback to top-level `isNewUser` for legacy issuers, uses the `{cookiePrefix}_provider` auth-flow cookie set at login start for provider attribution, sets session cookies, sets `gl_id` when `GL_IDENTITY_SECRET` is configured, and redirects to the original page
|
|
123
160
|
|
|
124
161
|
## Signed Identity Cookie
|
|
125
162
|
|
|
@@ -160,12 +197,13 @@ in their app.
|
|
|
160
197
|
- Virtual module: `virtual:growth-labs/auth/config` (slash, not hyphen)
|
|
161
198
|
- Cookie names: `{cookiePrefix}_at`, `{cookiePrefix}_rt`, `{cookiePrefix}_pkce`, `{cookiePrefix}_state`, `{cookiePrefix}_redirect`, `{cookiePrefix}_provider`, `gl_id`
|
|
162
199
|
- PKCE flow with `code_verifier` / `code_challenge` (S256); `{cookiePrefix}_pkce` is scoped to `callbackPath`
|
|
200
|
+
- `issuer` is browser-facing; optional `issuerInternal` is used for token exchange, silent refresh, JWT verification/JWKS lookup, and revocation. If omitted, `issuerInternal` falls back to `issuer`.
|
|
163
201
|
- Confidential OAuth clients use `client_secret_basic` on token exchange and refresh when `clientSecret` is configured. Prefer a Worker secret binding name such as `AUTH_CLIENT_SECRET`; runtime code resolves that binding before calling the issuer.
|
|
164
202
|
- RFC 8707 `resource` is sent on authorize, token exchange, and refresh when configured
|
|
165
203
|
- `email-code` is a client-side alias for the issuer's OpenAuth `code` provider
|
|
166
204
|
- CSRF state parameter verified on callback
|
|
167
205
|
- Access-token user claims live under `payload.properties.*`; the client falls back to top-level `payload.email`, `payload.name`, `payload.image`, and `payload.isNewUser` for legacy issuers
|
|
168
|
-
- Forgot/reset password routes
|
|
206
|
+
- Forgot/reset password routes can remain issuer-owned redirects or use renderer-provided local API form targets
|
|
169
207
|
- Branded auth screens use `renderers`, not consumer-local shadow routes
|
|
170
208
|
- No `aud` claim validation in this package — single client per issuer assumed
|
|
171
209
|
- `.astro` component files ship as source, not compiled
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,UAAU,gBAAgB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE;QACN,oBAAoB,EAAE,CAAC,MAAM,EAAE;YAC9B,aAAa,EAAE,CAAC,IAAI,EAAE;gBAAE,UAAU,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAA;aAAE,KAAK,IAAI,CAAA;YAC5E,WAAW,EAAE,CAAC,IAAI,EAAE;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,UAAU,EAAE,MAAM,CAAC;gBAAC,SAAS,CAAC,EAAE,OAAO,CAAA;aAAE,KAAK,IAAI,CAAA;YACzF,YAAY,EAAE,CAAC,MAAM,EAAE;gBACtB,IAAI,CAAC,EAAE;oBAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;iBAAE,CAAA;aAC/D,KAAK,IAAI,CAAA;SACV,KAAK,IAAI,CAAA;KACV,CAAA;CACD;AAQD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAuBjE;AAWD,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,UAAU,gBAAgB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE;QACN,oBAAoB,EAAE,CAAC,MAAM,EAAE;YAC9B,aAAa,EAAE,CAAC,IAAI,EAAE;gBAAE,UAAU,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAA;aAAE,KAAK,IAAI,CAAA;YAC5E,WAAW,EAAE,CAAC,IAAI,EAAE;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,UAAU,EAAE,MAAM,CAAC;gBAAC,SAAS,CAAC,EAAE,OAAO,CAAA;aAAE,KAAK,IAAI,CAAA;YACzF,YAAY,EAAE,CAAC,MAAM,EAAE;gBACtB,IAAI,CAAC,EAAE;oBAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;iBAAE,CAAA;aAC/D,KAAK,IAAI,CAAA;SACV,KAAK,IAAI,CAAA;KACV,CAAA;CACD;AAQD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAuBjE;AAWD,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,CAyGvE"}
|
package/dist/index.js
CHANGED
|
@@ -89,6 +89,47 @@ export default function auth(userOptions) {
|
|
|
89
89
|
entrypoint: resolveEntrypoint('./routes/reset-password'),
|
|
90
90
|
prerender: false,
|
|
91
91
|
});
|
|
92
|
+
injectRoute({
|
|
93
|
+
pattern: options.passwordVerifyPath,
|
|
94
|
+
entrypoint: resolveEntrypoint('./routes/api/password-verify'),
|
|
95
|
+
prerender: false,
|
|
96
|
+
});
|
|
97
|
+
injectRoute({
|
|
98
|
+
pattern: options.passwordResetRequestPath,
|
|
99
|
+
entrypoint: resolveEntrypoint('./routes/api/password-reset-request'),
|
|
100
|
+
prerender: false,
|
|
101
|
+
});
|
|
102
|
+
injectRoute({
|
|
103
|
+
pattern: options.passwordResetConfirmPath,
|
|
104
|
+
entrypoint: resolveEntrypoint('./routes/api/password-reset-confirm'),
|
|
105
|
+
prerender: false,
|
|
106
|
+
});
|
|
107
|
+
if (options.renderers.password) {
|
|
108
|
+
injectRoute({
|
|
109
|
+
pattern: options.passwordPath,
|
|
110
|
+
entrypoint: resolveEntrypoint('./routes/password'),
|
|
111
|
+
prerender: false,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (options.providers.includes('email-code')) {
|
|
116
|
+
injectRoute({
|
|
117
|
+
pattern: options.codeRequestPath,
|
|
118
|
+
entrypoint: resolveEntrypoint('./routes/api/code-request'),
|
|
119
|
+
prerender: false,
|
|
120
|
+
});
|
|
121
|
+
injectRoute({
|
|
122
|
+
pattern: options.codeVerifyPath,
|
|
123
|
+
entrypoint: resolveEntrypoint('./routes/api/code-verify'),
|
|
124
|
+
prerender: false,
|
|
125
|
+
});
|
|
126
|
+
if (options.renderers.verifyCode) {
|
|
127
|
+
injectRoute({
|
|
128
|
+
pattern: options.verifyCodePath,
|
|
129
|
+
entrypoint: resolveEntrypoint('./routes/verify-code'),
|
|
130
|
+
prerender: false,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
92
133
|
}
|
|
93
134
|
},
|
|
94
135
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAOA,wBAAsB,SAAS,CAC9B,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EACxE,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAkEnB"}
|
package/dist/middleware/auth.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { getConfig } from '../config-store.js';
|
|
2
2
|
import { resolveClientSecret } from '../utils/client-secret.js';
|
|
3
3
|
import { getCookie, setTokenCookies } from '../utils/cookies.js';
|
|
4
|
+
import { resolveInternalIssuer } from '../utils/issuer.js';
|
|
4
5
|
import { refreshTokens, verifyAccessToken } from '../utils/tokens.js';
|
|
5
6
|
export async function onRequest(context, next) {
|
|
6
7
|
const options = getConfig();
|
|
8
|
+
const issuer = resolveInternalIssuer(options);
|
|
7
9
|
const { request } = context;
|
|
8
10
|
// 1. Read tokens from cookies
|
|
9
11
|
const accessToken = getCookie(request, `${options.cookiePrefix}_at`);
|
|
@@ -12,7 +14,7 @@ export async function onRequest(context, next) {
|
|
|
12
14
|
let user = null;
|
|
13
15
|
let refreshed = null;
|
|
14
16
|
if (accessToken) {
|
|
15
|
-
const verified = await verifyAccessToken(
|
|
17
|
+
const verified = await verifyAccessToken(issuer, accessToken);
|
|
16
18
|
if (verified) {
|
|
17
19
|
user = {
|
|
18
20
|
id: verified.sub,
|
|
@@ -25,7 +27,7 @@ export async function onRequest(context, next) {
|
|
|
25
27
|
if (!user && refreshToken) {
|
|
26
28
|
const clientId = options.clientId || context.url.hostname;
|
|
27
29
|
const clientSecret = resolveClientSecret(options.clientSecret);
|
|
28
|
-
refreshed = await refreshTokens(
|
|
30
|
+
refreshed = await refreshTokens(issuer, refreshToken, clientId, clientSecret, options.resource);
|
|
29
31
|
if (refreshed) {
|
|
30
32
|
user = {
|
|
31
33
|
id: refreshed.claims.sub,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAErE,MAAM,CAAC,KAAK,UAAU,SAAS,CAC9B,OAAwE,EACxE,IAA6B;IAE7B,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAE3B,8BAA8B;IAC9B,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,YAAY,KAAK,CAAC,CAAA;IACpE,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,YAAY,KAAK,CAAC,CAAA;IAErE,6BAA6B;IAC7B,IAAI,IAAI,GAAgB,IAAI,CAAA;IAC5B,IAAI,SAAS,GAA8C,IAAI,CAAA;IAE/D,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAErE,MAAM,CAAC,KAAK,UAAU,SAAS,CAC9B,OAAwE,EACxE,IAA6B;IAE7B,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAE3B,8BAA8B;IAC9B,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,YAAY,KAAK,CAAC,CAAA;IACpE,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,YAAY,KAAK,CAAC,CAAA;IAErE,6BAA6B;IAC7B,IAAI,IAAI,GAAgB,IAAI,CAAA;IAC5B,IAAI,SAAS,GAA8C,IAAI,CAAA;IAE/D,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAC7D,IAAI,QAAQ,EAAE,CAAC;YACd,IAAI,GAAG;gBACN,EAAE,EAAE,QAAQ,CAAC,GAAG;gBAChB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;gBAC3B,SAAS,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;aACjC,CAAA;QACF,CAAC;IACF,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;QACzD,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QAC9D,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC/F,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,GAAG;gBACN,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG;gBACxB,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK;gBAC7B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI;gBACnC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI;aACzC,CAAA;QACF,CAAC;IACF,CAAC;IAED,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;IAE1B,0BAA0B;IAC1B,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,GAAG,CACvB,GAAG,OAAO,CAAC,SAAS,aAAa,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAC3E,OAAO,CAAC,GAAG,CAAC,MAAM,CAClB,CAAA;QACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAA;IACnD,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAA;IAE7B,+DAA+D;IAC/D,IAAI,SAAS,EAAE,CAAC;QACf,MAAM,gBAAgB,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;YACpD,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;SACtC,CAAC,CAAA;QACF,eAAe,CAAC,gBAAgB,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,YAAY,CAAC,CAAA;QACzF,OAAO,gBAAgB,CAAA;IACxB,CAAC;IAED,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,UAAoB;IAC1D,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QAClC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,6BAA6B;YACjE,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;QACD,OAAO,QAAQ,KAAK,OAAO,CAAA;IAC5B,CAAC,CAAC,CAAA;AACH,CAAC"}
|
package/dist/options.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import type { AuthRenderers } from './types.js';
|
|
3
3
|
export declare const authOptionsSchema: z.ZodObject<{
|
|
4
4
|
issuer: z.ZodString;
|
|
5
|
+
issuerInternal: z.ZodOptional<z.ZodString>;
|
|
5
6
|
clientId: z.ZodOptional<z.ZodString>;
|
|
6
7
|
clientSecret: z.ZodOptional<z.ZodString>;
|
|
7
8
|
resource: z.ZodOptional<z.ZodString>;
|
|
@@ -13,8 +14,15 @@ export declare const authOptionsSchema: z.ZodObject<{
|
|
|
13
14
|
loginPath: z.ZodDefault<z.ZodString>;
|
|
14
15
|
logoutRedirect: z.ZodDefault<z.ZodString>;
|
|
15
16
|
callbackPath: z.ZodDefault<z.ZodString>;
|
|
17
|
+
passwordPath: z.ZodDefault<z.ZodString>;
|
|
18
|
+
verifyCodePath: z.ZodDefault<z.ZodString>;
|
|
16
19
|
forgotPasswordPath: z.ZodDefault<z.ZodString>;
|
|
17
20
|
resetPasswordPath: z.ZodDefault<z.ZodString>;
|
|
21
|
+
passwordVerifyPath: z.ZodDefault<z.ZodString>;
|
|
22
|
+
codeRequestPath: z.ZodDefault<z.ZodString>;
|
|
23
|
+
codeVerifyPath: z.ZodDefault<z.ZodString>;
|
|
24
|
+
passwordResetRequestPath: z.ZodDefault<z.ZodString>;
|
|
25
|
+
passwordResetConfirmPath: z.ZodDefault<z.ZodString>;
|
|
18
26
|
providers: z.ZodDefault<z.ZodArray<z.ZodEnum<["google", "password", "email-code"]>, "many">>;
|
|
19
27
|
loginPage: z.ZodDefault<z.ZodObject<{
|
|
20
28
|
title: z.ZodDefault<z.ZodString>;
|
|
@@ -39,8 +47,15 @@ export declare const authOptionsSchema: z.ZodObject<{
|
|
|
39
47
|
loginPath: string;
|
|
40
48
|
logoutRedirect: string;
|
|
41
49
|
callbackPath: string;
|
|
50
|
+
passwordPath: string;
|
|
51
|
+
verifyCodePath: string;
|
|
42
52
|
forgotPasswordPath: string;
|
|
43
53
|
resetPasswordPath: string;
|
|
54
|
+
passwordVerifyPath: string;
|
|
55
|
+
codeRequestPath: string;
|
|
56
|
+
codeVerifyPath: string;
|
|
57
|
+
passwordResetRequestPath: string;
|
|
58
|
+
passwordResetConfirmPath: string;
|
|
44
59
|
providers: ("google" | "password" | "email-code")[];
|
|
45
60
|
loginPage: {
|
|
46
61
|
title: string;
|
|
@@ -48,6 +63,7 @@ export declare const authOptionsSchema: z.ZodObject<{
|
|
|
48
63
|
logoUrl?: string | undefined;
|
|
49
64
|
};
|
|
50
65
|
renderers: AuthRenderers;
|
|
66
|
+
issuerInternal?: string | undefined;
|
|
51
67
|
clientId?: string | undefined;
|
|
52
68
|
clientSecret?: string | undefined;
|
|
53
69
|
resource?: string | undefined;
|
|
@@ -55,6 +71,7 @@ export declare const authOptionsSchema: z.ZodObject<{
|
|
|
55
71
|
}, {
|
|
56
72
|
issuer: string;
|
|
57
73
|
cookiePrefix: string;
|
|
74
|
+
issuerInternal?: string | undefined;
|
|
58
75
|
clientId?: string | undefined;
|
|
59
76
|
clientSecret?: string | undefined;
|
|
60
77
|
resource?: string | undefined;
|
|
@@ -65,8 +82,15 @@ export declare const authOptionsSchema: z.ZodObject<{
|
|
|
65
82
|
loginPath?: string | undefined;
|
|
66
83
|
logoutRedirect?: string | undefined;
|
|
67
84
|
callbackPath?: string | undefined;
|
|
85
|
+
passwordPath?: string | undefined;
|
|
86
|
+
verifyCodePath?: string | undefined;
|
|
68
87
|
forgotPasswordPath?: string | undefined;
|
|
69
88
|
resetPasswordPath?: string | undefined;
|
|
89
|
+
passwordVerifyPath?: string | undefined;
|
|
90
|
+
codeRequestPath?: string | undefined;
|
|
91
|
+
codeVerifyPath?: string | undefined;
|
|
92
|
+
passwordResetRequestPath?: string | undefined;
|
|
93
|
+
passwordResetConfirmPath?: string | undefined;
|
|
70
94
|
providers?: ("google" | "password" | "email-code")[] | undefined;
|
|
71
95
|
loginPage?: {
|
|
72
96
|
title?: string | undefined;
|
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiD5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
|
package/dist/options.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export const authOptionsSchema = z.object({
|
|
3
|
-
// ───
|
|
3
|
+
// ─── Issuer URLs ───
|
|
4
4
|
issuer: z.string().url(),
|
|
5
|
+
issuerInternal: z.string().url().optional(),
|
|
5
6
|
// ─── Client identity ───
|
|
6
7
|
clientId: z.string().optional(),
|
|
7
8
|
clientSecret: z.string().optional(),
|
|
@@ -17,8 +18,15 @@ export const authOptionsSchema = z.object({
|
|
|
17
18
|
loginPath: z.string().default('/login'),
|
|
18
19
|
logoutRedirect: z.string().default('/'),
|
|
19
20
|
callbackPath: z.string().default('/api/auth/callback'),
|
|
21
|
+
passwordPath: z.string().default('/password'),
|
|
22
|
+
verifyCodePath: z.string().default('/verify-code'),
|
|
20
23
|
forgotPasswordPath: z.string().default('/forgot-password'),
|
|
21
24
|
resetPasswordPath: z.string().default('/reset-password'),
|
|
25
|
+
passwordVerifyPath: z.string().default('/api/auth/password/verify'),
|
|
26
|
+
codeRequestPath: z.string().default('/api/auth/code/request'),
|
|
27
|
+
codeVerifyPath: z.string().default('/api/auth/code/verify'),
|
|
28
|
+
passwordResetRequestPath: z.string().default('/api/auth/password/reset/request'),
|
|
29
|
+
passwordResetConfirmPath: z.string().default('/api/auth/password/reset/confirm'),
|
|
22
30
|
// ─── Providers ───
|
|
23
31
|
providers: z
|
|
24
32
|
.array(z.enum(['google', 'password', 'email-code']))
|
package/dist/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
package/dist/renderers.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AuthRendererBrand, AuthRendererResult, ForgotPasswordRendererPayload, LoginRendererPayload, ResetPasswordRendererPayload, ResolvedAuthRenderers } from './types.js';
|
|
1
|
+
import type { AuthRendererBrand, AuthRendererResult, ForgotPasswordRendererPayload, LoginRendererPayload, PasswordRendererPayload, ResetPasswordRendererPayload, ResolvedAuthRenderers, VerifyCodeRendererPayload } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Look up the bundled renderer for a surface. After 0.3.7 the lookup is
|
|
4
4
|
* build-time only — renderers are resolved into the virtual module by the
|
|
@@ -24,11 +24,15 @@ export declare function loginRendererPayload(options: {
|
|
|
24
24
|
logoUrl?: string;
|
|
25
25
|
};
|
|
26
26
|
loginPath: string;
|
|
27
|
+
passwordPath: string;
|
|
28
|
+
verifyCodePath: string;
|
|
27
29
|
providers: string[];
|
|
28
30
|
}, data: {
|
|
29
31
|
redirectPath: string;
|
|
30
32
|
error: string | null;
|
|
31
33
|
reset: string | null;
|
|
34
|
+
useLocalPassword?: boolean;
|
|
35
|
+
useLocalVerifyCode?: boolean;
|
|
32
36
|
}): LoginRendererPayload;
|
|
33
37
|
export declare function forgotPasswordRendererPayload(options: {
|
|
34
38
|
loginPage: {
|
|
@@ -37,6 +41,7 @@ export declare function forgotPasswordRendererPayload(options: {
|
|
|
37
41
|
logoUrl?: string;
|
|
38
42
|
};
|
|
39
43
|
loginPath: string;
|
|
44
|
+
passwordResetRequestPath: string;
|
|
40
45
|
}, data: {
|
|
41
46
|
forgotPasswordUrl: string;
|
|
42
47
|
error: string | null;
|
|
@@ -49,9 +54,39 @@ export declare function resetPasswordRendererPayload(options: {
|
|
|
49
54
|
logoUrl?: string;
|
|
50
55
|
};
|
|
51
56
|
loginPath: string;
|
|
57
|
+
passwordResetConfirmPath: string;
|
|
52
58
|
}, data: {
|
|
53
59
|
resetPasswordUrl: string;
|
|
54
60
|
error: string | null;
|
|
55
61
|
token: string | null;
|
|
56
62
|
}): ResetPasswordRendererPayload;
|
|
63
|
+
export declare function passwordRendererPayload(options: {
|
|
64
|
+
loginPage: {
|
|
65
|
+
title: string;
|
|
66
|
+
brandName?: string;
|
|
67
|
+
logoUrl?: string;
|
|
68
|
+
};
|
|
69
|
+
loginPath: string;
|
|
70
|
+
forgotPasswordPath: string;
|
|
71
|
+
passwordVerifyPath: string;
|
|
72
|
+
}, data: {
|
|
73
|
+
email: string | null;
|
|
74
|
+
error: string | null;
|
|
75
|
+
redirectPath: string;
|
|
76
|
+
}): PasswordRendererPayload;
|
|
77
|
+
export declare function verifyCodeRendererPayload(options: {
|
|
78
|
+
loginPage: {
|
|
79
|
+
title: string;
|
|
80
|
+
brandName?: string;
|
|
81
|
+
logoUrl?: string;
|
|
82
|
+
};
|
|
83
|
+
loginPath: string;
|
|
84
|
+
codeRequestPath: string;
|
|
85
|
+
codeVerifyPath: string;
|
|
86
|
+
}, data: {
|
|
87
|
+
email: string | null;
|
|
88
|
+
error: string | null;
|
|
89
|
+
sent: string | null;
|
|
90
|
+
redirectPath: string;
|
|
91
|
+
}): VerifyCodeRendererPayload;
|
|
57
92
|
//# sourceMappingURL=renderers.d.ts.map
|
package/dist/renderers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../src/renderers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,6BAA6B,EAC7B,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,EACrB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,qBAAqB,EAChE,OAAO,EAAE,CAAC,GACR,qBAAqB,CAAC,CAAC,CAAC,GAAG,SAAS,CAEtC;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQtF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACtC,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAClE,GAAG,iBAAiB,CAMpB;AAED,wBAAgB,oBAAoB,CACnC,OAAO,EAAE;IACR,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClE,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,CAAA;CACnB,EACD,IAAI,EAAE;IACL,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../src/renderers.ts"],"names":[],"mappings":"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"}
|
package/dist/renderers.js
CHANGED
|
@@ -28,12 +28,21 @@ export function rendererBrand(options) {
|
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
export function loginRendererPayload(options, data) {
|
|
31
|
-
const
|
|
31
|
+
const makeLoginStartUrl = (provider) => `${options.loginPath}?provider=${encodeURIComponent(provider)}&redirect=${encodeURIComponent(data.redirectPath)}`;
|
|
32
|
+
const makeSurfaceUrl = (path) => `${path}?redirect=${encodeURIComponent(data.redirectPath)}`;
|
|
32
33
|
return {
|
|
33
34
|
providerUrls: {
|
|
34
|
-
google: options.providers.includes('google') ?
|
|
35
|
-
password: options.providers.includes('password')
|
|
36
|
-
|
|
35
|
+
google: options.providers.includes('google') ? makeLoginStartUrl('google') : undefined,
|
|
36
|
+
password: options.providers.includes('password')
|
|
37
|
+
? data.useLocalPassword
|
|
38
|
+
? makeSurfaceUrl(options.passwordPath)
|
|
39
|
+
: makeLoginStartUrl('password')
|
|
40
|
+
: undefined,
|
|
41
|
+
emailCode: options.providers.includes('email-code')
|
|
42
|
+
? data.useLocalVerifyCode
|
|
43
|
+
? makeSurfaceUrl(options.verifyCodePath)
|
|
44
|
+
: makeLoginStartUrl('email-code')
|
|
45
|
+
: undefined,
|
|
37
46
|
},
|
|
38
47
|
errorCode: data.error ?? undefined,
|
|
39
48
|
reset: data.reset ? true : undefined,
|
|
@@ -44,6 +53,7 @@ export function loginRendererPayload(options, data) {
|
|
|
44
53
|
export function forgotPasswordRendererPayload(options, data) {
|
|
45
54
|
return {
|
|
46
55
|
forgotPasswordUrl: data.forgotPasswordUrl,
|
|
56
|
+
passwordResetRequestUrl: options.passwordResetRequestPath,
|
|
47
57
|
errorCode: data.error ?? undefined,
|
|
48
58
|
sent: data.sent ? true : undefined,
|
|
49
59
|
loginUrl: options.loginPath,
|
|
@@ -53,10 +63,34 @@ export function forgotPasswordRendererPayload(options, data) {
|
|
|
53
63
|
export function resetPasswordRendererPayload(options, data) {
|
|
54
64
|
return {
|
|
55
65
|
resetPasswordUrl: data.resetPasswordUrl,
|
|
66
|
+
passwordResetConfirmUrl: options.passwordResetConfirmPath,
|
|
56
67
|
errorCode: data.error ?? undefined,
|
|
57
68
|
token: data.token ?? undefined,
|
|
58
69
|
loginUrl: options.loginPath,
|
|
59
70
|
brand: rendererBrand(options),
|
|
60
71
|
};
|
|
61
72
|
}
|
|
73
|
+
export function passwordRendererPayload(options, data) {
|
|
74
|
+
return {
|
|
75
|
+
passwordVerifyUrl: options.passwordVerifyPath,
|
|
76
|
+
forgotPasswordUrl: options.forgotPasswordPath,
|
|
77
|
+
email: data.email ?? undefined,
|
|
78
|
+
errorCode: data.error ?? undefined,
|
|
79
|
+
redirect: data.redirectPath,
|
|
80
|
+
loginUrl: options.loginPath,
|
|
81
|
+
brand: rendererBrand(options),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function verifyCodeRendererPayload(options, data) {
|
|
85
|
+
return {
|
|
86
|
+
codeRequestUrl: options.codeRequestPath,
|
|
87
|
+
codeVerifyUrl: options.codeVerifyPath,
|
|
88
|
+
email: data.email ?? undefined,
|
|
89
|
+
errorCode: data.error ?? undefined,
|
|
90
|
+
sent: data.sent ? true : undefined,
|
|
91
|
+
redirect: data.redirectPath,
|
|
92
|
+
loginUrl: options.loginPath,
|
|
93
|
+
brand: rendererBrand(options),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
62
96
|
//# sourceMappingURL=renderers.js.map
|
package/dist/renderers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../src/renderers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../src/renderers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-request.d.ts","sourceRoot":"","sources":["../../../src/routes/api/code-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,YAAY,EAIjB,MAAM,aAAa,CAAA;AAEpB,wBAAsB,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmBnE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { authClient, getConfig, readForm, readFormString, statusRedirect, } from './shared.js';
|
|
2
|
+
export async function POST(context) {
|
|
3
|
+
const options = getConfig();
|
|
4
|
+
if (!options.providers.includes('email-code')) {
|
|
5
|
+
return new Response('Not found', { status: 404 });
|
|
6
|
+
}
|
|
7
|
+
const form = await readForm(context);
|
|
8
|
+
const email = await readFormString(form, 'email');
|
|
9
|
+
const redirect = form.get('redirect')?.toString();
|
|
10
|
+
const result = await authClient(context).code.request({ email });
|
|
11
|
+
return statusRedirect(context, result, options.verifyCodePath, { email, sent: '1', redirect }, options.verifyCodePath, { email, redirect });
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=code-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-request.js","sourceRoot":"","sources":["../../../src/routes/api/code-request.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,SAAS,EAET,QAAQ,EACR,cAAc,EACd,cAAc,GACd,MAAM,aAAa,CAAA;AAEpB,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAqB;IAC/C,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;IACjD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAEhE,OAAO,cAAc,CACpB,OAAO,EACP,MAAM,EACN,OAAO,CAAC,cAAc,EACtB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,EAC9B,OAAO,CAAC,cAAc,EACtB,EAAE,KAAK,EAAE,QAAQ,EAAE,CACnB,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-verify.d.ts","sourceRoot":"","sources":["../../../src/routes/api/code-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,YAAY,EAGjB,MAAM,aAAa,CAAA;AAEpB,wBAAsB,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAenE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { authClient, callbackRedirect, getConfig, readForm, readFormString, } from './shared.js';
|
|
2
|
+
export async function POST(context) {
|
|
3
|
+
const options = getConfig();
|
|
4
|
+
if (!options.providers.includes('email-code')) {
|
|
5
|
+
return new Response('Not found', { status: 404 });
|
|
6
|
+
}
|
|
7
|
+
const form = await readForm(context);
|
|
8
|
+
const email = await readFormString(form, 'email');
|
|
9
|
+
const code = await readFormString(form, 'code');
|
|
10
|
+
const result = await authClient(context).code.verify({ email, code });
|
|
11
|
+
return callbackRedirect(context, result, options.verifyCodePath, {
|
|
12
|
+
email,
|
|
13
|
+
redirect: form.get('redirect')?.toString(),
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=code-verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-verify.js","sourceRoot":"","sources":["../../../src/routes/api/code-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,SAAS,EAET,QAAQ,EACR,cAAc,GACd,MAAM,aAAa,CAAA;AAEpB,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAqB;IAC/C,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAErE,OAAO,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE;QAChE,KAAK;QACL,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE;KAC1C,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-reset-confirm.d.ts","sourceRoot":"","sources":["../../../src/routes/api/password-reset-confirm.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,YAAY,EAIjB,MAAM,aAAa,CAAA;AAEpB,wBAAsB,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsBnE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { authClient, getConfig, readForm, readFormString, statusRedirect, } from './shared.js';
|
|
2
|
+
export async function POST(context) {
|
|
3
|
+
const options = getConfig();
|
|
4
|
+
if (!options.providers.includes('password')) {
|
|
5
|
+
return new Response('Not found', { status: 404 });
|
|
6
|
+
}
|
|
7
|
+
const form = await readForm(context);
|
|
8
|
+
const token = await readFormString(form, 'token');
|
|
9
|
+
const password = await readFormString(form, 'password', { trim: false });
|
|
10
|
+
const result = await authClient(context).password.reset.confirm({
|
|
11
|
+
token,
|
|
12
|
+
newPassword: password,
|
|
13
|
+
});
|
|
14
|
+
return statusRedirect(context, result, options.loginPath, { reset: 'success' }, options.resetPasswordPath, { token });
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=password-reset-confirm.js.map
|