@memberjunction/server 2.90.0 → 2.92.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/dist/auth/AuthProviderFactory.d.ts +24 -0
- package/dist/auth/AuthProviderFactory.d.ts.map +1 -0
- package/dist/auth/AuthProviderFactory.js +82 -0
- package/dist/auth/AuthProviderFactory.js.map +1 -0
- package/dist/auth/BaseAuthProvider.d.ts +18 -0
- package/dist/auth/BaseAuthProvider.d.ts.map +1 -0
- package/dist/auth/BaseAuthProvider.js +42 -0
- package/dist/auth/BaseAuthProvider.js.map +1 -0
- package/dist/auth/IAuthProvider.d.ts +13 -0
- package/dist/auth/IAuthProvider.d.ts.map +1 -0
- package/dist/auth/IAuthProvider.js +2 -0
- package/dist/auth/IAuthProvider.js.map +1 -0
- package/dist/auth/__tests__/backward-compatibility.test.d.ts +2 -0
- package/dist/auth/__tests__/backward-compatibility.test.d.ts.map +1 -0
- package/dist/auth/__tests__/backward-compatibility.test.js +135 -0
- package/dist/auth/__tests__/backward-compatibility.test.js.map +1 -0
- package/dist/auth/index.d.ts +22 -7
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +65 -32
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.d.ts +2 -0
- package/dist/auth/initializeProviders.d.ts.map +1 -0
- package/dist/auth/initializeProviders.js +23 -0
- package/dist/auth/initializeProviders.js.map +1 -0
- package/dist/auth/providers/Auth0Provider.d.ts +9 -0
- package/dist/auth/providers/Auth0Provider.d.ts.map +1 -0
- package/dist/auth/providers/Auth0Provider.js +42 -0
- package/dist/auth/providers/Auth0Provider.js.map +1 -0
- package/dist/auth/providers/CognitoProvider.d.ts +9 -0
- package/dist/auth/providers/CognitoProvider.d.ts.map +1 -0
- package/dist/auth/providers/CognitoProvider.js +46 -0
- package/dist/auth/providers/CognitoProvider.js.map +1 -0
- package/dist/auth/providers/GoogleProvider.d.ts +9 -0
- package/dist/auth/providers/GoogleProvider.d.ts.map +1 -0
- package/dist/auth/providers/GoogleProvider.js +41 -0
- package/dist/auth/providers/GoogleProvider.js.map +1 -0
- package/dist/auth/providers/MSALProvider.d.ts +9 -0
- package/dist/auth/providers/MSALProvider.d.ts.map +1 -0
- package/dist/auth/providers/MSALProvider.js +42 -0
- package/dist/auth/providers/MSALProvider.js.map +1 -0
- package/dist/auth/providers/OktaProvider.d.ts +9 -0
- package/dist/auth/providers/OktaProvider.d.ts.map +1 -0
- package/dist/auth/providers/OktaProvider.js +42 -0
- package/dist/auth/providers/OktaProvider.js.map +1 -0
- package/dist/config.d.ts +97 -21
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -6
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +25 -17
- package/dist/context.js.map +1 -1
- package/dist/generated/generated.d.ts +6 -0
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +31 -0
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +1 -1
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +5 -4
- package/dist/generic/ResolverBase.js.map +1 -1
- package/package.json +39 -39
- package/src/auth/AuthProviderFactory.ts +152 -0
- package/src/auth/BaseAuthProvider.ts +71 -0
- package/src/auth/IAuthProvider.ts +49 -0
- package/src/auth/__tests__/backward-compatibility.test.ts +183 -0
- package/src/auth/index.ts +104 -36
- package/src/auth/initializeProviders.ts +31 -0
- package/src/auth/providers/Auth0Provider.ts +45 -0
- package/src/auth/providers/CognitoProvider.ts +50 -0
- package/src/auth/providers/GoogleProvider.ts +45 -0
- package/src/auth/providers/MSALProvider.ts +45 -0
- package/src/auth/providers/OktaProvider.ts +46 -0
- package/src/config.ts +14 -10
- package/src/context.ts +40 -17
- package/src/generated/generated.ts +19 -0
- package/src/generic/ResolverBase.ts +9 -4
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AuthProviderConfig } from '@memberjunction/core';
|
|
2
|
+
import { IAuthProvider } from './IAuthProvider.js';
|
|
3
|
+
import './providers/Auth0Provider.js';
|
|
4
|
+
import './providers/MSALProvider.js';
|
|
5
|
+
import './providers/OktaProvider.js';
|
|
6
|
+
import './providers/CognitoProvider.js';
|
|
7
|
+
import './providers/GoogleProvider.js';
|
|
8
|
+
export declare class AuthProviderFactory {
|
|
9
|
+
private static instance;
|
|
10
|
+
private providers;
|
|
11
|
+
private issuerCache;
|
|
12
|
+
private constructor();
|
|
13
|
+
static getInstance(): AuthProviderFactory;
|
|
14
|
+
static createProvider(config: AuthProviderConfig): IAuthProvider;
|
|
15
|
+
register(provider: IAuthProvider): void;
|
|
16
|
+
getByIssuer(issuer: string): IAuthProvider | undefined;
|
|
17
|
+
getByName(name: string): IAuthProvider | undefined;
|
|
18
|
+
getAllProviders(): IAuthProvider[];
|
|
19
|
+
hasProviders(): boolean;
|
|
20
|
+
clear(): void;
|
|
21
|
+
static getRegisteredProviderTypes(): string[];
|
|
22
|
+
static isProviderTypeRegistered(type: string): boolean;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=AuthProviderFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthProviderFactory.d.ts","sourceRoot":"","sources":["../../src/auth/AuthProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,OAAO,8BAA8B,CAAC;AACtC,OAAO,6BAA6B,CAAC;AACrC,OAAO,6BAA6B,CAAC;AACrC,OAAO,gCAAgC,CAAC;AACxC,OAAO,+BAA+B,CAAC;AAMvC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,WAAW,CAAyC;IAE5D,OAAO;IAKP,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAWzC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa;IAyBhE,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAgBvC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAqBtD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAOlD,eAAe,IAAI,aAAa,EAAE;IAOlC,YAAY,IAAI,OAAO;IAOvB,KAAK,IAAI,IAAI;IAQb,MAAM,CAAC,0BAA0B,IAAI,MAAM,EAAE;IAc7C,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CASvD"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { BaseAuthProvider } from './BaseAuthProvider.js';
|
|
2
|
+
import { MJGlobal } from '@memberjunction/global';
|
|
3
|
+
import './providers/Auth0Provider.js';
|
|
4
|
+
import './providers/MSALProvider.js';
|
|
5
|
+
import './providers/OktaProvider.js';
|
|
6
|
+
import './providers/CognitoProvider.js';
|
|
7
|
+
import './providers/GoogleProvider.js';
|
|
8
|
+
export class AuthProviderFactory {
|
|
9
|
+
static instance;
|
|
10
|
+
providers = new Map();
|
|
11
|
+
issuerCache = new Map();
|
|
12
|
+
constructor() { }
|
|
13
|
+
static getInstance() {
|
|
14
|
+
if (!AuthProviderFactory.instance) {
|
|
15
|
+
AuthProviderFactory.instance = new AuthProviderFactory();
|
|
16
|
+
}
|
|
17
|
+
return AuthProviderFactory.instance;
|
|
18
|
+
}
|
|
19
|
+
static createProvider(config) {
|
|
20
|
+
try {
|
|
21
|
+
const provider = MJGlobal.Instance.ClassFactory.CreateInstance(BaseAuthProvider, config.type.toLowerCase(), config);
|
|
22
|
+
if (!provider) {
|
|
23
|
+
throw new Error(`No provider registered for type: ${config.type}`);
|
|
24
|
+
}
|
|
25
|
+
return provider;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
29
|
+
throw new Error(`Failed to create authentication provider for type '${config.type}': ${message}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
register(provider) {
|
|
33
|
+
if (!provider.validateConfig()) {
|
|
34
|
+
throw new Error(`Invalid configuration for provider: ${provider.name}`);
|
|
35
|
+
}
|
|
36
|
+
this.providers.set(provider.name, provider);
|
|
37
|
+
this.issuerCache.clear();
|
|
38
|
+
console.log(`Registered auth provider: ${provider.name} with issuer: ${provider.issuer}`);
|
|
39
|
+
}
|
|
40
|
+
getByIssuer(issuer) {
|
|
41
|
+
if (this.issuerCache.has(issuer)) {
|
|
42
|
+
return this.issuerCache.get(issuer);
|
|
43
|
+
}
|
|
44
|
+
for (const provider of this.providers.values()) {
|
|
45
|
+
if (provider.matchesIssuer(issuer)) {
|
|
46
|
+
this.issuerCache.set(issuer, provider);
|
|
47
|
+
return provider;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
getByName(name) {
|
|
53
|
+
return this.providers.get(name);
|
|
54
|
+
}
|
|
55
|
+
getAllProviders() {
|
|
56
|
+
return Array.from(this.providers.values());
|
|
57
|
+
}
|
|
58
|
+
hasProviders() {
|
|
59
|
+
return this.providers.size > 0;
|
|
60
|
+
}
|
|
61
|
+
clear() {
|
|
62
|
+
this.providers.clear();
|
|
63
|
+
this.issuerCache.clear();
|
|
64
|
+
}
|
|
65
|
+
static getRegisteredProviderTypes() {
|
|
66
|
+
const registrations = MJGlobal.Instance.ClassFactory.GetAllRegistrations(BaseAuthProvider);
|
|
67
|
+
const providerTypes = registrations
|
|
68
|
+
.map(reg => reg.Key)
|
|
69
|
+
.filter((key) => key !== null && key !== undefined);
|
|
70
|
+
return Array.from(new Set(providerTypes));
|
|
71
|
+
}
|
|
72
|
+
static isProviderTypeRegistered(type) {
|
|
73
|
+
try {
|
|
74
|
+
const registration = MJGlobal.Instance.ClassFactory.GetRegistration(BaseAuthProvider, type.toLowerCase());
|
|
75
|
+
return registration !== null && registration !== undefined;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=AuthProviderFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthProviderFactory.js","sourceRoot":"","sources":["../../src/auth/AuthProviderFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { JwtHeader, JwtPayload, SigningKeyCallback } from 'jsonwebtoken';
|
|
2
|
+
import jwksClient from 'jwks-rsa';
|
|
3
|
+
import { AuthProviderConfig, AuthUserInfo } from '@memberjunction/core';
|
|
4
|
+
import { IAuthProvider } from './IAuthProvider.js';
|
|
5
|
+
export declare abstract class BaseAuthProvider implements IAuthProvider {
|
|
6
|
+
name: string;
|
|
7
|
+
issuer: string;
|
|
8
|
+
audience: string;
|
|
9
|
+
jwksUri: string;
|
|
10
|
+
protected config: AuthProviderConfig;
|
|
11
|
+
protected jwksClient: jwksClient.JwksClient;
|
|
12
|
+
constructor(config: AuthProviderConfig);
|
|
13
|
+
validateConfig(): boolean;
|
|
14
|
+
getSigningKey(header: JwtHeader, callback: SigningKeyCallback): void;
|
|
15
|
+
matchesIssuer(issuer: string): boolean;
|
|
16
|
+
abstract extractUserInfo(payload: JwtPayload): AuthUserInfo;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=BaseAuthProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseAuthProvider.d.ts","sourceRoot":"","sources":["../../src/auth/BaseAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,UAAU,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,8BAAsB,gBAAiB,YAAW,aAAa;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACrC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC;gBAEhC,MAAM,EAAE,kBAAkB;IAmBtC,cAAc,IAAI,OAAO;IAOzB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAepE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAUtC,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,YAAY;CAC5D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import jwksClient from 'jwks-rsa';
|
|
2
|
+
export class BaseAuthProvider {
|
|
3
|
+
name;
|
|
4
|
+
issuer;
|
|
5
|
+
audience;
|
|
6
|
+
jwksUri;
|
|
7
|
+
config;
|
|
8
|
+
jwksClient;
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.name = config.name;
|
|
12
|
+
this.issuer = config.issuer;
|
|
13
|
+
this.audience = config.audience;
|
|
14
|
+
this.jwksUri = config.jwksUri;
|
|
15
|
+
this.jwksClient = jwksClient({
|
|
16
|
+
jwksUri: this.jwksUri,
|
|
17
|
+
cache: true,
|
|
18
|
+
cacheMaxEntries: 5,
|
|
19
|
+
cacheMaxAge: 600000
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
validateConfig() {
|
|
23
|
+
return !!(this.name && this.issuer && this.audience && this.jwksUri);
|
|
24
|
+
}
|
|
25
|
+
getSigningKey(header, callback) {
|
|
26
|
+
this.jwksClient.getSigningKey(header.kid)
|
|
27
|
+
.then((key) => {
|
|
28
|
+
const signingKey = 'publicKey' in key ? key.publicKey : key.rsaPublicKey;
|
|
29
|
+
callback(null, signingKey);
|
|
30
|
+
})
|
|
31
|
+
.catch((err) => {
|
|
32
|
+
console.error(`Error getting signing key for provider ${this.name}:`, err);
|
|
33
|
+
callback(err);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
matchesIssuer(issuer) {
|
|
37
|
+
const normalizedIssuer = issuer.toLowerCase().replace(/\/$/, '');
|
|
38
|
+
const normalizedProviderIssuer = this.issuer.toLowerCase().replace(/\/$/, '');
|
|
39
|
+
return normalizedIssuer === normalizedProviderIssuer;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=BaseAuthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseAuthProvider.js","sourceRoot":"","sources":["../../src/auth/BaseAuthProvider.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,UAAU,CAAC;AASlC,MAAM,OAAgB,gBAAgB;IACpC,IAAI,CAAS;IACb,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,OAAO,CAAS;IACN,MAAM,CAAqB;IAC3B,UAAU,CAAwB;IAE5C,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAG9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,CAAC;YAClB,WAAW,EAAE,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAKD,cAAc;QACZ,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC;IAKD,aAAa,CAAC,MAAiB,EAAE,QAA4B;QAC3D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;aACtC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,MAAM,UAAU,GAAG,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;YACzE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7B,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,0CAA0C,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3E,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAKD,aAAa,CAAC,MAAc;QAE1B,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,wBAAwB,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC9E,OAAO,gBAAgB,KAAK,wBAAwB,CAAC;IACvD,CAAC;CAMF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { JwtHeader, JwtPayload, SigningKeyCallback } from 'jsonwebtoken';
|
|
2
|
+
import { AuthUserInfo } from '@memberjunction/core';
|
|
3
|
+
export interface IAuthProvider {
|
|
4
|
+
name: string;
|
|
5
|
+
issuer: string;
|
|
6
|
+
audience: string;
|
|
7
|
+
jwksUri: string;
|
|
8
|
+
validateConfig(): boolean;
|
|
9
|
+
getSigningKey(header: JwtHeader, callback: SigningKeyCallback): void;
|
|
10
|
+
extractUserInfo(payload: JwtPayload): AuthUserInfo;
|
|
11
|
+
matchesIssuer(issuer: string): boolean;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=IAuthProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IAuthProvider.d.ts","sourceRoot":"","sources":["../../src/auth/IAuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAsB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMxE,MAAM,WAAW,aAAa;IAI5B,IAAI,EAAE,MAAM,CAAC;IAKb,MAAM,EAAE,MAAM,CAAC;IAKf,QAAQ,EAAE,MAAM,CAAC;IAKjB,OAAO,EAAE,MAAM,CAAC;IAKhB,cAAc,IAAI,OAAO,CAAC;IAK1B,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAMrE,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,YAAY,CAAC;IAKnD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IAuthProvider.js","sourceRoot":"","sources":["../../src/auth/IAuthProvider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backward-compatibility.test.d.ts","sourceRoot":"","sources":["../../../src/auth/__tests__/backward-compatibility.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, jest } from '@jest/globals';
|
|
2
|
+
import { AuthProviderFactory } from '../AuthProviderFactory';
|
|
3
|
+
import { initializeAuthProviders } from '../initializeProviders';
|
|
4
|
+
describe('Authentication Provider Backward Compatibility', () => {
|
|
5
|
+
let factory;
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
factory = AuthProviderFactory.getInstance();
|
|
8
|
+
factory.clear();
|
|
9
|
+
});
|
|
10
|
+
afterEach(() => {
|
|
11
|
+
factory.clear();
|
|
12
|
+
});
|
|
13
|
+
describe('Legacy Configuration Support', () => {
|
|
14
|
+
it('should create MSAL provider from legacy config', () => {
|
|
15
|
+
process.env.TENANT_ID = 'test-tenant-id';
|
|
16
|
+
process.env.WEB_CLIENT_ID = 'test-client-id';
|
|
17
|
+
initializeAuthProviders();
|
|
18
|
+
const msalProvider = factory.getByName('msal');
|
|
19
|
+
expect(msalProvider).toBeDefined();
|
|
20
|
+
expect(msalProvider?.issuer).toContain('test-tenant-id');
|
|
21
|
+
expect(msalProvider?.audience).toBe('test-client-id');
|
|
22
|
+
});
|
|
23
|
+
it('should create Auth0 provider from legacy config', () => {
|
|
24
|
+
process.env.AUTH0_DOMAIN = 'test.auth0.com';
|
|
25
|
+
process.env.AUTH0_CLIENT_ID = 'auth0-client-id';
|
|
26
|
+
process.env.AUTH0_CLIENT_SECRET = 'auth0-secret';
|
|
27
|
+
initializeAuthProviders();
|
|
28
|
+
const auth0Provider = factory.getByName('auth0');
|
|
29
|
+
expect(auth0Provider).toBeDefined();
|
|
30
|
+
expect(auth0Provider?.issuer).toBe('https://test.auth0.com/');
|
|
31
|
+
expect(auth0Provider?.audience).toBe('auth0-client-id');
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('Provider Registry Functionality', () => {
|
|
35
|
+
it('should find providers by issuer with different formats', () => {
|
|
36
|
+
const testProvider = {
|
|
37
|
+
name: 'test',
|
|
38
|
+
issuer: 'https://test.provider.com/oauth2',
|
|
39
|
+
audience: 'test-audience',
|
|
40
|
+
jwksUri: 'https://test.provider.com/.well-known/jwks.json',
|
|
41
|
+
validateConfig: () => true,
|
|
42
|
+
getSigningKey: jest.fn(),
|
|
43
|
+
extractUserInfo: jest.fn(),
|
|
44
|
+
matchesIssuer: (issuer) => {
|
|
45
|
+
const normalized = issuer.toLowerCase().replace(/\/$/, '');
|
|
46
|
+
return normalized === 'https://test.provider.com/oauth2';
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
factory.register(testProvider);
|
|
50
|
+
expect(factory.getByIssuer('https://test.provider.com/oauth2')).toBe(testProvider);
|
|
51
|
+
expect(factory.getByIssuer('https://test.provider.com/oauth2/')).toBe(testProvider);
|
|
52
|
+
expect(factory.getByIssuer('https://TEST.PROVIDER.COM/oauth2')).toBe(testProvider);
|
|
53
|
+
});
|
|
54
|
+
it('should cache issuer lookups for performance', () => {
|
|
55
|
+
const testProvider = {
|
|
56
|
+
name: 'test',
|
|
57
|
+
issuer: 'https://test.provider.com',
|
|
58
|
+
audience: 'test',
|
|
59
|
+
jwksUri: 'https://test.provider.com/jwks',
|
|
60
|
+
validateConfig: () => true,
|
|
61
|
+
getSigningKey: jest.fn(),
|
|
62
|
+
extractUserInfo: jest.fn(),
|
|
63
|
+
matchesIssuer: jest.fn((issuer) => issuer === 'https://test.provider.com')
|
|
64
|
+
};
|
|
65
|
+
factory.register(testProvider);
|
|
66
|
+
factory.getByIssuer('https://test.provider.com');
|
|
67
|
+
expect(testProvider.matchesIssuer).toHaveBeenCalledTimes(1);
|
|
68
|
+
factory.getByIssuer('https://test.provider.com');
|
|
69
|
+
expect(testProvider.matchesIssuer).toHaveBeenCalledTimes(1);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('User Info Extraction', () => {
|
|
73
|
+
it('should extract user info from different token formats', () => {
|
|
74
|
+
const msalPayload = {
|
|
75
|
+
iss: 'https://login.microsoftonline.com/tenant/v2.0',
|
|
76
|
+
email: 'user@example.com',
|
|
77
|
+
given_name: 'John',
|
|
78
|
+
family_name: 'Doe',
|
|
79
|
+
name: 'John Doe',
|
|
80
|
+
preferred_username: 'john.doe@example.com'
|
|
81
|
+
};
|
|
82
|
+
const auth0Payload = {
|
|
83
|
+
iss: 'https://test.auth0.com/',
|
|
84
|
+
email: 'user@example.com',
|
|
85
|
+
given_name: 'Jane',
|
|
86
|
+
family_name: 'Smith',
|
|
87
|
+
name: 'Jane Smith'
|
|
88
|
+
};
|
|
89
|
+
const oktaPayload = {
|
|
90
|
+
iss: 'https://test.okta.com/oauth2/default',
|
|
91
|
+
email: 'user@example.com',
|
|
92
|
+
given_name: 'Bob',
|
|
93
|
+
family_name: 'Johnson',
|
|
94
|
+
name: 'Bob Johnson',
|
|
95
|
+
preferred_username: 'bob.johnson'
|
|
96
|
+
};
|
|
97
|
+
initializeAuthProviders();
|
|
98
|
+
const msalProvider = factory.getByIssuer(msalPayload.iss);
|
|
99
|
+
if (msalProvider) {
|
|
100
|
+
const msalUserInfo = msalProvider.extractUserInfo(msalPayload);
|
|
101
|
+
expect(msalUserInfo.email).toBe('user@example.com');
|
|
102
|
+
expect(msalUserInfo.firstName).toBe('John');
|
|
103
|
+
expect(msalUserInfo.lastName).toBe('Doe');
|
|
104
|
+
}
|
|
105
|
+
const auth0Provider = factory.getByIssuer(auth0Payload.iss);
|
|
106
|
+
if (auth0Provider) {
|
|
107
|
+
const auth0UserInfo = auth0Provider.extractUserInfo(auth0Payload);
|
|
108
|
+
expect(auth0UserInfo.email).toBe('user@example.com');
|
|
109
|
+
expect(auth0UserInfo.firstName).toBe('Jane');
|
|
110
|
+
expect(auth0UserInfo.lastName).toBe('Smith');
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
describe('Error Handling', () => {
|
|
115
|
+
it('should handle missing provider gracefully', () => {
|
|
116
|
+
const unknownIssuer = 'https://unknown.provider.com';
|
|
117
|
+
const provider = factory.getByIssuer(unknownIssuer);
|
|
118
|
+
expect(provider).toBeUndefined();
|
|
119
|
+
});
|
|
120
|
+
it('should validate provider configuration', () => {
|
|
121
|
+
const invalidProvider = {
|
|
122
|
+
name: 'invalid',
|
|
123
|
+
issuer: '',
|
|
124
|
+
audience: 'test',
|
|
125
|
+
jwksUri: 'https://test.com/jwks',
|
|
126
|
+
validateConfig: () => false,
|
|
127
|
+
getSigningKey: jest.fn(),
|
|
128
|
+
extractUserInfo: jest.fn(),
|
|
129
|
+
matchesIssuer: jest.fn()
|
|
130
|
+
};
|
|
131
|
+
expect(() => factory.register(invalidProvider)).toThrow();
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=backward-compatibility.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backward-compatibility.test.js","sourceRoot":"","sources":["../../../src/auth/__tests__/backward-compatibility.test.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import { JwtHeader, SigningKeyCallback } from 'jsonwebtoken';
|
|
1
|
+
import { JwtHeader, SigningKeyCallback, JwtPayload } from 'jsonwebtoken';
|
|
2
2
|
import sql from 'mssql';
|
|
3
3
|
import { UserInfo } from '@memberjunction/core';
|
|
4
4
|
export { TokenExpiredError } from './tokenExpiredError.js';
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
5
|
+
export { IAuthProvider } from './IAuthProvider.js';
|
|
6
|
+
export { AuthProviderFactory } from './AuthProviderFactory.js';
|
|
7
|
+
export declare const getValidationOptions: (issuer: string) => {
|
|
8
|
+
audience: string;
|
|
9
|
+
jwksUri: string;
|
|
10
|
+
} | undefined;
|
|
11
|
+
export declare const validationOptions: Record<string, {
|
|
12
|
+
audience: string;
|
|
13
|
+
jwksUri: string;
|
|
14
|
+
}>;
|
|
11
15
|
export declare class UserPayload {
|
|
12
16
|
aio?: string;
|
|
13
17
|
aud?: string;
|
|
@@ -24,8 +28,19 @@ export declare class UserPayload {
|
|
|
24
28
|
tid?: string;
|
|
25
29
|
uti?: string;
|
|
26
30
|
ver?: string;
|
|
31
|
+
email?: string;
|
|
32
|
+
given_name?: string;
|
|
33
|
+
family_name?: string;
|
|
34
|
+
[key: string]: unknown;
|
|
27
35
|
}
|
|
28
36
|
export declare const getSigningKeys: (issuer: string) => (header: JwtHeader, cb: SigningKeyCallback) => void;
|
|
37
|
+
export declare const extractUserInfoFromPayload: (payload: JwtPayload) => {
|
|
38
|
+
email?: string;
|
|
39
|
+
firstName?: string;
|
|
40
|
+
lastName?: string;
|
|
41
|
+
fullName?: string;
|
|
42
|
+
preferredUsername?: string;
|
|
43
|
+
};
|
|
29
44
|
export declare const getSystemUser: (dataSource?: sql.ConnectionPool, attemptCacheUpdateIfNeeded?: boolean) => Promise<UserInfo>;
|
|
30
45
|
export declare const verifyUserRecord: (email?: string, firstName?: string, lastName?: string, requestDomain?: string, dataSource?: sql.ConnectionPool, attemptCacheUpdateIfNeeded?: boolean) => Promise<UserInfo | undefined>;
|
|
31
46
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGzE,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAOpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAuC/D,eAAO,MAAM,oBAAoB,WAAY,MAAM,KAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAY7F,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAWlF,CAAC;AAEH,qBAAa,WAAW;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAKD,eAAO,MAAM,cAAc,WAAY,MAAM,cAAc,SAAS,MAAM,kBAAkB,SAmB3F,CAAC;AAKF,eAAO,MAAM,0BAA0B,YAAa,UAAU,KAAG;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAiC5B,CAAC;AAEF,eAAO,MAAM,aAAa,gBAAuB,IAAI,cAAc,+BAA8B,OAAO,KAAU,QAAQ,QAAQ,CAYjI,CAAC;AAEF,eAAO,MAAM,gBAAgB,WACnB,MAAM,cACF,MAAM,aACP,MAAM,kBACD,MAAM,eACT,IAAI,cAAc,+BACH,OAAO,KAClC,QAAQ,QAAQ,GAAG,SAAS,CAyE9B,CAAC"}
|
package/dist/auth/index.js
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { auth0Domain, auth0WebClientID, configInfo, tenantID, webClientID } from '../config.js';
|
|
1
|
+
import { configInfo } from '../config.js';
|
|
3
2
|
import { UserCache } from '@memberjunction/sqlserver-dataprovider';
|
|
4
3
|
import { Metadata, UserInfo } from '@memberjunction/core';
|
|
5
4
|
import { NewUserBase } from './newUsers.js';
|
|
6
5
|
import { MJGlobal } from '@memberjunction/global';
|
|
6
|
+
import { AuthProviderFactory } from './AuthProviderFactory.js';
|
|
7
|
+
import { initializeAuthProviders } from './initializeProviders.js';
|
|
7
8
|
export { TokenExpiredError } from './tokenExpiredError.js';
|
|
8
|
-
|
|
9
|
-
const missingAuth0Config = !auth0Domain || !auth0WebClientID;
|
|
9
|
+
export { AuthProviderFactory } from './AuthProviderFactory.js';
|
|
10
10
|
const SYSTEM_USER_ID = 'ecafccec-6a37-ef11-86d4-000d3a4e707e';
|
|
11
11
|
class MissingAuthError extends Error {
|
|
12
12
|
constructor() {
|
|
13
|
-
super('
|
|
13
|
+
super('No authentication providers configured. Please configure at least one auth provider in mj.config.cjs');
|
|
14
14
|
this.name = 'MissingAuthError';
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
const issuers = {
|
|
18
|
-
azure: `https://login.microsoftonline.com/${tenantID}/v2.0`,
|
|
19
|
-
auth0: `https://${auth0Domain}/`,
|
|
20
|
-
};
|
|
21
17
|
const refreshUserCache = async (dataSource) => {
|
|
22
18
|
const startTime = Date.now();
|
|
23
19
|
await UserCache.Instance.Refresh(dataSource);
|
|
@@ -34,16 +30,29 @@ const refreshUserCache = async (dataSource) => {
|
|
|
34
30
|
const finalElapsed = finalTime - startTime;
|
|
35
31
|
console.log(` UserCache updated in ${elapsed}ms, total elapsed time of ${finalElapsed}ms including delay of ${delay}ms (if needed). Attempting to find the user again via recursive call`);
|
|
36
32
|
};
|
|
37
|
-
export const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
export const getValidationOptions = (issuer) => {
|
|
34
|
+
const factory = AuthProviderFactory.getInstance();
|
|
35
|
+
const provider = factory.getByIssuer(issuer);
|
|
36
|
+
if (!provider) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
audience: provider.audience,
|
|
41
|
+
jwksUri: provider.jwksUri
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export const validationOptions = new Proxy({}, {
|
|
45
|
+
get: (target, prop) => {
|
|
46
|
+
return getValidationOptions(prop);
|
|
41
47
|
},
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
jwksUri: `https://login.microsoftonline.com/${tenantID}/discovery/v2.0/keys`,
|
|
48
|
+
has: (target, prop) => {
|
|
49
|
+
return getValidationOptions(prop) !== undefined;
|
|
45
50
|
},
|
|
46
|
-
|
|
51
|
+
ownKeys: () => {
|
|
52
|
+
const factory = AuthProviderFactory.getInstance();
|
|
53
|
+
return factory.getAllProviders().map(p => p.issuer);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
47
56
|
export class UserPayload {
|
|
48
57
|
aio;
|
|
49
58
|
aud;
|
|
@@ -60,27 +69,50 @@ export class UserPayload {
|
|
|
60
69
|
tid;
|
|
61
70
|
uti;
|
|
62
71
|
ver;
|
|
72
|
+
email;
|
|
73
|
+
given_name;
|
|
74
|
+
family_name;
|
|
63
75
|
}
|
|
64
76
|
export const getSigningKeys = (issuer) => (header, cb) => {
|
|
65
|
-
|
|
66
|
-
|
|
77
|
+
const factory = AuthProviderFactory.getInstance();
|
|
78
|
+
if (!factory.hasProviders()) {
|
|
79
|
+
initializeAuthProviders();
|
|
67
80
|
}
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
70
|
-
|
|
81
|
+
const provider = factory.getByIssuer(issuer);
|
|
82
|
+
if (!provider) {
|
|
83
|
+
if (!factory.hasProviders()) {
|
|
84
|
+
throw new MissingAuthError();
|
|
85
|
+
}
|
|
86
|
+
throw new Error(`No authentication provider found for issuer: ${issuer}`);
|
|
71
87
|
}
|
|
72
|
-
|
|
73
|
-
|
|
88
|
+
provider.getSigningKey(header, cb);
|
|
89
|
+
};
|
|
90
|
+
export const extractUserInfoFromPayload = (payload) => {
|
|
91
|
+
const factory = AuthProviderFactory.getInstance();
|
|
92
|
+
const issuer = payload.iss;
|
|
93
|
+
if (!issuer) {
|
|
94
|
+
const preferredUsername = payload.preferred_username;
|
|
95
|
+
return {
|
|
96
|
+
email: payload.email || preferredUsername,
|
|
97
|
+
firstName: payload.given_name,
|
|
98
|
+
lastName: payload.family_name,
|
|
99
|
+
fullName: payload.name,
|
|
100
|
+
preferredUsername
|
|
101
|
+
};
|
|
74
102
|
}
|
|
75
|
-
|
|
76
|
-
|
|
103
|
+
const provider = factory.getByIssuer(issuer);
|
|
104
|
+
if (!provider) {
|
|
105
|
+
const fullName = payload.name;
|
|
106
|
+
const preferredUsername = payload.preferred_username;
|
|
107
|
+
return {
|
|
108
|
+
email: payload.email || preferredUsername,
|
|
109
|
+
firstName: payload.given_name || fullName?.split(' ')[0],
|
|
110
|
+
lastName: payload.family_name || fullName?.split(' ')[1] || fullName?.split(' ')[0],
|
|
111
|
+
fullName,
|
|
112
|
+
preferredUsername
|
|
113
|
+
};
|
|
77
114
|
}
|
|
78
|
-
|
|
79
|
-
.getSigningKey(header.kid)
|
|
80
|
-
.then((key) => {
|
|
81
|
-
cb(null, 'publicKey' in key ? key.publicKey : key.rsaPublicKey);
|
|
82
|
-
})
|
|
83
|
-
.catch((err) => console.error(err));
|
|
115
|
+
return provider.extractUserInfo(payload);
|
|
84
116
|
};
|
|
85
117
|
export const getSystemUser = async (dataSource, attemptCacheUpdateIfNeeded = true) => {
|
|
86
118
|
const systemUser = UserCache.Instance.Users.find((u) => u.ID.toLowerCase() === SYSTEM_USER_ID.toLowerCase());
|
|
@@ -147,4 +179,5 @@ export const verifyUserRecord = async (email, firstName, lastName, requestDomain
|
|
|
147
179
|
}
|
|
148
180
|
return user;
|
|
149
181
|
};
|
|
182
|
+
initializeAuthProviders();
|
|
150
183
|
//# sourceMappingURL=index.js.map
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initializeProviders.d.ts","sourceRoot":"","sources":["../../src/auth/initializeProviders.ts"],"names":[],"mappings":"AAOA,wBAAgB,uBAAuB,IAAI,IAAI,CAuB9C"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { configInfo } from '../config.js';
|
|
2
|
+
import { LogError, LogStatus } from '@memberjunction/core';
|
|
3
|
+
import { AuthProviderFactory } from './AuthProviderFactory.js';
|
|
4
|
+
export function initializeAuthProviders() {
|
|
5
|
+
const factory = AuthProviderFactory.getInstance();
|
|
6
|
+
factory.clear();
|
|
7
|
+
if (configInfo.authProviders && configInfo.authProviders.length > 0) {
|
|
8
|
+
for (const providerConfig of configInfo.authProviders) {
|
|
9
|
+
try {
|
|
10
|
+
const provider = AuthProviderFactory.createProvider(providerConfig);
|
|
11
|
+
factory.register(provider);
|
|
12
|
+
LogStatus(`Registered auth provider: ${provider.name} (type: ${providerConfig.type})`);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
LogError(`Failed to initialize auth provider ${providerConfig.name}: ${error}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
if (!factory.hasProviders()) {
|
|
20
|
+
LogError('No authentication providers configured. Please configure authProviders array in mj.config.cjs');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=initializeProviders.js.map
|