@memberjunction/server 2.18.1 → 2.18.2
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/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +31 -15
- package/dist/auth/index.js.map +1 -1
- package/dist/config.d.ts +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +18 -4
- package/dist/context.js.map +1 -1
- package/dist/directives/RequireSystemUser.d.ts +4 -0
- package/dist/directives/RequireSystemUser.d.ts.map +1 -0
- package/dist/directives/RequireSystemUser.js +28 -0
- package/dist/directives/RequireSystemUser.js.map +1 -0
- package/dist/directives/index.d.ts +1 -0
- package/dist/directives/index.d.ts.map +1 -1
- package/dist/directives/index.js +1 -0
- package/dist/directives/index.js.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/resolvers/InfoResolver.d.ts +7 -3
- package/dist/resolvers/InfoResolver.d.ts.map +1 -1
- package/dist/resolvers/InfoResolver.js +49 -8
- package/dist/resolvers/InfoResolver.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +22 -22
- package/src/auth/index.ts +46 -24
- package/src/config.ts +3 -0
- package/src/context.ts +23 -4
- package/src/directives/RequireSystemUser.ts +32 -0
- package/src/directives/index.ts +1 -0
- package/src/index.ts +14 -14
- package/src/resolvers/InfoResolver.ts +33 -6
- package/src/types.ts +4 -2
package/dist/auth/index.d.ts
CHANGED
|
@@ -26,5 +26,6 @@ export declare class UserPayload {
|
|
|
26
26
|
ver?: string;
|
|
27
27
|
}
|
|
28
28
|
export declare const getSigningKeys: (issuer: string) => (header: JwtHeader, cb: SigningKeyCallback) => void;
|
|
29
|
+
export declare const getSystemUser: (dataSource?: DataSource, attemptCacheUpdateIfNeeded?: boolean) => Promise<UserInfo>;
|
|
29
30
|
export declare const verifyUserRecord: (email?: string, firstName?: string, lastName?: string, requestDomain?: string, dataSource?: DataSource, attemptCacheUpdateIfNeeded?: boolean) => Promise<UserInfo | undefined>;
|
|
30
31
|
//# 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;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
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,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,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,UAAU,+BAA8B,OAAO,KAAU,QAAQ,QAAQ,CAYzH,CAAC;AAEF,eAAO,MAAM,gBAAgB,WACnB,MAAM,cACF,MAAM,aACP,MAAM,kBACD,MAAM,eACT,UAAU,+BACK,OAAO,KAClC,QAAQ,QAAQ,GAAG,SAAS,CAyE9B,CAAC"}
|
package/dist/auth/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import { MJGlobal } from '@memberjunction/global';
|
|
|
7
7
|
export { TokenExpiredError } from './tokenExpiredError.js';
|
|
8
8
|
const missingAzureConfig = !tenantID || !webClientID;
|
|
9
9
|
const missingAuth0Config = !auth0Domain || !auth0WebClientID;
|
|
10
|
+
const SYSTEM_USER_ID = 'ecafccec-6a37-ef11-86d4-000d3a4e707e';
|
|
10
11
|
class MissingAuthError extends Error {
|
|
11
12
|
constructor() {
|
|
12
13
|
super('Could not find authentication configuration for either MSAL or Auth0 in the server environment variables.');
|
|
@@ -17,6 +18,22 @@ const issuers = {
|
|
|
17
18
|
azure: `https://login.microsoftonline.com/${tenantID}/v2.0`,
|
|
18
19
|
auth0: `https://${auth0Domain}/`,
|
|
19
20
|
};
|
|
21
|
+
const refreshUserCache = async (dataSource) => {
|
|
22
|
+
const startTime = Date.now();
|
|
23
|
+
await UserCache.Instance.Refresh(dataSource);
|
|
24
|
+
const endTime = Date.now();
|
|
25
|
+
const elapsed = endTime - startTime;
|
|
26
|
+
const delay = configInfo.userHandling.updateCacheWhenNotFoundDelay
|
|
27
|
+
? configInfo.userHandling.updateCacheWhenNotFoundDelay < 30000
|
|
28
|
+
? configInfo.userHandling.updateCacheWhenNotFoundDelay
|
|
29
|
+
: 30000
|
|
30
|
+
: 0;
|
|
31
|
+
if (elapsed < delay)
|
|
32
|
+
await new Promise((resolve) => setTimeout(resolve, delay - elapsed));
|
|
33
|
+
const finalTime = Date.now();
|
|
34
|
+
const finalElapsed = finalTime - startTime;
|
|
35
|
+
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
|
+
};
|
|
20
37
|
export const validationOptions = {
|
|
21
38
|
[issuers.auth0]: {
|
|
22
39
|
audience: auth0WebClientID,
|
|
@@ -65,6 +82,18 @@ export const getSigningKeys = (issuer) => (header, cb) => {
|
|
|
65
82
|
})
|
|
66
83
|
.catch((err) => console.error(err));
|
|
67
84
|
};
|
|
85
|
+
export const getSystemUser = async (dataSource, attemptCacheUpdateIfNeeded = true) => {
|
|
86
|
+
const systemUser = UserCache.Instance.Users.find((u) => u.ID.toLowerCase() === SYSTEM_USER_ID.toLowerCase());
|
|
87
|
+
if (!systemUser) {
|
|
88
|
+
if (dataSource && attemptCacheUpdateIfNeeded) {
|
|
89
|
+
console.warn(`System user not found in cache. Updating cache in attempt to find the user...`);
|
|
90
|
+
await refreshUserCache(dataSource);
|
|
91
|
+
return getSystemUser(dataSource, false);
|
|
92
|
+
}
|
|
93
|
+
throw new Error(`System user ID '${SYSTEM_USER_ID}' not found in database`);
|
|
94
|
+
}
|
|
95
|
+
return systemUser;
|
|
96
|
+
};
|
|
68
97
|
export const verifyUserRecord = async (email, firstName, lastName, requestDomain, dataSource, attemptCacheUpdateIfNeeded = true) => {
|
|
69
98
|
if (!email)
|
|
70
99
|
return undefined;
|
|
@@ -98,7 +127,7 @@ export const verifyUserRecord = async (email, firstName, lastName, requestDomain
|
|
|
98
127
|
const initData = newUser.GetAll();
|
|
99
128
|
initData.UserRoles = configInfo.userHandling.newUserRoles.map((role) => {
|
|
100
129
|
const roleInfo = md.Roles.find((r) => r.Name === role);
|
|
101
|
-
const roleID = roleInfo ? roleInfo.ID :
|
|
130
|
+
const roleID = roleInfo ? roleInfo.ID : '';
|
|
102
131
|
return { UserID: initData.ID, RoleName: role, RoleID: roleID };
|
|
103
132
|
});
|
|
104
133
|
user = new UserInfo(Metadata.Provider, initData);
|
|
@@ -112,20 +141,7 @@ export const verifyUserRecord = async (email, firstName, lastName, requestDomain
|
|
|
112
141
|
}
|
|
113
142
|
if (!user && configInfo.userHandling.updateCacheWhenNotFound && dataSource && attemptCacheUpdateIfNeeded) {
|
|
114
143
|
console.warn(`User ${email} not found in cache. Updating cache in attempt to find the user...`);
|
|
115
|
-
|
|
116
|
-
await UserCache.Instance.Refresh(dataSource);
|
|
117
|
-
const endTime = Date.now();
|
|
118
|
-
const elapsed = endTime - startTime;
|
|
119
|
-
const delay = configInfo.userHandling.updateCacheWhenNotFoundDelay
|
|
120
|
-
? configInfo.userHandling.updateCacheWhenNotFoundDelay < 30000
|
|
121
|
-
? configInfo.userHandling.updateCacheWhenNotFoundDelay
|
|
122
|
-
: 30000
|
|
123
|
-
: 0;
|
|
124
|
-
if (elapsed < delay)
|
|
125
|
-
await new Promise((resolve) => setTimeout(resolve, delay - elapsed));
|
|
126
|
-
const finalTime = Date.now();
|
|
127
|
-
const finalElapsed = finalTime - startTime;
|
|
128
|
-
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 to verifyUserRecord()`);
|
|
144
|
+
await refreshUserCache(dataSource);
|
|
129
145
|
return verifyUserRecord(email, firstName, lastName, requestDomain, dataSource, false);
|
|
130
146
|
}
|
|
131
147
|
}
|
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,UAAU,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChG,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;AAGlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,kBAAkB,GAAG,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC;AACrD,MAAM,kBAAkB,GAAG,CAAC,WAAW,IAAI,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -127,6 +127,7 @@ declare const configInfoSchema: z.ZodObject<{
|
|
|
127
127
|
includeEntitiesFromExcludedSchemas?: string[];
|
|
128
128
|
};
|
|
129
129
|
}>>;
|
|
130
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
130
131
|
dbHost: z.ZodDefault<z.ZodString>;
|
|
131
132
|
dbDatabase: z.ZodString;
|
|
132
133
|
dbPort: z.ZodDefault<z.ZodNumber>;
|
|
@@ -177,6 +178,7 @@ declare const configInfoSchema: z.ZodObject<{
|
|
|
177
178
|
includeEntitiesFromExcludedSchemas?: string[];
|
|
178
179
|
};
|
|
179
180
|
};
|
|
181
|
+
apiKey?: string;
|
|
180
182
|
dbHost?: string;
|
|
181
183
|
dbDatabase?: string;
|
|
182
184
|
dbPort?: number;
|
|
@@ -227,6 +229,7 @@ declare const configInfoSchema: z.ZodObject<{
|
|
|
227
229
|
includeEntitiesFromExcludedSchemas?: string[];
|
|
228
230
|
};
|
|
229
231
|
};
|
|
232
|
+
apiKey?: string;
|
|
230
233
|
dbHost?: string;
|
|
231
234
|
dbDatabase?: string;
|
|
232
235
|
dbPort?: number;
|
|
@@ -256,7 +259,7 @@ export type DatabaseSettingsInfo = z.infer<typeof databaseSettingsInfoSchema>;
|
|
|
256
259
|
export type ViewingSystemSettingsInfo = z.infer<typeof viewingSystemInfoSchema>;
|
|
257
260
|
export type ConfigInfo = z.infer<typeof configInfoSchema>;
|
|
258
261
|
export declare const configInfo: ConfigInfo;
|
|
259
|
-
export declare const dbUsername: string, dbPassword: string, dbHost: string, dbDatabase: string, dbPort: number, dbTrustServerCertificate: "Y" | "N", dbInstanceName: string, graphqlPort: number, ___codeGenAPIURL: string, ___codeGenAPIPort: number, ___codeGenAPISubmissionDelay: number, graphqlRootPath: string, webClientID: string, tenantID: string, enableIntrospection: boolean, websiteRunFromPackage: number, userEmailMap: Record<string, string>, ___skipAPIurl: string, ___skipAPIOrgId: string, auth0Domain: string, auth0WebClientID: string, auth0ClientSecret: string, mj_core_schema: string;
|
|
262
|
+
export declare const dbUsername: string, dbPassword: string, dbHost: string, dbDatabase: string, dbPort: number, dbTrustServerCertificate: "Y" | "N", dbInstanceName: string, graphqlPort: number, ___codeGenAPIURL: string, ___codeGenAPIPort: number, ___codeGenAPISubmissionDelay: number, graphqlRootPath: string, webClientID: string, tenantID: string, enableIntrospection: boolean, websiteRunFromPackage: number, userEmailMap: Record<string, string>, ___skipAPIurl: string, ___skipAPIOrgId: string, auth0Domain: string, auth0WebClientID: string, auth0ClientSecret: string, apiKey: string, mj_core_schema: string;
|
|
260
263
|
export declare function loadConfig(): {
|
|
261
264
|
userHandling?: {
|
|
262
265
|
autoCreateNewUsers?: boolean;
|
|
@@ -284,6 +287,7 @@ export declare function loadConfig(): {
|
|
|
284
287
|
includeEntitiesFromExcludedSchemas?: string[];
|
|
285
288
|
};
|
|
286
289
|
};
|
|
290
|
+
apiKey?: string;
|
|
287
291
|
dbHost?: string;
|
|
288
292
|
dbDatabase?: string;
|
|
289
293
|
dbPort?: number;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU1B,CAAC;AAEH,QAAA,MAAM,0BAA0B;;;;;;;;;;;;EAI9B,CAAC;AAEH,QAAA,MAAM,uBAAuB;;;;;;EAE3B,CAAC;AAYH,QAAA,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU1B,CAAC;AAEH,QAAA,MAAM,0BAA0B;;;;;;;;;;;;EAI9B,CAAC;AAEH,QAAA,MAAM,uBAAuB;;;;;;EAE3B,CAAC;AAYH,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCpB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAChF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,UAAU,EAAE,UAAyB,CAAC;AAEnD,eAAO,MACL,UAAU,UACV,UAAU,UACV,MAAM,UACN,UAAU,UACV,MAAM,UACN,wBAAwB,aACxB,cAAc,UACd,WAAW,UACX,gBAAgB,UAChB,iBAAiB,UACjB,4BAA4B,UAC5B,eAAe,UACf,WAAW,UACX,QAAQ,UACR,mBAAmB,WACnB,qBAAqB,UACrB,YAAY,0BACZ,aAAa,UACb,eAAe,UACf,WAAW,UACX,gBAAgB,UAChB,iBAAiB,UACjB,MAAM,UACQ,cAAc,QAChB,CAAC;AAEf,wBAAgB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYzB"}
|
package/dist/config.js
CHANGED
|
@@ -35,6 +35,7 @@ const configInfoSchema = z.object({
|
|
|
35
35
|
databaseSettings: databaseSettingsInfoSchema,
|
|
36
36
|
viewingSystem: viewingSystemInfoSchema.optional(),
|
|
37
37
|
askSkip: askSkipInfoSchema.optional(),
|
|
38
|
+
apiKey: z.string().optional(),
|
|
38
39
|
dbHost: z.string().default('localhost'),
|
|
39
40
|
dbDatabase: z.string(),
|
|
40
41
|
dbPort: z.number({ coerce: true }).default(1433),
|
|
@@ -66,7 +67,7 @@ const configInfoSchema = z.object({
|
|
|
66
67
|
mjCoreSchema: z.string(),
|
|
67
68
|
});
|
|
68
69
|
export const configInfo = loadConfig();
|
|
69
|
-
export const { dbUsername, dbPassword, dbHost, dbDatabase, dbPort, dbTrustServerCertificate, dbInstanceName, graphqlPort, ___codeGenAPIURL, ___codeGenAPIPort, ___codeGenAPISubmissionDelay, graphqlRootPath, webClientID, tenantID, enableIntrospection, websiteRunFromPackage, userEmailMap, ___skipAPIurl, ___skipAPIOrgId, auth0Domain, auth0WebClientID, auth0ClientSecret, mjCoreSchema: mj_core_schema, } = configInfo;
|
|
70
|
+
export const { dbUsername, dbPassword, dbHost, dbDatabase, dbPort, dbTrustServerCertificate, dbInstanceName, graphqlPort, ___codeGenAPIURL, ___codeGenAPIPort, ___codeGenAPISubmissionDelay, graphqlRootPath, webClientID, tenantID, enableIntrospection, websiteRunFromPackage, userEmailMap, ___skipAPIurl, ___skipAPIOrgId, auth0Domain, auth0WebClientID, auth0ClientSecret, apiKey, mjCoreSchema: mj_core_schema, } = configInfo;
|
|
70
71
|
export function loadConfig() {
|
|
71
72
|
const configSearchResult = explorer.search(process.cwd());
|
|
72
73
|
if (configSearchResult.isEmpty) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import 'reflect-metadata';
|
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
5
|
import { DataSource } from 'typeorm';
|
|
6
6
|
import { UserPayload } from './types.js';
|
|
7
|
-
export declare const getUserPayload: (bearerToken: string, sessionId: string, dataSource: DataSource, requestDomain?: string) => Promise<UserPayload>;
|
|
7
|
+
export declare const getUserPayload: (bearerToken: string, sessionId: string, dataSource: DataSource, requestDomain?: string, requestApiKey?: string) => Promise<UserPayload>;
|
|
8
8
|
export declare const contextFunction: ({ setupComplete$, dataSource }: {
|
|
9
9
|
setupComplete$: Subject<unknown>;
|
|
10
10
|
dataSource: DataSource;
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAkB,MAAM,MAAM,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIrC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAkBzC,eAAO,MAAM,cAAc,gBACZ,MAAM,iCAEP,UAAU,kBACN,MAAM,KACrB,QAAQ,WAAW,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAkB,MAAM,MAAM,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIrC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAkBzC,eAAO,MAAM,cAAc,gBACZ,MAAM,iCAEP,UAAU,kBACN,MAAM,kBACN,MAAM,KACrB,QAAQ,WAAW,CAkErB,CAAC;AAEF,eAAO,MAAM,eAAe,mCACO;IAAE,cAAc,EAAE,QAAQ,OAAO,CAAC,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,eAC7E;IAAE,GAAG,EAAE,eAAe,CAAA;CAAE;;;EAyBvC,CAAC"}
|
package/dist/context.js
CHANGED
|
@@ -3,9 +3,9 @@ import { default as jwt } from 'jsonwebtoken';
|
|
|
3
3
|
import 'reflect-metadata';
|
|
4
4
|
import { firstValueFrom } from 'rxjs';
|
|
5
5
|
import { AuthenticationError, AuthorizationError } from 'type-graphql';
|
|
6
|
-
import { getSigningKeys, validationOptions, verifyUserRecord } from './auth/index.js';
|
|
6
|
+
import { getSigningKeys, getSystemUser, validationOptions, verifyUserRecord } from './auth/index.js';
|
|
7
7
|
import { authCache } from './cache.js';
|
|
8
|
-
import { userEmailMap } from './config.js';
|
|
8
|
+
import { userEmailMap, apiKey } from './config.js';
|
|
9
9
|
import { TokenExpiredError } from './auth/index.js';
|
|
10
10
|
const verifyAsync = async (issuer, options, token) => new Promise((resolve, reject) => {
|
|
11
11
|
jwt.verify(token, getSigningKeys(issuer), options, (err, jwt) => {
|
|
@@ -20,8 +20,21 @@ const verifyAsync = async (issuer, options, token) => new Promise((resolve, reje
|
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
22
|
});
|
|
23
|
-
export const getUserPayload = async (bearerToken, sessionId = 'default', dataSource, requestDomain) => {
|
|
23
|
+
export const getUserPayload = async (bearerToken, sessionId = 'default', dataSource, requestDomain, requestApiKey) => {
|
|
24
24
|
try {
|
|
25
|
+
if (requestApiKey && requestApiKey != String(undefined)) {
|
|
26
|
+
if (requestApiKey === apiKey) {
|
|
27
|
+
const systemUser = await getSystemUser(dataSource);
|
|
28
|
+
return {
|
|
29
|
+
userRecord: systemUser,
|
|
30
|
+
email: systemUser.Email,
|
|
31
|
+
sessionId,
|
|
32
|
+
isSystemUser: true,
|
|
33
|
+
apiKey,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
throw new AuthenticationError('Invalid API key provided');
|
|
37
|
+
}
|
|
25
38
|
const token = bearerToken.replace('Bearer ', '');
|
|
26
39
|
if (!token) {
|
|
27
40
|
console.warn('No token to validate');
|
|
@@ -74,7 +87,8 @@ export const contextFunction = ({ setupComplete$, dataSource }) => async ({ req
|
|
|
74
87
|
const requestDomain = url.parse(req.headers.origin || '');
|
|
75
88
|
const sessionId = sessionIdRaw ? sessionIdRaw.toString() : '';
|
|
76
89
|
const bearerToken = req.headers.authorization ?? '';
|
|
77
|
-
const
|
|
90
|
+
const apiKey = String(req.headers['x-mj-api-key']);
|
|
91
|
+
const userPayload = await getUserPayload(bearerToken, sessionId, dataSource, requestDomain?.hostname ? requestDomain.hostname : undefined, apiKey);
|
|
78
92
|
const operationName = req.body?.operationName;
|
|
79
93
|
if (operationName !== 'IntrospectionQuery') {
|
|
80
94
|
console.log({ operationName });
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAW,cAAc,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequireSystemUser.d.ts","sourceRoot":"","sources":["../../src/directives/RequireSystemUser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/C,wBAAgB,iBAAiB,IAAI,iBAAiB,GAAG,eAAe,GAAG,cAAc,CAAC;AAK1F,eAAO,MAAM,0BAA0B,EAAE,gBAoBxC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { MapperKind, getDirective, mapSchema } from '@graphql-tools/utils';
|
|
2
|
+
import { AuthorizationError, Directive } from 'type-graphql';
|
|
3
|
+
const DIRECTIVE_NAME = 'RequireSystemUser';
|
|
4
|
+
export function RequireSystemUser() {
|
|
5
|
+
return (targetOrPrototype, propertyKey, descriptor) => Directive(`@${DIRECTIVE_NAME}`)(targetOrPrototype, propertyKey, descriptor);
|
|
6
|
+
}
|
|
7
|
+
export const requireSystemUserDirective = {
|
|
8
|
+
typeDefs: `directive @${DIRECTIVE_NAME} on FIELD_DEFINITION`,
|
|
9
|
+
transformer: (schema) => {
|
|
10
|
+
const fieldMapper = (fieldConfig) => {
|
|
11
|
+
const directive = getDirective(schema, fieldConfig, DIRECTIVE_NAME)?.[0];
|
|
12
|
+
return {
|
|
13
|
+
...fieldConfig,
|
|
14
|
+
resolve: (source, args, context, info) => {
|
|
15
|
+
if (directive) {
|
|
16
|
+
console.debug('RequireSystemUser directive found');
|
|
17
|
+
if (!context.userPayload.isSystemUser) {
|
|
18
|
+
throw new AuthorizationError('Operation not permitted for this user');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return fieldConfig.resolve(source, args, context, info);
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
return mapSchema(schema, { [MapperKind.OBJECT_FIELD]: fieldMapper });
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=RequireSystemUser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequireSystemUser.js","sourceRoot":"","sources":["../../src/directives/RequireSystemUser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG7D,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAG3C,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AACrI,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAqB;IAC1D,QAAQ,EAAE,cAAc,cAAc,sBAAsB;IAC5D,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE;QACtB,MAAM,WAAW,GAAgB,CAAC,WAAW,EAAE,EAAE;YAC/C,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzE,OAAO;gBACL,GAAG,WAAW;gBACd,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;oBACvC,IAAI,SAAS,EAAE,CAAC;wBACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;wBACnD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;4BACtC,MAAM,IAAI,kBAAkB,CAAC,uCAAuC,CAAC,CAAC;wBACxE,CAAC;oBACH,CAAC;oBACD,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC1D,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;QACF,OAAO,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACvE,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/directives/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/directives/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC"}
|
package/dist/directives/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/directives/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/directives/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,7 @@ import { WebSocketServer } from 'ws';
|
|
|
20
20
|
import buildApolloServer from './apolloServer/index.js';
|
|
21
21
|
import { configInfo, graphqlPort, graphqlRootPath, mj_core_schema, websiteRunFromPackage } from './config.js';
|
|
22
22
|
import { contextFunction, getUserPayload } from './context.js';
|
|
23
|
-
import { publicDirective } from './directives/index.js';
|
|
23
|
+
import { requireSystemUserDirective, publicDirective } from './directives/index.js';
|
|
24
24
|
import orm from './orm.js';
|
|
25
25
|
import { LoadActionEntityServer } from '@memberjunction/actions';
|
|
26
26
|
LoadActionEntityServer();
|
|
@@ -85,7 +85,7 @@ export const serve = async (resolverPaths) => {
|
|
|
85
85
|
}
|
|
86
86
|
}));
|
|
87
87
|
const resolvers = dynamicModules.flatMap((module) => Object.values(module).filter((value) => typeof value === 'function'));
|
|
88
|
-
|
|
88
|
+
let schema = mergeSchemas({
|
|
89
89
|
schemas: [
|
|
90
90
|
buildSchemaSync({
|
|
91
91
|
resolvers,
|
|
@@ -94,8 +94,10 @@ export const serve = async (resolverPaths) => {
|
|
|
94
94
|
emitSchemaFile: websiteRunFromPackage !== 1,
|
|
95
95
|
}),
|
|
96
96
|
],
|
|
97
|
-
typeDefs: [publicDirective.typeDefs],
|
|
98
|
-
})
|
|
97
|
+
typeDefs: [requireSystemUserDirective.typeDefs, publicDirective.typeDefs],
|
|
98
|
+
});
|
|
99
|
+
schema = requireSystemUserDirective.transformer(schema);
|
|
100
|
+
schema = publicDirective.transformer(schema);
|
|
99
101
|
const app = express();
|
|
100
102
|
const httpServer = createServer(app);
|
|
101
103
|
const webSocketServer = new WebSocketServer({ server: httpServer, path: graphqlRootPath });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAa,MAAM,wCAAwC,CAAC;AACtH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAsB,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { AppContext } from '../types.js';
|
|
1
2
|
export declare class Info {
|
|
2
3
|
Version: string;
|
|
4
|
+
IsSystemUser: boolean;
|
|
5
|
+
Platform: string;
|
|
6
|
+
Arch: string;
|
|
7
|
+
CpuModel: string;
|
|
8
|
+
Hostname: string;
|
|
3
9
|
}
|
|
4
10
|
export declare class InfoResolver {
|
|
5
|
-
Info():
|
|
6
|
-
Version: string;
|
|
7
|
-
}>;
|
|
11
|
+
Info(context: AppContext): Info;
|
|
8
12
|
}
|
|
9
13
|
//# sourceMappingURL=InfoResolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InfoResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/InfoResolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InfoResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/InfoResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,qBACa,IAAI;IAGf,OAAO,EAAE,MAAM,CAAC;IAEhB,YAAY,EAAE,OAAO,CAAC;IAItB,QAAQ,EAAE,MAAM,CAAC;IAIjB,IAAI,EAAE,MAAM,CAAC;IAIb,QAAQ,EAAE,MAAM,CAAC;IAIjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBACa,YAAY;IAGvB,IAAI,CAAQ,OAAO,EAAE,UAAU,GAAG,IAAI;CAUvC"}
|
|
@@ -7,32 +7,73 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { Field, ObjectType, Query, Resolver, Ctx } from 'type-graphql';
|
|
14
|
+
import { Public, RequireSystemUser } from '../directives/index.js';
|
|
12
15
|
import packageJson from '../../package.json' assert { type: 'json' };
|
|
16
|
+
import os from 'node:os';
|
|
13
17
|
let Info = class Info {
|
|
14
18
|
Version;
|
|
19
|
+
IsSystemUser;
|
|
20
|
+
Platform;
|
|
21
|
+
Arch;
|
|
22
|
+
CpuModel;
|
|
23
|
+
Hostname;
|
|
15
24
|
};
|
|
16
25
|
__decorate([
|
|
17
|
-
Field(() => String),
|
|
18
26
|
Public(),
|
|
27
|
+
Field(),
|
|
19
28
|
__metadata("design:type", String)
|
|
20
29
|
], Info.prototype, "Version", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
Field(),
|
|
32
|
+
__metadata("design:type", Boolean)
|
|
33
|
+
], Info.prototype, "IsSystemUser", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
RequireSystemUser(),
|
|
36
|
+
Field(),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], Info.prototype, "Platform", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
RequireSystemUser(),
|
|
41
|
+
Field(),
|
|
42
|
+
__metadata("design:type", String)
|
|
43
|
+
], Info.prototype, "Arch", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
RequireSystemUser(),
|
|
46
|
+
Field(),
|
|
47
|
+
__metadata("design:type", String)
|
|
48
|
+
], Info.prototype, "CpuModel", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
RequireSystemUser(),
|
|
51
|
+
Field(),
|
|
52
|
+
__metadata("design:type", String)
|
|
53
|
+
], Info.prototype, "Hostname", void 0);
|
|
21
54
|
Info = __decorate([
|
|
22
55
|
ObjectType()
|
|
23
56
|
], Info);
|
|
24
57
|
export { Info };
|
|
25
58
|
let InfoResolver = class InfoResolver {
|
|
26
|
-
|
|
27
|
-
return {
|
|
59
|
+
Info(context) {
|
|
60
|
+
return {
|
|
61
|
+
Version: packageJson.version,
|
|
62
|
+
IsSystemUser: Boolean(context.userPayload.isSystemUser),
|
|
63
|
+
Platform: os.platform(),
|
|
64
|
+
Arch: os.platform(),
|
|
65
|
+
CpuModel: os.cpus()?.[0].model,
|
|
66
|
+
Hostname: os.hostname(),
|
|
67
|
+
};
|
|
28
68
|
}
|
|
29
69
|
};
|
|
30
70
|
__decorate([
|
|
31
|
-
Query(() => Info),
|
|
32
71
|
Public(),
|
|
72
|
+
Query(() => Info),
|
|
73
|
+
__param(0, Ctx()),
|
|
33
74
|
__metadata("design:type", Function),
|
|
34
|
-
__metadata("design:paramtypes", []),
|
|
35
|
-
__metadata("design:returntype",
|
|
75
|
+
__metadata("design:paramtypes", [Object]),
|
|
76
|
+
__metadata("design:returntype", Info)
|
|
36
77
|
], InfoResolver.prototype, "Info", null);
|
|
37
78
|
InfoResolver = __decorate([
|
|
38
79
|
Resolver(Info)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InfoResolver.js","sourceRoot":"","sources":["../../src/resolvers/InfoResolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InfoResolver.js","sourceRoot":"","sources":["../../src/resolvers/InfoResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAuB,MAAM,cAAc,CAAC;AACjG,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,WAAW,MAAM,oBAAoB,CAAC,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;AAErE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlB,IAAM,IAAI,GAAV,MAAM,IAAI;IAGf,OAAO,CAAS;IAEhB,YAAY,CAAU;IAItB,QAAQ,CAAS;IAIjB,IAAI,CAAS;IAIb,QAAQ,CAAS;IAIjB,QAAQ,CAAS;CAClB,CAAA;AAnBC;IAFC,MAAM,EAAE;IACR,KAAK,EAAE;;qCACQ;AAEhB;IADC,KAAK,EAAE;;0CACc;AAItB;IAFC,iBAAiB,EAAE;IACnB,KAAK,EAAE;;sCACS;AAIjB;IAFC,iBAAiB,EAAE;IACnB,KAAK,EAAE;;kCACK;AAIb;IAFC,iBAAiB,EAAE;IACnB,KAAK,EAAE;;sCACS;AAIjB;IAFC,iBAAiB,EAAE;IACnB,KAAK,EAAE;;sCACS;AArBN,IAAI;IADhB,UAAU,EAAE;GACA,IAAI,CAsBhB;;AAGM,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGvB,IAAI,CAAQ,OAAmB;QAC7B,OAAO;YACL,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC;YACvD,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;YACvB,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE;YACnB,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK;YAC9B,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;SACxB,CAAC;IACJ,CAAC;CACF,CAAA;AAVC;IAFC,MAAM,EAAE;IACR,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;IACZ,WAAA,GAAG,EAAE,CAAA;;;oCAAuB,IAAI;wCASrC;AAZU,YAAY;IADxB,QAAQ,CAAC,IAAI,CAAC;GACF,YAAY,CAaxB"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,GAAG,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,GAAG,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,aAAa,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/server",
|
|
3
|
-
"version": "2.18.
|
|
3
|
+
"version": "2.18.2",
|
|
4
4
|
"description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -22,27 +22,27 @@
|
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@apollo/server": "^4.9.1",
|
|
24
24
|
"@graphql-tools/utils": "^10.0.1",
|
|
25
|
-
"@memberjunction/actions": "2.18.
|
|
26
|
-
"@memberjunction/ai": "2.18.
|
|
27
|
-
"@memberjunction/ai-mistral": "2.18.
|
|
28
|
-
"@memberjunction/ai-openai": "2.18.
|
|
29
|
-
"@memberjunction/ai-vectors-pinecone": "2.18.
|
|
30
|
-
"@memberjunction/aiengine": "2.18.
|
|
31
|
-
"@memberjunction/core": "2.18.
|
|
32
|
-
"@memberjunction/core-actions": "2.18.
|
|
33
|
-
"@memberjunction/core-entities": "2.18.
|
|
34
|
-
"@memberjunction/data-context": "2.18.
|
|
35
|
-
"@memberjunction/data-context-server": "2.18.
|
|
36
|
-
"@memberjunction/doc-utils": "2.18.
|
|
37
|
-
"@memberjunction/entity-communications-server": "2.18.
|
|
38
|
-
"@memberjunction/external-change-detection": "2.18.
|
|
39
|
-
"@memberjunction/global": "2.18.
|
|
40
|
-
"@memberjunction/graphql-dataprovider": "2.18.
|
|
41
|
-
"@memberjunction/queue": "2.18.
|
|
42
|
-
"@memberjunction/skip-types": "2.18.
|
|
43
|
-
"@memberjunction/sqlserver-dataprovider": "2.18.
|
|
44
|
-
"@memberjunction/storage": "2.18.
|
|
45
|
-
"@memberjunction/templates": "2.18.
|
|
25
|
+
"@memberjunction/actions": "2.18.2",
|
|
26
|
+
"@memberjunction/ai": "2.18.2",
|
|
27
|
+
"@memberjunction/ai-mistral": "2.18.2",
|
|
28
|
+
"@memberjunction/ai-openai": "2.18.2",
|
|
29
|
+
"@memberjunction/ai-vectors-pinecone": "2.18.2",
|
|
30
|
+
"@memberjunction/aiengine": "2.18.2",
|
|
31
|
+
"@memberjunction/core": "2.18.2",
|
|
32
|
+
"@memberjunction/core-actions": "2.18.2",
|
|
33
|
+
"@memberjunction/core-entities": "2.18.2",
|
|
34
|
+
"@memberjunction/data-context": "2.18.2",
|
|
35
|
+
"@memberjunction/data-context-server": "2.18.2",
|
|
36
|
+
"@memberjunction/doc-utils": "2.18.2",
|
|
37
|
+
"@memberjunction/entity-communications-server": "2.18.2",
|
|
38
|
+
"@memberjunction/external-change-detection": "2.18.2",
|
|
39
|
+
"@memberjunction/global": "2.18.2",
|
|
40
|
+
"@memberjunction/graphql-dataprovider": "2.18.2",
|
|
41
|
+
"@memberjunction/queue": "2.18.2",
|
|
42
|
+
"@memberjunction/skip-types": "2.18.2",
|
|
43
|
+
"@memberjunction/sqlserver-dataprovider": "2.18.2",
|
|
44
|
+
"@memberjunction/storage": "2.18.2",
|
|
45
|
+
"@memberjunction/templates": "2.18.2",
|
|
46
46
|
"@types/cors": "^2.8.13",
|
|
47
47
|
"@types/jsonwebtoken": "9.0.6",
|
|
48
48
|
"@types/node": "20.14.2",
|
package/src/auth/index.ts
CHANGED
|
@@ -13,6 +13,9 @@ export { TokenExpiredError } from './tokenExpiredError.js';
|
|
|
13
13
|
const missingAzureConfig = !tenantID || !webClientID;
|
|
14
14
|
const missingAuth0Config = !auth0Domain || !auth0WebClientID;
|
|
15
15
|
|
|
16
|
+
// This is a hard-coded forever constant due to internal migrations
|
|
17
|
+
const SYSTEM_USER_ID = 'ecafccec-6a37-ef11-86d4-000d3a4e707e';
|
|
18
|
+
|
|
16
19
|
class MissingAuthError extends Error {
|
|
17
20
|
constructor() {
|
|
18
21
|
super('Could not find authentication configuration for either MSAL or Auth0 in the server environment variables.');
|
|
@@ -25,6 +28,29 @@ const issuers = {
|
|
|
25
28
|
auth0: `https://${auth0Domain}/`,
|
|
26
29
|
};
|
|
27
30
|
|
|
31
|
+
const refreshUserCache = async (dataSource?: DataSource) => {
|
|
32
|
+
const startTime: number = Date.now();
|
|
33
|
+
await UserCache.Instance.Refresh(dataSource);
|
|
34
|
+
const endTime: number = Date.now();
|
|
35
|
+
const elapsed: number = endTime - startTime;
|
|
36
|
+
|
|
37
|
+
// if elapsed time is less than the delay setting, wait for the additional time to achieve the full delay
|
|
38
|
+
// the below also makes sure we never go more than a 30 second total delay
|
|
39
|
+
const delay = configInfo.userHandling.updateCacheWhenNotFoundDelay
|
|
40
|
+
? configInfo.userHandling.updateCacheWhenNotFoundDelay < 30000
|
|
41
|
+
? configInfo.userHandling.updateCacheWhenNotFoundDelay
|
|
42
|
+
: 30000
|
|
43
|
+
: 0;
|
|
44
|
+
if (elapsed < delay) await new Promise((resolve) => setTimeout(resolve, delay - elapsed));
|
|
45
|
+
|
|
46
|
+
const finalTime: number = Date.now();
|
|
47
|
+
const finalElapsed: number = finalTime - startTime;
|
|
48
|
+
|
|
49
|
+
console.log(
|
|
50
|
+
` 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`
|
|
51
|
+
);
|
|
52
|
+
};
|
|
53
|
+
|
|
28
54
|
export const validationOptions = {
|
|
29
55
|
[issuers.auth0]: {
|
|
30
56
|
audience: auth0WebClientID,
|
|
@@ -79,6 +105,20 @@ export const getSigningKeys = (issuer: string) => (header: JwtHeader, cb: Signin
|
|
|
79
105
|
.catch((err) => console.error(err));
|
|
80
106
|
};
|
|
81
107
|
|
|
108
|
+
export const getSystemUser = async (dataSource?: DataSource, attemptCacheUpdateIfNeeded: boolean = true): Promise<UserInfo> => {
|
|
109
|
+
const systemUser = UserCache.Instance.Users.find((u) => u.ID.toLowerCase() === SYSTEM_USER_ID.toLowerCase());
|
|
110
|
+
if (!systemUser) {
|
|
111
|
+
if (dataSource && attemptCacheUpdateIfNeeded) {
|
|
112
|
+
console.warn(`System user not found in cache. Updating cache in attempt to find the user...`);
|
|
113
|
+
|
|
114
|
+
await refreshUserCache(dataSource);
|
|
115
|
+
return getSystemUser(dataSource, false); // try one more time but do not update cache next time if not found
|
|
116
|
+
}
|
|
117
|
+
throw new Error(`System user ID '${SYSTEM_USER_ID}' not found in database`);
|
|
118
|
+
}
|
|
119
|
+
return systemUser;
|
|
120
|
+
};
|
|
121
|
+
|
|
82
122
|
export const verifyUserRecord = async (
|
|
83
123
|
email?: string,
|
|
84
124
|
firstName?: string,
|
|
@@ -128,12 +168,12 @@ export const verifyUserRecord = async (
|
|
|
128
168
|
// to init it, including passing in the role list for the user.
|
|
129
169
|
const md: Metadata = new Metadata();
|
|
130
170
|
|
|
131
|
-
const initData: UserEntityType & {UserRoles: {UserID: string
|
|
132
|
-
|
|
171
|
+
const initData: UserEntityType & { UserRoles: { UserID: string; RoleName: string; RoleID: string }[] } = newUser.GetAll();
|
|
172
|
+
|
|
133
173
|
initData.UserRoles = configInfo.userHandling.newUserRoles.map((role) => {
|
|
134
174
|
const roleInfo: RoleInfo | undefined = md.Roles.find((r) => r.Name === role);
|
|
135
|
-
const roleID: string = roleInfo ? roleInfo.ID :
|
|
136
|
-
|
|
175
|
+
const roleID: string = roleInfo ? roleInfo.ID : '';
|
|
176
|
+
|
|
137
177
|
return { UserID: initData.ID, RoleName: role, RoleID: roleID };
|
|
138
178
|
});
|
|
139
179
|
|
|
@@ -152,26 +192,8 @@ export const verifyUserRecord = async (
|
|
|
152
192
|
// if we get here that means in the above, if we were attempting to create a new user, it did not work, or it wasn't attempted and we have a config that asks us to auto update the cache
|
|
153
193
|
console.warn(`User ${email} not found in cache. Updating cache in attempt to find the user...`);
|
|
154
194
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const endTime: number = Date.now();
|
|
158
|
-
const elapsed: number = endTime - startTime;
|
|
159
|
-
|
|
160
|
-
// if elapsed time is less than the delay setting, wait for the additional time to achieve the full delay
|
|
161
|
-
// the below also makes sure we never go more than a 30 second total delay
|
|
162
|
-
const delay = configInfo.userHandling.updateCacheWhenNotFoundDelay
|
|
163
|
-
? configInfo.userHandling.updateCacheWhenNotFoundDelay < 30000
|
|
164
|
-
? configInfo.userHandling.updateCacheWhenNotFoundDelay
|
|
165
|
-
: 30000
|
|
166
|
-
: 0;
|
|
167
|
-
if (elapsed < delay) await new Promise((resolve) => setTimeout(resolve, delay - elapsed));
|
|
168
|
-
|
|
169
|
-
const finalTime: number = Date.now();
|
|
170
|
-
const finalElapsed: number = finalTime - startTime;
|
|
171
|
-
|
|
172
|
-
console.log(
|
|
173
|
-
` 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 to verifyUserRecord()`
|
|
174
|
-
);
|
|
195
|
+
await refreshUserCache(dataSource);
|
|
196
|
+
|
|
175
197
|
return verifyUserRecord(email, firstName, lastName, requestDomain, dataSource, false); // try one more time but do not update cache next time if not found
|
|
176
198
|
}
|
|
177
199
|
}
|
package/src/config.ts
CHANGED
|
@@ -42,6 +42,8 @@ const configInfoSchema = z.object({
|
|
|
42
42
|
viewingSystem: viewingSystemInfoSchema.optional(),
|
|
43
43
|
askSkip: askSkipInfoSchema.optional(),
|
|
44
44
|
|
|
45
|
+
apiKey: z.string().optional(),
|
|
46
|
+
|
|
45
47
|
dbHost: z.string().default('localhost'),
|
|
46
48
|
dbDatabase: z.string(),
|
|
47
49
|
dbPort: z.number({ coerce: true }).default(1433),
|
|
@@ -104,6 +106,7 @@ export const {
|
|
|
104
106
|
auth0Domain,
|
|
105
107
|
auth0WebClientID,
|
|
106
108
|
auth0ClientSecret,
|
|
109
|
+
apiKey,
|
|
107
110
|
mjCoreSchema: mj_core_schema,
|
|
108
111
|
} = configInfo;
|
|
109
112
|
|
package/src/context.ts
CHANGED
|
@@ -5,9 +5,9 @@ import 'reflect-metadata';
|
|
|
5
5
|
import { Subject, firstValueFrom } from 'rxjs';
|
|
6
6
|
import { AuthenticationError, AuthorizationError } from 'type-graphql';
|
|
7
7
|
import { DataSource } from 'typeorm';
|
|
8
|
-
import { getSigningKeys, validationOptions, verifyUserRecord } from './auth/index.js';
|
|
8
|
+
import { getSigningKeys, getSystemUser, validationOptions, verifyUserRecord } from './auth/index.js';
|
|
9
9
|
import { authCache } from './cache.js';
|
|
10
|
-
import { userEmailMap } from './config.js';
|
|
10
|
+
import { userEmailMap, apiKey } from './config.js';
|
|
11
11
|
import { UserPayload } from './types.js';
|
|
12
12
|
import { TokenExpiredError } from './auth/index.js';
|
|
13
13
|
|
|
@@ -30,9 +30,25 @@ export const getUserPayload = async (
|
|
|
30
30
|
bearerToken: string,
|
|
31
31
|
sessionId = 'default',
|
|
32
32
|
dataSource: DataSource,
|
|
33
|
-
requestDomain?: string
|
|
33
|
+
requestDomain?: string,
|
|
34
|
+
requestApiKey?: string
|
|
34
35
|
): Promise<UserPayload> => {
|
|
35
36
|
try {
|
|
37
|
+
if (requestApiKey && requestApiKey != String(undefined)) {
|
|
38
|
+
// use requestApiKey for auth
|
|
39
|
+
if (requestApiKey === apiKey) {
|
|
40
|
+
const systemUser = await getSystemUser(dataSource);
|
|
41
|
+
return {
|
|
42
|
+
userRecord: systemUser,
|
|
43
|
+
email: systemUser.Email,
|
|
44
|
+
sessionId,
|
|
45
|
+
isSystemUser: true,
|
|
46
|
+
apiKey,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
throw new AuthenticationError('Invalid API key provided');
|
|
50
|
+
}
|
|
51
|
+
|
|
36
52
|
const token = bearerToken.replace('Bearer ', '');
|
|
37
53
|
|
|
38
54
|
if (!token) {
|
|
@@ -94,11 +110,14 @@ export const contextFunction =
|
|
|
94
110
|
const sessionId = sessionIdRaw ? sessionIdRaw.toString() : '';
|
|
95
111
|
const bearerToken = req.headers.authorization ?? '';
|
|
96
112
|
|
|
113
|
+
const apiKey = String(req.headers['x-mj-api-key']);
|
|
114
|
+
|
|
97
115
|
const userPayload = await getUserPayload(
|
|
98
116
|
bearerToken,
|
|
99
117
|
sessionId,
|
|
100
118
|
dataSource,
|
|
101
|
-
requestDomain?.hostname ? requestDomain.hostname : undefined
|
|
119
|
+
requestDomain?.hostname ? requestDomain.hostname : undefined,
|
|
120
|
+
apiKey
|
|
102
121
|
);
|
|
103
122
|
|
|
104
123
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { FieldMapper, MapperKind, getDirective, mapSchema } from '@graphql-tools/utils';
|
|
2
|
+
import { AuthorizationError, Directive } from 'type-graphql';
|
|
3
|
+
import { DirectiveBuilder } from '../types.js';
|
|
4
|
+
|
|
5
|
+
const DIRECTIVE_NAME = 'RequireSystemUser';
|
|
6
|
+
|
|
7
|
+
export function RequireSystemUser(): PropertyDecorator & MethodDecorator & ClassDecorator;
|
|
8
|
+
export function RequireSystemUser(): PropertyDecorator | MethodDecorator | ClassDecorator {
|
|
9
|
+
return (targetOrPrototype, propertyKey, descriptor) => Directive(`@${DIRECTIVE_NAME}`)(targetOrPrototype, propertyKey, descriptor);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const requireSystemUserDirective: DirectiveBuilder = {
|
|
13
|
+
typeDefs: `directive @${DIRECTIVE_NAME} on FIELD_DEFINITION`,
|
|
14
|
+
transformer: (schema) => {
|
|
15
|
+
const fieldMapper: FieldMapper = (fieldConfig) => {
|
|
16
|
+
const directive = getDirective(schema, fieldConfig, DIRECTIVE_NAME)?.[0];
|
|
17
|
+
return {
|
|
18
|
+
...fieldConfig,
|
|
19
|
+
resolve: (source, args, context, info) => {
|
|
20
|
+
if (directive) {
|
|
21
|
+
console.debug('RequireSystemUser directive found');
|
|
22
|
+
if (!context.userPayload.isSystemUser) {
|
|
23
|
+
throw new AuthorizationError('Operation not permitted for this user');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return fieldConfig.resolve(source, args, context, info);
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
return mapSchema(schema, { [MapperKind.OBJECT_FIELD]: fieldMapper });
|
|
31
|
+
},
|
|
32
|
+
};
|
package/src/directives/index.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -22,7 +22,7 @@ import { WebSocketServer } from 'ws';
|
|
|
22
22
|
import buildApolloServer from './apolloServer/index.js';
|
|
23
23
|
import { configInfo, graphqlPort, graphqlRootPath, mj_core_schema, websiteRunFromPackage } from './config.js';
|
|
24
24
|
import { contextFunction, getUserPayload } from './context.js';
|
|
25
|
-
import { publicDirective } from './directives/index.js';
|
|
25
|
+
import { requireSystemUserDirective, publicDirective } from './directives/index.js';
|
|
26
26
|
import orm from './orm.js';
|
|
27
27
|
|
|
28
28
|
import { LoadActionEntityServer } from '@memberjunction/actions';
|
|
@@ -125,19 +125,19 @@ export const serve = async (resolverPaths: Array<string>) => {
|
|
|
125
125
|
Object.values(module).filter((value) => typeof value === 'function')
|
|
126
126
|
) as BuildSchemaOptions['resolvers'];
|
|
127
127
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
);
|
|
128
|
+
let schema = mergeSchemas({
|
|
129
|
+
schemas: [
|
|
130
|
+
buildSchemaSync({
|
|
131
|
+
resolvers,
|
|
132
|
+
validate: false,
|
|
133
|
+
scalarsMap: [{ type: Date, scalar: GraphQLTimestamp }],
|
|
134
|
+
emitSchemaFile: websiteRunFromPackage !== 1,
|
|
135
|
+
}),
|
|
136
|
+
],
|
|
137
|
+
typeDefs: [requireSystemUserDirective.typeDefs, publicDirective.typeDefs],
|
|
138
|
+
});
|
|
139
|
+
schema = requireSystemUserDirective.transformer(schema);
|
|
140
|
+
schema = publicDirective.transformer(schema);
|
|
141
141
|
|
|
142
142
|
const app = express();
|
|
143
143
|
const httpServer = createServer(app);
|
|
@@ -1,19 +1,46 @@
|
|
|
1
|
-
import { Field, ObjectType, Query, Resolver } from 'type-graphql';
|
|
2
|
-
import { Public } from '../directives/index.js';
|
|
1
|
+
import { Field, ObjectType, Int, Query, Resolver, Ctx, Info as RequestInfo } from 'type-graphql';
|
|
2
|
+
import { Public, RequireSystemUser } from '../directives/index.js';
|
|
3
3
|
import packageJson from '../../package.json' assert { type: 'json' };
|
|
4
|
+
import { AppContext } from '../types.js';
|
|
5
|
+
import os from 'node:os';
|
|
4
6
|
|
|
5
7
|
@ObjectType()
|
|
6
8
|
export class Info {
|
|
7
|
-
@Field(() => String)
|
|
8
9
|
@Public()
|
|
10
|
+
@Field()
|
|
9
11
|
Version: string;
|
|
12
|
+
@Field()
|
|
13
|
+
IsSystemUser: boolean;
|
|
14
|
+
|
|
15
|
+
@RequireSystemUser()
|
|
16
|
+
@Field()
|
|
17
|
+
Platform: string;
|
|
18
|
+
|
|
19
|
+
@RequireSystemUser()
|
|
20
|
+
@Field()
|
|
21
|
+
Arch: string;
|
|
22
|
+
|
|
23
|
+
@RequireSystemUser()
|
|
24
|
+
@Field()
|
|
25
|
+
CpuModel: string;
|
|
26
|
+
|
|
27
|
+
@RequireSystemUser()
|
|
28
|
+
@Field()
|
|
29
|
+
Hostname: string;
|
|
10
30
|
}
|
|
11
31
|
|
|
12
32
|
@Resolver(Info)
|
|
13
33
|
export class InfoResolver {
|
|
14
|
-
@Query(() => Info)
|
|
15
34
|
@Public()
|
|
16
|
-
|
|
17
|
-
|
|
35
|
+
@Query(() => Info)
|
|
36
|
+
Info(@Ctx() context: AppContext): Info {
|
|
37
|
+
return {
|
|
38
|
+
Version: packageJson.version,
|
|
39
|
+
IsSystemUser: Boolean(context.userPayload.isSystemUser),
|
|
40
|
+
Platform: os.platform(),
|
|
41
|
+
Arch: os.platform(),
|
|
42
|
+
CpuModel: os.cpus()?.[0].model,
|
|
43
|
+
Hostname: os.hostname(),
|
|
44
|
+
};
|
|
18
45
|
}
|
|
19
46
|
}
|
package/src/types.ts
CHANGED
|
@@ -7,6 +7,8 @@ export type UserPayload = {
|
|
|
7
7
|
email: string;
|
|
8
8
|
userRecord: any;
|
|
9
9
|
sessionId: string;
|
|
10
|
+
isSystemUser?: boolean;
|
|
11
|
+
apiKey?: string;
|
|
10
12
|
};
|
|
11
13
|
|
|
12
14
|
export type AppContext = {
|
|
@@ -36,5 +38,5 @@ export type RunViewGenericParams = {
|
|
|
36
38
|
auditLogDescription?: string;
|
|
37
39
|
resultType?: string;
|
|
38
40
|
userPayload?: UserPayload;
|
|
39
|
-
pubSub: PubSubEngine
|
|
40
|
-
}
|
|
41
|
+
pubSub: PubSubEngine;
|
|
42
|
+
};
|