@xemahq/oidc-session-nest 0.1.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/LICENSE +176 -0
- package/README.md +101 -0
- package/dist/config/oidc-session-env.d.ts +6 -0
- package/dist/config/oidc-session-env.d.ts.map +1 -0
- package/dist/config/oidc-session-env.js +123 -0
- package/dist/config/oidc-session-env.js.map +1 -0
- package/dist/config/oidc-session-options.d.ts +33 -0
- package/dist/config/oidc-session-options.d.ts.map +1 -0
- package/dist/config/oidc-session-options.js +67 -0
- package/dist/config/oidc-session-options.js.map +1 -0
- package/dist/errors.d.ts +37 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +60 -0
- package/dist/errors.js.map +1 -0
- package/dist/http/cookie.d.ts +12 -0
- package/dist/http/cookie.d.ts.map +1 -0
- package/dist/http/cookie.js +82 -0
- package/dist/http/cookie.js.map +1 -0
- package/dist/http/headers.d.ts +2 -0
- package/dist/http/headers.d.ts.map +1 -0
- package/dist/http/headers.js +5 -0
- package/dist/http/headers.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/nest/oidc-session-auth.controller.d.ts +30 -0
- package/dist/nest/oidc-session-auth.controller.d.ts.map +1 -0
- package/dist/nest/oidc-session-auth.controller.js +182 -0
- package/dist/nest/oidc-session-auth.controller.js.map +1 -0
- package/dist/nest/oidc-session-context.d.ts +11 -0
- package/dist/nest/oidc-session-context.d.ts.map +1 -0
- package/dist/nest/oidc-session-context.js +37 -0
- package/dist/nest/oidc-session-context.js.map +1 -0
- package/dist/nest/oidc-session.guard.d.ts +5 -0
- package/dist/nest/oidc-session.guard.d.ts.map +1 -0
- package/dist/nest/oidc-session.guard.js +43 -0
- package/dist/nest/oidc-session.guard.js.map +1 -0
- package/dist/nest/oidc-session.middleware.d.ts +19 -0
- package/dist/nest/oidc-session.middleware.d.ts.map +1 -0
- package/dist/nest/oidc-session.middleware.js +57 -0
- package/dist/nest/oidc-session.middleware.js.map +1 -0
- package/dist/nest/oidc-session.module.d.ts +22 -0
- package/dist/nest/oidc-session.module.d.ts.map +1 -0
- package/dist/nest/oidc-session.module.js +100 -0
- package/dist/nest/oidc-session.module.js.map +1 -0
- package/dist/nest/session-actor.decorator.d.ts +2 -0
- package/dist/nest/session-actor.decorator.d.ts.map +1 -0
- package/dist/nest/session-actor.decorator.js +13 -0
- package/dist/nest/session-actor.decorator.js.map +1 -0
- package/dist/nest/session-client-transport.d.ts +6 -0
- package/dist/nest/session-client-transport.d.ts.map +1 -0
- package/dist/nest/session-client-transport.js +41 -0
- package/dist/nest/session-client-transport.js.map +1 -0
- package/dist/nest/tokens.d.ts +3 -0
- package/dist/nest/tokens.d.ts.map +1 -0
- package/dist/nest/tokens.js +6 -0
- package/dist/nest/tokens.js.map +1 -0
- package/dist/oidc/discovery.d.ts +30 -0
- package/dist/oidc/discovery.d.ts.map +1 -0
- package/dist/oidc/discovery.js +101 -0
- package/dist/oidc/discovery.js.map +1 -0
- package/dist/oidc/oidc-client.d.ts +44 -0
- package/dist/oidc/oidc-client.d.ts.map +1 -0
- package/dist/oidc/oidc-client.js +190 -0
- package/dist/oidc/oidc-client.js.map +1 -0
- package/dist/oidc/pkce.d.ts +8 -0
- package/dist/oidc/pkce.d.ts.map +1 -0
- package/dist/oidc/pkce.js +15 -0
- package/dist/oidc/pkce.js.map +1 -0
- package/dist/session/actor.d.ts +14 -0
- package/dist/session/actor.d.ts.map +1 -0
- package/dist/session/actor.js +32 -0
- package/dist/session/actor.js.map +1 -0
- package/dist/session/in-memory-session-store.d.ts +21 -0
- package/dist/session/in-memory-session-store.d.ts.map +1 -0
- package/dist/session/in-memory-session-store.js +79 -0
- package/dist/session/in-memory-session-store.js.map +1 -0
- package/dist/session/redis-session-store.d.ts +28 -0
- package/dist/session/redis-session-store.d.ts.map +1 -0
- package/dist/session/redis-session-store.js +121 -0
- package/dist/session/redis-session-store.js.map +1 -0
- package/dist/session/session-service.d.ts +55 -0
- package/dist/session/session-service.d.ts.map +1 -0
- package/dist/session/session-service.js +224 -0
- package/dist/session/session-service.js.map +1 -0
- package/dist/session/session-store.d.ts +35 -0
- package/dist/session/session-store.d.ts.map +1 -0
- package/dist/session/session-store.js +3 -0
- package/dist/session/session-store.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface SetCookieOptions {
|
|
2
|
+
readonly httpOnly: boolean;
|
|
3
|
+
readonly secure: boolean;
|
|
4
|
+
readonly sameSite: 'lax' | 'strict' | 'none';
|
|
5
|
+
readonly path: string;
|
|
6
|
+
readonly domain?: string;
|
|
7
|
+
readonly maxAgeSeconds?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function readCookie(header: string | undefined, name: string): string | null;
|
|
10
|
+
export declare function serializeCookie(name: string, value: string, options: SetCookieOptions): string;
|
|
11
|
+
export declare function safeRelativePath(candidate: string | undefined): string | null;
|
|
12
|
+
//# sourceMappingURL=cookie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../src/http/cookie.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAQD,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAyBf;AAGD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAkBR;AA0CD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAiB7E"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readCookie = readCookie;
|
|
4
|
+
exports.serializeCookie = serializeCookie;
|
|
5
|
+
exports.safeRelativePath = safeRelativePath;
|
|
6
|
+
function readCookie(header, name) {
|
|
7
|
+
if (header === undefined || header === '') {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
for (const part of header.split(';')) {
|
|
11
|
+
const separator = part.indexOf('=');
|
|
12
|
+
if (separator === -1) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
if (part.slice(0, separator).trim() !== name) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const raw = part.slice(separator + 1).trim();
|
|
19
|
+
if (raw === '') {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
return decodeURIComponent(raw);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
function serializeCookie(name, value, options) {
|
|
32
|
+
const parts = [`${name}=${encodeURIComponent(value)}`, `Path=${options.path}`];
|
|
33
|
+
if (options.domain !== undefined) {
|
|
34
|
+
parts.push(`Domain=${options.domain}`);
|
|
35
|
+
}
|
|
36
|
+
if (options.maxAgeSeconds !== undefined) {
|
|
37
|
+
const seconds = Math.max(0, Math.floor(options.maxAgeSeconds));
|
|
38
|
+
parts.push(`Max-Age=${seconds}`);
|
|
39
|
+
parts.push(`Expires=${new Date(Date.now() + seconds * 1000).toUTCString()}`);
|
|
40
|
+
}
|
|
41
|
+
parts.push(`SameSite=${capitalize(options.sameSite)}`);
|
|
42
|
+
if (options.httpOnly) {
|
|
43
|
+
parts.push('HttpOnly');
|
|
44
|
+
}
|
|
45
|
+
if (options.secure) {
|
|
46
|
+
parts.push('Secure');
|
|
47
|
+
}
|
|
48
|
+
return parts.join('; ');
|
|
49
|
+
}
|
|
50
|
+
function capitalize(value) {
|
|
51
|
+
return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;
|
|
52
|
+
}
|
|
53
|
+
const LAST_CONTROL_CODEPOINT = 0x1f;
|
|
54
|
+
const DELETE_CODEPOINT = 0x7f;
|
|
55
|
+
function containsControlCharacter(value) {
|
|
56
|
+
for (const character of value) {
|
|
57
|
+
const codepoint = character.codePointAt(0) ?? 0;
|
|
58
|
+
if (codepoint <= LAST_CONTROL_CODEPOINT || codepoint === DELETE_CODEPOINT) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
function safeRelativePath(candidate) {
|
|
65
|
+
if (candidate === undefined || candidate === '') {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
if (!candidate.startsWith('/')) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
if (candidate.startsWith('//')) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
if (candidate.includes('\\')) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
if (containsControlCharacter(candidate)) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return candidate;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=cookie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../src/http/cookie.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/http/headers.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,mBAAmB,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/http/headers.ts"],"names":[],"mappings":";;;AAuBa,QAAA,mBAAmB,GAAG,cAAc,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export { OidcSessionError, OidcSessionErrorCode, OidcCallbackRejectedError, OidcLoginStateUnknownError, OidcTokenEndpointFailedError, SessionExpiredError, SessionRefreshContendedError, SessionRequiredError, type OidcSessionErrorBody, } from './errors';
|
|
2
|
+
export { assertOidcSessionOptions, OidcSessionConfigError, REQUIRED_OIDC_SCOPE, type OidcProviderOptions, type OidcSessionOptions, type SessionCookieOptions, type SessionTtlOptions, } from './config/oidc-session-options';
|
|
3
|
+
export { loadOidcSessionOptionsFromEnv, OIDC_SESSION_OPTIONAL_ENV_VARS, OIDC_SESSION_REQUIRED_ENV_VARS, type EnvReader, } from './config/oidc-session-env';
|
|
4
|
+
export { OidcDiscovery, type FetchLike, type OidcDiscoveryDocument, } from './oidc/discovery';
|
|
5
|
+
export { createPkcePair, randomUrlSafeToken, type PkcePair } from './oidc/pkce';
|
|
6
|
+
export { OidcClient, OidcInvalidGrantError, type AuthorizationRequest, type OidcClientDeps, type OidcTokenSet, } from './oidc/oidc-client';
|
|
7
|
+
export type { PendingAuthorization, ReadSessionOptions, SessionRecord, SessionStore, } from './session/session-store';
|
|
8
|
+
export { InMemorySessionStore, type InMemorySessionStoreOptions, } from './session/in-memory-session-store';
|
|
9
|
+
export { ioredisScriptClient, RedisSessionStore, type IoredisLike, type RedisScriptClient, type RedisSessionStoreOptions, } from './session/redis-session-store';
|
|
10
|
+
export { resolveInitialActiveOrgId, resolveSessionOrgRoles, toSessionActor, type SessionActor as SessionActorShape, } from './session/actor';
|
|
11
|
+
export { SessionService, storeKeyFor, type EstablishedSession, type LiveSession, type ResolvedSession, type SessionServiceDeps, } from './session/session-service';
|
|
12
|
+
export { PROJECT_HEADER_NAME } from './http/headers';
|
|
13
|
+
export { readCookie, safeRelativePath, serializeCookie, type SetCookieOptions, } from './http/cookie';
|
|
14
|
+
export { currentSession, currentSessionScope, runWithSessionScope, setCurrentProjectId, type OidcSessionScope, } from './nest/oidc-session-context';
|
|
15
|
+
export { OIDC_SESSION_SCOPE, OidcSessionMiddleware, type SessionRequestLike, type SessionScopeCarrier, } from './nest/oidc-session.middleware';
|
|
16
|
+
export { OidcSessionGuard } from './nest/oidc-session.guard';
|
|
17
|
+
export { SessionActor } from './nest/session-actor.decorator';
|
|
18
|
+
export { sessionClientTransport, type SessionClientTransport, } from './nest/session-client-transport';
|
|
19
|
+
export { OidcSessionAuthController, type LogoutResponse, type SessionRequestShape, type SessionResponseLike, } from './nest/oidc-session-auth.controller';
|
|
20
|
+
export { OIDC_SESSION_OPTIONS, OIDC_SESSION_STORE } from './nest/tokens';
|
|
21
|
+
export { OidcSessionModule, type OidcSessionFactoryResult, type OidcSessionModuleAsyncOptions, } from './nest/oidc-session.module';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAC5B,mBAAmB,EACnB,4BAA4B,EAC5B,oBAAoB,EACpB,KAAK,oBAAoB,GAC1B,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,8BAA8B,EAC9B,KAAK,SAAS,GACf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,aAAa,EACb,KAAK,SAAS,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEhF,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,YAAY,GACb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,cAAc,EACd,KAAK,YAAY,IAAI,iBAAiB,GACvC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,cAAc,EACd,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,kBAAkB,EAIvB,KAAK,mBAAmB,GACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EACL,sBAAsB,EACtB,KAAK,sBAAsB,GAC5B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEzE,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,GACnC,MAAM,4BAA4B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OidcSessionModule = exports.OIDC_SESSION_STORE = exports.OIDC_SESSION_OPTIONS = exports.OidcSessionAuthController = exports.sessionClientTransport = exports.SessionActor = exports.OidcSessionGuard = exports.OidcSessionMiddleware = exports.OIDC_SESSION_SCOPE = exports.setCurrentProjectId = exports.runWithSessionScope = exports.currentSessionScope = exports.currentSession = exports.serializeCookie = exports.safeRelativePath = exports.readCookie = exports.PROJECT_HEADER_NAME = exports.storeKeyFor = exports.SessionService = exports.toSessionActor = exports.resolveSessionOrgRoles = exports.resolveInitialActiveOrgId = exports.RedisSessionStore = exports.ioredisScriptClient = exports.InMemorySessionStore = exports.OidcInvalidGrantError = exports.OidcClient = exports.randomUrlSafeToken = exports.createPkcePair = exports.OidcDiscovery = exports.OIDC_SESSION_REQUIRED_ENV_VARS = exports.OIDC_SESSION_OPTIONAL_ENV_VARS = exports.loadOidcSessionOptionsFromEnv = exports.REQUIRED_OIDC_SCOPE = exports.OidcSessionConfigError = exports.assertOidcSessionOptions = exports.SessionRequiredError = exports.SessionRefreshContendedError = exports.SessionExpiredError = exports.OidcTokenEndpointFailedError = exports.OidcLoginStateUnknownError = exports.OidcCallbackRejectedError = exports.OidcSessionErrorCode = exports.OidcSessionError = void 0;
|
|
4
|
+
var errors_1 = require("./errors");
|
|
5
|
+
Object.defineProperty(exports, "OidcSessionError", { enumerable: true, get: function () { return errors_1.OidcSessionError; } });
|
|
6
|
+
Object.defineProperty(exports, "OidcSessionErrorCode", { enumerable: true, get: function () { return errors_1.OidcSessionErrorCode; } });
|
|
7
|
+
Object.defineProperty(exports, "OidcCallbackRejectedError", { enumerable: true, get: function () { return errors_1.OidcCallbackRejectedError; } });
|
|
8
|
+
Object.defineProperty(exports, "OidcLoginStateUnknownError", { enumerable: true, get: function () { return errors_1.OidcLoginStateUnknownError; } });
|
|
9
|
+
Object.defineProperty(exports, "OidcTokenEndpointFailedError", { enumerable: true, get: function () { return errors_1.OidcTokenEndpointFailedError; } });
|
|
10
|
+
Object.defineProperty(exports, "SessionExpiredError", { enumerable: true, get: function () { return errors_1.SessionExpiredError; } });
|
|
11
|
+
Object.defineProperty(exports, "SessionRefreshContendedError", { enumerable: true, get: function () { return errors_1.SessionRefreshContendedError; } });
|
|
12
|
+
Object.defineProperty(exports, "SessionRequiredError", { enumerable: true, get: function () { return errors_1.SessionRequiredError; } });
|
|
13
|
+
var oidc_session_options_1 = require("./config/oidc-session-options");
|
|
14
|
+
Object.defineProperty(exports, "assertOidcSessionOptions", { enumerable: true, get: function () { return oidc_session_options_1.assertOidcSessionOptions; } });
|
|
15
|
+
Object.defineProperty(exports, "OidcSessionConfigError", { enumerable: true, get: function () { return oidc_session_options_1.OidcSessionConfigError; } });
|
|
16
|
+
Object.defineProperty(exports, "REQUIRED_OIDC_SCOPE", { enumerable: true, get: function () { return oidc_session_options_1.REQUIRED_OIDC_SCOPE; } });
|
|
17
|
+
var oidc_session_env_1 = require("./config/oidc-session-env");
|
|
18
|
+
Object.defineProperty(exports, "loadOidcSessionOptionsFromEnv", { enumerable: true, get: function () { return oidc_session_env_1.loadOidcSessionOptionsFromEnv; } });
|
|
19
|
+
Object.defineProperty(exports, "OIDC_SESSION_OPTIONAL_ENV_VARS", { enumerable: true, get: function () { return oidc_session_env_1.OIDC_SESSION_OPTIONAL_ENV_VARS; } });
|
|
20
|
+
Object.defineProperty(exports, "OIDC_SESSION_REQUIRED_ENV_VARS", { enumerable: true, get: function () { return oidc_session_env_1.OIDC_SESSION_REQUIRED_ENV_VARS; } });
|
|
21
|
+
var discovery_1 = require("./oidc/discovery");
|
|
22
|
+
Object.defineProperty(exports, "OidcDiscovery", { enumerable: true, get: function () { return discovery_1.OidcDiscovery; } });
|
|
23
|
+
var pkce_1 = require("./oidc/pkce");
|
|
24
|
+
Object.defineProperty(exports, "createPkcePair", { enumerable: true, get: function () { return pkce_1.createPkcePair; } });
|
|
25
|
+
Object.defineProperty(exports, "randomUrlSafeToken", { enumerable: true, get: function () { return pkce_1.randomUrlSafeToken; } });
|
|
26
|
+
var oidc_client_1 = require("./oidc/oidc-client");
|
|
27
|
+
Object.defineProperty(exports, "OidcClient", { enumerable: true, get: function () { return oidc_client_1.OidcClient; } });
|
|
28
|
+
Object.defineProperty(exports, "OidcInvalidGrantError", { enumerable: true, get: function () { return oidc_client_1.OidcInvalidGrantError; } });
|
|
29
|
+
var in_memory_session_store_1 = require("./session/in-memory-session-store");
|
|
30
|
+
Object.defineProperty(exports, "InMemorySessionStore", { enumerable: true, get: function () { return in_memory_session_store_1.InMemorySessionStore; } });
|
|
31
|
+
var redis_session_store_1 = require("./session/redis-session-store");
|
|
32
|
+
Object.defineProperty(exports, "ioredisScriptClient", { enumerable: true, get: function () { return redis_session_store_1.ioredisScriptClient; } });
|
|
33
|
+
Object.defineProperty(exports, "RedisSessionStore", { enumerable: true, get: function () { return redis_session_store_1.RedisSessionStore; } });
|
|
34
|
+
var actor_1 = require("./session/actor");
|
|
35
|
+
Object.defineProperty(exports, "resolveInitialActiveOrgId", { enumerable: true, get: function () { return actor_1.resolveInitialActiveOrgId; } });
|
|
36
|
+
Object.defineProperty(exports, "resolveSessionOrgRoles", { enumerable: true, get: function () { return actor_1.resolveSessionOrgRoles; } });
|
|
37
|
+
Object.defineProperty(exports, "toSessionActor", { enumerable: true, get: function () { return actor_1.toSessionActor; } });
|
|
38
|
+
var session_service_1 = require("./session/session-service");
|
|
39
|
+
Object.defineProperty(exports, "SessionService", { enumerable: true, get: function () { return session_service_1.SessionService; } });
|
|
40
|
+
Object.defineProperty(exports, "storeKeyFor", { enumerable: true, get: function () { return session_service_1.storeKeyFor; } });
|
|
41
|
+
var headers_1 = require("./http/headers");
|
|
42
|
+
Object.defineProperty(exports, "PROJECT_HEADER_NAME", { enumerable: true, get: function () { return headers_1.PROJECT_HEADER_NAME; } });
|
|
43
|
+
var cookie_1 = require("./http/cookie");
|
|
44
|
+
Object.defineProperty(exports, "readCookie", { enumerable: true, get: function () { return cookie_1.readCookie; } });
|
|
45
|
+
Object.defineProperty(exports, "safeRelativePath", { enumerable: true, get: function () { return cookie_1.safeRelativePath; } });
|
|
46
|
+
Object.defineProperty(exports, "serializeCookie", { enumerable: true, get: function () { return cookie_1.serializeCookie; } });
|
|
47
|
+
var oidc_session_context_1 = require("./nest/oidc-session-context");
|
|
48
|
+
Object.defineProperty(exports, "currentSession", { enumerable: true, get: function () { return oidc_session_context_1.currentSession; } });
|
|
49
|
+
Object.defineProperty(exports, "currentSessionScope", { enumerable: true, get: function () { return oidc_session_context_1.currentSessionScope; } });
|
|
50
|
+
Object.defineProperty(exports, "runWithSessionScope", { enumerable: true, get: function () { return oidc_session_context_1.runWithSessionScope; } });
|
|
51
|
+
Object.defineProperty(exports, "setCurrentProjectId", { enumerable: true, get: function () { return oidc_session_context_1.setCurrentProjectId; } });
|
|
52
|
+
var oidc_session_middleware_1 = require("./nest/oidc-session.middleware");
|
|
53
|
+
Object.defineProperty(exports, "OIDC_SESSION_SCOPE", { enumerable: true, get: function () { return oidc_session_middleware_1.OIDC_SESSION_SCOPE; } });
|
|
54
|
+
Object.defineProperty(exports, "OidcSessionMiddleware", { enumerable: true, get: function () { return oidc_session_middleware_1.OidcSessionMiddleware; } });
|
|
55
|
+
var oidc_session_guard_1 = require("./nest/oidc-session.guard");
|
|
56
|
+
Object.defineProperty(exports, "OidcSessionGuard", { enumerable: true, get: function () { return oidc_session_guard_1.OidcSessionGuard; } });
|
|
57
|
+
var session_actor_decorator_1 = require("./nest/session-actor.decorator");
|
|
58
|
+
Object.defineProperty(exports, "SessionActor", { enumerable: true, get: function () { return session_actor_decorator_1.SessionActor; } });
|
|
59
|
+
var session_client_transport_1 = require("./nest/session-client-transport");
|
|
60
|
+
Object.defineProperty(exports, "sessionClientTransport", { enumerable: true, get: function () { return session_client_transport_1.sessionClientTransport; } });
|
|
61
|
+
var oidc_session_auth_controller_1 = require("./nest/oidc-session-auth.controller");
|
|
62
|
+
Object.defineProperty(exports, "OidcSessionAuthController", { enumerable: true, get: function () { return oidc_session_auth_controller_1.OidcSessionAuthController; } });
|
|
63
|
+
var tokens_1 = require("./nest/tokens");
|
|
64
|
+
Object.defineProperty(exports, "OIDC_SESSION_OPTIONS", { enumerable: true, get: function () { return tokens_1.OIDC_SESSION_OPTIONS; } });
|
|
65
|
+
Object.defineProperty(exports, "OIDC_SESSION_STORE", { enumerable: true, get: function () { return tokens_1.OIDC_SESSION_STORE; } });
|
|
66
|
+
var oidc_session_module_1 = require("./nest/oidc-session.module");
|
|
67
|
+
Object.defineProperty(exports, "OidcSessionModule", { enumerable: true, get: function () { return oidc_session_module_1.OidcSessionModule; } });
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAWA,mCAUkB;AAThB,0GAAA,gBAAgB,OAAA;AAChB,8GAAA,oBAAoB,OAAA;AACpB,mHAAA,yBAAyB,OAAA;AACzB,oHAAA,0BAA0B,OAAA;AAC1B,sHAAA,4BAA4B,OAAA;AAC5B,6GAAA,mBAAmB,OAAA;AACnB,sHAAA,4BAA4B,OAAA;AAC5B,8GAAA,oBAAoB,OAAA;AAItB,sEAQuC;AAPrC,gIAAA,wBAAwB,OAAA;AACxB,8HAAA,sBAAsB,OAAA;AACtB,2HAAA,mBAAmB,OAAA;AAOrB,8DAKmC;AAJjC,iIAAA,6BAA6B,OAAA;AAC7B,kIAAA,8BAA8B,OAAA;AAC9B,kIAAA,8BAA8B,OAAA;AAIhC,8CAI0B;AAHxB,0GAAA,aAAa,OAAA;AAKf,oCAAgF;AAAvE,sGAAA,cAAc,OAAA;AAAE,0GAAA,kBAAkB,OAAA;AAE3C,kDAM4B;AAL1B,yGAAA,UAAU,OAAA;AACV,oHAAA,qBAAqB,OAAA;AAavB,6EAG2C;AAFzC,+HAAA,oBAAoB,OAAA;AAItB,qEAMuC;AALrC,0HAAA,mBAAmB,OAAA;AACnB,wHAAA,iBAAiB,OAAA;AAMnB,yCAKyB;AAJvB,kHAAA,yBAAyB,OAAA;AACzB,+GAAA,sBAAsB,OAAA;AACtB,uGAAA,cAAc,OAAA;AAIhB,6DAOmC;AANjC,iHAAA,cAAc,OAAA;AACd,8GAAA,WAAW,OAAA;AAOb,0CAAqD;AAA5C,8GAAA,mBAAmB,OAAA;AAE5B,wCAKuB;AAJrB,oGAAA,UAAU,OAAA;AACV,0GAAA,gBAAgB,OAAA;AAChB,yGAAA,eAAe,OAAA;AAIjB,oEAMqC;AALnC,sHAAA,cAAc,OAAA;AACd,2HAAA,mBAAmB,OAAA;AACnB,2HAAA,mBAAmB,OAAA;AACnB,2HAAA,mBAAmB,OAAA;AAIrB,0EAQwC;AAPtC,6HAAA,kBAAkB,OAAA;AAClB,gIAAA,qBAAqB,OAAA;AAQvB,gEAA6D;AAApD,sHAAA,gBAAgB,OAAA;AAEzB,0EAA8D;AAArD,uHAAA,YAAY,OAAA;AAErB,4EAGyC;AAFvC,kIAAA,sBAAsB,OAAA;AAIxB,oFAK6C;AAJ3C,yIAAA,yBAAyB,OAAA;AAM3B,wCAAyE;AAAhE,8GAAA,oBAAoB,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAEjD,kEAIoC;AAHlC,wHAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { OidcClient } from '../oidc/oidc-client';
|
|
2
|
+
import { SessionService } from '../session/session-service';
|
|
3
|
+
import type { OidcSessionOptions } from '../config/oidc-session-options';
|
|
4
|
+
export interface SessionResponseLike {
|
|
5
|
+
status(code: number): SessionResponseLike;
|
|
6
|
+
setHeader(name: string, value: string): unknown;
|
|
7
|
+
redirect(url: string): unknown;
|
|
8
|
+
json(body: unknown): unknown;
|
|
9
|
+
send(body?: unknown): unknown;
|
|
10
|
+
type(value: string): unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface SessionRequestShape {
|
|
13
|
+
headers: Record<string, string | string[] | undefined>;
|
|
14
|
+
}
|
|
15
|
+
export interface LogoutResponse {
|
|
16
|
+
readonly endSessionUrl: string | null;
|
|
17
|
+
}
|
|
18
|
+
export declare class OidcSessionAuthController {
|
|
19
|
+
private readonly sessions;
|
|
20
|
+
private readonly client;
|
|
21
|
+
private readonly options;
|
|
22
|
+
constructor(sessions: SessionService, client: OidcClient, options: OidcSessionOptions);
|
|
23
|
+
login(returnTo: string | undefined, res: SessionResponseLike): Promise<void>;
|
|
24
|
+
callback(code: string | undefined, state: string | undefined, error: string | undefined, errorDescription: string | undefined, res: SessionResponseLike): Promise<void>;
|
|
25
|
+
logout(res: SessionResponseLike): Promise<void>;
|
|
26
|
+
me(_req: SessionRequestShape, res: SessionResponseLike): void;
|
|
27
|
+
private sessionCookie;
|
|
28
|
+
private clearedCookie;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=oidc-session-auth.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-session-auth.controller.d.ts","sourceRoot":"","sources":["../../src/nest/oidc-session-auth.controller.ts"],"names":[],"mappings":"AAyCA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAIzE,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B;AAGD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;CACxD;AAGD,MAAM,WAAW,cAAc;IAQ7B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAKD,qBACa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAIvB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBALP,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,UAAU,EAIlB,OAAO,EAAE,kBAAkB;IAiBxC,KAAK,CACU,QAAQ,EAAE,MAAM,GAAG,SAAS,EACxC,GAAG,EAAE,mBAAmB,GAC9B,OAAO,CAAC,IAAI,CAAC;IAwBV,QAAQ,CACG,IAAI,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,KAAK,EAAE,MAAM,GAAG,SAAS,EACb,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACzD,GAAG,EAAE,mBAAmB,GAC9B,OAAO,CAAC,IAAI,CAAC;IA4DV,MAAM,CAAQ,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB5D,EAAE,CAAQ,IAAI,EAAE,mBAAmB,EAAS,GAAG,EAAE,mBAAmB,GAAG,IAAI;IAqB3E,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,aAAa;CAWtB"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.OidcSessionAuthController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const xema_decorators_1 = require("@xemahq/xema-decorators");
|
|
18
|
+
const errors_1 = require("../errors");
|
|
19
|
+
const oidc_session_context_1 = require("./oidc-session-context");
|
|
20
|
+
const oidc_session_guard_1 = require("./oidc-session.guard");
|
|
21
|
+
const tokens_1 = require("./tokens");
|
|
22
|
+
const cookie_1 = require("../http/cookie");
|
|
23
|
+
const oidc_client_1 = require("../oidc/oidc-client");
|
|
24
|
+
const pkce_1 = require("../oidc/pkce");
|
|
25
|
+
const session_service_1 = require("../session/session-service");
|
|
26
|
+
const HTTP_FOUND = 302;
|
|
27
|
+
const HTTP_OK = 200;
|
|
28
|
+
let OidcSessionAuthController = class OidcSessionAuthController {
|
|
29
|
+
sessions;
|
|
30
|
+
client;
|
|
31
|
+
options;
|
|
32
|
+
constructor(sessions, client, options) {
|
|
33
|
+
this.sessions = sessions;
|
|
34
|
+
this.client = client;
|
|
35
|
+
this.options = options;
|
|
36
|
+
}
|
|
37
|
+
async login(returnTo, res) {
|
|
38
|
+
const pkce = (0, pkce_1.createPkcePair)();
|
|
39
|
+
const { authorizationUrl } = await this.sessions.beginAuthorization({
|
|
40
|
+
pkceVerifier: pkce.verifier,
|
|
41
|
+
codeChallenge: pkce.challenge,
|
|
42
|
+
returnTo: (0, cookie_1.safeRelativePath)(returnTo),
|
|
43
|
+
});
|
|
44
|
+
res.status(HTTP_FOUND).redirect(authorizationUrl);
|
|
45
|
+
}
|
|
46
|
+
async callback(code, state, error, errorDescription, res) {
|
|
47
|
+
if (error !== undefined && error !== '') {
|
|
48
|
+
throw new errors_1.OidcCallbackRejectedError(`The identity provider refused the sign-in (${error}` +
|
|
49
|
+
`${errorDescription === undefined ? '' : `: ${errorDescription}`}).`);
|
|
50
|
+
}
|
|
51
|
+
if (state === undefined || state === '') {
|
|
52
|
+
throw new errors_1.OidcCallbackRejectedError('The callback carried no state.');
|
|
53
|
+
}
|
|
54
|
+
if (code === undefined || code === '') {
|
|
55
|
+
throw new errors_1.OidcCallbackRejectedError('The callback carried no authorization code.');
|
|
56
|
+
}
|
|
57
|
+
const pending = await this.sessions.takePendingAuthorization(state);
|
|
58
|
+
if (pending === null) {
|
|
59
|
+
throw new errors_1.OidcLoginStateUnknownError();
|
|
60
|
+
}
|
|
61
|
+
const tokenSet = await this.client.exchangeCode({
|
|
62
|
+
code,
|
|
63
|
+
codeVerifier: pending.codeVerifier,
|
|
64
|
+
nonce: pending.nonce,
|
|
65
|
+
});
|
|
66
|
+
const scope = (0, oidc_session_context_1.currentSessionScope)();
|
|
67
|
+
if (scope !== undefined && scope.session !== null) {
|
|
68
|
+
await this.sessions.endSession(scope.session);
|
|
69
|
+
}
|
|
70
|
+
const established = await this.sessions.establishSession(tokenSet, pending.returnTo);
|
|
71
|
+
res.setHeader('Set-Cookie', this.sessionCookie(established.cookieValue));
|
|
72
|
+
res.status(HTTP_FOUND).redirect(established.returnTo ?? '/');
|
|
73
|
+
}
|
|
74
|
+
async logout(res) {
|
|
75
|
+
const scope = (0, oidc_session_context_1.currentSessionScope)();
|
|
76
|
+
const endSessionUrl = await this.sessions.endSession(scope?.session ?? null);
|
|
77
|
+
res.setHeader('Set-Cookie', this.clearedCookie());
|
|
78
|
+
const body = { endSessionUrl };
|
|
79
|
+
res.status(HTTP_OK).json(body);
|
|
80
|
+
}
|
|
81
|
+
me(_req, res) {
|
|
82
|
+
const scope = (0, oidc_session_context_1.currentSessionScope)();
|
|
83
|
+
if (scope !== undefined && scope.session !== null) {
|
|
84
|
+
const actor = scope.session.actor;
|
|
85
|
+
res.status(HTTP_OK).json(actor);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (scope?.expired === true) {
|
|
89
|
+
res.setHeader('Set-Cookie', this.clearedCookie());
|
|
90
|
+
throw new errors_1.SessionExpiredError();
|
|
91
|
+
}
|
|
92
|
+
res.status(HTTP_OK).type('application/json');
|
|
93
|
+
res.send('null');
|
|
94
|
+
}
|
|
95
|
+
sessionCookie(value) {
|
|
96
|
+
const { cookie, ttl } = this.options;
|
|
97
|
+
return (0, cookie_1.serializeCookie)(cookie.name, value, {
|
|
98
|
+
httpOnly: true,
|
|
99
|
+
secure: cookie.secure,
|
|
100
|
+
sameSite: cookie.sameSite,
|
|
101
|
+
path: cookie.path,
|
|
102
|
+
...(cookie.domain === undefined ? {} : { domain: cookie.domain }),
|
|
103
|
+
maxAgeSeconds: ttl.absoluteTtlSeconds,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
clearedCookie() {
|
|
107
|
+
const { cookie } = this.options;
|
|
108
|
+
return (0, cookie_1.serializeCookie)(cookie.name, '', {
|
|
109
|
+
httpOnly: true,
|
|
110
|
+
secure: cookie.secure,
|
|
111
|
+
sameSite: cookie.sameSite,
|
|
112
|
+
path: cookie.path,
|
|
113
|
+
...(cookie.domain === undefined ? {} : { domain: cookie.domain }),
|
|
114
|
+
maxAgeSeconds: 0,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
exports.OidcSessionAuthController = OidcSessionAuthController;
|
|
119
|
+
__decorate([
|
|
120
|
+
(0, xema_decorators_1.XemaPublicRoute)({
|
|
121
|
+
reason: xema_decorators_1.PublicRouteReason.OAuthCallback,
|
|
122
|
+
notes: 'Begins the authorization-code flow. Unauthenticated by construction: it ' +
|
|
123
|
+
'is what a browser with no session calls to get one.',
|
|
124
|
+
}),
|
|
125
|
+
(0, common_1.Get)('login'),
|
|
126
|
+
__param(0, (0, common_1.Query)('returnTo')),
|
|
127
|
+
__param(1, (0, common_1.Res)()),
|
|
128
|
+
__metadata("design:type", Function),
|
|
129
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
130
|
+
__metadata("design:returntype", Promise)
|
|
131
|
+
], OidcSessionAuthController.prototype, "login", null);
|
|
132
|
+
__decorate([
|
|
133
|
+
(0, xema_decorators_1.XemaPublicRoute)({
|
|
134
|
+
reason: xema_decorators_1.PublicRouteReason.OAuthCallback,
|
|
135
|
+
notes: 'The registered OIDC redirect_uri. The identity provider navigates the ' +
|
|
136
|
+
'browser here with a code; there is no bearer at this point by definition.',
|
|
137
|
+
}),
|
|
138
|
+
(0, common_1.Get)('callback'),
|
|
139
|
+
__param(0, (0, common_1.Query)('code')),
|
|
140
|
+
__param(1, (0, common_1.Query)('state')),
|
|
141
|
+
__param(2, (0, common_1.Query)('error')),
|
|
142
|
+
__param(3, (0, common_1.Query)('error_description')),
|
|
143
|
+
__param(4, (0, common_1.Res)()),
|
|
144
|
+
__metadata("design:type", Function),
|
|
145
|
+
__metadata("design:paramtypes", [Object, Object, Object, Object, Object]),
|
|
146
|
+
__metadata("design:returntype", Promise)
|
|
147
|
+
], OidcSessionAuthController.prototype, "callback", null);
|
|
148
|
+
__decorate([
|
|
149
|
+
(0, xema_decorators_1.XemaPublicRoute)({
|
|
150
|
+
reason: xema_decorators_1.PublicRouteReason.ExternalDelegatedSession,
|
|
151
|
+
notes: 'Authenticated by the httpOnly session cookie and fenced by ' +
|
|
152
|
+
'OidcSessionGuard, NOT by a Xema bearer — the browser never holds one. ' +
|
|
153
|
+
'The global JWT guard is bypassed because the credential is a cookie; the ' +
|
|
154
|
+
'route is not open.',
|
|
155
|
+
}),
|
|
156
|
+
(0, common_1.UseGuards)(oidc_session_guard_1.OidcSessionGuard),
|
|
157
|
+
(0, common_1.Post)('logout'),
|
|
158
|
+
__param(0, (0, common_1.Res)()),
|
|
159
|
+
__metadata("design:type", Function),
|
|
160
|
+
__metadata("design:paramtypes", [Object]),
|
|
161
|
+
__metadata("design:returntype", Promise)
|
|
162
|
+
], OidcSessionAuthController.prototype, "logout", null);
|
|
163
|
+
__decorate([
|
|
164
|
+
(0, xema_decorators_1.XemaPublicRoute)({
|
|
165
|
+
reason: xema_decorators_1.PublicRouteReason.ExternalDelegatedSession,
|
|
166
|
+
notes: 'Reads the httpOnly session cookie. Deliberately answers 200 with a null ' +
|
|
167
|
+
'body when nobody is signed in, so a first page load is not an exception.',
|
|
168
|
+
}),
|
|
169
|
+
(0, common_1.Get)('me'),
|
|
170
|
+
__param(0, (0, common_1.Req)()),
|
|
171
|
+
__param(1, (0, common_1.Res)()),
|
|
172
|
+
__metadata("design:type", Function),
|
|
173
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
174
|
+
__metadata("design:returntype", void 0)
|
|
175
|
+
], OidcSessionAuthController.prototype, "me", null);
|
|
176
|
+
exports.OidcSessionAuthController = OidcSessionAuthController = __decorate([
|
|
177
|
+
(0, common_1.Controller)('auth'),
|
|
178
|
+
__param(2, (0, common_1.Inject)(tokens_1.OIDC_SESSION_OPTIONS)),
|
|
179
|
+
__metadata("design:paramtypes", [session_service_1.SessionService,
|
|
180
|
+
oidc_client_1.OidcClient, Object])
|
|
181
|
+
], OidcSessionAuthController);
|
|
182
|
+
//# sourceMappingURL=oidc-session-auth.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-session-auth.controller.js","sourceRoot":"","sources":["../../src/nest/oidc-session-auth.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LiveSession } from '../session/session-service';
|
|
2
|
+
export interface OidcSessionScope {
|
|
3
|
+
readonly session: LiveSession | null;
|
|
4
|
+
readonly expired: boolean;
|
|
5
|
+
projectId: string | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function runWithSessionScope<T>(scope: OidcSessionScope, fn: () => T): T;
|
|
8
|
+
export declare function currentSessionScope(): OidcSessionScope | undefined;
|
|
9
|
+
export declare function currentSession(): LiveSession | null;
|
|
10
|
+
export declare function setCurrentProjectId(projectId: string | null): void;
|
|
11
|
+
//# sourceMappingURL=oidc-session-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-session-context.d.ts","sourceRoot":"","sources":["../../src/nest/oidc-session-context.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,MAAM,WAAW,gBAAgB;IAE/B,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAOrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAS1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAuBD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,KAAK,EAAE,gBAAgB,EACvB,EAAE,EAAE,MAAM,CAAC,GACV,CAAC,CAEH;AAGD,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,SAAS,CAElE;AAUD,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AASD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAUlE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runWithSessionScope = runWithSessionScope;
|
|
4
|
+
exports.currentSessionScope = currentSessionScope;
|
|
5
|
+
exports.currentSession = currentSession;
|
|
6
|
+
exports.setCurrentProjectId = setCurrentProjectId;
|
|
7
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
8
|
+
const SCOPE_STORAGE_KEY = Symbol.for('@xemahq/oidc-session-nest:scope-storage');
|
|
9
|
+
function storage() {
|
|
10
|
+
const holder = globalThis;
|
|
11
|
+
const existing = holder[SCOPE_STORAGE_KEY];
|
|
12
|
+
if (existing !== undefined) {
|
|
13
|
+
return existing;
|
|
14
|
+
}
|
|
15
|
+
const created = new node_async_hooks_1.AsyncLocalStorage();
|
|
16
|
+
holder[SCOPE_STORAGE_KEY] = created;
|
|
17
|
+
return created;
|
|
18
|
+
}
|
|
19
|
+
function runWithSessionScope(scope, fn) {
|
|
20
|
+
return storage().run(scope, fn);
|
|
21
|
+
}
|
|
22
|
+
function currentSessionScope() {
|
|
23
|
+
return storage().getStore();
|
|
24
|
+
}
|
|
25
|
+
function currentSession() {
|
|
26
|
+
return currentSessionScope()?.session ?? null;
|
|
27
|
+
}
|
|
28
|
+
function setCurrentProjectId(projectId) {
|
|
29
|
+
const scope = currentSessionScope();
|
|
30
|
+
if (scope === undefined) {
|
|
31
|
+
throw new Error('[oidc-session-nest] setCurrentProjectId was called outside a request ' +
|
|
32
|
+
'scope. Mount OidcSessionModule so its middleware runs, or call this ' +
|
|
33
|
+
'inside runWithSessionScope.');
|
|
34
|
+
}
|
|
35
|
+
scope.projectId = projectId;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=oidc-session-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-session-context.js","sourceRoot":"","sources":["../../src/nest/oidc-session-context.ts"],"names":[],"mappings":";;AAkEA,kDAKC;AAGD,kDAEC;AAUD,wCAEC;AASD,kDAUC;AAxFD,uDAAqD;AA0BrD,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;AAMhF,SAAS,OAAO;IACd,MAAM,MAAM,GAAG,UAAoC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,oCAAiB,EAAoB,CAAC;IAC1D,MAAM,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC;IACpC,OAAO,OAAO,CAAC;AACjB,CAAC;AAMD,SAAgB,mBAAmB,CACjC,KAAuB,EACvB,EAAW;IAEX,OAAO,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAGD,SAAgB,mBAAmB;IACjC,OAAO,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAUD,SAAgB,cAAc;IAC5B,OAAO,mBAAmB,EAAE,EAAE,OAAO,IAAI,IAAI,CAAC;AAChD,CAAC;AASD,SAAgB,mBAAmB,CAAC,SAAwB;IAC1D,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,uEAAuE;YACrE,sEAAsE;YACtE,6BAA6B,CAChC,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-session.guard.d.ts","sourceRoot":"","sources":["../../src/nest/oidc-session.guard.ts"],"names":[],"mappings":"AAWA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAWxB,qBACa,gBAAiB,YAAW,WAAW;IAClD,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;CAqBhD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.OidcSessionGuard = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const errors_1 = require("../errors");
|
|
12
|
+
const oidc_session_context_1 = require("./oidc-session-context");
|
|
13
|
+
const oidc_session_middleware_1 = require("./oidc-session.middleware");
|
|
14
|
+
let OidcSessionGuard = class OidcSessionGuard {
|
|
15
|
+
canActivate(context) {
|
|
16
|
+
const scope = readScope(context);
|
|
17
|
+
if (scope === undefined) {
|
|
18
|
+
throw new Error('[oidc-session-nest] OidcSessionGuard ran without a session scope. ' +
|
|
19
|
+
'OidcSessionModule was not mounted, or its middleware does not cover ' +
|
|
20
|
+
'this route, so no request has a session to check.');
|
|
21
|
+
}
|
|
22
|
+
if (scope.session !== null) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (scope.expired) {
|
|
26
|
+
throw new errors_1.SessionExpiredError();
|
|
27
|
+
}
|
|
28
|
+
throw new errors_1.SessionRequiredError();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports.OidcSessionGuard = OidcSessionGuard;
|
|
32
|
+
exports.OidcSessionGuard = OidcSessionGuard = __decorate([
|
|
33
|
+
(0, common_1.Injectable)()
|
|
34
|
+
], OidcSessionGuard);
|
|
35
|
+
function readScope(context) {
|
|
36
|
+
const ambient = (0, oidc_session_context_1.currentSessionScope)();
|
|
37
|
+
if (ambient !== undefined) {
|
|
38
|
+
return ambient;
|
|
39
|
+
}
|
|
40
|
+
const request = context.switchToHttp().getRequest();
|
|
41
|
+
return request[oidc_session_middleware_1.OIDC_SESSION_SCOPE];
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=oidc-session.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-session.guard.js","sourceRoot":"","sources":["../../src/nest/oidc-session.guard.ts"],"names":[],"mappings":";;;;;;;;;AAWA,2CAIwB;AAExB,sCAAsE;AACtE,iEAA6D;AAC7D,uEAGmC;AAK5B,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,WAAW,CAAC,OAAyB;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAKxB,MAAM,IAAI,KAAK,CACb,oEAAoE;gBAClE,sEAAsE;gBACtE,mDAAmD,CACtD,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,4BAAmB,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,IAAI,6BAAoB,EAAE,CAAC;IACnC,CAAC;CACF,CAAA;AAtBY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;GACA,gBAAgB,CAsB5B;AAED,SAAS,SAAS,CAAC,OAAyB;IAC1C,MAAM,OAAO,GAAG,IAAA,0CAAmB,GAAE,CAAC;IACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAuB,CAAC;IACzE,OAAO,OAAO,CAAC,4CAAkB,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type NestMiddleware } from '@nestjs/common';
|
|
2
|
+
import { type OidcSessionScope } from './oidc-session-context';
|
|
3
|
+
import { SessionService } from '../session/session-service';
|
|
4
|
+
import type { OidcSessionOptions } from '../config/oidc-session-options';
|
|
5
|
+
export interface SessionRequestLike {
|
|
6
|
+
headers: Record<string, string | string[] | undefined>;
|
|
7
|
+
}
|
|
8
|
+
export declare const OIDC_SESSION_SCOPE: unique symbol;
|
|
9
|
+
export interface SessionScopeCarrier {
|
|
10
|
+
[OIDC_SESSION_SCOPE]?: OidcSessionScope;
|
|
11
|
+
}
|
|
12
|
+
export declare class OidcSessionMiddleware implements NestMiddleware {
|
|
13
|
+
private readonly sessions;
|
|
14
|
+
private readonly options;
|
|
15
|
+
constructor(sessions: SessionService, options: OidcSessionOptions);
|
|
16
|
+
use(req: SessionRequestLike, _res: unknown, next: (error?: unknown) => void): Promise<void>;
|
|
17
|
+
private resolveScope;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=oidc-session.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-session.middleware.d.ts","sourceRoot":"","sources":["../../src/nest/oidc-session.middleware.ts"],"names":[],"mappings":"AAaA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AASzE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;CACxD;AAUD,eAAO,MAAM,kBAAkB,EAAE,OAAO,MAEvC,CAAC;AAGF,MAAM,WAAW,mBAAmB;IAClC,CAAC,kBAAkB,CAAC,CAAC,EAAE,gBAAgB,CAAC;CACzC;AAED,qBACa,qBAAsB,YAAW,cAAc;IAExD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAIzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAJP,QAAQ,EAAE,cAAc,EAIxB,OAAO,EAAE,kBAAkB;IAGxC,GAAG,CACP,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC;YAYF,YAAY;CAgB3B"}
|