@growth-labs/auth 0.3.4 → 0.3.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/README.md +30 -10
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +7 -9
- package/dist/middleware/auth.js.map +1 -1
- package/dist/options.d.ts +4 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +2 -0
- package/dist/options.js.map +1 -1
- package/dist/renderers.d.ts +50 -0
- package/dist/renderers.d.ts.map +1 -0
- package/dist/renderers.js +53 -0
- package/dist/renderers.js.map +1 -0
- package/dist/routes/forgot-password.d.ts.map +1 -1
- package/dist/routes/forgot-password.js +9 -0
- package/dist/routes/forgot-password.js.map +1 -1
- package/dist/routes/login.d.ts.map +1 -1
- package/dist/routes/login.js +12 -6
- package/dist/routes/login.js.map +1 -1
- package/dist/routes/reset-password.d.ts.map +1 -1
- package/dist/routes/reset-password.js +9 -0
- package/dist/routes/reset-password.js.map +1 -1
- package/dist/types.d.ts +52 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/tokens.d.ts +1 -1
- package/dist/utils/tokens.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,6 +25,11 @@ auth({
|
|
|
25
25
|
brandName: 'FEDweek',
|
|
26
26
|
logoUrl: 'https://media.fedweek.com/logos/header.png',
|
|
27
27
|
},
|
|
28
|
+
renderers: {
|
|
29
|
+
// Optional all-or-nothing UI overrides per auth surface.
|
|
30
|
+
// Flow logic, cookies, callback exchange, and issuer URLs remain package-owned.
|
|
31
|
+
login: async (payload) => `<main>${payload.brand.title}</main>`,
|
|
32
|
+
},
|
|
28
33
|
accessTokenMaxAge: 900, // 15 min (seconds)
|
|
29
34
|
refreshTokenMaxAge: 2592000, // 30 days
|
|
30
35
|
})
|
|
@@ -36,8 +41,8 @@ auth({
|
|
|
36
41
|
1. Reads `{cookiePrefix}_at` and `{cookiePrefix}_rt` cookies
|
|
37
42
|
2. Verifies access token JWT against issuer's JWKS (`{issuer}/.well-known/jwks.json`, cached in Worker memory)
|
|
38
43
|
3. If expired but refresh token valid → silent refresh, set new cookies
|
|
39
|
-
4. Populates `context.locals.user` as `
|
|
40
|
-
5. If path matches `gatedPaths` and user
|
|
44
|
+
4. Populates `context.locals.user` as `User | null`
|
|
45
|
+
5. If path matches `gatedPaths` and `user` is null → redirect to `loginPath`
|
|
41
46
|
|
|
42
47
|
**Routes:**
|
|
43
48
|
- `GET /login` — provider-selection page; `?provider=google|password|email-code` starts auth locally and redirects into the issuer's generic `/authorize` endpoint
|
|
@@ -45,15 +50,27 @@ auth({
|
|
|
45
50
|
- `GET /api/auth/callback` — OAuth callback handler (PKCE code exchange, cookie setting)
|
|
46
51
|
- `GET /forgot-password` / `GET /reset-password` — local redirects to issuer-owned password UI
|
|
47
52
|
|
|
53
|
+
## Branded Auth UI
|
|
54
|
+
|
|
55
|
+
Consumers can supply `renderers.login`, `renderers.forgotPassword`, and
|
|
56
|
+
`renderers.resetPassword` in `auth()` options. Each renderer receives a
|
|
57
|
+
typed payload from `@growth-labs/auth/types` with package-built provider
|
|
58
|
+
or issuer URLs and brand values, then returns either an HTML string or a
|
|
59
|
+
`Response`.
|
|
60
|
+
|
|
61
|
+
Renderers replace only GET form views. `/login?provider=...`, callback,
|
|
62
|
+
logout, token exchange, cookies, and issuer redirects remain package-owned.
|
|
63
|
+
If a renderer is omitted, the current default behavior is unchanged.
|
|
64
|
+
|
|
48
65
|
## Using `context.locals.user`
|
|
49
66
|
|
|
50
67
|
```typescript
|
|
51
68
|
// Gated page — user guaranteed authenticated
|
|
52
69
|
const { user } = Astro.locals
|
|
53
|
-
// user.id, user.email, user.name, user.
|
|
70
|
+
// user.id, user.email, user.name, user.avatarUrl
|
|
54
71
|
|
|
55
72
|
// Non-gated page — check first
|
|
56
|
-
if (user
|
|
73
|
+
if (user) {
|
|
57
74
|
// show personalized content
|
|
58
75
|
}
|
|
59
76
|
```
|
|
@@ -61,12 +78,14 @@ if (user.authenticated) {
|
|
|
61
78
|
## TypeScript
|
|
62
79
|
|
|
63
80
|
```typescript
|
|
64
|
-
interface
|
|
65
|
-
id: string
|
|
81
|
+
interface User {
|
|
82
|
+
id: string
|
|
83
|
+
email: string
|
|
84
|
+
name?: string | null
|
|
85
|
+
avatarUrl?: string | null
|
|
66
86
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
// Available on context.locals.user (Astro.locals.user in .astro files)
|
|
87
|
+
|
|
88
|
+
// Available as User | null on context.locals.user (Astro.locals.user in .astro files)
|
|
70
89
|
```
|
|
71
90
|
|
|
72
91
|
## Wrangler Bindings
|
|
@@ -84,7 +103,7 @@ Auth middleware MUST run before consent and analytics middleware. List `auth()`
|
|
|
84
103
|
## Issuer Unreachable (Cold Start)
|
|
85
104
|
|
|
86
105
|
JWKS cached in Worker memory. If issuer unreachable on cold start:
|
|
87
|
-
- **Non-gated paths:** fail open — `user =
|
|
106
|
+
- **Non-gated paths:** fail open — `user = null`, page serves normally
|
|
88
107
|
- **Gated paths:** fail closed — redirect to loginPath
|
|
89
108
|
|
|
90
109
|
There is no public runtime/admin API for evicting the JWKS cache. Cache
|
|
@@ -142,5 +161,6 @@ in their app.
|
|
|
142
161
|
- CSRF state parameter verified on callback
|
|
143
162
|
- 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
|
|
144
163
|
- Forgot/reset password routes are issuer-owned redirects, not local form UIs
|
|
164
|
+
- Branded auth screens use `renderers`, not consumer-local shadow routes
|
|
145
165
|
- No `aud` claim validation in this package — single client per issuer assumed
|
|
146
166
|
- `.astro` component files ship as source, not compiled
|
package/dist/index.d.ts
CHANGED
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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAI/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;AA4BD,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,CAyDvE"}
|
package/dist/index.js
CHANGED
|
@@ -4,9 +4,30 @@ const ENTRYPOINT_EXTENSION = import.meta.url.endsWith('.ts') ? '.ts' : '.js';
|
|
|
4
4
|
function resolveEntrypoint(path) {
|
|
5
5
|
return decodeURIComponent(new URL(`${path}${ENTRYPOINT_EXTENSION}`, import.meta.url).pathname);
|
|
6
6
|
}
|
|
7
|
+
function renderersPlugin(renderers) {
|
|
8
|
+
return {
|
|
9
|
+
name: '@growth-labs/auth:renderers',
|
|
10
|
+
resolveId(id) {
|
|
11
|
+
if (id === 'virtual:growth-labs/auth/renderers')
|
|
12
|
+
return '\0virtual:growth-labs/auth/renderers';
|
|
13
|
+
},
|
|
14
|
+
load(id) {
|
|
15
|
+
if (id !== '\0virtual:growth-labs/auth/renderers')
|
|
16
|
+
return;
|
|
17
|
+
const lines = ['export const renderers = {};'];
|
|
18
|
+
for (const [surface, renderer] of Object.entries(renderers)) {
|
|
19
|
+
if (typeof renderer === 'function') {
|
|
20
|
+
lines.push(`renderers[${JSON.stringify(surface)}] = ${renderer.toString()};`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return lines.join('\n');
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
7
27
|
export default function auth(userOptions) {
|
|
8
28
|
const options = authOptionsSchema.parse(userOptions);
|
|
9
29
|
_setConfig(options);
|
|
30
|
+
const serializableOptions = { ...options, renderers: {} };
|
|
10
31
|
return {
|
|
11
32
|
name: '@growth-labs/auth',
|
|
12
33
|
hooks: {
|
|
@@ -14,8 +35,9 @@ export default function auth(userOptions) {
|
|
|
14
35
|
updateConfig({
|
|
15
36
|
vite: {
|
|
16
37
|
define: {
|
|
17
|
-
'globalThis.__GL_AUTH_CONFIG__': JSON.stringify(
|
|
38
|
+
'globalThis.__GL_AUTH_CONFIG__': JSON.stringify(serializableOptions),
|
|
18
39
|
},
|
|
40
|
+
plugins: [renderersPlugin(options.renderers)],
|
|
19
41
|
},
|
|
20
42
|
});
|
|
21
43
|
addMiddleware({
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;
|
|
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":"AAKA,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,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAKA,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,CAgEnB"}
|
package/dist/middleware/auth.js
CHANGED
|
@@ -8,7 +8,7 @@ export async function onRequest(context, next) {
|
|
|
8
8
|
const accessToken = getCookie(request, `${options.cookiePrefix}_at`);
|
|
9
9
|
const refreshToken = getCookie(request, `${options.cookiePrefix}_rt`);
|
|
10
10
|
// 2. Attempt to authenticate
|
|
11
|
-
let user =
|
|
11
|
+
let user = null;
|
|
12
12
|
let refreshed = null;
|
|
13
13
|
if (accessToken) {
|
|
14
14
|
const verified = await verifyAccessToken(options.issuer, accessToken);
|
|
@@ -16,29 +16,27 @@ export async function onRequest(context, next) {
|
|
|
16
16
|
user = {
|
|
17
17
|
id: verified.sub,
|
|
18
18
|
email: verified.email,
|
|
19
|
-
name: verified.name,
|
|
20
|
-
|
|
21
|
-
authenticated: true,
|
|
19
|
+
name: verified.name ?? null,
|
|
20
|
+
avatarUrl: verified.image ?? null,
|
|
22
21
|
};
|
|
23
22
|
}
|
|
24
23
|
}
|
|
25
|
-
if (!user
|
|
24
|
+
if (!user && refreshToken) {
|
|
26
25
|
const clientId = options.clientId || context.url.hostname;
|
|
27
26
|
refreshed = await refreshTokens(options.issuer, refreshToken, clientId);
|
|
28
27
|
if (refreshed) {
|
|
29
28
|
user = {
|
|
30
29
|
id: refreshed.claims.sub,
|
|
31
30
|
email: refreshed.claims.email,
|
|
32
|
-
name: refreshed.claims.name,
|
|
33
|
-
|
|
34
|
-
authenticated: true,
|
|
31
|
+
name: refreshed.claims.name ?? null,
|
|
32
|
+
avatarUrl: refreshed.claims.image ?? null,
|
|
35
33
|
};
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
36
|
// 3. Populate context.locals.user
|
|
39
37
|
context.locals.user = user;
|
|
40
38
|
// 4. Gate protected paths
|
|
41
|
-
if (!user
|
|
39
|
+
if (!user && isGatedPath(context.url.pathname, options.gatedPaths)) {
|
|
42
40
|
const loginUrl = new URL(`${options.loginPath}?redirect=${encodeURIComponent(context.url.pathname)}`, context.url.origin);
|
|
43
41
|
return Response.redirect(loginUrl.toString(), 302);
|
|
44
42
|
}
|
|
@@ -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,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,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/options.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import type { AuthRenderers } from './types.js';
|
|
2
3
|
export declare const authOptionsSchema: z.ZodObject<{
|
|
3
4
|
issuer: z.ZodString;
|
|
4
5
|
clientId: z.ZodOptional<z.ZodString>;
|
|
@@ -26,6 +27,7 @@ export declare const authOptionsSchema: z.ZodObject<{
|
|
|
26
27
|
brandName?: string | undefined;
|
|
27
28
|
logoUrl?: string | undefined;
|
|
28
29
|
}>>;
|
|
30
|
+
renderers: z.ZodDefault<z.ZodType<AuthRenderers, z.ZodTypeDef, AuthRenderers>>;
|
|
29
31
|
}, "strip", z.ZodTypeAny, {
|
|
30
32
|
issuer: string;
|
|
31
33
|
cookiePrefix: string;
|
|
@@ -43,6 +45,7 @@ export declare const authOptionsSchema: z.ZodObject<{
|
|
|
43
45
|
brandName?: string | undefined;
|
|
44
46
|
logoUrl?: string | undefined;
|
|
45
47
|
};
|
|
48
|
+
renderers: AuthRenderers;
|
|
46
49
|
clientId?: string | undefined;
|
|
47
50
|
sessionCookieDomain?: string | undefined;
|
|
48
51
|
}, {
|
|
@@ -64,6 +67,7 @@ export declare const authOptionsSchema: z.ZodObject<{
|
|
|
64
67
|
brandName?: string | undefined;
|
|
65
68
|
logoUrl?: string | undefined;
|
|
66
69
|
} | undefined;
|
|
70
|
+
renderers?: AuthRenderers | undefined;
|
|
67
71
|
}>;
|
|
68
72
|
export type AuthOptions = z.input<typeof authOptionsSchema>;
|
|
69
73
|
export type ResolvedAuthOptions = z.output<typeof authOptionsSchema>;
|
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;
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuC5B,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
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;
|
|
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,mBAAmB;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAExB,0BAA0B;IAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE/B,+BAA+B;IAC/B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE1C,0BAA0B;IAC1B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IAC1C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAE/C,6BAA6B;IAC7B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACvC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC;IACtD,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC;IAC1D,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAExD,oBAAoB;IACpB,SAAS,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;SACnD,OAAO,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAE/C,mCAAmC;IACnC,SAAS,EAAE,CAAC;SACV,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;QACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;IAEb,sCAAsC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;CAChD,CAAC,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { AuthRendererBrand, AuthRendererResult, AuthRenderers, ForgotPasswordRendererPayload, LoginRendererPayload, ResetPasswordRendererPayload } from './types.js';
|
|
2
|
+
export declare function getRenderer<K extends keyof AuthRenderers>(surface: K, options: {
|
|
3
|
+
renderers?: AuthRenderers;
|
|
4
|
+
}): AuthRenderers[K] | undefined;
|
|
5
|
+
export declare function renderHtmlResponse(result: AuthRendererResult): Promise<Response>;
|
|
6
|
+
export declare function rendererBrand(options: {
|
|
7
|
+
loginPage: {
|
|
8
|
+
title: string;
|
|
9
|
+
brandName?: string;
|
|
10
|
+
logoUrl?: string;
|
|
11
|
+
};
|
|
12
|
+
}): AuthRendererBrand;
|
|
13
|
+
export declare function loginRendererPayload(options: {
|
|
14
|
+
loginPage: {
|
|
15
|
+
title: string;
|
|
16
|
+
brandName?: string;
|
|
17
|
+
logoUrl?: string;
|
|
18
|
+
};
|
|
19
|
+
loginPath: string;
|
|
20
|
+
providers: string[];
|
|
21
|
+
}, data: {
|
|
22
|
+
redirectPath: string;
|
|
23
|
+
error: string | null;
|
|
24
|
+
reset: string | null;
|
|
25
|
+
}): LoginRendererPayload;
|
|
26
|
+
export declare function forgotPasswordRendererPayload(options: {
|
|
27
|
+
loginPage: {
|
|
28
|
+
title: string;
|
|
29
|
+
brandName?: string;
|
|
30
|
+
logoUrl?: string;
|
|
31
|
+
};
|
|
32
|
+
loginPath: string;
|
|
33
|
+
}, data: {
|
|
34
|
+
forgotPasswordUrl: string;
|
|
35
|
+
error: string | null;
|
|
36
|
+
sent: string | null;
|
|
37
|
+
}): ForgotPasswordRendererPayload;
|
|
38
|
+
export declare function resetPasswordRendererPayload(options: {
|
|
39
|
+
loginPage: {
|
|
40
|
+
title: string;
|
|
41
|
+
brandName?: string;
|
|
42
|
+
logoUrl?: string;
|
|
43
|
+
};
|
|
44
|
+
loginPath: string;
|
|
45
|
+
}, data: {
|
|
46
|
+
resetPasswordUrl: string;
|
|
47
|
+
error: string | null;
|
|
48
|
+
token: string | null;
|
|
49
|
+
}): ResetPasswordRendererPayload;
|
|
50
|
+
//# sourceMappingURL=renderers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../src/renderers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,6BAA6B,EAC7B,oBAAoB,EACpB,4BAA4B,EAC5B,MAAM,YAAY,CAAA;AAEnB,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,aAAa,EACxD,OAAO,EAAE,CAAC,EACV,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,aAAa,CAAA;CAAE,GACpC,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAE9B;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;CACpB,GACC,oBAAoB,CAetB;AAED,wBAAgB,6BAA6B,CAC5C,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;CACjB,EACD,IAAI,EAAE;IACL,iBAAiB,EAAE,MAAM,CAAA;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACnB,GACC,6BAA6B,CAQ/B;AAED,wBAAgB,4BAA4B,CAC3C,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;CACjB,EACD,IAAI,EAAE;IACL,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,GACC,4BAA4B,CAQ9B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { renderers as bundledRenderers } from 'virtual:growth-labs/auth/renderers';
|
|
2
|
+
export function getRenderer(surface, options) {
|
|
3
|
+
return bundledRenderers[surface] ?? options.renderers?.[surface];
|
|
4
|
+
}
|
|
5
|
+
export async function renderHtmlResponse(result) {
|
|
6
|
+
const rendered = await result;
|
|
7
|
+
if (rendered instanceof Response) {
|
|
8
|
+
return rendered;
|
|
9
|
+
}
|
|
10
|
+
return new Response(rendered, {
|
|
11
|
+
headers: { 'Content-Type': 'text/html; charset=utf-8' },
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export function rendererBrand(options) {
|
|
15
|
+
return {
|
|
16
|
+
title: options.loginPage.title,
|
|
17
|
+
brandName: options.loginPage.brandName ?? '',
|
|
18
|
+
logoUrl: options.loginPage.logoUrl ?? '',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function loginRendererPayload(options, data) {
|
|
22
|
+
const makeStartUrl = (provider) => `${options.loginPath}?provider=${encodeURIComponent(provider)}&redirect=${encodeURIComponent(data.redirectPath)}`;
|
|
23
|
+
return {
|
|
24
|
+
providerUrls: {
|
|
25
|
+
google: options.providers.includes('google') ? makeStartUrl('google') : undefined,
|
|
26
|
+
password: options.providers.includes('password') ? makeStartUrl('password') : undefined,
|
|
27
|
+
emailCode: options.providers.includes('email-code') ? makeStartUrl('email-code') : undefined,
|
|
28
|
+
},
|
|
29
|
+
errorCode: data.error ?? undefined,
|
|
30
|
+
reset: data.reset ? true : undefined,
|
|
31
|
+
redirect: data.redirectPath,
|
|
32
|
+
brand: rendererBrand(options),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function forgotPasswordRendererPayload(options, data) {
|
|
36
|
+
return {
|
|
37
|
+
forgotPasswordUrl: data.forgotPasswordUrl,
|
|
38
|
+
errorCode: data.error ?? undefined,
|
|
39
|
+
sent: data.sent ? true : undefined,
|
|
40
|
+
loginUrl: options.loginPath,
|
|
41
|
+
brand: rendererBrand(options),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function resetPasswordRendererPayload(options, data) {
|
|
45
|
+
return {
|
|
46
|
+
resetPasswordUrl: data.resetPasswordUrl,
|
|
47
|
+
errorCode: data.error ?? undefined,
|
|
48
|
+
token: data.token ?? undefined,
|
|
49
|
+
loginUrl: options.loginPath,
|
|
50
|
+
brand: rendererBrand(options),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=renderers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../src/renderers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAUlF,MAAM,UAAU,WAAW,CAC1B,OAAU,EACV,OAAsC;IAEtC,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA0B;IAClE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAA;IAC7B,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAA;IAChB,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE;QAC7B,OAAO,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE;KACvD,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAE7B;IACA,OAAO;QACN,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE;QAC5C,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE;KACxC,CAAA;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB,CACnC,OAIC,EACD,IAIC;IAED,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,EAAE,CACzC,GAAG,OAAO,CAAC,SAAS,aAAa,kBAAkB,CAAC,QAAQ,CAAC,aAAa,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAA;IAElH,OAAO;QACN,YAAY,EAAE;YACb,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YACjF,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;YACvF,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;SAC5F;QACD,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACpC,QAAQ,EAAE,IAAI,CAAC,YAAY;QAC3B,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;KAC7B,CAAA;AACF,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC5C,OAGC,EACD,IAIC;IAED,OAAO;QACN,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;QAClC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAClC,QAAQ,EAAE,OAAO,CAAC,SAAS;QAC3B,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;KAC7B,CAAA;AACF,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC3C,OAGC,EACD,IAIC;IAED,OAAO;QACN,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;QAC9B,QAAQ,EAAE,OAAO,CAAC,SAAS;QAC3B,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;KAC7B,CAAA;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forgot-password.d.ts","sourceRoot":"","sources":["../../src/routes/forgot-password.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"forgot-password.d.ts","sourceRoot":"","sources":["../../src/routes/forgot-password.ts"],"names":[],"mappings":"AAIA,UAAU,qBAAqB;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACR;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuB3E"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getConfig } from '../config-store.js';
|
|
2
|
+
import { forgotPasswordRendererPayload, getRenderer, renderHtmlResponse } from '../renderers.js';
|
|
2
3
|
import { getForgotPasswordUrl } from '../utils/openauth.js';
|
|
3
4
|
export async function GET(context) {
|
|
4
5
|
const options = getConfig();
|
|
@@ -7,6 +8,14 @@ export async function GET(context) {
|
|
|
7
8
|
}
|
|
8
9
|
const target = new URL(getForgotPasswordUrl());
|
|
9
10
|
target.search = context.url.search;
|
|
11
|
+
const renderer = getRenderer('forgotPassword', options);
|
|
12
|
+
if (renderer) {
|
|
13
|
+
return renderHtmlResponse(renderer(forgotPasswordRendererPayload(options, {
|
|
14
|
+
forgotPasswordUrl: target.toString(),
|
|
15
|
+
error: context.url.searchParams.get('error'),
|
|
16
|
+
sent: context.url.searchParams.get('sent'),
|
|
17
|
+
})));
|
|
18
|
+
}
|
|
10
19
|
return Response.redirect(target.toString(), 302);
|
|
11
20
|
}
|
|
12
21
|
//# sourceMappingURL=forgot-password.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forgot-password.js","sourceRoot":"","sources":["../../src/routes/forgot-password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAO3D,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAA8B;IACvD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAE3B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"forgot-password.js","sourceRoot":"","sources":["../../src/routes/forgot-password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,6BAA6B,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAChG,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAO3D,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAA8B;IACvD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAE3B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAA;IAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;IACvD,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,kBAAkB,CACxB,QAAQ,CACP,6BAA6B,CAAC,OAAO,EAAE;YACtC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE;YACpC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;YAC5C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;SAC1C,CAAC,CACF,CACD,CAAA;IACF,CAAC;IAED,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAA;AACjD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/routes/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/routes/login.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACR;AAMD,wBAAsB,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyClE"}
|
package/dist/routes/login.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { loginPageScript } from '../client/login-page.js';
|
|
2
2
|
import { getConfig } from '../config-store.js';
|
|
3
|
+
import { getRenderer, loginRendererPayload, renderHtmlResponse } from '../renderers.js';
|
|
3
4
|
import { setAuthFlowCookies } from '../utils/cookies.js';
|
|
4
5
|
import { createAuthFlow, getAuthorizationUrl } from '../utils/openauth.js';
|
|
5
6
|
function _shouldShowForgotLink(options) {
|
|
@@ -25,17 +26,22 @@ export async function GET(context) {
|
|
|
25
26
|
setAuthFlowCookies(response, options, authFlow.verifier, authFlow.state, redirectPath, selectedProvider);
|
|
26
27
|
return response;
|
|
27
28
|
}
|
|
28
|
-
const
|
|
29
|
+
const data = { redirectPath, error, reset };
|
|
30
|
+
const renderer = getRenderer('login', options);
|
|
31
|
+
if (renderer) {
|
|
32
|
+
return renderHtmlResponse(renderer(loginRendererPayload(options, data)));
|
|
33
|
+
}
|
|
34
|
+
const html = renderLoginPage(options, data);
|
|
29
35
|
return new Response(html, {
|
|
30
36
|
headers: { 'Content-Type': 'text/html; charset=utf-8' },
|
|
31
37
|
});
|
|
32
38
|
}
|
|
33
39
|
function renderLoginPage(options, data) {
|
|
34
|
-
const { loginPage, providers
|
|
40
|
+
const { loginPage, providers } = options;
|
|
35
41
|
const availableProviders = providers.filter((provider) => ['google', 'password', 'email-code'].includes(provider));
|
|
36
42
|
const hasGoogle = availableProviders.includes('google');
|
|
37
43
|
const hasAlternativeProvider = availableProviders.includes('password') || availableProviders.includes('email-code');
|
|
38
|
-
const
|
|
44
|
+
const payload = loginRendererPayload(options, data);
|
|
39
45
|
return `<!DOCTYPE html>
|
|
40
46
|
<html lang="en">
|
|
41
47
|
<head>
|
|
@@ -63,15 +69,15 @@ function renderLoginPage(options, data) {
|
|
|
63
69
|
${data.reset ? '<p class="success">Password reset successfully. Sign in with your new password.</p>' : ''}
|
|
64
70
|
${data.error ? '<p class="error">Authentication failed. Please try again.</p>' : ''}
|
|
65
71
|
${hasGoogle
|
|
66
|
-
? `<a href="${
|
|
72
|
+
? `<a href="${payload.providerUrls.google}" class="btn btn-google" data-provider="google">Sign in with Google</a>`
|
|
67
73
|
: ''}
|
|
68
74
|
${hasGoogle && hasAlternativeProvider ? '<div class="divider">or</div>' : ''}
|
|
69
75
|
${availableProviders.includes('email-code')
|
|
70
|
-
? `<a href="${
|
|
76
|
+
? `<a href="${payload.providerUrls.emailCode}" class="btn" data-provider="email-code">Sign in with email</a>`
|
|
71
77
|
: ''}
|
|
72
78
|
${availableProviders.includes('password')
|
|
73
79
|
? `
|
|
74
|
-
<a href="${
|
|
80
|
+
<a href="${payload.providerUrls.password}" class="btn" data-provider="password">Sign in with password</a>
|
|
75
81
|
<a href="${options.forgotPasswordPath}" class="forgot-link">Forgot password?</a>`
|
|
76
82
|
: ''}
|
|
77
83
|
<script>${loginPageScript()}</script>
|
package/dist/routes/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/routes/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAO1E,SAAS,qBAAqB,CAAC,OAAqC;IACnE,OAAO,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAqB;IAC9C,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAA;IACpE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAEnD,IACC,gBAAgB;QAChB,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAsD,CAAC,EACjF,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAA;QAC9C,MAAM,cAAc,GAAG,gBAAgB,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAA;QACpF,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;QAC1F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACpD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE;YACpD,MAAM,EAAE,gBAAgB,CAAC,MAAM;YAC/B,UAAU,EAAE,gBAAgB,CAAC,UAAU;YACvC,OAAO,EAAE,IAAI,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC;SAC9C,CAAC,CAAA;QACF,kBAAkB,CACjB,QAAQ,EACR,OAAO,EACP,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,KAAK,EACd,YAAY,EACZ,gBAAgB,CAChB,CAAA;QACD,OAAO,QAAQ,CAAA;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/routes/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAO1E,SAAS,qBAAqB,CAAC,OAAqC;IACnE,OAAO,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAqB;IAC9C,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAA;IACpE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAEnD,IACC,gBAAgB;QAChB,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAsD,CAAC,EACjF,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAA;QAC9C,MAAM,cAAc,GAAG,gBAAgB,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAA;QACpF,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;QAC1F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACpD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE;YACpD,MAAM,EAAE,gBAAgB,CAAC,MAAM;YAC/B,UAAU,EAAE,gBAAgB,CAAC,UAAU;YACvC,OAAO,EAAE,IAAI,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC;SAC9C,CAAC,CAAA;QACF,kBAAkB,CACjB,QAAQ,EACR,OAAO,EACP,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,KAAK,EACd,YAAY,EACZ,gBAAgB,CAChB,CAAA;QACD,OAAO,QAAQ,CAAA;IAChB,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9C,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,kBAAkB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC3C,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACzB,OAAO,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE;KACvD,CAAC,CAAA;AACH,CAAC;AAQD,SAAS,eAAe,CAAC,OAAqC,EAAE,IAAmB;IAClF,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACxC,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACxD,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACvD,CAAA;IACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACvD,MAAM,sBAAsB,GAC3B,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;IACrF,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAEnD,OAAO;;;;;WAKG,SAAS,CAAC,KAAK;;;;;;;;;;;;;;;;IAgBtB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,SAAS,CAAC,OAAO,UAAU,SAAS,CAAC,SAAS,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE;IAC3G,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,SAAS,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC,EAAE;QACpE,SAAS,CAAC,KAAK;IACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qFAAqF,CAAC,CAAC,CAAC,EAAE;IACvG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC,CAAC,EAAE;IAEnF,SAAS;QACR,CAAC,CAAC,YAAY,OAAO,CAAC,YAAY,CAAC,MAAM,yEAAyE;QAClH,CAAC,CAAC,EACJ;IACG,SAAS,IAAI,sBAAsB,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE;IAE5E,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxC,CAAC,CAAC,YAAY,OAAO,CAAC,YAAY,CAAC,SAAS,iEAAiE;QAC7G,CAAC,CAAC,EACJ;IAEC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC;QACtC,CAAC,CAAC;aACQ,OAAO,CAAC,YAAY,CAAC,QAAQ;aAC7B,OAAO,CAAC,kBAAkB,4CAA4C;QAChF,CAAC,CAAC,EACJ;YACW,eAAe,EAAE;;QAErB,CAAA;AACR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset-password.d.ts","sourceRoot":"","sources":["../../src/routes/reset-password.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reset-password.d.ts","sourceRoot":"","sources":["../../src/routes/reset-password.ts"],"names":[],"mappings":"AAIA,UAAU,oBAAoB;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACR;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuB1E"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getConfig } from '../config-store.js';
|
|
2
|
+
import { getRenderer, renderHtmlResponse, resetPasswordRendererPayload } from '../renderers.js';
|
|
2
3
|
import { getResetPasswordUrl } from '../utils/openauth.js';
|
|
3
4
|
export async function GET(context) {
|
|
4
5
|
const options = getConfig();
|
|
@@ -7,6 +8,14 @@ export async function GET(context) {
|
|
|
7
8
|
}
|
|
8
9
|
const target = new URL(getResetPasswordUrl());
|
|
9
10
|
target.search = context.url.search;
|
|
11
|
+
const renderer = getRenderer('resetPassword', options);
|
|
12
|
+
if (renderer) {
|
|
13
|
+
return renderHtmlResponse(renderer(resetPasswordRendererPayload(options, {
|
|
14
|
+
resetPasswordUrl: target.toString(),
|
|
15
|
+
error: context.url.searchParams.get('error'),
|
|
16
|
+
token: context.url.searchParams.get('token'),
|
|
17
|
+
})));
|
|
18
|
+
}
|
|
10
19
|
return Response.redirect(target.toString(), 302);
|
|
11
20
|
}
|
|
12
21
|
//# sourceMappingURL=reset-password.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset-password.js","sourceRoot":"","sources":["../../src/routes/reset-password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAO1D,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAA6B;IACtD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAE3B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAC7C,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"reset-password.js","sourceRoot":"","sources":["../../src/routes/reset-password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAO1D,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAA6B;IACtD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAE3B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAC7C,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAA;IAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;IACtD,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,kBAAkB,CACxB,QAAQ,CACP,4BAA4B,CAAC,OAAO,EAAE;YACrC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE;YACnC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;YAC5C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;SAC5C,CAAC,CACF,CACD,CAAA;IACF,CAAC;IAED,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAA;AACjD,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,21 +1,63 @@
|
|
|
1
|
-
export interface
|
|
1
|
+
export interface User {
|
|
2
2
|
id: string;
|
|
3
3
|
email: string;
|
|
4
|
-
name?: string;
|
|
5
|
-
|
|
6
|
-
authenticated: true;
|
|
4
|
+
name?: string | null;
|
|
5
|
+
avatarUrl?: string | null;
|
|
7
6
|
}
|
|
8
|
-
export
|
|
9
|
-
|
|
7
|
+
export type AuthenticatedUser = User;
|
|
8
|
+
export type UnauthenticatedUser = null;
|
|
9
|
+
export interface AuthRendererBrand {
|
|
10
|
+
title: string;
|
|
11
|
+
brandName: string;
|
|
12
|
+
logoUrl: string;
|
|
13
|
+
}
|
|
14
|
+
export interface LoginRendererPayload {
|
|
15
|
+
providerUrls: {
|
|
16
|
+
google?: string;
|
|
17
|
+
password?: string;
|
|
18
|
+
emailCode?: string;
|
|
19
|
+
};
|
|
20
|
+
errorCode?: 'auth_failed' | 'session_expired' | string;
|
|
21
|
+
reset?: boolean;
|
|
22
|
+
redirect: string;
|
|
23
|
+
brand: AuthRendererBrand;
|
|
24
|
+
}
|
|
25
|
+
export interface ForgotPasswordRendererPayload {
|
|
26
|
+
forgotPasswordUrl: string;
|
|
27
|
+
errorCode?: string;
|
|
28
|
+
sent?: boolean;
|
|
29
|
+
loginUrl: string;
|
|
30
|
+
brand: AuthRendererBrand;
|
|
31
|
+
}
|
|
32
|
+
export interface ResetPasswordRendererPayload {
|
|
33
|
+
resetPasswordUrl: string;
|
|
34
|
+
errorCode?: string;
|
|
35
|
+
token?: string;
|
|
36
|
+
loginUrl: string;
|
|
37
|
+
brand: AuthRendererBrand;
|
|
38
|
+
}
|
|
39
|
+
export interface EmailCodeConfirmRendererPayload {
|
|
40
|
+
loginUrl: string;
|
|
41
|
+
brand: AuthRendererBrand;
|
|
42
|
+
}
|
|
43
|
+
export type AuthRendererResult = string | Response | Promise<string | Response>;
|
|
44
|
+
export type LoginRenderer = (payload: LoginRendererPayload) => AuthRendererResult;
|
|
45
|
+
export type ForgotPasswordRenderer = (payload: ForgotPasswordRendererPayload) => AuthRendererResult;
|
|
46
|
+
export type ResetPasswordRenderer = (payload: ResetPasswordRendererPayload) => AuthRendererResult;
|
|
47
|
+
export type EmailCodeConfirmRenderer = (payload: EmailCodeConfirmRendererPayload) => AuthRendererResult;
|
|
48
|
+
export interface AuthRenderers {
|
|
49
|
+
login?: LoginRenderer;
|
|
50
|
+
forgotPassword?: ForgotPasswordRenderer;
|
|
51
|
+
resetPassword?: ResetPasswordRenderer;
|
|
52
|
+
emailCodeConfirm?: EmailCodeConfirmRenderer;
|
|
10
53
|
}
|
|
11
|
-
export type User = AuthenticatedUser | UnauthenticatedUser;
|
|
12
54
|
export interface TokenRefreshResult {
|
|
13
55
|
accessToken: string;
|
|
14
56
|
refreshToken: string;
|
|
15
57
|
claims: {
|
|
16
58
|
sub: string;
|
|
17
59
|
email: string;
|
|
18
|
-
name?: string;
|
|
60
|
+
name?: string | null;
|
|
19
61
|
image?: string;
|
|
20
62
|
};
|
|
21
63
|
}
|
|
@@ -27,14 +69,14 @@ export interface TokenExchangeResult {
|
|
|
27
69
|
claims: {
|
|
28
70
|
sub: string;
|
|
29
71
|
email: string;
|
|
30
|
-
name?: string;
|
|
72
|
+
name?: string | null;
|
|
31
73
|
image?: string;
|
|
32
74
|
};
|
|
33
75
|
}
|
|
34
76
|
declare global {
|
|
35
77
|
namespace App {
|
|
36
78
|
interface Locals {
|
|
37
|
-
user: User;
|
|
79
|
+
user: User | null;
|
|
38
80
|
}
|
|
39
81
|
}
|
|
40
82
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/tokens.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAkBrD,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAkBrD,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACzD,SAAS,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAWvF;AAED,wBAAsB,iBAAiB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAehC;AAED,wBAAsB,aAAa,CAClC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAoCpC;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMrE;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
|