@seamless-auth/core 0.10.0 → 0.12.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 +50 -6
- package/dist/apiContract.d.ts +41 -0
- package/dist/apiContract.d.ts.map +1 -0
- package/dist/apiContract.js +48 -0
- package/dist/apiContract.js.map +1 -0
- package/dist/applyResult.d.ts +100 -0
- package/dist/applyResult.d.ts.map +1 -0
- package/dist/applyResult.js +95 -0
- package/dist/applyResult.js.map +1 -0
- package/dist/authMessaging.d.ts +14 -52
- package/dist/authMessaging.d.ts.map +1 -1
- package/dist/deliverAuthMessage.d.ts +15 -0
- package/dist/deliverAuthMessage.d.ts.map +1 -0
- package/dist/deliverAuthMessage.js +123 -0
- package/dist/deliverAuthMessage.js.map +1 -0
- package/dist/ensureCookies.d.ts +2 -2
- package/dist/ensureCookies.d.ts.map +1 -1
- package/dist/ensureCookies.js +5 -5
- package/dist/ensureCookies.js.map +1 -1
- package/dist/getSeamlessUser.d.ts +9 -8
- package/dist/getSeamlessUser.d.ts.map +1 -1
- package/dist/getSeamlessUser.js.map +1 -1
- package/dist/guards.d.ts +73 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +115 -0
- package/dist/guards.js.map +1 -0
- package/dist/handlers/admin.d.ts +4 -3
- package/dist/handlers/admin.d.ts.map +1 -1
- package/dist/handlers/admin.js +4 -10
- package/dist/handlers/admin.js.map +1 -1
- package/dist/handlers/finishLogin.d.ts +2 -2
- package/dist/handlers/finishLogin.d.ts.map +1 -1
- package/dist/handlers/finishLogin.js +10 -37
- package/dist/handlers/finishLogin.js.map +1 -1
- package/dist/handlers/finishRegister.d.ts +2 -2
- package/dist/handlers/finishRegister.d.ts.map +1 -1
- package/dist/handlers/finishRegister.js +10 -34
- package/dist/handlers/finishRegister.js.map +1 -1
- package/dist/handlers/internalMetrics.d.ts +4 -3
- package/dist/handlers/internalMetrics.d.ts.map +1 -1
- package/dist/handlers/internalMetrics.js +4 -10
- package/dist/handlers/internalMetrics.js.map +1 -1
- package/dist/handlers/login.d.ts +2 -2
- package/dist/handlers/login.d.ts.map +1 -1
- package/dist/handlers/login.js +6 -9
- package/dist/handlers/login.js.map +1 -1
- package/dist/handlers/logout.d.ts.map +1 -1
- package/dist/handlers/logout.js.map +1 -1
- package/dist/handlers/me.d.ts +2 -2
- package/dist/handlers/me.d.ts.map +1 -1
- package/dist/handlers/me.js +1 -1
- package/dist/handlers/me.js.map +1 -1
- package/dist/handlers/oauthHandlers.d.ts +10 -6
- package/dist/handlers/oauthHandlers.d.ts.map +1 -1
- package/dist/handlers/oauthHandlers.js +12 -39
- package/dist/handlers/oauthHandlers.js.map +1 -1
- package/dist/handlers/pollMagicLinkConfirmationHandler.d.ts +2 -2
- package/dist/handlers/pollMagicLinkConfirmationHandler.d.ts.map +1 -1
- package/dist/handlers/pollMagicLinkConfirmationHandler.js +10 -37
- package/dist/handlers/pollMagicLinkConfirmationHandler.js.map +1 -1
- package/dist/handlers/register.d.ts +2 -2
- package/dist/handlers/register.d.ts.map +1 -1
- package/dist/handlers/register.js +4 -4
- package/dist/handlers/register.js.map +1 -1
- package/dist/handlers/requestMagicLinkHandler.d.ts +2 -2
- package/dist/handlers/requestMagicLinkHandler.d.ts.map +1 -1
- package/dist/handlers/requestMagicLinkHandler.js +4 -4
- package/dist/handlers/requestMagicLinkHandler.js.map +1 -1
- package/dist/handlers/requestOtpHandler.d.ts +2 -2
- package/dist/handlers/requestOtpHandler.d.ts.map +1 -1
- package/dist/handlers/requestOtpHandler.js +4 -4
- package/dist/handlers/requestOtpHandler.js.map +1 -1
- package/dist/handlers/sessions.d.ts +2 -2
- package/dist/handlers/sessions.d.ts.map +1 -1
- package/dist/handlers/sessions.js +2 -1
- package/dist/handlers/sessions.js.map +1 -1
- package/dist/handlers/switchOrganizationHandler.d.ts +2 -2
- package/dist/handlers/switchOrganizationHandler.d.ts.map +1 -1
- package/dist/handlers/switchOrganizationHandler.js +9 -28
- package/dist/handlers/switchOrganizationHandler.js.map +1 -1
- package/dist/handlers/systemConfig.d.ts +11 -2
- package/dist/handlers/systemConfig.d.ts.map +1 -1
- package/dist/handlers/systemConfig.js +29 -3
- package/dist/handlers/systemConfig.js.map +1 -1
- package/dist/handlers/verifyLoginOtpHandler.d.ts +2 -2
- package/dist/handlers/verifyLoginOtpHandler.d.ts.map +1 -1
- package/dist/handlers/verifyLoginOtpHandler.js +10 -37
- package/dist/handlers/verifyLoginOtpHandler.js.map +1 -1
- package/dist/handlers/verifyMagicLinkHandler.d.ts +2 -2
- package/dist/handlers/verifyMagicLinkHandler.d.ts.map +1 -1
- package/dist/handlers/verifyMagicLinkHandler.js +2 -1
- package/dist/handlers/verifyMagicLinkHandler.js.map +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +26 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +24 -0
- package/dist/logger.js.map +1 -0
- package/dist/proxyRequest.d.ts +62 -0
- package/dist/proxyRequest.d.ts.map +1 -0
- package/dist/proxyRequest.js +82 -0
- package/dist/proxyRequest.js.map +1 -0
- package/dist/redaction.d.ts.map +1 -1
- package/dist/redaction.js +8 -2
- package/dist/redaction.js.map +1 -1
- package/dist/refreshAccessToken.d.ts.map +1 -1
- package/dist/refreshAccessToken.js.map +1 -1
- package/dist/result.d.ts +23 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +2 -0
- package/dist/result.js.map +1 -0
- package/dist/upstreamError.d.ts +31 -0
- package/dist/upstreamError.d.ts.map +1 -0
- package/dist/upstreamError.js +49 -0
- package/dist/upstreamError.js.map +1 -0
- package/dist/upstreamSession.d.ts +53 -0
- package/dist/upstreamSession.d.ts.map +1 -0
- package/dist/upstreamSession.js +56 -0
- package/dist/upstreamSession.js.map +1 -0
- package/dist/verifySignedAuthResponse.d.ts.map +1 -1
- package/dist/verifySignedAuthResponse.js +2 -1
- package/dist/verifySignedAuthResponse.js.map +1 -1
- package/package.json +2 -1
- package/dist/scopedRoles.d.ts +0 -3
- package/dist/scopedRoles.d.ts.map +0 -1
- package/dist/scopedRoles.js +0 -39
- package/dist/scopedRoles.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureCookies.d.ts","sourceRoot":"","sources":["../src/ensureCookies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ensureCookies.d.ts","sourceRoot":"","sources":["../src/ensureCookies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAiND,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAuG9B"}
|
package/dist/ensureCookies.js
CHANGED
|
@@ -143,7 +143,7 @@ async function refreshRequiredCookie(cookieName, refreshCookie, opts) {
|
|
|
143
143
|
return {
|
|
144
144
|
type: "error",
|
|
145
145
|
status: 401,
|
|
146
|
-
|
|
146
|
+
errorCode: "Refresh failed",
|
|
147
147
|
clearCookies: [
|
|
148
148
|
cookieName,
|
|
149
149
|
opts.registrationCookieName,
|
|
@@ -214,7 +214,7 @@ export async function ensureCookies(input, opts) {
|
|
|
214
214
|
return {
|
|
215
215
|
type: "error",
|
|
216
216
|
status: 400,
|
|
217
|
-
|
|
217
|
+
errorCode: "Missing required cookie",
|
|
218
218
|
};
|
|
219
219
|
}
|
|
220
220
|
const cookieValue = input.cookies[cookieName];
|
|
@@ -225,7 +225,7 @@ export async function ensureCookies(input, opts) {
|
|
|
225
225
|
return {
|
|
226
226
|
type: "error",
|
|
227
227
|
status: 400,
|
|
228
|
-
|
|
228
|
+
errorCode: `Missing required cookie "${cookieName}"`,
|
|
229
229
|
};
|
|
230
230
|
}
|
|
231
231
|
return refreshed;
|
|
@@ -236,7 +236,7 @@ export async function ensureCookies(input, opts) {
|
|
|
236
236
|
return {
|
|
237
237
|
type: "error",
|
|
238
238
|
status: 401,
|
|
239
|
-
|
|
239
|
+
errorCode: `Invalid or expired ${cookieName} cookie`,
|
|
240
240
|
};
|
|
241
241
|
}
|
|
242
242
|
const token = typeof payload.token === "string" ? payload.token : undefined;
|
|
@@ -250,7 +250,7 @@ export async function ensureCookies(input, opts) {
|
|
|
250
250
|
return {
|
|
251
251
|
type: "error",
|
|
252
252
|
status: 401,
|
|
253
|
-
|
|
253
|
+
errorCode: `Invalid or expired ${cookieName} cookie`,
|
|
254
254
|
clearCookies: [cookieName],
|
|
255
255
|
};
|
|
256
256
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureCookies.js","sourceRoot":"","sources":["../src/ensureCookies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ensureCookies.js","sourceRoot":"","sources":["../src/ensureCookies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
+
import type { MeUser } from "@seamless-auth/types";
|
|
1
2
|
/**
|
|
2
3
|
* The user object returned by the auth server's `GET /users/me`.
|
|
3
4
|
*
|
|
4
5
|
* `lastLogin` is an ISO 8601 timestamp, null until the user's first login.
|
|
5
6
|
* `activeOrganizationId` is null when the access token carries no org context.
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
/**
|
|
9
|
+
* The caller's own user record, hydrated from the auth API. Distinct from
|
|
10
|
+
* `SeamlessAuthUser`, which is only what the access cookie carries.
|
|
11
|
+
*
|
|
12
|
+
* Aliased to the types package's `MeUser` rather than declared again. The name
|
|
13
|
+
* stays `SeamlessUser` here because that is what adapters and adopters import.
|
|
14
|
+
*/
|
|
15
|
+
export type SeamlessUser = MeUser;
|
|
15
16
|
export interface GetSeamlessUserOptions {
|
|
16
17
|
authServerUrl: string;
|
|
17
18
|
cookieSecret: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSeamlessUser.d.ts","sourceRoot":"","sources":["../src/getSeamlessUser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getSeamlessUser.d.ts","sourceRoot":"","sources":["../src/getSeamlessUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAMnD;;;;;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;CAC5B;AAED;;;;;;;;;GASG;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,CAsBnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSeamlessUser.js","sourceRoot":"","sources":["../src/getSeamlessUser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getSeamlessUser.js","sourceRoot":"","sources":["../src/getSeamlessUser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AA0B5D;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA2C,EAC3C,IAA4B;IAE5B,oBAAoB,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,iBAAiB,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAElC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,WAAW,EAAE;QACjE,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;QAC/C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KAC1C,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"}
|
package/dist/guards.d.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { SeamlessAuthUser } from "@seamless-auth/types";
|
|
2
|
+
import { type CookieSameSite } from "./applyResult.js";
|
|
3
|
+
/**
|
|
4
|
+
* The session a verified access cookie describes: the access token's claims as
|
|
5
|
+
* a resource server reads them off a request. Distinct from `MeUser`, which is
|
|
6
|
+
* the hydrated profile fetched from the auth API.
|
|
7
|
+
*
|
|
8
|
+
* A type-only re-export, so it costs nothing at runtime: the import is erased at
|
|
9
|
+
* compile time and neither zod nor the schema barrel enters the module graph.
|
|
10
|
+
*/
|
|
11
|
+
export type { SeamlessAuthUser } from "@seamless-auth/types";
|
|
12
|
+
/**
|
|
13
|
+
* A guard's decision to refuse a request. Adapters render it as
|
|
14
|
+
* `{ error: errorCode, ...detail }` and log `warn` when it is set.
|
|
15
|
+
*/
|
|
16
|
+
export interface GuardRejection {
|
|
17
|
+
status: number;
|
|
18
|
+
errorCode: string;
|
|
19
|
+
detail?: Record<string, unknown>;
|
|
20
|
+
warn?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface OriginCheckInput {
|
|
23
|
+
method: string;
|
|
24
|
+
/** `Sec-Fetch-Site`, already reduced to a single value. */
|
|
25
|
+
secFetchSite?: string;
|
|
26
|
+
/** `Origin`, already reduced to a single value. */
|
|
27
|
+
origin?: string;
|
|
28
|
+
cookieSecure?: boolean;
|
|
29
|
+
cookieSameSite?: CookieSameSite;
|
|
30
|
+
allowedOrigins?: string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Decides whether a cross-site state-changing request should be refused.
|
|
34
|
+
*
|
|
35
|
+
* Only matters when the adapter issues `SameSite=None` cookies, which the
|
|
36
|
+
* browser would otherwise attach to a forged cross-site request. A `Lax` or
|
|
37
|
+
* `Strict` cookie is not sent on one, so the check is inert there.
|
|
38
|
+
*
|
|
39
|
+
* `Sec-Fetch-Site` is the primary signal: current browsers send it and page
|
|
40
|
+
* JavaScript cannot forge it. When it is absent the `Origin` is matched against
|
|
41
|
+
* `allowedOrigins`, but only when the adopter opted in, so nothing regresses for
|
|
42
|
+
* callers that predate the guard.
|
|
43
|
+
*/
|
|
44
|
+
export declare function checkOrigin(input: OriginCheckInput): GuardRejection | undefined;
|
|
45
|
+
export interface CookieAuthInput {
|
|
46
|
+
/** The raw access cookie, or `undefined` when the request carried none. */
|
|
47
|
+
token?: string;
|
|
48
|
+
cookieSecret: string;
|
|
49
|
+
}
|
|
50
|
+
export type CookieAuthResult = {
|
|
51
|
+
user: SeamlessAuthUser;
|
|
52
|
+
rejection?: undefined;
|
|
53
|
+
} | {
|
|
54
|
+
user?: undefined;
|
|
55
|
+
rejection: GuardRejection;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Verifies an access cookie into a session.
|
|
59
|
+
*
|
|
60
|
+
* Does not refresh: silent refresh belongs to `ensureCookies`, mounted on the
|
|
61
|
+
* auth router. A guard on an adopter's own route only reads what is already
|
|
62
|
+
* there.
|
|
63
|
+
*/
|
|
64
|
+
export declare function authenticateCookie(input: CookieAuthInput): CookieAuthResult;
|
|
65
|
+
/**
|
|
66
|
+
* Authorization only, against a session a guard has already authenticated.
|
|
67
|
+
*
|
|
68
|
+
* Any one of the required roles is enough. Scoped names are understood: a broad
|
|
69
|
+
* `admin` grants everything under it, and a `:write` role grants the matching
|
|
70
|
+
* `:read`.
|
|
71
|
+
*/
|
|
72
|
+
export declare function authorizeRoles(user: SeamlessAuthUser | undefined, requiredRoles: string | string[]): GuardRejection | undefined;
|
|
73
|
+
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -0,0 +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;AAK9E;;;;;;;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;;;;;;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
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { resolveCookieSameSite } from "./applyResult.js";
|
|
2
|
+
import { hasScopedRole } from "@seamless-auth/types/role/matching";
|
|
3
|
+
import { assertSecretStrength } from "./validateSecrets.js";
|
|
4
|
+
import { verifyCookieJwt } from "./verifyCookieJwt.js";
|
|
5
|
+
// GET/HEAD are read-only and OPTIONS is the CORS preflight, so none can carry a
|
|
6
|
+
// state change worth gating.
|
|
7
|
+
const SAFE_METHODS = new Set(["GET", "HEAD", "OPTIONS"]);
|
|
8
|
+
function normalizeOrigin(value) {
|
|
9
|
+
return value.trim().toLowerCase();
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Decides whether a cross-site state-changing request should be refused.
|
|
13
|
+
*
|
|
14
|
+
* Only matters when the adapter issues `SameSite=None` cookies, which the
|
|
15
|
+
* browser would otherwise attach to a forged cross-site request. A `Lax` or
|
|
16
|
+
* `Strict` cookie is not sent on one, so the check is inert there.
|
|
17
|
+
*
|
|
18
|
+
* `Sec-Fetch-Site` is the primary signal: current browsers send it and page
|
|
19
|
+
* JavaScript cannot forge it. When it is absent the `Origin` is matched against
|
|
20
|
+
* `allowedOrigins`, but only when the adopter opted in, so nothing regresses for
|
|
21
|
+
* callers that predate the guard.
|
|
22
|
+
*/
|
|
23
|
+
export function checkOrigin(input) {
|
|
24
|
+
const active = resolveCookieSameSite(input) === "none";
|
|
25
|
+
if (!active || SAFE_METHODS.has(input.method)) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const rejection = {
|
|
29
|
+
status: 403,
|
|
30
|
+
errorCode: "cross_site_request_blocked",
|
|
31
|
+
};
|
|
32
|
+
if (input.secFetchSite !== undefined) {
|
|
33
|
+
return input.secFetchSite.toLowerCase() === "cross-site"
|
|
34
|
+
? rejection
|
|
35
|
+
: undefined;
|
|
36
|
+
}
|
|
37
|
+
// No `Origin` and no `Sec-Fetch-Site` is a same-origin or non-browser
|
|
38
|
+
// server-to-server caller.
|
|
39
|
+
if (input.origin === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
// A literal `null` origin is opaque or sandboxed, which is cross-site
|
|
43
|
+
// regardless of the allowlist.
|
|
44
|
+
if (input.origin === "null") {
|
|
45
|
+
return rejection;
|
|
46
|
+
}
|
|
47
|
+
// Older browser, but the adopter has not opted into an allowlist. Preserve the
|
|
48
|
+
// pre-guard behavior rather than start rejecting these.
|
|
49
|
+
if (!input.allowedOrigins) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const allowed = new Set(input.allowedOrigins.map(normalizeOrigin).filter(Boolean));
|
|
53
|
+
return allowed.has(normalizeOrigin(input.origin)) ? undefined : rejection;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Verifies an access cookie into a session.
|
|
57
|
+
*
|
|
58
|
+
* Does not refresh: silent refresh belongs to `ensureCookies`, mounted on the
|
|
59
|
+
* auth router. A guard on an adopter's own route only reads what is already
|
|
60
|
+
* there.
|
|
61
|
+
*/
|
|
62
|
+
export function authenticateCookie(input) {
|
|
63
|
+
assertSecretStrength("requireAuth: cookieSecret", input.cookieSecret);
|
|
64
|
+
if (!input.token) {
|
|
65
|
+
return {
|
|
66
|
+
rejection: {
|
|
67
|
+
status: 401,
|
|
68
|
+
errorCode: "Failed to find authentication token required",
|
|
69
|
+
warn: "Missing expected auth cookie.",
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const payload = verifyCookieJwt(input.token, input.cookieSecret);
|
|
74
|
+
if (!payload || !payload.sub) {
|
|
75
|
+
return {
|
|
76
|
+
rejection: { status: 401, errorCode: "Invalid or expired session" },
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
user: {
|
|
81
|
+
id: payload.sub,
|
|
82
|
+
roles: Array.isArray(payload.roles) ? payload.roles : [],
|
|
83
|
+
email: payload.email,
|
|
84
|
+
phone: payload.phone,
|
|
85
|
+
iat: payload.iat,
|
|
86
|
+
exp: payload.exp,
|
|
87
|
+
token: payload.token,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Authorization only, against a session a guard has already authenticated.
|
|
93
|
+
*
|
|
94
|
+
* Any one of the required roles is enough. Scoped names are understood: a broad
|
|
95
|
+
* `admin` grants everything under it, and a `:write` role grants the matching
|
|
96
|
+
* `:read`.
|
|
97
|
+
*/
|
|
98
|
+
export function authorizeRoles(user, requiredRoles) {
|
|
99
|
+
const roles = Array.isArray(requiredRoles) ? requiredRoles : [requiredRoles];
|
|
100
|
+
if (!user) {
|
|
101
|
+
return { status: 401, errorCode: "Authentication required" };
|
|
102
|
+
}
|
|
103
|
+
if (!Array.isArray(user.roles)) {
|
|
104
|
+
return { status: 403, errorCode: "User has no roles assigned" };
|
|
105
|
+
}
|
|
106
|
+
if (!hasScopedRole(user.roles, roles)) {
|
|
107
|
+
return {
|
|
108
|
+
status: 403,
|
|
109
|
+
errorCode: "Insufficient role",
|
|
110
|
+
detail: { required: roles, actual: user.roles },
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":"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"}
|
package/dist/handlers/admin.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type QueryInput } from "../proxyRequest.js";
|
|
2
|
+
import type { ResultFailure } from "../result.js";
|
|
1
3
|
type BaseOpts = {
|
|
2
4
|
authServerUrl: string;
|
|
3
5
|
authorization?: string;
|
|
@@ -5,15 +7,14 @@ type BaseOpts = {
|
|
|
5
7
|
forwardedClientIp?: string;
|
|
6
8
|
};
|
|
7
9
|
type WithQuery = BaseOpts & {
|
|
8
|
-
query?:
|
|
10
|
+
query?: QueryInput;
|
|
9
11
|
};
|
|
10
12
|
type WithBody = BaseOpts & {
|
|
11
13
|
body?: any;
|
|
12
14
|
};
|
|
13
|
-
type Result = {
|
|
15
|
+
type Result = ResultFailure & {
|
|
14
16
|
status: number;
|
|
15
17
|
body?: any;
|
|
16
|
-
error?: string;
|
|
17
18
|
};
|
|
18
19
|
export declare const getUsersHandler: (opts: BaseOpts) => Promise<Result>;
|
|
19
20
|
export declare const createUserHandler: (opts: WithBody) => Promise<Result>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/handlers/admin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/handlers/admin.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,KAAK,QAAQ,GAAG;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,SAAS,GAAG,QAAQ,GAAG;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,KAAK,QAAQ,GAAG,QAAQ,GAAG;IACzB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,KAAK,MAAM,GAAG,aAAa,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAiCF,eAAO,MAAM,eAAe,GAAI,MAAM,QAAQ,oBACR,CAAC;AAEvC,eAAO,MAAM,iBAAiB,GAAI,MAAM,QAAQ,oBACT,CAAC;AAExC,eAAO,MAAM,iBAAiB,GAAI,MAAM,QAAQ,oBACP,CAAC;AAE1C,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,MAAM,QAAQ,oBACM,CAAC;AAEvE,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,MAAM,QAAQ,oBACC,CAAC;AAErE,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,EAAE,MAAM,QAAQ,oBACQ,CAAC;AAE/E,eAAO,MAAM,oBAAoB,GAAI,MAAM,SAAS,oBACR,CAAC;AAE7C,eAAO,MAAM,yBAAyB,GAAI,MAAM,QAAQ,oBACP,CAAC;AAElD,eAAO,MAAM,sBAAsB,GAAI,MAAM,SAAS,oBACb,CAAC;AAE1C,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,EAAE,MAAM,QAAQ,oBACC,CAAC;AAExE,eAAO,MAAM,wBAAwB,GAAI,IAAI,MAAM,EAAE,MAAM,QAAQ,oBACS,CAAC;AAE7E,eAAO,MAAM,4BAA4B,GAAI,QAAQ,MAAM,EAAE,MAAM,QAAQ,oBAKxE,CAAC;AAEJ,eAAO,MAAM,sCAAsC,GACjD,QAAQ,MAAM,EACd,MAAM,QAAQ,oBAMb,CAAC"}
|
package/dist/handlers/admin.js
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
import { authFetch } from "../authFetch.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
return base;
|
|
5
|
-
const qs = new URLSearchParams(Object.entries(query)
|
|
6
|
-
.filter(([, v]) => v !== undefined && v !== null)
|
|
7
|
-
.map(([k, v]) => [k, String(v)])).toString();
|
|
8
|
-
return qs ? `${base}?${qs}` : base;
|
|
9
|
-
}
|
|
2
|
+
import { buildUpstreamUrl } from "../proxyRequest.js";
|
|
3
|
+
import { readUpstreamFailure } from "../upstreamError.js";
|
|
10
4
|
async function request(method, path, opts) {
|
|
11
|
-
const up = await authFetch(
|
|
5
|
+
const up = await authFetch(buildUpstreamUrl(opts.authServerUrl, path, opts.query), {
|
|
12
6
|
method,
|
|
13
7
|
authorization: opts.authorization,
|
|
14
8
|
body: opts.body,
|
|
@@ -19,7 +13,7 @@ async function request(method, path, opts) {
|
|
|
19
13
|
if (!up.ok) {
|
|
20
14
|
return {
|
|
21
15
|
status: up.status,
|
|
22
|
-
|
|
16
|
+
...readUpstreamFailure(data, "admin_request_failed"),
|
|
23
17
|
};
|
|
24
18
|
}
|
|
25
19
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/handlers/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/handlers/admin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ResultFailure } from "../result.js";
|
|
1
2
|
import type { CookiePayload } from "../ensureCookies.js";
|
|
2
3
|
export interface FinishLoginInput {
|
|
3
4
|
body: unknown;
|
|
@@ -12,10 +13,9 @@ export interface FinishLoginOptions {
|
|
|
12
13
|
accessCookieName: string;
|
|
13
14
|
refreshCookieName: string;
|
|
14
15
|
}
|
|
15
|
-
export interface FinishLoginResult {
|
|
16
|
+
export interface FinishLoginResult extends ResultFailure {
|
|
16
17
|
status: number;
|
|
17
18
|
body?: unknown;
|
|
18
|
-
error?: string;
|
|
19
19
|
setCookies?: {
|
|
20
20
|
name: string;
|
|
21
21
|
value: CookiePayload;
|
|
@@ -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":"AAGA,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;CAC5B;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;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,CA6B5B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { authFetch } from "../authFetch.js";
|
|
2
|
-
import {
|
|
2
|
+
import { issueSessionCookies } from "../upstreamSession.js";
|
|
3
|
+
import { readPassthroughFailure } from "../upstreamError.js";
|
|
3
4
|
export async function finishLoginHandler(input, opts) {
|
|
4
5
|
const up = await authFetch(`${opts.authServerUrl}/webAuthn/login/finish`, {
|
|
5
6
|
method: "POST",
|
|
@@ -12,47 +13,19 @@ export async function finishLoginHandler(input, opts) {
|
|
|
12
13
|
if (!up.ok) {
|
|
13
14
|
return {
|
|
14
15
|
status: up.status,
|
|
15
|
-
|
|
16
|
+
...readPassthroughFailure(data),
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
|
-
const verifiedAccessToken = await verifySignedAuthResponse(data.token, opts.authServerUrl, opts.audience);
|
|
19
|
-
if (!verifiedAccessToken) {
|
|
20
|
-
throw new Error("Invalid signed response from Auth Server");
|
|
21
|
-
}
|
|
22
|
-
if (verifiedAccessToken.sub !== data.sub) {
|
|
23
|
-
throw new Error("Signature mismatch with data payload");
|
|
24
|
-
}
|
|
25
|
-
const sessionId = typeof verifiedAccessToken.sid === "string"
|
|
26
|
-
? verifiedAccessToken.sid
|
|
27
|
-
: undefined;
|
|
28
19
|
return {
|
|
29
20
|
status: 200,
|
|
30
21
|
body: data,
|
|
31
|
-
setCookies:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
roles: data.roles,
|
|
39
|
-
email: data.email,
|
|
40
|
-
phone: data.phone,
|
|
41
|
-
organizationId: data.organizationId ?? null,
|
|
42
|
-
},
|
|
43
|
-
ttl: data.ttl,
|
|
44
|
-
domain: opts.cookieDomain,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
name: opts.refreshCookieName,
|
|
48
|
-
value: {
|
|
49
|
-
sub: data.sub,
|
|
50
|
-
refreshToken: data.refreshToken,
|
|
51
|
-
},
|
|
52
|
-
ttl: data.refreshTtl,
|
|
53
|
-
domain: opts.cookieDomain,
|
|
54
|
-
},
|
|
55
|
-
],
|
|
22
|
+
setCookies: await issueSessionCookies(data, {
|
|
23
|
+
authServerUrl: opts.authServerUrl,
|
|
24
|
+
audience: opts.audience,
|
|
25
|
+
accessCookieName: opts.accessCookieName,
|
|
26
|
+
refreshCookieName: opts.refreshCookieName,
|
|
27
|
+
cookieDomain: opts.cookieDomain,
|
|
28
|
+
}),
|
|
56
29
|
};
|
|
57
30
|
}
|
|
58
31
|
//# 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;
|
|
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,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA8B7D,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;KAC3C,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,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,MAAM,mBAAmB,CAAC,IAAI,EAAE;YAC1C,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;SAChC,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ResultFailure } from "../result.js";
|
|
1
2
|
import type { CookiePayload } from "../ensureCookies.js";
|
|
2
3
|
export interface FinishRegisterInput {
|
|
3
4
|
authorization?: string;
|
|
@@ -13,9 +14,8 @@ export interface FinishRegisterOptions {
|
|
|
13
14
|
accessCookieName: string;
|
|
14
15
|
refreshCookieName: string;
|
|
15
16
|
}
|
|
16
|
-
export interface FinishRegisterResult {
|
|
17
|
+
export interface FinishRegisterResult extends ResultFailure {
|
|
17
18
|
status: number;
|
|
18
|
-
error?: unknown;
|
|
19
19
|
setCookies?: {
|
|
20
20
|
name: string;
|
|
21
21
|
value: CookiePayload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finishRegister.d.ts","sourceRoot":"","sources":["../../src/handlers/finishRegister.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"finishRegister.d.ts","sourceRoot":"","sources":["../../src/handlers/finishRegister.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,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;CAC3B;AAED,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,MAAM,EAAE,MAAM,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,qBAAqB,CACzC,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CA6B/B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { authFetch } from "../authFetch.js";
|
|
2
|
-
import {
|
|
2
|
+
import { issueSessionCookies } from "../upstreamSession.js";
|
|
3
|
+
import { readPassthroughFailure } from "../upstreamError.js";
|
|
3
4
|
export async function finishRegisterHandler(input, opts) {
|
|
4
5
|
const up = await authFetch(`${opts.authServerUrl}/webAuthn/register/finish`, {
|
|
5
6
|
method: "POST",
|
|
@@ -13,43 +14,18 @@ export async function finishRegisterHandler(input, opts) {
|
|
|
13
14
|
if (!up.ok) {
|
|
14
15
|
return {
|
|
15
16
|
status: up.status,
|
|
16
|
-
|
|
17
|
+
...readPassthroughFailure(data),
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
|
-
const verified = await verifySignedAuthResponse(data.token, opts.authServerUrl, opts.audience);
|
|
20
|
-
if (!verified) {
|
|
21
|
-
throw new Error("Invalid signed response from Auth Server");
|
|
22
|
-
}
|
|
23
|
-
if (verified.sub !== data.sub) {
|
|
24
|
-
throw new Error("Signature mismatch with data payload");
|
|
25
|
-
}
|
|
26
|
-
const sessionId = typeof verified.sid === "string" ? verified.sid : undefined;
|
|
27
20
|
return {
|
|
28
21
|
status: 204,
|
|
29
|
-
setCookies:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
roles: data.roles,
|
|
37
|
-
email: data.email,
|
|
38
|
-
phone: data.phone,
|
|
39
|
-
},
|
|
40
|
-
ttl: data.ttl,
|
|
41
|
-
domain: opts.cookieDomain,
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
name: opts.refreshCookieName,
|
|
45
|
-
value: {
|
|
46
|
-
sub: data.sub,
|
|
47
|
-
refreshToken: data.refreshToken,
|
|
48
|
-
},
|
|
49
|
-
ttl: data.refreshTtl,
|
|
50
|
-
domain: opts.cookieDomain,
|
|
51
|
-
},
|
|
52
|
-
],
|
|
22
|
+
setCookies: await issueSessionCookies(data, {
|
|
23
|
+
authServerUrl: opts.authServerUrl,
|
|
24
|
+
audience: opts.audience,
|
|
25
|
+
accessCookieName: opts.accessCookieName,
|
|
26
|
+
refreshCookieName: opts.refreshCookieName,
|
|
27
|
+
cookieDomain: opts.cookieDomain,
|
|
28
|
+
}),
|
|
53
29
|
};
|
|
54
30
|
}
|
|
55
31
|
//# sourceMappingURL=finishRegister.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finishRegister.js","sourceRoot":"","sources":["../../src/handlers/finishRegister.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"finishRegister.js","sourceRoot":"","sources":["../../src/handlers/finishRegister.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA8B7D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAA0B,EAC1B,IAA2B;IAE3B,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,2BAA2B,EAAE;QAC3E,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;KAC3C,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,UAAU,EAAE,MAAM,mBAAmB,CAAC,IAAI,EAAE;YAC1C,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;SAChC,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type QueryInput } from "../proxyRequest.js";
|
|
2
|
+
import type { ResultFailure } from "../result.js";
|
|
1
3
|
type BaseOpts = {
|
|
2
4
|
authServerUrl: string;
|
|
3
5
|
authorization?: string;
|
|
@@ -5,12 +7,11 @@ type BaseOpts = {
|
|
|
5
7
|
forwardedClientIp?: string;
|
|
6
8
|
};
|
|
7
9
|
type WithQuery = BaseOpts & {
|
|
8
|
-
query?:
|
|
10
|
+
query?: QueryInput;
|
|
9
11
|
};
|
|
10
|
-
type Result = {
|
|
12
|
+
type Result = ResultFailure & {
|
|
11
13
|
status: number;
|
|
12
14
|
body?: any;
|
|
13
|
-
error?: string;
|
|
14
15
|
};
|
|
15
16
|
export declare const getAuthEventSummaryHandler: (opts: WithQuery) => Promise<Result>;
|
|
16
17
|
export declare const getAuthEventTimeseriesHandler: (opts: WithQuery) => Promise<Result>;
|