@memberjunction/server 2.89.0 → 2.91.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.
Files changed (89) hide show
  1. package/dist/auth/AuthProviderFactory.d.ts +24 -0
  2. package/dist/auth/AuthProviderFactory.d.ts.map +1 -0
  3. package/dist/auth/AuthProviderFactory.js +82 -0
  4. package/dist/auth/AuthProviderFactory.js.map +1 -0
  5. package/dist/auth/BaseAuthProvider.d.ts +18 -0
  6. package/dist/auth/BaseAuthProvider.d.ts.map +1 -0
  7. package/dist/auth/BaseAuthProvider.js +42 -0
  8. package/dist/auth/BaseAuthProvider.js.map +1 -0
  9. package/dist/auth/IAuthProvider.d.ts +13 -0
  10. package/dist/auth/IAuthProvider.d.ts.map +1 -0
  11. package/dist/auth/IAuthProvider.js +2 -0
  12. package/dist/auth/IAuthProvider.js.map +1 -0
  13. package/dist/auth/__tests__/backward-compatibility.test.d.ts +2 -0
  14. package/dist/auth/__tests__/backward-compatibility.test.d.ts.map +1 -0
  15. package/dist/auth/__tests__/backward-compatibility.test.js +135 -0
  16. package/dist/auth/__tests__/backward-compatibility.test.js.map +1 -0
  17. package/dist/auth/index.d.ts +22 -7
  18. package/dist/auth/index.d.ts.map +1 -1
  19. package/dist/auth/index.js +65 -32
  20. package/dist/auth/index.js.map +1 -1
  21. package/dist/auth/initializeProviders.d.ts +2 -0
  22. package/dist/auth/initializeProviders.d.ts.map +1 -0
  23. package/dist/auth/initializeProviders.js +23 -0
  24. package/dist/auth/initializeProviders.js.map +1 -0
  25. package/dist/auth/providers/Auth0Provider.d.ts +9 -0
  26. package/dist/auth/providers/Auth0Provider.d.ts.map +1 -0
  27. package/dist/auth/providers/Auth0Provider.js +42 -0
  28. package/dist/auth/providers/Auth0Provider.js.map +1 -0
  29. package/dist/auth/providers/CognitoProvider.d.ts +9 -0
  30. package/dist/auth/providers/CognitoProvider.d.ts.map +1 -0
  31. package/dist/auth/providers/CognitoProvider.js +46 -0
  32. package/dist/auth/providers/CognitoProvider.js.map +1 -0
  33. package/dist/auth/providers/GoogleProvider.d.ts +9 -0
  34. package/dist/auth/providers/GoogleProvider.d.ts.map +1 -0
  35. package/dist/auth/providers/GoogleProvider.js +41 -0
  36. package/dist/auth/providers/GoogleProvider.js.map +1 -0
  37. package/dist/auth/providers/MSALProvider.d.ts +9 -0
  38. package/dist/auth/providers/MSALProvider.d.ts.map +1 -0
  39. package/dist/auth/providers/MSALProvider.js +42 -0
  40. package/dist/auth/providers/MSALProvider.js.map +1 -0
  41. package/dist/auth/providers/OktaProvider.d.ts +9 -0
  42. package/dist/auth/providers/OktaProvider.d.ts.map +1 -0
  43. package/dist/auth/providers/OktaProvider.js +42 -0
  44. package/dist/auth/providers/OktaProvider.js.map +1 -0
  45. package/dist/config.d.ts +97 -21
  46. package/dist/config.d.ts.map +1 -1
  47. package/dist/config.js +13 -6
  48. package/dist/config.js.map +1 -1
  49. package/dist/context.d.ts.map +1 -1
  50. package/dist/context.js +25 -17
  51. package/dist/context.js.map +1 -1
  52. package/dist/generated/generated.d.ts +12 -0
  53. package/dist/generated/generated.d.ts.map +1 -1
  54. package/dist/generated/generated.js +61 -0
  55. package/dist/generated/generated.js.map +1 -1
  56. package/dist/generic/ResolverBase.d.ts +2 -2
  57. package/dist/generic/ResolverBase.d.ts.map +1 -1
  58. package/dist/generic/ResolverBase.js +5 -4
  59. package/dist/generic/ResolverBase.js.map +1 -1
  60. package/dist/generic/RunViewResolver.js.map +1 -1
  61. package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
  62. package/dist/resolvers/AskSkipResolver.js +3 -0
  63. package/dist/resolvers/AskSkipResolver.js.map +1 -1
  64. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  65. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  66. package/dist/types.d.ts +2 -2
  67. package/dist/types.d.ts.map +1 -1
  68. package/dist/types.js.map +1 -1
  69. package/package.json +39 -39
  70. package/src/auth/AuthProviderFactory.ts +152 -0
  71. package/src/auth/BaseAuthProvider.ts +71 -0
  72. package/src/auth/IAuthProvider.ts +49 -0
  73. package/src/auth/__tests__/backward-compatibility.test.ts +183 -0
  74. package/src/auth/index.ts +104 -36
  75. package/src/auth/initializeProviders.ts +31 -0
  76. package/src/auth/providers/Auth0Provider.ts +45 -0
  77. package/src/auth/providers/CognitoProvider.ts +50 -0
  78. package/src/auth/providers/GoogleProvider.ts +45 -0
  79. package/src/auth/providers/MSALProvider.ts +45 -0
  80. package/src/auth/providers/OktaProvider.ts +46 -0
  81. package/src/config.ts +14 -10
  82. package/src/context.ts +40 -17
  83. package/src/generated/generated.ts +37 -0
  84. package/src/generic/ResolverBase.ts +18 -13
  85. package/src/generic/RunViewResolver.ts +4 -4
  86. package/src/resolvers/AskSkipResolver.ts +3 -0
  87. package/src/resolvers/RunAIAgentResolver.ts +3 -3
  88. package/src/resolvers/RunAIPromptResolver.ts +2 -2
  89. package/src/types.ts +2 -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":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,OAAO,8BAA8B,CAAC;AACtC,OAAO,6BAA6B,CAAC;AACrC,OAAO,6BAA6B,CAAC;AACrC,OAAO,gCAAgC,CAAC;AACxC,OAAO,+BAA+B,CAAC;AAMvC,MAAM,OAAO,mBAAmB;IACtB,MAAM,CAAC,QAAQ,CAAsB;IACrC,SAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;IAClD,WAAW,GAA+B,IAAI,GAAG,EAAE,CAAC;IAE5D,gBAAuB,CAAC;IAKxB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;YAClC,mBAAmB,CAAC,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,mBAAmB,CAAC,QAAQ,CAAC;IACtC,CAAC;IAMD,MAAM,CAAC,cAAc,CAAC,MAA0B;QAC9C,IAAI,CAAC;YAIH,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAC5D,gBAAgB,EAChB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EACzB,MAAM,CACP,CAAC;YAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,sDAAsD,MAAM,CAAC,IAAI,MAAM,OAAO,EAAE,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IAKD,QAAQ,CAAC,QAAuB;QAC9B,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAG5C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAEzB,OAAO,CAAC,GAAG,CAAC,6BAA6B,QAAQ,CAAC,IAAI,iBAAiB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5F,CAAC;IAKD,WAAW,CAAC,MAAc;QAExB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAGD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;gBAEnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACvC,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAKD,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAKD,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAKD,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;IACjC,CAAC;IAKD,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAKD,MAAM,CAAC,0BAA0B;QAE/B,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QAE3F,MAAM,aAAa,GAAG,aAAa;aAChC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;aACnB,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC;QAErE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IAC5C,CAAC;IAKD,MAAM,CAAC,wBAAwB,CAAC,IAAY;QAC1C,IAAI,CAAC;YAEH,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1G,OAAO,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IAuthProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IAuthProvider.js","sourceRoot":"","sources":["../../src/auth/IAuthProvider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backward-compatibility.test.d.ts.map
@@ -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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"}
@@ -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 declare const validationOptions: {
6
- [x: string]: {
7
- audience: string;
8
- jwksUri: string;
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
@@ -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;AAI7D,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA2C3D,eAAO,MAAM,iBAAiB;;;;;CAS7B,CAAC;AAEF,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;CAEd;AAED,eAAO,MAAM,cAAc,WAAY,MAAM,cAAc,SAAS,MAAM,kBAAkB,SAsB3F,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"}
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"}
@@ -1,23 +1,19 @@
1
- import jwksClient from 'jwks-rsa';
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
- const missingAzureConfig = !tenantID || !webClientID;
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('Could not find authentication configuration for either MSAL or Auth0 in the server environment variables.');
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 validationOptions = {
38
- [issuers.auth0]: {
39
- audience: auth0WebClientID,
40
- jwksUri: `https://${auth0Domain}/.well-known/jwks.json`,
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
- [issuers.azure]: {
43
- audience: webClientID,
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
- if (!validationOptions[issuer]) {
66
- throw new Error(`No validation options found for issuer ${issuer}`);
77
+ const factory = AuthProviderFactory.getInstance();
78
+ if (!factory.hasProviders()) {
79
+ initializeAuthProviders();
67
80
  }
68
- const jwksUri = validationOptions[issuer].jwksUri;
69
- if (missingAuth0Config && missingAzureConfig) {
70
- throw new MissingAuthError();
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
- if (missingAuth0Config) {
73
- console.warn('Auth0 configuration not found in environment variables');
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
- if (missingAzureConfig) {
76
- console.warn('MSAL configuration not found in environment variables');
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
- jwksClient({ jwksUri })
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,MAAM,cAAc,GAAG,sCAAsC,CAAC;AAE9D,MAAM,gBAAiB,SAAQ,KAAK;IAClC;QACE,KAAK,CAAC,sGAAsG,CAAC,CAAC;QAC9G,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,KAAK,EAAE,UAA+B,EAAE,EAAE;IACjE,MAAM,SAAS,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,OAAO,GAAW,OAAO,GAAG,SAAS,CAAC;IAI5C,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,4BAA4B;QAChE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,4BAA4B,GAAG,KAAK;YAC5D,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,4BAA4B;YACtD,CAAC,CAAC,KAAK;QACT,CAAC,CAAC,CAAC,CAAC;IACN,IAAI,OAAO,GAAG,KAAK;QAAE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;IAE1F,MAAM,SAAS,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,MAAM,YAAY,GAAW,SAAS,GAAG,SAAS,CAAC;IAEnD,OAAO,CAAC,GAAG,CACT,2BAA2B,OAAO,6BAA6B,YAAY,yBAAyB,KAAK,sEAAsE,CAChL,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAc,EAAqD,EAAE;IACxG,MAAM,OAAO,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,iBAAiB,GAA0D,IAAI,KAAK,CAAC,EAAE,EAAE;IACpG,GAAG,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAC5B,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,GAAG,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAC5B,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IAClD,CAAC;IACD,OAAO,EAAE,GAAG,EAAE;QACZ,MAAM,OAAO,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,OAAO,WAAW;IACtB,GAAG,CAAU;IACb,GAAG,CAAU;IACb,GAAG,CAAU;IACb,GAAG,CAAU;IACb,GAAG,CAAU;IACb,IAAI,CAAU;IACd,GAAG,CAAU;IACb,KAAK,CAAU;IACf,GAAG,CAAU;IACb,kBAAkB,CAAU;IAC5B,EAAE,CAAU;IACZ,GAAG,CAAU;IACb,GAAG,CAAU;IACb,GAAG,CAAU;IACb,GAAG,CAAU;IACb,KAAK,CAAU;IACf,UAAU,CAAU;IACpB,WAAW,CAAU;CAEtB;AAKD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC,MAAiB,EAAE,EAAsB,EAAE,EAAE;IAC9F,MAAM,OAAO,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC;IAGlD,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QAC5B,uBAAuB,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEd,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,gBAAgB,EAAE,CAAC;QAC/B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,OAAmB,EAM5D,EAAE;IACF,MAAM,OAAO,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;QAEZ,MAAM,iBAAiB,GAAG,OAAO,CAAC,kBAAwC,CAAC;QAC3E,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,KAA2B,IAAI,iBAAiB;YAC/D,SAAS,EAAE,OAAO,CAAC,UAAgC;YACnD,QAAQ,EAAE,OAAO,CAAC,WAAiC;YACnD,QAAQ,EAAE,OAAO,CAAC,IAA0B;YAC5C,iBAAiB;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEd,MAAM,QAAQ,GAAG,OAAO,CAAC,IAA0B,CAAC;QACpD,MAAM,iBAAiB,GAAG,OAAO,CAAC,kBAAwC,CAAC;QAC3E,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,KAA2B,IAAI,iBAAiB;YAC/D,SAAS,EAAE,OAAO,CAAC,UAAgC,IAAI,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9E,QAAQ,EAAE,OAAO,CAAC,WAAiC,IAAI,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzG,QAAQ;YACR,iBAAiB;SAClB,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,UAA+B,EAAE,6BAAsC,IAAI,EAAqB,EAAE;IACpI,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7G,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,UAAU,IAAI,0BAA0B,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;YAE9F,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACnC,OAAO,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,cAAc,yBAAyB,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,KAAc,EACd,SAAkB,EAClB,QAAiB,EACjB,aAAsB,EACtB,UAA+B,EAC/B,6BAAsC,IAAI,EACX,EAAE;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,IAAI,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7C,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAGtC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;QACf,CAAC;;YAAM,OAAO,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IACE,UAAU,CAAC,YAAY,CAAC,kBAAkB;YAC1C,SAAS;YACT,QAAQ;YACR,CAAC,aAAa,IAAI,UAAU,CAAC,YAAY,CAAC,iCAAiC,KAAK,KAAK,CAAC,EACtF,CAAC;YAED,IAAI,iBAAiB,GACnB,UAAU,CAAC,YAAY,CAAC,iCAAiC;gBACzD,KAAK,CAAC;YACR,IAAI,CAAC,iBAAiB,IAAI,aAAa,EAAE,CAAC;gBAExC,iBAAiB,GAAG,UAAU,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;oBAEpF,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;oBAC9G,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzD,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,iBAAiB,EAAE,CAAC;gBAEtB,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,yDAAyD,CAAC,CAAC;gBACrF,MAAM,cAAc,GAAgB,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAc,WAAW,CAAC,CAAC;gBAC5G,MAAM,OAAO,GAAsB,MAAM,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAClG,IAAI,OAAO,EAAE,CAAC;oBAGZ,MAAM,EAAE,GAAa,IAAI,QAAQ,EAAE,CAAC;oBAEpC,MAAM,QAAQ,GAA2F,OAAO,CAAC,MAAM,EAAE,CAAC;oBAE1H,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;wBACrE,MAAM,QAAQ,GAAyB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;wBAC7E,MAAM,MAAM,GAAW,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAEnD,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;oBACjE,CAAC,CAAC,CAAC;oBAEH,IAAI,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBACjD,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpC,OAAO,CAAC,IAAI,CAAC,mBAAmB,KAAK,wBAAwB,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,QAAQ,KAAK,wCAAwC,aAAa,uNAAuN,CAC1R,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,YAAY,CAAC,uBAAuB,IAAI,UAAU,IAAI,0BAA0B,EAAE,CAAC;YAEzG,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,oEAAoE,CAAC,CAAC;YAEhG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAEnC,OAAO,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAGF,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function initializeAuthProviders(): void;
2
+ //# sourceMappingURL=initializeProviders.d.ts.map
@@ -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