@memberjunction/server 5.51.0 → 6.1.0-edge.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.
- package/LICENSE +7 -0
- package/dist/agentSessions/SessionManager.d.ts +22 -1
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +13 -3
- package/dist/agentSessions/SessionManager.js.map +1 -1
- package/dist/auth/actingContextResolver.d.ts +44 -0
- package/dist/auth/actingContextResolver.d.ts.map +1 -0
- package/dist/auth/actingContextResolver.js +18 -0
- package/dist/auth/actingContextResolver.js.map +1 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +1 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/sessionUserClone.d.ts +32 -0
- package/dist/auth/sessionUserClone.d.ts.map +1 -0
- package/dist/auth/sessionUserClone.js +50 -0
- package/dist/auth/sessionUserClone.js.map +1 -0
- package/dist/context.d.ts +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +43 -6
- package/dist/context.js.map +1 -1
- package/dist/generated/generated.d.ts +71 -0
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +383 -3
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/FireAndForgetHeartbeat.d.ts +5 -0
- package/dist/generic/FireAndForgetHeartbeat.d.ts.map +1 -1
- package/dist/generic/FireAndForgetHeartbeat.js +5 -4
- package/dist/generic/FireAndForgetHeartbeat.js.map +1 -1
- package/dist/generic/PushStatusResolver.d.ts +58 -0
- package/dist/generic/PushStatusResolver.d.ts.map +1 -1
- package/dist/generic/PushStatusResolver.js +42 -3
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +9 -0
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +31 -13
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/multiTenancy/index.d.ts +19 -0
- package/dist/multiTenancy/index.d.ts.map +1 -1
- package/dist/multiTenancy/index.js +82 -5
- package/dist/multiTenancy/index.js.map +1 -1
- package/dist/resolvers/ActionResolver.d.ts.map +1 -1
- package/dist/resolvers/ActionResolver.js +12 -5
- package/dist/resolvers/ActionResolver.js.map +1 -1
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +13 -16
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +15 -14
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +19 -26
- package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
- package/dist/resolvers/ReportResolver.d.ts.map +1 -1
- package/dist/resolvers/ReportResolver.js +11 -3
- package/dist/resolvers/ReportResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +30 -40
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTestResolver.js +90 -112
- package/dist/resolvers/RunTestResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeResolver.js +3 -3
- package/dist/resolvers/SearchKnowledgeResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeStreamResolver.js +2 -2
- package/dist/resolvers/SearchKnowledgeStreamResolver.js.map +1 -1
- package/dist/resolvers/VersionHistoryResolver.d.ts.map +1 -1
- package/dist/resolvers/VersionHistoryResolver.js +8 -12
- package/dist/resolvers/VersionHistoryResolver.js.map +1 -1
- package/dist/services/TaskOrchestrator.d.ts.map +1 -1
- package/dist/services/TaskOrchestrator.js +17 -15
- package/dist/services/TaskOrchestrator.js.map +1 -1
- package/package.json +100 -100
- package/src/__tests__/RealtimeBridgeResolver.test.ts +6 -0
- package/src/__tests__/SessionManager.test.ts +44 -0
- package/src/__tests__/multiTenancy.security.test.ts +254 -22
- package/src/__tests__/multiTenancy.test.ts +22 -0
- package/src/__tests__/pushStatusResolver.filter.test.ts +56 -0
- package/src/__tests__/resolverBase.rls.test.ts +4 -0
- package/src/__tests__/search-knowledge-tags.test.ts +74 -6
- package/src/__tests__/sessionUserClone.test.ts +161 -0
- package/src/agentSessions/SessionManager.ts +26 -2
- package/src/auth/actingContextResolver.ts +56 -0
- package/src/auth/index.ts +1 -0
- package/src/auth/sessionUserClone.ts +50 -0
- package/src/context.ts +48 -6
- package/src/generated/generated.ts +276 -3
- package/src/generic/FireAndForgetHeartbeat.ts +10 -4
- package/src/generic/PushStatusResolver.ts +79 -4
- package/src/generic/ResolverBase.ts +33 -13
- package/src/index.ts +4 -2
- package/src/multiTenancy/index.ts +92 -5
- package/src/resolvers/ActionResolver.ts +15 -7
- package/src/resolvers/MCPResolver.ts +13 -15
- package/src/resolvers/RealtimeClientSessionResolver.ts +15 -13
- package/src/resolvers/RemoteBrowserActionResolver.ts +19 -25
- package/src/resolvers/ReportResolver.ts +11 -3
- package/src/resolvers/RunAIAgentResolver.ts +30 -40
- package/src/resolvers/RunTestResolver.ts +90 -112
- package/src/resolvers/SearchKnowledgeResolver.ts +3 -3
- package/src/resolvers/SearchKnowledgeStreamResolver.ts +2 -2
- package/src/resolvers/VersionHistoryResolver.ts +10 -13
- package/src/resolvers/__tests__/ReportResolver.test.ts +279 -0
- package/src/services/TaskOrchestrator.ts +17 -17
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.1.0-edge.0",
|
|
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",
|
|
@@ -14,107 +14,99 @@
|
|
|
14
14
|
"exports": {
|
|
15
15
|
".": "./dist/index.js"
|
|
16
16
|
},
|
|
17
|
-
"scripts": {
|
|
18
|
-
"build": "tsc && tsc-alias -f",
|
|
19
|
-
"bundle": "tsc -noEmit && pkgroll --sourcemap --minify",
|
|
20
|
-
"watch": "tsc -w",
|
|
21
|
-
"test": "vitest run",
|
|
22
|
-
"test:watch": "vitest",
|
|
23
|
-
"test:coverage": "vitest run --coverage"
|
|
24
|
-
},
|
|
25
17
|
"dependencies": {
|
|
26
18
|
"@apollo/server": "^5.0.0",
|
|
27
19
|
"@as-integrations/express5": "^1.0.0",
|
|
28
|
-
"@graphql-tools/schema": "
|
|
20
|
+
"@graphql-tools/schema": "^10.0.38",
|
|
29
21
|
"@graphql-tools/utils": "^11.0.0",
|
|
30
|
-
"@memberjunction/actions": "
|
|
31
|
-
"@memberjunction/actions-apollo": "
|
|
32
|
-
"@memberjunction/actions-base": "
|
|
33
|
-
"@memberjunction/actions-bizapps-accounting": "
|
|
34
|
-
"@memberjunction/actions-bizapps-crm": "
|
|
35
|
-
"@memberjunction/actions-bizapps-formbuilders": "
|
|
36
|
-
"@memberjunction/actions-bizapps-lms": "
|
|
37
|
-
"@memberjunction/actions-bizapps-social": "
|
|
38
|
-
"@memberjunction/ai": "
|
|
39
|
-
"@memberjunction/ai-agent-manager": "
|
|
40
|
-
"@memberjunction/ai-agent-manager-actions": "
|
|
41
|
-
"@memberjunction/ai-agents": "
|
|
42
|
-
"@memberjunction/ai-bridge-base": "
|
|
43
|
-
"@memberjunction/ai-bridge-ringcentral": "
|
|
44
|
-
"@memberjunction/ai-bridge-server": "
|
|
45
|
-
"@memberjunction/ai-bridge-teams": "
|
|
46
|
-
"@memberjunction/ai-bridge-twilio": "
|
|
47
|
-
"@memberjunction/ai-bridge-vonage": "
|
|
48
|
-
"@memberjunction/ai-core-plus": "
|
|
49
|
-
"@memberjunction/ai-engine-base": "
|
|
50
|
-
"@memberjunction/ai-mcp-client": "
|
|
51
|
-
"@memberjunction/ai-prompts": "
|
|
52
|
-
"@memberjunction/ai-provider-bundle": "
|
|
53
|
-
"@memberjunction/ai-vector-sync": "
|
|
54
|
-
"@memberjunction/ai-vectordb": "
|
|
55
|
-
"@memberjunction/ai-vectors-pinecone": "
|
|
56
|
-
"@memberjunction/aiengine": "
|
|
57
|
-
"@memberjunction/api-keys": "
|
|
58
|
-
"@memberjunction/auth-providers": "
|
|
59
|
-
"@memberjunction/clustering-engine": "
|
|
60
|
-
"@memberjunction/codegen-lib": "
|
|
61
|
-
"@memberjunction/communication-engine": "
|
|
62
|
-
"@memberjunction/communication-ms-graph": "
|
|
63
|
-
"@memberjunction/communication-sendgrid": "
|
|
64
|
-
"@memberjunction/communication-types": "
|
|
65
|
-
"@memberjunction/component-registry-client-sdk": "
|
|
66
|
-
"@memberjunction/computer-use": "
|
|
67
|
-
"@memberjunction/computer-use-engine": "
|
|
68
|
-
"@memberjunction/config": "
|
|
69
|
-
"@memberjunction/core": "
|
|
70
|
-
"@memberjunction/core-actions": "
|
|
71
|
-
"@memberjunction/core-entities": "
|
|
72
|
-
"@memberjunction/core-entities-server": "
|
|
73
|
-
"@memberjunction/credentials": "
|
|
74
|
-
"@memberjunction/data-context": "
|
|
75
|
-
"@memberjunction/data-context-server": "
|
|
76
|
-
"@memberjunction/doc-utils": "
|
|
77
|
-
"@memberjunction/encryption": "
|
|
78
|
-
"@memberjunction/entity-communications-base": "
|
|
79
|
-
"@memberjunction/entity-communications-server": "
|
|
80
|
-
"@memberjunction/esignature": "
|
|
81
|
-
"@memberjunction/external-change-detection": "
|
|
82
|
-
"@memberjunction/generic-database-provider": "
|
|
83
|
-
"@memberjunction/global": "
|
|
84
|
-
"@memberjunction/graphql-dataprovider": "
|
|
85
|
-
"@memberjunction/integration-engine": "
|
|
86
|
-
"@memberjunction/integration-engine-base": "
|
|
87
|
-
"@memberjunction/integration-progress-artifacts": "
|
|
88
|
-
"@memberjunction/integration-schema-builder": "
|
|
89
|
-
"@memberjunction/interactive-component-types": "
|
|
90
|
-
"@memberjunction/lists": "
|
|
91
|
-
"@memberjunction/lists-base": "
|
|
92
|
-
"@memberjunction/livekit-room-server": "
|
|
93
|
-
"@memberjunction/notifications": "
|
|
94
|
-
"@memberjunction/postgresql-dataprovider": "
|
|
95
|
-
"@memberjunction/queue": "
|
|
96
|
-
"@memberjunction/record-comparison": "
|
|
97
|
-
"@memberjunction/redis-provider": "
|
|
98
|
-
"@memberjunction/remote-browser-base": "
|
|
99
|
-
"@memberjunction/remote-browser-cdp": "
|
|
100
|
-
"@memberjunction/remote-browser-selfhost": "
|
|
101
|
-
"@memberjunction/remote-browser-server": "
|
|
102
|
-
"@memberjunction/scheduling-actions": "
|
|
103
|
-
"@memberjunction/scheduling-base-types": "
|
|
104
|
-
"@memberjunction/scheduling-engine": "
|
|
105
|
-
"@memberjunction/scheduling-engine-base": "
|
|
106
|
-
"@memberjunction/schema-engine": "
|
|
107
|
-
"@memberjunction/search-engine": "
|
|
108
|
-
"@memberjunction/server-extensions-core": "
|
|
109
|
-
"@memberjunction/sql-dialect": "
|
|
110
|
-
"@memberjunction/sqlserver-dataprovider": "
|
|
111
|
-
"@memberjunction/storage": "
|
|
112
|
-
"@memberjunction/tag-engine": "
|
|
113
|
-
"@memberjunction/tag-engine-base": "
|
|
114
|
-
"@memberjunction/templates": "
|
|
115
|
-
"@memberjunction/testing-engine": "
|
|
116
|
-
"@memberjunction/testing-engine-base": "
|
|
117
|
-
"@memberjunction/version-history": "
|
|
22
|
+
"@memberjunction/actions": "6.1.0-edge.0",
|
|
23
|
+
"@memberjunction/actions-apollo": "6.1.0-edge.0",
|
|
24
|
+
"@memberjunction/actions-base": "6.1.0-edge.0",
|
|
25
|
+
"@memberjunction/actions-bizapps-accounting": "6.1.0-edge.0",
|
|
26
|
+
"@memberjunction/actions-bizapps-crm": "6.1.0-edge.0",
|
|
27
|
+
"@memberjunction/actions-bizapps-formbuilders": "6.1.0-edge.0",
|
|
28
|
+
"@memberjunction/actions-bizapps-lms": "6.1.0-edge.0",
|
|
29
|
+
"@memberjunction/actions-bizapps-social": "6.1.0-edge.0",
|
|
30
|
+
"@memberjunction/ai": "6.1.0-edge.0",
|
|
31
|
+
"@memberjunction/ai-agent-manager": "6.1.0-edge.0",
|
|
32
|
+
"@memberjunction/ai-agent-manager-actions": "6.1.0-edge.0",
|
|
33
|
+
"@memberjunction/ai-agents": "6.1.0-edge.0",
|
|
34
|
+
"@memberjunction/ai-bridge-base": "6.1.0-edge.0",
|
|
35
|
+
"@memberjunction/ai-bridge-ringcentral": "6.1.0-edge.0",
|
|
36
|
+
"@memberjunction/ai-bridge-server": "6.1.0-edge.0",
|
|
37
|
+
"@memberjunction/ai-bridge-teams": "6.1.0-edge.0",
|
|
38
|
+
"@memberjunction/ai-bridge-twilio": "6.1.0-edge.0",
|
|
39
|
+
"@memberjunction/ai-bridge-vonage": "6.1.0-edge.0",
|
|
40
|
+
"@memberjunction/ai-core-plus": "6.1.0-edge.0",
|
|
41
|
+
"@memberjunction/ai-engine-base": "6.1.0-edge.0",
|
|
42
|
+
"@memberjunction/ai-mcp-client": "6.1.0-edge.0",
|
|
43
|
+
"@memberjunction/ai-prompts": "6.1.0-edge.0",
|
|
44
|
+
"@memberjunction/ai-provider-bundle": "6.1.0-edge.0",
|
|
45
|
+
"@memberjunction/ai-vector-sync": "6.1.0-edge.0",
|
|
46
|
+
"@memberjunction/ai-vectordb": "6.1.0-edge.0",
|
|
47
|
+
"@memberjunction/ai-vectors-pinecone": "6.1.0-edge.0",
|
|
48
|
+
"@memberjunction/aiengine": "6.1.0-edge.0",
|
|
49
|
+
"@memberjunction/api-keys": "6.1.0-edge.0",
|
|
50
|
+
"@memberjunction/auth-providers": "6.1.0-edge.0",
|
|
51
|
+
"@memberjunction/clustering-engine": "6.1.0-edge.0",
|
|
52
|
+
"@memberjunction/codegen-lib": "6.1.0-edge.0",
|
|
53
|
+
"@memberjunction/communication-engine": "6.1.0-edge.0",
|
|
54
|
+
"@memberjunction/communication-ms-graph": "6.1.0-edge.0",
|
|
55
|
+
"@memberjunction/communication-sendgrid": "6.1.0-edge.0",
|
|
56
|
+
"@memberjunction/communication-types": "6.1.0-edge.0",
|
|
57
|
+
"@memberjunction/component-registry-client-sdk": "6.1.0-edge.0",
|
|
58
|
+
"@memberjunction/computer-use": "6.1.0-edge.0",
|
|
59
|
+
"@memberjunction/computer-use-engine": "6.1.0-edge.0",
|
|
60
|
+
"@memberjunction/config": "6.1.0-edge.0",
|
|
61
|
+
"@memberjunction/core": "6.1.0-edge.0",
|
|
62
|
+
"@memberjunction/core-actions": "6.1.0-edge.0",
|
|
63
|
+
"@memberjunction/core-entities": "6.1.0-edge.0",
|
|
64
|
+
"@memberjunction/core-entities-server": "6.1.0-edge.0",
|
|
65
|
+
"@memberjunction/credentials": "6.1.0-edge.0",
|
|
66
|
+
"@memberjunction/data-context": "6.1.0-edge.0",
|
|
67
|
+
"@memberjunction/data-context-server": "6.1.0-edge.0",
|
|
68
|
+
"@memberjunction/doc-utils": "6.1.0-edge.0",
|
|
69
|
+
"@memberjunction/encryption": "6.1.0-edge.0",
|
|
70
|
+
"@memberjunction/entity-communications-base": "6.1.0-edge.0",
|
|
71
|
+
"@memberjunction/entity-communications-server": "6.1.0-edge.0",
|
|
72
|
+
"@memberjunction/esignature": "6.1.0-edge.0",
|
|
73
|
+
"@memberjunction/external-change-detection": "6.1.0-edge.0",
|
|
74
|
+
"@memberjunction/generic-database-provider": "6.1.0-edge.0",
|
|
75
|
+
"@memberjunction/global": "6.1.0-edge.0",
|
|
76
|
+
"@memberjunction/graphql-dataprovider": "6.1.0-edge.0",
|
|
77
|
+
"@memberjunction/integration-engine": "6.1.0-edge.0",
|
|
78
|
+
"@memberjunction/integration-engine-base": "6.1.0-edge.0",
|
|
79
|
+
"@memberjunction/integration-progress-artifacts": "6.1.0-edge.0",
|
|
80
|
+
"@memberjunction/integration-schema-builder": "6.1.0-edge.0",
|
|
81
|
+
"@memberjunction/interactive-component-types": "6.1.0-edge.0",
|
|
82
|
+
"@memberjunction/lists": "6.1.0-edge.0",
|
|
83
|
+
"@memberjunction/lists-base": "6.1.0-edge.0",
|
|
84
|
+
"@memberjunction/livekit-room-server": "6.1.0-edge.0",
|
|
85
|
+
"@memberjunction/notifications": "6.1.0-edge.0",
|
|
86
|
+
"@memberjunction/postgresql-dataprovider": "6.1.0-edge.0",
|
|
87
|
+
"@memberjunction/queue": "6.1.0-edge.0",
|
|
88
|
+
"@memberjunction/record-comparison": "6.1.0-edge.0",
|
|
89
|
+
"@memberjunction/redis-provider": "6.1.0-edge.0",
|
|
90
|
+
"@memberjunction/remote-browser-base": "6.1.0-edge.0",
|
|
91
|
+
"@memberjunction/remote-browser-cdp": "6.1.0-edge.0",
|
|
92
|
+
"@memberjunction/remote-browser-selfhost": "6.1.0-edge.0",
|
|
93
|
+
"@memberjunction/remote-browser-server": "6.1.0-edge.0",
|
|
94
|
+
"@memberjunction/scheduling-actions": "6.1.0-edge.0",
|
|
95
|
+
"@memberjunction/scheduling-base-types": "6.1.0-edge.0",
|
|
96
|
+
"@memberjunction/scheduling-engine": "6.1.0-edge.0",
|
|
97
|
+
"@memberjunction/scheduling-engine-base": "6.1.0-edge.0",
|
|
98
|
+
"@memberjunction/schema-engine": "6.1.0-edge.0",
|
|
99
|
+
"@memberjunction/search-engine": "6.1.0-edge.0",
|
|
100
|
+
"@memberjunction/server-extensions-core": "6.1.0-edge.0",
|
|
101
|
+
"@memberjunction/sql-dialect": "6.1.0-edge.0",
|
|
102
|
+
"@memberjunction/sqlserver-dataprovider": "6.1.0-edge.0",
|
|
103
|
+
"@memberjunction/storage": "6.1.0-edge.0",
|
|
104
|
+
"@memberjunction/tag-engine": "6.1.0-edge.0",
|
|
105
|
+
"@memberjunction/tag-engine-base": "6.1.0-edge.0",
|
|
106
|
+
"@memberjunction/templates": "6.1.0-edge.0",
|
|
107
|
+
"@memberjunction/testing-engine": "6.1.0-edge.0",
|
|
108
|
+
"@memberjunction/testing-engine-base": "6.1.0-edge.0",
|
|
109
|
+
"@memberjunction/version-history": "6.1.0-edge.0",
|
|
118
110
|
"@octokit/auth-app": "^7.1.5",
|
|
119
111
|
"@octokit/rest": "^21.1.1",
|
|
120
112
|
"@types/compression": "^1.8.1",
|
|
@@ -154,7 +146,7 @@
|
|
|
154
146
|
"zod": "^3.25.0"
|
|
155
147
|
},
|
|
156
148
|
"devDependencies": {
|
|
157
|
-
"@types/express": "^
|
|
149
|
+
"@types/express": "^5.0.6",
|
|
158
150
|
"pkgroll": "2.23.0",
|
|
159
151
|
"typescript": "^5.9.3",
|
|
160
152
|
"vitest": "^3.1.1"
|
|
@@ -162,5 +154,13 @@
|
|
|
162
154
|
"repository": {
|
|
163
155
|
"type": "git",
|
|
164
156
|
"url": "https://github.com/MemberJunction/MJ"
|
|
157
|
+
},
|
|
158
|
+
"scripts": {
|
|
159
|
+
"build": "tsc && tsc-alias -f",
|
|
160
|
+
"bundle": "tsc -noEmit && pkgroll --sourcemap --minify",
|
|
161
|
+
"watch": "tsc -w",
|
|
162
|
+
"test": "vitest run",
|
|
163
|
+
"test:watch": "vitest",
|
|
164
|
+
"test:coverage": "vitest run --coverage"
|
|
165
165
|
}
|
|
166
|
-
}
|
|
166
|
+
}
|
|
@@ -31,6 +31,12 @@ vi.mock('@memberjunction/ai-agents', () => ({
|
|
|
31
31
|
FinalizeBridgeCoAgentRuns: vi.fn(),
|
|
32
32
|
GetRealtimeModelVoices: vi.fn(),
|
|
33
33
|
CreateBridgeRoomTranscriptSink: vi.fn(),
|
|
34
|
+
// SessionManager's constructor defaults to `new RealtimeClientSessionService()` when this resolver
|
|
35
|
+
// doesn't inject one (it never finalizes client-direct co-agent runs itself) — the mock must still
|
|
36
|
+
// export the class so that default construction doesn't throw.
|
|
37
|
+
RealtimeClientSessionService: class {
|
|
38
|
+
FinalizeCoAgentRun = vi.fn(async () => undefined);
|
|
39
|
+
},
|
|
34
40
|
}));
|
|
35
41
|
|
|
36
42
|
// Mock the meeting-recording registration so the thin resolver is tested in isolation (no MJStorage /
|
|
@@ -321,6 +321,50 @@ describe('SessionManager.CloseSession', () => {
|
|
|
321
321
|
expect(finalizeCoAgentRunMock).not.toHaveBeenCalled();
|
|
322
322
|
});
|
|
323
323
|
|
|
324
|
+
it('finalizes through an INJECTED RealtimeClientSessionService instance, not the default one', async () => {
|
|
325
|
+
// Regression test for the wrong-instance leak: a caller (e.g. RealtimeClientSessionResolver)
|
|
326
|
+
// that created the session's co-agent AIPromptRun through its OWN RealtimeClientSessionService
|
|
327
|
+
// must have CloseSession finalize through that SAME instance — otherwise the service's internal
|
|
328
|
+
// per-run write-chain cleanup (finalizePromptRun -> promptRunWriteChains.Delete) silently no-ops
|
|
329
|
+
// on a throwaway instance while the real accumulated state on the caller's instance never clears.
|
|
330
|
+
const injectedFinalizeMock = vi.fn(async () => undefined);
|
|
331
|
+
const injectedService = { FinalizeCoAgentRun: injectedFinalizeMock } as unknown as ConstructorParameters<
|
|
332
|
+
typeof SessionManager
|
|
333
|
+
>[0];
|
|
334
|
+
const session = makeSessionEntity({
|
|
335
|
+
ID: 'session-injected',
|
|
336
|
+
Status: 'Active',
|
|
337
|
+
Config_: JSON.stringify({ targetAgentID: 't1', coAgentRunID: 'co-run-injected', promptRunID: 'prompt-run-injected' }),
|
|
338
|
+
});
|
|
339
|
+
const { provider } = makeProvider(() => session);
|
|
340
|
+
const mgr = new SessionManager(injectedService);
|
|
341
|
+
const user = makeUser();
|
|
342
|
+
|
|
343
|
+
const ok = await mgr.CloseSession('session-injected', user, provider);
|
|
344
|
+
|
|
345
|
+
expect(ok).toBe(true);
|
|
346
|
+
// The finalize call landed on the INJECTED instance, never the module-default one.
|
|
347
|
+
expect(injectedFinalizeMock).toHaveBeenCalledTimes(1);
|
|
348
|
+
expect(injectedFinalizeMock).toHaveBeenCalledWith('co-run-injected', 'prompt-run-injected', user, provider, true, null);
|
|
349
|
+
expect(finalizeCoAgentRunMock).not.toHaveBeenCalled();
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
it('defaults to its own RealtimeClientSessionService instance when none is injected (back-compat)', async () => {
|
|
353
|
+
const session = makeSessionEntity({
|
|
354
|
+
ID: 'session-default-svc',
|
|
355
|
+
Status: 'Active',
|
|
356
|
+
Config_: JSON.stringify({ targetAgentID: 't1', coAgentRunID: 'co-run-default', promptRunID: 'prompt-run-default' }),
|
|
357
|
+
});
|
|
358
|
+
const { provider } = makeProvider(() => session);
|
|
359
|
+
const mgr = new SessionManager(); // no injection — e.g. SessionJanitor, telephony services
|
|
360
|
+
const user = makeUser();
|
|
361
|
+
|
|
362
|
+
const ok = await mgr.CloseSession('session-default-svc', user, provider);
|
|
363
|
+
|
|
364
|
+
expect(ok).toBe(true);
|
|
365
|
+
expect(finalizeCoAgentRunMock).toHaveBeenCalledWith('co-run-default', 'prompt-run-default', user, provider, true, null);
|
|
366
|
+
});
|
|
367
|
+
|
|
324
368
|
it('stamps CloseReason = Explicit by default (untouched call sites get the right reason)', async () => {
|
|
325
369
|
const session = makeSessionEntity({ ID: 'session-default', Status: 'Active' });
|
|
326
370
|
const { provider } = makeProvider(() => session);
|