@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,57 @@
|
|
|
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.OidcSessionMiddleware = exports.OIDC_SESSION_SCOPE = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const oidc_session_context_1 = require("./oidc-session-context");
|
|
18
|
+
const tokens_1 = require("./tokens");
|
|
19
|
+
const cookie_1 = require("../http/cookie");
|
|
20
|
+
const session_service_1 = require("../session/session-service");
|
|
21
|
+
exports.OIDC_SESSION_SCOPE = Symbol.for('@xemahq/oidc-session-nest:request-scope');
|
|
22
|
+
let OidcSessionMiddleware = class OidcSessionMiddleware {
|
|
23
|
+
sessions;
|
|
24
|
+
options;
|
|
25
|
+
constructor(sessions, options) {
|
|
26
|
+
this.sessions = sessions;
|
|
27
|
+
this.options = options;
|
|
28
|
+
}
|
|
29
|
+
async use(req, _res, next) {
|
|
30
|
+
const scope = await this.resolveScope(req);
|
|
31
|
+
req[exports.OIDC_SESSION_SCOPE] = scope;
|
|
32
|
+
(0, oidc_session_context_1.runWithSessionScope)(scope, () => {
|
|
33
|
+
next();
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async resolveScope(req) {
|
|
37
|
+
const header = req.headers.cookie;
|
|
38
|
+
const cookieHeader = Array.isArray(header) ? header.join('; ') : header;
|
|
39
|
+
const cookieValue = (0, cookie_1.readCookie)(cookieHeader, this.options.cookie.name);
|
|
40
|
+
if (cookieValue === null) {
|
|
41
|
+
return { session: null, expired: false, projectId: null };
|
|
42
|
+
}
|
|
43
|
+
const resolved = await this.sessions.resolveSession(cookieValue);
|
|
44
|
+
return {
|
|
45
|
+
session: resolved.session,
|
|
46
|
+
expired: resolved.expired,
|
|
47
|
+
projectId: null,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
exports.OidcSessionMiddleware = OidcSessionMiddleware;
|
|
52
|
+
exports.OidcSessionMiddleware = OidcSessionMiddleware = __decorate([
|
|
53
|
+
(0, common_1.Injectable)(),
|
|
54
|
+
__param(1, (0, common_1.Inject)(tokens_1.OIDC_SESSION_OPTIONS)),
|
|
55
|
+
__metadata("design:paramtypes", [session_service_1.SessionService, Object])
|
|
56
|
+
], OidcSessionMiddleware);
|
|
57
|
+
//# sourceMappingURL=oidc-session.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-session.middleware.js","sourceRoot":"","sources":["../../src/nest/oidc-session.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAaA,2CAAyE;AAEzE,iEAGgC;AAChC,qCAAgD;AAChD,2CAA4C;AAC5C,gEAA4D;AAuB/C,QAAA,kBAAkB,GAAkB,MAAM,CAAC,GAAG,CACzD,yCAAyC,CAC1C,CAAC;AAQK,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAEb;IAIA;IALnB,YACmB,QAAwB,EAIxB,OAA2B;QAJ3B,aAAQ,GAAR,QAAQ,CAAgB;QAIxB,YAAO,GAAP,OAAO,CAAoB;IAC3C,CAAC;IAEJ,KAAK,CAAC,GAAG,CACP,GAAuB,EACvB,IAAa,EACb,IAA+B;QAE/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAK1C,GAAgD,CAAC,0BAAkB,CAAC,GAAG,KAAK,CAAC;QAC9E,IAAA,0CAAmB,EAAC,KAAK,EAAE,GAAG,EAAE;YAC9B,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,GAAuB;QAEvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAClC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACxE,MAAM,WAAW,GAAG,IAAA,mBAAU,EAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;CACF,CAAA;AAzCY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,eAAM,EAAC,6BAAoB,CAAC,CAAA;qCAHF,gCAAc;GAFhC,qBAAqB,CAyCjC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type DynamicModule, type InjectionToken, type MiddlewareConsumer, type NestModule, type OptionalFactoryDependency, type Provider } from '@nestjs/common';
|
|
2
|
+
import { type OidcSessionOptions } from '../config/oidc-session-options';
|
|
3
|
+
import { type FetchLike } from '../oidc/discovery';
|
|
4
|
+
import type { SessionStore } from '../session/session-store';
|
|
5
|
+
export { OIDC_SESSION_OPTIONS, OIDC_SESSION_STORE } from './tokens';
|
|
6
|
+
export interface OidcSessionFactoryResult {
|
|
7
|
+
readonly options: OidcSessionOptions;
|
|
8
|
+
readonly store: SessionStore;
|
|
9
|
+
readonly fetchImpl?: FetchLike;
|
|
10
|
+
}
|
|
11
|
+
export interface OidcSessionModuleAsyncOptions {
|
|
12
|
+
readonly imports?: DynamicModule['imports'];
|
|
13
|
+
readonly inject?: readonly (InjectionToken | OptionalFactoryDependency)[];
|
|
14
|
+
readonly useFactory: (...args: never[]) => OidcSessionFactoryResult | Promise<OidcSessionFactoryResult>;
|
|
15
|
+
readonly mountEndpoints?: boolean;
|
|
16
|
+
readonly providers?: readonly Provider[];
|
|
17
|
+
}
|
|
18
|
+
export declare class OidcSessionModule implements NestModule {
|
|
19
|
+
static forRootAsync(asyncOptions: OidcSessionModuleAsyncOptions): DynamicModule;
|
|
20
|
+
configure(consumer: MiddlewareConsumer): void;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=oidc-session.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-session.module.d.ts","sourceRoot":"","sources":["../../src/nest/oidc-session.module.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC9B,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAIlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGpE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAQ7B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,yBAAyB,CAAC,EAAE,CAAC;IAC1E,QAAQ,CAAC,UAAU,EAAE,CACnB,GAAG,IAAI,EAAE,KAAK,EAAE,KACb,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IASlE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAElC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;CAC1C;AAYD,qBAEa,iBAAkB,YAAW,UAAU;IAClD,MAAM,CAAC,YAAY,CACjB,YAAY,EAAE,6BAA6B,GAC1C,aAAa;IA2FhB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;CAG9C"}
|
|
@@ -0,0 +1,100 @@
|
|
|
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 OidcSessionModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.OidcSessionModule = exports.OIDC_SESSION_STORE = exports.OIDC_SESSION_OPTIONS = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const oidc_guard_1 = require("@xemahq/oidc-guard");
|
|
13
|
+
const oidc_session_auth_controller_1 = require("./oidc-session-auth.controller");
|
|
14
|
+
const oidc_session_guard_1 = require("./oidc-session.guard");
|
|
15
|
+
const oidc_session_middleware_1 = require("./oidc-session.middleware");
|
|
16
|
+
const tokens_1 = require("./tokens");
|
|
17
|
+
const oidc_session_options_1 = require("../config/oidc-session-options");
|
|
18
|
+
const discovery_1 = require("../oidc/discovery");
|
|
19
|
+
const oidc_client_1 = require("../oidc/oidc-client");
|
|
20
|
+
const session_service_1 = require("../session/session-service");
|
|
21
|
+
var tokens_2 = require("./tokens");
|
|
22
|
+
Object.defineProperty(exports, "OIDC_SESSION_OPTIONS", { enumerable: true, get: function () { return tokens_2.OIDC_SESSION_OPTIONS; } });
|
|
23
|
+
Object.defineProperty(exports, "OIDC_SESSION_STORE", { enumerable: true, get: function () { return tokens_2.OIDC_SESSION_STORE; } });
|
|
24
|
+
const OIDC_SESSION_FACTORY_RESULT = Symbol.for('@xemahq/oidc-session-nest:factory-result');
|
|
25
|
+
let OidcSessionModule = OidcSessionModule_1 = class OidcSessionModule {
|
|
26
|
+
static forRootAsync(asyncOptions) {
|
|
27
|
+
const mountEndpoints = asyncOptions.mountEndpoints ?? true;
|
|
28
|
+
const providers = [
|
|
29
|
+
...(asyncOptions.providers ?? []),
|
|
30
|
+
{
|
|
31
|
+
provide: OIDC_SESSION_FACTORY_RESULT,
|
|
32
|
+
useFactory: asyncOptions.useFactory,
|
|
33
|
+
...(asyncOptions.inject === undefined
|
|
34
|
+
? {}
|
|
35
|
+
: { inject: [...asyncOptions.inject] }),
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
provide: tokens_1.OIDC_SESSION_OPTIONS,
|
|
39
|
+
useFactory: (result) => (0, oidc_session_options_1.assertOidcSessionOptions)(result.options),
|
|
40
|
+
inject: [OIDC_SESSION_FACTORY_RESULT],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
provide: tokens_1.OIDC_SESSION_STORE,
|
|
44
|
+
useFactory: (result) => result.store,
|
|
45
|
+
inject: [OIDC_SESSION_FACTORY_RESULT],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
provide: oidc_client_1.OidcClient,
|
|
49
|
+
useFactory: (options, result) => {
|
|
50
|
+
const fetchImpl = result.fetchImpl ?? defaultFetch;
|
|
51
|
+
return new oidc_client_1.OidcClient({
|
|
52
|
+
options: options.oidc,
|
|
53
|
+
discovery: new discovery_1.OidcDiscovery(options.oidc.issuerUrl, fetchImpl),
|
|
54
|
+
verifier: new oidc_guard_1.JwksVerifier(),
|
|
55
|
+
fetchImpl,
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
inject: [tokens_1.OIDC_SESSION_OPTIONS, OIDC_SESSION_FACTORY_RESULT],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
provide: session_service_1.SessionService,
|
|
62
|
+
useFactory: (options, store, client) => new session_service_1.SessionService({ options, store, client }),
|
|
63
|
+
inject: [tokens_1.OIDC_SESSION_OPTIONS, tokens_1.OIDC_SESSION_STORE, oidc_client_1.OidcClient],
|
|
64
|
+
},
|
|
65
|
+
oidc_session_middleware_1.OidcSessionMiddleware,
|
|
66
|
+
oidc_session_guard_1.OidcSessionGuard,
|
|
67
|
+
];
|
|
68
|
+
return {
|
|
69
|
+
module: OidcSessionModule_1,
|
|
70
|
+
...(asyncOptions.imports === undefined
|
|
71
|
+
? {}
|
|
72
|
+
: { imports: asyncOptions.imports }),
|
|
73
|
+
...(mountEndpoints ? { controllers: [oidc_session_auth_controller_1.OidcSessionAuthController] } : {}),
|
|
74
|
+
providers,
|
|
75
|
+
exports: [
|
|
76
|
+
session_service_1.SessionService,
|
|
77
|
+
oidc_client_1.OidcClient,
|
|
78
|
+
oidc_session_guard_1.OidcSessionGuard,
|
|
79
|
+
tokens_1.OIDC_SESSION_OPTIONS,
|
|
80
|
+
tokens_1.OIDC_SESSION_STORE,
|
|
81
|
+
],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
configure(consumer) {
|
|
85
|
+
consumer.apply(oidc_session_middleware_1.OidcSessionMiddleware).forRoutes('*');
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
exports.OidcSessionModule = OidcSessionModule;
|
|
89
|
+
exports.OidcSessionModule = OidcSessionModule = OidcSessionModule_1 = __decorate([
|
|
90
|
+
(0, common_1.Global)(),
|
|
91
|
+
(0, common_1.Module)({})
|
|
92
|
+
], OidcSessionModule);
|
|
93
|
+
const defaultFetch = (input, init) => {
|
|
94
|
+
if (typeof globalThis.fetch !== 'function') {
|
|
95
|
+
return Promise.reject(new Error('[oidc-session-nest] This runtime has no global fetch. Supply ' +
|
|
96
|
+
'`fetchImpl` (undici, for example) from the module factory.'));
|
|
97
|
+
}
|
|
98
|
+
return globalThis.fetch(input, init);
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=oidc-session.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-session.module.js","sourceRoot":"","sources":["../../src/nest/oidc-session.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-actor.decorator.d.ts","sourceRoot":"","sources":["../../src/nest/session-actor.decorator.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,YAAY,mDAUxB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionActor = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const oidc_session_context_1 = require("./oidc-session-context");
|
|
6
|
+
const oidc_session_middleware_1 = require("./oidc-session.middleware");
|
|
7
|
+
exports.SessionActor = (0, common_1.createParamDecorator)((_data, context) => {
|
|
8
|
+
const ambient = (0, oidc_session_context_1.currentSessionScope)();
|
|
9
|
+
const scope = ambient ??
|
|
10
|
+
context.switchToHttp().getRequest()[oidc_session_middleware_1.OIDC_SESSION_SCOPE];
|
|
11
|
+
return scope?.session?.actor ?? null;
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=session-actor.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-actor.decorator.js","sourceRoot":"","sources":["../../src/nest/session-actor.decorator.ts"],"names":[],"mappings":";;;AASA,2CAA6E;AAG7E,iEAA6D;AAC7D,uEAGmC;AAItB,QAAA,YAAY,GAAG,IAAA,6BAAoB,EAC9C,CAAC,KAAc,EAAE,OAAyB,EAA4B,EAAE;IACtE,MAAM,OAAO,GAAG,IAAA,0CAAmB,GAAE,CAAC;IACtC,MAAM,KAAK,GACT,OAAO;QACP,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAuB,CACtD,4CAAkB,CACnB,CAAC;IACJ,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC;AACvC,CAAC,CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-client-transport.d.ts","sourceRoot":"","sources":["../../src/nest/session-client-transport.ts"],"names":[],"mappings":"AAkCA,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAYD,wBAAgB,sBAAsB,IAAI,sBAAsB,CA6C/D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sessionClientTransport = sessionClientTransport;
|
|
4
|
+
const platform_common_1 = require("@xemahq/platform-common");
|
|
5
|
+
const oidc_session_context_1 = require("./oidc-session-context");
|
|
6
|
+
const headers_1 = require("../http/headers");
|
|
7
|
+
function sessionClientTransport() {
|
|
8
|
+
return {
|
|
9
|
+
getAuthToken: () => {
|
|
10
|
+
const scope = (0, oidc_session_context_1.currentSessionScope)();
|
|
11
|
+
if (scope === undefined) {
|
|
12
|
+
return Promise.reject(new Error('[oidc-session-nest] A Xema client was called outside a request ' +
|
|
13
|
+
'scope, so there is no session to take a bearer from. Calls made ' +
|
|
14
|
+
'from a background job or a boot hook need their own service ' +
|
|
15
|
+
'credential rather than a browser session.'));
|
|
16
|
+
}
|
|
17
|
+
if (scope.session === null) {
|
|
18
|
+
return Promise.reject(new Error('[oidc-session-nest] A Xema client was called on a request with no ' +
|
|
19
|
+
'session. Mount OidcSessionGuard on this route, or do not call a ' +
|
|
20
|
+
'Xema peer on an anonymous path.'));
|
|
21
|
+
}
|
|
22
|
+
return Promise.resolve(scope.session.record.accessToken);
|
|
23
|
+
},
|
|
24
|
+
getHeaders: () => {
|
|
25
|
+
const scope = (0, oidc_session_context_1.currentSessionScope)();
|
|
26
|
+
const headers = {};
|
|
27
|
+
if (scope === undefined) {
|
|
28
|
+
return headers;
|
|
29
|
+
}
|
|
30
|
+
const activeOrgId = scope.session?.record.activeOrgId ?? null;
|
|
31
|
+
if (activeOrgId !== null) {
|
|
32
|
+
headers[platform_common_1.OrgHeaderName.Canonical] = activeOrgId;
|
|
33
|
+
}
|
|
34
|
+
if (scope.projectId !== null) {
|
|
35
|
+
headers[headers_1.PROJECT_HEADER_NAME] = scope.projectId;
|
|
36
|
+
}
|
|
37
|
+
return headers;
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=session-client-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-client-transport.js","sourceRoot":"","sources":["../../src/nest/session-client-transport.ts"],"names":[],"mappings":";;AAiDA,wDA6CC;AA1ED,6DAAwD;AAExD,iEAA6D;AAC7D,6CAAsD;AA0BtD,SAAgB,sBAAsB;IACpC,OAAO;QACL,YAAY,EAAE,GAAG,EAAE;YACjB,MAAM,KAAK,GAAG,IAAA,0CAAmB,GAAE,CAAC;YACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CACP,iEAAiE;oBAC/D,kEAAkE;oBAClE,8DAA8D;oBAC9D,2CAA2C,CAC9C,CACF,CAAC;YACJ,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC3B,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CACP,oEAAoE;oBAClE,kEAAkE;oBAClE,iCAAiC,CACpC,CACF,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3D,CAAC;QAED,UAAU,EAAE,GAAG,EAAE;YACf,MAAM,KAAK,GAAG,IAAA,0CAAmB,GAAE,CAAC;YACpC,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC;YAC9D,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO,CAAC,+BAAa,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;YACjD,CAAC;YAID,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC7B,OAAO,CAAC,6BAAmB,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;YACjD,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/nest/tokens.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,oBAAoB,eAEhC,CAAC;AAGF,eAAO,MAAM,kBAAkB,eAAgD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OIDC_SESSION_STORE = exports.OIDC_SESSION_OPTIONS = void 0;
|
|
4
|
+
exports.OIDC_SESSION_OPTIONS = Symbol.for('@xemahq/oidc-session-nest:options');
|
|
5
|
+
exports.OIDC_SESSION_STORE = Symbol.for('@xemahq/oidc-session-nest:store');
|
|
6
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/nest/tokens.ts"],"names":[],"mappings":";;;AAUa,QAAA,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAC5C,mCAAmC,CACpC,CAAC;AAGW,QAAA,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface OidcDiscoveryDocument {
|
|
2
|
+
readonly issuer: string;
|
|
3
|
+
readonly authorizationEndpoint: string;
|
|
4
|
+
readonly tokenEndpoint: string;
|
|
5
|
+
readonly jwksUri: string;
|
|
6
|
+
readonly endSessionEndpoint?: string;
|
|
7
|
+
}
|
|
8
|
+
export type FetchLike = (input: string, init?: {
|
|
9
|
+
method?: string;
|
|
10
|
+
headers?: Record<string, string>;
|
|
11
|
+
body?: string;
|
|
12
|
+
signal?: AbortSignal;
|
|
13
|
+
}) => Promise<{
|
|
14
|
+
ok: boolean;
|
|
15
|
+
status: number;
|
|
16
|
+
text: () => Promise<string>;
|
|
17
|
+
}>;
|
|
18
|
+
export declare class OidcDiscovery {
|
|
19
|
+
private readonly issuerUrl;
|
|
20
|
+
private readonly fetchImpl;
|
|
21
|
+
private readonly ttlMs;
|
|
22
|
+
private readonly now;
|
|
23
|
+
private cached;
|
|
24
|
+
private inFlight;
|
|
25
|
+
constructor(issuerUrl: string, fetchImpl: FetchLike, ttlMs?: number, now?: () => number);
|
|
26
|
+
get discoveryUrl(): string;
|
|
27
|
+
resolve(): Promise<OidcDiscoveryDocument>;
|
|
28
|
+
private fetchDocument;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/oidc/discovery.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAOD,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,KACE,OAAO,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC,CAAC;AAaH,qBAAa,aAAa;IAOtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IATtB,OAAO,CAAC,MAAM,CACP;IAEP,OAAO,CAAC,QAAQ,CAA+C;gBAG5C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,KAAK,GAAE,MAAuB,EAC9B,GAAG,GAAE,MAAM,MAAyB;IAIvD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAEK,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC;YAgBjC,aAAa;CA2D5B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OidcDiscovery = void 0;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
const DEFAULT_TTL_MS = 60 * 60 * 1000;
|
|
6
|
+
class OidcDiscovery {
|
|
7
|
+
issuerUrl;
|
|
8
|
+
fetchImpl;
|
|
9
|
+
ttlMs;
|
|
10
|
+
now;
|
|
11
|
+
cached = null;
|
|
12
|
+
inFlight = null;
|
|
13
|
+
constructor(issuerUrl, fetchImpl, ttlMs = DEFAULT_TTL_MS, now = () => Date.now()) {
|
|
14
|
+
this.issuerUrl = issuerUrl;
|
|
15
|
+
this.fetchImpl = fetchImpl;
|
|
16
|
+
this.ttlMs = ttlMs;
|
|
17
|
+
this.now = now;
|
|
18
|
+
}
|
|
19
|
+
get discoveryUrl() {
|
|
20
|
+
return `${this.issuerUrl.replace(/\/+$/u, '')}/.well-known/openid-configuration`;
|
|
21
|
+
}
|
|
22
|
+
async resolve() {
|
|
23
|
+
const cached = this.cached;
|
|
24
|
+
if (cached !== null && this.now() - cached.fetchedAt < this.ttlMs) {
|
|
25
|
+
return cached.document;
|
|
26
|
+
}
|
|
27
|
+
const existing = this.inFlight;
|
|
28
|
+
if (existing !== null) {
|
|
29
|
+
return existing;
|
|
30
|
+
}
|
|
31
|
+
const pending = this.fetchDocument().finally(() => {
|
|
32
|
+
this.inFlight = null;
|
|
33
|
+
});
|
|
34
|
+
this.inFlight = pending;
|
|
35
|
+
return pending;
|
|
36
|
+
}
|
|
37
|
+
async fetchDocument() {
|
|
38
|
+
const url = this.discoveryUrl;
|
|
39
|
+
let body;
|
|
40
|
+
let status;
|
|
41
|
+
let ok;
|
|
42
|
+
try {
|
|
43
|
+
const response = await this.fetchImpl(url, {
|
|
44
|
+
method: 'GET',
|
|
45
|
+
headers: { accept: 'application/json' },
|
|
46
|
+
});
|
|
47
|
+
ok = response.ok;
|
|
48
|
+
status = response.status;
|
|
49
|
+
body = await response.text();
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
throw new errors_1.OidcTokenEndpointFailedError(`OIDC discovery at ${url} could not be reached: ${describe(error)}`);
|
|
53
|
+
}
|
|
54
|
+
if (!ok) {
|
|
55
|
+
throw new errors_1.OidcTokenEndpointFailedError(`OIDC discovery at ${url} answered HTTP ${status}.`);
|
|
56
|
+
}
|
|
57
|
+
let parsed;
|
|
58
|
+
try {
|
|
59
|
+
parsed = JSON.parse(body);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
throw new errors_1.OidcTokenEndpointFailedError(`OIDC discovery at ${url} did not return JSON: ${describe(error)}`);
|
|
63
|
+
}
|
|
64
|
+
if (parsed === null || typeof parsed !== 'object') {
|
|
65
|
+
throw new errors_1.OidcTokenEndpointFailedError(`OIDC discovery at ${url} did not return a JSON object.`);
|
|
66
|
+
}
|
|
67
|
+
const document = parsed;
|
|
68
|
+
const issuer = requireString(document, 'issuer', url);
|
|
69
|
+
if (issuer !== this.issuerUrl.replace(/\/+$/u, '')) {
|
|
70
|
+
throw new errors_1.OidcTokenEndpointFailedError(`OIDC discovery at ${url} declares issuer "${issuer}", which is not the ` +
|
|
71
|
+
`configured issuer "${this.issuerUrl}". Refusing rather than trusting ` +
|
|
72
|
+
'a provider that names a different issuer than the one configured.');
|
|
73
|
+
}
|
|
74
|
+
const endSessionEndpoint = optionalString(document, 'end_session_endpoint');
|
|
75
|
+
const resolved = {
|
|
76
|
+
issuer,
|
|
77
|
+
authorizationEndpoint: requireString(document, 'authorization_endpoint', url),
|
|
78
|
+
tokenEndpoint: requireString(document, 'token_endpoint', url),
|
|
79
|
+
jwksUri: requireString(document, 'jwks_uri', url),
|
|
80
|
+
...(endSessionEndpoint === undefined ? {} : { endSessionEndpoint }),
|
|
81
|
+
};
|
|
82
|
+
this.cached = { document: resolved, fetchedAt: this.now() };
|
|
83
|
+
return resolved;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.OidcDiscovery = OidcDiscovery;
|
|
87
|
+
function requireString(document, key, url) {
|
|
88
|
+
const value = document[key];
|
|
89
|
+
if (typeof value !== 'string' || value === '') {
|
|
90
|
+
throw new errors_1.OidcTokenEndpointFailedError(`OIDC discovery at ${url} did not provide a usable "${key}".`);
|
|
91
|
+
}
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
94
|
+
function optionalString(document, key) {
|
|
95
|
+
const value = document[key];
|
|
96
|
+
return typeof value === 'string' && value !== '' ? value : undefined;
|
|
97
|
+
}
|
|
98
|
+
function describe(error) {
|
|
99
|
+
return error instanceof Error ? error.message : String(error);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/oidc/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type JwksVerifier, type DecodedJwtPayload } from '@xemahq/oidc-guard';
|
|
2
|
+
import { type OidcDiscovery, type FetchLike } from './discovery';
|
|
3
|
+
import type { OidcProviderOptions } from '../config/oidc-session-options';
|
|
4
|
+
export interface OidcTokenSet {
|
|
5
|
+
readonly accessToken: string;
|
|
6
|
+
readonly refreshToken?: string;
|
|
7
|
+
readonly idToken?: string;
|
|
8
|
+
readonly accessTokenExpiresAt: number;
|
|
9
|
+
readonly accessClaims: DecodedJwtPayload;
|
|
10
|
+
readonly idClaims?: DecodedJwtPayload;
|
|
11
|
+
}
|
|
12
|
+
export declare class OidcInvalidGrantError extends Error {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
export interface OidcClientDeps {
|
|
16
|
+
readonly options: OidcProviderOptions;
|
|
17
|
+
readonly discovery: OidcDiscovery;
|
|
18
|
+
readonly verifier: JwksVerifier;
|
|
19
|
+
readonly fetchImpl: FetchLike;
|
|
20
|
+
}
|
|
21
|
+
export interface AuthorizationRequest {
|
|
22
|
+
readonly state: string;
|
|
23
|
+
readonly nonce: string;
|
|
24
|
+
readonly codeChallenge: string;
|
|
25
|
+
}
|
|
26
|
+
export declare class OidcClient {
|
|
27
|
+
private readonly options;
|
|
28
|
+
private readonly discovery;
|
|
29
|
+
private readonly verifier;
|
|
30
|
+
private readonly fetchImpl;
|
|
31
|
+
private readonly jwksCacheKey;
|
|
32
|
+
constructor(deps: OidcClientDeps);
|
|
33
|
+
buildAuthorizationUrl(request: AuthorizationRequest): Promise<string>;
|
|
34
|
+
exchangeCode(input: {
|
|
35
|
+
code: string;
|
|
36
|
+
codeVerifier: string;
|
|
37
|
+
nonce: string;
|
|
38
|
+
}): Promise<OidcTokenSet>;
|
|
39
|
+
refresh(refreshToken: string): Promise<OidcTokenSet>;
|
|
40
|
+
buildEndSessionUrl(idToken?: string): Promise<string | null>;
|
|
41
|
+
private postToTokenEndpoint;
|
|
42
|
+
private toTokenSet;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=oidc-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc-client.d.ts","sourceRoot":"","sources":["../../src/oidc/oidc-client.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAM/E,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAG1E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IAEtC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IAEzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAaD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAGD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAGD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAID,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAE9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAE1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IAExC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAOtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,IAAI,EAAE,cAAc;IAS1B,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBrE,YAAY,CAAC,KAAK,EAAE;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,YAAY,CAAC;IAkBnB,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBpD,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAmBpD,mBAAmB;YAwEnB,UAAU;CAuEzB"}
|