@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.
- package/README.md +66 -3
- package/dist/auth/index.d.ts +0 -3
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +5 -7
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.js +2 -2
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +3 -3
- package/dist/context.js.map +1 -1
- package/dist/generated/generated.d.ts +46 -46
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +332 -332
- package/dist/generated/generated.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +327 -2
- package/dist/index.js.map +1 -1
- package/dist/resolvers/DatasetResolver.d.ts +5 -0
- package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
- package/dist/resolvers/DatasetResolver.js +35 -0
- package/dist/resolvers/DatasetResolver.js.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +484 -0
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +3867 -328
- package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
- package/dist/resolvers/RSUResolver.d.ts +89 -0
- package/dist/resolvers/RSUResolver.d.ts.map +1 -0
- package/dist/resolvers/RSUResolver.js +424 -0
- package/dist/resolvers/RSUResolver.js.map +1 -0
- package/package.json +63 -60
- package/src/__tests__/unifiedAuth.test.ts +3 -2
- package/src/auth/__tests__/backward-compatibility.test.ts +2 -3
- package/src/auth/index.ts +5 -8
- package/src/auth/initializeProviders.ts +2 -2
- package/src/config.ts +9 -0
- package/src/context.ts +3 -3
- package/src/generated/generated.ts +269 -269
- package/src/index.ts +371 -4
- package/src/resolvers/DatasetResolver.ts +36 -0
- package/src/resolvers/IntegrationDiscoveryResolver.ts +2970 -39
- package/src/resolvers/RSUResolver.ts +351 -0
- package/dist/auth/AuthProviderFactory.d.ts +0 -68
- package/dist/auth/AuthProviderFactory.d.ts.map +0 -1
- package/dist/auth/AuthProviderFactory.js +0 -155
- package/dist/auth/AuthProviderFactory.js.map +0 -1
- package/dist/auth/BaseAuthProvider.d.ts +0 -41
- package/dist/auth/BaseAuthProvider.d.ts.map +0 -1
- package/dist/auth/BaseAuthProvider.js +0 -102
- package/dist/auth/BaseAuthProvider.js.map +0 -1
- package/dist/auth/IAuthProvider.d.ts +0 -46
- package/dist/auth/IAuthProvider.d.ts.map +0 -1
- package/dist/auth/IAuthProvider.js +0 -2
- package/dist/auth/IAuthProvider.js.map +0 -1
- package/dist/auth/providers/Auth0Provider.d.ts +0 -18
- package/dist/auth/providers/Auth0Provider.d.ts.map +0 -1
- package/dist/auth/providers/Auth0Provider.js +0 -52
- package/dist/auth/providers/Auth0Provider.js.map +0 -1
- package/dist/auth/providers/CognitoProvider.d.ts +0 -18
- package/dist/auth/providers/CognitoProvider.d.ts.map +0 -1
- package/dist/auth/providers/CognitoProvider.js +0 -56
- package/dist/auth/providers/CognitoProvider.js.map +0 -1
- package/dist/auth/providers/GoogleProvider.d.ts +0 -18
- package/dist/auth/providers/GoogleProvider.d.ts.map +0 -1
- package/dist/auth/providers/GoogleProvider.js +0 -51
- package/dist/auth/providers/GoogleProvider.js.map +0 -1
- package/dist/auth/providers/MSALProvider.d.ts +0 -18
- package/dist/auth/providers/MSALProvider.d.ts.map +0 -1
- package/dist/auth/providers/MSALProvider.js +0 -52
- package/dist/auth/providers/MSALProvider.js.map +0 -1
- package/dist/auth/providers/OktaProvider.d.ts +0 -18
- package/dist/auth/providers/OktaProvider.d.ts.map +0 -1
- package/dist/auth/providers/OktaProvider.js +0 -52
- package/dist/auth/providers/OktaProvider.js.map +0 -1
- package/dist/auth/tokenExpiredError.d.ts +0 -5
- package/dist/auth/tokenExpiredError.d.ts.map +0 -1
- package/dist/auth/tokenExpiredError.js +0 -12
- package/dist/auth/tokenExpiredError.js.map +0 -1
- package/src/auth/AuthProviderFactory.ts +0 -182
- package/src/auth/BaseAuthProvider.ts +0 -137
- package/src/auth/IAuthProvider.ts +0 -54
- package/src/auth/providers/Auth0Provider.ts +0 -45
- package/src/auth/providers/CognitoProvider.ts +0 -50
- package/src/auth/providers/GoogleProvider.ts +0 -45
- package/src/auth/providers/MSALProvider.ts +0 -45
- package/src/auth/providers/OktaProvider.ts +0 -46
- 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 '
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 '
|
|
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.
|
|
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
|
|
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.
|
|
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}`);
|