@memberjunction/server 3.4.0 → 4.1.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 +689 -513
- package/dist/agents/skip-agent.d.ts +65 -0
- package/dist/agents/skip-agent.d.ts.map +1 -1
- package/dist/agents/skip-agent.js +63 -5
- package/dist/agents/skip-agent.js.map +1 -1
- package/dist/agents/skip-sdk.d.ts +163 -0
- package/dist/agents/skip-sdk.d.ts.map +1 -1
- package/dist/agents/skip-sdk.js +143 -12
- package/dist/agents/skip-sdk.js.map +1 -1
- package/dist/apolloServer/index.d.ts +0 -1
- package/dist/apolloServer/index.d.ts.map +1 -1
- package/dist/auth/APIKeyScopeAuth.d.ts +82 -0
- package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
- package/dist/auth/APIKeyScopeAuth.js +78 -0
- package/dist/auth/APIKeyScopeAuth.js.map +1 -1
- package/dist/auth/AuthProviderFactory.d.ts +35 -0
- package/dist/auth/AuthProviderFactory.d.ts.map +1 -1
- package/dist/auth/AuthProviderFactory.js +51 -4
- package/dist/auth/AuthProviderFactory.js.map +1 -1
- package/dist/auth/BaseAuthProvider.d.ts +21 -0
- package/dist/auth/BaseAuthProvider.d.ts.map +1 -1
- package/dist/auth/BaseAuthProvider.js +24 -9
- package/dist/auth/BaseAuthProvider.js.map +1 -1
- package/dist/auth/IAuthProvider.d.ts +32 -0
- package/dist/auth/IAuthProvider.d.ts.map +1 -1
- package/dist/auth/exampleNewUserSubClass.d.ts +5 -1
- package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
- package/dist/auth/exampleNewUserSubClass.js +21 -6
- package/dist/auth/exampleNewUserSubClass.js.map +1 -1
- package/dist/auth/index.d.ts +14 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +35 -22
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.d.ts +3 -0
- package/dist/auth/initializeProviders.d.ts.map +1 -1
- package/dist/auth/initializeProviders.js +6 -0
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/auth/newUsers.d.ts.map +1 -1
- package/dist/auth/newUsers.js +14 -3
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/auth/providers/Auth0Provider.d.ts +9 -0
- package/dist/auth/providers/Auth0Provider.d.ts.map +1 -1
- package/dist/auth/providers/Auth0Provider.js +10 -0
- package/dist/auth/providers/Auth0Provider.js.map +1 -1
- package/dist/auth/providers/CognitoProvider.d.ts +9 -0
- package/dist/auth/providers/CognitoProvider.d.ts.map +1 -1
- package/dist/auth/providers/CognitoProvider.js +10 -0
- package/dist/auth/providers/CognitoProvider.js.map +1 -1
- package/dist/auth/providers/GoogleProvider.d.ts +9 -0
- package/dist/auth/providers/GoogleProvider.d.ts.map +1 -1
- package/dist/auth/providers/GoogleProvider.js +11 -1
- package/dist/auth/providers/GoogleProvider.js.map +1 -1
- package/dist/auth/providers/MSALProvider.d.ts +9 -0
- package/dist/auth/providers/MSALProvider.d.ts.map +1 -1
- package/dist/auth/providers/MSALProvider.js +10 -0
- package/dist/auth/providers/MSALProvider.js.map +1 -1
- package/dist/auth/providers/OktaProvider.d.ts +9 -0
- package/dist/auth/providers/OktaProvider.d.ts.map +1 -1
- package/dist/auth/providers/OktaProvider.js +10 -0
- package/dist/auth/providers/OktaProvider.js.map +1 -1
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +42 -8
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +8 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +26 -4
- package/dist/context.js.map +1 -1
- package/dist/directives/Public.js +2 -0
- package/dist/directives/Public.js.map +1 -1
- package/dist/entitySubclasses/entityPermissions.server.d.ts +7 -2
- package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
- package/dist/entitySubclasses/entityPermissions.server.js +26 -8
- package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
- package/dist/generated/generated.d.ts +539 -2
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +9985 -14951
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/DeleteOptionsInput.d.ts +3 -0
- package/dist/generic/DeleteOptionsInput.d.ts.map +1 -1
- package/dist/generic/DeleteOptionsInput.js +3 -2
- package/dist/generic/DeleteOptionsInput.js.map +1 -1
- package/dist/generic/KeyInputOutputTypes.js +0 -6
- package/dist/generic/KeyInputOutputTypes.js.map +1 -1
- package/dist/generic/KeyValuePairInput.d.ts +4 -0
- package/dist/generic/KeyValuePairInput.d.ts.map +1 -1
- package/dist/generic/KeyValuePairInput.js +4 -2
- package/dist/generic/KeyValuePairInput.js.map +1 -1
- package/dist/generic/PushStatusResolver.js +0 -3
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +58 -0
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +203 -18
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +22 -0
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +42 -108
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +94 -37
- package/dist/index.js.map +1 -1
- package/dist/orm.d.ts.map +1 -1
- package/dist/orm.js +2 -1
- package/dist/orm.js.map +1 -1
- package/dist/resolvers/APIKeyResolver.d.ts +74 -0
- package/dist/resolvers/APIKeyResolver.d.ts.map +1 -1
- package/dist/resolvers/APIKeyResolver.js +49 -10
- package/dist/resolvers/APIKeyResolver.js.map +1 -1
- package/dist/resolvers/ActionResolver.d.ts +189 -0
- package/dist/resolvers/ActionResolver.d.ts.map +1 -1
- package/dist/resolvers/ActionResolver.js +152 -21
- package/dist/resolvers/ActionResolver.js.map +1 -1
- package/dist/resolvers/ColorResolver.js +0 -5
- package/dist/resolvers/ColorResolver.js.map +1 -1
- package/dist/resolvers/ComponentRegistryResolver.d.ts +65 -0
- package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
- package/dist/resolvers/ComponentRegistryResolver.js +118 -40
- package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
- package/dist/resolvers/CreateQueryResolver.d.ts +47 -0
- package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/CreateQueryResolver.js +92 -116
- package/dist/resolvers/CreateQueryResolver.js.map +1 -1
- package/dist/resolvers/DatasetResolver.js +2 -14
- package/dist/resolvers/DatasetResolver.js.map +1 -1
- package/dist/resolvers/EntityCommunicationsResolver.d.ts +40 -0
- package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityCommunicationsResolver.js +2 -36
- package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js +0 -7
- package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
- package/dist/resolvers/FileCategoryResolver.d.ts +1 -1
- package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
- package/dist/resolvers/FileCategoryResolver.js +15 -3
- package/dist/resolvers/FileCategoryResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.d.ts +16 -0
- package/dist/resolvers/FileResolver.d.ts.map +1 -1
- package/dist/resolvers/FileResolver.js +59 -74
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts +18 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.js +17 -9
- package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts +19 -0
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +35 -35
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/InfoResolver.d.ts +2 -2
- package/dist/resolvers/InfoResolver.d.ts.map +1 -1
- package/dist/resolvers/InfoResolver.js +17 -20
- package/dist/resolvers/InfoResolver.js.map +1 -1
- package/dist/resolvers/MCPResolver.d.ts +325 -1
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +931 -24
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.js +3 -29
- package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.js +0 -3
- package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
- package/dist/resolvers/QueryResolver.d.ts +20 -0
- package/dist/resolvers/QueryResolver.d.ts.map +1 -1
- package/dist/resolvers/QueryResolver.js +44 -36
- package/dist/resolvers/QueryResolver.js.map +1 -1
- package/dist/resolvers/ReportResolver.d.ts +3 -0
- package/dist/resolvers/ReportResolver.d.ts.map +1 -1
- package/dist/resolvers/ReportResolver.js +9 -10
- package/dist/resolvers/ReportResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts +54 -0
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +116 -40
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.d.ts +42 -0
- package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +95 -22
- package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +9 -6
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/RunTestResolver.d.ts +12 -0
- package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTestResolver.js +35 -21
- package/dist/resolvers/RunTestResolver.js.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts +312 -0
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.js +295 -45
- package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts +21 -0
- package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncDataResolver.js +36 -22
- package/dist/resolvers/SyncDataResolver.js.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.d.ts +14 -0
- package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.js +54 -21
- package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
- package/dist/resolvers/TaskResolver.d.ts +13 -0
- package/dist/resolvers/TaskResolver.d.ts.map +1 -1
- package/dist/resolvers/TaskResolver.js +22 -7
- package/dist/resolvers/TaskResolver.js.map +1 -1
- package/dist/resolvers/TelemetryResolver.d.ts +22 -0
- package/dist/resolvers/TelemetryResolver.d.ts.map +1 -1
- package/dist/resolvers/TelemetryResolver.js +45 -79
- package/dist/resolvers/TelemetryResolver.js.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.js +11 -13
- package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
- package/dist/resolvers/UserFavoriteResolver.js +3 -12
- package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
- package/dist/resolvers/UserResolver.js +10 -0
- package/dist/resolvers/UserResolver.js.map +1 -1
- package/dist/resolvers/UserViewResolver.js +4 -0
- package/dist/resolvers/UserViewResolver.js.map +1 -1
- package/dist/resolvers/VersionHistoryResolver.d.ts +39 -0
- package/dist/resolvers/VersionHistoryResolver.d.ts.map +1 -0
- package/dist/resolvers/VersionHistoryResolver.js +208 -0
- package/dist/resolvers/VersionHistoryResolver.js.map +1 -0
- package/dist/rest/EntityCRUDHandler.d.ts +19 -0
- package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
- package/dist/rest/EntityCRUDHandler.js +55 -0
- package/dist/rest/EntityCRUDHandler.js.map +1 -1
- package/dist/rest/OAuthCallbackHandler.d.ts +143 -0
- package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -0
- package/dist/rest/OAuthCallbackHandler.js +634 -0
- package/dist/rest/OAuthCallbackHandler.js.map +1 -0
- package/dist/rest/RESTEndpointHandler.d.ts +120 -0
- package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
- package/dist/rest/RESTEndpointHandler.js +213 -24
- package/dist/rest/RESTEndpointHandler.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts +19 -0
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +39 -0
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/rest/index.d.ts +1 -0
- package/dist/rest/index.d.ts.map +1 -1
- package/dist/rest/index.js +1 -0
- package/dist/rest/index.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts +35 -0
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +15 -1
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/dist/services/ScheduledJobsService.d.ts +31 -0
- package/dist/services/ScheduledJobsService.d.ts.map +1 -1
- package/dist/services/ScheduledJobsService.js +38 -4
- package/dist/services/ScheduledJobsService.js.map +1 -1
- package/dist/services/TaskOrchestrator.d.ts +73 -0
- package/dist/services/TaskOrchestrator.d.ts.map +1 -1
- package/dist/services/TaskOrchestrator.js +137 -15
- package/dist/services/TaskOrchestrator.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -13
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +37 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +55 -8
- package/dist/util.js.map +1 -1
- package/package.json +83 -78
- package/src/auth/exampleNewUserSubClass.ts +1 -5
- package/src/auth/newUsers.ts +4 -2
- package/src/entitySubclasses/entityPermissions.server.ts +1 -3
- package/src/generated/generated.ts +4707 -2664
- package/src/index.ts +73 -62
- package/src/resolvers/FileCategoryResolver.ts +1 -1
- package/src/resolvers/InfoResolver.ts +10 -6
- package/src/resolvers/MCPResolver.ts +910 -10
- package/src/resolvers/PotentialDuplicateRecordResolver.ts +0 -4
- package/src/resolvers/VersionHistoryResolver.ts +177 -0
- package/src/rest/OAuthCallbackHandler.ts +766 -0
- package/src/rest/RESTEndpointHandler.ts +58 -35
- package/src/rest/index.ts +2 -1
- package/src/rest/setupRESTEndpoints.ts +13 -12
package/src/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import dotenv from 'dotenv';
|
|
2
2
|
|
|
3
|
-
dotenv.config();
|
|
3
|
+
dotenv.config({ quiet: true });
|
|
4
4
|
|
|
5
5
|
import { expressMiddleware } from '@apollo/server/express4';
|
|
6
6
|
import { mergeSchemas } from '@graphql-tools/schema';
|
|
@@ -27,45 +27,10 @@ import { contextFunction, getUserPayload } from './context.js';
|
|
|
27
27
|
import { requireSystemUserDirective, publicDirective } from './directives/index.js';
|
|
28
28
|
import createMSSQLConfig from './orm.js';
|
|
29
29
|
import { setupRESTEndpoints } from './rest/setupRESTEndpoints.js';
|
|
30
|
-
|
|
31
|
-
import { LoadAllCoreActions } from '@memberjunction/core-actions';
|
|
32
|
-
LoadAllCoreActions(); // prevent tree shaking for this dynamic module
|
|
33
|
-
import { LoadApolloAccountsEnrichmentAction, LoadApolloContactsEnrichmentAction } from '@memberjunction/actions-apollo'
|
|
34
|
-
LoadApolloAccountsEnrichmentAction();
|
|
35
|
-
LoadApolloContactsEnrichmentAction();
|
|
36
|
-
|
|
37
|
-
import { LoadCoreEntitiesServerSubClasses } from '@memberjunction/core-entities-server';
|
|
38
|
-
LoadCoreEntitiesServerSubClasses(); // prevent tree shaking for this dynamic module
|
|
39
|
-
|
|
40
|
-
import { LoadAgentManagementActions } from '@memberjunction/ai-agent-manager-actions';
|
|
41
|
-
LoadAgentManagementActions();
|
|
42
|
-
|
|
43
|
-
// Load agent manager core classes (registers custom agent classes like AgentBuilderAgent, AgentArchitectAgent)
|
|
44
|
-
import { LoadAgentManagerCore } from '@memberjunction/ai-agent-manager';
|
|
45
|
-
LoadAgentManagerCore();
|
|
46
|
-
|
|
47
|
-
import { LoadSchedulingEngine } from '@memberjunction/scheduling-engine';
|
|
48
|
-
LoadSchedulingEngine(); // This also loads drivers
|
|
49
|
-
|
|
50
|
-
import { LoadAllSchedulingActions } from '@memberjunction/scheduling-actions';
|
|
51
|
-
LoadAllSchedulingActions(); // prevent tree shaking for scheduling actions
|
|
52
|
-
|
|
53
|
-
import { GetTypeformResponsesAction } from '@memberjunction/actions-bizapps-formbuilders';
|
|
54
|
-
const x = GetTypeformResponsesAction; // prevent tree shaking for this dynamic module
|
|
30
|
+
import { createOAuthCallbackHandler } from './rest/OAuthCallbackHandler.js';
|
|
55
31
|
|
|
56
32
|
import { resolve } from 'node:path';
|
|
57
33
|
import { DataSourceInfo, raiseEvent } from './types.js';
|
|
58
|
-
import { LoadAIEngine } from '@memberjunction/aiengine';
|
|
59
|
-
import { LoadAIProviders } from '@memberjunction/ai-provider-bundle';
|
|
60
|
-
// Load AI Engine and all providers to prevent tree shaking
|
|
61
|
-
LoadAIEngine();
|
|
62
|
-
LoadAIProviders();
|
|
63
|
-
|
|
64
|
-
// Load Communication Providers
|
|
65
|
-
import { LoadMSGraphProvider } from '@memberjunction/communication-ms-graph';
|
|
66
|
-
import { LoadProvider as LoadSendGridProvider } from '@memberjunction/communication-sendgrid';
|
|
67
|
-
LoadMSGraphProvider();
|
|
68
|
-
LoadSendGridProvider();
|
|
69
34
|
|
|
70
35
|
import { ExternalChangeDetectorEngine } from '@memberjunction/external-change-detection';
|
|
71
36
|
import { ScheduledJobsService } from './services/ScheduledJobsService.js';
|
|
@@ -123,6 +88,18 @@ export * from './resolvers/CreateQueryResolver.js';
|
|
|
123
88
|
export * from './resolvers/TelemetryResolver.js';
|
|
124
89
|
export * from './resolvers/APIKeyResolver.js';
|
|
125
90
|
export * from './resolvers/MCPResolver.js';
|
|
91
|
+
export * from './resolvers/ActionResolver.js';
|
|
92
|
+
export * from './resolvers/EntityCommunicationsResolver.js';
|
|
93
|
+
export * from './resolvers/EntityResolver.js';
|
|
94
|
+
export * from './resolvers/FileCategoryResolver.js';
|
|
95
|
+
export * from './resolvers/FileResolver.js';
|
|
96
|
+
export * from './resolvers/InfoResolver.js';
|
|
97
|
+
export * from './resolvers/PotentialDuplicateRecordResolver.js';
|
|
98
|
+
export * from './resolvers/RunTestResolver.js';
|
|
99
|
+
export * from './resolvers/UserFavoriteResolver.js';
|
|
100
|
+
export * from './resolvers/UserResolver.js';
|
|
101
|
+
export * from './resolvers/UserViewResolver.js';
|
|
102
|
+
export * from './resolvers/VersionHistoryResolver.js';
|
|
126
103
|
export { GetReadOnlyDataSource, GetReadWriteDataSource, GetReadWriteProvider, GetReadOnlyProvider } from './util.js';
|
|
127
104
|
|
|
128
105
|
export * from './generated/generated.js';
|
|
@@ -300,20 +277,7 @@ export const serve = async (resolverPaths: Array<string>, app: Application = cre
|
|
|
300
277
|
level: 6
|
|
301
278
|
}));
|
|
302
279
|
|
|
303
|
-
|
|
304
|
-
graphqlRootPath,
|
|
305
|
-
cors<cors.CorsRequest>(),
|
|
306
|
-
BodyParser.json({ limit: '50mb' }),
|
|
307
|
-
expressMiddleware(apolloServer, {
|
|
308
|
-
context: contextFunction({
|
|
309
|
-
setupComplete$,
|
|
310
|
-
dataSource: extendConnectionPoolWithQuery(pool), // default read-write data source
|
|
311
|
-
dataSources // all data source
|
|
312
|
-
}),
|
|
313
|
-
})
|
|
314
|
-
);
|
|
315
|
-
|
|
316
|
-
// Setup REST API endpoints
|
|
280
|
+
// Setup REST API endpoints BEFORE GraphQL (since graphqlRootPath may be '/' which catches all routes)
|
|
317
281
|
const authMiddleware = async (req, res, next) => {
|
|
318
282
|
try {
|
|
319
283
|
const sessionIdRaw = req.headers['x-session-id'];
|
|
@@ -326,27 +290,58 @@ export const serve = async (resolverPaths: Array<string>, app: Application = cre
|
|
|
326
290
|
if (!userPayload) {
|
|
327
291
|
return res.status(401).json({ error: 'Invalid token' });
|
|
328
292
|
}
|
|
329
|
-
|
|
293
|
+
|
|
294
|
+
// Set both req.user (standard Express convention) and req['mjUser'] (MJ REST convention)
|
|
295
|
+
// Note: userPayload contains { userRecord: UserInfo, email, sessionId }
|
|
296
|
+
// The mjUser property expects the UserInfo directly (userRecord)
|
|
330
297
|
req.user = userPayload;
|
|
298
|
+
req['mjUser'] = userPayload.userRecord;
|
|
331
299
|
next();
|
|
332
300
|
} catch (error) {
|
|
333
301
|
console.error('Auth error:', error);
|
|
334
302
|
return res.status(401).json({ error: 'Authentication failed' });
|
|
335
303
|
}
|
|
336
304
|
};
|
|
337
|
-
|
|
338
|
-
//
|
|
339
|
-
const
|
|
340
|
-
|
|
305
|
+
|
|
306
|
+
// Build public URL for OAuth callbacks
|
|
307
|
+
const oauthPublicUrl = configInfo.publicUrl || `${configInfo.baseUrl}:${configInfo.graphqlPort}${configInfo.graphqlRootPath || ''}`;
|
|
308
|
+
console.log(`[OAuth] publicUrl: ${oauthPublicUrl}`);
|
|
309
|
+
|
|
310
|
+
// Set up OAuth callback routes at /oauth (independent of REST API)
|
|
311
|
+
// These must be registered BEFORE GraphQL middleware since graphqlRootPath may be '/'
|
|
312
|
+
if (oauthPublicUrl) {
|
|
313
|
+
const { callbackRouter, authenticatedRouter } = createOAuthCallbackHandler({
|
|
314
|
+
publicUrl: oauthPublicUrl,
|
|
315
|
+
// TODO: These should be configurable to point to the MJ Explorer UI
|
|
316
|
+
successRedirectUrl: `${oauthPublicUrl}/oauth/success`,
|
|
317
|
+
errorRedirectUrl: `${oauthPublicUrl}/oauth/error`
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
// Create CORS middleware for OAuth routes (needed for cross-origin requests from frontend)
|
|
321
|
+
const oauthCors = cors<cors.CorsRequest>();
|
|
322
|
+
|
|
323
|
+
// OAuth callback is unauthenticated (called by external auth server)
|
|
324
|
+
app.use('/oauth', oauthCors, callbackRouter);
|
|
325
|
+
console.log('[OAuth] Callback route registered at /oauth/callback');
|
|
326
|
+
|
|
327
|
+
// OAuth status, initiate, and exchange endpoints require authentication
|
|
328
|
+
// Must also have CORS for frontend requests and JSON body parsing
|
|
329
|
+
app.use('/oauth', oauthCors, BodyParser.json(), authMiddleware, authenticatedRouter);
|
|
330
|
+
console.log('[OAuth] Authenticated routes registered at /oauth/status, /oauth/initiate, and /oauth/exchange');
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Get REST API configuration
|
|
334
|
+
const restApiConfig = {
|
|
335
|
+
enabled: configInfo.restApiOptions?.enabled ?? false,
|
|
341
336
|
includeEntities: configInfo.restApiOptions?.includeEntities,
|
|
342
|
-
excludeEntities: configInfo.restApiOptions?.excludeEntities
|
|
337
|
+
excludeEntities: configInfo.restApiOptions?.excludeEntities,
|
|
343
338
|
};
|
|
344
|
-
|
|
339
|
+
|
|
345
340
|
// Apply options from server options if provided (these override the config file)
|
|
346
341
|
if (options?.restApiOptions) {
|
|
347
342
|
Object.assign(restApiConfig, options.restApiOptions);
|
|
348
343
|
}
|
|
349
|
-
|
|
344
|
+
|
|
350
345
|
// Get REST API configuration from environment variables if present (env vars override everything)
|
|
351
346
|
if (process.env.MJ_REST_API_ENABLED !== undefined) {
|
|
352
347
|
restApiConfig.enabled = process.env.MJ_REST_API_ENABLED === 'true';
|
|
@@ -354,18 +349,34 @@ export const serve = async (resolverPaths: Array<string>, app: Application = cre
|
|
|
354
349
|
console.log('REST API is enabled via environment variable');
|
|
355
350
|
}
|
|
356
351
|
}
|
|
357
|
-
|
|
352
|
+
|
|
358
353
|
if (process.env.MJ_REST_API_INCLUDE_ENTITIES) {
|
|
359
354
|
restApiConfig.includeEntities = process.env.MJ_REST_API_INCLUDE_ENTITIES.split(',').map(e => e.trim());
|
|
360
355
|
}
|
|
361
|
-
|
|
356
|
+
|
|
362
357
|
if (process.env.MJ_REST_API_EXCLUDE_ENTITIES) {
|
|
363
358
|
restApiConfig.excludeEntities = process.env.MJ_REST_API_EXCLUDE_ENTITIES.split(',').map(e => e.trim());
|
|
364
359
|
}
|
|
365
|
-
|
|
360
|
+
|
|
366
361
|
// Set up REST endpoints with the configured options and auth middleware
|
|
367
362
|
setupRESTEndpoints(app, restApiConfig, authMiddleware);
|
|
368
363
|
|
|
364
|
+
// GraphQL middleware (after REST so /api/v1/* routes are handled first)
|
|
365
|
+
// Note: Type assertion needed due to @apollo/server bundling older @types/express types
|
|
366
|
+
// that are incompatible with Express 5.x types (missing 'param' property)
|
|
367
|
+
app.use(
|
|
368
|
+
graphqlRootPath,
|
|
369
|
+
cors<cors.CorsRequest>(),
|
|
370
|
+
BodyParser.json({ limit: '50mb' }),
|
|
371
|
+
expressMiddleware(apolloServer, {
|
|
372
|
+
context: contextFunction({
|
|
373
|
+
setupComplete$,
|
|
374
|
+
dataSource: extendConnectionPoolWithQuery(pool), // default read-write data source
|
|
375
|
+
dataSources // all data source
|
|
376
|
+
}),
|
|
377
|
+
}) as unknown as express.RequestHandler
|
|
378
|
+
);
|
|
379
|
+
|
|
369
380
|
// Initialize and start scheduled jobs service if enabled
|
|
370
381
|
let scheduledJobsService: ScheduledJobsService | null = null;
|
|
371
382
|
if (configInfo.scheduledJobs?.enabled) {
|
|
@@ -7,7 +7,7 @@ import sql from 'mssql';
|
|
|
7
7
|
import { SQLServerDataProvider } from '@memberjunction/sqlserver-dataprovider';
|
|
8
8
|
import { GetReadWriteProvider } from '../util.js';
|
|
9
9
|
|
|
10
|
-
export class
|
|
10
|
+
export class FileCategoryResolver extends FileCategoryResolverBase {
|
|
11
11
|
@Mutation(() => MJFileCategory_)
|
|
12
12
|
async DeleteFileCategory(
|
|
13
13
|
@Arg('ID', () => String) ID: string,
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { Field, ObjectType, Int, Query, Resolver, Ctx, Info as RequestInfo } from 'type-graphql';
|
|
2
2
|
import { Public, RequireSystemUser } from '../directives/index.js';
|
|
3
|
-
import
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
4
|
import { AppContext } from '../types.js';
|
|
5
5
|
import os from 'node:os';
|
|
6
6
|
|
|
7
|
+
// Use createRequire to import JSON (compatible with module: es2022)
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
const packageJson = require('../../package.json') as { version: string };
|
|
10
|
+
|
|
7
11
|
@ObjectType()
|
|
8
|
-
export class
|
|
12
|
+
export class ServerInfo {
|
|
9
13
|
@Public()
|
|
10
14
|
@Field()
|
|
11
15
|
Version: string;
|
|
@@ -29,11 +33,11 @@ export class Info {
|
|
|
29
33
|
Hostname: string;
|
|
30
34
|
}
|
|
31
35
|
|
|
32
|
-
@Resolver(
|
|
33
|
-
export class InfoResolver {
|
|
36
|
+
@Resolver(ServerInfo)
|
|
37
|
+
export class InfoResolver {
|
|
34
38
|
@Public()
|
|
35
|
-
@Query(() =>
|
|
36
|
-
Info(@Ctx() context: AppContext):
|
|
39
|
+
@Query(() => ServerInfo)
|
|
40
|
+
Info(@Ctx() context: AppContext): ServerInfo {
|
|
37
41
|
return {
|
|
38
42
|
Version: packageJson.version,
|
|
39
43
|
IsSystemUser: Boolean(context.userPayload.isSystemUser),
|