@tsed/oidc-provider 7.0.0-beta.9 → 7.0.0-rc.3
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/coverage.json +6 -0
- package/jest.config.js +9 -0
- package/lib/cjs/OidcModule.js +7 -1
- package/lib/cjs/OidcModule.js.map +1 -1
- package/lib/cjs/domain/OidcAccountsMethods.js.map +1 -1
- package/lib/cjs/domain/OidcBadInteractionName.js +8 -0
- package/lib/cjs/domain/OidcBadInteractionName.js.map +1 -0
- package/lib/cjs/domain/OidcInteractionPromptProps.js +3 -0
- package/lib/cjs/domain/OidcInteractionPromptProps.js.map +1 -0
- package/lib/cjs/domain/OidcSettings.js.map +1 -1
- package/lib/cjs/index.js +2 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/middlewares/OidcInteractionMiddleware.js +5 -25
- package/lib/cjs/middlewares/OidcInteractionMiddleware.js.map +1 -1
- package/lib/cjs/services/OidcAdapters.js +22 -0
- package/lib/cjs/services/OidcAdapters.js.map +1 -1
- package/lib/cjs/services/OidcInteractionContext.js +61 -16
- package/lib/cjs/services/OidcInteractionContext.js.map +1 -1
- package/lib/cjs/services/OidcInteractions.js +8 -7
- package/lib/cjs/services/OidcInteractions.js.map +1 -1
- package/lib/cjs/services/OidcJwks.js +3 -0
- package/lib/cjs/services/OidcJwks.js.map +1 -1
- package/lib/cjs/services/OidcProvider.js +19 -7
- package/lib/cjs/services/OidcProvider.js.map +1 -1
- package/lib/esm/OidcModule.js +7 -1
- package/lib/esm/OidcModule.js.map +1 -1
- package/lib/esm/domain/OidcAccountsMethods.js.map +1 -1
- package/lib/esm/domain/OidcBadInteractionName.js +4 -0
- package/lib/esm/domain/OidcBadInteractionName.js.map +1 -0
- package/lib/esm/domain/OidcInteractionPromptProps.js +2 -0
- package/lib/esm/domain/OidcInteractionPromptProps.js.map +1 -0
- package/lib/esm/domain/OidcSettings.js.map +1 -1
- package/lib/esm/index.js +2 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/middlewares/OidcInteractionMiddleware.js +7 -27
- package/lib/esm/middlewares/OidcInteractionMiddleware.js.map +1 -1
- package/lib/esm/services/OidcAdapters.js +22 -0
- package/lib/esm/services/OidcAdapters.js.map +1 -1
- package/lib/esm/services/OidcInteractionContext.js +62 -17
- package/lib/esm/services/OidcInteractionContext.js.map +1 -1
- package/lib/esm/services/OidcInteractions.js +8 -7
- package/lib/esm/services/OidcInteractions.js.map +1 -1
- package/lib/esm/services/OidcJwks.js +3 -0
- package/lib/esm/services/OidcJwks.js.map +1 -1
- package/lib/esm/services/OidcProvider.js +20 -8
- package/lib/esm/services/OidcProvider.js.map +1 -1
- package/lib/types/OidcModule.d.ts +5 -5
- package/lib/types/domain/OidcAccountsMethods.d.ts +1 -2
- package/lib/types/domain/OidcBadInteractionName.d.ts +3 -0
- package/lib/types/domain/OidcInteractionPromptProps.d.ts +9 -0
- package/lib/types/domain/OidcSettings.d.ts +9 -1
- package/lib/types/index.d.ts +2 -0
- package/lib/types/middlewares/OidcInteractionMiddleware.d.ts +3 -5
- package/lib/types/services/OidcAdapters.d.ts +3 -2
- package/lib/types/services/OidcInteractionContext.d.ts +6 -2
- package/lib/types/services/OidcProvider.d.ts +3 -3
- package/package.json +15 -12
- package/readme.md +4 -2
- package/.mocharc.js +0 -5
- package/.nycrc +0 -27
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcProvider.js","sourceRoot":"","sources":["../../../src/services/OidcProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import {Env, setValue} from \"@tsed/core\";\nimport {Constant, Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {Provider as OIDCProvider, Configuration, interactionPolicy} from \"oidc-provider\";\nimport {INTERACTIONS} from \"../constants/constants\";\nimport {OidcAdapters} from \"./OidcAdapters\";\nimport {OidcInteractions} from \"./OidcInteractions\";\nimport {OidcJwks} from \"./OidcJwks\";\nimport {PlatformApplication} from \"@tsed/common\";\nimport {OidcSettings} from \"../domain/OidcSettings\";\nimport {OidcAccountsMethods} from \"../domain/OidcAccountsMethods\";\n\n@Injectable()\nexport class OidcProvider {\n raw: OIDCProvider;\n\n @Constant(\"env\")\n protected env: Env;\n\n @Constant(\"httpPort\")\n protected httpPort: number | string;\n\n @Constant(\"httpsPort\")\n protected httpsPort: number | string;\n\n @Constant(\"oidc.issuer\", \"\")\n protected issuer: string;\n\n @Constant(\"oidc\")\n protected oidc: OidcSettings;\n\n @Constant(\"PLATFORM_NAME\")\n protected platformName: string;\n\n @Inject()\n protected oidcJwks: OidcJwks;\n\n @Inject()\n protected oidcInteractions: OidcInteractions;\n\n @Inject()\n protected adapters: OidcAdapters;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected app: PlatformApplication;\n\n hasConfiguration() {\n return !!this.oidc;\n }\n\n async getConfiguration(): Promise<Configuration> {\n const [jwks, adapter] = await Promise.all([this.oidcJwks.getJwks(), this.adapters.createAdapterClass()]);\n const {issuer, jwksPath, secureKey, proxy, Accounts, ...options} = this.oidc;\n\n const configuration: Configuration = {\n interactions: {\n /* istanbul ignore next */\n url: (ctx, interaction) => `interaction/${interaction.uid}`\n },\n ...options,\n adapter,\n jwks\n };\n\n if (Accounts) {\n configuration.findAccount = (ctx, id, token) =>\n this.injector.get<OidcAccountsMethods>(Accounts)!.findAccount(id, token, (ctx.req as any).$ctx);\n }\n\n if (this.env === Env.PROD) {\n setValue(configuration, \"cookies.short.secure\", true);\n setValue(configuration, \"cookies.long.secure\", true);\n }\n\n const policy = this.getPolicy();\n if (policy) {\n setValue(configuration, \"interactions.policy\", policy);\n }\n\n const url = this.getInteractionsUrl();\n if (url) {\n setValue(configuration, \"interactions.url\", url);\n }\n\n return configuration;\n }\n\n getIssuer() {\n if (this.issuer) {\n return this.issuer;\n }\n\n // istanbul ignore next\n if (this.httpsPort) {\n return `https://localhost:${this.httpsPort}`;\n }\n\n return `http://localhost:${this.httpPort}`;\n }\n\n get(): OIDCProvider {\n return this.raw;\n }\n\n /**\n * Create a new instance of OidcProvider\n */\n async create(): Promise<void | OIDCProvider> {\n const {proxy, secureKey} = this.oidc;\n const configuration = await this.getConfiguration();\n const oidcProvider = new OIDCProvider(this.getIssuer(), configuration);\n\n if (proxy || this.env === Env.PROD) {\n // istanbul ignore next\n switch (this.platformName) {\n default:\n case \"express\":\n oidcProvider.proxy = true;\n break;\n case \"koa\":\n (this.app.rawApp as any).proxy = true;\n break;\n }\n }\n\n if (secureKey) {\n oidcProvider.app.keys = secureKey;\n }\n\n this.raw = oidcProvider;\n\n if (this.env !== Env.PROD) {\n this.allowHttpLocalhost();\n }\n\n await this.injector.emit(\"$onCreateOIDC\", this.raw);\n\n return this.raw;\n }\n\n private getInteractionsUrl() {\n const provider = this.injector.getProviders().find((provider) => provider.subType === INTERACTIONS);\n\n if (provider) {\n return (ctx: any, interaction: any) => {\n // eslint-disable-line no-unused-vars\n return provider.path.replace(/:uid/, interaction.uid);\n };\n }\n }\n\n private allowHttpLocalhost() {\n const {invalidate: orig} = (this.raw.Client as any).Schema.prototype;\n\n (this.raw.Client as any).Schema.prototype.invalidate = function invalidate(message: string, code: string) {\n if (code === \"implicit-force-https\" || code === \"implicit-forbid-localhost\") {\n return;\n }\n\n /* istanbul ignore next */\n return orig.call(this, message);\n };\n }\n\n private getPolicy() {\n const policy = interactionPolicy.base();\n const interactions = this.oidcInteractions.getInteractions();\n\n if (interactions.length) {\n interactions.forEach((provider) => {\n const {name, ...options} = provider.store.get(\"interactionOptions\");\n\n if (!policy.get(name)) {\n policy.add(\n new interactionPolicy.Prompt({\n name,\n ...options\n })\n );\n }\n\n const instance = this.injector.get(provider.token);\n\n if (instance.$onCreate) {\n instance.$onCreate(policy.get(name));\n }\n });\n }\n\n return this.injector.alter(\"$alterOidcPolicy\", policy);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"OidcProvider.js","sourceRoot":"","sources":["../../../src/services/OidcProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import {PlatformApplication} from \"@tsed/common\";\nimport {Env, setValue} from \"@tsed/core\";\nimport {Constant, Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {Configuration, interactionPolicy, Provider as OIDCProvider} from \"oidc-provider\";\nimport {INTERACTIONS} from \"../constants/constants\";\nimport {OidcAccountsMethods} from \"../domain/OidcAccountsMethods\";\nimport {OidcSettings} from \"../domain/OidcSettings\";\nimport {OidcAdapters} from \"./OidcAdapters\";\nimport {OidcInteractions} from \"./OidcInteractions\";\nimport {OidcJwks} from \"./OidcJwks\";\n\n@Injectable()\nexport class OidcProvider {\n raw: OIDCProvider;\n\n @Constant(\"env\")\n protected env: Env;\n\n @Constant(\"httpPort\")\n protected httpPort: number | string;\n\n @Constant(\"httpsPort\")\n protected httpsPort: number | string;\n\n @Constant(\"oidc.issuer\", \"\")\n protected issuer: string;\n\n @Constant(\"oidc\")\n protected oidc: OidcSettings;\n\n @Constant(\"PLATFORM_NAME\")\n protected platformName: string;\n\n @Inject()\n protected oidcJwks: OidcJwks;\n\n @Inject()\n protected oidcInteractions: OidcInteractions;\n\n @Inject()\n protected adapters: OidcAdapters;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected app: PlatformApplication;\n\n hasConfiguration() {\n return !!this.oidc;\n }\n\n async getConfiguration(): Promise<Configuration> {\n const [jwks, adapter] = await Promise.all([this.oidcJwks.getJwks(), this.adapters.createAdapterClass()]);\n const {issuer, jwksPath, secureKey, proxy, Accounts, secureCookies = this.env == Env.PROD, ...options} = this.oidc;\n\n const configuration: Configuration = {\n interactions: {\n /* istanbul ignore next */\n url: (ctx, interaction) => `interaction/${interaction.uid}`\n },\n ...options,\n adapter,\n jwks\n };\n\n if (Accounts) {\n configuration.findAccount = (ctx, id, token) => this.injector.get<OidcAccountsMethods>(Accounts)!.findAccount(id, token);\n }\n\n if (secureCookies) {\n setValue(configuration, \"cookies.short.secure\", true);\n setValue(configuration, \"cookies.long.secure\", true);\n }\n\n const policy = this.getPolicy();\n if (policy) {\n setValue(configuration, \"interactions.policy\", policy);\n }\n\n const url = this.getInteractionsUrl();\n if (url) {\n setValue(configuration, \"interactions.url\", url);\n }\n\n return configuration;\n }\n\n getIssuer() {\n if (this.issuer) {\n return this.issuer;\n }\n\n // istanbul ignore next\n if (this.httpsPort) {\n return `https://localhost:${this.httpsPort}`;\n }\n\n return `http://localhost:${this.httpPort}`;\n }\n\n get(): OIDCProvider {\n return this.raw;\n }\n\n /**\n * Create a new instance of OidcProvider\n */\n async create(): Promise<void | OIDCProvider> {\n const {proxy = this.env === Env.PROD, secureKey, allowHttpLocalhost = this.env !== Env.PROD} = this.oidc;\n const configuration = await this.getConfiguration();\n const oidcProvider = new OIDCProvider(this.getIssuer(), configuration);\n\n if (proxy) {\n // istanbul ignore next\n switch (this.platformName) {\n default:\n case \"express\":\n oidcProvider.proxy = true;\n break;\n case \"koa\":\n (this.app.rawApp as any).proxy = true;\n break;\n }\n }\n\n if (secureKey) {\n oidcProvider.app.keys = secureKey;\n }\n\n this.raw = oidcProvider;\n\n if (allowHttpLocalhost) {\n this.allowHttpLocalhost();\n }\n\n await this.injector.emit(\"$onCreateOIDC\", this.raw);\n\n return this.raw;\n }\n\n private getInteractionsUrl() {\n const provider = this.injector.getProviders().find((provider) => provider.subType === INTERACTIONS);\n\n if (provider) {\n return (ctx: any, interaction: any) => {\n // eslint-disable-line no-unused-vars\n return provider.path.replace(/:uid/, interaction.uid);\n };\n }\n }\n\n private allowHttpLocalhost() {\n const {invalidate: orig} = (this.raw.Client as any).Schema.prototype;\n\n (this.raw.Client as any).Schema.prototype.invalidate = function invalidate(message: string, code: string) {\n if (code === \"implicit-force-https\" || code === \"implicit-forbid-localhost\") {\n return;\n }\n\n /* istanbul ignore next */\n return orig.call(this, message);\n };\n }\n\n private getPolicy() {\n const policy = interactionPolicy.base();\n const interactions = this.oidcInteractions.getInteractions();\n\n if (interactions.length) {\n interactions.forEach((provider) => {\n const {name, ...options} = provider.store.get(\"interactionOptions\");\n\n if (!policy.get(name)) {\n policy.add(\n new interactionPolicy.Prompt({\n name,\n ...options\n })\n );\n }\n\n const instance = this.injector.get(provider.token);\n\n if (instance.$onCreate) {\n instance.$onCreate(policy.get(name));\n }\n });\n }\n\n return this.injector.alter(\"$alterOidcPolicy\", policy);\n }\n}\n"]}
|
package/lib/esm/OidcModule.js
CHANGED
|
@@ -6,6 +6,11 @@ import { OidcAdapters } from "./services/OidcAdapters.js";
|
|
|
6
6
|
import { OidcJwks } from "./services/OidcJwks.js";
|
|
7
7
|
import { OidcProvider } from "./services/OidcProvider.js";
|
|
8
8
|
let OidcModule = class OidcModule {
|
|
9
|
+
app;
|
|
10
|
+
platformName;
|
|
11
|
+
basePath;
|
|
12
|
+
oidcProvider;
|
|
13
|
+
injector;
|
|
9
14
|
async $onInit() {
|
|
10
15
|
if (this.oidcProvider.hasConfiguration()) {
|
|
11
16
|
await this.oidcProvider.create();
|
|
@@ -31,8 +36,9 @@ let OidcModule = class OidcModule {
|
|
|
31
36
|
}
|
|
32
37
|
}
|
|
33
38
|
$onReady() {
|
|
34
|
-
if (this.oidcProvider.hasConfiguration() && this.injector.settings
|
|
39
|
+
if (this.oidcProvider.hasConfiguration() && "getBestHost" in this.injector.settings) {
|
|
35
40
|
const { injector } = this;
|
|
41
|
+
// @ts-ignore
|
|
36
42
|
const host = injector.settings.getBestHost();
|
|
37
43
|
const url = host.toString();
|
|
38
44
|
injector.logger.info(`WellKnown is available on ${url}/.well-known/openid-configuration`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcModule.js","sourceRoot":"","sources":["../../src/OidcModule.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AAKrD,IAAa,UAAU,GAAvB,MAAa,UAAU;
|
|
1
|
+
{"version":3,"file":"OidcModule.js","sourceRoot":"","sources":["../../src/OidcModule.ts"],"names":[],"mappings":"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","sourcesContent":["import {Inject, InjectorService, PlatformApplication} from \"@tsed/common\";\nimport {Constant, Module} from \"@tsed/di\";\nimport koaMount from \"koa-mount\";\nimport {OidcAdapters} from \"./services/OidcAdapters\";\nimport {OidcJwks} from \"./services/OidcJwks\";\nimport {OidcProvider} from \"./services/OidcProvider\";\n\n@Module({\n imports: [OidcProvider, OidcAdapters, OidcJwks]\n})\nexport class OidcModule {\n @Inject()\n protected app: PlatformApplication;\n\n @Constant(\"PLATFORM_NAME\")\n protected platformName: string;\n\n @Constant(\"oidc.path\", \"/oidc\")\n protected basePath: string;\n\n @Inject()\n protected oidcProvider: OidcProvider;\n\n @Inject()\n protected injector: InjectorService;\n\n async $onInit() {\n if (this.oidcProvider.hasConfiguration()) {\n await this.oidcProvider.create();\n }\n }\n\n async $onRoutesInit() {\n if (this.basePath !== \"/\") {\n this.app.use(await this.getRewriteMiddleware());\n }\n }\n\n async $afterRoutesInit() {\n if (this.oidcProvider.hasConfiguration()) {\n const provider = this.oidcProvider.get();\n\n switch (this.platformName) {\n default:\n case \"express\":\n this.app.use(this.basePath, provider.callback());\n break;\n case \"koa\":\n this.app.use(koaMount(this.basePath, provider.app));\n break;\n }\n }\n }\n\n $onReady() {\n if (this.oidcProvider.hasConfiguration() && \"getBestHost\" in this.injector.settings) {\n const {injector} = this;\n // @ts-ignore\n const host = injector.settings.getBestHost();\n const url = host.toString();\n\n injector.logger.info(`WellKnown is available on ${url}/.well-known/openid-configuration`);\n }\n }\n\n private async getRewriteMiddleware() {\n switch (this.platformName) {\n default:\n case \"express\":\n const {default: expressUrlRewrite} = await import(\"express-urlrewrite\");\n return expressUrlRewrite(\"/.well-known/*\", `${this.basePath}/.well-known/$1`);\n case \"koa\":\n // @ts-ignore\n const {default: koaUrlRewrite} = await import(\"koa-rewrite\");\n return koaUrlRewrite(\"/.well-known/(.*)\", `${this.basePath}/.well-known/$1`);\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcAccountsMethods.js","sourceRoot":"","sources":["../../../src/domain/OidcAccountsMethods.ts"],"names":[],"mappings":"","sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"OidcAccountsMethods.js","sourceRoot":"","sources":["../../../src/domain/OidcAccountsMethods.ts"],"names":[],"mappings":"","sourcesContent":["import {Provider, Account} from \"oidc-provider\";\n\nexport type AuthorizationCode = InstanceType<Provider[\"AuthorizationCode\"]>;\nexport type AccessToken = InstanceType<Provider[\"AccessToken\"]>;\nexport type DeviceCode = InstanceType<Provider[\"DeviceCode\"]>;\nexport type BackchannelAuthenticationRequest = InstanceType<Provider[\"BackchannelAuthenticationRequest\"]>;\n\nexport interface OidcAccountsMethods {\n findAccount(\n id: string,\n token: AuthorizationCode | AccessToken | DeviceCode | BackchannelAuthenticationRequest | undefined\n ): Promise<Account | undefined>;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OidcBadInteractionName.js","sourceRoot":"","sources":["../../../src/domain/OidcBadInteractionName.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAE5C,MAAM,OAAO,sBAAuB,SAAQ,UAAU;CAAG","sourcesContent":["import {BadRequest} from \"@tsed/exceptions\";\n\nexport class OidcBadInteractionName extends BadRequest {}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OidcInteractionPromptProps.js","sourceRoot":"","sources":["../../../src/domain/OidcInteractionPromptProps.ts"],"names":[],"mappings":"","sourcesContent":["import {UnknownObject} from \"oidc-provider\";\nimport {OidcClient} from \"./interfaces\";\n\nexport type OidcInteractionPromptProps<Props = Record<string, any>> = {\n client: OidcClient;\n uid: string;\n grantId: string;\n details: UnknownObject;\n params: Record<string, any>;\n} & Props;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcSettings.js","sourceRoot":"","sources":["../../../src/domain/OidcSettings.ts"],"names":[],"mappings":"","sourcesContent":["import {Type} from \"@tsed/core\";\nimport {JwksKeyParameters} from \"@tsed/jwks\";\nimport {Configuration} from \"oidc-provider\";\nimport {OidcAccountsMethods} from \"./OidcAccountsMethods\";\n\nexport interface OidcSettings extends Configuration {\n /**\n * Path on which the oidc-provider instance is mounted.\n */\n path?: string;\n /**\n * Issuer URI. By default Ts.ED create issuer with http://localhost:${httpPort}\n */\n issuer?: string;\n /**\n * Path to store jwks keys.\n */\n jwksPath?: string;\n /**\n * Generate jwks from given certificates\n */\n certificates?: JwksKeyParameters[];\n /**\n * Secure keys.\n */\n secureKey?: string[];\n /**\n * Enable proxy.\n */\n proxy?: boolean;\n /**\n *
|
|
1
|
+
{"version":3,"file":"OidcSettings.js","sourceRoot":"","sources":["../../../src/domain/OidcSettings.ts"],"names":[],"mappings":"","sourcesContent":["import {Type} from \"@tsed/core\";\nimport {JwksKeyParameters} from \"@tsed/jwks\";\nimport {Configuration} from \"oidc-provider\";\nimport {OidcAccountsMethods} from \"./OidcAccountsMethods\";\n\nexport interface OidcSettings extends Configuration {\n /**\n * force the secure cookie. By default, in dev mode it's disabled and in production it's enabled.\n */\n secureCookies?: boolean;\n /**\n * Path on which the oidc-provider instance is mounted.\n */\n path?: string;\n /**\n * Issuer URI. By default, Ts.ED create issuer with http://localhost:${httpPort}\n */\n issuer?: string;\n /**\n * Path to store jwks keys.\n */\n jwksPath?: string;\n /**\n * Generate jwks from given certificates\n */\n certificates?: JwksKeyParameters[];\n /**\n * Secure keys.\n */\n secureKey?: string[];\n /**\n * Enable proxy.\n */\n proxy?: boolean;\n /**\n * Allow redirect_uri on HTTP protocol and localhost domain.\n */\n allowHttpLocalhost?: boolean;\n /**\n * Injectable service to manage accounts.\n */\n Accounts?: Type<OidcAccountsMethods>;\n}\n\ndeclare global {\n namespace TsED {\n interface Configuration {\n oidc: OidcSettings;\n }\n }\n}\n"]}
|
package/lib/esm/index.js
CHANGED
|
@@ -13,9 +13,11 @@ export * from "./decorators/params.js";
|
|
|
13
13
|
export * from "./decorators/prompt.js";
|
|
14
14
|
export * from "./decorators/uid.js";
|
|
15
15
|
export * from "./domain/OidcAccountsMethods.js";
|
|
16
|
+
export * from "./domain/OidcBadInteractionName.js";
|
|
16
17
|
export * from "./domain/OidcInteraction.js";
|
|
17
18
|
export * from "./domain/OidcInteractionMethods.js";
|
|
18
19
|
export * from "./domain/OidcInteractionOptions.js";
|
|
20
|
+
export * from "./domain/OidcInteractionPromptProps.js";
|
|
19
21
|
export * from "./domain/OidcSettings.js";
|
|
20
22
|
export * from "./domain/interfaces.js";
|
|
21
23
|
export * from "./middlewares/OidcInteractionMiddleware.js";
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC","sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from \"./OidcModule\";\nexport * from \"./constants/constants\";\nexport * from \"./decorators/grantId\";\nexport * from \"./decorators/interaction\";\nexport * from \"./decorators/interactions\";\nexport * from \"./decorators/noCache\";\nexport * from \"./decorators/oidcCtx\";\nexport * from \"./decorators/oidcSession\";\nexport * from \"./decorators/params\";\nexport * from \"./decorators/prompt\";\nexport * from \"./decorators/uid\";\nexport * from \"./domain/OidcAccountsMethods\";\nexport * from \"./domain/OidcInteraction\";\nexport * from \"./domain/OidcInteractionMethods\";\nexport * from \"./domain/OidcInteractionOptions\";\nexport * from \"./domain/OidcSettings\";\nexport * from \"./domain/interfaces\";\nexport * from \"./middlewares/OidcInteractionMiddleware\";\nexport * from \"./middlewares/OidcNoCacheMiddleware\";\nexport * from \"./middlewares/OidcSecureMiddleware\";\nexport * from \"./services/OidcAdapters\";\nexport * from \"./services/OidcInteractionContext\";\nexport * from \"./services/OidcInteractions\";\nexport * from \"./services/OidcJwks\";\nexport * from \"./services/OidcProvider\";\nexport * from \"./utils/debug\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC","sourcesContent":["/**\n * @file Automatically generated by barrelsby.\n */\n\nexport * from \"./OidcModule\";\nexport * from \"./constants/constants\";\nexport * from \"./decorators/grantId\";\nexport * from \"./decorators/interaction\";\nexport * from \"./decorators/interactions\";\nexport * from \"./decorators/noCache\";\nexport * from \"./decorators/oidcCtx\";\nexport * from \"./decorators/oidcSession\";\nexport * from \"./decorators/params\";\nexport * from \"./decorators/prompt\";\nexport * from \"./decorators/uid\";\nexport * from \"./domain/OidcAccountsMethods\";\nexport * from \"./domain/OidcBadInteractionName\";\nexport * from \"./domain/OidcInteraction\";\nexport * from \"./domain/OidcInteractionMethods\";\nexport * from \"./domain/OidcInteractionOptions\";\nexport * from \"./domain/OidcInteractionPromptProps\";\nexport * from \"./domain/OidcSettings\";\nexport * from \"./domain/interfaces\";\nexport * from \"./middlewares/OidcInteractionMiddleware\";\nexport * from \"./middlewares/OidcNoCacheMiddleware\";\nexport * from \"./middlewares/OidcSecureMiddleware\";\nexport * from \"./services/OidcAdapters\";\nexport * from \"./services/OidcInteractionContext\";\nexport * from \"./services/OidcInteractions\";\nexport * from \"./services/OidcJwks\";\nexport * from \"./services/OidcProvider\";\nexport * from \"./utils/debug\";\n"]}
|
|
@@ -1,36 +1,16 @@
|
|
|
1
|
-
import { __decorate, __metadata
|
|
2
|
-
import {
|
|
3
|
-
import { INTERACTION_CONTEXT, INTERACTION_DETAILS, INTERACTION_PARAMS, INTERACTION_GRANT_ID, INTERACTION_PROMPT, INTERACTION_SESSION, INTERACTION_UID } from "../constants/constants.js";
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Inject, Middleware } from "@tsed/common";
|
|
4
3
|
import { OidcInteractionContext } from "../services/OidcInteractionContext.js";
|
|
5
|
-
import { OidcInteractions } from "../services/OidcInteractions.js";
|
|
6
4
|
let OidcInteractionMiddleware = class OidcInteractionMiddleware {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const { uid, prompt, params, session, grantId } = interactionDetails;
|
|
11
|
-
context.set(INTERACTION_CONTEXT, oidcInteraction);
|
|
12
|
-
context.set(INTERACTION_DETAILS, interactionDetails);
|
|
13
|
-
context.set(INTERACTION_UID, uid);
|
|
14
|
-
context.set(INTERACTION_PROMPT, prompt);
|
|
15
|
-
context.set(INTERACTION_PARAMS, params);
|
|
16
|
-
context.set(INTERACTION_GRANT_ID, grantId);
|
|
17
|
-
context.set(INTERACTION_SESSION, session);
|
|
5
|
+
oidcInteractionContext;
|
|
6
|
+
async use() {
|
|
7
|
+
await this.oidcInteractionContext.interactionDetails();
|
|
18
8
|
}
|
|
19
9
|
};
|
|
20
10
|
__decorate([
|
|
21
11
|
Inject(),
|
|
22
|
-
__metadata("design:type",
|
|
23
|
-
], OidcInteractionMiddleware.prototype, "
|
|
24
|
-
__decorate([
|
|
25
|
-
Inject(),
|
|
26
|
-
__metadata("design:type", InjectorService)
|
|
27
|
-
], OidcInteractionMiddleware.prototype, "injector", void 0);
|
|
28
|
-
__decorate([
|
|
29
|
-
__param(0, Context()),
|
|
30
|
-
__metadata("design:type", Function),
|
|
31
|
-
__metadata("design:paramtypes", [Object]),
|
|
32
|
-
__metadata("design:returntype", Promise)
|
|
33
|
-
], OidcInteractionMiddleware.prototype, "use", null);
|
|
12
|
+
__metadata("design:type", OidcInteractionContext)
|
|
13
|
+
], OidcInteractionMiddleware.prototype, "oidcInteractionContext", void 0);
|
|
34
14
|
OidcInteractionMiddleware = __decorate([
|
|
35
15
|
Middleware()
|
|
36
16
|
], OidcInteractionMiddleware);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcInteractionMiddleware.js","sourceRoot":"","sources":["../../../src/middlewares/OidcInteractionMiddleware.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"OidcInteractionMiddleware.js","sourceRoot":"","sources":["../../../src/middlewares/OidcInteractionMiddleware.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,EAAC,sBAAsB,EAAC,MAAM,oCAAoC,CAAC;AAG1E,IAAa,yBAAyB,GAAtC,MAAa,yBAAyB;IAE1B,sBAAsB,CAAyB;IAEzD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;IACzD,CAAC;CACF,CAAA;AALC;IADC,MAAM,EAAE;8BACyB,sBAAsB;yEAAC;AAF9C,yBAAyB;IADrC,UAAU,EAAE;GACA,yBAAyB,CAOrC;SAPY,yBAAyB","sourcesContent":["import {Inject, Middleware} from \"@tsed/common\";\nimport {OidcInteractionContext} from \"../services/OidcInteractionContext\";\n\n@Middleware()\nexport class OidcInteractionMiddleware {\n @Inject()\n protected oidcInteractionContext: OidcInteractionContext;\n\n async use() {\n await this.oidcInteractionContext.interactionDetails();\n }\n}\n"]}
|
|
@@ -2,9 +2,11 @@ import { __decorate, __metadata } from "tslib";
|
|
|
2
2
|
import { Adapters } from "@tsed/adapters";
|
|
3
3
|
import { Inject, Injectable } from "@tsed/di";
|
|
4
4
|
let OidcAdapters = class OidcAdapters {
|
|
5
|
+
adapters;
|
|
5
6
|
createAdapterClass() {
|
|
6
7
|
const self = this;
|
|
7
8
|
return class CustomAdapter {
|
|
9
|
+
adapter;
|
|
8
10
|
constructor(name) {
|
|
9
11
|
this.adapter = self.adapters.invokeAdapter({
|
|
10
12
|
collectionName: name,
|
|
@@ -22,22 +24,42 @@ let OidcAdapters = class OidcAdapters {
|
|
|
22
24
|
return this.adapter.findById(id);
|
|
23
25
|
}
|
|
24
26
|
async findByUserCode(userCode) {
|
|
27
|
+
// istanbul ignore next
|
|
28
|
+
if (this.adapter.findByUserCode) {
|
|
29
|
+
return this.adapter.findByUserCode(userCode);
|
|
30
|
+
}
|
|
25
31
|
return this.adapter.findOne({
|
|
26
32
|
userCode
|
|
27
33
|
});
|
|
28
34
|
}
|
|
29
35
|
async findByUid(uid) {
|
|
36
|
+
// istanbul ignore next
|
|
37
|
+
if (this.adapter.findByUid) {
|
|
38
|
+
return this.adapter.findByUid(uid);
|
|
39
|
+
}
|
|
30
40
|
return this.adapter.findOne({
|
|
31
41
|
uid
|
|
32
42
|
});
|
|
33
43
|
}
|
|
34
44
|
async destroy(id) {
|
|
45
|
+
// istanbul ignore next
|
|
46
|
+
if (this.adapter.destroy) {
|
|
47
|
+
return this.adapter.destroy(id);
|
|
48
|
+
}
|
|
35
49
|
await this.adapter.deleteById(id);
|
|
36
50
|
}
|
|
37
51
|
async revokeByGrantId(grantId) {
|
|
52
|
+
// istanbul ignore next
|
|
53
|
+
if (this.adapter.revokeByGrantId) {
|
|
54
|
+
return this.adapter.revokeByGrantId(grantId);
|
|
55
|
+
}
|
|
38
56
|
await this.adapter.deleteMany({ grantId });
|
|
39
57
|
}
|
|
40
58
|
async consume(grantId) {
|
|
59
|
+
// istanbul ignore next
|
|
60
|
+
if (this.adapter.consume) {
|
|
61
|
+
return this.adapter.consume(grantId);
|
|
62
|
+
}
|
|
41
63
|
await this.adapter.update(grantId, { consumed: Math.floor(Date.now() / 1000) });
|
|
42
64
|
}
|
|
43
65
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcAdapters.js","sourceRoot":"","sources":["../../../src/services/OidcAdapters.ts"],"names":[],"mappings":";AAAA,OAAO,EAAU,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"OidcAdapters.js","sourceRoot":"","sources":["../../../src/services/OidcAdapters.ts"],"names":[],"mappings":"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","sourcesContent":["import {Adapter, Adapters} from \"@tsed/adapters\";\nimport {Inject, Injectable} from \"@tsed/di\";\nimport {Adapter as OidcAdapter, AdapterConstructor} from \"oidc-provider\";\n\nexport type OidcAdapterMethods<Model = any> = Adapter<Model> & Partial<Omit<OidcAdapter, \"upsert\">>;\n\n@Injectable()\nexport class OidcAdapters {\n @Inject()\n protected adapters: Adapters;\n\n createAdapterClass(): AdapterConstructor {\n const self = this;\n\n return class CustomAdapter implements OidcAdapter {\n adapter: OidcAdapterMethods;\n\n constructor(name: string) {\n this.adapter = self.adapters.invokeAdapter<any>({\n collectionName: name,\n model: Object\n }) as OidcAdapterMethods;\n }\n\n async upsert(id: string, payload: any, expiresIn: number): Promise<void> {\n let expiresAt;\n\n if (expiresIn) {\n expiresAt = new Date(Date.now() + expiresIn * 1000);\n }\n\n await this.adapter.upsert(id, payload, expiresAt);\n }\n\n async find(id: string) {\n return this.adapter.findById(id);\n }\n\n async findByUserCode(userCode: string) {\n // istanbul ignore next\n if (this.adapter.findByUserCode) {\n return this.adapter.findByUserCode(userCode);\n }\n\n return this.adapter.findOne({\n userCode\n });\n }\n\n async findByUid(uid: string) {\n // istanbul ignore next\n if (this.adapter.findByUid) {\n return this.adapter.findByUid(uid);\n }\n\n return this.adapter.findOne({\n uid\n });\n }\n\n async destroy(id: string) {\n // istanbul ignore next\n if (this.adapter.destroy) {\n return this.adapter.destroy(id);\n }\n\n await this.adapter.deleteById(id);\n }\n\n async revokeByGrantId(grantId: string) {\n // istanbul ignore next\n if (this.adapter.revokeByGrantId) {\n return this.adapter.revokeByGrantId(grantId);\n }\n\n await this.adapter.deleteMany({grantId});\n }\n\n async consume(grantId: string) {\n // istanbul ignore next\n if (this.adapter.consume) {\n return this.adapter.consume(grantId);\n }\n\n await this.adapter.update(grantId, {consumed: Math.floor(Date.now() / 1000)});\n }\n };\n }\n}\n"]}
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { Constant,
|
|
2
|
+
import { Constant, InjectContext, PlatformContext } from "@tsed/common";
|
|
3
3
|
import { Env } from "@tsed/core";
|
|
4
4
|
import { Inject, Injectable } from "@tsed/di";
|
|
5
|
+
import { Unauthorized } from "@tsed/exceptions";
|
|
6
|
+
import { INTERACTION_CONTEXT, INTERACTION_DETAILS, INTERACTION_GRANT_ID, INTERACTION_PARAMS, INTERACTION_PROMPT, INTERACTION_SESSION, INTERACTION_UID } from "../constants/constants.js";
|
|
7
|
+
import { OidcBadInteractionName } from "../domain/OidcBadInteractionName.js";
|
|
5
8
|
import { debug } from "../utils/debug.js";
|
|
6
9
|
import { OidcInteractions } from "./OidcInteractions.js";
|
|
7
10
|
import { OidcProvider } from "./OidcProvider.js";
|
|
8
11
|
let OidcInteractionContext = class OidcInteractionContext {
|
|
12
|
+
env;
|
|
13
|
+
oidcProvider;
|
|
14
|
+
oidcInteractions;
|
|
15
|
+
$ctx;
|
|
16
|
+
get raw() {
|
|
17
|
+
return this.$ctx.get(INTERACTION_DETAILS);
|
|
18
|
+
}
|
|
9
19
|
get session() {
|
|
10
20
|
return this.raw.session;
|
|
11
21
|
}
|
|
@@ -24,40 +34,65 @@ let OidcInteractionContext = class OidcInteractionContext {
|
|
|
24
34
|
async runInteraction(name = this.prompt.name) {
|
|
25
35
|
const handler = this.oidcInteractions.getInteractionHandler(name);
|
|
26
36
|
if (handler) {
|
|
27
|
-
await handler(this
|
|
37
|
+
await handler(this.$ctx);
|
|
28
38
|
}
|
|
29
39
|
}
|
|
30
40
|
async interactionDetails() {
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
const raw = await this.oidcProvider.get().interactionDetails(this.$ctx.getReq(), this.$ctx.getRes());
|
|
42
|
+
const { uid, prompt, params, session, grantId } = raw;
|
|
43
|
+
this.$ctx.set(INTERACTION_CONTEXT, this);
|
|
44
|
+
this.$ctx.set(INTERACTION_DETAILS, raw);
|
|
45
|
+
this.$ctx.set(INTERACTION_UID, uid);
|
|
46
|
+
this.$ctx.set(INTERACTION_PROMPT, prompt);
|
|
47
|
+
this.$ctx.set(INTERACTION_PARAMS, params);
|
|
48
|
+
this.$ctx.set(INTERACTION_GRANT_ID, grantId);
|
|
49
|
+
this.$ctx.set(INTERACTION_SESSION, session);
|
|
50
|
+
return raw;
|
|
33
51
|
}
|
|
34
52
|
async interactionFinished(result, options = { mergeWithLastSubmission: false }) {
|
|
35
|
-
return this.oidcProvider.get().interactionFinished(this.
|
|
53
|
+
return this.oidcProvider.get().interactionFinished(this.$ctx.getReq(), this.$ctx.getRes(), result, options);
|
|
36
54
|
}
|
|
37
55
|
async interactionResult(result, options = { mergeWithLastSubmission: false }) {
|
|
38
|
-
return this.oidcProvider.get().interactionResult(this.
|
|
56
|
+
return this.oidcProvider.get().interactionResult(this.$ctx.getReq(), this.$ctx.getRes(), result, options);
|
|
57
|
+
}
|
|
58
|
+
async interactionPrompt(options) {
|
|
59
|
+
const client = await this.findClient();
|
|
60
|
+
return {
|
|
61
|
+
client,
|
|
62
|
+
uid: this.uid,
|
|
63
|
+
grantId: this.grantId,
|
|
64
|
+
details: this.prompt.details,
|
|
65
|
+
params: {
|
|
66
|
+
...this.params,
|
|
67
|
+
...options.params
|
|
68
|
+
},
|
|
69
|
+
...options,
|
|
70
|
+
...this.debug()
|
|
71
|
+
};
|
|
39
72
|
}
|
|
40
73
|
async render(view, result) {
|
|
41
|
-
return this.
|
|
74
|
+
return this.$ctx.response.render(view, result);
|
|
42
75
|
}
|
|
43
76
|
async save(ttl) {
|
|
44
77
|
return this.raw.save(ttl);
|
|
45
78
|
}
|
|
46
79
|
async findClient(clientId = this.params.client_id) {
|
|
47
|
-
|
|
80
|
+
const key = `$client:${clientId}`;
|
|
81
|
+
return this.$ctx.cacheAsync(key, () => this.oidcProvider.get().Client.find(clientId));
|
|
48
82
|
}
|
|
49
83
|
async findAccount(sub, token) {
|
|
50
|
-
var _a;
|
|
51
84
|
if (!sub && this.session) {
|
|
52
|
-
sub =
|
|
85
|
+
sub = this.session?.accountId;
|
|
53
86
|
}
|
|
54
87
|
if (!sub) {
|
|
55
88
|
return;
|
|
56
89
|
}
|
|
57
|
-
|
|
90
|
+
const key = `$account:${sub}`;
|
|
91
|
+
return this.$ctx.cacheAsync(key, (() => {
|
|
92
|
+
return this.oidcProvider.get().Account.findAccount(undefined, sub, token);
|
|
93
|
+
}));
|
|
58
94
|
}
|
|
59
95
|
async getGrant() {
|
|
60
|
-
var _a;
|
|
61
96
|
const { Grant } = this.oidcProvider.get();
|
|
62
97
|
if (this.grantId) {
|
|
63
98
|
// we'll be modifying existing grant in existing session
|
|
@@ -65,10 +100,21 @@ let OidcInteractionContext = class OidcInteractionContext {
|
|
|
65
100
|
return await (this.oidcProvider.get().find || Grant.find)(this.grantId);
|
|
66
101
|
}
|
|
67
102
|
return new Grant({
|
|
68
|
-
accountId:
|
|
103
|
+
accountId: this.session?.accountId,
|
|
69
104
|
clientId: this.params.client_id
|
|
70
105
|
});
|
|
71
106
|
}
|
|
107
|
+
checkInteractionName(name) {
|
|
108
|
+
if (this.prompt.name !== name) {
|
|
109
|
+
throw new OidcBadInteractionName("Bad interaction name");
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async checkClientId(clientId = this.params.client_id) {
|
|
113
|
+
const client = await this.findClient(clientId);
|
|
114
|
+
if (!client) {
|
|
115
|
+
throw new Unauthorized(`Unknown client_id ${clientId}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
72
118
|
debug(obj) {
|
|
73
119
|
/* istanbul ignore next */
|
|
74
120
|
if (this.env === Env.PROD) {
|
|
@@ -99,12 +145,11 @@ __decorate([
|
|
|
99
145
|
__metadata("design:type", OidcInteractions)
|
|
100
146
|
], OidcInteractionContext.prototype, "oidcInteractions", void 0);
|
|
101
147
|
__decorate([
|
|
102
|
-
|
|
148
|
+
InjectContext(),
|
|
103
149
|
__metadata("design:type", PlatformContext)
|
|
104
|
-
], OidcInteractionContext.prototype, "
|
|
150
|
+
], OidcInteractionContext.prototype, "$ctx", void 0);
|
|
105
151
|
OidcInteractionContext = __decorate([
|
|
106
|
-
Injectable()
|
|
107
|
-
Scope(ProviderScope.REQUEST)
|
|
152
|
+
Injectable()
|
|
108
153
|
], OidcInteractionContext);
|
|
109
154
|
export { OidcInteractionContext };
|
|
110
155
|
//# sourceMappingURL=OidcInteractionContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcInteractionContext.js","sourceRoot":"","sources":["../../../src/services/OidcInteractionContext.ts"],"names":[],"mappings":"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","sourcesContent":["import {Constant, PlatformContext, ProviderScope, Scope} from \"@tsed/common\";\nimport {Env} from \"@tsed/core\";\nimport {Inject, Injectable} from \"@tsed/di\";\nimport {Account, InteractionResults, PromptDetail, Provider} from \"oidc-provider\";\nimport {OidcSession} from \"../decorators/oidcSession\";\nimport {OidcClient} from \"../domain/interfaces\";\nimport {OidcInteraction} from \"../domain/OidcInteraction\";\nimport {debug} from \"../utils/debug\";\nimport {OidcInteractions} from \"./OidcInteractions\";\nimport {OidcProvider} from \"./OidcProvider\";\n\n@Injectable()\n@Scope(ProviderScope.REQUEST)\nexport class OidcInteractionContext {\n @Constant(\"env\")\n env: Env;\n\n @Inject()\n protected oidcProvider: OidcProvider;\n\n @Inject()\n protected oidcInteractions: OidcInteractions;\n\n @Inject()\n protected context: PlatformContext;\n\n protected raw: OidcInteraction;\n\n get session(): OidcSession | undefined {\n return this.raw.session as any;\n }\n\n get prompt(): PromptDetail {\n return this.raw.prompt;\n }\n\n get params(): Record<string, any> {\n return this.raw.params;\n }\n\n get uid(): string {\n return this.raw.uid;\n }\n\n get grantId(): string {\n return (this.raw as any).grantId;\n }\n\n async runInteraction(name: string = this.prompt.name) {\n const handler = this.oidcInteractions.getInteractionHandler(name);\n\n if (handler) {\n await handler(this.context);\n }\n }\n\n async interactionDetails(): Promise<OidcInteraction> {\n this.raw = await this.oidcProvider.get().interactionDetails(this.context.getReq(), this.context.getRes());\n\n return this.raw;\n }\n\n async interactionFinished(result: InteractionResults, options: {mergeWithLastSubmission?: boolean} = {mergeWithLastSubmission: false}) {\n return this.oidcProvider.get().interactionFinished(this.context.getReq(), this.context.getRes(), result, options);\n }\n\n async interactionResult(result: InteractionResults, options: {mergeWithLastSubmission?: boolean} = {mergeWithLastSubmission: false}) {\n return this.oidcProvider.get().interactionResult(this.context.getReq(), this.context.getRes(), result, options);\n }\n\n async render(view: string, result: any): Promise<string> {\n return this.context.response.render(view, result);\n }\n\n async save(ttl: number): Promise<string> {\n return this.raw.save(ttl);\n }\n\n async findClient(clientId: string = this.params.client_id): Promise<OidcClient | undefined> {\n return this.oidcProvider.get().Client.find(clientId);\n }\n\n async findAccount(sub?: string, token?: any): Promise<Account | undefined> {\n if (!sub && this.session) {\n sub = this.session?.accountId as any;\n }\n\n if (!sub) {\n return;\n }\n\n return this.oidcProvider.get().Account.findAccount(undefined as any, sub!, token);\n }\n\n async getGrant(): Promise<InstanceType<Provider[\"Grant\"]>> {\n const {Grant} = this.oidcProvider.get() as any;\n\n if (this.grantId) {\n // we'll be modifying existing grant in existing session\n // @ts-ignore\n return await (this.oidcProvider.get().find || Grant.find)(this.grantId);\n }\n\n return new Grant({\n accountId: this.session?.accountId,\n clientId: this.params.client_id\n });\n }\n\n debug(obj?: any): any {\n /* istanbul ignore next */\n if (this.env === Env.PROD) {\n return {session: undefined, dbg: {params: undefined, prompt: undefined}};\n }\n\n if (obj) {\n return debug(obj);\n }\n\n return {\n session: this.session ? this.debug(this.session) : undefined,\n dbg: {\n params: this.debug(this.params),\n prompt: this.debug(this.prompt)\n }\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"OidcInteractionContext.js","sourceRoot":"","sources":["../../../src/services/OidcInteractionContext.ts"],"names":[],"mappings":"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","sourcesContent":["import {Constant, InjectContext, PlatformContext} from \"@tsed/common\";\nimport {Env} from \"@tsed/core\";\nimport {Inject, Injectable} from \"@tsed/di\";\nimport {Unauthorized} from \"@tsed/exceptions\";\nimport {Account, InteractionResults, PromptDetail, Provider} from \"oidc-provider\";\nimport {\n INTERACTION_CONTEXT,\n INTERACTION_DETAILS,\n INTERACTION_GRANT_ID,\n INTERACTION_PARAMS,\n INTERACTION_PROMPT,\n INTERACTION_SESSION,\n INTERACTION_UID\n} from \"../constants/constants\";\nimport {OidcSession} from \"../decorators/oidcSession\";\nimport {OidcClient} from \"../domain/interfaces\";\nimport {OidcBadInteractionName} from \"../domain/OidcBadInteractionName\";\nimport {OidcInteraction} from \"../domain/OidcInteraction\";\nimport {OidcInteractionPromptProps} from \"../domain/OidcInteractionPromptProps\";\nimport {debug} from \"../utils/debug\";\nimport {OidcInteractions} from \"./OidcInteractions\";\nimport {OidcProvider} from \"./OidcProvider\";\n\n@Injectable()\nexport class OidcInteractionContext {\n @Constant(\"env\")\n env: Env;\n\n @Inject()\n protected oidcProvider: OidcProvider;\n\n @Inject()\n protected oidcInteractions: OidcInteractions;\n\n @InjectContext()\n protected $ctx: PlatformContext;\n\n get raw(): OidcInteraction {\n return this.$ctx.get(INTERACTION_DETAILS)!;\n }\n\n get session(): OidcSession | undefined {\n return this.raw.session as any;\n }\n\n get prompt(): PromptDetail {\n return this.raw.prompt;\n }\n\n get params(): Record<string, any> {\n return this.raw.params;\n }\n\n get uid(): string {\n return this.raw.uid;\n }\n\n get grantId(): string {\n return (this.raw as any).grantId;\n }\n\n async runInteraction(name: string = this.prompt.name) {\n const handler = this.oidcInteractions.getInteractionHandler(name);\n\n if (handler) {\n await handler(this.$ctx);\n }\n }\n\n async interactionDetails(): Promise<OidcInteraction> {\n const raw = await this.oidcProvider.get().interactionDetails(this.$ctx.getReq(), this.$ctx.getRes());\n const {uid, prompt, params, session, grantId} = raw as any;\n\n this.$ctx.set(INTERACTION_CONTEXT, this);\n this.$ctx.set(INTERACTION_DETAILS, raw);\n this.$ctx.set(INTERACTION_UID, uid);\n this.$ctx.set(INTERACTION_PROMPT, prompt);\n this.$ctx.set(INTERACTION_PARAMS, params);\n this.$ctx.set(INTERACTION_GRANT_ID, grantId);\n this.$ctx.set(INTERACTION_SESSION, session);\n\n return raw;\n }\n\n async interactionFinished(result: InteractionResults, options: {mergeWithLastSubmission?: boolean} = {mergeWithLastSubmission: false}) {\n return this.oidcProvider.get().interactionFinished(this.$ctx.getReq(), this.$ctx.getRes(), result, options);\n }\n\n async interactionResult(result: InteractionResults, options: {mergeWithLastSubmission?: boolean} = {mergeWithLastSubmission: false}) {\n return this.oidcProvider.get().interactionResult(this.$ctx.getReq(), this.$ctx.getRes(), result, options);\n }\n\n async interactionPrompt(options: Record<string, any>): Promise<OidcInteractionPromptProps> {\n const client = await this.findClient();\n\n return {\n client,\n uid: this.uid,\n grantId: this.grantId,\n details: this.prompt.details,\n params: {\n ...this.params,\n ...options.params\n },\n ...options,\n ...this.debug()\n };\n }\n\n async render(view: string, result: any): Promise<string> {\n return this.$ctx.response.render(view, result);\n }\n\n async save(ttl: number): Promise<string> {\n return this.raw.save(ttl);\n }\n\n async findClient(clientId: string = this.params.client_id): Promise<OidcClient | undefined> {\n const key = `$client:${clientId}`;\n\n return this.$ctx.cacheAsync(key, () => this.oidcProvider.get().Client.find(clientId));\n }\n\n async findAccount(sub?: string, token?: any): Promise<Account | undefined> {\n if (!sub && this.session) {\n sub = this.session?.accountId as any;\n }\n\n if (!sub) {\n return;\n }\n\n const key = `$account:${sub}`;\n\n return this.$ctx.cacheAsync<Account | undefined>(key, (() => {\n return this.oidcProvider.get().Account.findAccount(undefined as any, sub!, token);\n }) as any);\n }\n\n async getGrant(): Promise<InstanceType<Provider[\"Grant\"]>> {\n const {Grant} = this.oidcProvider.get() as any;\n\n if (this.grantId) {\n // we'll be modifying existing grant in existing session\n // @ts-ignore\n return await (this.oidcProvider.get().find || Grant.find)(this.grantId);\n }\n\n return new Grant({\n accountId: this.session?.accountId,\n clientId: this.params.client_id\n });\n }\n\n checkInteractionName(name: string) {\n if (this.prompt.name !== name) {\n throw new OidcBadInteractionName(\"Bad interaction name\");\n }\n }\n\n async checkClientId(clientId = this.params.client_id) {\n const client = await this.findClient(clientId);\n\n if (!client) {\n throw new Unauthorized(`Unknown client_id ${clientId}`);\n }\n }\n\n debug(obj?: any): any {\n /* istanbul ignore next */\n if (this.env === Env.PROD) {\n return {session: undefined, dbg: {params: undefined, prompt: undefined}};\n }\n\n if (obj) {\n return debug(obj);\n }\n\n return {\n session: this.session ? this.debug(this.session) : undefined,\n dbg: {\n params: this.debug(this.params),\n prompt: this.debug(this.prompt)\n }\n };\n }\n}\n"]}
|
|
@@ -4,16 +4,16 @@ import { Env } from "@tsed/core";
|
|
|
4
4
|
import { Inject, Injectable, InjectorService } from "@tsed/di";
|
|
5
5
|
import { INTERACTION, INTERACTION_OPTIONS, INTERACTIONS } from "../constants/constants.js";
|
|
6
6
|
let OidcInteractions = class OidcInteractions {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
injector;
|
|
8
|
+
env;
|
|
9
|
+
oidcSettings;
|
|
10
|
+
interactions = new Map();
|
|
10
11
|
$onInit() {
|
|
11
12
|
const platformHandler = this.injector.get(PlatformHandler);
|
|
12
13
|
this.getInteractions().forEach((provider) => {
|
|
13
|
-
var _a;
|
|
14
14
|
const { name } = provider.store.get(INTERACTION_OPTIONS);
|
|
15
15
|
this.interactions.set(name, provider);
|
|
16
|
-
if (
|
|
16
|
+
if (this.injector.get(provider.token)?.$prompt) {
|
|
17
17
|
provider.store.set("$prompt", platformHandler.createCustomHandler(provider, "$prompt"));
|
|
18
18
|
}
|
|
19
19
|
});
|
|
@@ -26,7 +26,7 @@ let OidcInteractions = class OidcInteractions {
|
|
|
26
26
|
}
|
|
27
27
|
return interactionsProvider.children
|
|
28
28
|
.map((token) => this.injector.getProvider(token))
|
|
29
|
-
.filter((provider) =>
|
|
29
|
+
.filter((provider) => provider?.subType === INTERACTION);
|
|
30
30
|
}
|
|
31
31
|
getInteractionProvider(name) {
|
|
32
32
|
return this.interactions.get(name);
|
|
@@ -34,9 +34,10 @@ let OidcInteractions = class OidcInteractions {
|
|
|
34
34
|
getInteractionHandler(name) {
|
|
35
35
|
const interaction = this.getInteractionProvider(name);
|
|
36
36
|
if (interaction) {
|
|
37
|
+
const endpoint = EndpointMetadata.get(interaction.useClass, "$prompt");
|
|
37
38
|
return (ctx) => {
|
|
38
39
|
// Add current endpoint metadata to ctx
|
|
39
|
-
ctx.endpoint =
|
|
40
|
+
ctx.endpoint = endpoint;
|
|
40
41
|
return interaction.store.get("$prompt")(ctx);
|
|
41
42
|
};
|
|
42
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcInteractions.js","sourceRoot":"","sources":["../../../src/services/OidcInteractions.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,QAAQ,EAAE,gBAAgB,EAAmB,eAAe,EAA0B,MAAM,cAAc,CAAC;AACnH,OAAO,EAAC,GAAG,EAAC,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAC,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAKtF,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"OidcInteractions.js","sourceRoot":"","sources":["../../../src/services/OidcInteractions.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,QAAQ,EAAE,gBAAgB,EAAmB,eAAe,EAA0B,MAAM,cAAc,CAAC;AACnH,OAAO,EAAC,GAAG,EAAC,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAC,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAKtF,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IAE3B,QAAQ,CAAkB;IAG1B,GAAG,CAAM;IAGT,YAAY,CAAe;IAEjB,YAAY,GAA0B,IAAI,GAAG,EAAE,CAAC;IAE1D,OAAO;QACL,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAkB,eAAe,CAAE,CAAC;QAE7E,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,QAAkB,EAAE,EAAE;YACpD,MAAM,EAAC,IAAI,EAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAyB,mBAAmB,CAAC,CAAC;YAC/E,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEtC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;gBAC9C,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;aACzF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,eAAe;QACb,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC;QAEhH,0BAA0B;QAC1B,IAAI,CAAC,oBAAoB,EAAE;YACzB,OAAO,EAAE,CAAC;SACX;QAED,OAAO,oBAAoB,CAAC,QAAQ;aACjC,GAAG,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAE,CAAC;aAChE,MAAM,CAAC,CAAC,QAAkB,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC;IACvE,CAAC;IAED,sBAAsB,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,qBAAqB,CAAC,IAAY;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,WAAW,EAAE;YACf,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACvE,OAAO,CAAC,GAAoB,EAAE,EAAE;gBAC9B,uCAAuC;gBACvC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACxB,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,CAAC,CAAC;SACH;IACH,CAAC;CACF,CAAA;AApDC;IADC,MAAM,EAAE;8BACC,eAAe;kDAAC;AAG1B;IADC,QAAQ,CAAC,KAAK,CAAC;;6CACP;AAGT;IADC,QAAQ,CAAC,MAAM,CAAC;;sDACU;AARhB,gBAAgB;IAD5B,UAAU,EAAE;GACA,gBAAgB,CAsD5B;SAtDY,gBAAgB","sourcesContent":["import {Constant, EndpointMetadata, PlatformContext, PlatformHandler, Provider, TokenProvider} from \"@tsed/common\";\nimport {Env} from \"@tsed/core\";\nimport {Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {INTERACTION, INTERACTION_OPTIONS, INTERACTIONS} from \"../constants/constants\";\nimport {OidcInteractionOptions} from \"../domain/OidcInteractionOptions\";\nimport {OidcSettings} from \"../domain/OidcSettings\";\n\n@Injectable()\nexport class OidcInteractions {\n @Inject()\n injector: InjectorService;\n\n @Constant(\"env\")\n env: Env;\n\n @Constant(\"oidc\")\n oidcSettings: OidcSettings;\n\n protected interactions: Map<string, Provider> = new Map();\n\n $onInit(): void {\n const platformHandler = this.injector.get<PlatformHandler>(PlatformHandler)!;\n\n this.getInteractions().forEach((provider: Provider) => {\n const {name} = provider.store.get<OidcInteractionOptions>(INTERACTION_OPTIONS);\n this.interactions.set(name, provider);\n\n if (this.injector.get(provider.token)?.$prompt) {\n provider.store.set(\"$prompt\", platformHandler.createCustomHandler(provider, \"$prompt\"));\n }\n });\n }\n\n getInteractions(): Provider[] {\n const interactionsProvider = this.injector.getProviders().find((provider) => provider.subType === INTERACTIONS);\n\n /* istanbul ignore next */\n if (!interactionsProvider) {\n return [];\n }\n\n return interactionsProvider.children\n .map((token: TokenProvider) => this.injector.getProvider(token)!)\n .filter((provider: Provider) => provider?.subType === INTERACTION);\n }\n\n getInteractionProvider(name: string): Provider | undefined {\n return this.interactions.get(name);\n }\n\n getInteractionHandler(name: string) {\n const interaction = this.getInteractionProvider(name);\n\n if (interaction) {\n const endpoint = EndpointMetadata.get(interaction.useClass, \"$prompt\");\n return (ctx: PlatformContext) => {\n // Add current endpoint metadata to ctx\n ctx.endpoint = endpoint;\n return interaction.store.get(\"$prompt\")(ctx);\n };\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OidcJwks.js","sourceRoot":"","sources":["../../../src/services/OidcJwks.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAC,OAAO,EAAoB,MAAM,YAAY,CAAC;AAGtD,IAAa,QAAQ,GAArB,MAAa,QAAQ;
|
|
1
|
+
{"version":3,"file":"OidcJwks.js","sourceRoot":"","sources":["../../../src/services/OidcJwks.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAC,OAAO,EAAoB,MAAM,YAAY,CAAC;AAGtD,IAAa,QAAQ,GAArB,MAAa,QAAQ;IAEnB,QAAQ,CAAS;IAGjB,YAAY,CAAuB;IAEnC,IAAI,CAAS;IAEb,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,OAAO;QACL,OAAO,OAAO,CAAC;YACb,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAjBC;IADC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;;0CACnD;AAGjB;IADC,QAAQ,CAAC,mBAAmB,CAAC;;8CACK;AALxB,QAAQ;IADpB,UAAU,EAAE;GACA,QAAQ,CAmBpB;SAnBY,QAAQ","sourcesContent":["import {Constant, Injectable} from \"@tsed/di\";\nimport {join} from \"path\";\nimport {getJwks, JwksKeyParameters} from \"@tsed/jwks\";\n\n@Injectable()\nexport class OidcJwks {\n @Constant(\"oidc.jwksPath\", join(process.cwd(), \"keys\", \"jwks.json\"))\n jwksPath: string;\n\n @Constant(\"oidc.certificates\")\n certificates?: JwksKeyParameters[];\n\n keys: string;\n\n async $onInit() {\n return this.getJwks();\n }\n\n getJwks() {\n return getJwks({\n path: this.jwksPath,\n certificates: this.certificates\n });\n }\n}\n"]}
|