@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.
- package/README.md +30 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/config.d.ts +2189 -71
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +123 -3
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +11 -23
- package/dist/context.js.map +1 -1
- package/dist/generated/graphql-schemas/__mj.d.ts +928 -0
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +8482 -3649
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +43 -3
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +142 -27
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +4 -0
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +33 -1
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +115 -49
- package/dist/index.js.map +1 -1
- package/dist/postgresqlCompat.d.ts +8 -0
- package/dist/postgresqlCompat.d.ts.map +1 -0
- package/dist/postgresqlCompat.js +19 -0
- package/dist/postgresqlCompat.js.map +1 -0
- package/dist/postgresqlPoolSettings.d.ts +108 -0
- package/dist/postgresqlPoolSettings.d.ts.map +1 -0
- package/dist/postgresqlPoolSettings.js +134 -0
- package/dist/postgresqlPoolSettings.js.map +1 -0
- package/dist/resolvers/AdhocQueryResolver.d.ts +23 -18
- package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +77 -167
- package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts +7 -23
- package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js +9 -47
- package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +9 -0
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/HumanHandoffResolver.d.ts +107 -0
- package/dist/resolvers/HumanHandoffResolver.d.ts.map +1 -0
- package/dist/resolvers/HumanHandoffResolver.js +324 -0
- package/dist/resolvers/HumanHandoffResolver.js.map +1 -0
- package/dist/resolvers/MeetingResolver.d.ts +69 -0
- package/dist/resolvers/MeetingResolver.d.ts.map +1 -0
- package/dist/resolvers/MeetingResolver.js +381 -0
- package/dist/resolvers/MeetingResolver.js.map +1 -0
- package/dist/resolvers/RealtimeBridgeResolver.d.ts +34 -1
- package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.js +202 -7
- package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +1 -83
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +4 -206
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/adhocTimeout.d.ts +7 -0
- package/dist/resolvers/adhocTimeout.d.ts.map +1 -0
- package/dist/resolvers/adhocTimeout.js +12 -0
- package/dist/resolvers/adhocTimeout.js.map +1 -0
- package/dist/resolvers/meetings/index.d.ts +5 -0
- package/dist/resolvers/meetings/index.d.ts.map +1 -0
- package/dist/resolvers/meetings/index.js +5 -0
- package/dist/resolvers/meetings/index.js.map +1 -0
- package/dist/resolvers/meetings/meetingHelpers.d.ts +17 -0
- package/dist/resolvers/meetings/meetingHelpers.d.ts.map +1 -0
- package/dist/resolvers/meetings/meetingHelpers.js +212 -0
- package/dist/resolvers/meetings/meetingHelpers.js.map +1 -0
- package/dist/resolvers/meetings/meetingMutations.d.ts +12 -0
- package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -0
- package/dist/resolvers/meetings/meetingMutations.js +418 -0
- package/dist/resolvers/meetings/meetingMutations.js.map +1 -0
- package/dist/resolvers/meetings/meetingQueries.d.ts +7 -0
- package/dist/resolvers/meetings/meetingQueries.d.ts.map +1 -0
- package/dist/resolvers/meetings/meetingQueries.js +113 -0
- package/dist/resolvers/meetings/meetingQueries.js.map +1 -0
- package/dist/resolvers/meetings/meetingTypes.d.ts +89 -0
- package/dist/resolvers/meetings/meetingTypes.d.ts.map +1 -0
- package/dist/resolvers/meetings/meetingTypes.js +345 -0
- package/dist/resolvers/meetings/meetingTypes.js.map +1 -0
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +8 -5
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/services/TaskGraphActionRunner.d.ts +8 -0
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +27 -1
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/dist/services/WorkQueueHostService.d.ts +36 -0
- package/dist/services/WorkQueueHostService.d.ts.map +1 -0
- package/dist/services/WorkQueueHostService.js +97 -0
- package/dist/services/WorkQueueHostService.js.map +1 -0
- package/dist/services/workQueueConfig.d.ts +103 -0
- package/dist/services/workQueueConfig.d.ts.map +1 -0
- package/dist/services/workQueueConfig.js +48 -0
- package/dist/services/workQueueConfig.js.map +1 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +95 -94
- package/src/__tests__/AdhocQueryResolver.bugs.test.ts +14 -35
- package/src/__tests__/AdhocQueryResolver.pagination.test.ts +6 -2
- package/src/__tests__/AdhocQueryResolver.scopeGuard.test.ts +3 -3
- package/src/__tests__/EntityRecordNameResolver.fieldSecurity.test.ts +27 -72
- package/src/__tests__/HumanHandoffResolver.test.ts +233 -0
- package/src/__tests__/MeetingResolver.test.ts +374 -0
- package/src/__tests__/RealtimeBridgeResolver.test.ts +240 -2
- package/src/__tests__/ResolverBase.adhocReadScope.test.ts +96 -0
- package/src/__tests__/ResolverBase.filterEscaping.test.ts +21 -2
- package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +291 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +41 -0
- package/src/__tests__/WorkQueueHostService.test.ts +133 -0
- package/src/__tests__/adhocTimeoutClamp.test.ts +26 -0
- package/src/__tests__/postgresqlPoolSettings.test.ts +131 -0
- package/src/__tests__/translateBracketsToPG.test.ts +20 -0
- package/src/config.ts +130 -3
- package/src/context.ts +11 -24
- package/src/generated/graphql-schemas/__mj.ts +22138 -18770
- package/src/generic/ResolverBase.ts +171 -27
- package/src/generic/RunViewResolver.ts +33 -2
- package/src/index.ts +127 -50
- package/src/postgresqlCompat.ts +21 -0
- package/src/postgresqlPoolSettings.ts +213 -0
- package/src/resolvers/AdhocQueryResolver.ts +88 -188
- package/src/resolvers/EntityRecordNameResolver.ts +9 -51
- package/src/resolvers/GetDataResolver.ts +10 -0
- package/src/resolvers/HumanHandoffResolver.ts +304 -0
- package/src/resolvers/MeetingResolver.ts +438 -0
- package/src/resolvers/RealtimeBridgeResolver.ts +227 -13
- package/src/resolvers/RealtimeClientSessionResolver.ts +6 -252
- package/src/resolvers/adhocTimeout.ts +12 -0
- package/src/resolvers/meetings/index.ts +4 -0
- package/src/resolvers/meetings/meetingHelpers.ts +307 -0
- package/src/resolvers/meetings/meetingMutations.ts +535 -0
- package/src/resolvers/meetings/meetingQueries.ts +172 -0
- package/src/resolvers/meetings/meetingTypes.ts +238 -0
- package/src/rest/ViewOperationsHandler.ts +8 -5
- package/src/services/TaskGraphActionRunner.ts +29 -1
- package/src/services/WorkQueueHostService.ts +129 -0
- package/src/services/workQueueConfig.ts +52 -0
- package/src/types.ts +5 -0
- package/dist/resolvers/adhoc-query-helpers.d.ts +0 -33
- package/dist/resolvers/adhoc-query-helpers.d.ts.map +0 -1
- package/dist/resolvers/adhoc-query-helpers.js +0 -50
- package/dist/resolvers/adhoc-query-helpers.js.map +0 -1
- package/src/__tests__/adhoc-query-helpers.test.ts +0 -50
- package/src/resolvers/adhoc-query-helpers.ts +0 -67
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Starts the durable work-queue host inside MJServer when `workQueue.enabled` is set.
|
|
3
|
+
* @module MJServer/services
|
|
4
|
+
*/
|
|
5
|
+
import { randomBytes } from 'node:crypto';
|
|
6
|
+
import { hostname } from 'node:os';
|
|
7
|
+
import { LogError, LogStatus } from '@memberjunction/core';
|
|
8
|
+
import { UserCache } from '@memberjunction/generic-database-provider';
|
|
9
|
+
import { MJWorkLogger, WorkQueueEngine, WorkQueueHost } from '@memberjunction/work-queue-engine';
|
|
10
|
+
import { TaskGraphProviderFactory } from './TaskGraphProviderFactory.js';
|
|
11
|
+
export const WORK_QUEUE_DISABLE_ENV = 'MJ_DISABLE_WORK_QUEUE_HOST';
|
|
12
|
+
/** Matches the width of WorkQueueDelivery.LeaseOwner. */
|
|
13
|
+
const MAX_INSTANCE_ID_LENGTH = 200;
|
|
14
|
+
export const DEFAULT_WORK_QUEUE_HOST_START_DEPENDENCIES = {
|
|
15
|
+
Env: process.env,
|
|
16
|
+
FindUserByEmail: email => UserCache.Users.find(user => user.Email?.trim().toLowerCase() === email.trim().toLowerCase()),
|
|
17
|
+
ConfigureEngine: async (user, provider) => {
|
|
18
|
+
await WorkQueueEngine.Instance.Config(false, user, provider);
|
|
19
|
+
await ReportTopologyIssues(WorkQueueEngine.Instance);
|
|
20
|
+
return WorkQueueEngine.Instance;
|
|
21
|
+
},
|
|
22
|
+
CreateHost: (config, engine, user, provider, providerSource) => new WorkQueueHost(config, engine, user, provider, new MJWorkLogger(), { ProviderSource: providerSource }),
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Topology rows, capability gating, driver bindings and database prerequisites (03 §11) — including SQL Server's
|
|
26
|
+
* READ_COMMITTED_SNAPSHOT requirement (03 §7). Problems are logged, never thrown: the planner still gates each
|
|
27
|
+
* subscription, and an operator can read the same list from WorkQueue.ValidateBindings.
|
|
28
|
+
*/
|
|
29
|
+
async function ReportTopologyIssues(engine) {
|
|
30
|
+
try {
|
|
31
|
+
for (const issue of await engine.ValidateTopology()) {
|
|
32
|
+
const line = `[WorkQueue] ${issue.Severity}: ${issue.Subject} — ${issue.Message}`;
|
|
33
|
+
if (issue.Severity === 'Error') {
|
|
34
|
+
LogError(line);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
LogStatus(line);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
LogError(`[WorkQueue] Topology validation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function IsWorkQueueHostDisabledByEnv(env) {
|
|
46
|
+
return env[WORK_QUEUE_DISABLE_ENV] === '1';
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Host and pid for humans reading logs; the random suffix for uniqueness — containers routinely share pid 1 and
|
|
50
|
+
* HOSTNAME is not always exported. A restart is a new instance, so a dead process's leases simply expire.
|
|
51
|
+
*/
|
|
52
|
+
export function CreateWorkQueueInstanceID(env = process.env) {
|
|
53
|
+
const host = env.HOSTNAME ?? hostname();
|
|
54
|
+
return `${host}-${process.pid}-${randomBytes(4).toString('hex')}`.slice(0, MAX_INSTANCE_ID_LENGTH);
|
|
55
|
+
}
|
|
56
|
+
export function BuildWorkQueueHostConfig(config, instanceID) {
|
|
57
|
+
return {
|
|
58
|
+
InstanceID: instanceID,
|
|
59
|
+
Subscriptions: config.subscriptions.map(entry => ({ Name: entry.name, Concurrency: entry.concurrency })),
|
|
60
|
+
IdlePollMinMs: config.idlePollMinMs,
|
|
61
|
+
IdlePollMaxMs: config.idlePollMaxMs,
|
|
62
|
+
ShutdownDrainMs: config.shutdownDrainMs,
|
|
63
|
+
SweeperIntervalMs: config.sweeperEnabled ? config.sweeperIntervalMs : 0,
|
|
64
|
+
ReconcileIntervalMs: config.reconcileIntervalMs,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** A fresh SQL Server provider per delivery over the shared pool; the server provider otherwise. */
|
|
68
|
+
export class MJServerWorkQueueProviderSource {
|
|
69
|
+
constructor(pool, fallback) {
|
|
70
|
+
this.fallback = fallback;
|
|
71
|
+
this.factory = pool ? new TaskGraphProviderFactory(pool) : null;
|
|
72
|
+
}
|
|
73
|
+
CreateProvider() {
|
|
74
|
+
return this.factory ? this.factory.CreateProvider() : Promise.resolve(this.fallback);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Returns the started host, or null when this instance runs no subscriptions. */
|
|
78
|
+
export async function StartWorkQueueHost(config, provider, providerSource, dependencies = DEFAULT_WORK_QUEUE_HOST_START_DEPENDENCIES) {
|
|
79
|
+
if (!config.enabled) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
if (IsWorkQueueHostDisabledByEnv(dependencies.Env)) {
|
|
83
|
+
LogStatus(`[WorkQueue] Host disabled by ${WORK_QUEUE_DISABLE_ENV}=1 — this process publishes but runs no subscriptions.`);
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const user = dependencies.FindUserByEmail(config.systemUserEmail);
|
|
87
|
+
if (!user) {
|
|
88
|
+
throw new Error(`[WorkQueue] System user not found with email: ${config.systemUserEmail} — set workQueue.systemUserEmail in mj.config.cjs`);
|
|
89
|
+
}
|
|
90
|
+
const engine = await dependencies.ConfigureEngine(user, provider);
|
|
91
|
+
const hostConfig = BuildWorkQueueHostConfig(config, CreateWorkQueueInstanceID(dependencies.Env));
|
|
92
|
+
const host = dependencies.CreateHost(hostConfig, engine, user, provider, providerSource);
|
|
93
|
+
await host.Start();
|
|
94
|
+
LogStatus(`🔄 Work Queue host ${hostConfig.InstanceID}: ${hostConfig.Subscriptions.map(s => `${s.Name}×${s.Concurrency}`).join(', ')}`);
|
|
95
|
+
return host;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=WorkQueueHostService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkQueueHostService.js","sourceRoot":"","sources":["../../src/services/WorkQueueHostService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The `workQueue` configuration section. Kept out of config.ts so it can be tested without
|
|
3
|
+
* config.ts's module-load database validation.
|
|
4
|
+
* @module MJServer/services
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
export declare const WorkQueueSubscriptionEntrySchema: z.ZodObject<{
|
|
8
|
+
/** A subscription name, or '*' for every MJWorker subscription. */
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
/** Deliveries this instance processes concurrently for the subscription. */
|
|
11
|
+
concurrency: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
name?: string;
|
|
14
|
+
concurrency?: number;
|
|
15
|
+
}, {
|
|
16
|
+
name?: string;
|
|
17
|
+
concurrency?: number;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Durable work-queue host. When enabled, this process runs its share of MJWorker subscriptions. Every claim is atomic
|
|
21
|
+
* against shared state, so any number of instances may enable it against one database.
|
|
22
|
+
*/
|
|
23
|
+
export declare const WorkQueueSchema: z.ZodEffects<z.ZodObject<{
|
|
24
|
+
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
25
|
+
systemUserEmail: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
26
|
+
subscriptions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
27
|
+
/** A subscription name, or '*' for every MJWorker subscription. */
|
|
28
|
+
name: z.ZodString;
|
|
29
|
+
/** Deliveries this instance processes concurrently for the subscription. */
|
|
30
|
+
concurrency: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
name?: string;
|
|
33
|
+
concurrency?: number;
|
|
34
|
+
}, {
|
|
35
|
+
name?: string;
|
|
36
|
+
concurrency?: number;
|
|
37
|
+
}>, "many">>>;
|
|
38
|
+
idlePollMinMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
39
|
+
idlePollMaxMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
40
|
+
shutdownDrainMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
41
|
+
sweeperEnabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
42
|
+
sweeperIntervalMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
43
|
+
reconcileIntervalMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
enabled?: boolean;
|
|
46
|
+
systemUserEmail?: string;
|
|
47
|
+
subscriptions?: {
|
|
48
|
+
name?: string;
|
|
49
|
+
concurrency?: number;
|
|
50
|
+
}[];
|
|
51
|
+
idlePollMinMs?: number;
|
|
52
|
+
idlePollMaxMs?: number;
|
|
53
|
+
shutdownDrainMs?: number;
|
|
54
|
+
sweeperEnabled?: boolean;
|
|
55
|
+
sweeperIntervalMs?: number;
|
|
56
|
+
reconcileIntervalMs?: number;
|
|
57
|
+
}, {
|
|
58
|
+
enabled?: boolean;
|
|
59
|
+
systemUserEmail?: string;
|
|
60
|
+
subscriptions?: {
|
|
61
|
+
name?: string;
|
|
62
|
+
concurrency?: number;
|
|
63
|
+
}[];
|
|
64
|
+
idlePollMinMs?: number;
|
|
65
|
+
idlePollMaxMs?: number;
|
|
66
|
+
shutdownDrainMs?: number;
|
|
67
|
+
sweeperEnabled?: boolean;
|
|
68
|
+
sweeperIntervalMs?: number;
|
|
69
|
+
reconcileIntervalMs?: number;
|
|
70
|
+
}>, {
|
|
71
|
+
enabled?: boolean;
|
|
72
|
+
systemUserEmail?: string;
|
|
73
|
+
subscriptions?: {
|
|
74
|
+
name?: string;
|
|
75
|
+
concurrency?: number;
|
|
76
|
+
}[];
|
|
77
|
+
idlePollMinMs?: number;
|
|
78
|
+
idlePollMaxMs?: number;
|
|
79
|
+
shutdownDrainMs?: number;
|
|
80
|
+
sweeperEnabled?: boolean;
|
|
81
|
+
sweeperIntervalMs?: number;
|
|
82
|
+
reconcileIntervalMs?: number;
|
|
83
|
+
}, {
|
|
84
|
+
enabled?: boolean;
|
|
85
|
+
systemUserEmail?: string;
|
|
86
|
+
subscriptions?: {
|
|
87
|
+
name?: string;
|
|
88
|
+
concurrency?: number;
|
|
89
|
+
}[];
|
|
90
|
+
idlePollMinMs?: number;
|
|
91
|
+
idlePollMaxMs?: number;
|
|
92
|
+
shutdownDrainMs?: number;
|
|
93
|
+
sweeperEnabled?: boolean;
|
|
94
|
+
sweeperIntervalMs?: number;
|
|
95
|
+
reconcileIntervalMs?: number;
|
|
96
|
+
}>;
|
|
97
|
+
export type WorkQueueConfig = z.infer<typeof WorkQueueSchema>;
|
|
98
|
+
/**
|
|
99
|
+
* The merge base for mj.config.cjs. Like scheduledJobs and integrationSyncWorker, the EFFECTIVE default system user
|
|
100
|
+
* is the placeholder: set workQueue.systemUserEmail explicitly, or StartWorkQueueHost fails fast and says so.
|
|
101
|
+
*/
|
|
102
|
+
export declare const DEFAULT_WORK_QUEUE_CONFIG: WorkQueueConfig;
|
|
103
|
+
//# sourceMappingURL=workQueueConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workQueueConfig.d.ts","sourceRoot":"","sources":["../../src/services/workQueueConfig.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gCAAgC;IAC3C,mEAAmE;;IAEnE,4EAA4E;;;;;;;;EAE5E,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;QAV1B,mEAAmE;;QAEnE,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuB1E,CAAC;AAEL,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,eAUvC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The `workQueue` configuration section. Kept out of config.ts so it can be tested without
|
|
3
|
+
* config.ts's module-load database validation.
|
|
4
|
+
* @module MJServer/services
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
export const WorkQueueSubscriptionEntrySchema = z.object({
|
|
8
|
+
/** A subscription name, or '*' for every MJWorker subscription. */
|
|
9
|
+
name: z.string().min(1),
|
|
10
|
+
/** Deliveries this instance processes concurrently for the subscription. */
|
|
11
|
+
concurrency: z.number().int().positive().optional().default(4),
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Durable work-queue host. When enabled, this process runs its share of MJWorker subscriptions. Every claim is atomic
|
|
15
|
+
* against shared state, so any number of instances may enable it against one database.
|
|
16
|
+
*/
|
|
17
|
+
export const WorkQueueSchema = z
|
|
18
|
+
.object({
|
|
19
|
+
enabled: z.boolean().optional().default(false),
|
|
20
|
+
systemUserEmail: z.string().optional().default('system@memberjunction.org'),
|
|
21
|
+
subscriptions: z.array(WorkQueueSubscriptionEntrySchema).optional().default([{ name: '*', concurrency: 4 }]),
|
|
22
|
+
idlePollMinMs: z.number().int().positive().optional().default(250),
|
|
23
|
+
idlePollMaxMs: z.number().int().positive().optional().default(5000),
|
|
24
|
+
shutdownDrainMs: z.number().int().nonnegative().optional().default(8000),
|
|
25
|
+
sweeperEnabled: z.boolean().optional().default(true),
|
|
26
|
+
sweeperIntervalMs: z.number().int().positive().optional().default(60000),
|
|
27
|
+
reconcileIntervalMs: z.number().int().nonnegative().optional().default(30000),
|
|
28
|
+
})
|
|
29
|
+
.refine(config => config.idlePollMaxMs >= config.idlePollMinMs, {
|
|
30
|
+
message: 'workQueue.idlePollMaxMs must be >= workQueue.idlePollMinMs',
|
|
31
|
+
path: ['idlePollMaxMs'],
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* The merge base for mj.config.cjs. Like scheduledJobs and integrationSyncWorker, the EFFECTIVE default system user
|
|
35
|
+
* is the placeholder: set workQueue.systemUserEmail explicitly, or StartWorkQueueHost fails fast and says so.
|
|
36
|
+
*/
|
|
37
|
+
export const DEFAULT_WORK_QUEUE_CONFIG = {
|
|
38
|
+
enabled: false,
|
|
39
|
+
systemUserEmail: 'not.set@nowhere.com',
|
|
40
|
+
subscriptions: [{ name: '*', concurrency: 4 }],
|
|
41
|
+
idlePollMinMs: 250,
|
|
42
|
+
idlePollMaxMs: 5000,
|
|
43
|
+
shutdownDrainMs: 8000,
|
|
44
|
+
sweeperEnabled: true,
|
|
45
|
+
sweeperIntervalMs: 60000,
|
|
46
|
+
reconcileIntervalMs: 30000,
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=workQueueConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workQueueConfig.js","sourceRoot":"","sources":["../../src/services/workQueueConfig.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC;IACvD,mEAAmE;IACnE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,4EAA4E;IAC5E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAC/D,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC7B,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC;IAC3E,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5G,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IAClE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACxE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACpD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACxE,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC9E,CAAC;KACD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,EAAE;IAC9D,OAAO,EAAE,4DAA4D;IACrE,IAAI,EAAE,CAAC,eAAe,CAAC;CACxB,CAAC,CAAC;AAIL;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAoB;IACxD,OAAO,EAAE,KAAK;IACd,eAAe,EAAE,qBAAqB;IACtC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAC9C,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,iBAAiB,EAAE,KAAK;IACxB,mBAAmB,EAAE,KAAK;CAC3B,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -110,6 +110,11 @@ export type RunViewGenericParams = {
|
|
|
110
110
|
* Propagated to `RunViewParams.DataSource`.
|
|
111
111
|
*/
|
|
112
112
|
dataSource?: 'Live' | 'Materialized';
|
|
113
|
+
/**
|
|
114
|
+
* When true, binary fields (`varbinary` / `bytea`, as base64 strings) are returned.
|
|
115
|
+
* Propagated to `RunViewParams.IncludeBinaryFields`.
|
|
116
|
+
*/
|
|
117
|
+
includeBinaryFields?: boolean;
|
|
113
118
|
};
|
|
114
119
|
export declare class MJServerEvent {
|
|
115
120
|
type: 'setupComplete' | 'requestReceived' | 'requestCompleted' | 'requestFailed';
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAqDxE,MAAM,OAAO,YAAY;CAGxB;AAED,MAAM,OAAO,cAAc;IASzB,YAAY,IAA4J;QACtK,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAAA,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAqDxE,MAAM,OAAO,YAAY;CAGxB;AAED,MAAM,OAAO,cAAc;IASzB,YAAY,IAA4J;QACtK,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAAA,CAAC;AAmDF,MAAM,OAAO,aAAa;CAKzB;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA2B,EAAE,WAA6B,EAAE,WAAwB,EAAE,SAAe;IACpI,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;IAClC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAChC,KAAK,CAAC,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;IAEzC,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;IAC1B,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;IACjB,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC;IACvC,GAAG,CAAC,SAAS,GAAG,oBAAoB,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA2B,EAAE,WAA6B,EAAE,WAAwB,EAAE,SAAe;IACpI,OAAO,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAC/D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/server",
|
|
3
|
-
"version": "6.2.0-edge.
|
|
3
|
+
"version": "6.2.0-edge.3",
|
|
4
4
|
"description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -19,98 +19,99 @@
|
|
|
19
19
|
"@as-integrations/express5": "^1.0.0",
|
|
20
20
|
"@graphql-tools/schema": "^10.0.38",
|
|
21
21
|
"@graphql-tools/utils": "^11.0.0",
|
|
22
|
-
"@memberjunction/actions": "6.2.0-edge.
|
|
23
|
-
"@memberjunction/actions-apollo": "6.2.0-edge.
|
|
24
|
-
"@memberjunction/actions-base": "6.2.0-edge.
|
|
25
|
-
"@memberjunction/actions-bizapps-accounting": "6.2.0-edge.
|
|
26
|
-
"@memberjunction/actions-bizapps-crm": "6.2.0-edge.
|
|
27
|
-
"@memberjunction/actions-bizapps-formbuilders": "6.2.0-edge.
|
|
28
|
-
"@memberjunction/actions-bizapps-lms": "6.2.0-edge.
|
|
29
|
-
"@memberjunction/actions-bizapps-social": "6.2.0-edge.
|
|
30
|
-
"@memberjunction/ai": "6.2.0-edge.
|
|
31
|
-
"@memberjunction/ai-agent-manager": "6.2.0-edge.
|
|
32
|
-
"@memberjunction/ai-agent-manager-actions": "6.2.0-edge.
|
|
33
|
-
"@memberjunction/ai-agents": "6.2.0-edge.
|
|
34
|
-
"@memberjunction/ai-bridge-base": "6.2.0-edge.
|
|
35
|
-
"@memberjunction/ai-bridge-ringcentral": "6.2.0-edge.
|
|
36
|
-
"@memberjunction/ai-bridge-server": "6.2.0-edge.
|
|
37
|
-
"@memberjunction/ai-bridge-teams": "6.2.0-edge.
|
|
38
|
-
"@memberjunction/ai-bridge-twilio": "6.2.0-edge.
|
|
39
|
-
"@memberjunction/ai-bridge-vonage": "6.2.0-edge.
|
|
40
|
-
"@memberjunction/ai-core-plus": "6.2.0-edge.
|
|
41
|
-
"@memberjunction/ai-engine-base": "6.2.0-edge.
|
|
42
|
-
"@memberjunction/ai-mcp-client": "6.2.0-edge.
|
|
43
|
-
"@memberjunction/ai-prompts": "6.2.0-edge.
|
|
44
|
-
"@memberjunction/ai-provider-bundle": "6.2.0-edge.
|
|
45
|
-
"@memberjunction/ai-vector-dupe": "6.2.0-edge.
|
|
46
|
-
"@memberjunction/ai-vector-sync": "6.2.0-edge.
|
|
47
|
-
"@memberjunction/ai-vectordb": "6.2.0-edge.
|
|
48
|
-
"@memberjunction/ai-vectors-pinecone": "6.2.0-edge.
|
|
49
|
-
"@memberjunction/aiengine": "6.2.0-edge.
|
|
50
|
-
"@memberjunction/api-keys": "6.2.0-edge.
|
|
51
|
-
"@memberjunction/auth-providers": "6.2.0-edge.
|
|
52
|
-
"@memberjunction/clustering-engine": "6.2.0-edge.
|
|
53
|
-
"@memberjunction/codegen-lib": "6.2.0-edge.
|
|
54
|
-
"@memberjunction/communication-engine": "6.2.0-edge.
|
|
55
|
-
"@memberjunction/communication-ms-graph": "6.2.0-edge.
|
|
56
|
-
"@memberjunction/communication-sendgrid": "6.2.0-edge.
|
|
57
|
-
"@memberjunction/communication-types": "6.2.0-edge.
|
|
58
|
-
"@memberjunction/component-registry-client-sdk": "6.2.0-edge.
|
|
59
|
-
"@memberjunction/computer-use": "6.2.0-edge.
|
|
60
|
-
"@memberjunction/computer-use-engine": "6.2.0-edge.
|
|
61
|
-
"@memberjunction/config": "6.2.0-edge.
|
|
62
|
-
"@memberjunction/core": "6.2.0-edge.
|
|
63
|
-
"@memberjunction/core-actions": "6.2.0-edge.
|
|
64
|
-
"@memberjunction/core-entities": "6.2.0-edge.
|
|
65
|
-
"@memberjunction/core-entities-server": "6.2.0-edge.
|
|
66
|
-
"@memberjunction/credentials": "6.2.0-edge.
|
|
67
|
-
"@memberjunction/data-context": "6.2.0-edge.
|
|
68
|
-
"@memberjunction/data-context-server": "6.2.0-edge.
|
|
69
|
-
"@memberjunction/doc-utils": "6.2.0-edge.
|
|
70
|
-
"@memberjunction/encryption": "6.2.0-edge.
|
|
71
|
-
"@memberjunction/entity-communications-base": "6.2.0-edge.
|
|
72
|
-
"@memberjunction/entity-communications-server": "6.2.0-edge.
|
|
73
|
-
"@memberjunction/esignature": "6.2.0-edge.
|
|
74
|
-
"@memberjunction/external-change-detection": "6.2.0-edge.
|
|
75
|
-
"@memberjunction/generic-database-provider": "6.2.0-edge.
|
|
76
|
-
"@memberjunction/global": "6.2.0-edge.
|
|
77
|
-
"@memberjunction/graphql-dataprovider": "6.2.0-edge.
|
|
78
|
-
"@memberjunction/integration-engine": "6.2.0-edge.
|
|
79
|
-
"@memberjunction/integration-engine-base": "6.2.0-edge.
|
|
80
|
-
"@memberjunction/integration-progress-artifacts": "6.2.0-edge.
|
|
81
|
-
"@memberjunction/integration-schema-builder": "6.2.0-edge.
|
|
82
|
-
"@memberjunction/interactive-component-types": "6.2.0-edge.
|
|
83
|
-
"@memberjunction/lists": "6.2.0-edge.
|
|
84
|
-
"@memberjunction/lists-base": "6.2.0-edge.
|
|
85
|
-
"@memberjunction/livekit-room-server": "6.2.0-edge.
|
|
86
|
-
"@memberjunction/network-utils": "6.2.0-edge.
|
|
87
|
-
"@memberjunction/notifications": "6.2.0-edge.
|
|
88
|
-
"@memberjunction/postgresql-dataprovider": "6.2.0-edge.
|
|
89
|
-
"@memberjunction/queue": "6.2.0-edge.
|
|
90
|
-
"@memberjunction/record-comparison": "6.2.0-edge.
|
|
91
|
-
"@memberjunction/redis-provider": "6.2.0-edge.
|
|
92
|
-
"@memberjunction/remote-browser-base": "6.2.0-edge.
|
|
93
|
-
"@memberjunction/remote-browser-cdp": "6.2.0-edge.
|
|
94
|
-
"@memberjunction/remote-browser-selfhost": "6.2.0-edge.
|
|
95
|
-
"@memberjunction/remote-browser-server": "6.2.0-edge.
|
|
96
|
-
"@memberjunction/scheduling-actions": "6.2.0-edge.
|
|
97
|
-
"@memberjunction/scheduling-base-types": "6.2.0-edge.
|
|
98
|
-
"@memberjunction/scheduling-engine": "6.2.0-edge.
|
|
99
|
-
"@memberjunction/scheduling-engine-base": "6.2.0-edge.
|
|
100
|
-
"@memberjunction/schema-engine": "6.2.0-edge.
|
|
101
|
-
"@memberjunction/search-engine": "6.2.0-edge.
|
|
102
|
-
"@memberjunction/server-extensions-core": "6.2.0-edge.
|
|
103
|
-
"@memberjunction/sql-dialect": "6.2.0-edge.
|
|
104
|
-
"@memberjunction/sql-parser": "6.2.0-edge.
|
|
105
|
-
"@memberjunction/sqlserver-dataprovider": "6.2.0-edge.
|
|
106
|
-
"@memberjunction/storage": "6.2.0-edge.
|
|
107
|
-
"@memberjunction/tag-engine": "6.2.0-edge.
|
|
108
|
-
"@memberjunction/tag-engine-base": "6.2.0-edge.
|
|
109
|
-
"@memberjunction/task-graph": "6.2.0-edge.
|
|
110
|
-
"@memberjunction/templates": "6.2.0-edge.
|
|
111
|
-
"@memberjunction/testing-engine": "6.2.0-edge.
|
|
112
|
-
"@memberjunction/testing-engine-base": "6.2.0-edge.
|
|
113
|
-
"@memberjunction/version-history": "6.2.0-edge.
|
|
22
|
+
"@memberjunction/actions": "6.2.0-edge.3",
|
|
23
|
+
"@memberjunction/actions-apollo": "6.2.0-edge.3",
|
|
24
|
+
"@memberjunction/actions-base": "6.2.0-edge.3",
|
|
25
|
+
"@memberjunction/actions-bizapps-accounting": "6.2.0-edge.3",
|
|
26
|
+
"@memberjunction/actions-bizapps-crm": "6.2.0-edge.3",
|
|
27
|
+
"@memberjunction/actions-bizapps-formbuilders": "6.2.0-edge.3",
|
|
28
|
+
"@memberjunction/actions-bizapps-lms": "6.2.0-edge.3",
|
|
29
|
+
"@memberjunction/actions-bizapps-social": "6.2.0-edge.3",
|
|
30
|
+
"@memberjunction/ai": "6.2.0-edge.3",
|
|
31
|
+
"@memberjunction/ai-agent-manager": "6.2.0-edge.3",
|
|
32
|
+
"@memberjunction/ai-agent-manager-actions": "6.2.0-edge.3",
|
|
33
|
+
"@memberjunction/ai-agents": "6.2.0-edge.3",
|
|
34
|
+
"@memberjunction/ai-bridge-base": "6.2.0-edge.3",
|
|
35
|
+
"@memberjunction/ai-bridge-ringcentral": "6.2.0-edge.3",
|
|
36
|
+
"@memberjunction/ai-bridge-server": "6.2.0-edge.3",
|
|
37
|
+
"@memberjunction/ai-bridge-teams": "6.2.0-edge.3",
|
|
38
|
+
"@memberjunction/ai-bridge-twilio": "6.2.0-edge.3",
|
|
39
|
+
"@memberjunction/ai-bridge-vonage": "6.2.0-edge.3",
|
|
40
|
+
"@memberjunction/ai-core-plus": "6.2.0-edge.3",
|
|
41
|
+
"@memberjunction/ai-engine-base": "6.2.0-edge.3",
|
|
42
|
+
"@memberjunction/ai-mcp-client": "6.2.0-edge.3",
|
|
43
|
+
"@memberjunction/ai-prompts": "6.2.0-edge.3",
|
|
44
|
+
"@memberjunction/ai-provider-bundle": "6.2.0-edge.3",
|
|
45
|
+
"@memberjunction/ai-vector-dupe": "6.2.0-edge.3",
|
|
46
|
+
"@memberjunction/ai-vector-sync": "6.2.0-edge.3",
|
|
47
|
+
"@memberjunction/ai-vectordb": "6.2.0-edge.3",
|
|
48
|
+
"@memberjunction/ai-vectors-pinecone": "6.2.0-edge.3",
|
|
49
|
+
"@memberjunction/aiengine": "6.2.0-edge.3",
|
|
50
|
+
"@memberjunction/api-keys": "6.2.0-edge.3",
|
|
51
|
+
"@memberjunction/auth-providers": "6.2.0-edge.3",
|
|
52
|
+
"@memberjunction/clustering-engine": "6.2.0-edge.3",
|
|
53
|
+
"@memberjunction/codegen-lib": "6.2.0-edge.3",
|
|
54
|
+
"@memberjunction/communication-engine": "6.2.0-edge.3",
|
|
55
|
+
"@memberjunction/communication-ms-graph": "6.2.0-edge.3",
|
|
56
|
+
"@memberjunction/communication-sendgrid": "6.2.0-edge.3",
|
|
57
|
+
"@memberjunction/communication-types": "6.2.0-edge.3",
|
|
58
|
+
"@memberjunction/component-registry-client-sdk": "6.2.0-edge.3",
|
|
59
|
+
"@memberjunction/computer-use": "6.2.0-edge.3",
|
|
60
|
+
"@memberjunction/computer-use-engine": "6.2.0-edge.3",
|
|
61
|
+
"@memberjunction/config": "6.2.0-edge.3",
|
|
62
|
+
"@memberjunction/core": "6.2.0-edge.3",
|
|
63
|
+
"@memberjunction/core-actions": "6.2.0-edge.3",
|
|
64
|
+
"@memberjunction/core-entities": "6.2.0-edge.3",
|
|
65
|
+
"@memberjunction/core-entities-server": "6.2.0-edge.3",
|
|
66
|
+
"@memberjunction/credentials": "6.2.0-edge.3",
|
|
67
|
+
"@memberjunction/data-context": "6.2.0-edge.3",
|
|
68
|
+
"@memberjunction/data-context-server": "6.2.0-edge.3",
|
|
69
|
+
"@memberjunction/doc-utils": "6.2.0-edge.3",
|
|
70
|
+
"@memberjunction/encryption": "6.2.0-edge.3",
|
|
71
|
+
"@memberjunction/entity-communications-base": "6.2.0-edge.3",
|
|
72
|
+
"@memberjunction/entity-communications-server": "6.2.0-edge.3",
|
|
73
|
+
"@memberjunction/esignature": "6.2.0-edge.3",
|
|
74
|
+
"@memberjunction/external-change-detection": "6.2.0-edge.3",
|
|
75
|
+
"@memberjunction/generic-database-provider": "6.2.0-edge.3",
|
|
76
|
+
"@memberjunction/global": "6.2.0-edge.3",
|
|
77
|
+
"@memberjunction/graphql-dataprovider": "6.2.0-edge.3",
|
|
78
|
+
"@memberjunction/integration-engine": "6.2.0-edge.3",
|
|
79
|
+
"@memberjunction/integration-engine-base": "6.2.0-edge.3",
|
|
80
|
+
"@memberjunction/integration-progress-artifacts": "6.2.0-edge.3",
|
|
81
|
+
"@memberjunction/integration-schema-builder": "6.2.0-edge.3",
|
|
82
|
+
"@memberjunction/interactive-component-types": "6.2.0-edge.3",
|
|
83
|
+
"@memberjunction/lists": "6.2.0-edge.3",
|
|
84
|
+
"@memberjunction/lists-base": "6.2.0-edge.3",
|
|
85
|
+
"@memberjunction/livekit-room-server": "6.2.0-edge.3",
|
|
86
|
+
"@memberjunction/network-utils": "6.2.0-edge.3",
|
|
87
|
+
"@memberjunction/notifications": "6.2.0-edge.3",
|
|
88
|
+
"@memberjunction/postgresql-dataprovider": "6.2.0-edge.3",
|
|
89
|
+
"@memberjunction/queue": "6.2.0-edge.3",
|
|
90
|
+
"@memberjunction/record-comparison": "6.2.0-edge.3",
|
|
91
|
+
"@memberjunction/redis-provider": "6.2.0-edge.3",
|
|
92
|
+
"@memberjunction/remote-browser-base": "6.2.0-edge.3",
|
|
93
|
+
"@memberjunction/remote-browser-cdp": "6.2.0-edge.3",
|
|
94
|
+
"@memberjunction/remote-browser-selfhost": "6.2.0-edge.3",
|
|
95
|
+
"@memberjunction/remote-browser-server": "6.2.0-edge.3",
|
|
96
|
+
"@memberjunction/scheduling-actions": "6.2.0-edge.3",
|
|
97
|
+
"@memberjunction/scheduling-base-types": "6.2.0-edge.3",
|
|
98
|
+
"@memberjunction/scheduling-engine": "6.2.0-edge.3",
|
|
99
|
+
"@memberjunction/scheduling-engine-base": "6.2.0-edge.3",
|
|
100
|
+
"@memberjunction/schema-engine": "6.2.0-edge.3",
|
|
101
|
+
"@memberjunction/search-engine": "6.2.0-edge.3",
|
|
102
|
+
"@memberjunction/server-extensions-core": "6.2.0-edge.3",
|
|
103
|
+
"@memberjunction/sql-dialect": "6.2.0-edge.3",
|
|
104
|
+
"@memberjunction/sql-parser": "6.2.0-edge.3",
|
|
105
|
+
"@memberjunction/sqlserver-dataprovider": "6.2.0-edge.3",
|
|
106
|
+
"@memberjunction/storage": "6.2.0-edge.3",
|
|
107
|
+
"@memberjunction/tag-engine": "6.2.0-edge.3",
|
|
108
|
+
"@memberjunction/tag-engine-base": "6.2.0-edge.3",
|
|
109
|
+
"@memberjunction/task-graph": "6.2.0-edge.3",
|
|
110
|
+
"@memberjunction/templates": "6.2.0-edge.3",
|
|
111
|
+
"@memberjunction/testing-engine": "6.2.0-edge.3",
|
|
112
|
+
"@memberjunction/testing-engine-base": "6.2.0-edge.3",
|
|
113
|
+
"@memberjunction/version-history": "6.2.0-edge.3",
|
|
114
|
+
"@memberjunction/work-queue-engine": "6.2.0-edge.3",
|
|
114
115
|
"@octokit/auth-app": "^7.1.5",
|
|
115
116
|
"@octokit/rest": "^21.1.1",
|
|
116
117
|
"@types/compression": "^1.8.1",
|
|
@@ -149,7 +150,7 @@
|
|
|
149
150
|
"zod": "^3.25.0"
|
|
150
151
|
},
|
|
151
152
|
"devDependencies": {
|
|
152
|
-
"@memberjunction/conversations-runtime": "6.2.0-edge.
|
|
153
|
+
"@memberjunction/conversations-runtime": "6.2.0-edge.3",
|
|
153
154
|
"@types/express": "^5.0.6",
|
|
154
155
|
"pkgroll": "2.23.0",
|
|
155
156
|
"rimraf": "6.1.2",
|
|
@@ -60,20 +60,15 @@ function stubMetadata(): void {
|
|
|
60
60
|
|
|
61
61
|
describe('AdhocQueryResolver source-shape contract', () => {
|
|
62
62
|
|
|
63
|
-
it('Bug #2: AdhocQueryResolver must
|
|
63
|
+
it('Bug #2: AdhocQueryResolver must hand the SQL to the provider ad-hoc path, authorizing the rendered SQL first', () => {
|
|
64
64
|
const src = readResolverSource();
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
// a partial subset.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
expect(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
it('Bug #2: AdhocQueryResolver must call RenderPipeline.Run() somewhere (currently does not)', () => {
|
|
74
|
-
const src = readResolverSource();
|
|
75
|
-
const callsRenderPipelineRun = /\bRenderPipeline\.Run\s*\(/.test(src);
|
|
76
|
-
expect(callsRenderPipelineRun).toBe(true);
|
|
65
|
+
// Composition, comment removal, the single-read rule and the row cap all happen in the
|
|
66
|
+
// provider's ad-hoc path (RenderPipeline), shared with in-process callers. The resolver must
|
|
67
|
+
// delegate there rather than re-implement a partial subset.
|
|
68
|
+
expect(/\.RunQuery\(\{[\s\S]*SQL: input\.SQL/.test(src)).toBe(true);
|
|
69
|
+
// It renders only to authorize what will be read, never to run it.
|
|
70
|
+
expect(/RenderPipeline\.Run\(/.test(src)).toBe(true);
|
|
71
|
+
expect(/assertFullQueryUsesReadableEntityViews\(rendered\.Trace\.AfterTemplates/.test(src)).toBe(true);
|
|
77
72
|
});
|
|
78
73
|
|
|
79
74
|
it('Bug #3: AdhocQueryResolver must NOT contain the manual `SELECT TOP N * FROM (...)` wrap', () => {
|
|
@@ -126,29 +121,13 @@ ORDER BY JoinYear DESC`;
|
|
|
126
121
|
// success/failure, the resolver should never hand a string containing
|
|
127
122
|
// "{{query:" to SQL Server.
|
|
128
123
|
//
|
|
129
|
-
// We encode this as a contract on the resolver source: it must
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
// "{{query:" must not reach `request.query(...)`.
|
|
124
|
+
// We encode this as a contract on the resolver source: it must not execute SQL itself.
|
|
125
|
+
// It hands input.SQL to the read-only provider's ad-hoc path, which renders it through
|
|
126
|
+
// RenderPipeline (resolving composition tokens) before anything reaches the database.
|
|
133
127
|
const src = readResolverSource();
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
// call above; here we additionally require that input.SQL flows
|
|
138
|
-
// through RenderPipeline.Run rather than directly to request.query.
|
|
139
|
-
//
|
|
140
|
-
// The current code contains `request.query(executableSql)` where
|
|
141
|
-
// `executableSql` is derived from input.SQL via a string concat —
|
|
142
|
-
// bypassing the pipeline entirely.
|
|
143
|
-
const directlyExecutesInputSQL = /request\.query\s*\(\s*input\.SQL\s*\)/.test(src);
|
|
144
|
-
expect(directlyExecutesInputSQL).toBe(false);
|
|
145
|
-
|
|
146
|
-
// And — the executable string must be derived from a pipeline result,
|
|
147
|
-
// not from an inline template literal that just concatenates input.SQL.
|
|
148
|
-
// Heuristic: the file should reference `FinalSQL` (the pipeline's
|
|
149
|
-
// output field) somewhere — this is what gets sent to the DB.
|
|
150
|
-
const referencesFinalSQL = /\bFinalSQL\b/.test(src);
|
|
151
|
-
expect(referencesFinalSQL).toBe(true);
|
|
128
|
+
const executesSQLItself = /request\.query\s*\(|\.ExecuteSQL\s*\(|new sql\.Request/.test(src);
|
|
129
|
+
expect(executesSQLItself).toBe(false);
|
|
130
|
+
expect(/\.RunQuery\(\{[\s\S]*SQL: input\.SQL/.test(src)).toBe(true);
|
|
152
131
|
});
|
|
153
132
|
});
|
|
154
133
|
|
|
@@ -79,9 +79,13 @@ describe('AdhocQueryResolver pagination source-shape contract', () => {
|
|
|
79
79
|
expect(/TotalRowCount:\s*recordset\.length/.test(src)).toBe(false);
|
|
80
80
|
});
|
|
81
81
|
|
|
82
|
-
it('must
|
|
82
|
+
it('must page through the read-only provider, passing MaxRows, StartRow and the timeout', () => {
|
|
83
83
|
const src = readResolverSource();
|
|
84
|
-
|
|
84
|
+
// The provider's ad-hoc path renders, pages in the database and counts; the resolver
|
|
85
|
+
// must hand it the paging inputs rather than run SQL itself.
|
|
86
|
+
expect(/GetReadOnlyProvider\(/.test(src)).toBe(true);
|
|
87
|
+
expect(/\.RunQuery\(\{[\s\S]*SQL: input\.SQL[\s\S]*MaxRows: input\.MaxRows[\s\S]*StartRow: startRow[\s\S]*TimeoutSeconds/.test(src)).toBe(true);
|
|
88
|
+
expect(/from 'mssql'|new sql\.Request/.test(src)).toBe(false);
|
|
85
89
|
});
|
|
86
90
|
});
|
|
87
91
|
|
|
@@ -71,12 +71,12 @@ describe('AdhocQueryResolver scope guard placement', () => {
|
|
|
71
71
|
expect(/\bIsScopeLimitedPrincipal\s*\(/.test(src)).toBe(true);
|
|
72
72
|
});
|
|
73
73
|
|
|
74
|
-
it('refuses the principal BEFORE acquiring
|
|
74
|
+
it('refuses the principal BEFORE acquiring the read-only provider', () => {
|
|
75
75
|
// Authorization must gate the work, not run alongside it: if the guard landed after
|
|
76
|
-
// the
|
|
76
|
+
// the provider were acquired (or the SQL executed), a scope-limited caller would already
|
|
77
77
|
// have reached the database.
|
|
78
78
|
const guardAt = src.indexOf('IsScopeLimitedPrincipal(');
|
|
79
|
-
const dataSourceAt = src.indexOf('
|
|
79
|
+
const dataSourceAt = src.indexOf('GetReadOnlyProvider(');
|
|
80
80
|
expect(guardAt).toBeGreaterThan(-1);
|
|
81
81
|
expect(dataSourceAt).toBeGreaterThan(-1);
|
|
82
82
|
expect(guardAt).toBeLessThan(dataSourceAt);
|