@memberjunction/server 6.2.0-edge.2 → 6.2.0-edge.3

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 (150) hide show
  1. package/README.md +30 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/config.d.ts +2189 -71
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +123 -3
  6. package/dist/config.js.map +1 -1
  7. package/dist/context.d.ts.map +1 -1
  8. package/dist/context.js +11 -23
  9. package/dist/context.js.map +1 -1
  10. package/dist/generated/graphql-schemas/__mj.d.ts +928 -0
  11. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  12. package/dist/generated/graphql-schemas/__mj.js +8482 -3649
  13. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  14. package/dist/generic/ResolverBase.d.ts +43 -3
  15. package/dist/generic/ResolverBase.d.ts.map +1 -1
  16. package/dist/generic/ResolverBase.js +142 -27
  17. package/dist/generic/ResolverBase.js.map +1 -1
  18. package/dist/generic/RunViewResolver.d.ts +4 -0
  19. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  20. package/dist/generic/RunViewResolver.js +33 -1
  21. package/dist/generic/RunViewResolver.js.map +1 -1
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +115 -49
  25. package/dist/index.js.map +1 -1
  26. package/dist/postgresqlCompat.d.ts +8 -0
  27. package/dist/postgresqlCompat.d.ts.map +1 -0
  28. package/dist/postgresqlCompat.js +19 -0
  29. package/dist/postgresqlCompat.js.map +1 -0
  30. package/dist/postgresqlPoolSettings.d.ts +108 -0
  31. package/dist/postgresqlPoolSettings.d.ts.map +1 -0
  32. package/dist/postgresqlPoolSettings.js +134 -0
  33. package/dist/postgresqlPoolSettings.js.map +1 -0
  34. package/dist/resolvers/AdhocQueryResolver.d.ts +23 -18
  35. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  36. package/dist/resolvers/AdhocQueryResolver.js +77 -167
  37. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  38. package/dist/resolvers/EntityRecordNameResolver.d.ts +7 -23
  39. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  40. package/dist/resolvers/EntityRecordNameResolver.js +9 -47
  41. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  42. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  43. package/dist/resolvers/GetDataResolver.js +9 -0
  44. package/dist/resolvers/GetDataResolver.js.map +1 -1
  45. package/dist/resolvers/HumanHandoffResolver.d.ts +107 -0
  46. package/dist/resolvers/HumanHandoffResolver.d.ts.map +1 -0
  47. package/dist/resolvers/HumanHandoffResolver.js +324 -0
  48. package/dist/resolvers/HumanHandoffResolver.js.map +1 -0
  49. package/dist/resolvers/MeetingResolver.d.ts +69 -0
  50. package/dist/resolvers/MeetingResolver.d.ts.map +1 -0
  51. package/dist/resolvers/MeetingResolver.js +381 -0
  52. package/dist/resolvers/MeetingResolver.js.map +1 -0
  53. package/dist/resolvers/RealtimeBridgeResolver.d.ts +34 -1
  54. package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
  55. package/dist/resolvers/RealtimeBridgeResolver.js +202 -7
  56. package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
  57. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +1 -83
  58. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  59. package/dist/resolvers/RealtimeClientSessionResolver.js +4 -206
  60. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  61. package/dist/resolvers/adhocTimeout.d.ts +7 -0
  62. package/dist/resolvers/adhocTimeout.d.ts.map +1 -0
  63. package/dist/resolvers/adhocTimeout.js +12 -0
  64. package/dist/resolvers/adhocTimeout.js.map +1 -0
  65. package/dist/resolvers/meetings/index.d.ts +5 -0
  66. package/dist/resolvers/meetings/index.d.ts.map +1 -0
  67. package/dist/resolvers/meetings/index.js +5 -0
  68. package/dist/resolvers/meetings/index.js.map +1 -0
  69. package/dist/resolvers/meetings/meetingHelpers.d.ts +17 -0
  70. package/dist/resolvers/meetings/meetingHelpers.d.ts.map +1 -0
  71. package/dist/resolvers/meetings/meetingHelpers.js +212 -0
  72. package/dist/resolvers/meetings/meetingHelpers.js.map +1 -0
  73. package/dist/resolvers/meetings/meetingMutations.d.ts +12 -0
  74. package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -0
  75. package/dist/resolvers/meetings/meetingMutations.js +418 -0
  76. package/dist/resolvers/meetings/meetingMutations.js.map +1 -0
  77. package/dist/resolvers/meetings/meetingQueries.d.ts +7 -0
  78. package/dist/resolvers/meetings/meetingQueries.d.ts.map +1 -0
  79. package/dist/resolvers/meetings/meetingQueries.js +113 -0
  80. package/dist/resolvers/meetings/meetingQueries.js.map +1 -0
  81. package/dist/resolvers/meetings/meetingTypes.d.ts +89 -0
  82. package/dist/resolvers/meetings/meetingTypes.d.ts.map +1 -0
  83. package/dist/resolvers/meetings/meetingTypes.js +345 -0
  84. package/dist/resolvers/meetings/meetingTypes.js.map +1 -0
  85. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  86. package/dist/rest/ViewOperationsHandler.js +8 -5
  87. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  88. package/dist/services/TaskGraphActionRunner.d.ts +8 -0
  89. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  90. package/dist/services/TaskGraphActionRunner.js +27 -1
  91. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  92. package/dist/services/WorkQueueHostService.d.ts +36 -0
  93. package/dist/services/WorkQueueHostService.d.ts.map +1 -0
  94. package/dist/services/WorkQueueHostService.js +97 -0
  95. package/dist/services/WorkQueueHostService.js.map +1 -0
  96. package/dist/services/workQueueConfig.d.ts +103 -0
  97. package/dist/services/workQueueConfig.d.ts.map +1 -0
  98. package/dist/services/workQueueConfig.js +48 -0
  99. package/dist/services/workQueueConfig.js.map +1 -0
  100. package/dist/types.d.ts +5 -0
  101. package/dist/types.d.ts.map +1 -1
  102. package/dist/types.js.map +1 -1
  103. package/package.json +95 -94
  104. package/src/__tests__/AdhocQueryResolver.bugs.test.ts +14 -35
  105. package/src/__tests__/AdhocQueryResolver.pagination.test.ts +6 -2
  106. package/src/__tests__/AdhocQueryResolver.scopeGuard.test.ts +3 -3
  107. package/src/__tests__/EntityRecordNameResolver.fieldSecurity.test.ts +27 -72
  108. package/src/__tests__/HumanHandoffResolver.test.ts +233 -0
  109. package/src/__tests__/MeetingResolver.test.ts +374 -0
  110. package/src/__tests__/RealtimeBridgeResolver.test.ts +240 -2
  111. package/src/__tests__/ResolverBase.adhocReadScope.test.ts +96 -0
  112. package/src/__tests__/ResolverBase.filterEscaping.test.ts +21 -2
  113. package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +291 -0
  114. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +41 -0
  115. package/src/__tests__/WorkQueueHostService.test.ts +133 -0
  116. package/src/__tests__/adhocTimeoutClamp.test.ts +26 -0
  117. package/src/__tests__/postgresqlPoolSettings.test.ts +131 -0
  118. package/src/__tests__/translateBracketsToPG.test.ts +20 -0
  119. package/src/config.ts +130 -3
  120. package/src/context.ts +11 -24
  121. package/src/generated/graphql-schemas/__mj.ts +22138 -18770
  122. package/src/generic/ResolverBase.ts +171 -27
  123. package/src/generic/RunViewResolver.ts +33 -2
  124. package/src/index.ts +127 -50
  125. package/src/postgresqlCompat.ts +21 -0
  126. package/src/postgresqlPoolSettings.ts +213 -0
  127. package/src/resolvers/AdhocQueryResolver.ts +88 -188
  128. package/src/resolvers/EntityRecordNameResolver.ts +9 -51
  129. package/src/resolvers/GetDataResolver.ts +10 -0
  130. package/src/resolvers/HumanHandoffResolver.ts +304 -0
  131. package/src/resolvers/MeetingResolver.ts +438 -0
  132. package/src/resolvers/RealtimeBridgeResolver.ts +227 -13
  133. package/src/resolvers/RealtimeClientSessionResolver.ts +6 -252
  134. package/src/resolvers/adhocTimeout.ts +12 -0
  135. package/src/resolvers/meetings/index.ts +4 -0
  136. package/src/resolvers/meetings/meetingHelpers.ts +307 -0
  137. package/src/resolvers/meetings/meetingMutations.ts +535 -0
  138. package/src/resolvers/meetings/meetingQueries.ts +172 -0
  139. package/src/resolvers/meetings/meetingTypes.ts +238 -0
  140. package/src/rest/ViewOperationsHandler.ts +8 -5
  141. package/src/services/TaskGraphActionRunner.ts +29 -1
  142. package/src/services/WorkQueueHostService.ts +129 -0
  143. package/src/services/workQueueConfig.ts +52 -0
  144. package/src/types.ts +5 -0
  145. package/dist/resolvers/adhoc-query-helpers.d.ts +0 -33
  146. package/dist/resolvers/adhoc-query-helpers.d.ts.map +0 -1
  147. package/dist/resolvers/adhoc-query-helpers.js +0 -50
  148. package/dist/resolvers/adhoc-query-helpers.js.map +0 -1
  149. package/src/__tests__/adhoc-query-helpers.test.ts +0 -50
  150. package/src/resolvers/adhoc-query-helpers.ts +0 -67
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -29,6 +29,8 @@ import { WebSocketServer } from 'ws';
29
29
  import { RealtimeProxyServer } from './realtimeProxy/RealtimeProxyServer.js';
30
30
  import buildApolloServer from './apolloServer/index.js';
31
31
  import { configInfo, configFilePath, dbDatabase, dbHost, dbPort, dbUsername, graphqlPort, graphqlRootPath, mj_core_schema, websiteRunFromPackage } from './config.js';
32
+ import { TranslateBracketsToPG } from './postgresqlCompat.js';
33
+ import { BuildPostgreSQLConnectionConfig, DescribeReadOnlyLoginOverreach, PostgreSQLReadOnlyPool, ResolvePostgreSQLEndpoint, ResolvePostgreSQLReadOnlyCredentials, ToPGPoolConfig } from './postgresqlPoolSettings.js';
32
34
  import { default as jwt } from 'jsonwebtoken';
33
35
  import { contextFunction, CreateUnifiedAuthMiddleware, getUserPayload } from './context.js';
34
36
  import { requireSystemUserDirective, publicDirective } from './directives/index.js';
@@ -57,12 +59,15 @@ import { RedisLocalStorageProvider } from '@memberjunction/redis-provider';
57
59
  import { PubSubManager } from './generic/PubSubManager.js';
58
60
  import { ReconcileOrphanedConversationDetails } from './generic/OrphanedConversationDetailReconciler.js';
59
61
  import { PUSH_STATUS_UPDATES_TOPIC, SetPushStatusPublishHook, ParseReplicatedStatusUpdate, } from './generic/PushStatusResolver.js';
62
+ import { HANDOFF_OFFER_FANOUT_CHANNEL, HANDOFF_OFFER_TOPIC, SetHandoffOfferPublishHook, ParseReplicatedHandoffOfferUpdate, } from './resolvers/HumanHandoffResolver.js';
63
+ import { RoomHandoffEngine } from '@memberjunction/livekit-room-server';
60
64
  import { IntegrationProgressEmitter } from '@memberjunction/integration-progress-artifacts';
61
65
  import { PublishIntegrationProgress } from './resolvers/IntegrationProgressResolver.js';
62
66
  import { RegisterRSUProgressBridge } from './integration/RSUProgressBridge.js';
63
67
  import { ClientToolRequestManager, AgentRunWatchdog } from '@memberjunction/ai-agents';
64
68
  import { SessionJanitor } from './agentSessions/index.js';
65
69
  import { StartTaskGraphDispatcher } from './services/StartTaskGraphDispatcher.js';
70
+ import { MJServerWorkQueueProviderSource, StartWorkQueueHost } from './services/WorkQueueHostService.js';
66
71
  import { GetAttachmentService } from '@memberjunction/aiengine';
67
72
  import { MJStorageBlobStore } from './services/MJStorageBlobStore.js';
68
73
  import { CACHE_INVALIDATION_TOPIC, MayBroadcastRecordData, ConfigureRecordDataBroadcast } from './generic/CacheInvalidationResolver.js';
@@ -201,6 +206,7 @@ export * from './resolvers/CurrentUserContextResolver.js';
201
206
  export * from './resolvers/RSUResolver.js';
202
207
  export * from './resolvers/AgentSessionResolver.js';
203
208
  export * from './resolvers/RealtimeClientSessionResolver.js';
209
+ export * from './resolvers/MeetingResolver.js';
204
210
  export * from './resolvers/RemoteBrowserActionResolver.js';
205
211
  export * from './agentSessions/index.js';
206
212
  export { GetReadOnlyDataSource, GetReadWriteDataSource, GetReadWriteProvider, GetReadOnlyProvider } from './util.js';
@@ -234,7 +240,8 @@ function resolveServerVersion() {
234
240
  const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
235
241
  return pkg.version;
236
242
  }
237
- catch {
243
+ catch (err) {
244
+ LogError('Failed to resolve server version from package.json', undefined, err);
238
245
  return undefined;
239
246
  }
240
247
  }
@@ -272,8 +279,9 @@ async function wirePushStatusFanOut(redisProvider, startupLog) {
272
279
  SourceServerId: payload.SourceServerId,
273
280
  });
274
281
  }
275
- catch {
282
+ catch (err) {
276
283
  // A malformed message on a shared channel must not take down the subscriber.
284
+ LogError('Error processing push-status fan-out message', undefined, err);
277
285
  }
278
286
  });
279
287
  SetPushStatusPublishHook((payload) => {
@@ -290,6 +298,44 @@ async function wirePushStatusFanOut(redisProvider, startupLog) {
290
298
  console.warn(`Push-status fan-out unavailable: ${err.message}`);
291
299
  }
292
300
  }
301
+ /**
302
+ * Replicate handoff-offer updates across server instances over Redis.
303
+ *
304
+ * Outbound: every locally-published offer change is forwarded on a shared Redis channel.
305
+ * Inbound: a message from another instance is republished onto THIS instance's local GraphQL
306
+ * topic (where the subscription filter scopes to the target user) and delivered to RoomHandoffEngine
307
+ * so the call-hosting instance can transition its local flow (e.g. wait for the user to join the room).
308
+ */
309
+ async function wireHandoffOfferFanOut(redisProvider, startupLog) {
310
+ try {
311
+ await redisProvider.SubscribeToChannel(HANDOFF_OFFER_FANOUT_CHANNEL, (raw) => {
312
+ try {
313
+ const payload = ParseReplicatedHandoffOfferUpdate(raw, MJGlobal.Instance.ProcessUUID);
314
+ if (!payload) {
315
+ return;
316
+ }
317
+ PubSubManager.Instance.Publish(HANDOFF_OFFER_TOPIC, {
318
+ UserID: payload.UserID,
319
+ Kind: payload.Kind,
320
+ Offer: payload.Offer,
321
+ });
322
+ RoomHandoffEngine.Instance.OnRemoteOfferChange(payload);
323
+ }
324
+ catch (err) {
325
+ // A malformed message on a shared channel must not take down the subscriber.
326
+ LogError('Error processing handoff-offer fan-out message', undefined, err);
327
+ }
328
+ });
329
+ SetHandoffOfferPublishHook((payload) => {
330
+ redisProvider.PublishMessage(HANDOFF_OFFER_FANOUT_CHANNEL, JSON.stringify(payload));
331
+ });
332
+ console.log('[MJAPI] Handoff-offer updates: cross-instance fan-out enabled via Redis');
333
+ startupLog.LogIf('verbose', 'Handoff-offer updates: cross-instance fan-out enabled via Redis');
334
+ }
335
+ catch (err) {
336
+ console.warn(`Handoff-offer fan-out unavailable: ${err instanceof Error ? err.message : String(err)}`);
337
+ }
338
+ }
293
339
  // Bind MJStorage as the conversation-attachment blob store. The attachment service itself no longer
294
340
  // imports `@memberjunction/storage` — that dependency made it unusable from any browser or React
295
341
  // Native client, which is why the same attachment rules had been reimplemented three times.
@@ -330,28 +376,39 @@ export const Serve = async (resolverPaths, app = CreateApp(), options) => {
330
376
  startupLog.BeginPhase('Connecting to database');
331
377
  startupLog.LogIf('verbose', 'Database type: PostgreSQL');
332
378
  const pg = await import('pg');
333
- const { PostgreSQLDataProvider, PostgreSQLProviderConfigData } = await import('@memberjunction/postgresql-dataprovider');
334
- const pgHost = process.env.PG_HOST || process.env.DB_HOST || 'localhost';
335
- const pgPort = parseInt(process.env.PG_PORT || process.env.DB_PORT || '5432', 10);
336
- const pgUser = process.env.PG_USERNAME || process.env.DB_USERNAME || 'postgres';
337
- const pgPass = process.env.PG_PASSWORD || process.env.DB_PASSWORD || '';
338
- const pgDatabase = process.env.PG_DATABASE || process.env.DB_DATABASE || '';
339
- const pgPool = new pg.default.Pool({
340
- host: pgHost,
341
- port: pgPort,
342
- user: pgUser,
343
- password: pgPass,
344
- database: pgDatabase,
345
- max: configInfo.databaseSettings.connectionPool?.max ?? 50,
346
- min: configInfo.databaseSettings.connectionPool?.min ?? 5,
347
- idleTimeoutMillis: configInfo.databaseSettings.connectionPool?.idleTimeoutMillis ?? 30000,
348
- connectionTimeoutMillis: configInfo.databaseSettings.connectionPool?.acquireTimeoutMillis ?? 30000,
349
- });
379
+ const { PostgreSQLDataProvider, PostgreSQLProviderConfigData, MJPostgresTypes } = await import('@memberjunction/postgresql-dataprovider');
380
+ const pgEndpoint = ResolvePostgreSQLEndpoint();
381
+ const { Host: pgHost, Port: pgPort, User: pgUser, Database: pgDatabase } = pgEndpoint;
382
+ // Every API pool carries the statement and idle-in-transaction timeouts from connection #1.
383
+ const pgConnectionConfig = BuildPostgreSQLConnectionConfig(pgEndpoint, configInfo.databaseSettings, 'api');
384
+ const pgPool = new pg.default.Pool(ToPGPoolConfig(pgConnectionConfig));
350
385
  // Verify connection
351
386
  const testClient = await pgPool.connect();
352
387
  await testClient.query('SELECT 1');
353
388
  testClient.release();
354
389
  startupLog.LogIf('verbose', `PostgreSQL pool connected to ${pgHost}:${pgPort}/${pgDatabase}`);
390
+ // A read-only pool opened with the read-only login, as SQL Server has. Read-only per-request
391
+ // providers (TestQuerySQL and other caller-supplied SQL) share it instead of the primary pool.
392
+ const pgReadOnlyCredentials = ResolvePostgreSQLReadOnlyCredentials(configInfo);
393
+ if (pgReadOnlyCredentials) {
394
+ // A pool a provider runs on must carry the provider's type parsers, so BIGINT and NUMERIC
395
+ // come back as numbers here as they do on the provider's own pool.
396
+ const readOnlyPgPool = new pg.default.Pool({
397
+ ...ToPGPoolConfig(BuildPostgreSQLConnectionConfig({ ...pgEndpoint, ...pgReadOnlyCredentials }, configInfo.databaseSettings, 'read-only')),
398
+ types: MJPostgresTypes,
399
+ });
400
+ const readOnlyTestClient = await readOnlyPgPool.connect();
401
+ try {
402
+ for (const warning of await DescribeReadOnlyLoginOverreach(readOnlyTestClient, mj_core_schema)) {
403
+ LogStatus(`WARNING: ${warning}`);
404
+ }
405
+ }
406
+ finally {
407
+ readOnlyTestClient.release();
408
+ }
409
+ PostgreSQLReadOnlyPool.Instance.Pool = readOnlyPgPool;
410
+ startupLog.LogIf('verbose', 'Read-only PostgreSQL pool has been initialized.');
411
+ }
355
412
  // Create a DataSourceInfo with a MSSQL-compatible wrapper around pg.Pool
356
413
  // This allows existing code (types, util, context) to work without changes
357
414
  const mssqlCompatPool = createMSSQLCompatPool(pgPool);
@@ -364,15 +421,6 @@ export const Serve = async (resolverPaths, app = CreateApp(), options) => {
364
421
  userName: pgUser,
365
422
  }));
366
423
  // Set up the PostgreSQL provider
367
- const pgConnectionConfig = {
368
- Host: pgHost,
369
- Port: pgPort,
370
- Database: pgDatabase,
371
- User: pgUser,
372
- Password: pgPass,
373
- MaxConnections: configInfo.databaseSettings.connectionPool?.max ?? 50,
374
- MinConnections: configInfo.databaseSettings.connectionPool?.min ?? 5,
375
- };
376
424
  const pgConfigData = new PostgreSQLProviderConfigData(pgConnectionConfig, mj_core_schema, cacheRefreshInterval / 1000);
377
425
  const provider = new PostgreSQLDataProvider();
378
426
  await provider.Config(pgConfigData);
@@ -396,7 +444,7 @@ export const Serve = async (resolverPaths, app = CreateApp(), options) => {
396
444
  if (poolAny._pgPool) {
397
445
  const thePgPool = poolAny._pgPool;
398
446
  // Translate SQL Server bracket syntax to PostgreSQL double-quote syntax
399
- const pgQuery = translateBracketsToPG(query);
447
+ const pgQuery = TranslateBracketsToPG(query);
400
448
  const result = await thePgPool.query(pgQuery);
401
449
  return result.rows;
402
450
  }
@@ -414,19 +462,15 @@ export const Serve = async (resolverPaths, app = CreateApp(), options) => {
414
462
  const pgCodegenPass = process.env.CODEGEN_DB_PASSWORD;
415
463
  if (pgCodegenUser && pgCodegenPass) {
416
464
  try {
417
- const codegenPgPool = new pg.default.Pool({
418
- host: pgHost,
419
- port: pgPort,
420
- user: pgCodegenUser,
421
- password: pgCodegenPass,
422
- database: pgDatabase,
423
- max: 10,
424
- });
465
+ // CodeGen and DDL work runs long statements across every entity, so this pool gets the
466
+ // long CodeGen timeout rather than the API one, as the SQL Server CodeGen pool does.
467
+ const codegenPgConnectionConfig = BuildPostgreSQLConnectionConfig({ ...pgEndpoint, User: pgCodegenUser, Password: pgCodegenPass }, configInfo.databaseSettings, 'codegen');
468
+ const codegenPgPool = new pg.default.Pool(ToPGPoolConfig(codegenPgConnectionConfig));
425
469
  const codegenTestClient = await codegenPgPool.connect();
426
470
  await codegenTestClient.query('SELECT 1');
427
471
  codegenTestClient.release();
428
472
  const { RuntimeSchemaManager } = await import('@memberjunction/schema-engine');
429
- const codegenPgConfigData = new PostgreSQLProviderConfigData({ Host: pgHost, Port: pgPort, Database: pgDatabase, User: pgCodegenUser, Password: pgCodegenPass }, mj_core_schema, cacheRefreshInterval / 1000);
473
+ const codegenPgConfigData = new PostgreSQLProviderConfigData(codegenPgConnectionConfig, mj_core_schema, cacheRefreshInterval / 1000);
430
474
  const codegenPgProvider = new PostgreSQLDataProvider();
431
475
  await codegenPgProvider.Config(codegenPgConfigData); // separate pool (per-instance manager); does NOT touch the global API provider
432
476
  RuntimeSchemaManager.Instance.SetDDLProvider(codegenPgProvider);
@@ -670,6 +714,7 @@ export const Serve = async (resolverPaths, app = CreateApp(), options) => {
670
714
  // forever for an event that was delivered to nobody. Replicating progress and completion over
671
715
  // Redis closes that, and the durable tail query remains the backstop if Redis is down.
672
716
  await wirePushStatusFanOut(redisProvider, startupLog);
717
+ await wireHandoffOfferFanOut(redisProvider, startupLog);
673
718
  startupLog.LogIf('verbose', `Redis cache provider connected: ${process.env.REDIS_URL}`);
674
719
  }
675
720
  // If Redis is available, swap LocalCacheManager's storage provider to Redis.
@@ -1166,13 +1211,22 @@ export const Serve = async (resolverPaths, app = CreateApp(), options) => {
1166
1211
  // Backwards-compatibility shim: synthesize ServerExtensionConfig entries from legacy configInfo.telephony
1167
1212
  const telephonyExtensionConfigs = [];
1168
1213
  if (configInfo.telephony?.enabled) {
1214
+ // Settings every carrier shares (inbound run-as user, call cap, outbound policy). Each carrier's own block is
1215
+ // spread AFTER them, so a carrier can override one explicitly.
1216
+ const sharedTelephonySettings = {
1217
+ inboundRunAsUserEmail: configInfo.telephony.inboundRunAsUserEmail,
1218
+ maxCallSeconds: configInfo.telephony.maxCallSeconds,
1219
+ maxConcurrentCalls: configInfo.telephony.maxConcurrentCalls,
1220
+ transferTargets: configInfo.telephony.transferTargets,
1221
+ outbound: configInfo.telephony.outbound,
1222
+ };
1169
1223
  if (configInfo.telephony.twilio) {
1170
1224
  telephonyExtensionConfigs.push({
1171
1225
  Enabled: true,
1172
1226
  DriverClass: 'TwilioTelephonyExtension',
1173
1227
  RootPath: '/telephony/twilio',
1174
1228
  Phase: 'pre-auth',
1175
- Settings: configInfo.telephony.twilio,
1229
+ Settings: { ...sharedTelephonySettings, ...configInfo.telephony.twilio },
1176
1230
  });
1177
1231
  }
1178
1232
  if (configInfo.telephony.vonage) {
@@ -1181,7 +1235,7 @@ export const Serve = async (resolverPaths, app = CreateApp(), options) => {
1181
1235
  DriverClass: 'VonageTelephonyExtension',
1182
1236
  RootPath: '/telephony/vonage',
1183
1237
  Phase: 'pre-auth',
1184
- Settings: configInfo.telephony.vonage,
1238
+ Settings: { ...sharedTelephonySettings, ...configInfo.telephony.vonage },
1185
1239
  });
1186
1240
  }
1187
1241
  if (configInfo.telephony.ringcentral) {
@@ -1190,7 +1244,16 @@ export const Serve = async (resolverPaths, app = CreateApp(), options) => {
1190
1244
  DriverClass: 'RingCentralTelephonyExtension',
1191
1245
  RootPath: '/telephony/ringcentral',
1192
1246
  Phase: 'pre-auth',
1193
- Settings: configInfo.telephony.ringcentral,
1247
+ Settings: { ...sharedTelephonySettings, ...configInfo.telephony.ringcentral },
1248
+ });
1249
+ }
1250
+ if (configInfo.telephony.livekitSip) {
1251
+ telephonyExtensionConfigs.push({
1252
+ Enabled: true,
1253
+ DriverClass: 'LiveKitSipExtension',
1254
+ RootPath: '/telephony/livekit-sip',
1255
+ Phase: 'pre-auth',
1256
+ Settings: { ...sharedTelephonySettings, ...configInfo.telephony.livekitSip },
1194
1257
  });
1195
1258
  }
1196
1259
  if (configInfo.telephony.teams?.enabled) {
@@ -1480,6 +1543,17 @@ export const Serve = async (resolverPaths, app = CreateApp(), options) => {
1480
1543
  StartTaskGraphDispatcher(taskGraphPool, resumeUser)
1481
1544
  .catch(err => console.warn(`[TaskGraphDispatcher] Startup failed: ${err}`));
1482
1545
  }
1546
+ // Start the durable work-queue host where enabled. It plans which subscriptions this instance runs,
1547
+ // re-plans on a timer, and self-registers with ShutdownRegistry, so gracefulShutdown's awaited
1548
+ // ShutdownAll() drains it (up to 2 × shutdownDrainMs) before the HTTP server closes.
1549
+ // Not awaited: a slow engine load must not delay readiness, and a failure never stops the API.
1550
+ const workQueueProvider = Metadata.Provider; // global-provider-ok: server startup — the work-queue host runs on the server's own provider
1551
+ if (configInfo.workQueue?.enabled && workQueueProvider instanceof DatabaseProviderBase) {
1552
+ const workQueuePool = dataSources[0]?.dataSource;
1553
+ const providerSource = new MJServerWorkQueueProviderSource(workQueuePool instanceof sql.ConnectionPool ? workQueuePool : null, workQueueProvider);
1554
+ StartWorkQueueHost(configInfo.workQueue, workQueueProvider, providerSource)
1555
+ .catch(error => console.error('❌ Failed to start the work queue host:', error));
1556
+ }
1483
1557
  // Set up graceful shutdown handlers
1484
1558
  const gracefulShutdown = async (signal) => {
1485
1559
  console.log(`\n${signal} received, shutting down gracefully...`);
@@ -1923,12 +1997,4 @@ function createMSSQLCompatPool(pgPool) {
1923
1997
  };
1924
1998
  return wrapper;
1925
1999
  }
1926
- /**
1927
- * Translates SQL Server bracket-quoted identifiers to PostgreSQL double-quoted identifiers.
1928
- * Converts [schema].[table] to "schema"."table" and handles common T-SQL patterns.
1929
- */
1930
- function translateBracketsToPG(sql) {
1931
- // Replace [identifier] with "identifier"
1932
- return sql.replace(/\[([^\]]+)\]/g, '"$1"');
1933
- }
1934
2000
  //# sourceMappingURL=index.js.map