@seamless-auth/core 0.15.0 → 0.16.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 +16 -2
- package/dist/applyResult.d.ts +11 -1
- package/dist/applyResult.d.ts.map +1 -1
- package/dist/applyResult.js +3 -1
- package/dist/applyResult.js.map +1 -1
- package/dist/getSeamlessUser.d.ts +14 -2
- package/dist/getSeamlessUser.d.ts.map +1 -1
- package/dist/getSeamlessUser.js +28 -10
- package/dist/getSeamlessUser.js.map +1 -1
- package/dist/guards.d.ts +39 -0
- package/dist/guards.d.ts.map +1 -1
- package/dist/guards.js +63 -0
- package/dist/guards.js.map +1 -1
- package/dist/handlers/finishLogin.d.ts +2 -0
- package/dist/handlers/finishLogin.d.ts.map +1 -1
- package/dist/handlers/finishLogin.js +4 -4
- package/dist/handlers/finishLogin.js.map +1 -1
- package/dist/handlers/login.d.ts +13 -5
- package/dist/handlers/login.d.ts.map +1 -1
- package/dist/handlers/login.js +6 -1
- package/dist/handlers/login.js.map +1 -1
- package/dist/handlers/oauthHandlers.d.ts +2 -0
- package/dist/handlers/oauthHandlers.d.ts.map +1 -1
- package/dist/handlers/oauthHandlers.js +4 -4
- package/dist/handlers/oauthHandlers.js.map +1 -1
- package/dist/handlers/pollMagicLinkConfirmationHandler.d.ts +2 -0
- package/dist/handlers/pollMagicLinkConfirmationHandler.d.ts.map +1 -1
- package/dist/handlers/pollMagicLinkConfirmationHandler.js +4 -4
- package/dist/handlers/pollMagicLinkConfirmationHandler.js.map +1 -1
- package/dist/handlers/refresh.d.ts +44 -0
- package/dist/handlers/refresh.d.ts.map +1 -0
- package/dist/handlers/refresh.js +70 -0
- package/dist/handlers/refresh.js.map +1 -0
- package/dist/handlers/register.d.ts +2 -0
- package/dist/handlers/register.d.ts.map +1 -1
- package/dist/handlers/register.js +3 -0
- package/dist/handlers/register.js.map +1 -1
- package/dist/handlers/switchOrganizationHandler.d.ts +2 -0
- package/dist/handlers/switchOrganizationHandler.d.ts.map +1 -1
- package/dist/handlers/switchOrganizationHandler.js +4 -4
- package/dist/handlers/switchOrganizationHandler.js.map +1 -1
- package/dist/handlers/verifyLoginOtpHandler.d.ts +2 -0
- package/dist/handlers/verifyLoginOtpHandler.d.ts.map +1 -1
- package/dist/handlers/verifyLoginOtpHandler.js +4 -4
- package/dist/handlers/verifyLoginOtpHandler.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/jwks.d.ts +3 -0
- package/dist/jwks.d.ts.map +1 -0
- package/dist/jwks.js +15 -0
- package/dist/jwks.js.map +1 -0
- package/dist/proxyRequest.d.ts +9 -2
- package/dist/proxyRequest.d.ts.map +1 -1
- package/dist/proxyRequest.js +24 -14
- package/dist/proxyRequest.js.map +1 -1
- package/dist/refreshAccessToken.d.ts +19 -0
- package/dist/refreshAccessToken.d.ts.map +1 -1
- package/dist/refreshAccessToken.js +71 -21
- package/dist/refreshAccessToken.js.map +1 -1
- package/dist/transport.d.ts +20 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +12 -0
- package/dist/transport.js.map +1 -0
- package/dist/upstreamSession.d.ts +19 -0
- package/dist/upstreamSession.d.ts.map +1 -1
- package/dist/upstreamSession.js +20 -0
- package/dist/upstreamSession.js.map +1 -1
- package/dist/verifyAccessToken.d.ts +30 -0
- package/dist/verifyAccessToken.d.ts.map +1 -0
- package/dist/verifyAccessToken.js +44 -0
- package/dist/verifyAccessToken.js.map +1 -0
- package/dist/verifySignedAuthResponse.d.ts.map +1 -1
- package/dist/verifySignedAuthResponse.js +3 -16
- package/dist/verifySignedAuthResponse.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -88,13 +88,27 @@ remain for direct imports.
|
|
|
88
88
|
**Sessions and cookies**
|
|
89
89
|
|
|
90
90
|
- `ensureCookies(...)` – validates and refreshes session cookies
|
|
91
|
-
- `refreshAccessToken(...)` – rotates expired access sessions
|
|
91
|
+
- `refreshAccessToken(...)` – rotates expired access sessions from a refresh cookie
|
|
92
|
+
- `refreshBearerSession(...)` – rotates a session from a raw refresh token, for bearer transport
|
|
93
|
+
- `refreshHandler(...)` – the `POST /refresh` route, in either transport
|
|
94
|
+
- `sessionResult(...)` – an upstream session as a handler result: cookies for cookie transport, the body whole for bearer
|
|
95
|
+
- `resolveAuthTransport(...)` / `AUTH_TRANSPORT_HEADER` – selects cookie or bearer transport for a request
|
|
92
96
|
- `verifyCookieJwt(...)` – verifies signed cookie payloads
|
|
93
97
|
- `verifyRefreshCookie(...)` – verifies a refresh cookie, returning `null` on failure
|
|
94
98
|
- `verifySignedAuthResponse(...)` – verifies an auth API response signature against its JWKS
|
|
95
|
-
- `
|
|
99
|
+
- `verifyAccessToken(...)` – verifies an auth API access token against its JWKS, requiring `typ: "access"`
|
|
100
|
+
- `extractBearerToken(...)` – reads the token out of an `Authorization: Bearer` header
|
|
101
|
+
- `getSeamlessUser(...)` – resolves the hydrated user, typed as `SeamlessUser | null`, from a cookie or a bearer token
|
|
96
102
|
- `hasScopedRole(...)` – checks scoped role grants such as `admin:read`
|
|
97
103
|
|
|
104
|
+
**Guards**
|
|
105
|
+
|
|
106
|
+
- `authenticateCookie(...)` – verifies an access cookie into a session
|
|
107
|
+
- `authenticateBearer(...)` – verifies a bearer access token into a session
|
|
108
|
+
- `authenticateRequest(...)` – the cookie when present, otherwise the bearer token when enabled
|
|
109
|
+
- `authorizeRoles(...)` – role check against an authenticated session
|
|
110
|
+
- `checkOrigin(...)` – cross-site request check for `SameSite=None` deployments
|
|
111
|
+
|
|
98
112
|
**Building an adapter**
|
|
99
113
|
|
|
100
114
|
- `applyResult(result, adapter, opts)` – turns a handler result into a response
|
package/dist/applyResult.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CookiePayload } from "./ensureCookies.js";
|
|
2
2
|
import type { ResultFailure } from "./result.js";
|
|
3
|
+
import type { AuthTransport } from "./transport.js";
|
|
3
4
|
export type CookieSameSite = "lax" | "none" | "strict";
|
|
4
5
|
export interface CookieSecurityOptions {
|
|
5
6
|
cookieSecret: string;
|
|
@@ -7,6 +8,15 @@ export interface CookieSecurityOptions {
|
|
|
7
8
|
cookieSecure?: boolean;
|
|
8
9
|
cookieSameSite?: CookieSameSite;
|
|
9
10
|
}
|
|
11
|
+
export interface ApplyResultOptions extends CookieSecurityOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Bearer transport writes no cookies at all: the client holds its own tokens,
|
|
14
|
+
* and a `Set-Cookie` on a response it cannot store would be dead weight at
|
|
15
|
+
* best and, for a clear, a misleading signal that a session ended. Defaults
|
|
16
|
+
* to cookie transport.
|
|
17
|
+
*/
|
|
18
|
+
transport?: AuthTransport;
|
|
19
|
+
}
|
|
10
20
|
/**
|
|
11
21
|
* Resolves the effective `SameSite` policy. Shared so the cookie attributes and
|
|
12
22
|
* any policy that keys off `SameSite=None` cannot drift. Browsers reject
|
|
@@ -96,5 +106,5 @@ export declare function applyCookies(result: Pick<AppliableResult, "setCookies"
|
|
|
96
106
|
* untouched; callers read fields off it. A failure carrying `errorCode` is this
|
|
97
107
|
* package's own and is rendered as `{ error, details }`.
|
|
98
108
|
*/
|
|
99
|
-
export declare function applyResult(result: AppliableResult, adapter: ResponseAdapter, opts:
|
|
109
|
+
export declare function applyResult(result: AppliableResult, adapter: ResponseAdapter, opts: ApplyResultOptions): void;
|
|
100
110
|
//# sourceMappingURL=applyResult.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyResult.d.ts","sourceRoot":"","sources":["../src/applyResult.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"applyResult.d.ts","sourceRoot":"","sources":["../src/applyResult.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D;;;;;OAKG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,GAAG,gBAAgB,CAAC,GACnE,cAAc,CAGhB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;;;OAQG;IACH,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAKD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC3C,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,4DAA4D;IAC5D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,CAKR;AAsCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,GAAG,cAAc,CAAC,EAC5D,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,aAAa,CAAC,EAC3D,IAAI,EAAE,qBAAqB,GAC1B,IAAI,CAsCN;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,kBAAkB,GACvB,IAAI,CAqBN"}
|
package/dist/applyResult.js
CHANGED
|
@@ -103,7 +103,9 @@ export function applyCookies(result, adapter, opts) {
|
|
|
103
103
|
* package's own and is rendered as `{ error, details }`.
|
|
104
104
|
*/
|
|
105
105
|
export function applyResult(result, adapter, opts) {
|
|
106
|
-
|
|
106
|
+
if (opts.transport !== "bearer") {
|
|
107
|
+
applyCookies(result, adapter, opts);
|
|
108
|
+
}
|
|
107
109
|
if (result.errorBody !== undefined) {
|
|
108
110
|
adapter.send(result.status, result.errorBody);
|
|
109
111
|
return;
|
package/dist/applyResult.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyResult.js","sourceRoot":"","sources":["../src/applyResult.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"applyResult.js","sourceRoot":"","sources":["../src/applyResult.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,12 +21,24 @@ export interface GetSeamlessUserOptions {
|
|
|
21
21
|
serviceAuthorization?: string;
|
|
22
22
|
forwardedClientIp?: string;
|
|
23
23
|
forwardedUserAgent?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Enables the bearer path for a request that carries no access cookie: the
|
|
26
|
+
* auth API's own access token in `Authorization: Bearer`, verified against the
|
|
27
|
+
* API's JWKS before it is forwarded. Left out, only the cookie is consulted.
|
|
28
|
+
*/
|
|
29
|
+
bearer?: {
|
|
30
|
+
/** The request's raw `Authorization` header. */
|
|
31
|
+
authorization?: string;
|
|
32
|
+
/** Expected `aud` on the access token. The issuer is `authServerUrl`. */
|
|
33
|
+
audience: string;
|
|
34
|
+
};
|
|
24
35
|
}
|
|
25
36
|
/**
|
|
26
|
-
* Resolves the authenticated Seamless Auth user from
|
|
37
|
+
* Resolves the authenticated Seamless Auth user from the request's credential.
|
|
27
38
|
*
|
|
28
39
|
* This function:
|
|
29
|
-
* - Verifies the access cookie locally
|
|
40
|
+
* - Verifies the access cookie locally, or the bearer access token against JWKS
|
|
41
|
+
* when there is no cookie and `bearer` is configured
|
|
30
42
|
* - Uses the verified token to authenticate a request to the auth server
|
|
31
43
|
* - Returns the canonical user object, or null if authentication fails
|
|
32
44
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSeamlessUser.d.ts","sourceRoot":"","sources":["../src/getSeamlessUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"getSeamlessUser.d.ts","sourceRoot":"","sources":["../src/getSeamlessUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAOnD;;;;;GAKG;AACH;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,MAAM,CAAC,EAAE;QACP,gDAAgD;QAChD,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,yEAAyE;QACzE,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,CAAC,GAAG,YAAY,EACpD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAkBnB"}
|
package/dist/getSeamlessUser.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { verifyCookieJwt } from "./verifyCookieJwt.js";
|
|
2
1
|
import { authFetch } from "./authFetch.js";
|
|
3
2
|
import { assertSecretStrength } from "./validateSecrets.js";
|
|
3
|
+
import { extractBearerToken, verifyAccessToken } from "./verifyAccessToken.js";
|
|
4
|
+
import { verifyCookieJwt } from "./verifyCookieJwt.js";
|
|
4
5
|
/**
|
|
5
|
-
* Resolves the authenticated Seamless Auth user from
|
|
6
|
+
* Resolves the authenticated Seamless Auth user from the request's credential.
|
|
6
7
|
*
|
|
7
8
|
* This function:
|
|
8
|
-
* - Verifies the access cookie locally
|
|
9
|
+
* - Verifies the access cookie locally, or the bearer access token against JWKS
|
|
10
|
+
* when there is no cookie and `bearer` is configured
|
|
9
11
|
* - Uses the verified token to authenticate a request to the auth server
|
|
10
12
|
* - Returns the canonical user object, or null if authentication fails
|
|
11
13
|
*
|
|
@@ -13,16 +15,12 @@ import { assertSecretStrength } from "./validateSecrets.js";
|
|
|
13
15
|
*/
|
|
14
16
|
export async function getSeamlessUser(cookies, opts) {
|
|
15
17
|
assertSecretStrength("cookieSecret", opts.cookieSecret);
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
if (!token)
|
|
19
|
-
return null;
|
|
20
|
-
const payload = verifyCookieJwt(token, opts.cookieSecret);
|
|
21
|
-
if (!payload)
|
|
18
|
+
const authorization = await resolveUpstreamAuthorization(cookies, opts);
|
|
19
|
+
if (authorization === null)
|
|
22
20
|
return null;
|
|
23
21
|
const response = await authFetch(`${opts.authServerUrl}/users/me`, {
|
|
24
22
|
method: "GET",
|
|
25
|
-
authorization
|
|
23
|
+
authorization,
|
|
26
24
|
serviceAuthorization: opts.serviceAuthorization,
|
|
27
25
|
forwardedClientIp: opts.forwardedClientIp,
|
|
28
26
|
forwardedUserAgent: opts.forwardedUserAgent,
|
|
@@ -32,4 +30,24 @@ export async function getSeamlessUser(cookies, opts) {
|
|
|
32
30
|
const data = await response.json();
|
|
33
31
|
return data?.user ?? null;
|
|
34
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* `null` means the request carried nothing that verifies. `undefined` keeps the
|
|
35
|
+
* cookie path's historical shape: a verified cookie with no caller-supplied
|
|
36
|
+
* `authorization` still reaches the auth server, which decides for itself.
|
|
37
|
+
*/
|
|
38
|
+
async function resolveUpstreamAuthorization(cookies, opts) {
|
|
39
|
+
const cookieName = opts.cookieName ?? "seamless-access";
|
|
40
|
+
const cookie = cookies[cookieName];
|
|
41
|
+
if (cookie) {
|
|
42
|
+
const payload = verifyCookieJwt(cookie, opts.cookieSecret);
|
|
43
|
+
return payload ? opts.authorization : null;
|
|
44
|
+
}
|
|
45
|
+
if (!opts.bearer)
|
|
46
|
+
return null;
|
|
47
|
+
const token = extractBearerToken(opts.bearer.authorization);
|
|
48
|
+
if (!token)
|
|
49
|
+
return null;
|
|
50
|
+
const claims = await verifyAccessToken(token, opts.authServerUrl, opts.bearer.audience);
|
|
51
|
+
return claims ? `Bearer ${token}` : null;
|
|
52
|
+
}
|
|
35
53
|
//# sourceMappingURL=getSeamlessUser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSeamlessUser.js","sourceRoot":"","sources":["../src/getSeamlessUser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"getSeamlessUser.js","sourceRoot":"","sources":["../src/getSeamlessUser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAsCvD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA2C,EAC3C,IAA4B;IAE5B,oBAAoB,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAExD,MAAM,aAAa,GAAG,MAAM,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxE,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,WAAW,EAAE;QACjE,MAAM,EAAE,KAAK;QACb,aAAa;QACb,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;QAC/C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;KAC5C,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,4BAA4B,CACzC,OAA2C,EAC3C,IAA4B;IAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,iBAAiB,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEnC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3D,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC,KAAK,EACL,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,CACrB,CAAC;IAEF,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC"}
|
package/dist/guards.d.ts
CHANGED
|
@@ -62,6 +62,45 @@ export type CookieAuthResult = {
|
|
|
62
62
|
* there.
|
|
63
63
|
*/
|
|
64
64
|
export declare function authenticateCookie(input: CookieAuthInput): CookieAuthResult;
|
|
65
|
+
export interface BearerAuthInput {
|
|
66
|
+
/** The raw `Authorization` header, or `undefined` when the request carried none. */
|
|
67
|
+
authorization?: string;
|
|
68
|
+
authServerUrl: string;
|
|
69
|
+
/** Expected `aud` on the access token. The issuer is `authServerUrl`. */
|
|
70
|
+
audience: string;
|
|
71
|
+
}
|
|
72
|
+
export type AuthResult = CookieAuthResult;
|
|
73
|
+
/**
|
|
74
|
+
* Verifies an access token the auth API issued, carried as `Authorization:
|
|
75
|
+
* Bearer`, into a session.
|
|
76
|
+
*
|
|
77
|
+
* This is the path a native client takes: it has no cookie jar, so it holds the
|
|
78
|
+
* API's own access token and presents it directly. The token carries `sub`,
|
|
79
|
+
* `roles` and the session id but not the profile, so `email` and `phone` are
|
|
80
|
+
* left unset; `getSeamlessUser` hydrates them.
|
|
81
|
+
*/
|
|
82
|
+
export declare function authenticateBearer(input: BearerAuthInput): Promise<AuthResult>;
|
|
83
|
+
export interface RequestAuthInput extends CookieAuthInput {
|
|
84
|
+
/** The raw `Authorization` header, or `undefined` when the request carried none. */
|
|
85
|
+
authorization?: string;
|
|
86
|
+
/**
|
|
87
|
+
* Enables bearer tokens. Left out, the guard accepts cookies only, which is
|
|
88
|
+
* what every adopter predating this option gets.
|
|
89
|
+
*/
|
|
90
|
+
bearer?: {
|
|
91
|
+
authServerUrl: string;
|
|
92
|
+
audience: string;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Authenticates a request from whichever credential it carries.
|
|
97
|
+
*
|
|
98
|
+
* The cookie wins when present, including when it is invalid: a browser with a
|
|
99
|
+
* stale cookie should see the session rejected rather than fall through to a
|
|
100
|
+
* header it never meant to send. Bearer is only consulted when there is no
|
|
101
|
+
* cookie at all and the adopter has opted in.
|
|
102
|
+
*/
|
|
103
|
+
export declare function authenticateRequest(input: RequestAuthInput): Promise<AuthResult>;
|
|
65
104
|
/**
|
|
66
105
|
* Authorization only, against a session a guard has already authenticated.
|
|
67
106
|
*
|
package/dist/guards.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAM9E;;;;;;;GAOG;AACH,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,gBAAgB,GACtB,cAAc,GAAG,SAAS,CAyC5B;AAED,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,GACjD;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,cAAc,CAAA;CAAE,CAAC;AAEpD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAgC3E;AAED,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAU1C;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAC/B,cAAc,GAAG,SAAS,CAoB5B"}
|
package/dist/guards.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { resolveCookieSameSite } from "./applyResult.js";
|
|
2
2
|
import { hasScopedRole } from "@seamless-auth/types/role/matching";
|
|
3
3
|
import { assertSecretStrength } from "./validateSecrets.js";
|
|
4
|
+
import { extractBearerToken, verifyAccessToken } from "./verifyAccessToken.js";
|
|
4
5
|
import { verifyCookieJwt } from "./verifyCookieJwt.js";
|
|
5
6
|
// GET/HEAD are read-only and OPTIONS is the CORS preflight, so none can carry a
|
|
6
7
|
// state change worth gating.
|
|
@@ -88,6 +89,68 @@ export function authenticateCookie(input) {
|
|
|
88
89
|
},
|
|
89
90
|
};
|
|
90
91
|
}
|
|
92
|
+
function missingTokenRejection(warn) {
|
|
93
|
+
return {
|
|
94
|
+
status: 401,
|
|
95
|
+
errorCode: "Failed to find authentication token required",
|
|
96
|
+
warn,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Verifies an access token the auth API issued, carried as `Authorization:
|
|
101
|
+
* Bearer`, into a session.
|
|
102
|
+
*
|
|
103
|
+
* This is the path a native client takes: it has no cookie jar, so it holds the
|
|
104
|
+
* API's own access token and presents it directly. The token carries `sub`,
|
|
105
|
+
* `roles` and the session id but not the profile, so `email` and `phone` are
|
|
106
|
+
* left unset; `getSeamlessUser` hydrates them.
|
|
107
|
+
*/
|
|
108
|
+
export async function authenticateBearer(input) {
|
|
109
|
+
const token = extractBearerToken(input.authorization);
|
|
110
|
+
if (!token) {
|
|
111
|
+
return {
|
|
112
|
+
rejection: missingTokenRejection("Missing expected Authorization bearer token."),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const claims = await verifyAccessToken(token, input.authServerUrl, input.audience);
|
|
116
|
+
if (!claims) {
|
|
117
|
+
return {
|
|
118
|
+
rejection: { status: 401, errorCode: "Invalid or expired session" },
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
user: {
|
|
123
|
+
id: claims.sub,
|
|
124
|
+
roles: Array.isArray(claims.roles) ? claims.roles : [],
|
|
125
|
+
iat: claims.iat,
|
|
126
|
+
exp: claims.exp,
|
|
127
|
+
token,
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Authenticates a request from whichever credential it carries.
|
|
133
|
+
*
|
|
134
|
+
* The cookie wins when present, including when it is invalid: a browser with a
|
|
135
|
+
* stale cookie should see the session rejected rather than fall through to a
|
|
136
|
+
* header it never meant to send. Bearer is only consulted when there is no
|
|
137
|
+
* cookie at all and the adopter has opted in.
|
|
138
|
+
*/
|
|
139
|
+
export async function authenticateRequest(input) {
|
|
140
|
+
if (input.token || !input.bearer) {
|
|
141
|
+
return authenticateCookie(input);
|
|
142
|
+
}
|
|
143
|
+
assertSecretStrength("requireAuth: cookieSecret", input.cookieSecret);
|
|
144
|
+
if (!extractBearerToken(input.authorization)) {
|
|
145
|
+
return {
|
|
146
|
+
rejection: missingTokenRejection("Missing expected auth cookie or Authorization bearer token."),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return authenticateBearer({
|
|
150
|
+
authorization: input.authorization,
|
|
151
|
+
...input.bearer,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
91
154
|
/**
|
|
92
155
|
* Authorization only, against a session a guard has already authenticated.
|
|
93
156
|
*
|
package/dist/guards.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AuthTransport } from "../transport.js";
|
|
1
2
|
import type { ResultFailure } from "../result.js";
|
|
2
3
|
import type { CookiePayload } from "../ensureCookies.js";
|
|
3
4
|
export interface FinishLoginInput {
|
|
@@ -13,6 +14,7 @@ export interface FinishLoginOptions {
|
|
|
13
14
|
cookieDomain?: string;
|
|
14
15
|
accessCookieName: string;
|
|
15
16
|
refreshCookieName: string;
|
|
17
|
+
transport?: AuthTransport;
|
|
16
18
|
}
|
|
17
19
|
export interface FinishLoginResult extends ResultFailure {
|
|
18
20
|
status: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finishLogin.d.ts","sourceRoot":"","sources":["../../src/handlers/finishLogin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"finishLogin.d.ts","sourceRoot":"","sources":["../../src/handlers/finishLogin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;CACL;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,iBAAiB,CAAC,CA8B5B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { authFetch } from "../authFetch.js";
|
|
2
|
-
import {
|
|
2
|
+
import { sessionResult } from "../upstreamSession.js";
|
|
3
3
|
import { readPassthroughFailure } from "../upstreamError.js";
|
|
4
4
|
export async function finishLoginHandler(input, opts) {
|
|
5
5
|
const up = await authFetch(`${opts.authServerUrl}/webAuthn/login/finish`, {
|
|
@@ -19,14 +19,14 @@ export async function finishLoginHandler(input, opts) {
|
|
|
19
19
|
}
|
|
20
20
|
return {
|
|
21
21
|
status: 200,
|
|
22
|
-
|
|
23
|
-
setCookies: await issueSessionCookies(data, {
|
|
22
|
+
...(await sessionResult(data, {
|
|
24
23
|
authServerUrl: opts.authServerUrl,
|
|
25
24
|
audience: opts.audience,
|
|
26
25
|
accessCookieName: opts.accessCookieName,
|
|
27
26
|
refreshCookieName: opts.refreshCookieName,
|
|
28
27
|
cookieDomain: opts.cookieDomain,
|
|
29
|
-
|
|
28
|
+
transport: opts.transport,
|
|
29
|
+
})),
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
//# sourceMappingURL=finishLogin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finishLogin.js","sourceRoot":"","sources":["../../src/handlers/finishLogin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"finishLogin.js","sourceRoot":"","sources":["../../src/handlers/finishLogin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAgC7D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAuB,EACvB,IAAwB;IAExB,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,wBAAwB,EAAE;QACxE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;KAC7C,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACX,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,GAAG,sBAAsB,CAAC,IAAI,CAAC;SAChC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,GAAG;QACX,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE;YAC5B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
package/dist/handlers/login.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ResultFailure } from "../result.js";
|
|
2
2
|
import type { CookiePayload } from "../ensureCookies.js";
|
|
3
|
+
import { type UpstreamSessionResponse } from "../upstreamSession.js";
|
|
4
|
+
import type { AuthTransport } from "../transport.js";
|
|
3
5
|
export interface LoginInput {
|
|
4
6
|
body: unknown;
|
|
5
7
|
}
|
|
@@ -11,14 +13,20 @@ export interface LoginOptions {
|
|
|
11
13
|
serviceAuthorization?: string;
|
|
12
14
|
forwardedClientIp?: string;
|
|
13
15
|
forwardedUserAgent?: string;
|
|
16
|
+
transport?: AuthTransport;
|
|
17
|
+
}
|
|
18
|
+
export interface LoginStartBody {
|
|
19
|
+
message?: string;
|
|
20
|
+
identifierType?: string;
|
|
21
|
+
loginMethods?: string[];
|
|
14
22
|
}
|
|
15
23
|
export interface LoginResult extends ResultFailure {
|
|
16
24
|
status: number;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Cookie transport narrows the body to what the browser needs. Bearer
|
|
27
|
+
* transport returns the upstream body whole, ephemeral token included.
|
|
28
|
+
*/
|
|
29
|
+
body?: LoginStartBody | UpstreamSessionResponse;
|
|
22
30
|
setCookies?: {
|
|
23
31
|
name: string;
|
|
24
32
|
value: CookiePayload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/handlers/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/handlers/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,GAAG,uBAAuB,CAAC;IAChD,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;CACL;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,CAAC,CAsDtB"}
|
package/dist/handlers/login.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { authFetch } from "../authFetch.js";
|
|
2
2
|
import { readPassthroughFailure } from "../upstreamError.js";
|
|
3
|
-
import { verifyUpstreamSession } from "../upstreamSession.js";
|
|
3
|
+
import { verifyUpstreamSession, } from "../upstreamSession.js";
|
|
4
4
|
export async function loginHandler(input, opts) {
|
|
5
5
|
const up = await authFetch(`${opts.authServerUrl}/login`, {
|
|
6
6
|
method: "POST",
|
|
@@ -19,6 +19,11 @@ export async function loginHandler(input, opts) {
|
|
|
19
19
|
// Login issues only the pre-auth cookie, so it verifies the response without
|
|
20
20
|
// building session cookies from it.
|
|
21
21
|
await verifyUpstreamSession(data, opts.authServerUrl, opts.audience);
|
|
22
|
+
// The ephemeral token is what carries the flow forward, and a bearer client
|
|
23
|
+
// has nowhere to get it from but the body.
|
|
24
|
+
if (opts.transport === "bearer") {
|
|
25
|
+
return { status: up.status, body: data };
|
|
26
|
+
}
|
|
22
27
|
const body = {
|
|
23
28
|
...(typeof data.message === "string" ? { message: data.message } : {}),
|
|
24
29
|
...(typeof data.identifierType === "string"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/handlers/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/handlers/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAEL,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAuC/B,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAiB,EACjB,IAAkB;IAElB,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,QAAQ,EAAE;QACxD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;QAC/C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;KAC5C,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACX,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,GAAG,sBAAsB,CAAC,IAAI,CAAC;SAChC,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,oCAAoC;IACpC,MAAM,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErE,4EAA4E;IAC5E,2CAA2C;IAC3C,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,IAAI,GAAG;QACX,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;YACzC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;YACzC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;YAClC,CAAC,CAAC;gBACE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CACpC,CAAC,IAAa,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAC5C;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,IAAI;QACJ,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,IAAI,CAAC,iBAAiB;gBAC5B,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;gBAC3C,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,YAAY;aAC1B;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AuthTransport } from "../transport.js";
|
|
1
2
|
import type { ResultFailure } from "../result.js";
|
|
2
3
|
import type { CookiePayload } from "../ensureCookies.js";
|
|
3
4
|
export interface OAuthHandlerOptions {
|
|
@@ -6,6 +7,7 @@ export interface OAuthHandlerOptions {
|
|
|
6
7
|
cookieDomain?: string;
|
|
7
8
|
accessCookieName: string;
|
|
8
9
|
refreshCookieName: string;
|
|
10
|
+
transport?: AuthTransport;
|
|
9
11
|
}
|
|
10
12
|
export interface OAuthRequestInput {
|
|
11
13
|
providerId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauthHandlers.d.ts","sourceRoot":"","sources":["../../src/handlers/oauthHandlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauthHandlers.d.ts","sourceRoot":"","sources":["../../src/handlers/oauthHandlers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;CACL;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC;;;;;;;;GAYjD;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC;;;;;;;;GAmBjD;AAED,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAgC7B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { authFetch } from "../authFetch.js";
|
|
2
|
-
import {
|
|
2
|
+
import { sessionResult } from "../upstreamSession.js";
|
|
3
3
|
import { readPassthroughFailure } from "../upstreamError.js";
|
|
4
4
|
export async function listOAuthProvidersHandler(opts) {
|
|
5
5
|
const up = await authFetch(`${opts.authServerUrl}/oauth/providers`, {
|
|
@@ -42,14 +42,14 @@ export async function finishOAuthLoginHandler(input, opts) {
|
|
|
42
42
|
}
|
|
43
43
|
return {
|
|
44
44
|
status: up.status,
|
|
45
|
-
|
|
46
|
-
setCookies: await issueSessionCookies(data, {
|
|
45
|
+
...(await sessionResult(data, {
|
|
47
46
|
authServerUrl: opts.authServerUrl,
|
|
48
47
|
audience: opts.audience,
|
|
49
48
|
accessCookieName: opts.accessCookieName,
|
|
50
49
|
refreshCookieName: opts.refreshCookieName,
|
|
51
50
|
cookieDomain: opts.cookieDomain,
|
|
52
|
-
|
|
51
|
+
transport: opts.transport,
|
|
52
|
+
})),
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
//# sourceMappingURL=oauthHandlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauthHandlers.js","sourceRoot":"","sources":["../../src/handlers/oauthHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"oauthHandlers.js","sourceRoot":"","sources":["../../src/handlers/oauthHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAgC7D,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAAgD;IAEhD,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,kBAAkB,EAAE;QAClE,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7B,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAwB,EACxB,IAAgD;IAEhD,MAAM,EAAE,GAAG,MAAM,SAAS,CACxB,GAAG,IAAI,CAAC,aAAa,UAAU,kBAAkB,CAAC,KAAK,CAAC,UAAW,CAAC,QAAQ,EAC5E;QACE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;KAC7C,CACF,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7B,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAwB,EACxB,IAAyB;IAEzB,MAAM,EAAE,GAAG,MAAM,SAAS,CACxB,GAAG,IAAI,CAAC,aAAa,UAAU,kBAAkB,CAAC,KAAK,CAAC,UAAW,CAAC,WAAW,EAC/E;QACE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;KAC7C,CACF,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACX,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,GAAG,sBAAsB,CAAC,IAAI,CAAC;SAChC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE;YAC5B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AuthTransport } from "../transport.js";
|
|
1
2
|
import type { ResultFailure } from "../result.js";
|
|
2
3
|
import type { CookiePayload } from "../ensureCookies.js";
|
|
3
4
|
export interface PollMagicLinkConfirmationInput {
|
|
@@ -12,6 +13,7 @@ export interface PollMagicLinkConfirmationOptions {
|
|
|
12
13
|
accessCookieName: string;
|
|
13
14
|
refreshCookieName: string;
|
|
14
15
|
serviceAuthorization?: string;
|
|
16
|
+
transport?: AuthTransport;
|
|
15
17
|
}
|
|
16
18
|
export interface PollMagicLinkConfirmationResult extends ResultFailure {
|
|
17
19
|
status: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pollMagicLinkConfirmationHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/pollMagicLinkConfirmationHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pollMagicLinkConfirmationHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/pollMagicLinkConfirmationHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,8BAA8B;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gCAAgC;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,MAAM,WAAW,+BAAgC,SAAQ,aAAa;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,aAAa,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;CACL;AAED,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,8BAA8B,EACrC,IAAI,EAAE,gCAAgC,GACrC,OAAO,CAAC,+BAA+B,CAAC,CA0C1C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { authFetch } from "../authFetch.js";
|
|
2
|
-
import {
|
|
2
|
+
import { sessionResult } from "../upstreamSession.js";
|
|
3
3
|
import { readPassthroughFailure } from "../upstreamError.js";
|
|
4
4
|
export async function pollMagicLinkConfirmationHandler(input, opts) {
|
|
5
5
|
const up = await authFetch(`${opts.authServerUrl}/magic-link/check`, {
|
|
@@ -29,14 +29,14 @@ export async function pollMagicLinkConfirmationHandler(input, opts) {
|
|
|
29
29
|
}
|
|
30
30
|
return {
|
|
31
31
|
status: 200,
|
|
32
|
-
|
|
33
|
-
setCookies: await issueSessionCookies(data, {
|
|
32
|
+
...(await sessionResult(data, {
|
|
34
33
|
authServerUrl: opts.authServerUrl,
|
|
35
34
|
audience: opts.audience,
|
|
36
35
|
accessCookieName: opts.accessCookieName,
|
|
37
36
|
refreshCookieName: opts.refreshCookieName,
|
|
38
37
|
cookieDomain: opts.cookieDomain,
|
|
39
|
-
|
|
38
|
+
transport: opts.transport,
|
|
39
|
+
})),
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
//# sourceMappingURL=pollMagicLinkConfirmationHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pollMagicLinkConfirmationHandler.js","sourceRoot":"","sources":["../../src/handlers/pollMagicLinkConfirmationHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"pollMagicLinkConfirmationHandler.js","sourceRoot":"","sources":["../../src/handlers/pollMagicLinkConfirmationHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA+B7D,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,KAAqC,EACrC,IAAsC;IAEtC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,mBAAmB,EAAE;QACnE,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;KAChD,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,GAAG;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACX,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,GAAG,sBAAsB,CAAC,IAAI,CAAC;SAChC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;QACtD,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,IAAI,EAAE,IAAI;SACX,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,GAAG;QACX,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE;YAC5B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|