@memberjunction/server 5.8.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 (69) hide show
  1. package/README.md +1 -0
  2. package/dist/apolloServer/index.d.ts +10 -2
  3. package/dist/apolloServer/index.d.ts.map +1 -1
  4. package/dist/apolloServer/index.js +22 -8
  5. package/dist/apolloServer/index.js.map +1 -1
  6. package/dist/config.d.ts +125 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +23 -0
  9. package/dist/config.js.map +1 -1
  10. package/dist/context.d.ts +17 -0
  11. package/dist/context.d.ts.map +1 -1
  12. package/dist/context.js +144 -62
  13. package/dist/context.js.map +1 -1
  14. package/dist/generated/generated.d.ts +207 -0
  15. package/dist/generated/generated.d.ts.map +1 -1
  16. package/dist/generated/generated.js +1112 -76
  17. package/dist/generated/generated.js.map +1 -1
  18. package/dist/generic/CacheInvalidationResolver.d.ts +32 -0
  19. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -0
  20. package/dist/generic/CacheInvalidationResolver.js +80 -0
  21. package/dist/generic/CacheInvalidationResolver.js.map +1 -0
  22. package/dist/generic/PubSubManager.d.ts +27 -0
  23. package/dist/generic/PubSubManager.d.ts.map +1 -0
  24. package/dist/generic/PubSubManager.js +42 -0
  25. package/dist/generic/PubSubManager.js.map +1 -0
  26. package/dist/generic/ResolverBase.d.ts +14 -0
  27. package/dist/generic/ResolverBase.d.ts.map +1 -1
  28. package/dist/generic/ResolverBase.js +50 -0
  29. package/dist/generic/ResolverBase.js.map +1 -1
  30. package/dist/hooks.d.ts +65 -0
  31. package/dist/hooks.d.ts.map +1 -0
  32. package/dist/hooks.js +14 -0
  33. package/dist/hooks.js.map +1 -0
  34. package/dist/index.d.ts +6 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +172 -45
  37. package/dist/index.js.map +1 -1
  38. package/dist/multiTenancy/index.d.ts +47 -0
  39. package/dist/multiTenancy/index.d.ts.map +1 -0
  40. package/dist/multiTenancy/index.js +152 -0
  41. package/dist/multiTenancy/index.js.map +1 -0
  42. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +123 -0
  43. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -0
  44. package/dist/resolvers/IntegrationDiscoveryResolver.js +624 -0
  45. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -0
  46. package/dist/rest/RESTEndpointHandler.d.ts +3 -1
  47. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  48. package/dist/rest/RESTEndpointHandler.js +14 -33
  49. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  50. package/dist/types.d.ts +9 -0
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/types.js.map +1 -1
  53. package/package.json +61 -57
  54. package/src/__tests__/multiTenancy.security.test.ts +334 -0
  55. package/src/__tests__/multiTenancy.test.ts +225 -0
  56. package/src/__tests__/unifiedAuth.test.ts +416 -0
  57. package/src/apolloServer/index.ts +32 -16
  58. package/src/config.ts +25 -0
  59. package/src/context.ts +205 -98
  60. package/src/generated/generated.ts +736 -1
  61. package/src/generic/CacheInvalidationResolver.ts +66 -0
  62. package/src/generic/PubSubManager.ts +47 -0
  63. package/src/generic/ResolverBase.ts +53 -0
  64. package/src/hooks.ts +77 -0
  65. package/src/index.ts +198 -49
  66. package/src/multiTenancy/index.ts +183 -0
  67. package/src/resolvers/IntegrationDiscoveryResolver.ts +584 -0
  68. package/src/rest/RESTEndpointHandler.ts +23 -42
  69. 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;AAkBtK;;;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,CAmbjI,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';
@@ -32,6 +33,9 @@ import { DataSourceInfo, raiseEvent } from './types.js';
32
33
  import { ScheduledJobsService } from './services/ScheduledJobsService.js';
33
34
  import { LocalCacheManager, TelemetryManager } from '@memberjunction/core';
34
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';
35
39
  const cacheRefreshInterval = configInfo.databaseSettings.metadataCacheRefreshInterval;
36
40
  /**
37
41
  * Returns the configured database platform type based on the DB_TYPE environment variable.
@@ -54,6 +58,8 @@ export * from './types.js';
54
58
  export { TokenExpiredError, getSystemUser, getSigningKeys, extractUserInfoFromPayload, verifyUserRecord, AuthProviderFactory, } from './auth/index.js';
55
59
  export * from './auth/APIKeyScopeAuth.js';
56
60
  export * from './generic/PushStatusResolver.js';
61
+ export * from './generic/PubSubManager.js';
62
+ export * from './generic/CacheInvalidationResolver.js';
57
63
  export * from './generic/ResolverBase.js';
58
64
  export * from './generic/RunViewResolver.js';
59
65
  export * from './resolvers/RunTemplateResolver.js';
@@ -97,6 +103,28 @@ export * from './resolvers/UserViewResolver.js';
97
103
  export * from './resolvers/VersionHistoryResolver.js';
98
104
  export { GetReadOnlyDataSource, GetReadWriteDataSource, GetReadWriteProvider, GetReadOnlyProvider } from './util.js';
99
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
+ }
100
128
  const localPath = (p) => {
101
129
  // Convert import.meta.url to a local directory path
102
130
  const dirname = fileURLToPath(new URL('.', import.meta.url));
@@ -243,9 +271,49 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
243
271
  tm.SetEnabled(false);
244
272
  console.log('Server telemetry disabled');
245
273
  }
246
- // Initialize LocalCacheManager with the server-side storage provider (in-memory)
247
- await LocalCacheManager.Instance.Initialize(Metadata.Provider.LocalStorageProvider);
248
- 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
+ }
249
317
  // Initialize APIKeyEngine singleton — reads apiKeyGeneration from mj.config.cjs automatically
250
318
  // This must happen before any request handler calls GetAPIKeyEngine()
251
319
  GetAPIKeyEngine();
@@ -275,6 +343,14 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
275
343
  }
276
344
  }));
277
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);
278
354
  let schema = mergeSchemas({
279
355
  schemas: [
280
356
  buildSchemaSync({
@@ -282,12 +358,19 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
282
358
  validate: false,
283
359
  scalarsMap: [{ type: Date, scalar: GraphQLTimestamp }],
284
360
  emitSchemaFile: websiteRunFromPackage !== 1,
361
+ pubSub,
285
362
  }),
286
363
  ],
287
364
  typeDefs: [requireSystemUserDirective.typeDefs, publicDirective.typeDefs],
288
365
  });
289
366
  schema = requireSystemUserDirective.transformer(schema);
290
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
+ }
291
374
  const httpServer = createServer(app);
292
375
  const webSocketServer = new WebSocketServer({ server: httpServer, path: graphqlRootPath });
293
376
  const serverCleanup = useServer({
@@ -310,7 +393,7 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
310
393
  }
311
394
  },
312
395
  }, webSocketServer);
313
- const apolloServer = buildApolloServer({ schema }, { httpServer, serverCleanup });
396
+ const apolloServer = buildApolloServer({ schema }, { httpServer, serverCleanup }, options?.ApolloPlugins);
314
397
  await apolloServer.start();
315
398
  // Fix #8: Add compression for better throughput performance
316
399
  app.use(compression({
@@ -332,63 +415,68 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
332
415
  // High compression level (good balance between CPU and compression ratio)
333
416
  level: 6
334
417
  }));
335
- // Setup REST API endpoints BEFORE GraphQL (since graphqlRootPath may be '/' which catches all routes)
336
- const authMiddleware = async (req, res, next) => {
337
- try {
338
- const sessionIdRaw = req.headers['x-session-id'];
339
- const requestDomain = new URL(req.headers.origin || '').hostname;
340
- const sessionId = sessionIdRaw ? sessionIdRaw.toString() : '';
341
- const bearerToken = req.headers.authorization ?? '';
342
- const apiKey = String(req.headers['x-mj-api-key']);
343
- const userPayload = await getUserPayload(bearerToken, sessionId, dataSources, requestDomain, apiKey);
344
- if (!userPayload) {
345
- return res.status(401).json({ error: 'Invalid token' });
346
- }
347
- // Set both req.user (standard Express convention) and req['mjUser'] (MJ REST convention)
348
- // Note: userPayload contains { userRecord: UserInfo, email, sessionId }
349
- // The mjUser property expects the UserInfo directly (userRecord)
350
- req.user = userPayload;
351
- req['mjUser'] = userPayload.userRecord;
352
- next();
353
- }
354
- catch (error) {
355
- console.error('Auth error:', error);
356
- 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);
357
422
  }
358
- };
359
- // 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) ─────
360
429
  const oauthPublicUrl = configInfo.publicUrl || `${configInfo.baseUrl}:${configInfo.graphqlPort}${configInfo.graphqlRootPath || ''}`;
361
430
  console.log(`[OAuth] publicUrl: ${oauthPublicUrl}`);
362
- // Set up OAuth callback routes at /oauth (independent of REST API)
363
- // These must be registered BEFORE GraphQL middleware since graphqlRootPath may be '/'
431
+ let oauthAuthenticatedRouter;
364
432
  if (oauthPublicUrl) {
365
433
  const { callbackRouter, authenticatedRouter } = createOAuthCallbackHandler({
366
434
  publicUrl: oauthPublicUrl,
367
- // TODO: These should be configurable to point to the MJ Explorer UI
368
435
  successRedirectUrl: `${oauthPublicUrl}/oauth/success`,
369
436
  errorRedirectUrl: `${oauthPublicUrl}/oauth/error`
370
437
  });
371
- // Create CORS middleware for OAuth routes (needed for cross-origin requests from frontend)
438
+ oauthAuthenticatedRouter = authenticatedRouter;
372
439
  const oauthCors = cors();
373
440
  // OAuth callback is unauthenticated (called by external auth server)
374
441
  app.use('/oauth', oauthCors, callbackRouter);
375
442
  console.log('[OAuth] Callback route registered at /oauth/callback');
376
- // OAuth status, initiate, and exchange endpoints require authentication
377
- // Must also have CORS for frontend requests and JSON body parsing
378
- 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);
379
469
  console.log('[OAuth] Authenticated routes registered at /oauth/status, /oauth/initiate, and /oauth/exchange');
380
470
  }
381
- // Get REST API configuration
471
+ // ─── REST API endpoints (auth already handled by unified middleware) ─────
382
472
  const restApiConfig = {
383
473
  enabled: configInfo.restApiOptions?.enabled ?? false,
384
474
  includeEntities: configInfo.restApiOptions?.includeEntities,
385
475
  excludeEntities: configInfo.restApiOptions?.excludeEntities,
386
476
  };
387
- // Apply options from server options if provided (these override the config file)
388
477
  if (options?.restApiOptions) {
389
478
  Object.assign(restApiConfig, options.restApiOptions);
390
479
  }
391
- // Get REST API configuration from environment variables if present (env vars override everything)
392
480
  if (process.env.MJ_REST_API_ENABLED !== undefined) {
393
481
  restApiConfig.enabled = process.env.MJ_REST_API_ENABLED === 'true';
394
482
  if (restApiConfig.enabled) {
@@ -401,11 +489,9 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
401
489
  if (process.env.MJ_REST_API_EXCLUDE_ENTITIES) {
402
490
  restApiConfig.excludeEntities = process.env.MJ_REST_API_EXCLUDE_ENTITIES.split(',').map(e => e.trim());
403
491
  }
404
- // Set up REST endpoints with the configured options and auth middleware
405
- setupRESTEndpoints(app, restApiConfig, authMiddleware);
406
- // GraphQL middleware (after REST so /api/v1/* routes are handled first)
407
- // Note: Type assertion needed due to @apollo/server bundling older @types/express types
408
- // 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) ─────
409
495
  app.use(graphqlRootPath, cors(), BodyParser.json({ limit: '50mb' }),
410
496
  // Express 5 leaves req.body as undefined for non-JSON or empty bodies;
411
497
  // Apollo Server's expressMiddleware requires req.body to be defined.
@@ -417,6 +503,12 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
417
503
  dataSources // all data source
418
504
  }),
419
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
+ }
420
512
  // Initialize and start scheduled jobs service if enabled
421
513
  let scheduledJobsService = null;
422
514
  if (configInfo.scheduledJobs?.enabled) {
@@ -430,6 +522,41 @@ export const serve = async (resolverPaths, app = createApp(), options) => {
430
522
  // Don't throw - allow server to start even if scheduled jobs fail
431
523
  }
432
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
+ }
433
560
  if (options?.onBeforeServe) {
434
561
  await Promise.resolve(options.onBeforeServe());
435
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":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAoB,WAAW,EAAE,cAAc,IAAI,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACvH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAC7I,OAAO,EAAE,6BAA6B,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,WAAW,MAAM,aAAa,CAAC,CAAC,6BAA6B;AACpE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAwB,MAAM,SAAS,CAAC;AAC/C,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,EAAgB,MAAM,cAAc,CAAC;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAkB,MAAM,aAAa,CAAC;AACtK,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,iBAAiB,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAkB,gBAAgB,EAAkB,MAAM,sBAAsB,CAAC;AAE3G,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAElF,MAAM,oBAAoB,GAAG,UAAU,CAAC,gBAAgB,CAAC,4BAA4B,CAAC;AAEtF;;;GAGG;AACH,MAAM,UAAU,SAAS;IACrB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;IAClD,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACtE,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,OAAO,WAAW,CAAC;AACvB,CAAC;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,GAEtB,MAAM,iBAAiB,CAAC;AACzB,cAAc,2BAA2B,CAAC;AAE1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,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;AACzC,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AAGxC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEtH;;;GAGG;AACH,SAAS,iBAAiB,CAAI,QAAgB,EAAE,KAA6B;IAC3E,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACjE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAA2B,CAAC;QAClE,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,IAAI,QAAQ,IAAI,IAAI;YAAE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAClD,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;QACrD,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAOD,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE;IAC9B,oDAAoD;IACpD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,mEAAmE;IACnE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAgB,EAAE,CAAC,OAAO,EAAE,CAAC;AAEtD,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,aAA4B,EAAE,MAAmB,SAAS,EAAE,EAAE,OAAyB,EAAiB,EAAE;IACpI,MAAM,kBAAkB,GAAG,CAAC,gCAAgC,EAAE,2BAA2B,EAAE,6BAA6B,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEzI,MAAM,qBAAqB,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,kBAAkB,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,yBAAyB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAqB,EAAE,CAAC;IAEzC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,kEAAkE;QAClE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;QAEzH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW,CAAC;QACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU,CAAC;QAChF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QACxE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAE5E,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YACjC,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,IAAI,EAAE;YAC1D,GAAG,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC;YACzD,iBAAiB,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,iBAAiB,IAAI,KAAK;YACzF,uBAAuB,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,oBAAoB,IAAI,KAAK;SACnG,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnC,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;QAE9E,yEAAyE;QACzE,2EAA2E;QAC3E,MAAM,eAAe,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACtD,WAAW,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC;YAClC,UAAU,EAAE,eAAe;YAC3B,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC,CAAC;QAEJ,iCAAiC;QACjC,MAAM,kBAAkB,GAAG;YACzB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,MAAM;YAChB,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,IAAI,EAAE;YACrE,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC;SACrE,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,4BAA4B,CACnD,kBAAkB,EAClB,cAAc,EACd,oBAAoB,GAAG,IAAI,CAC5B,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC9C,MAAM,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACpC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEtB,sCAAsC;QACtC,MAAM,sBAAsB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAErD,sBAAsB;QACtB,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC3F,MAAM,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,QAAQ,CAAC,CAAC;QAEvF,8EAA8E;QAC9E,uEAAuE;QACvE,6EAA6E;QAC7E,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC;QACxE,qBAAqB,CAAC,kBAAkB,GAAG,KAAK,WAC9C,IAAwB,EAAE,KAAa,EAAE,UAAsB,EAAE,WAAqD;YAEtH,MAAM,OAAO,GAAG,IAA0C,CAAC;YAC3D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,OAAO,CAAC,OAA4B,CAAC;gBACvD,wEAAwE;gBACxE,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC9C,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;YACD,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACjF,CAAC,CAAC;QAEF,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC7G,CAAC;SAAM,CAAC;QACN,kEAAkE;QAClE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAEzD,0EAA0E;QAC1E,iFAAiF;QACjF,0EAA0E;QAC1E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,OAAO,CAAC,KAAK,CAAC,0EAA0E,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAErB,WAAW,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAC,CAAC,CAAC,CAAC;QAErJ,6GAA6G;QAC7G,IAAI,UAAU,CAAC,kBAAkB,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC;YACnE,MAAM,cAAc,GAAG;gBACrB,GAAG,iBAAiB,EAAE;gBACtB,IAAI,EAAE,UAAU,CAAC,kBAAkB;gBACnC,QAAQ,EAAE,UAAU,CAAC,kBAAkB;aACxC,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAE5D,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC/B,OAAO,CAAC,KAAK,CAAC,8EAA8E,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7G,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;YAE7B,WAAW,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAC,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,kBAAkB,EAAC,CAAC,CAAC,CAAC;YAC/K,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,2BAA2B,CAAC,IAAI,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;QAC3F,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC7G,CAAC;IAED,6EAA6E;IAC7E,oDAAoD;IACpD,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC,aAAa,CAAC;IACvF,CAAC;IAED,8CAA8C;IAC9C,MAAM,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC;IACrC,IAAI,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAClC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;YAChC,EAAE,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,KAAuB,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,wCAAwC,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC,CAAC;IAClG,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAED,6FAA6F;IAC7F,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,IAAI,yBAAyB,CAAC;YAClD,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;YAC1B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI;YAC/C,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACF,QAAQ,CAAC,QAAoC,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;QACtF,MAAM,aAAa,CAAC,cAAc,EAAE,CAAC;QAErC,sEAAsE;QACtE,iFAAiF;QACjF,aAAa,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE;YACnC,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5F,OAAO,CAAC,GAAG,CAAC,gDAAgD,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,QAAQ,iBAAiB,WAAW,EAAE,CAAC,CAAC;YAC/H,iBAAiB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAEtD,uEAAuE;YACvE,iFAAiF;YACjF,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,IAAI,UAAU,EAAE,CAAC;gBACb,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE;oBACrD,UAAU;oBACV,gBAAgB,EAAE,IAAI,EAAE,4BAA4B;oBACpD,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,MAAM;oBAC9B,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,SAAS;oBACjD,SAAS,EAAE,IAAI,IAAI,EAAE;iBACxB,CAAC,CAAC;YACP,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,mCAAmC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,6EAA6E;IAC7E,gFAAgF;IAChF,2EAA2E;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,iBAAiB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;IACD,wFAAwF;IACxF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;IAED,8FAA8F;IAC9F,sEAAsE;IACtE,eAAe,EAAE,CAAC;IAElB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,EAAG,IAAI,CAAC,CAAC;IAEtD,2CAA2C;IAC3C,2CAA2C;IAC3C,oDAAoD;IACpD,8CAA8C;IAE9C,yEAAyE;IACzE,4DAA4D;IAC5D,wBAAwB;IACxB,4DAA4D;IAC5D,gCAAgC;IAChC,QAAQ;IACR,MAAM;IACN,2CAA2C;IAC3C,2CAA2C;IAE3C,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YACvE,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,oCAAoC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;YACpE,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAClC,CAAC;IAErC,iFAAiF;IACjF,4EAA4E;IAC5E,kEAAkE;IAClE,MAAM,MAAM,GAAG,IAAI,MAAM,EAAwC,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;QAChF,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACtD,CAAC;IACD,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAiC,CAAC,CAAC;IAE1E,IAAI,MAAM,GAAG,YAAY,CAAC;QACxB,OAAO,EAAE;YACP,eAAe,CAAC;gBACd,SAAS;gBACT,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;gBACtD,cAAc,EAAE,qBAAqB,KAAK,CAAC;gBAC3C,MAAM;aACP,CAAC;SACH;QACD,QAAQ,EAAE,CAAC,0BAA0B,CAAC,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC;KAC1E,CAAC,CAAC;IACH,MAAM,GAAG,0BAA0B,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE7C,kFAAkF;IAClF,IAAI,OAAO,EAAE,kBAAkB,EAAE,CAAC;QAChC,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YACrD,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAErC,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IAC3F,MAAM,aAAa,GAAG,SAAS,CAC7B;QACE,MAAM;QACN,OAAO,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE;YACtC,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAC1G,OAAO,EAAE,WAAW,EAAE,CAAC;QACzB,CAAC;QACD,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAChC,yDAAyD;YACzD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACvC,GAAG,CAAC,UAAU,EAAE,IAAI,KAAK,aAAa;gBACtC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAC3C,CAAC;YAEF,IAAI,cAAc,EAAE,CAAC;gBACnB,wEAAwE;gBACxE,OAAO,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;YACpG,CAAC;iBAAM,CAAC;gBACN,mCAAmC;gBACnC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;KACF,EACD,eAAe,CAChB,CAAC;IAEF,MAAM,YAAY,GAAG,iBAAiB,CACpC,EAAE,MAAM,EAAE,EACV,EAAE,UAAU,EAAE,aAAa,EAAE,EAC7B,OAAO,EAAE,aAAa,CACvB,CAAC;IACF,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;IAE3B,4DAA4D;IAC5D,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC;QAClB,4CAA4C;QAC5C,SAAS,EAAE,IAAI;QACf,8DAA8D;QAC9D,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACnB,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBAChC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAChD,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC9B,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC9B,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC9B,WAAW,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;oBACrD,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YACD,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;QACD,0EAA0E;QAC1E,KAAK,EAAE,CAAC;KACT,CAAC,CAAC,CAAC;IAEJ,4EAA4E;IAC5E,IAAI,OAAO,EAAE,uBAAuB,EAAE,CAAC;QACrC,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;YACjD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAC;QACjC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,4EAA4E;IAC5E,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC;IACpI,OAAO,CAAC,GAAG,CAAC,sBAAsB,cAAc,EAAE,CAAC,CAAC;IAEpD,IAAI,wBAA0G,CAAC;IAC/G,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,0BAA0B,CAAC;YACzE,SAAS,EAAE,cAAc;YACzB,kBAAkB,EAAE,GAAG,cAAc,gBAAgB;YACrD,gBAAgB,EAAE,GAAG,cAAc,cAAc;SAClD,CAAC,CAAC;QACH,wBAAwB,GAAG,mBAAmB,CAAC;QAE/C,MAAM,SAAS,GAAG,IAAI,EAAoB,CAAC;QAE3C,qEAAqE;QACrE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;IAED,4EAA4E;IAC5E,0EAA0E;IAC1E,wEAAwE;IACxE,mEAAmE;IACnE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAoB,CAAC,CAAC;IAElC,iGAAiG;IACjG,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC,CAAC;IAElD,0DAA0D;IAC1D,yFAAyF;IACzF,IAAI,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACzE,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,CAAC;IAED,8CAA8C;IAC9C,4EAA4E;IAC5E,uEAAuE;IACvE,IAAI,OAAO,EAAE,yBAAyB,EAAE,CAAC;QACvC,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,yBAAyB,EAAE,CAAC;YACnD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,IAAI,wBAAwB,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,EAAoB,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,wBAAwB,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,gGAAgG,CAAC,CAAC;IAChH,CAAC;IAED,4EAA4E;IAC5E,MAAM,aAAa,GAAG;QACpB,OAAO,EAAE,UAAU,CAAC,cAAc,EAAE,OAAO,IAAI,KAAK;QACpD,eAAe,EAAE,UAAU,CAAC,cAAc,EAAE,eAAe;QAC3D,eAAe,EAAE,UAAU,CAAC,cAAc,EAAE,eAAe;KAC5D,CAAC;IAEF,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAClD,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,MAAM,CAAC;QACnE,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC;QAC7C,aAAa,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC;QAC7C,aAAa,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,2EAA2E;IAC3E,kBAAkB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAEvC,mFAAmF;IACnF,GAAG,CAAC,GAAG,CACL,eAAe,EACf,IAAI,EAAoB,EACxB,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAClC,uEAAuE;IACvE,qEAAqE;IACrE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAC3E,iBAAiB,CAAC,YAAY,EAAE;QAC9B,OAAO,EAAE,eAAe,CAAC;YACE,cAAc;YACd,UAAU,EAAE,6BAA6B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,iCAAiC;YACvG,WAAW,CAAC,kBAAkB;SAC/B,CAAC;KAC5B,CAAC,CACH,CAAC;IAEF,+DAA+D;IAC/D,IAAI,OAAO,EAAE,sBAAsB,EAAE,CAAC;QACpC,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;YAChD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,IAAI,oBAAoB,GAAgC,IAAI,CAAC;IAC7D,IAAI,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC1E,MAAM,oBAAoB,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,oBAAoB,CAAC,KAAK,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;YAClE,kEAAkE;QACpE,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,gFAAgF;IAChF,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5C,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7C,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,qFAAqF;IACrF,IAAI,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;QAE7C,0DAA0D;QAC1D,wFAAwF;QACxF,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,0BAA0B,CAAC,YAAY,CAAC,EAAE;YAC5E,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAC;QAEH,mEAAmE;QACnE,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC,YAAY,CAAC,EAAE;YACtE,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,eAAe;SAC3B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,kCAAkC,YAAY,CAAC,aAAa,cAAc,YAAY,CAAC,eAAe,uBAAuB,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC;IAC3K,CAAC;IAED,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3B,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,uCAAuC,WAAW,GAAG,CAAC,CAAC;IAEnE,oCAAoC;IACpC,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,wCAAwC,CAAC,CAAC;QAEjE,8BAA8B;QAC9B,IAAI,oBAAoB,EAAE,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,oBAAoB,CAAC,IAAI,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,eAAe;QACf,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvD,gEAAgE;IAChE,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACnD,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACtC,4CAA4C;QAC5C,0EAA0E;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,MAAyB;IACtD,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,KAAK,EAAE,QAAgB,EAAqD,EAAE;YACnF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,EAAE,GAAkF,EAAE,CAAC,CAAC;YAC7F,KAAK,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE;gBAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;QACF,+CAA+C;QAC/C,OAAO,EAAE,MAAM;KAChB,CAAC;IACF,OAAO,OAAwC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,sBAAsB,CAAC,MAAyB,EAAE,UAAkB;IACjF,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,iBAAiB,UAAU,YAAY,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,iBAAiB,UAAU,gBAAgB,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAA6B,EAAE,EAAE;YAC5D,MAAM,aAAa,GAAG;gBACpB,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAA6B,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAgB,EAAE,IAAI,CAAC,EAAY,CAAC,CAAC;aACjH,CAAC;YACF,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,8CAA8C;QAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;QAChC,KAA4C,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,GAAW;IACxC,yCAAyC;IACzC,OAAO,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC"}
@@ -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"}