@memberjunction/server 6.1.0-edge.0 → 6.1.0-edge.2

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 (175) hide show
  1. package/dist/auth/exampleNewUserSubClass.js +1 -1
  2. package/dist/auth/exampleNewUserSubClass.js.map +1 -1
  3. package/dist/auth/index.d.ts.map +1 -1
  4. package/dist/auth/index.js +9 -5
  5. package/dist/auth/index.js.map +1 -1
  6. package/dist/auth/magicLink/MagicLinkService.js +1 -1
  7. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  8. package/dist/auth/newUsers.js +1 -1
  9. package/dist/auth/newUsers.js.map +1 -1
  10. package/dist/context.js +2 -2
  11. package/dist/context.js.map +1 -1
  12. package/dist/generated/generated.d.ts +208 -646
  13. package/dist/generated/generated.d.ts.map +1 -1
  14. package/dist/generated/generated.js +1123 -3773
  15. package/dist/generated/generated.js.map +1 -1
  16. package/dist/generic/ResolverBase.d.ts +19 -3
  17. package/dist/generic/ResolverBase.d.ts.map +1 -1
  18. package/dist/generic/ResolverBase.js +51 -17
  19. package/dist/generic/ResolverBase.js.map +1 -1
  20. package/dist/index.d.ts +6 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +100 -42
  23. package/dist/index.js.map +1 -1
  24. package/dist/logging/secretRedactor.d.ts +9 -0
  25. package/dist/logging/secretRedactor.d.ts.map +1 -1
  26. package/dist/logging/secretRedactor.js +39 -0
  27. package/dist/logging/secretRedactor.js.map +1 -1
  28. package/dist/middleware/BaseServerMiddleware.d.ts +5 -0
  29. package/dist/middleware/BaseServerMiddleware.d.ts.map +1 -1
  30. package/dist/middleware/BaseServerMiddleware.js +5 -0
  31. package/dist/middleware/BaseServerMiddleware.js.map +1 -1
  32. package/dist/realtimeWidget/WidgetSessionService.js +1 -1
  33. package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
  34. package/dist/realtimeWidget/widgetGuestElevation.js +1 -1
  35. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  36. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  37. package/dist/resolvers/ActionResolver.js +12 -0
  38. package/dist/resolvers/ActionResolver.js.map +1 -1
  39. package/dist/resolvers/ComponentRegistryResolver.js +1 -1
  40. package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
  41. package/dist/resolvers/EntityPermissionResolver.js +1 -1
  42. package/dist/resolvers/EntityPermissionResolver.js.map +1 -1
  43. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +9 -0
  44. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  45. package/dist/resolvers/IntegrationDiscoveryResolver.js +3 -1
  46. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  47. package/dist/resolvers/PotentialDuplicateRecordResolver.js +1 -1
  48. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
  49. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +10 -0
  50. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  51. package/dist/resolvers/RealtimeClientSessionResolver.js +5 -0
  52. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  53. package/dist/resolvers/SearchEntitiesResolver.js +1 -1
  54. package/dist/resolvers/SearchEntitiesResolver.js.map +1 -1
  55. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  56. package/dist/resolvers/SqlLoggingConfigResolver.js +1 -1
  57. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  58. package/dist/resolvers/SyncRolesUsersResolver.js +2 -2
  59. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  60. package/dist/resolvers/TaskGraphFrameResolver.d.ts +85 -0
  61. package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -0
  62. package/dist/resolvers/TaskGraphFrameResolver.js +163 -0
  63. package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -0
  64. package/dist/resolvers/UserFavoriteResolver.js +1 -1
  65. package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
  66. package/dist/rest/OAuthCallbackHandler.js +1 -1
  67. package/dist/rest/OAuthCallbackHandler.js.map +1 -1
  68. package/dist/rest/RESTEndpointHandler.d.ts +0 -4
  69. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  70. package/dist/rest/RESTEndpointHandler.js +1 -15
  71. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  72. package/dist/rest/SignatureWebhookHandler.js +1 -1
  73. package/dist/rest/SignatureWebhookHandler.js.map +1 -1
  74. package/dist/services/DurableEntityActionTaskSubmitter.d.ts +26 -0
  75. package/dist/services/DurableEntityActionTaskSubmitter.d.ts.map +1 -0
  76. package/dist/services/DurableEntityActionTaskSubmitter.js +55 -0
  77. package/dist/services/DurableEntityActionTaskSubmitter.js.map +1 -0
  78. package/dist/services/ScheduledJobsService.js +1 -1
  79. package/dist/services/ScheduledJobsService.js.map +1 -1
  80. package/dist/services/StartTaskGraphDispatcher.d.ts +33 -0
  81. package/dist/services/StartTaskGraphDispatcher.d.ts.map +1 -0
  82. package/dist/services/StartTaskGraphDispatcher.js +46 -0
  83. package/dist/services/StartTaskGraphDispatcher.js.map +1 -0
  84. package/dist/services/TaskGraphActionRunner.d.ts +34 -0
  85. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -0
  86. package/dist/services/TaskGraphActionRunner.js +95 -0
  87. package/dist/services/TaskGraphActionRunner.js.map +1 -0
  88. package/dist/services/TaskGraphAgentRunner.d.ts +28 -0
  89. package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -0
  90. package/dist/services/TaskGraphAgentRunner.js +104 -0
  91. package/dist/services/TaskGraphAgentRunner.js.map +1 -0
  92. package/dist/services/TaskGraphContinuationDeliverer.d.ts +70 -0
  93. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -0
  94. package/dist/services/TaskGraphContinuationDeliverer.js +162 -0
  95. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -0
  96. package/dist/services/TaskGraphPromptRunner.d.ts +31 -0
  97. package/dist/services/TaskGraphPromptRunner.d.ts.map +1 -0
  98. package/dist/services/TaskGraphPromptRunner.js +134 -0
  99. package/dist/services/TaskGraphPromptRunner.js.map +1 -0
  100. package/dist/services/TaskGraphProviderFactory.d.ts +39 -0
  101. package/dist/services/TaskGraphProviderFactory.d.ts.map +1 -0
  102. package/dist/services/TaskGraphProviderFactory.js +28 -0
  103. package/dist/services/TaskGraphProviderFactory.js.map +1 -0
  104. package/dist/telephony/RingCentralTelephonyService.js +1 -1
  105. package/dist/telephony/RingCentralTelephonyService.js.map +1 -1
  106. package/dist/telephony/TwilioTelephonyRouter.js +1 -1
  107. package/dist/telephony/TwilioTelephonyRouter.js.map +1 -1
  108. package/dist/telephony/VonageTelephonyRouter.js +1 -1
  109. package/dist/telephony/VonageTelephonyRouter.js.map +1 -1
  110. package/package.json +92 -89
  111. package/src/__tests__/RealtimeClientSessionResolver.test.ts +1 -1
  112. package/src/__tests__/ResolverBase.frozenRecordMapping.test.ts +133 -0
  113. package/src/__tests__/ResolverBase.transportMapping.test.ts +289 -0
  114. package/src/__tests__/SessionManager.test.ts +1 -1
  115. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +249 -0
  116. package/src/__tests__/TaskGraphFrameResolver.test.ts +136 -0
  117. package/src/__tests__/WidgetSessionService.test.ts +1 -1
  118. package/src/__tests__/databaseAbstraction.test.ts +1 -1
  119. package/src/__tests__/magicLinkService.provisionLog.test.ts +1 -1
  120. package/src/__tests__/resolverBase.rls.test.ts +3 -0
  121. package/src/__tests__/secretRedactor.failOpen.test.ts +135 -0
  122. package/src/__tests__/widgetGuestElevation.test.ts +1 -1
  123. package/src/auth/exampleNewUserSubClass.ts +1 -1
  124. package/src/auth/index.ts +10 -6
  125. package/src/auth/magicLink/MagicLinkService.ts +1 -1
  126. package/src/auth/newUsers.ts +1 -1
  127. package/src/context.ts +2 -2
  128. package/src/generated/generated.ts +955 -2735
  129. package/src/generic/ResolverBase.ts +52 -17
  130. package/src/index.ts +108 -43
  131. package/src/logging/secretRedactor.ts +43 -0
  132. package/src/middleware/BaseServerMiddleware.ts +5 -0
  133. package/src/realtimeWidget/WidgetSessionService.ts +1 -1
  134. package/src/realtimeWidget/widgetGuestElevation.ts +1 -1
  135. package/src/resolvers/ActionResolver.ts +13 -0
  136. package/src/resolvers/ComponentRegistryResolver.ts +1 -1
  137. package/src/resolvers/EntityPermissionResolver.ts +1 -1
  138. package/src/resolvers/IntegrationDiscoveryResolver.ts +12 -2
  139. package/src/resolvers/PotentialDuplicateRecordResolver.ts +1 -1
  140. package/src/resolvers/RealtimeClientSessionResolver.ts +13 -0
  141. package/src/resolvers/SearchEntitiesResolver.ts +1 -1
  142. package/src/resolvers/SqlLoggingConfigResolver.ts +1 -2
  143. package/src/resolvers/SyncRolesUsersResolver.ts +2 -2
  144. package/src/resolvers/TaskGraphFrameResolver.ts +160 -0
  145. package/src/resolvers/UserFavoriteResolver.ts +1 -1
  146. package/src/rest/OAuthCallbackHandler.ts +1 -1
  147. package/src/rest/RESTEndpointHandler.ts +1 -15
  148. package/src/rest/SignatureWebhookHandler.ts +1 -1
  149. package/src/services/DurableEntityActionTaskSubmitter.ts +78 -0
  150. package/src/services/ScheduledJobsService.ts +1 -1
  151. package/src/services/StartTaskGraphDispatcher.ts +78 -0
  152. package/src/services/TaskGraphActionRunner.ts +99 -0
  153. package/src/services/TaskGraphAgentRunner.ts +115 -0
  154. package/src/services/TaskGraphContinuationDeliverer.ts +181 -0
  155. package/src/services/TaskGraphPromptRunner.ts +144 -0
  156. package/src/services/TaskGraphProviderFactory.ts +53 -0
  157. package/src/telephony/RingCentralTelephonyService.ts +1 -1
  158. package/src/telephony/TwilioTelephonyRouter.ts +1 -1
  159. package/src/telephony/VonageTelephonyRouter.ts +1 -1
  160. package/dist/resolvers/ReportResolver.d.ts +0 -24
  161. package/dist/resolvers/ReportResolver.d.ts.map +0 -1
  162. package/dist/resolvers/ReportResolver.js +0 -198
  163. package/dist/resolvers/ReportResolver.js.map +0 -1
  164. package/dist/resolvers/TaskResolver.d.ts +0 -31
  165. package/dist/resolvers/TaskResolver.d.ts.map +0 -1
  166. package/dist/resolvers/TaskResolver.js +0 -157
  167. package/dist/resolvers/TaskResolver.js.map +0 -1
  168. package/dist/services/TaskOrchestrator.d.ts +0 -130
  169. package/dist/services/TaskOrchestrator.d.ts.map +0 -1
  170. package/dist/services/TaskOrchestrator.js +0 -692
  171. package/dist/services/TaskOrchestrator.js.map +0 -1
  172. package/src/resolvers/ReportResolver.ts +0 -165
  173. package/src/resolvers/TaskResolver.ts +0 -148
  174. package/src/resolvers/__tests__/ReportResolver.test.ts +0 -279
  175. package/src/services/TaskOrchestrator.ts +0 -873
@@ -1 +0,0 @@
1
- {"version":3,"file":"TaskOrchestrator.js","sourceRoot":"","sources":["../../src/services/TaskOrchestrator.ts"],"names":[],"mappings":"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"}
@@ -1,165 +0,0 @@
1
- import { EntitySaveOptions, IRunReportProvider, Metadata, RunReport } from '@memberjunction/core';
2
- import { Arg, Ctx, Field, Int, Mutation, ObjectType, Query, Resolver } from 'type-graphql';
3
- import { AppContext } from '../types.js';
4
- import { MJConversationDetailEntity, MJReportEntity } from '@memberjunction/core-entities';
5
- import { DataContext } from '@memberjunction/data-context';
6
- import { z } from 'zod';
7
- import mssql from 'mssql';
8
- import { GetReadOnlyProvider, GetReadWriteProvider } from '../util.js';
9
- import { ResolverBase } from '../generic/ResolverBase.js';
10
-
11
- @ObjectType()
12
- export class RunReportResultType {
13
- @Field()
14
- ReportID: string;
15
-
16
- @Field()
17
- Success: boolean;
18
-
19
- @Field()
20
- Results: string;
21
-
22
- @Field()
23
- RowCount: number;
24
-
25
- @Field()
26
- ExecutionTime: number;
27
-
28
- @Field()
29
- ErrorMessage: string;
30
- }
31
-
32
- @ObjectType()
33
- export class CreateReportResultType {
34
- @Field()
35
- ReportID: string;
36
-
37
- @Field()
38
- ReportName: string;
39
-
40
- @Field()
41
- Success: boolean;
42
-
43
- @Field()
44
- ErrorMessage: string;
45
- }
46
-
47
- @Resolver(RunReportResultType)
48
- export class ReportResolverExtended extends ResolverBase {
49
- @Query(() => RunReportResultType)
50
- async GetReportData(@Arg('ReportID', () => String) ReportID: string, @Ctx() context: AppContext): Promise<RunReportResultType> {
51
- // Check API key scope authorization for report run
52
- await this.CheckAPIKeyScopeAuthorization('report:run', ReportID, context.userPayload);
53
-
54
- const provider = GetReadOnlyProvider(context.providers, {allowFallbackToReadWrite: true});
55
- const rp = new RunReport(provider as unknown as IRunReportProvider);
56
-
57
- const result = await rp.RunReport({ ReportID: ReportID });
58
- return {
59
- ReportID: ReportID,
60
- Success: result.Success,
61
- Results: JSON.stringify(result.Results),
62
- RowCount: result.RowCount,
63
- ExecutionTime: result.ExecutionTime,
64
- ErrorMessage: result.ErrorMessage,
65
- };
66
- }
67
-
68
- /**
69
- * This mutation will create a new report from a conversation detail ID
70
- */
71
- @Mutation(() => CreateReportResultType)
72
- async CreateReportFromConversationDetailID(
73
- @Arg('ConversationDetailID', () => String) ConversationDetailID: string,
74
- @Ctx() { dataSource, userPayload, providers }: AppContext
75
- ): Promise<CreateReportResultType> {
76
- // Check API key scope authorization for report creation (uses entity:create for Reports entity)
77
- await this.CheckAPIKeyScopeAuthorization('entity:create', 'Reports', userPayload);
78
-
79
- try {
80
- const md = GetReadWriteProvider(providers);
81
-
82
- // Resolve via the stamped payload user (GetUserFromPayload), NOT a fresh UserCache
83
- // lookup by email. UserCache.Users returns the shared, unstamped instance — re-fetching
84
- // by email here would silently drop any per-request API-key row-filter binding
85
- // (APIKeyRowFilters / APIKeyActingContext) already stamped onto userPayload.userRecord,
86
- // so a filtered key's report-creation work would run unfiltered. GetUserFromPayload
87
- // prefers userPayload.userRecord and only falls back to a UserCache email lookup when
88
- // no payload user is present (e.g. non-request-scoped callers), matching every other
89
- // resolver's contextUser resolution.
90
- const u = this.GetUserFromPayload(userPayload);
91
- if (!u) throw new Error('Unable to find user');
92
-
93
- const cde = md.Entities.find((e) => e.Name === 'MJ: Conversation Details');
94
- if (!cde) throw new Error('Unable to find Conversation Details Entity metadata');
95
-
96
- const cd = md.Entities.find((e) => e.Name === 'MJ: Conversations');
97
- if (!cd) throw new Error('Unable to find Conversations Entity metadata');
98
-
99
- const sql = `SELECT
100
- cd.Message, cd.ConversationID, c.DataContextID
101
- FROM
102
- ${cde.SchemaName}.${cde.BaseView} cd
103
- INNER JOIN
104
- ${cd.SchemaName}.${cd.BaseView} c
105
- ON
106
- cd.ConversationID = c.ID
107
- WHERE
108
- cd.ID=@ConversationDetailID`;
109
-
110
- const request = new mssql.Request(dataSource);
111
- request.input('ConversationDetailID', mssql.UniqueIdentifier, ConversationDetailID);
112
- const result = await request.query(sql);
113
- if (!result || !result.recordset || result.recordset.length === 0) throw new Error('Unable to retrieve converation details');
114
- const skipData: { title?: string; reportTitle?: string; userExplanation?: string; messages?: unknown[] } = JSON.parse(result.recordset[0].Message);
115
-
116
- const report = await md.GetEntityObject<MJReportEntity>('MJ: Reports', u);
117
- report.NewRecord();
118
- // support the legacy report title as old conversation details had a reportTitle property
119
- // but the new SkipData object has a title property, so favor the title property
120
- const title = skipData.title ? skipData.title : skipData.reportTitle ? skipData.reportTitle : 'Untitled Report';
121
- report.Name = title;
122
- report.Description = skipData.userExplanation ? skipData.userExplanation : '';
123
- report.ConversationID = result.recordset[0].ConversationID;
124
- report.ConversationDetailID = ConversationDetailID;
125
-
126
- const dc: DataContext = new DataContext();
127
- await dc.LoadMetadata(result.recordset[0].DataContextID, u);
128
- const newDataContext = await DataContext.Clone(dc, false, u);
129
- if (!newDataContext) throw new Error('Error cloning data context');
130
- report.DataContextID = newDataContext.ID;
131
-
132
- // next, strip out the messags from the SkipData object to put them into our Report Configuration as we dont need to store that information as we have a
133
- // link back to the conversation and conversation detail, skipData can be modified as it is a copy of the data doesn't affect the original source
134
- skipData.messages = [];
135
- report.Configuration = JSON.stringify(skipData);
136
-
137
- report.SharingScope = 'None';
138
- report.UserID = u.ID;
139
-
140
- if (await report.Save()) {
141
- return {
142
- ReportID: report.ID,
143
- ReportName: report.Name,
144
- Success: true,
145
- ErrorMessage: '',
146
- };
147
- } else {
148
- return {
149
- ReportID: '',
150
- ReportName: '',
151
- Success: false,
152
- ErrorMessage: 'Unable to save new report',
153
- };
154
- }
155
- } catch (ex) {
156
- const err = z.object({ message: z.string() }).safeParse(ex);
157
- return {
158
- ReportID: '',
159
- ReportName: '',
160
- Success: false,
161
- ErrorMessage: 'Unable to create new report: ' + err.success ? err.data.message : String(ex),
162
- };
163
- }
164
- }
165
- }
@@ -1,148 +0,0 @@
1
- import { Resolver, Mutation, Arg, Ctx, ObjectType, Field, PubSub, PubSubEngine } from 'type-graphql';
2
- import { AppContext } from '../types.js';
3
- import { IMetadataProvider, LogError, LogStatus } from '@memberjunction/core';
4
- import { ResolverBase } from '../generic/ResolverBase.js';
5
- import { TaskOrchestrator, TaskGraphResponse, TaskExecutionResult } from '../services/TaskOrchestrator.js';
6
- import { GetReadWriteProvider } from '../util.js';
7
-
8
- @ObjectType()
9
- export class TaskExecutionResultType {
10
- @Field()
11
- taskId: string;
12
-
13
- @Field()
14
- success: boolean;
15
-
16
- @Field({ nullable: true })
17
- output?: string;
18
-
19
- @Field({ nullable: true })
20
- error?: string;
21
- }
22
-
23
- @ObjectType()
24
- export class ExecuteTaskGraphResult {
25
- @Field()
26
- success: boolean;
27
-
28
- @Field({ nullable: true })
29
- errorMessage?: string;
30
-
31
- @Field(() => [TaskExecutionResultType])
32
- results: TaskExecutionResultType[];
33
- }
34
-
35
- /**
36
- * TaskOrchestrationResolver handles multi-step task orchestration.
37
- * This resolver is called when the Conversation Manager returns a task graph
38
- * for complex workflows that require multiple agents working in sequence or parallel.
39
- */
40
- @Resolver()
41
- export class TaskOrchestrationResolver extends ResolverBase {
42
- /**
43
- * Execute a task graph from the Conversation Manager.
44
- * This creates tasks in the database, manages dependencies, and executes them in proper order.
45
- *
46
- * @param taskGraphJson - JSON string containing the task graph from Conversation Manager
47
- * @param conversationDetailId - ID of the conversation detail that triggered this workflow
48
- * @param environmentId - Environment ID for the tasks
49
- */
50
- @Mutation(() => ExecuteTaskGraphResult)
51
- async ExecuteTaskGraph(
52
- @Arg('taskGraphJson') taskGraphJson: string,
53
- @Arg('conversationDetailId') conversationDetailId: string,
54
- @Arg('environmentId') environmentId: string,
55
- @Arg('sessionId') sessionId: string,
56
- @PubSub() pubSub: PubSubEngine,
57
- @Ctx() { userPayload, providers }: AppContext,
58
- @Arg('createNotifications', { nullable: true }) createNotifications?: boolean
59
- ): Promise<ExecuteTaskGraphResult> {
60
- // Check API key scope authorization for task execution
61
- await this.CheckAPIKeyScopeAuthorization('task:execute', '*', userPayload);
62
-
63
- try {
64
- LogStatus(`=== EXECUTING TASK GRAPH FOR CONVERSATION: ${conversationDetailId} ===`);
65
-
66
- // Parse task graph
67
- const taskGraph: TaskGraphResponse = JSON.parse(taskGraphJson);
68
-
69
- // Validate task graph
70
- if (!taskGraph.workflowName || !taskGraph.tasks || taskGraph.tasks.length === 0) {
71
- throw new Error('Invalid task graph: must have workflowName and at least one task');
72
- }
73
-
74
- // Get current user
75
- const currentUser = this.GetUserFromPayload(userPayload);
76
- if (!currentUser) {
77
- throw new Error('Unable to determine current user');
78
- }
79
-
80
- LogStatus(`Workflow: ${taskGraph.workflowName} (${taskGraph.tasks.length} tasks)`);
81
- if (taskGraph.reasoning) {
82
- LogStatus(`Reasoning: ${taskGraph.reasoning}`);
83
- }
84
-
85
- // Create task orchestrator with PubSub for progress updates
86
- const provider = GetReadWriteProvider(providers, { allowFallbackToReadOnly: true }) as unknown as IMetadataProvider;
87
- const orchestrator = new TaskOrchestrator(currentUser, pubSub, sessionId, userPayload, createNotifications || false, conversationDetailId, provider);
88
-
89
- // Create parent task and child tasks with dependencies
90
- const { parentTaskId, taskIdMap } = await orchestrator.createTasksFromGraph(
91
- taskGraph,
92
- conversationDetailId,
93
- environmentId
94
- );
95
-
96
- LogStatus(`Created parent task ${parentTaskId} with ${taskIdMap.size} child tasks`);
97
-
98
- // Execute tasks in proper order
99
- const results = await orchestrator.executeTasksForParent(
100
- parentTaskId
101
- );
102
-
103
- // Log results
104
- const successCount = results.filter(r => r.success).length;
105
- LogStatus(`Completed ${successCount} of ${results.length} tasks successfully`);
106
-
107
- for (const result of results) {
108
- if (result.success) {
109
- LogStatus(`✅ Task ${result.taskId} completed successfully`);
110
- } else {
111
- LogError(`❌ Task ${result.taskId} failed: ${result.error}`);
112
- }
113
- }
114
-
115
- // Convert results to GraphQL types
116
- const graphqlResults: TaskExecutionResultType[] = results.map(r => ({
117
- taskId: r.taskId,
118
- success: r.success,
119
- output: r.output ? JSON.stringify(r.output) : undefined,
120
- error: r.error
121
- }));
122
-
123
- LogStatus(`=== TASK GRAPH EXECUTION COMPLETE ===`);
124
-
125
- const result = {
126
- success: true,
127
- results: graphqlResults
128
- };
129
-
130
- LogStatus(`Returning ExecuteTaskGraph result: ${JSON.stringify({
131
- success: result.success,
132
- resultsCount: result.results.length,
133
- firstResult: result.results[0]
134
- })}`);
135
-
136
- return result;
137
-
138
- } catch (error) {
139
- LogError(`Task graph execution failed:`, undefined, error);
140
-
141
- return {
142
- success: false,
143
- errorMessage: (error as Error).message || 'Unknown error occurred',
144
- results: []
145
- };
146
- }
147
- }
148
- }
@@ -1,279 +0,0 @@
1
- /**
2
- * Tests for ReportResolverExtended.CreateReportFromConversationDetailID.
3
- *
4
- * Regression coverage for a SQL injection fix: ConversationDetailID (a plain GraphQL
5
- * String arg) used to be interpolated directly into the WHERE clause. It is now bound
6
- * via mssql's parameterized `request.input(...)`, so a hostile value must never appear
7
- * spliced into the executed SQL text, and query structure must stay identical regardless
8
- * of what the value contains.
9
- */
10
- import { describe, it, expect, vi, beforeEach } from 'vitest';
11
-
12
- // ─── Hoisted mocks ────────────────────────────────────────────────────────
13
- const { mockUserCacheUsers, mssqlState } = vi.hoisted(() => ({
14
- mockUserCacheUsers: [] as Array<{ Email: string; ID: string }>,
15
- mssqlState: {
16
- inputCalls: [] as Array<{ name: string; type: unknown; value: unknown }>,
17
- queryCalls: [] as string[],
18
- poolArgs: [] as unknown[],
19
- recordset: [] as Array<Record<string, unknown>>,
20
- },
21
- }));
22
-
23
- // Stub external deps before imports (mirrors resolverBase.rls.test.ts)
24
- vi.mock('@memberjunction/sqlserver-dataprovider', () => ({
25
- SQLServerDataProvider: class {},
26
- UserCache: {
27
- get Users() { return mockUserCacheUsers; },
28
- },
29
- }));
30
-
31
- vi.mock('cloudevents', () => ({
32
- CloudEvent: class {},
33
- httpTransport: () => () => undefined,
34
- emitterFor: () => () => undefined,
35
- }));
36
-
37
- vi.mock('type-graphql', () => ({
38
- Resolver: () => () => undefined,
39
- Mutation: () => () => undefined,
40
- Query: () => () => undefined,
41
- Subscription: () => () => undefined,
42
- Ctx: () => () => undefined,
43
- Arg: () => () => undefined,
44
- PubSub: () => () => undefined,
45
- Root: () => () => undefined,
46
- ObjectType: () => () => undefined,
47
- InputType: () => () => undefined,
48
- Field: () => () => undefined,
49
- FieldResolver: () => () => undefined,
50
- Int: () => undefined,
51
- Float: () => undefined,
52
- registerEnumType: () => undefined,
53
- }));
54
-
55
- vi.mock('graphql', () => ({
56
- GraphQLError: class extends Error {
57
- constructor(msg: string) { super(msg); }
58
- },
59
- }));
60
-
61
- vi.mock('mssql', () => {
62
- const UniqueIdentifier = { __marker: 'UniqueIdentifier' };
63
- class Request {
64
- constructor(pool: unknown) {
65
- mssqlState.poolArgs.push(pool);
66
- }
67
- input(name: string, type: unknown, value: unknown) {
68
- mssqlState.inputCalls.push({ name, type, value });
69
- }
70
- async query(sql: string) {
71
- mssqlState.queryCalls.push(sql);
72
- return { recordset: mssqlState.recordset };
73
- }
74
- }
75
- return { default: { Request, UniqueIdentifier }, Request, UniqueIdentifier };
76
- });
77
-
78
- vi.mock('@memberjunction/data-context', () => {
79
- class DataContext {
80
- LoadMetadata = vi.fn(async () => true);
81
- }
82
- (DataContext as unknown as { Clone: unknown }).Clone = vi.fn(async () => ({ ID: 'dctx-clone-1' }));
83
- return { DataContext };
84
- });
85
-
86
- vi.mock('@memberjunction/api-keys', () => ({
87
- GetAPIKeyEngine: vi.fn(),
88
- }));
89
-
90
- vi.mock('@memberjunction/encryption', () => ({
91
- EncryptionEngine: { Instance: {} },
92
- }));
93
-
94
- vi.mock('@memberjunction/graphql-dataprovider', () => ({
95
- FieldMapper: class { static Instance = { MapFieldsFromCodeNamesToDBNames: vi.fn() }; },
96
- }));
97
-
98
- vi.mock('../../generic/PubSubManager.js', () => ({
99
- PubSubManager: class { static Instance = { publish: vi.fn() }; },
100
- }));
101
-
102
- vi.mock('../../generic/PushStatusResolver.js', () => ({
103
- PUSH_STATUS_UPDATES_TOPIC: 'test-push-topic',
104
- PushStatusNotification: class {},
105
- PushStatusResolver: class {},
106
- }));
107
-
108
- vi.mock('../../generic/CacheInvalidationResolver.js', () => ({
109
- CACHE_INVALIDATION_TOPIC: 'test-cache-topic',
110
- }));
111
-
112
- vi.mock('../../generic/RunViewResolver.js', () => ({
113
- RunViewByIDInput: class {},
114
- RunViewByNameInput: class {},
115
- RunDynamicViewInput: class {},
116
- }));
117
-
118
- vi.mock('../../generic/DeleteOptionsInput.js', () => ({
119
- DeleteOptionsInput: class {},
120
- }));
121
-
122
- vi.mock('../../types.js', () => ({
123
- RunViewGenericParams: class {},
124
- }));
125
-
126
- vi.mock('@memberjunction/core', async () => {
127
- const actual = await vi.importActual<typeof import('@memberjunction/core')>('@memberjunction/core');
128
- return {
129
- ...actual,
130
- LogError: vi.fn(),
131
- LogStatus: vi.fn(),
132
- };
133
- });
134
-
135
- vi.mock('@memberjunction/core-entities', () => ({}));
136
-
137
- // ─── Import after mocks ──────────────────────────────────────────────────
138
- import { ReportResolverExtended } from '../ReportResolver';
139
-
140
- // ─── Helpers ──────────────────────────────────────────────────────────────
141
-
142
- function makeReportEntity() {
143
- return {
144
- ID: 'report-1',
145
- Name: '',
146
- Description: '',
147
- ConversationID: '',
148
- ConversationDetailID: '',
149
- DataContextID: '',
150
- Configuration: '',
151
- SharingScope: '',
152
- UserID: '',
153
- NewRecord: vi.fn(),
154
- Save: vi.fn(async () => true),
155
- };
156
- }
157
-
158
- function makeContext(
159
- getEntityObject: () => ReturnType<typeof makeReportEntity>,
160
- userPayload: Record<string, unknown> = { email: 'test@example.com' } // no apiKeyHash -> scope check no-ops
161
- ) {
162
- const getEntityObjectSpy = vi.fn(async (_name: string, _contextUser: unknown) => getEntityObject());
163
- const md = {
164
- Entities: [
165
- { Name: 'MJ: Conversation Details', SchemaName: 'dbo', BaseView: 'vwConversationDetails' },
166
- { Name: 'MJ: Conversations', SchemaName: 'dbo', BaseView: 'vwConversations' },
167
- ],
168
- GetEntityObject: getEntityObjectSpy,
169
- };
170
- return {
171
- context: {
172
- dataSource: { __fakePool: true },
173
- userPayload,
174
- providers: [{ type: 'Read-Write', provider: md }],
175
- } as unknown as Parameters<ReportResolverExtended['CreateReportFromConversationDetailID']>[1],
176
- getEntityObjectSpy,
177
- };
178
- }
179
-
180
- describe('ReportResolverExtended.CreateReportFromConversationDetailID', () => {
181
- let resolver: ReportResolverExtended;
182
-
183
- beforeEach(() => {
184
- resolver = new ReportResolverExtended();
185
- mssqlState.inputCalls.length = 0;
186
- mssqlState.queryCalls.length = 0;
187
- mssqlState.poolArgs.length = 0;
188
- mssqlState.recordset.length = 0;
189
- mssqlState.recordset.push({
190
- Message: JSON.stringify({ title: 'Test Report', userExplanation: 'exp' }),
191
- ConversationID: 'conv-1',
192
- DataContextID: 'dctx-1',
193
- });
194
-
195
- mockUserCacheUsers.length = 0;
196
- mockUserCacheUsers.push({ Email: 'test@example.com', ID: 'user-1' });
197
- });
198
-
199
- it('binds ConversationDetailID as a query parameter rather than splicing it into the SQL text', async () => {
200
- const maliciousID = "1'; DROP TABLE MJ_Reports; --";
201
- const { context } = makeContext(makeReportEntity);
202
-
203
- const result = await resolver.CreateReportFromConversationDetailID(maliciousID, context);
204
-
205
- expect(result.Success).toBe(true);
206
-
207
- // The query text must use a bound parameter, never the raw value.
208
- expect(mssqlState.queryCalls).toHaveLength(1);
209
- expect(mssqlState.queryCalls[0]).toContain('@ConversationDetailID');
210
- expect(mssqlState.queryCalls[0]).not.toContain(maliciousID);
211
- expect(mssqlState.queryCalls[0]).not.toContain('DROP TABLE');
212
-
213
- // The value must be bound through request.input, not string concatenation.
214
- expect(mssqlState.inputCalls).toHaveLength(1);
215
- expect(mssqlState.inputCalls[0].name).toBe('ConversationDetailID');
216
- expect(mssqlState.inputCalls[0].value).toBe(maliciousID);
217
- });
218
-
219
- it('does not alter query structure for values containing quotes, --, or OR 1=1', async () => {
220
- const hostileID = "abc' OR '1'='1' --";
221
- const { context } = makeContext(makeReportEntity);
222
-
223
- await resolver.CreateReportFromConversationDetailID(hostileID, context);
224
-
225
- expect(mssqlState.queryCalls[0]).toMatch(/WHERE\s+cd\.ID=@ConversationDetailID\s*$/);
226
- expect(mssqlState.inputCalls[0].value).toBe(hostileID);
227
- });
228
-
229
- it('still succeeds end to end for a normal GUID-shaped value', async () => {
230
- const normalID = '12345678-1234-1234-1234-123456789012';
231
- const { context } = makeContext(makeReportEntity);
232
-
233
- const result = await resolver.CreateReportFromConversationDetailID(normalID, context);
234
-
235
- expect(result.Success).toBe(true);
236
- expect(result.ReportName).toBe('Test Report');
237
- expect(mssqlState.inputCalls[0].value).toBe(normalID);
238
- });
239
-
240
- // §5.6 row 11 — the operating user must come from the stamped payload user
241
- // (GetUserFromPayload), never a fresh UserCache lookup by email. A fresh lookup would
242
- // silently drop any per-request API-key row-filter binding (APIKeyRowFilters /
243
- // APIKeyActingContext) already stamped onto userPayload.userRecord, so a filtered key's
244
- // report-creation work would run unfiltered.
245
- describe('operating user resolution (§5.6 row 11)', () => {
246
- it('uses userPayload.userRecord (with its stamped bindings) when present, not a fresh UserCache lookup', async () => {
247
- const stampedUser = {
248
- ID: 'user-1',
249
- Email: 'test@example.com',
250
- APIKeyRowFilters: [{ EntityID: 'e1', PermissionType: 'Create', FilterID: 'f1' }],
251
- };
252
- // A DIFFERENT UserCache entry for the same email — if the resolver fell back to a
253
- // UserCache lookup, it would get THIS unstamped object instead.
254
- mockUserCacheUsers.length = 0;
255
- mockUserCacheUsers.push({ Email: 'test@example.com', ID: 'user-1' });
256
-
257
- const { context, getEntityObjectSpy } = makeContext(makeReportEntity, {
258
- email: 'test@example.com',
259
- userRecord: stampedUser,
260
- });
261
-
262
- const result = await resolver.CreateReportFromConversationDetailID('12345678-1234-1234-1234-123456789012', context);
263
-
264
- expect(result.Success).toBe(true);
265
- // GetEntityObject's contextUser must be the SAME stamped object reference — proving
266
- // the row-filter binding flows through to the entity work, not a fresh, unstamped one.
267
- expect(getEntityObjectSpy.mock.calls[0][1]).toBe(stampedUser);
268
- });
269
-
270
- it('falls back to a UserCache lookup by email when no payload user is present', async () => {
271
- const { context, getEntityObjectSpy } = makeContext(makeReportEntity, { email: 'test@example.com' });
272
-
273
- const result = await resolver.CreateReportFromConversationDetailID('12345678-1234-1234-1234-123456789012', context);
274
-
275
- expect(result.Success).toBe(true);
276
- expect((getEntityObjectSpy.mock.calls[0][1] as { ID: string }).ID).toBe('user-1');
277
- });
278
- });
279
- });