@memberjunction/server 3.4.0 → 4.0.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 (277) hide show
  1. package/dist/agents/skip-agent.d.ts +65 -0
  2. package/dist/agents/skip-agent.d.ts.map +1 -1
  3. package/dist/agents/skip-agent.js +63 -5
  4. package/dist/agents/skip-agent.js.map +1 -1
  5. package/dist/agents/skip-sdk.d.ts +163 -0
  6. package/dist/agents/skip-sdk.d.ts.map +1 -1
  7. package/dist/agents/skip-sdk.js +143 -12
  8. package/dist/agents/skip-sdk.js.map +1 -1
  9. package/dist/apolloServer/TransactionPlugin.d.ts +4 -0
  10. package/dist/apolloServer/TransactionPlugin.d.ts.map +1 -0
  11. package/dist/apolloServer/TransactionPlugin.js +46 -0
  12. package/dist/apolloServer/TransactionPlugin.js.map +1 -0
  13. package/dist/apolloServer/index.d.ts +0 -1
  14. package/dist/apolloServer/index.d.ts.map +1 -1
  15. package/dist/auth/APIKeyScopeAuth.d.ts +82 -0
  16. package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
  17. package/dist/auth/APIKeyScopeAuth.js +78 -0
  18. package/dist/auth/APIKeyScopeAuth.js.map +1 -1
  19. package/dist/auth/AuthProviderFactory.d.ts +35 -0
  20. package/dist/auth/AuthProviderFactory.d.ts.map +1 -1
  21. package/dist/auth/AuthProviderFactory.js +51 -4
  22. package/dist/auth/AuthProviderFactory.js.map +1 -1
  23. package/dist/auth/BaseAuthProvider.d.ts +21 -0
  24. package/dist/auth/BaseAuthProvider.d.ts.map +1 -1
  25. package/dist/auth/BaseAuthProvider.js +24 -9
  26. package/dist/auth/BaseAuthProvider.js.map +1 -1
  27. package/dist/auth/IAuthProvider.d.ts +32 -0
  28. package/dist/auth/IAuthProvider.d.ts.map +1 -1
  29. package/dist/auth/__tests__/backward-compatibility.test.d.ts +2 -0
  30. package/dist/auth/__tests__/backward-compatibility.test.d.ts.map +1 -0
  31. package/dist/auth/__tests__/backward-compatibility.test.js +135 -0
  32. package/dist/auth/__tests__/backward-compatibility.test.js.map +1 -0
  33. package/dist/auth/exampleNewUserSubClass.d.ts +5 -1
  34. package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
  35. package/dist/auth/exampleNewUserSubClass.js +21 -6
  36. package/dist/auth/exampleNewUserSubClass.js.map +1 -1
  37. package/dist/auth/index.d.ts +14 -0
  38. package/dist/auth/index.d.ts.map +1 -1
  39. package/dist/auth/index.js +35 -22
  40. package/dist/auth/index.js.map +1 -1
  41. package/dist/auth/initializeProviders.d.ts +3 -0
  42. package/dist/auth/initializeProviders.d.ts.map +1 -1
  43. package/dist/auth/initializeProviders.js +6 -0
  44. package/dist/auth/initializeProviders.js.map +1 -1
  45. package/dist/auth/newUsers.js +11 -2
  46. package/dist/auth/newUsers.js.map +1 -1
  47. package/dist/auth/providers/Auth0Provider.d.ts +9 -0
  48. package/dist/auth/providers/Auth0Provider.d.ts.map +1 -1
  49. package/dist/auth/providers/Auth0Provider.js +10 -0
  50. package/dist/auth/providers/Auth0Provider.js.map +1 -1
  51. package/dist/auth/providers/CognitoProvider.d.ts +9 -0
  52. package/dist/auth/providers/CognitoProvider.d.ts.map +1 -1
  53. package/dist/auth/providers/CognitoProvider.js +10 -0
  54. package/dist/auth/providers/CognitoProvider.js.map +1 -1
  55. package/dist/auth/providers/GoogleProvider.d.ts +9 -0
  56. package/dist/auth/providers/GoogleProvider.d.ts.map +1 -1
  57. package/dist/auth/providers/GoogleProvider.js +11 -1
  58. package/dist/auth/providers/GoogleProvider.js.map +1 -1
  59. package/dist/auth/providers/MSALProvider.d.ts +9 -0
  60. package/dist/auth/providers/MSALProvider.d.ts.map +1 -1
  61. package/dist/auth/providers/MSALProvider.js +10 -0
  62. package/dist/auth/providers/MSALProvider.js.map +1 -1
  63. package/dist/auth/providers/OktaProvider.d.ts +9 -0
  64. package/dist/auth/providers/OktaProvider.d.ts.map +1 -1
  65. package/dist/auth/providers/OktaProvider.js +10 -0
  66. package/dist/auth/providers/OktaProvider.js.map +1 -1
  67. package/dist/config.d.ts +12 -0
  68. package/dist/config.d.ts.map +1 -1
  69. package/dist/config.js +42 -8
  70. package/dist/config.js.map +1 -1
  71. package/dist/context.d.ts +8 -1
  72. package/dist/context.d.ts.map +1 -1
  73. package/dist/context.js +26 -4
  74. package/dist/context.js.map +1 -1
  75. package/dist/directives/Public.js +2 -0
  76. package/dist/directives/Public.js.map +1 -1
  77. package/dist/entitySubclasses/entityPermissions.server.d.ts +7 -2
  78. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
  79. package/dist/entitySubclasses/entityPermissions.server.js +26 -8
  80. package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
  81. package/dist/generated/generated.d.ts +529 -6
  82. package/dist/generated/generated.d.ts.map +1 -1
  83. package/dist/generated/generated.js +10054 -15076
  84. package/dist/generated/generated.js.map +1 -1
  85. package/dist/generic/DeleteOptionsInput.d.ts +3 -0
  86. package/dist/generic/DeleteOptionsInput.d.ts.map +1 -1
  87. package/dist/generic/DeleteOptionsInput.js +3 -2
  88. package/dist/generic/DeleteOptionsInput.js.map +1 -1
  89. package/dist/generic/KeyInputOutputTypes.js +0 -6
  90. package/dist/generic/KeyInputOutputTypes.js.map +1 -1
  91. package/dist/generic/KeyValuePairInput.d.ts +4 -0
  92. package/dist/generic/KeyValuePairInput.d.ts.map +1 -1
  93. package/dist/generic/KeyValuePairInput.js +4 -2
  94. package/dist/generic/KeyValuePairInput.js.map +1 -1
  95. package/dist/generic/PushStatusResolver.js +0 -3
  96. package/dist/generic/PushStatusResolver.js.map +1 -1
  97. package/dist/generic/ResolverBase.d.ts +58 -0
  98. package/dist/generic/ResolverBase.d.ts.map +1 -1
  99. package/dist/generic/ResolverBase.js +203 -18
  100. package/dist/generic/ResolverBase.js.map +1 -1
  101. package/dist/generic/RunViewResolver.d.ts +22 -0
  102. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  103. package/dist/generic/RunViewResolver.js +42 -108
  104. package/dist/generic/RunViewResolver.js.map +1 -1
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +82 -37
  107. package/dist/index.js.map +1 -1
  108. package/dist/orm.d.ts.map +1 -1
  109. package/dist/orm.js +2 -1
  110. package/dist/orm.js.map +1 -1
  111. package/dist/resolvers/APIKeyResolver.d.ts +74 -0
  112. package/dist/resolvers/APIKeyResolver.d.ts.map +1 -1
  113. package/dist/resolvers/APIKeyResolver.js +49 -10
  114. package/dist/resolvers/APIKeyResolver.js.map +1 -1
  115. package/dist/resolvers/ActionResolver.d.ts +189 -0
  116. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  117. package/dist/resolvers/ActionResolver.js +152 -21
  118. package/dist/resolvers/ActionResolver.js.map +1 -1
  119. package/dist/resolvers/AskSkipResolver.d.ts +123 -0
  120. package/dist/resolvers/AskSkipResolver.d.ts.map +1 -0
  121. package/dist/resolvers/AskSkipResolver.js +1788 -0
  122. package/dist/resolvers/AskSkipResolver.js.map +1 -0
  123. package/dist/resolvers/ColorResolver.js +0 -5
  124. package/dist/resolvers/ColorResolver.js.map +1 -1
  125. package/dist/resolvers/ComponentRegistryResolver.d.ts +65 -0
  126. package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
  127. package/dist/resolvers/ComponentRegistryResolver.js +118 -40
  128. package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
  129. package/dist/resolvers/CreateQueryResolver.d.ts +47 -0
  130. package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
  131. package/dist/resolvers/CreateQueryResolver.js +92 -116
  132. package/dist/resolvers/CreateQueryResolver.js.map +1 -1
  133. package/dist/resolvers/DatasetResolver.js +2 -14
  134. package/dist/resolvers/DatasetResolver.js.map +1 -1
  135. package/dist/resolvers/EntityCommunicationsResolver.d.ts +40 -0
  136. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
  137. package/dist/resolvers/EntityCommunicationsResolver.js +2 -36
  138. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
  139. package/dist/resolvers/EntityRecordNameResolver.js +0 -7
  140. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  141. package/dist/resolvers/FileCategoryResolver.js +13 -1
  142. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  143. package/dist/resolvers/FileResolver.d.ts +16 -0
  144. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  145. package/dist/resolvers/FileResolver.js +59 -74
  146. package/dist/resolvers/FileResolver.js.map +1 -1
  147. package/dist/resolvers/GetDataContextDataResolver.d.ts +18 -1
  148. package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
  149. package/dist/resolvers/GetDataContextDataResolver.js +17 -9
  150. package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
  151. package/dist/resolvers/GetDataResolver.d.ts +19 -0
  152. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  153. package/dist/resolvers/GetDataResolver.js +35 -35
  154. package/dist/resolvers/GetDataResolver.js.map +1 -1
  155. package/dist/resolvers/InfoResolver.d.ts.map +1 -1
  156. package/dist/resolvers/InfoResolver.js +4 -7
  157. package/dist/resolvers/InfoResolver.js.map +1 -1
  158. package/dist/resolvers/MCPResolver.d.ts +325 -1
  159. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  160. package/dist/resolvers/MCPResolver.js +931 -24
  161. package/dist/resolvers/MCPResolver.js.map +1 -1
  162. package/dist/resolvers/MergeRecordsResolver.js +3 -29
  163. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  164. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
  165. package/dist/resolvers/PotentialDuplicateRecordResolver.js +0 -3
  166. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
  167. package/dist/resolvers/QueryResolver.d.ts +20 -0
  168. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  169. package/dist/resolvers/QueryResolver.js +44 -36
  170. package/dist/resolvers/QueryResolver.js.map +1 -1
  171. package/dist/resolvers/ReportResolver.d.ts +3 -0
  172. package/dist/resolvers/ReportResolver.d.ts.map +1 -1
  173. package/dist/resolvers/ReportResolver.js +9 -10
  174. package/dist/resolvers/ReportResolver.js.map +1 -1
  175. package/dist/resolvers/RunAIAgentResolver.d.ts +54 -0
  176. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  177. package/dist/resolvers/RunAIAgentResolver.js +116 -40
  178. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  179. package/dist/resolvers/RunAIPromptResolver.d.ts +42 -0
  180. package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
  181. package/dist/resolvers/RunAIPromptResolver.js +95 -22
  182. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  183. package/dist/resolvers/RunTemplateResolver.js +9 -6
  184. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  185. package/dist/resolvers/RunTestResolver.d.ts +12 -0
  186. package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
  187. package/dist/resolvers/RunTestResolver.js +35 -21
  188. package/dist/resolvers/RunTestResolver.js.map +1 -1
  189. package/dist/resolvers/SqlLoggingConfigResolver.d.ts +312 -0
  190. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  191. package/dist/resolvers/SqlLoggingConfigResolver.js +295 -45
  192. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  193. package/dist/resolvers/SyncDataResolver.d.ts +21 -0
  194. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  195. package/dist/resolvers/SyncDataResolver.js +36 -22
  196. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  197. package/dist/resolvers/SyncRolesUsersResolver.d.ts +14 -0
  198. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  199. package/dist/resolvers/SyncRolesUsersResolver.js +54 -21
  200. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  201. package/dist/resolvers/TaskResolver.d.ts +13 -0
  202. package/dist/resolvers/TaskResolver.d.ts.map +1 -1
  203. package/dist/resolvers/TaskResolver.js +22 -7
  204. package/dist/resolvers/TaskResolver.js.map +1 -1
  205. package/dist/resolvers/TelemetryResolver.d.ts +22 -0
  206. package/dist/resolvers/TelemetryResolver.d.ts.map +1 -1
  207. package/dist/resolvers/TelemetryResolver.js +45 -79
  208. package/dist/resolvers/TelemetryResolver.js.map +1 -1
  209. package/dist/resolvers/TransactionGroupResolver.js +11 -13
  210. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  211. package/dist/resolvers/UserFavoriteResolver.js +3 -12
  212. package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
  213. package/dist/resolvers/UserResolver.js +10 -0
  214. package/dist/resolvers/UserResolver.js.map +1 -1
  215. package/dist/resolvers/UserViewResolver.js +4 -0
  216. package/dist/resolvers/UserViewResolver.js.map +1 -1
  217. package/dist/resolvers/VersionHistoryResolver.d.ts +39 -0
  218. package/dist/resolvers/VersionHistoryResolver.d.ts.map +1 -0
  219. package/dist/resolvers/VersionHistoryResolver.js +208 -0
  220. package/dist/resolvers/VersionHistoryResolver.js.map +1 -0
  221. package/dist/rest/EntityCRUDHandler.d.ts +19 -0
  222. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  223. package/dist/rest/EntityCRUDHandler.js +55 -0
  224. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  225. package/dist/rest/OAuthCallbackHandler.d.ts +143 -0
  226. package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -0
  227. package/dist/rest/OAuthCallbackHandler.js +634 -0
  228. package/dist/rest/OAuthCallbackHandler.js.map +1 -0
  229. package/dist/rest/RESTEndpointHandler.d.ts +120 -0
  230. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  231. package/dist/rest/RESTEndpointHandler.js +213 -24
  232. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  233. package/dist/rest/ViewOperationsHandler.d.ts +19 -0
  234. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  235. package/dist/rest/ViewOperationsHandler.js +39 -0
  236. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  237. package/dist/rest/index.d.ts +1 -0
  238. package/dist/rest/index.d.ts.map +1 -1
  239. package/dist/rest/index.js +1 -0
  240. package/dist/rest/index.js.map +1 -1
  241. package/dist/rest/setupRESTEndpoints.d.ts +35 -0
  242. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  243. package/dist/rest/setupRESTEndpoints.js +15 -1
  244. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  245. package/dist/scheduler/LearningCycleScheduler.d.ts +4 -0
  246. package/dist/scheduler/LearningCycleScheduler.d.ts.map +1 -0
  247. package/dist/scheduler/LearningCycleScheduler.js +4 -0
  248. package/dist/scheduler/LearningCycleScheduler.js.map +1 -0
  249. package/dist/services/ScheduledJobsService.d.ts +31 -0
  250. package/dist/services/ScheduledJobsService.d.ts.map +1 -1
  251. package/dist/services/ScheduledJobsService.js +38 -4
  252. package/dist/services/ScheduledJobsService.js.map +1 -1
  253. package/dist/services/TaskOrchestrator.d.ts +73 -0
  254. package/dist/services/TaskOrchestrator.d.ts.map +1 -1
  255. package/dist/services/TaskOrchestrator.js +137 -15
  256. package/dist/services/TaskOrchestrator.js.map +1 -1
  257. package/dist/types.d.ts +14 -0
  258. package/dist/types.d.ts.map +1 -1
  259. package/dist/types.js +0 -13
  260. package/dist/types.js.map +1 -1
  261. package/dist/util.d.ts +37 -1
  262. package/dist/util.d.ts.map +1 -1
  263. package/dist/util.js +55 -8
  264. package/dist/util.js.map +1 -1
  265. package/package.json +79 -78
  266. package/src/auth/exampleNewUserSubClass.ts +1 -5
  267. package/src/entitySubclasses/entityPermissions.server.ts +1 -3
  268. package/src/generated/generated.ts +4682 -2681
  269. package/src/index.ts +61 -62
  270. package/src/resolvers/InfoResolver.ts +5 -1
  271. package/src/resolvers/MCPResolver.ts +910 -10
  272. package/src/resolvers/PotentialDuplicateRecordResolver.ts +0 -4
  273. package/src/resolvers/VersionHistoryResolver.ts +177 -0
  274. package/src/rest/OAuthCallbackHandler.ts +766 -0
  275. package/src/rest/RESTEndpointHandler.ts +58 -35
  276. package/src/rest/index.ts +2 -1
  277. 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';
@@ -300,20 +265,7 @@ export const serve = async (resolverPaths: Array<string>, app: Application = cre
300
265
  level: 6
301
266
  }));
302
267
 
303
- app.use(
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
268
+ // Setup REST API endpoints BEFORE GraphQL (since graphqlRootPath may be '/' which catches all routes)
317
269
  const authMiddleware = async (req, res, next) => {
318
270
  try {
319
271
  const sessionIdRaw = req.headers['x-session-id'];
@@ -326,27 +278,58 @@ export const serve = async (resolverPaths: Array<string>, app: Application = cre
326
278
  if (!userPayload) {
327
279
  return res.status(401).json({ error: 'Invalid token' });
328
280
  }
329
-
281
+
282
+ // Set both req.user (standard Express convention) and req['mjUser'] (MJ REST convention)
283
+ // Note: userPayload contains { userRecord: UserInfo, email, sessionId }
284
+ // The mjUser property expects the UserInfo directly (userRecord)
330
285
  req.user = userPayload;
286
+ req['mjUser'] = userPayload.userRecord;
331
287
  next();
332
288
  } catch (error) {
333
289
  console.error('Auth error:', error);
334
290
  return res.status(401).json({ error: 'Authentication failed' });
335
291
  }
336
292
  };
337
-
338
- // Get REST API configuration from the config file
339
- const restApiConfig: RESTApiOptions = {
340
- enabled: configInfo.restApiOptions?.enabled ?? true,
293
+
294
+ // Build public URL for OAuth callbacks
295
+ const oauthPublicUrl = configInfo.publicUrl || `${configInfo.baseUrl}:${configInfo.graphqlPort}${configInfo.graphqlRootPath || ''}`;
296
+ console.log(`[OAuth] publicUrl: ${oauthPublicUrl}`);
297
+
298
+ // Set up OAuth callback routes at /oauth (independent of REST API)
299
+ // These must be registered BEFORE GraphQL middleware since graphqlRootPath may be '/'
300
+ if (oauthPublicUrl) {
301
+ const { callbackRouter, authenticatedRouter } = createOAuthCallbackHandler({
302
+ publicUrl: oauthPublicUrl,
303
+ // TODO: These should be configurable to point to the MJ Explorer UI
304
+ successRedirectUrl: `${oauthPublicUrl}/oauth/success`,
305
+ errorRedirectUrl: `${oauthPublicUrl}/oauth/error`
306
+ });
307
+
308
+ // Create CORS middleware for OAuth routes (needed for cross-origin requests from frontend)
309
+ const oauthCors = cors<cors.CorsRequest>();
310
+
311
+ // OAuth callback is unauthenticated (called by external auth server)
312
+ app.use('/oauth', oauthCors, callbackRouter);
313
+ console.log('[OAuth] Callback route registered at /oauth/callback');
314
+
315
+ // OAuth status, initiate, and exchange endpoints require authentication
316
+ // Must also have CORS for frontend requests and JSON body parsing
317
+ app.use('/oauth', oauthCors, BodyParser.json(), authMiddleware, authenticatedRouter);
318
+ console.log('[OAuth] Authenticated routes registered at /oauth/status, /oauth/initiate, and /oauth/exchange');
319
+ }
320
+
321
+ // Get REST API configuration
322
+ const restApiConfig = {
323
+ enabled: configInfo.restApiOptions?.enabled ?? false,
341
324
  includeEntities: configInfo.restApiOptions?.includeEntities,
342
- excludeEntities: configInfo.restApiOptions?.excludeEntities
325
+ excludeEntities: configInfo.restApiOptions?.excludeEntities,
343
326
  };
344
-
327
+
345
328
  // Apply options from server options if provided (these override the config file)
346
329
  if (options?.restApiOptions) {
347
330
  Object.assign(restApiConfig, options.restApiOptions);
348
331
  }
349
-
332
+
350
333
  // Get REST API configuration from environment variables if present (env vars override everything)
351
334
  if (process.env.MJ_REST_API_ENABLED !== undefined) {
352
335
  restApiConfig.enabled = process.env.MJ_REST_API_ENABLED === 'true';
@@ -354,18 +337,34 @@ export const serve = async (resolverPaths: Array<string>, app: Application = cre
354
337
  console.log('REST API is enabled via environment variable');
355
338
  }
356
339
  }
357
-
340
+
358
341
  if (process.env.MJ_REST_API_INCLUDE_ENTITIES) {
359
342
  restApiConfig.includeEntities = process.env.MJ_REST_API_INCLUDE_ENTITIES.split(',').map(e => e.trim());
360
343
  }
361
-
344
+
362
345
  if (process.env.MJ_REST_API_EXCLUDE_ENTITIES) {
363
346
  restApiConfig.excludeEntities = process.env.MJ_REST_API_EXCLUDE_ENTITIES.split(',').map(e => e.trim());
364
347
  }
365
-
348
+
366
349
  // Set up REST endpoints with the configured options and auth middleware
367
350
  setupRESTEndpoints(app, restApiConfig, authMiddleware);
368
351
 
352
+ // GraphQL middleware (after REST so /api/v1/* routes are handled first)
353
+ // Note: Type assertion needed due to @apollo/server bundling older @types/express types
354
+ // that are incompatible with Express 5.x types (missing 'param' property)
355
+ app.use(
356
+ graphqlRootPath,
357
+ cors<cors.CorsRequest>(),
358
+ BodyParser.json({ limit: '50mb' }),
359
+ expressMiddleware(apolloServer, {
360
+ context: contextFunction({
361
+ setupComplete$,
362
+ dataSource: extendConnectionPoolWithQuery(pool), // default read-write data source
363
+ dataSources // all data source
364
+ }),
365
+ }) as unknown as express.RequestHandler
366
+ );
367
+
369
368
  // Initialize and start scheduled jobs service if enabled
370
369
  let scheduledJobsService: ScheduledJobsService | null = null;
371
370
  if (configInfo.scheduledJobs?.enabled) {
@@ -1,9 +1,13 @@
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 packageJson from '../../package.json' with { type: 'json' };
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
12
  export class Info {
9
13
  @Public()