@memberjunction/server 5.15.0 → 5.17.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 (91) hide show
  1. package/README.md +66 -3
  2. package/dist/auth/index.d.ts +0 -3
  3. package/dist/auth/index.d.ts.map +1 -1
  4. package/dist/auth/index.js +5 -7
  5. package/dist/auth/index.js.map +1 -1
  6. package/dist/auth/initializeProviders.js +2 -2
  7. package/dist/auth/initializeProviders.js.map +1 -1
  8. package/dist/config.d.ts +51 -0
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +7 -0
  11. package/dist/config.js.map +1 -1
  12. package/dist/context.d.ts.map +1 -1
  13. package/dist/context.js +3 -3
  14. package/dist/context.js.map +1 -1
  15. package/dist/generated/generated.d.ts +46 -46
  16. package/dist/generated/generated.d.ts.map +1 -1
  17. package/dist/generated/generated.js +332 -332
  18. package/dist/generated/generated.js.map +1 -1
  19. package/dist/index.d.ts +4 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +327 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/resolvers/DatasetResolver.d.ts +5 -0
  24. package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
  25. package/dist/resolvers/DatasetResolver.js +35 -0
  26. package/dist/resolvers/DatasetResolver.js.map +1 -1
  27. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +484 -0
  28. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  29. package/dist/resolvers/IntegrationDiscoveryResolver.js +3867 -328
  30. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  31. package/dist/resolvers/RSUResolver.d.ts +89 -0
  32. package/dist/resolvers/RSUResolver.d.ts.map +1 -0
  33. package/dist/resolvers/RSUResolver.js +424 -0
  34. package/dist/resolvers/RSUResolver.js.map +1 -0
  35. package/package.json +63 -60
  36. package/src/__tests__/unifiedAuth.test.ts +3 -2
  37. package/src/auth/__tests__/backward-compatibility.test.ts +2 -3
  38. package/src/auth/index.ts +5 -8
  39. package/src/auth/initializeProviders.ts +2 -2
  40. package/src/config.ts +9 -0
  41. package/src/context.ts +3 -3
  42. package/src/generated/generated.ts +269 -269
  43. package/src/index.ts +371 -4
  44. package/src/resolvers/DatasetResolver.ts +36 -0
  45. package/src/resolvers/IntegrationDiscoveryResolver.ts +2970 -39
  46. package/src/resolvers/RSUResolver.ts +351 -0
  47. package/dist/auth/AuthProviderFactory.d.ts +0 -68
  48. package/dist/auth/AuthProviderFactory.d.ts.map +0 -1
  49. package/dist/auth/AuthProviderFactory.js +0 -155
  50. package/dist/auth/AuthProviderFactory.js.map +0 -1
  51. package/dist/auth/BaseAuthProvider.d.ts +0 -41
  52. package/dist/auth/BaseAuthProvider.d.ts.map +0 -1
  53. package/dist/auth/BaseAuthProvider.js +0 -102
  54. package/dist/auth/BaseAuthProvider.js.map +0 -1
  55. package/dist/auth/IAuthProvider.d.ts +0 -46
  56. package/dist/auth/IAuthProvider.d.ts.map +0 -1
  57. package/dist/auth/IAuthProvider.js +0 -2
  58. package/dist/auth/IAuthProvider.js.map +0 -1
  59. package/dist/auth/providers/Auth0Provider.d.ts +0 -18
  60. package/dist/auth/providers/Auth0Provider.d.ts.map +0 -1
  61. package/dist/auth/providers/Auth0Provider.js +0 -52
  62. package/dist/auth/providers/Auth0Provider.js.map +0 -1
  63. package/dist/auth/providers/CognitoProvider.d.ts +0 -18
  64. package/dist/auth/providers/CognitoProvider.d.ts.map +0 -1
  65. package/dist/auth/providers/CognitoProvider.js +0 -56
  66. package/dist/auth/providers/CognitoProvider.js.map +0 -1
  67. package/dist/auth/providers/GoogleProvider.d.ts +0 -18
  68. package/dist/auth/providers/GoogleProvider.d.ts.map +0 -1
  69. package/dist/auth/providers/GoogleProvider.js +0 -51
  70. package/dist/auth/providers/GoogleProvider.js.map +0 -1
  71. package/dist/auth/providers/MSALProvider.d.ts +0 -18
  72. package/dist/auth/providers/MSALProvider.d.ts.map +0 -1
  73. package/dist/auth/providers/MSALProvider.js +0 -52
  74. package/dist/auth/providers/MSALProvider.js.map +0 -1
  75. package/dist/auth/providers/OktaProvider.d.ts +0 -18
  76. package/dist/auth/providers/OktaProvider.d.ts.map +0 -1
  77. package/dist/auth/providers/OktaProvider.js +0 -52
  78. package/dist/auth/providers/OktaProvider.js.map +0 -1
  79. package/dist/auth/tokenExpiredError.d.ts +0 -5
  80. package/dist/auth/tokenExpiredError.d.ts.map +0 -1
  81. package/dist/auth/tokenExpiredError.js +0 -12
  82. package/dist/auth/tokenExpiredError.js.map +0 -1
  83. package/src/auth/AuthProviderFactory.ts +0 -182
  84. package/src/auth/BaseAuthProvider.ts +0 -137
  85. package/src/auth/IAuthProvider.ts +0 -54
  86. package/src/auth/providers/Auth0Provider.ts +0 -45
  87. package/src/auth/providers/CognitoProvider.ts +0 -50
  88. package/src/auth/providers/GoogleProvider.ts +0 -45
  89. package/src/auth/providers/MSALProvider.ts +0 -45
  90. package/src/auth/providers/OktaProvider.ts +0 -46
  91. package/src/auth/tokenExpiredError.ts +0 -12
package/src/auth/index.ts CHANGED
@@ -6,12 +6,9 @@ import { Metadata, RoleInfo, UserInfo } from '@memberjunction/core';
6
6
  import { NewUserBase } from './newUsers.js';
7
7
  import { MJGlobal } from '@memberjunction/global';
8
8
  import { MJUserEntity, MJUserEntityType } from '@memberjunction/core-entities';
9
- import { AuthProviderFactory } from './AuthProviderFactory.js';
9
+ import { AuthProviderFactory } from '@memberjunction/auth-providers';
10
10
  import { initializeAuthProviders } from './initializeProviders.js';
11
11
 
12
- export { TokenExpiredError } from './tokenExpiredError.js';
13
- export { IAuthProvider } from './IAuthProvider.js';
14
- export { AuthProviderFactory } from './AuthProviderFactory.js';
15
12
  export * from './APIKeyScopeAuth.js';
16
13
 
17
14
  // This is a hard-coded forever constant due to internal migrations
@@ -53,7 +50,7 @@ const refreshUserCache = async (dataSource?: sql.ConnectionPool) => {
53
50
  * are aggregated into an array. jwt.verify() natively accepts string | string[].
54
51
  */
55
52
  export const getValidationOptions = (issuer: string): { audience: string | string[]; jwksUri: string } | undefined => {
56
- const factory = AuthProviderFactory.getInstance();
53
+ const factory = AuthProviderFactory.Instance;
57
54
  const providers = factory.getAllByIssuer(issuer);
58
55
 
59
56
  if (providers.length === 0) {
@@ -81,7 +78,7 @@ export const validationOptions: Record<string, { audience: string | string[]; jw
81
78
  return getValidationOptions(prop) !== undefined;
82
79
  },
83
80
  ownKeys: () => {
84
- const factory = AuthProviderFactory.getInstance();
81
+ const factory = AuthProviderFactory.Instance;
85
82
  return factory.getAllProviders().map(p => p.issuer);
86
83
  }
87
84
  });
@@ -112,7 +109,7 @@ export class UserPayload {
112
109
  * Gets signing keys for JWT validation
113
110
  */
114
111
  export const getSigningKeys = (issuer: string) => (header: JwtHeader, cb: SigningKeyCallback) => {
115
- const factory = AuthProviderFactory.getInstance();
112
+ const factory = AuthProviderFactory.Instance;
116
113
 
117
114
  // Initialize providers if not already done
118
115
  if (!factory.hasProviders()) {
@@ -142,7 +139,7 @@ export const extractUserInfoFromPayload = (payload: JwtPayload): {
142
139
  fullName?: string;
143
140
  preferredUsername?: string;
144
141
  } => {
145
- const factory = AuthProviderFactory.getInstance();
142
+ const factory = AuthProviderFactory.Instance;
146
143
  const issuer = payload.iss;
147
144
 
148
145
  if (!issuer) {
@@ -1,12 +1,12 @@
1
1
  import { configInfo } from '../config.js';
2
2
  import { AuthProviderConfig, LogError, LogStatus } from '@memberjunction/core';
3
- import { AuthProviderFactory } from './AuthProviderFactory.js';
3
+ import { AuthProviderFactory } from '@memberjunction/auth-providers';
4
4
 
5
5
  /**
6
6
  * Initialize authentication providers from configuration
7
7
  */
8
8
  export function initializeAuthProviders(): void {
9
- const factory = AuthProviderFactory.getInstance();
9
+ const factory = AuthProviderFactory.Instance;
10
10
 
11
11
  // Clear any existing providers
12
12
  factory.clear();
package/src/config.ts CHANGED
@@ -185,6 +185,13 @@ const telemetrySchema = z.object({
185
185
  level: z.enum(['minimal', 'standard', 'verbose', 'debug']).optional().default('standard'),
186
186
  });
187
187
 
188
+ const serverExtensionSchema = z.object({
189
+ Enabled: z.boolean().default(true),
190
+ DriverClass: z.string(),
191
+ RootPath: z.string(),
192
+ Settings: z.record(z.unknown()).default({})
193
+ }).passthrough();
194
+
188
195
  const configInfoSchema = z.object({
189
196
  userHandling: userHandlingInfoSchema,
190
197
  databaseSettings: databaseSettingsInfoSchema,
@@ -198,6 +205,7 @@ const configInfoSchema = z.object({
198
205
  telemetry: telemetrySchema.optional().default({}),
199
206
  queryDialects: queryDialectSchema.optional().default({}),
200
207
  multiTenancy: multiTenancySchema.optional().default({}),
208
+ serverExtensions: z.array(serverExtensionSchema).optional().default([]),
201
209
 
202
210
  apiKey: z.string().optional(),
203
211
  baseUrl: z.string().default('http://localhost'),
@@ -243,6 +251,7 @@ export type ScheduledJobsConfig = z.infer<typeof scheduledJobsSchema>;
243
251
  export type TelemetryConfig = z.infer<typeof telemetrySchema>;
244
252
  export type QueryDialectConfig = z.infer<typeof queryDialectSchema>;
245
253
  export type MultiTenancyConfig = z.infer<typeof multiTenancySchema>;
254
+ export type ServerExtensionConfig = z.infer<typeof serverExtensionSchema>;
246
255
  export type ConfigInfo = z.infer<typeof configInfoSchema>;
247
256
 
248
257
  /**
package/src/context.ts CHANGED
@@ -5,7 +5,8 @@ import 'reflect-metadata';
5
5
  import { Subject, firstValueFrom } from 'rxjs';
6
6
  import { AuthenticationError, AuthorizationError } from 'type-graphql';
7
7
  import sql from 'mssql';
8
- import { getSigningKeys, getSystemUser, getValidationOptions, verifyUserRecord, extractUserInfoFromPayload, TokenExpiredError } from './auth/index.js';
8
+ import { getSigningKeys, getSystemUser, getValidationOptions, verifyUserRecord, extractUserInfoFromPayload } from './auth/index.js';
9
+ import { TokenExpiredError, AuthProviderFactory } from '@memberjunction/auth-providers';
9
10
  import { authCache } from './cache.js';
10
11
  import { userEmailMap, apiKey, mj_core_schema } from './config.js';
11
12
  import { DataSourceInfo, UserPayload } from './types.js';
@@ -15,7 +16,6 @@ import e from 'express';
15
16
  import type { RequestHandler, Request, Response, NextFunction } from 'express';
16
17
  import { DatabaseProviderBase } from '@memberjunction/core';
17
18
  import { SQLServerDataProvider, SQLServerProviderConfigData, UserCache } from '@memberjunction/sqlserver-dataprovider';
18
- import { AuthProviderFactory } from './auth/AuthProviderFactory.js';
19
19
  import { Metadata } from '@memberjunction/core';
20
20
  import { UUIDsEqual } from '@memberjunction/global';
21
21
  import { GetAPIKeyEngine } from '@memberjunction/api-keys';
@@ -167,7 +167,7 @@ export const getUserPayload = async (
167
167
  }
168
168
 
169
169
  // Verify issuer is supported
170
- const factory = AuthProviderFactory.getInstance();
170
+ const factory = AuthProviderFactory.Instance;
171
171
  if (!factory.getByIssuer(issuer)) {
172
172
  console.warn(`Unsupported issuer: ${issuer}`);
173
173
  throw new AuthenticationError(`Unsupported authentication provider: ${issuer}`);