@memberjunction/server 5.7.0 → 5.9.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 (78) hide show
  1. package/README.md +1 -0
  2. package/dist/agents/skip-agent.d.ts +15 -1
  3. package/dist/agents/skip-agent.d.ts.map +1 -1
  4. package/dist/agents/skip-agent.js +78 -36
  5. package/dist/agents/skip-agent.js.map +1 -1
  6. package/dist/agents/skip-sdk.d.ts.map +1 -1
  7. package/dist/agents/skip-sdk.js +12 -0
  8. package/dist/agents/skip-sdk.js.map +1 -1
  9. package/dist/apolloServer/index.d.ts +10 -2
  10. package/dist/apolloServer/index.d.ts.map +1 -1
  11. package/dist/apolloServer/index.js +22 -8
  12. package/dist/apolloServer/index.js.map +1 -1
  13. package/dist/config.d.ts +125 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +23 -0
  16. package/dist/config.js.map +1 -1
  17. package/dist/context.d.ts +17 -0
  18. package/dist/context.d.ts.map +1 -1
  19. package/dist/context.js +144 -62
  20. package/dist/context.js.map +1 -1
  21. package/dist/generated/generated.d.ts +607 -116
  22. package/dist/generated/generated.d.ts.map +1 -1
  23. package/dist/generated/generated.js +3542 -775
  24. package/dist/generated/generated.js.map +1 -1
  25. package/dist/generic/CacheInvalidationResolver.d.ts +32 -0
  26. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -0
  27. package/dist/generic/CacheInvalidationResolver.js +80 -0
  28. package/dist/generic/CacheInvalidationResolver.js.map +1 -0
  29. package/dist/generic/PubSubManager.d.ts +27 -0
  30. package/dist/generic/PubSubManager.d.ts.map +1 -0
  31. package/dist/generic/PubSubManager.js +42 -0
  32. package/dist/generic/PubSubManager.js.map +1 -0
  33. package/dist/generic/ResolverBase.d.ts +14 -0
  34. package/dist/generic/ResolverBase.d.ts.map +1 -1
  35. package/dist/generic/ResolverBase.js +50 -0
  36. package/dist/generic/ResolverBase.js.map +1 -1
  37. package/dist/hooks.d.ts +65 -0
  38. package/dist/hooks.d.ts.map +1 -0
  39. package/dist/hooks.js +14 -0
  40. package/dist/hooks.js.map +1 -0
  41. package/dist/index.d.ts +6 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +176 -45
  44. package/dist/index.js.map +1 -1
  45. package/dist/multiTenancy/index.d.ts +47 -0
  46. package/dist/multiTenancy/index.d.ts.map +1 -0
  47. package/dist/multiTenancy/index.js +152 -0
  48. package/dist/multiTenancy/index.js.map +1 -0
  49. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +123 -0
  50. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -0
  51. package/dist/resolvers/IntegrationDiscoveryResolver.js +624 -0
  52. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -0
  53. package/dist/rest/RESTEndpointHandler.d.ts +3 -1
  54. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  55. package/dist/rest/RESTEndpointHandler.js +14 -33
  56. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  57. package/dist/types.d.ts +9 -0
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/types.js.map +1 -1
  60. package/package.json +61 -57
  61. package/src/__tests__/multiTenancy.security.test.ts +334 -0
  62. package/src/__tests__/multiTenancy.test.ts +225 -0
  63. package/src/__tests__/unifiedAuth.test.ts +416 -0
  64. package/src/agents/skip-agent.ts +87 -34
  65. package/src/agents/skip-sdk.ts +13 -0
  66. package/src/apolloServer/index.ts +32 -16
  67. package/src/config.ts +25 -0
  68. package/src/context.ts +205 -98
  69. package/src/generated/generated.ts +2334 -430
  70. package/src/generic/CacheInvalidationResolver.ts +66 -0
  71. package/src/generic/PubSubManager.ts +47 -0
  72. package/src/generic/ResolverBase.ts +53 -0
  73. package/src/hooks.ts +77 -0
  74. package/src/index.ts +203 -49
  75. package/src/multiTenancy/index.ts +183 -0
  76. package/src/resolvers/IntegrationDiscoveryResolver.ts +584 -0
  77. package/src/rest/RESTEndpointHandler.ts +23 -42
  78. package/src/types.ts +10 -0
package/dist/hooks.js ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Server-level extensibility types for MJServer.
3
+ *
4
+ * Provider-level hook types (PreRunViewHook, PostRunViewHook, PreSaveHook)
5
+ * are defined and exported from @memberjunction/core (hookRegistry.ts) so
6
+ * that ProviderBase and BaseEntity can reference them without depending
7
+ * on @memberjunction/server.
8
+ *
9
+ * This file re-exports those types for convenience and adds the
10
+ * server-specific extensibility options (Express middleware, Apollo plugins,
11
+ * schema transformers).
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
package/dist/index.d.ts CHANGED
@@ -17,6 +17,8 @@ export * from './types.js';
17
17
  export { TokenExpiredError, getSystemUser, getSigningKeys, extractUserInfoFromPayload, verifyUserRecord, AuthProviderFactory, IAuthProvider, } from './auth/index.js';
18
18
  export * from './auth/APIKeyScopeAuth.js';
19
19
  export * from './generic/PushStatusResolver.js';
20
+ export * from './generic/PubSubManager.js';
21
+ export * from './generic/CacheInvalidationResolver.js';
20
22
  export * from './generic/ResolverBase.js';
21
23
  export * from './generic/RunViewResolver.js';
22
24
  export * from './resolvers/RunTemplateResolver.js';
@@ -60,7 +62,10 @@ export * from './resolvers/UserViewResolver.js';
60
62
  export * from './resolvers/VersionHistoryResolver.js';
61
63
  export { GetReadOnlyDataSource, GetReadWriteDataSource, GetReadWriteProvider, GetReadOnlyProvider } from './util.js';
62
64
  export * from './generated/generated.js';
63
- export type MJServerOptions = {
65
+ export * from './hooks.js';
66
+ export * from './multiTenancy/index.js';
67
+ import type { ServerExtensibilityOptions } from './hooks.js';
68
+ export type MJServerOptions = ServerExtensibilityOptions & {
64
69
  onBeforeServe?: () => void | Promise<void>;
65
70
  restApiOptions?: Partial<RESTApiOptions>;
66
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,gBAAgB,EAAuD,MAAM,sBAAsB,CAAC;AAOvH,OAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM/C,OAAO,kBAAkB,CAAC;AAM1B,OAAO,EAA2H,cAAc,EAAE,MAAM,aAAa,CAAC;AAiBtK;;;GAGG;AACH,wBAAgB,SAAS,IAAI,gBAAgB,CAM5C;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,cAAc,6DAA6D,CAAC;AAC5E,cAAc,YAAY,CAAC;AAC3B,OAAO,EACH,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,0BAA0B,EAC1B,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,GAChB,MAAM,iBAAiB,CAAC;AACzB,cAAc,2BAA2B,CAAC;AAE1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AAErC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iDAAiD,CAAC;AAChE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErH,cAAc,0BAA0B,CAAC;AAGzC,MAAM,MAAM,eAAe,GAAG;IAC5B,aAAa,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CAC1C,CAAC;AAUF,eAAO,MAAM,SAAS,QAAO,WAAwB,CAAC;AAEtD,eAAO,MAAM,KAAK,GAAU,eAAe,KAAK,CAAC,MAAM,CAAC,EAAE,MAAK,WAAyB,EAAE,UAAU,eAAe,KAAG,OAAO,CAAC,IAAI,CA+ajI,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import dotenv from 'dotenv';
2
2
  dotenv.config({ quiet: true });
3
- import { expressMiddleware } from '@apollo/server/express4';
3
+ import { expressMiddleware } from '@as-integrations/express5';
4
4
  import { mergeSchemas } from '@graphql-tools/schema';
5
5
  import { Metadata, SetProvider, StartupManager as StartupManagerImport } from '@memberjunction/core';
6
6
  import { MJGlobal, UUIDsEqual } from '@memberjunction/global';
@@ -18,11 +18,12 @@ import { sep } from 'node:path';
18
18
  import 'reflect-metadata';
19
19
  import { ReplaySubject } from 'rxjs';
20
20
  import { buildSchemaSync, GraphQLTimestamp } from 'type-graphql';
21
+ import { PubSub } from 'graphql-subscriptions';
21
22
  import sql from 'mssql';
22
23
  import { WebSocketServer } from 'ws';
23
24
  import buildApolloServer from './apolloServer/index.js';
24
25
  import { configInfo, dbDatabase, dbHost, dbPort, dbUsername, graphqlPort, graphqlRootPath, mj_core_schema, websiteRunFromPackage } from './config.js';
25
- import { contextFunction, getUserPayload } from './context.js';
26
+ import { contextFunction, createUnifiedAuthMiddleware, getUserPayload } from './context.js';
26
27
  import { requireSystemUserDirective, publicDirective } from './directives/index.js';
27
28
  import createMSSQLConfig from './orm.js';
28
29
  import { setupRESTEndpoints } from './rest/setupRESTEndpoints.js';
@@ -31,6 +32,10 @@ import { resolve } from 'node:path';
31
32
  import { DataSourceInfo, raiseEvent } from './types.js';
32
33
  import { ScheduledJobsService } from './services/ScheduledJobsService.js';
33
34
  import { LocalCacheManager, TelemetryManager } from '@memberjunction/core';
35
+ import { GetAPIKeyEngine } from '@memberjunction/api-keys';
36
+ import { RedisLocalStorageProvider } from '@memberjunction/redis-provider';
37
+ import { PubSubManager } from './generic/PubSubManager.js';
38
+ import { CACHE_INVALIDATION_TOPIC } from './generic/CacheInvalidationResolver.js';
34
39
  const cacheRefreshInterval = configInfo.databaseSettings.metadataCacheRefreshInterval;
35
40
  /**
36
41
  * Returns the configured database platform type based on the DB_TYPE environment variable.
@@ -53,6 +58,8 @@ export * from './types.js';
53
58
  export { TokenExpiredError, getSystemUser, getSigningKeys, extractUserInfoFromPayload, verifyUserRecord, AuthProviderFactory, } from './auth/index.js';
54
59
  export * from './auth/APIKeyScopeAuth.js';
55
60
  export * from './generic/PushStatusResolver.js';
61
+ export * from './generic/PubSubManager.js';
62
+ export * from './generic/CacheInvalidationResolver.js';
56
63
  export * from './generic/ResolverBase.js';
57
64
  export * from './generic/RunViewResolver.js';
58
65
  export * from './resolvers/RunTemplateResolver.js';
@@ -96,6 +103,28 @@ export * from './resolvers/UserViewResolver.js';
96
103
  export * from './resolvers/VersionHistoryResolver.js';
97
104
  export { GetReadOnlyDataSource, GetReadWriteDataSource, GetReadWriteProvider, GetReadOnlyProvider } from './util.js';
98
105
  export * from './generated/generated.js';
106
+ export * from './hooks.js';
107
+ export * from './multiTenancy/index.js';
108
+ import { HookRegistry } from '@memberjunction/core';
109
+ import { createTenantMiddleware, createTenantPreRunViewHook, createTenantPreSaveHook } from './multiTenancy/index.js';
110
+ /**
111
+ * Register a hook that may be a plain function or a `{ hook, Priority, Namespace }` object.
112
+ * Dynamic packages (e.g., BCSaaS) return hooks in object form to declare registration metadata.
113
+ */
114
+ function registerHookEntry(hookName, entry) {
115
+ if (typeof entry === 'function') {
116
+ HookRegistry.Register(hookName, entry);
117
+ }
118
+ else if (entry && typeof entry === 'object' && 'hook' in entry) {
119
+ const { hook, Priority, Namespace } = entry;
120
+ const options = {};
121
+ if (Priority != null)
122
+ options.Priority = Priority;
123
+ if (Namespace != null)
124
+ options.Namespace = Namespace;
125
+ HookRegistry.Register(hookName, hook, options);
126
+ }
127
+ }
99
128
  const localPath = (p) => {
100
129
  // Convert import.meta.url to a local directory path
101
130
  const dirname = fileURLToPath(new URL('.', import.meta.url));
@@ -242,9 +271,52 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
242
271
  tm.SetEnabled(false);
243
272
  console.log('Server telemetry disabled');
244
273
  }
245
- // Initialize LocalCacheManager with the server-side storage provider (in-memory)
246
- await LocalCacheManager.Instance.Initialize(Metadata.Provider.LocalStorageProvider);
247
- console.log('LocalCacheManager initialized');
274
+ // Optionally inject Redis as the shared storage provider for cross-server cache invalidation
275
+ if (process.env.REDIS_URL) {
276
+ const redisProvider = new RedisLocalStorageProvider({
277
+ url: process.env.REDIS_URL,
278
+ keyPrefix: process.env.REDIS_KEY_PREFIX || 'mj',
279
+ enablePubSub: true,
280
+ enableLogging: true,
281
+ });
282
+ Metadata.Provider.SetLocalStorageProvider(redisProvider);
283
+ await redisProvider.StartListening();
284
+ // Connect Redis pub/sub events to LocalCacheManager callback dispatch
285
+ // so cross-server cache invalidation messages are routed to registered callbacks
286
+ redisProvider.OnCacheChanged((event) => {
287
+ const sourceShort = event.SourceServerId ? event.SourceServerId.substring(0, 8) : 'unknown';
288
+ console.log(`[MJAPI] Redis pub/sub → DispatchCacheChange: ${event.Action} for "${event.CacheKey}" from server ${sourceShort}`);
289
+ LocalCacheManager.Instance.DispatchCacheChange(event);
290
+ // Also broadcast to connected browser clients via GraphQL subscription
291
+ // Extract entity name from the cache key (format: EntityName|Filter|OrderBy|...)
292
+ const entityName = event.CacheKey ? event.CacheKey.split('|')[0] : '';
293
+ if (entityName) {
294
+ PubSubManager.Instance.Publish(CACHE_INVALIDATION_TOPIC, {
295
+ entityName,
296
+ primaryKeyValues: null, // entity-level invalidation
297
+ action: event.Action || 'save',
298
+ sourceServerId: event.SourceServerId || 'unknown',
299
+ timestamp: new Date(),
300
+ });
301
+ }
302
+ });
303
+ console.log(`Redis cache provider connected: ${process.env.REDIS_URL}`);
304
+ }
305
+ // If Redis is available, swap LocalCacheManager's storage provider to Redis.
306
+ // LocalCacheManager may have already been initialized (with in-memory provider)
307
+ // during engine loading. SetStorageProvider migrates cached data to Redis.
308
+ if (process.env.REDIS_URL) {
309
+ await LocalCacheManager.Instance.SetStorageProvider(Metadata.Provider.LocalStorageProvider);
310
+ console.log('LocalCacheManager: storage provider swapped to Redis');
311
+ }
312
+ // Ensure LocalCacheManager is initialized (no-op if already done during engine loading)
313
+ if (!LocalCacheManager.Instance.IsInitialized) {
314
+ await LocalCacheManager.Instance.Initialize(Metadata.Provider.LocalStorageProvider);
315
+ console.log('LocalCacheManager initialized');
316
+ }
317
+ // Initialize APIKeyEngine singleton — reads apiKeyGeneration from mj.config.cjs automatically
318
+ // This must happen before any request handler calls GetAPIKeyEngine()
319
+ GetAPIKeyEngine();
248
320
  setupComplete$.next(true);
249
321
  raiseEvent('setupComplete', dataSources, null, this);
250
322
  /******TEST HARNESS FOR CHANGE DETECTION */
@@ -271,6 +343,14 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
271
343
  }
272
344
  }));
273
345
  const resolvers = dynamicModules.flatMap((module) => Object.values(module).filter((value) => typeof value === 'function'));
346
+ // Create an explicit PubSub instance so we can reference it outside of resolvers
347
+ // graphql-subscriptions v3 renamed asyncIterator→asyncIterableIterator, but
348
+ // type-graphql still calls asyncIterator. Shim for compatibility.
349
+ const pubSub = new PubSub();
350
+ if (!pubSub.asyncIterator && typeof pubSub.asyncIterableIterator === 'function') {
351
+ pubSub.asyncIterator = pubSub.asyncIterableIterator;
352
+ }
353
+ PubSubManager.Instance.SetPubSubEngine(pubSub);
274
354
  let schema = mergeSchemas({
275
355
  schemas: [
276
356
  buildSchemaSync({
@@ -278,12 +358,19 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
278
358
  validate: false,
279
359
  scalarsMap: [{ type: Date, scalar: GraphQLTimestamp }],
280
360
  emitSchemaFile: websiteRunFromPackage !== 1,
361
+ pubSub,
281
362
  }),
282
363
  ],
283
364
  typeDefs: [requireSystemUserDirective.typeDefs, publicDirective.typeDefs],
284
365
  });
285
366
  schema = requireSystemUserDirective.transformer(schema);
286
367
  schema = publicDirective.transformer(schema);
368
+ // Apply user-provided schema transformers (after built-in directive transformers)
369
+ if (options?.SchemaTransformers) {
370
+ for (const transformer of options.SchemaTransformers) {
371
+ schema = transformer(schema);
372
+ }
373
+ }
287
374
  const httpServer = createServer(app);
288
375
  const webSocketServer = new WebSocketServer({ server: httpServer, path: graphqlRootPath });
289
376
  const serverCleanup = useServer({
@@ -306,7 +393,7 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
306
393
  }
307
394
  },
308
395
  }, webSocketServer);
309
- const apolloServer = buildApolloServer({ schema }, { httpServer, serverCleanup });
396
+ const apolloServer = buildApolloServer({ schema }, { httpServer, serverCleanup }, options?.ApolloPlugins);
310
397
  await apolloServer.start();
311
398
  // Fix #8: Add compression for better throughput performance
312
399
  app.use(compression({
@@ -328,63 +415,68 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
328
415
  // High compression level (good balance between CPU and compression ratio)
329
416
  level: 6
330
417
  }));
331
- // Setup REST API endpoints BEFORE GraphQL (since graphqlRootPath may be '/' which catches all routes)
332
- const authMiddleware = async (req, res, next) => {
333
- try {
334
- const sessionIdRaw = req.headers['x-session-id'];
335
- const requestDomain = new URL(req.headers.origin || '').hostname;
336
- const sessionId = sessionIdRaw ? sessionIdRaw.toString() : '';
337
- const bearerToken = req.headers.authorization ?? '';
338
- const apiKey = String(req.headers['x-mj-api-key']);
339
- const userPayload = await getUserPayload(bearerToken, sessionId, dataSources, requestDomain, apiKey);
340
- if (!userPayload) {
341
- return res.status(401).json({ error: 'Invalid token' });
342
- }
343
- // Set both req.user (standard Express convention) and req['mjUser'] (MJ REST convention)
344
- // Note: userPayload contains { userRecord: UserInfo, email, sessionId }
345
- // The mjUser property expects the UserInfo directly (userRecord)
346
- req.user = userPayload;
347
- req['mjUser'] = userPayload.userRecord;
348
- next();
349
- }
350
- catch (error) {
351
- console.error('Auth error:', error);
352
- return res.status(401).json({ error: 'Authentication failed' });
418
+ // Apply user-provided Express middleware (after compression, before routes)
419
+ if (options?.ExpressMiddlewareBefore) {
420
+ for (const mw of options.ExpressMiddlewareBefore) {
421
+ app.use(mw);
353
422
  }
354
- };
355
- // Build public URL for OAuth callbacks
423
+ }
424
+ // Escape hatch for advanced Express app configuration
425
+ if (options?.ConfigureExpressApp) {
426
+ await Promise.resolve(options.ConfigureExpressApp(app));
427
+ }
428
+ // ─── OAuth callback routes (unauthenticated, registered BEFORE auth) ─────
356
429
  const oauthPublicUrl = configInfo.publicUrl || `${configInfo.baseUrl}:${configInfo.graphqlPort}${configInfo.graphqlRootPath || ''}`;
357
430
  console.log(`[OAuth] publicUrl: ${oauthPublicUrl}`);
358
- // Set up OAuth callback routes at /oauth (independent of REST API)
359
- // These must be registered BEFORE GraphQL middleware since graphqlRootPath may be '/'
431
+ let oauthAuthenticatedRouter;
360
432
  if (oauthPublicUrl) {
361
433
  const { callbackRouter, authenticatedRouter } = createOAuthCallbackHandler({
362
434
  publicUrl: oauthPublicUrl,
363
- // TODO: These should be configurable to point to the MJ Explorer UI
364
435
  successRedirectUrl: `${oauthPublicUrl}/oauth/success`,
365
436
  errorRedirectUrl: `${oauthPublicUrl}/oauth/error`
366
437
  });
367
- // Create CORS middleware for OAuth routes (needed for cross-origin requests from frontend)
438
+ oauthAuthenticatedRouter = authenticatedRouter;
368
439
  const oauthCors = cors();
369
440
  // OAuth callback is unauthenticated (called by external auth server)
370
441
  app.use('/oauth', oauthCors, callbackRouter);
371
442
  console.log('[OAuth] Callback route registered at /oauth/callback');
372
- // OAuth status, initiate, and exchange endpoints require authentication
373
- // Must also have CORS for frontend requests and JSON body parsing
374
- app.use('/oauth', oauthCors, BodyParser.json(), authMiddleware, authenticatedRouter);
443
+ }
444
+ // ─── Global CORS (before auth so 401 responses include CORS headers) ─────
445
+ // Without this, the browser blocks 401 responses from the auth middleware
446
+ // because they lack Access-Control-Allow-Origin headers, preventing the
447
+ // client from reading the error code and triggering token refresh.
448
+ app.use(cors());
449
+ // ─── Unified auth middleware (replaces both REST authMiddleware and contextFunction auth) ─────
450
+ app.use(createUnifiedAuthMiddleware(dataSources));
451
+ // ─── Built-in post-auth middleware (multi-tenancy) ─────
452
+ // Config-driven multi-tenancy middleware runs after auth so it can read req.userPayload.
453
+ if (configInfo.multiTenancy?.enabled) {
454
+ const tenantMiddleware = createTenantMiddleware(configInfo.multiTenancy);
455
+ app.use(tenantMiddleware);
456
+ }
457
+ // ─── Post-auth middleware from plugins ─────
458
+ // Middleware here has access to the authenticated user via req.userPayload.
459
+ // Use this for tenant context resolution, org membership loading, etc.
460
+ if (options?.ExpressMiddlewarePostAuth) {
461
+ for (const mw of options.ExpressMiddlewarePostAuth) {
462
+ app.use(mw);
463
+ }
464
+ }
465
+ // ─── OAuth authenticated routes (auth already handled by unified middleware) ─────
466
+ if (oauthAuthenticatedRouter) {
467
+ const oauthCors = cors();
468
+ app.use('/oauth', oauthCors, BodyParser.json(), oauthAuthenticatedRouter);
375
469
  console.log('[OAuth] Authenticated routes registered at /oauth/status, /oauth/initiate, and /oauth/exchange');
376
470
  }
377
- // Get REST API configuration
471
+ // ─── REST API endpoints (auth already handled by unified middleware) ─────
378
472
  const restApiConfig = {
379
473
  enabled: configInfo.restApiOptions?.enabled ?? false,
380
474
  includeEntities: configInfo.restApiOptions?.includeEntities,
381
475
  excludeEntities: configInfo.restApiOptions?.excludeEntities,
382
476
  };
383
- // Apply options from server options if provided (these override the config file)
384
477
  if (options?.restApiOptions) {
385
478
  Object.assign(restApiConfig, options.restApiOptions);
386
479
  }
387
- // Get REST API configuration from environment variables if present (env vars override everything)
388
480
  if (process.env.MJ_REST_API_ENABLED !== undefined) {
389
481
  restApiConfig.enabled = process.env.MJ_REST_API_ENABLED === 'true';
390
482
  if (restApiConfig.enabled) {
@@ -397,11 +489,9 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
397
489
  if (process.env.MJ_REST_API_EXCLUDE_ENTITIES) {
398
490
  restApiConfig.excludeEntities = process.env.MJ_REST_API_EXCLUDE_ENTITIES.split(',').map(e => e.trim());
399
491
  }
400
- // Set up REST endpoints with the configured options and auth middleware
401
- setupRESTEndpoints(app, restApiConfig, authMiddleware);
402
- // GraphQL middleware (after REST so /api/v1/* routes are handled first)
403
- // Note: Type assertion needed due to @apollo/server bundling older @types/express types
404
- // that are incompatible with Express 5.x types (missing 'param' property)
492
+ // No per-route authMiddleware needed unified auth middleware already ran
493
+ setupRESTEndpoints(app, restApiConfig);
494
+ // ─── GraphQL middleware (contextFunction reads req.userPayload, no re-auth) ─────
405
495
  app.use(graphqlRootPath, cors(), BodyParser.json({ limit: '50mb' }),
406
496
  // Express 5 leaves req.body as undefined for non-JSON or empty bodies;
407
497
  // Apollo Server's expressMiddleware requires req.body to be defined.
@@ -413,6 +503,12 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
413
503
  dataSources // all data source
414
504
  }),
415
505
  }));
506
+ // ─── Post-route middleware (error handlers, catch-alls) ─────
507
+ if (options?.ExpressMiddlewareAfter) {
508
+ for (const mw of options.ExpressMiddlewareAfter) {
509
+ app.use(mw);
510
+ }
511
+ }
416
512
  // Initialize and start scheduled jobs service if enabled
417
513
  let scheduledJobsService = null;
418
514
  if (configInfo.scheduledJobs?.enabled) {
@@ -426,6 +522,41 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
426
522
  // Don't throw - allow server to start even if scheduled jobs fail
427
523
  }
428
524
  }
525
+ // Register provider-level hooks with the global HookRegistry.
526
+ // Each entry can be a plain function or a { hook, Priority, Namespace } object.
527
+ if (options?.PreRunViewHooks) {
528
+ for (const entry of options.PreRunViewHooks) {
529
+ registerHookEntry('PreRunView', entry);
530
+ }
531
+ }
532
+ if (options?.PostRunViewHooks) {
533
+ for (const entry of options.PostRunViewHooks) {
534
+ registerHookEntry('PostRunView', entry);
535
+ }
536
+ }
537
+ if (options?.PreSaveHooks) {
538
+ for (const entry of options.PreSaveHooks) {
539
+ registerHookEntry('PreSave', entry);
540
+ }
541
+ }
542
+ // Auto-register multi-tenancy hooks when enabled in config
543
+ // (The tenant Express middleware was already registered above in the post-auth slot)
544
+ if (configInfo.multiTenancy?.enabled) {
545
+ console.log('[MultiTenancy] Enabled — registering tenant isolation hooks');
546
+ const tenantConfig = configInfo.multiTenancy;
547
+ // Register tenant PreRunView hook (injects WHERE clauses)
548
+ // Priority 50 + namespace allows middle layers to replace with their own implementation
549
+ HookRegistry.Register('PreRunView', createTenantPreRunViewHook(tenantConfig), {
550
+ Priority: 50,
551
+ Namespace: 'mj:tenantFilter',
552
+ });
553
+ // Register tenant PreSave hook (validates tenant column on writes)
554
+ HookRegistry.Register('PreSave', createTenantPreSaveHook(tenantConfig), {
555
+ Priority: 50,
556
+ Namespace: 'mj:tenantSave',
557
+ });
558
+ console.log(`[MultiTenancy] Context source: ${tenantConfig.contextSource}, scoping: ${tenantConfig.scopingStrategy}, write protection: ${tenantConfig.writeProtection}`);
559
+ }
429
560
  if (options?.onBeforeServe) {
430
561
  await Promise.resolve(options.onBeforeServe());
431
562
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Multi-tenant data separation framework.
3
+ *
4
+ * Provides factory functions that create Express middleware and provider hooks
5
+ * based on the `multiTenancy` section of mj.config.cjs. All functions return
6
+ * standard hook/middleware types from WS2 so they integrate seamlessly with
7
+ * the MJServer extensibility system.
8
+ */
9
+ import type { RequestHandler } from 'express';
10
+ import type { PreRunViewHook, PreSaveHook } from '@memberjunction/core';
11
+ import { type UserInfo, type TenantContext } from '@memberjunction/core';
12
+ import type { MultiTenancyConfig } from '../config.js';
13
+ /** Custom tenant context extractor signature */
14
+ export type TenantContextExtractor = (user: UserInfo, req: Express.Request) => Promise<{
15
+ TenantID: string;
16
+ } | null>;
17
+ /**
18
+ * Creates Express middleware that resolves and attaches TenantContext
19
+ * to the authenticated user's UserInfo for each request.
20
+ *
21
+ * This middleware runs in the post-auth slot (after `createUnifiedAuthMiddleware`)
22
+ * so `req.userPayload` is available. It reads the tenant ID from the configured
23
+ * source and attaches it directly to `userPayload.userRecord.TenantContext`.
24
+ *
25
+ * By the time GraphQL resolvers or REST handlers run, the contextUser already
26
+ * has TenantContext set — no deferred pickup via `req['__mj_tenantId']` needed.
27
+ */
28
+ export declare function createTenantMiddleware(config: MultiTenancyConfig): RequestHandler;
29
+ /**
30
+ * Attaches TenantContext to a UserInfo object.
31
+ * Called from the GraphQL context function after authentication.
32
+ */
33
+ export declare function attachTenantContext(user: UserInfo, tenantId: string, source: TenantContext['Source']): void;
34
+ /**
35
+ * Creates a PreRunViewHook that auto-injects tenant WHERE clauses
36
+ * into RunView queries for scoped entities.
37
+ */
38
+ export declare function createTenantPreRunViewHook(config: MultiTenancyConfig): PreRunViewHook;
39
+ /**
40
+ * Creates a PreSaveHook that validates the tenant column on writes.
41
+ *
42
+ * In 'strict' mode, rejects saves where the tenant column value doesn't
43
+ * match the user's TenantContext. In 'log' mode, warns but allows. In
44
+ * 'off' mode, this hook is a no-op.
45
+ */
46
+ export declare function createTenantPreSaveHook(config: MultiTenancyConfig): PreSaveHook;
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/multiTenancy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAY,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,gDAAgD;AAChD,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,OAAO,CAAC,OAAO,KACjB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,cAAc,CAiBjF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC9B,IAAI,CAEN;AAwCD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,cAAc,CA4BrF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,WAAW,CAwC/E"}