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

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 (435) hide show
  1. package/README.md +30 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/BridgeHostInstance.d.ts +25 -0
  4. package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -0
  5. package/dist/agentSessions/BridgeHostInstance.js +30 -0
  6. package/dist/agentSessions/BridgeHostInstance.js.map +1 -0
  7. package/dist/agentSessions/HostInstance.d.ts +75 -11
  8. package/dist/agentSessions/HostInstance.d.ts.map +1 -1
  9. package/dist/agentSessions/HostInstance.js +99 -28
  10. package/dist/agentSessions/HostInstance.js.map +1 -1
  11. package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
  12. package/dist/agentSessions/ReturningVisitorRecap.js +7 -3
  13. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  14. package/dist/agentSessions/SessionJanitor.d.ts +173 -25
  15. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  16. package/dist/agentSessions/SessionJanitor.js +452 -54
  17. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  18. package/dist/agentSessions/SessionManager.d.ts +43 -2
  19. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  20. package/dist/agentSessions/SessionManager.js +99 -8
  21. package/dist/agentSessions/SessionManager.js.map +1 -1
  22. package/dist/agentSessions/SessionRunIDVerifier.d.ts +63 -0
  23. package/dist/agentSessions/SessionRunIDVerifier.d.ts.map +1 -0
  24. package/dist/agentSessions/SessionRunIDVerifier.js +129 -0
  25. package/dist/agentSessions/SessionRunIDVerifier.js.map +1 -0
  26. package/dist/agentSessions/index.d.ts +2 -0
  27. package/dist/agentSessions/index.d.ts.map +1 -1
  28. package/dist/agentSessions/index.js +10 -3
  29. package/dist/agentSessions/index.js.map +1 -1
  30. package/dist/auth/actionAuthorization.d.ts +40 -0
  31. package/dist/auth/actionAuthorization.d.ts.map +1 -0
  32. package/dist/auth/actionAuthorization.js +94 -0
  33. package/dist/auth/actionAuthorization.js.map +1 -0
  34. package/dist/auth/index.d.ts.map +1 -1
  35. package/dist/auth/index.js +3 -10
  36. package/dist/auth/index.js.map +1 -1
  37. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  38. package/dist/auth/magicLink/MagicLinkService.js +6 -3
  39. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  40. package/dist/auth/newUsers.d.ts +10 -0
  41. package/dist/auth/newUsers.d.ts.map +1 -1
  42. package/dist/auth/newUsers.js +80 -11
  43. package/dist/auth/newUsers.js.map +1 -1
  44. package/dist/config.d.ts +4567 -71
  45. package/dist/config.d.ts.map +1 -1
  46. package/dist/config.js +246 -3
  47. package/dist/config.js.map +1 -1
  48. package/dist/context.d.ts +8 -0
  49. package/dist/context.d.ts.map +1 -1
  50. package/dist/context.js +25 -34
  51. package/dist/context.js.map +1 -1
  52. package/dist/generated/graphql-schemas/__mj.d.ts +1073 -10
  53. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  54. package/dist/generated/graphql-schemas/__mj.js +9188 -3649
  55. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  56. package/dist/generic/OrphanedConversationDetailReconciler.js +3 -3
  57. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  58. package/dist/generic/ResolverBase.d.ts +62 -6
  59. package/dist/generic/ResolverBase.d.ts.map +1 -1
  60. package/dist/generic/ResolverBase.js +179 -35
  61. package/dist/generic/ResolverBase.js.map +1 -1
  62. package/dist/generic/RunViewResolver.d.ts +4 -0
  63. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  64. package/dist/generic/RunViewResolver.js +37 -1
  65. package/dist/generic/RunViewResolver.js.map +1 -1
  66. package/dist/index.d.ts +7 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +214 -159
  69. package/dist/index.js.map +1 -1
  70. package/dist/isolatedProvider.d.ts +20 -0
  71. package/dist/isolatedProvider.d.ts.map +1 -0
  72. package/dist/isolatedProvider.js +22 -0
  73. package/dist/isolatedProvider.js.map +1 -0
  74. package/dist/postgresqlCompat.d.ts +8 -0
  75. package/dist/postgresqlCompat.d.ts.map +1 -0
  76. package/dist/postgresqlCompat.js +19 -0
  77. package/dist/postgresqlCompat.js.map +1 -0
  78. package/dist/postgresqlPoolSettings.d.ts +108 -0
  79. package/dist/postgresqlPoolSettings.d.ts.map +1 -0
  80. package/dist/postgresqlPoolSettings.js +134 -0
  81. package/dist/postgresqlPoolSettings.js.map +1 -0
  82. package/dist/realtimeProxy/RealtimeProxyServer.d.ts +44 -4
  83. package/dist/realtimeProxy/RealtimeProxyServer.d.ts.map +1 -1
  84. package/dist/realtimeProxy/RealtimeProxyServer.js +121 -16
  85. package/dist/realtimeProxy/RealtimeProxyServer.js.map +1 -1
  86. package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts +171 -0
  87. package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts.map +1 -0
  88. package/dist/realtimeProxy/RealtimeRelayTunnel.js +532 -0
  89. package/dist/realtimeProxy/RealtimeRelayTunnel.js.map +1 -0
  90. package/dist/realtimeSessions/RealtimeSessionEventService.d.ts +148 -0
  91. package/dist/realtimeSessions/RealtimeSessionEventService.d.ts.map +1 -0
  92. package/dist/realtimeSessions/RealtimeSessionEventService.js +191 -0
  93. package/dist/realtimeSessions/RealtimeSessionEventService.js.map +1 -0
  94. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts +66 -0
  95. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts.map +1 -0
  96. package/dist/realtimeSessions/RealtimeSessionVerificationService.js +138 -0
  97. package/dist/realtimeSessions/RealtimeSessionVerificationService.js.map +1 -0
  98. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts +38 -0
  99. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts.map +1 -0
  100. package/dist/realtimeSessions/RealtimeVerifyRouter.js +98 -0
  101. package/dist/realtimeSessions/RealtimeVerifyRouter.js.map +1 -0
  102. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts +61 -0
  103. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -0
  104. package/dist/realtimeSessions/SessionVerificationPortsBase.js +149 -0
  105. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -0
  106. package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts +57 -0
  107. package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts.map +1 -0
  108. package/dist/realtimeSessions/SlidingWindowRateLimiter.js +69 -0
  109. package/dist/realtimeSessions/SlidingWindowRateLimiter.js.map +1 -0
  110. package/dist/realtimeSessions/index.d.ts +17 -0
  111. package/dist/realtimeSessions/index.d.ts.map +1 -0
  112. package/dist/realtimeSessions/index.js +17 -0
  113. package/dist/realtimeSessions/index.js.map +1 -0
  114. package/dist/realtimeSessions/sessionAccess.d.ts +86 -0
  115. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -0
  116. package/dist/realtimeSessions/sessionAccess.js +90 -0
  117. package/dist/realtimeSessions/sessionAccess.js.map +1 -0
  118. package/dist/realtimeSessions/sessionConfigStamps.d.ts +70 -0
  119. package/dist/realtimeSessions/sessionConfigStamps.d.ts.map +1 -0
  120. package/dist/realtimeSessions/sessionConfigStamps.js +93 -0
  121. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -0
  122. package/dist/realtimeSessions/subscriptionAuthorization.d.ts +65 -0
  123. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -0
  124. package/dist/realtimeSessions/subscriptionAuthorization.js +71 -0
  125. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -0
  126. package/dist/realtimeSessions/verificationCore.d.ts +243 -0
  127. package/dist/realtimeSessions/verificationCore.d.ts.map +1 -0
  128. package/dist/realtimeSessions/verificationCore.js +356 -0
  129. package/dist/realtimeSessions/verificationCore.js.map +1 -0
  130. package/dist/realtimeSessions/verificationPages.d.ts +66 -0
  131. package/dist/realtimeSessions/verificationPages.d.ts.map +1 -0
  132. package/dist/realtimeSessions/verificationPages.js +110 -0
  133. package/dist/realtimeSessions/verificationPages.js.map +1 -0
  134. package/dist/realtimeSessions/verificationPolicy.d.ts +147 -0
  135. package/dist/realtimeSessions/verificationPolicy.d.ts.map +1 -0
  136. package/dist/realtimeSessions/verificationPolicy.js +249 -0
  137. package/dist/realtimeSessions/verificationPolicy.js.map +1 -0
  138. package/dist/realtimeSessions/verificationWorkflow.d.ts +263 -0
  139. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -0
  140. package/dist/realtimeSessions/verificationWorkflow.js +435 -0
  141. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -0
  142. package/dist/realtimeWidget/widgetGuestElevation.d.ts +20 -2
  143. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  144. package/dist/realtimeWidget/widgetGuestElevation.js +31 -2
  145. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  146. package/dist/resolvers/ActionResolver.d.ts +31 -5
  147. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  148. package/dist/resolvers/ActionResolver.js +75 -14
  149. package/dist/resolvers/ActionResolver.js.map +1 -1
  150. package/dist/resolvers/AdhocQueryResolver.d.ts +35 -17
  151. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  152. package/dist/resolvers/AdhocQueryResolver.js +92 -166
  153. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  154. package/dist/resolvers/CacheStatsResolver.d.ts +27 -0
  155. package/dist/resolvers/CacheStatsResolver.d.ts.map +1 -1
  156. package/dist/resolvers/CacheStatsResolver.js +113 -2
  157. package/dist/resolvers/CacheStatsResolver.js.map +1 -1
  158. package/dist/resolvers/ClientToolRequestResolver.d.ts +4 -2
  159. package/dist/resolvers/ClientToolRequestResolver.d.ts.map +1 -1
  160. package/dist/resolvers/ClientToolRequestResolver.js +28 -10
  161. package/dist/resolvers/ClientToolRequestResolver.js.map +1 -1
  162. package/dist/resolvers/EntityRecordNameResolver.d.ts +7 -23
  163. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  164. package/dist/resolvers/EntityRecordNameResolver.js +9 -47
  165. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  166. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +12 -1
  167. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  168. package/dist/resolvers/FetchEntityVectorsResolver.js +83 -2
  169. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  170. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  171. package/dist/resolvers/GetDataResolver.js +9 -0
  172. package/dist/resolvers/GetDataResolver.js.map +1 -1
  173. package/dist/resolvers/HumanHandoffResolver.d.ts +107 -0
  174. package/dist/resolvers/HumanHandoffResolver.d.ts.map +1 -0
  175. package/dist/resolvers/HumanHandoffResolver.js +330 -0
  176. package/dist/resolvers/HumanHandoffResolver.js.map +1 -0
  177. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  178. package/dist/resolvers/MCPResolver.js +9 -4
  179. package/dist/resolvers/MCPResolver.js.map +1 -1
  180. package/dist/resolvers/MeetingResolver.d.ts +69 -0
  181. package/dist/resolvers/MeetingResolver.d.ts.map +1 -0
  182. package/dist/resolvers/MeetingResolver.js +381 -0
  183. package/dist/resolvers/MeetingResolver.js.map +1 -0
  184. package/dist/resolvers/RealtimeBridgeResolver.d.ts +88 -3
  185. package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
  186. package/dist/resolvers/RealtimeBridgeResolver.js +352 -12
  187. package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
  188. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +156 -108
  189. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  190. package/dist/resolvers/RealtimeClientSessionResolver.js +395 -293
  191. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  192. package/dist/resolvers/RealtimeSessionEventsResolver.d.ts +61 -0
  193. package/dist/resolvers/RealtimeSessionEventsResolver.d.ts.map +1 -0
  194. package/dist/resolvers/RealtimeSessionEventsResolver.js +130 -0
  195. package/dist/resolvers/RealtimeSessionEventsResolver.js.map +1 -0
  196. package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts +85 -0
  197. package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts.map +1 -0
  198. package/dist/resolvers/RealtimeSessionVerificationResolver.js +188 -0
  199. package/dist/resolvers/RealtimeSessionVerificationResolver.js.map +1 -0
  200. package/dist/resolvers/RemoteBrowserActionResolver.d.ts +2 -0
  201. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  202. package/dist/resolvers/RemoteBrowserActionResolver.js +5 -1
  203. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  204. package/dist/resolvers/RunAIAgentResolver.d.ts +10 -0
  205. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  206. package/dist/resolvers/RunAIAgentResolver.js +68 -11
  207. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  208. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  209. package/dist/resolvers/RunTemplateResolver.js +12 -11
  210. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  211. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  212. package/dist/resolvers/SyncDataResolver.js +6 -2
  213. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  214. package/dist/resolvers/SyncRolesUsersResolver.d.ts +2 -0
  215. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  216. package/dist/resolvers/SyncRolesUsersResolver.js +23 -6
  217. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  218. package/dist/resolvers/UserAvatarResolver.d.ts +16 -0
  219. package/dist/resolvers/UserAvatarResolver.d.ts.map +1 -0
  220. package/dist/resolvers/UserAvatarResolver.js +124 -0
  221. package/dist/resolvers/UserAvatarResolver.js.map +1 -0
  222. package/dist/resolvers/UserResolver.d.ts.map +1 -1
  223. package/dist/resolvers/UserResolver.js +2 -17
  224. package/dist/resolvers/UserResolver.js.map +1 -1
  225. package/dist/resolvers/adhocTimeout.d.ts +7 -0
  226. package/dist/resolvers/adhocTimeout.d.ts.map +1 -0
  227. package/dist/resolvers/adhocTimeout.js +12 -0
  228. package/dist/resolvers/adhocTimeout.js.map +1 -0
  229. package/dist/resolvers/agentVisionConsentAudit.d.ts +37 -0
  230. package/dist/resolvers/agentVisionConsentAudit.d.ts.map +1 -0
  231. package/dist/resolvers/agentVisionConsentAudit.js +63 -0
  232. package/dist/resolvers/agentVisionConsentAudit.js.map +1 -0
  233. package/dist/resolvers/avatarInputValidation.d.ts +40 -0
  234. package/dist/resolvers/avatarInputValidation.d.ts.map +1 -0
  235. package/dist/resolvers/avatarInputValidation.js +97 -0
  236. package/dist/resolvers/avatarInputValidation.js.map +1 -0
  237. package/dist/resolvers/currentUserRoles.d.ts +29 -0
  238. package/dist/resolvers/currentUserRoles.d.ts.map +1 -1
  239. package/dist/resolvers/currentUserRoles.js +30 -0
  240. package/dist/resolvers/currentUserRoles.js.map +1 -1
  241. package/dist/resolvers/meetings/index.d.ts +5 -0
  242. package/dist/resolvers/meetings/index.d.ts.map +1 -0
  243. package/dist/resolvers/meetings/index.js +5 -0
  244. package/dist/resolvers/meetings/index.js.map +1 -0
  245. package/dist/resolvers/meetings/meetingHelpers.d.ts +17 -0
  246. package/dist/resolvers/meetings/meetingHelpers.d.ts.map +1 -0
  247. package/dist/resolvers/meetings/meetingHelpers.js +212 -0
  248. package/dist/resolvers/meetings/meetingHelpers.js.map +1 -0
  249. package/dist/resolvers/meetings/meetingMutations.d.ts +18 -0
  250. package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -0
  251. package/dist/resolvers/meetings/meetingMutations.js +439 -0
  252. package/dist/resolvers/meetings/meetingMutations.js.map +1 -0
  253. package/dist/resolvers/meetings/meetingQueries.d.ts +7 -0
  254. package/dist/resolvers/meetings/meetingQueries.d.ts.map +1 -0
  255. package/dist/resolvers/meetings/meetingQueries.js +113 -0
  256. package/dist/resolvers/meetings/meetingQueries.js.map +1 -0
  257. package/dist/resolvers/meetings/meetingTypes.d.ts +89 -0
  258. package/dist/resolvers/meetings/meetingTypes.d.ts.map +1 -0
  259. package/dist/resolvers/meetings/meetingTypes.js +345 -0
  260. package/dist/resolvers/meetings/meetingTypes.js.map +1 -0
  261. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  262. package/dist/rest/ViewOperationsHandler.js +8 -5
  263. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  264. package/dist/services/TaskGraphActionRunner.d.ts +8 -0
  265. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  266. package/dist/services/TaskGraphActionRunner.js +27 -1
  267. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  268. package/dist/services/TaskGraphContinuationDeliverer.d.ts +4 -3
  269. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  270. package/dist/services/TaskGraphContinuationDeliverer.js +13 -7
  271. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  272. package/dist/services/WorkQueueHostService.d.ts +36 -0
  273. package/dist/services/WorkQueueHostService.d.ts.map +1 -0
  274. package/dist/services/WorkQueueHostService.js +97 -0
  275. package/dist/services/WorkQueueHostService.js.map +1 -0
  276. package/dist/services/workQueueConfig.d.ts +103 -0
  277. package/dist/services/workQueueConfig.d.ts.map +1 -0
  278. package/dist/services/workQueueConfig.js +48 -0
  279. package/dist/services/workQueueConfig.js.map +1 -0
  280. package/dist/sharedCache.d.ts +105 -0
  281. package/dist/sharedCache.d.ts.map +1 -0
  282. package/dist/sharedCache.js +276 -0
  283. package/dist/sharedCache.js.map +1 -0
  284. package/dist/types.d.ts +11 -0
  285. package/dist/types.d.ts.map +1 -1
  286. package/dist/types.js.map +1 -1
  287. package/package.json +97 -94
  288. package/src/__tests__/ActionResolver.authorization.test.ts +353 -0
  289. package/src/__tests__/AdhocQueryResolver.bugs.test.ts +14 -35
  290. package/src/__tests__/AdhocQueryResolver.pagination.test.ts +6 -2
  291. package/src/__tests__/AdhocQueryResolver.scopeGuard.test.ts +3 -3
  292. package/src/__tests__/AdhocQueryResolver.sqlAuthorizer.test.ts +104 -0
  293. package/src/__tests__/BridgeHostInstance.test.ts +232 -0
  294. package/src/__tests__/ClientToolRequestResolver.test.ts +116 -0
  295. package/src/__tests__/EntityRecordNameResolver.fieldSecurity.test.ts +27 -72
  296. package/src/__tests__/FetchEntityVectorsResolver.test.ts +285 -0
  297. package/src/__tests__/HostInstance.test.ts +84 -0
  298. package/src/__tests__/HumanHandoffResolver.test.ts +250 -0
  299. package/src/__tests__/MeetingResolver.test.ts +448 -0
  300. package/src/__tests__/RealtimeBridgeResolver.test.ts +651 -4
  301. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +383 -0
  302. package/src/__tests__/RealtimeClientSessionResolver.test.ts +682 -58
  303. package/src/__tests__/RealtimeProxyServer.test.ts +16 -1
  304. package/src/__tests__/RealtimeRelay.test.ts +876 -0
  305. package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +129 -0
  306. package/src/__tests__/ResolverBase.adhocReadScope.test.ts +96 -0
  307. package/src/__tests__/ResolverBase.aggregateScreen.test.ts +174 -0
  308. package/src/__tests__/ResolverBase.clientOldValues.test.ts +6 -3
  309. package/src/__tests__/ResolverBase.filterEscaping.test.ts +21 -2
  310. package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +291 -0
  311. package/src/__tests__/ReturningVisitorRecap.test.ts +115 -0
  312. package/src/__tests__/RunAIAgentResolver.branch.test.ts +169 -0
  313. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +4 -4
  314. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +166 -0
  315. package/src/__tests__/RunTemplateResolver.test.ts +132 -0
  316. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +63 -0
  317. package/src/__tests__/SessionJanitor.test.ts +845 -18
  318. package/src/__tests__/SessionManager.test.ts +213 -17
  319. package/src/__tests__/SessionRunIDVerifier.test.ts +251 -0
  320. package/src/__tests__/SyncRolesUsersResolver.userRoles.test.ts +97 -0
  321. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +41 -0
  322. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +50 -3
  323. package/src/__tests__/UserAvatarResolver.test.ts +255 -0
  324. package/src/__tests__/UserResolver.currentUser.test.ts +16 -1
  325. package/src/__tests__/WorkQueueHostService.test.ts +133 -0
  326. package/src/__tests__/actionAuthorization.test.ts +130 -0
  327. package/src/__tests__/adhocTimeoutClamp.test.ts +26 -0
  328. package/src/__tests__/agentVisionConsentAudit.test.ts +118 -0
  329. package/src/__tests__/avatarInputValidation.test.ts +160 -0
  330. package/src/__tests__/isolatedProviderTransactions.test.ts +169 -0
  331. package/src/__tests__/magicLinkService.consume.test.ts +6 -0
  332. package/src/__tests__/magicLinkService.provisionLog.test.ts +5 -0
  333. package/src/__tests__/newUsers.template.test.ts +151 -0
  334. package/src/__tests__/newUsers.test.ts +74 -5
  335. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +17 -2
  336. package/src/__tests__/postgresqlPoolSettings.test.ts +131 -0
  337. package/src/__tests__/realtimeSessions/RealtimeSessionEventService.test.ts +201 -0
  338. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +215 -0
  339. package/src/__tests__/realtimeSessions/RealtimeSessionVerificationResolver.test.ts +102 -0
  340. package/src/__tests__/realtimeSessions/RealtimeSessionVerificationService.test.ts +349 -0
  341. package/src/__tests__/realtimeSessions/RealtimeVerifyRouter.test.ts +131 -0
  342. package/src/__tests__/realtimeSessions/SlidingWindowRateLimiter.test.ts +56 -0
  343. package/src/__tests__/realtimeSessions/helpers.ts +4 -0
  344. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +129 -0
  345. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +124 -0
  346. package/src/__tests__/realtimeSessions/verificationCore.test.ts +355 -0
  347. package/src/__tests__/realtimeSessions/verificationPages.test.ts +84 -0
  348. package/src/__tests__/realtimeSessions/verificationPolicy.test.ts +226 -0
  349. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +633 -0
  350. package/src/__tests__/resolverBase.fls.test.ts +87 -4
  351. package/src/__tests__/serverExtensionReservedRoots.test.ts +2 -0
  352. package/src/__tests__/sharedCache.test.ts +310 -0
  353. package/src/__tests__/translateBracketsToPG.test.ts +20 -0
  354. package/src/__tests__/widgetGuestElevation.test.ts +44 -0
  355. package/src/agentSessions/BridgeHostInstance.ts +32 -0
  356. package/src/agentSessions/HostInstance.ts +124 -28
  357. package/src/agentSessions/ReturningVisitorRecap.ts +7 -3
  358. package/src/agentSessions/SessionJanitor.ts +543 -57
  359. package/src/agentSessions/SessionManager.ts +125 -25
  360. package/src/agentSessions/SessionRunIDVerifier.ts +171 -0
  361. package/src/agentSessions/index.ts +10 -3
  362. package/src/auth/actionAuthorization.ts +116 -0
  363. package/src/auth/index.ts +3 -8
  364. package/src/auth/magicLink/MagicLinkService.ts +6 -3
  365. package/src/auth/newUsers.ts +99 -11
  366. package/src/config.ts +255 -3
  367. package/src/context.ts +26 -34
  368. package/src/generated/graphql-schemas/__mj.ts +22701 -18838
  369. package/src/generic/OrphanedConversationDetailReconciler.ts +3 -3
  370. package/src/generic/ResolverBase.ts +210 -36
  371. package/src/generic/RunViewResolver.ts +37 -2
  372. package/src/index.ts +236 -170
  373. package/src/isolatedProvider.ts +22 -0
  374. package/src/postgresqlCompat.ts +21 -0
  375. package/src/postgresqlPoolSettings.ts +213 -0
  376. package/src/realtimeProxy/RealtimeProxyServer.ts +148 -16
  377. package/src/realtimeProxy/RealtimeRelayTunnel.ts +645 -0
  378. package/src/realtimeSessions/README.md +179 -0
  379. package/src/realtimeSessions/RealtimeSessionEventService.ts +274 -0
  380. package/src/realtimeSessions/RealtimeSessionVerificationService.ts +167 -0
  381. package/src/realtimeSessions/RealtimeVerifyRouter.ts +108 -0
  382. package/src/realtimeSessions/SessionVerificationPortsBase.ts +189 -0
  383. package/src/realtimeSessions/SlidingWindowRateLimiter.ts +92 -0
  384. package/src/realtimeSessions/index.ts +16 -0
  385. package/src/realtimeSessions/sessionAccess.ts +141 -0
  386. package/src/realtimeSessions/sessionConfigStamps.ts +123 -0
  387. package/src/realtimeSessions/subscriptionAuthorization.ts +116 -0
  388. package/src/realtimeSessions/verificationCore.ts +502 -0
  389. package/src/realtimeSessions/verificationPages.ts +149 -0
  390. package/src/realtimeSessions/verificationPolicy.ts +321 -0
  391. package/src/realtimeSessions/verificationWorkflow.ts +702 -0
  392. package/src/realtimeWidget/widgetGuestElevation.ts +34 -2
  393. package/src/resolvers/ActionResolver.ts +84 -21
  394. package/src/resolvers/AdhocQueryResolver.ts +105 -187
  395. package/src/resolvers/CacheStatsResolver.ts +89 -2
  396. package/src/resolvers/ClientToolRequestResolver.ts +25 -7
  397. package/src/resolvers/EntityRecordNameResolver.ts +9 -51
  398. package/src/resolvers/FetchEntityVectorsResolver.ts +97 -2
  399. package/src/resolvers/GetDataResolver.ts +10 -0
  400. package/src/resolvers/HumanHandoffResolver.ts +312 -0
  401. package/src/resolvers/MCPResolver.ts +8 -5
  402. package/src/resolvers/MeetingResolver.ts +438 -0
  403. package/src/resolvers/RealtimeBridgeResolver.ts +385 -19
  404. package/src/resolvers/RealtimeClientSessionResolver.ts +503 -344
  405. package/src/resolvers/RealtimeSessionEventsResolver.ts +133 -0
  406. package/src/resolvers/RealtimeSessionVerificationResolver.ts +174 -0
  407. package/src/resolvers/RemoteBrowserActionResolver.ts +11 -1
  408. package/src/resolvers/RunAIAgentResolver.ts +78 -11
  409. package/src/resolvers/RunTemplateResolver.ts +13 -12
  410. package/src/resolvers/SyncDataResolver.ts +6 -2
  411. package/src/resolvers/SyncRolesUsersResolver.ts +24 -6
  412. package/src/resolvers/UserAvatarResolver.ts +111 -0
  413. package/src/resolvers/UserResolver.ts +2 -16
  414. package/src/resolvers/adhocTimeout.ts +12 -0
  415. package/src/resolvers/agentVisionConsentAudit.ts +82 -0
  416. package/src/resolvers/avatarInputValidation.ts +123 -0
  417. package/src/resolvers/currentUserRoles.ts +32 -1
  418. package/src/resolvers/meetings/index.ts +4 -0
  419. package/src/resolvers/meetings/meetingHelpers.ts +307 -0
  420. package/src/resolvers/meetings/meetingMutations.ts +556 -0
  421. package/src/resolvers/meetings/meetingQueries.ts +172 -0
  422. package/src/resolvers/meetings/meetingTypes.ts +238 -0
  423. package/src/rest/ViewOperationsHandler.ts +8 -5
  424. package/src/services/TaskGraphActionRunner.ts +29 -1
  425. package/src/services/TaskGraphContinuationDeliverer.ts +13 -7
  426. package/src/services/WorkQueueHostService.ts +129 -0
  427. package/src/services/workQueueConfig.ts +52 -0
  428. package/src/sharedCache.ts +302 -0
  429. package/src/types.ts +12 -0
  430. package/dist/resolvers/adhoc-query-helpers.d.ts +0 -33
  431. package/dist/resolvers/adhoc-query-helpers.d.ts.map +0 -1
  432. package/dist/resolvers/adhoc-query-helpers.js +0 -50
  433. package/dist/resolvers/adhoc-query-helpers.js.map +0 -1
  434. package/src/__tests__/adhoc-query-helpers.test.ts +0 -50
  435. package/src/resolvers/adhoc-query-helpers.ts +0 -67
@@ -1 +1 @@
1
- {"version":3,"file":"ActionResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/ActionResolver.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D;;;GAGG;AACH,qBACa,gBAAgB;IAC3B;;OAEG;IAEH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IAEH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IAEH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,qBACa,cAAc;IACzB;;OAEG;IAEH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IAEH,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE5B;;;OAGG;IAEH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,qBACa,iBAAiB;IAC5B;;OAEG;IAEH,aAAa,EAAE,iBAAiB,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,qBACa,iBAAiB;IAC5B;;OAEG;IAEH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IAEH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IAEH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IAEH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IAEH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAE/B;;;OAGG;IAEH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IAEH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IAEH,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,qBACa,kBAAkB;IAC7B;;OAEG;IAEH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IAEH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IAEH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IAEH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBACa,cAAe,SAAQ,YAAY;IAC9C;;;;;OAKG;IAEG,SAAS,CACC,KAAK,EAAE,cAAc,EAC5B,GAAG,EAAE,UAAU,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAgC9B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAQtB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;;;;;;;OAQG;YACW,aAAa;IAqB3B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IASzB;;;;;OAKG;IAEG,eAAe,CACL,KAAK,EAAE,iBAAiB,EAC/B,GAAG,EAAE,UAAU,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAsD9B;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;;;;OAMG;YACW,eAAe;IA4B7B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAQpB"}
1
+ {"version":3,"file":"ActionResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/ActionResolver.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI1D;;;GAGG;AACH,qBACa,gBAAgB;IAC3B;;OAEG;IAEH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IAEH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IAEH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,qBACa,cAAc;IACzB;;OAEG;IAEH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IAEH,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE5B;;;OAGG;IAEH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,qBACa,iBAAiB;IAC5B;;OAEG;IAEH,aAAa,EAAE,iBAAiB,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,qBACa,iBAAiB;IAC5B;;OAEG;IAEH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IAEH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IAEH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IAEH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IAEH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAE/B;;;OAGG;IAEH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IAEH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IAEH,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,qBACa,kBAAkB;IAC7B;;OAEG;IAEH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IAEH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IAEH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IAEH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBACa,cAAe,SAAQ,YAAY;IAC9C;;;;;;;;;;;OAWG;IAEG,SAAS,CACC,KAAK,EAAE,cAAc,EAC5B,GAAG,EAAE,UAAU,GACrB,OAAO,CAAC,kBAAkB,CAAC;IA4B9B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;;;;;OAMG;YACW,kBAAkB;IAchC;;;;OAIG;YACW,0BAA0B;IAiBxC;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAQtB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;;;;;;OAOG;YACW,aAAa;IAoB3B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IASzB;;;;;OAKG;IAEG,eAAe,CACL,KAAK,EAAE,iBAAiB,EAC/B,GAAG,EAAE,UAAU,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAsD9B;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;;;;OAMG;YACW,eAAe;IA4B7B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAQpB"}
@@ -13,12 +13,15 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
13
13
  import { Resolver, Mutation, Arg, Ctx } from "type-graphql";
14
14
  import { ActionEngineServer } from "@memberjunction/actions";
15
15
  import { EntityActionEngineServer } from "@memberjunction/actions";
16
- import { CompositeKey, KeyValuePair, LogError } from "@memberjunction/core";
16
+ import { Metadata, CompositeKey, KeyValuePair, LogError, RunView } from "@memberjunction/core";
17
+ import { UserCache } from "@memberjunction/generic-database-provider";
17
18
  import { Field, InputType, ObjectType } from "type-graphql";
18
19
  import { KeyValuePairInput } from "../generic/KeyValuePairInput.js";
19
- import { CopyScalarsAndArrays, UUIDsEqual } from "@memberjunction/global";
20
+ import { CopyScalarsAndArrays, EscapeSQLString, UUIDsEqual } from "@memberjunction/global";
20
21
  import { GetReadOnlyProvider, GetReadWriteProvider } from "../util.js";
21
22
  import { ResolverBase } from "../generic/ResolverBase.js";
23
+ import { IsScopeLimitedPrincipal } from "../auth/scopeLimitedPrincipal.js";
24
+ import { EvaluateActionRunAuthorization, IsOwner } from "../auth/actionAuthorization.js";
22
25
  /**
23
26
  * Input type for action parameters
24
27
  * Used to pass parameters to actions when invoking them
@@ -149,30 +152,32 @@ export { ActionResultOutput };
149
152
  */
150
153
  let ActionResolver = class ActionResolver extends ResolverBase {
151
154
  /**
152
- * Mutation for running an action
155
+ * Mutation for running an action.
156
+ *
157
+ * Scope-limited sessions are refused. Any other caller must be authorized for the action — see
158
+ * {@link EvaluateActionRunAuthorization}: an Owner may run any action; anyone else needs a role that
159
+ * holds an authorization linked to the action through `MJ: Action Authorizations`, or, when the
160
+ * action has no such link, an action class that authorizes its caller itself. The run is always
161
+ * logged.
153
162
  * @param input The input parameters for running the action
154
163
  * @param ctx The GraphQL context containing user authentication information
155
164
  * @returns The result of running the action
156
165
  */
157
166
  async RunAction(input, ctx) {
158
167
  try {
168
+ const user = this.getRunActionPrincipal(ctx);
159
169
  // Check API key scope authorization for action execution
160
170
  await this.CheckAPIKeyScopeAuthorization('action:execute', input.ActionID, ctx.userPayload);
161
- // Get the user from context
162
- const user = ctx.userPayload.userRecord;
163
- if (!user) {
164
- throw new Error("User is not authenticated");
165
- }
166
171
  // Initialize the action engine
167
172
  await ActionEngineServer.Instance.Config(false, user);
168
- // Get the action by ID
169
173
  const action = this.findActionById(input.ActionID);
174
+ await this.assertCanRunAction(action, user, ctx.providers);
170
175
  // Parse the parameters
171
176
  const params = this.parseActionParameters(input.Params);
172
177
  // Run the action — thread the request-scoped provider so provider-bound
173
178
  // actions (e.g. the semantic find-* / Search Entity actions, which call
174
179
  // params.Provider.SearchEntity) run against the caller's metadata layer.
175
- const result = await this.executeAction(action, user, params, ctx.providers, input.SkipActionLog);
180
+ const result = await this.executeAction(action, user, params, ctx.providers);
176
181
  // Return the result
177
182
  return this.createActionResult(result);
178
183
  }
@@ -180,6 +185,63 @@ let ActionResolver = class ActionResolver extends ResolverBase {
180
185
  return this.handleActionError(e);
181
186
  }
182
187
  }
188
+ /**
189
+ * The authenticated caller of RunAction. A scope-limited session is refused: its confinement exists
190
+ * only as row-level-security filters, and an action can reach data and services those filters never
191
+ * cover.
192
+ * @throws Error when there is no user or the session is scope-limited
193
+ */
194
+ getRunActionPrincipal(ctx) {
195
+ const user = ctx.userPayload?.userRecord;
196
+ if (!user) {
197
+ throw new Error("User is not authenticated");
198
+ }
199
+ if (IsScopeLimitedPrincipal(user)) {
200
+ throw new Error("RunAction is not permitted for scope-limited sessions");
201
+ }
202
+ return user;
203
+ }
204
+ /**
205
+ * Refuses the run unless the caller is authorized for the action — see
206
+ * {@link EvaluateActionRunAuthorization}. The `MJ: Action Authorizations` rows, the authorization
207
+ * tree and the role grants all come from the request's provider, or all from the global provider
208
+ * when the request carries none.
209
+ * @throws Error when the caller may not run the action
210
+ */
211
+ async assertCanRunAction(action, user, providers) {
212
+ if (IsOwner(user)) {
213
+ return; // an Owner may run any action, so nothing needs to be read
214
+ }
215
+ const provider = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
216
+ const actionAuthorizationIDs = await this.loadActionAuthorizationIDs(action.ID, provider);
217
+ const metadata = provider ?? Metadata.Provider; // global-provider-ok: fallback only when the request carries no provider
218
+ const actionAuthorizesCaller = ActionEngineServer.Instance.ActionAuthorizesCaller(action);
219
+ const decision = EvaluateActionRunAuthorization(user, actionAuthorizationIDs, metadata, actionAuthorizesCaller);
220
+ if (!decision.Allowed) {
221
+ throw new Error(`Not authorized to run action ${action.ID}: ${decision.Reason}`);
222
+ }
223
+ }
224
+ /**
225
+ * The AuthorizationID of each `MJ: Action Authorizations` row for the action. Read as the system
226
+ * user: this is the server's own authorization decision, so it must not depend on whether the
227
+ * caller can read that entity.
228
+ */
229
+ async loadActionAuthorizationIDs(actionID, provider) {
230
+ const systemUser = UserCache.Instance.GetSystemUser();
231
+ if (!systemUser) {
232
+ throw new Error("System user not found");
233
+ }
234
+ const result = await new RunView(provider).RunView({
235
+ EntityName: 'MJ: Action Authorizations',
236
+ ExtraFilter: `ActionID='${EscapeSQLString(actionID)}'`,
237
+ Fields: ['AuthorizationID'],
238
+ ResultType: 'simple'
239
+ }, systemUser);
240
+ if (!result.Success) {
241
+ throw new Error(`Could not read the authorizations for action ${actionID}: ${result.ErrorMessage}`);
242
+ }
243
+ return result.Results.map(row => row.AuthorizationID);
244
+ }
183
245
  /**
184
246
  * Finds an action by its ID
185
247
  * @param actionID The ID of the action to find
@@ -225,15 +287,14 @@ let ActionResolver = class ActionResolver extends ResolverBase {
225
287
  });
226
288
  }
227
289
  /**
228
- * Executes an action
290
+ * Executes an action. The run is always logged: a client cannot switch off the action execution log.
229
291
  * @param action The action to execute
230
292
  * @param user The user context
231
293
  * @param params The action parameters
232
- * @param skipActionLog Whether to skip action logging
233
294
  * @returns The action result
234
295
  * @private
235
296
  */
236
- async executeAction(action, user, params, providers, skipActionLog) {
297
+ async executeAction(action, user, params, providers) {
237
298
  // Resolve the request-scoped provider. Prefer read-write (actions may mutate);
238
299
  // fall back to read-only, then to the engine's global-Metadata default when no
239
300
  // request providers are present (preserves prior behavior).
@@ -242,7 +303,7 @@ let ActionResolver = class ActionResolver extends ResolverBase {
242
303
  Action: action,
243
304
  ContextUser: user,
244
305
  Params: params,
245
- SkipActionLog: skipActionLog,
306
+ SkipActionLog: false,
246
307
  Filters: [],
247
308
  Provider: provider
248
309
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ActionResolver.js","sourceRoot":"","sources":["../../src/resolvers/ActionResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ActionResolver.js","sourceRoot":"","sources":["../../src/resolvers/ActionResolver.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import type { DatabaseProviderBase, UserInfo } from '@memberjunction/core';
2
+ import type { AdhocSQLAuthorizer } from '@memberjunction/actions';
1
3
  import { AppContext } from '../types.js';
2
4
  import { ResolverBase } from '../generic/ResolverBase.js';
3
5
  import { RunQueryResultType } from './QueryResolver.js';
@@ -14,10 +16,19 @@ declare class AdhocQueryInput {
14
16
  /**
15
17
  * Resolver for executing ad-hoc (unsaved) SQL queries.
16
18
  *
19
+ * The query runs through the read-only provider's own ad-hoc path (`RunQuery` with `SQL`), the
20
+ * same one in-process callers use, so it behaves identically on every database platform: the SQL
21
+ * is validated and rendered there, paged in the database with a count, run under the caller's
22
+ * timeout, and on PostgreSQL inside a read-only transaction that is rolled back.
23
+ *
17
24
  * Security:
18
- * - SQL validated via SQLExpressionValidator (full_query context) — blocks mutations, dangerous operations
19
- * - Executes on read-only connection pool only (no fallback to read-write)
20
- * - Configurable timeout (default 30s)
25
+ * - SQL validated by the provider (SQLExpressionValidator, single read query) — blocks mutations
26
+ * - Authorizes the RENDERED SQL: every table reference must be an entity base view the caller
27
+ * reads unscoped (CanRead, no row-level filter, no denied fields). Entities with row/field
28
+ * policy for this user are refused — raw SQL cannot apply that policy, so those reads belong
29
+ * on RunView.
30
+ * - Read-only provider only (no fallback to read-write)
31
+ * - Configurable timeout (default 30s), enforced by the database
21
32
  * - Requires authenticated user (standard GraphQL auth, no @RequireSystemUser)
22
33
  * - Refuses scope-limited principals (see {@link IsScopeLimitedPrincipal}). Raw SQL bypasses
23
34
  * RunView, entity permissions and row-level security, so the RLS scope tokens that confine a
@@ -29,23 +40,30 @@ declare class AdhocQueryInput {
29
40
  export declare class AdhocQueryResolver extends ResolverBase {
30
41
  ExecuteAdhocQuery(input: AdhocQueryInput, context: AppContext): Promise<RunQueryResultType>;
31
42
  /**
32
- * Runs the page's data SQL, then — only when the page is FULL (so more rows may
33
- * exist) — a COUNT(*) for the true total. A short (or unpaged) page needs no
34
- * count: the exact total is `startRow + rowsReturned` (see {@link exactTotalFromPage}).
43
+ * SECURITY: authorizes the READ itself, against the SQL that will actually run. The provider
44
+ * validates that the SQL is a single read statement but places no restriction on WHAT is read.
45
+ * Rendering comes first because composition (`{{query:"..."}}`) and templates can introduce
46
+ * table references the raw input never named. Every table reference must be an entity base
47
+ * view the caller can read UNSCOPED — CanRead with no row-level filter and no denied fields —
48
+ * because raw SQL applies neither (see assertFullQueryUsesReadableEntityViews). The provider
49
+ * renders the same input the same way and only wraps it in server-built paging and a count,
50
+ * so the rendered SQL is the full set of reads. Returns the refusal message, or null.
35
51
  *
36
- * The count is NON-FATAL: some queries page fine but cannot be counted — e.g.
37
- * duplicate column names are legal in a result set but rejected inside the COUNT
38
- * CTE wrap. A count failure must never sink the whole result, so we log it and
39
- * report a lower-bound total (`startRow + rowsReturned`) and let the data render.
40
- */
41
- private executeDataAndCount;
42
- /**
43
- * Executes one SQL statement on the read-only pool, racing it against the shared
44
- * wall-clock `deadline`. The timer is always cleared on completion so a settled
45
- * query never leaves a dangling timeout armed.
52
+ * `provider` is the read-only provider the SQL will run on; it supplies the platform and the
53
+ * entity metadata. {@link CreateAdhocSQLAuthorizer} exposes this check to the action engine.
46
54
  */
47
- private runSqlWithDeadline;
55
+ AuthorizeRenderedSQL(sqlText: string, provider: DatabaseProviderBase, contextUser: UserInfo | undefined): string | null;
56
+ /** Maps the provider's result to the GraphQL shape, naming a timeout plainly. */
57
+ private toResultType;
48
58
  private buildErrorResult;
49
59
  }
60
+ /**
61
+ * The ad-hoc SQL checks MJServer registers with the action engine, so that Run Ad-hoc Query applies
62
+ * the same checks as {@link AdhocQueryResolver.ExecuteAdhocQuery}: the rendered SQL must be one read
63
+ * statement that reads only entity views the caller may read in full, and the timeout is limited by
64
+ * the server's request timeout.
65
+ * @param requestTimeoutMs the server's request timeout in milliseconds; 0 or less means no limit
66
+ */
67
+ export declare function CreateAdhocSQLAuthorizer(requestTimeoutMs: number): AdhocSQLAuthorizer;
50
68
  export {};
51
69
  //# sourceMappingURL=AdhocQueryResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdhocQueryResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/AdhocQueryResolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAIxD;;;GAGG;AACH,cACM,eAAe;IAEjB,GAAG,EAAE,MAAM,CAAC;IAGZ,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBACa,kBAAmB,SAAQ,YAAY;IAE1C,iBAAiB,CACkB,KAAK,EAAE,eAAe,EACpD,OAAO,EAAE,UAAU,GAC3B,OAAO,CAAC,kBAAkB,CAAC;IAgI9B;;;;;;;;;OASG;YACW,mBAAmB;IA6BjC;;;;OAIG;YACW,kBAAkB;IAwBhC,OAAO,CAAC,gBAAgB;CAc3B"}
1
+ {"version":3,"file":"AdhocQueryResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/AdhocQueryResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAkB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;GAGG;AACH,cACM,eAAe;IAEjB,GAAG,EAAE,MAAM,CAAC;IAGZ,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBACa,kBAAmB,SAAQ,YAAY;IAE1C,iBAAiB,CACkB,KAAK,EAAE,eAAe,EACpD,OAAO,EAAE,UAAU,GAC3B,OAAO,CAAC,kBAAkB,CAAC;IAoC9B;;;;;;;;;;;;OAYG;IACI,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI;IAU9H,iFAAiF;IACjF,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,gBAAgB;CAc3B;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,kBAAkB,CAMrF"}
@@ -12,14 +12,13 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  };
13
13
  import { Arg, Ctx, Query, Resolver, Field, Int, InputType } from 'type-graphql';
14
14
  import { LogError } from '@memberjunction/core';
15
- import { SQLExpressionValidator } from '@memberjunction/global';
16
15
  import { RenderPipeline } from '@memberjunction/generic-database-provider';
17
- import { GetReadOnlyDataSource, GetReadOnlyProvider } from '../util.js';
16
+ import { configInfo } from '../config.js';
17
+ import { GetReadOnlyProvider } from '../util.js';
18
18
  import { ResolverBase } from '../generic/ResolverBase.js';
19
19
  import { IsScopeLimitedPrincipal } from '../auth/scopeLimitedPrincipal.js';
20
20
  import { RunQueryResultType } from './QueryResolver.js';
21
- import { ExactTotalFromPage, ResolveAdhocTotalRowCount } from './adhoc-query-helpers.js';
22
- import sql from 'mssql';
21
+ import { ClampAdhocTimeoutSeconds } from './adhocTimeout.js';
23
22
  /**
24
23
  * Input type for executing ad-hoc SQL queries directly.
25
24
  * The SQL is validated server-side to ensure it's a safe SELECT/WITH statement.
@@ -48,10 +47,19 @@ AdhocQueryInput = __decorate([
48
47
  /**
49
48
  * Resolver for executing ad-hoc (unsaved) SQL queries.
50
49
  *
50
+ * The query runs through the read-only provider's own ad-hoc path (`RunQuery` with `SQL`), the
51
+ * same one in-process callers use, so it behaves identically on every database platform: the SQL
52
+ * is validated and rendered there, paged in the database with a count, run under the caller's
53
+ * timeout, and on PostgreSQL inside a read-only transaction that is rolled back.
54
+ *
51
55
  * Security:
52
- * - SQL validated via SQLExpressionValidator (full_query context) — blocks mutations, dangerous operations
53
- * - Executes on read-only connection pool only (no fallback to read-write)
54
- * - Configurable timeout (default 30s)
56
+ * - SQL validated by the provider (SQLExpressionValidator, single read query) — blocks mutations
57
+ * - Authorizes the RENDERED SQL: every table reference must be an entity base view the caller
58
+ * reads unscoped (CanRead, no row-level filter, no denied fields). Entities with row/field
59
+ * policy for this user are refused — raw SQL cannot apply that policy, so those reads belong
60
+ * on RunView.
61
+ * - Read-only provider only (no fallback to read-write)
62
+ * - Configurable timeout (default 30s), enforced by the database
55
63
  * - Requires authenticated user (standard GraphQL auth, no @RequireSystemUser)
56
64
  * - Refuses scope-limited principals (see {@link IsScopeLimitedPrincipal}). Raw SQL bypasses
57
65
  * RunView, entity permissions and row-level security, so the RLS scope tokens that confine a
@@ -63,180 +71,84 @@ AdhocQueryInput = __decorate([
63
71
  let AdhocQueryResolver = class AdhocQueryResolver extends ResolverBase {
64
72
  async ExecuteAdhocQuery(input, context) {
65
73
  const startTime = Date.now();
74
+ // SECURITY: refuse principals whose read authority is narrower than their role grant.
75
+ // Ad-hoc SQL does not go through RunView, entity permissions or row-level security, so the
76
+ // RLS scope tokens that confine a magic-link session are never substituted. There is no
77
+ // filter to narrow, so the only correct answer for such a principal is no.
78
+ if (IsScopeLimitedPrincipal(context.userPayload?.userRecord)) {
79
+ return this.buildErrorResult('Ad-hoc SQL execution is not permitted for scope-limited sessions.');
80
+ }
81
+ const provider = GetReadOnlyProvider(context.providers, { allowFallbackToReadWrite: false });
82
+ if (!provider) {
83
+ return this.buildErrorResult('No read-only data source available for ad-hoc query execution');
84
+ }
85
+ const contextUser = context.userPayload?.userRecord;
86
+ const refusal = this.AuthorizeRenderedSQL(input.SQL, provider, contextUser);
87
+ if (refusal) {
88
+ return this.buildErrorResult(refusal, Date.now() - startTime);
89
+ }
90
+ const timeoutSeconds = ClampAdhocTimeoutSeconds(input.TimeoutSeconds, configInfo.databaseSettings.requestTimeout);
91
+ // A negative offset must not reach paging, where it would turn paging off.
92
+ const startRow = Math.max(0, Number.isInteger(input.StartRow) ? input.StartRow : 0);
66
93
  try {
67
- // 1. SECURITY: refuse principals whose read authority is narrower than their role
68
- // grant. This resolver runs a raw SELECT on the read-only pool — it does NOT go
69
- // through RunView, entity permissions or row-level security, so the RLS scope tokens
70
- // that confine a magic-link session are never substituted here. There is no filter
71
- // to narrow, so the only correct answer for such a principal is no. Checked before
72
- // the SQL is even validated: authorization gates the work, it does not race it.
73
- if (IsScopeLimitedPrincipal(context.userPayload?.userRecord)) {
74
- return this.buildErrorResult('Ad-hoc SQL execution is not permitted for scope-limited sessions.');
75
- }
76
- // 2. Security: validate SQL using SQLExpressionValidator
77
- const validator = SQLExpressionValidator.Instance;
78
- const validation = validator.validateFullQuery(input.SQL);
79
- if (!validation.valid) {
80
- return this.buildErrorResult(validation.error || 'SQL validation failed');
81
- }
82
- // 3. Get READ-ONLY data source (no fallback to read-write)
83
- let readOnlyDS;
84
- try {
85
- readOnlyDS = GetReadOnlyDataSource(context.dataSources, { allowFallbackToReadWrite: false });
86
- }
87
- catch {
88
- return this.buildErrorResult('No read-only data source available for ad-hoc query execution');
89
- }
90
- // 4. Resolve platform from the read-only provider for the render pipeline.
91
- let platform = 'sqlserver';
92
- try {
93
- const provider = GetReadOnlyProvider(context.providers, { allowFallbackToReadWrite: false });
94
- if (provider?.PlatformKey)
95
- platform = provider.PlatformKey;
96
- }
97
- catch {
98
- // Provider not configured — keep the default platform.
99
- }
100
- const contextUser = context.userPayload?.userRecord;
101
- // 5. Route the SQL through RenderPipeline so composition tokens
102
- // resolve, comments and templates are processed, and the row cap
103
- // is applied at the database (via TOP / LIMIT / OFFSET-FETCH).
104
- //
105
- // Page whenever a positive MaxRows is requested — INCLUDING the first
106
- // page (StartRow 0). This yields OFFSET/FETCH data SQL *and* a
107
- // COUNT(*) query so the response reports the true total row count
108
- // rather than just the returned page size. It mirrors the saved-query
109
- // path (GenericDatabaseProvider.InternalRunQuery → WrapWithPaging).
110
- // (Previously paging was gated on StartRow > 0, so page 1 fell back to
111
- // a TOP-N cap with TotalRowCount = page size — hiding the pager.)
112
- // Clamp StartRow to a non-negative integer. A negative offset must not slip
113
- // past the paging gate (which would then run the query with no row cap at all).
114
- const startRow = Math.max(0, Number.isInteger(input.StartRow) ? input.StartRow : 0);
115
- const maxRows = input.MaxRows;
116
- const usePaging = maxRows != null && Number.isInteger(maxRows) && maxRows > 0;
117
- let dataSQL;
118
- let countSQL = null;
119
- try {
120
- const rendered = RenderPipeline.Run(input.SQL, {
121
- Platform: platform,
122
- ContextUser: contextUser,
123
- ...(usePaging ? { Paging: { StartRow: startRow, MaxRows: maxRows } } : {}),
124
- });
125
- dataSQL = rendered.FinalSQL;
126
- countSQL = rendered.PagingResult?.CountSQL ?? null;
127
- }
128
- catch (renderErr) {
129
- const renderMsg = renderErr instanceof Error ? renderErr.message : String(renderErr);
130
- return this.buildErrorResult(`Ad-hoc query rendering failed: ${renderMsg}`);
131
- }
132
- // 6. Execute the page (and, only when a full page needs it, the count) under
133
- // a shared wall-clock deadline derived from the request's timeout budget.
134
- const deadline = startTime + (input.TimeoutSeconds ?? 30) * 1000;
135
- const { recordset, totalRowCount } = await this.executeDataAndCount(readOnlyDS, dataSQL, countSQL, startRow, usePaging ? maxRows : null, deadline);
136
- const executionTimeMs = Date.now() - startTime;
137
- // 7. Return as RunQueryResultType
138
- return {
139
- QueryID: '',
140
- QueryName: 'Ad-Hoc Query',
141
- Success: true,
142
- Results: JSON.stringify(recordset),
143
- RowCount: recordset.length,
144
- TotalRowCount: totalRowCount,
145
- PageNumber: usePaging ? Math.floor(startRow / maxRows) + 1 : undefined,
146
- PageSize: usePaging ? maxRows : undefined,
147
- ExecutionTime: executionTimeMs,
148
- ErrorMessage: ''
149
- };
94
+ const result = await provider.RunQuery({
95
+ SQL: input.SQL,
96
+ MaxRows: input.MaxRows,
97
+ StartRow: startRow,
98
+ TimeoutSeconds: timeoutSeconds,
99
+ }, contextUser);
100
+ return this.toResultType(result, startRow, input.MaxRows, timeoutSeconds, Date.now() - startTime);
150
101
  }
151
102
  catch (err) {
152
- const executionTimeMs = Date.now() - startTime;
153
103
  const errorMessage = err instanceof Error ? err.message : String(err);
154
- // Handle timeout
155
- if (errorMessage.includes('timeout') || errorMessage.includes('Timeout')) {
156
- return {
157
- QueryID: '',
158
- QueryName: 'Ad-Hoc Query',
159
- Success: false,
160
- Results: '[]',
161
- RowCount: 0,
162
- TotalRowCount: 0,
163
- PageNumber: undefined,
164
- PageSize: undefined,
165
- ExecutionTime: executionTimeMs,
166
- ErrorMessage: `Query execution exceeded ${input.TimeoutSeconds ?? 30} second timeout`
167
- };
168
- }
169
104
  LogError(`Ad-hoc query execution failed: ${errorMessage}`);
170
- return {
171
- QueryID: '',
172
- QueryName: 'Ad-Hoc Query',
173
- Success: false,
174
- Results: '[]',
175
- RowCount: 0,
176
- TotalRowCount: 0,
177
- PageNumber: undefined,
178
- PageSize: undefined,
179
- ExecutionTime: executionTimeMs,
180
- ErrorMessage: `Query execution failed: ${errorMessage}`
181
- };
105
+ return this.buildErrorResult(`Query execution failed: ${errorMessage}`, Date.now() - startTime);
182
106
  }
183
107
  }
184
108
  /**
185
- * Runs the page's data SQL, then — only when the page is FULL (so more rows may
186
- * exist) — a COUNT(*) for the true total. A short (or unpaged) page needs no
187
- * count: the exact total is `startRow + rowsReturned` (see {@link exactTotalFromPage}).
109
+ * SECURITY: authorizes the READ itself, against the SQL that will actually run. The provider
110
+ * validates that the SQL is a single read statement but places no restriction on WHAT is read.
111
+ * Rendering comes first because composition (`{{query:"..."}}`) and templates can introduce
112
+ * table references the raw input never named. Every table reference must be an entity base
113
+ * view the caller can read UNSCOPED — CanRead with no row-level filter and no denied fields —
114
+ * because raw SQL applies neither (see assertFullQueryUsesReadableEntityViews). The provider
115
+ * renders the same input the same way and only wraps it in server-built paging and a count,
116
+ * so the rendered SQL is the full set of reads. Returns the refusal message, or null.
188
117
  *
189
- * The count is NON-FATAL: some queries page fine but cannot be counted — e.g.
190
- * duplicate column names are legal in a result set but rejected inside the COUNT
191
- * CTE wrap. A count failure must never sink the whole result, so we log it and
192
- * report a lower-bound total (`startRow + rowsReturned`) and let the data render.
118
+ * `provider` is the read-only provider the SQL will run on; it supplies the platform and the
119
+ * entity metadata. {@link CreateAdhocSQLAuthorizer} exposes this check to the action engine.
193
120
  */
194
- async executeDataAndCount(ds, dataSQL, countSQL, startRow, maxRows, deadline) {
195
- const dataResult = await this.runSqlWithDeadline(ds, dataSQL, deadline);
196
- const recordset = (dataResult.recordset ?? []);
197
- // Total already known from the page alone (unpaged, or a short page)? Skip the count.
198
- const exact = ExactTotalFromPage(startRow, recordset.length, maxRows);
199
- if (exact != null || !countSQL) {
200
- return { recordset, totalRowCount: exact ?? recordset.length };
201
- }
202
- // Full page — a COUNT(*) is required to know the true total.
203
- const lowerBound = startRow + recordset.length;
121
+ AuthorizeRenderedSQL(sqlText, provider, contextUser) {
204
122
  try {
205
- const countResult = await this.runSqlWithDeadline(ds, countSQL, deadline);
206
- return { recordset, totalRowCount: ResolveAdhocTotalRowCount(countResult.recordset, lowerBound) };
123
+ const rendered = RenderPipeline.Run(sqlText, { Platform: provider.PlatformKey, ContextUser: contextUser, RequireReadStatement: true });
124
+ this.assertFullQueryUsesReadableEntityViews(rendered.Trace.AfterTemplates, provider, contextUser, 'ad-hoc SQL');
125
+ return null;
207
126
  }
208
- catch (countErr) {
209
- const msg = countErr instanceof Error ? countErr.message : String(countErr);
210
- LogError(`Ad-hoc query row-count failed; reporting a lower-bound total (${lowerBound}). ${msg}`);
211
- return { recordset, totalRowCount: lowerBound };
127
+ catch (err) {
128
+ return err instanceof Error ? err.message : String(err);
212
129
  }
213
130
  }
214
- /**
215
- * Executes one SQL statement on the read-only pool, racing it against the shared
216
- * wall-clock `deadline`. The timer is always cleared on completion so a settled
217
- * query never leaves a dangling timeout armed.
218
- */
219
- async runSqlWithDeadline(ds, sqlText, deadline) {
220
- const remaining = deadline - Date.now();
221
- if (remaining <= 0) {
222
- throw new Error('Query timeout exceeded');
223
- }
224
- let timer;
225
- try {
226
- return await Promise.race([
227
- new sql.Request(ds).query(sqlText),
228
- new Promise((_, reject) => {
229
- timer = setTimeout(() => reject(new Error('Query timeout exceeded')), remaining);
230
- }),
231
- ]);
232
- }
233
- finally {
234
- if (timer) {
235
- clearTimeout(timer);
236
- }
131
+ /** Maps the provider's result to the GraphQL shape, naming a timeout plainly. */
132
+ toResultType(result, startRow, maxRows, timeoutSeconds, executionTimeMs) {
133
+ if (!result.Success) {
134
+ const message = result.ErrorMessage ?? 'Ad-hoc query failed';
135
+ return this.buildErrorResult(/timeout/i.test(message) ? `Query execution exceeded ${timeoutSeconds} second timeout` : message, executionTimeMs);
237
136
  }
137
+ const paged = maxRows != null && Number.isInteger(maxRows) && maxRows > 0;
138
+ return {
139
+ QueryID: '',
140
+ QueryName: 'Ad-Hoc Query',
141
+ Success: true,
142
+ Results: JSON.stringify(result.Results),
143
+ RowCount: result.RowCount,
144
+ TotalRowCount: result.TotalRowCount,
145
+ PageNumber: paged ? Math.floor(startRow / maxRows) + 1 : undefined,
146
+ PageSize: paged ? maxRows : undefined,
147
+ ExecutionTime: executionTimeMs,
148
+ ErrorMessage: ''
149
+ };
238
150
  }
239
- buildErrorResult(errorMessage) {
151
+ buildErrorResult(errorMessage, executionTimeMs = 0) {
240
152
  return {
241
153
  QueryID: '',
242
154
  QueryName: 'Ad-Hoc Query',
@@ -246,7 +158,7 @@ let AdhocQueryResolver = class AdhocQueryResolver extends ResolverBase {
246
158
  TotalRowCount: 0,
247
159
  PageNumber: undefined,
248
160
  PageSize: undefined,
249
- ExecutionTime: 0,
161
+ ExecutionTime: executionTimeMs,
250
162
  ErrorMessage: errorMessage
251
163
  };
252
164
  }
@@ -263,4 +175,18 @@ AdhocQueryResolver = __decorate([
263
175
  Resolver()
264
176
  ], AdhocQueryResolver);
265
177
  export { AdhocQueryResolver };
178
+ /**
179
+ * The ad-hoc SQL checks MJServer registers with the action engine, so that Run Ad-hoc Query applies
180
+ * the same checks as {@link AdhocQueryResolver.ExecuteAdhocQuery}: the rendered SQL must be one read
181
+ * statement that reads only entity views the caller may read in full, and the timeout is limited by
182
+ * the server's request timeout.
183
+ * @param requestTimeoutMs the server's request timeout in milliseconds; 0 or less means no limit
184
+ */
185
+ export function CreateAdhocSQLAuthorizer(requestTimeoutMs) {
186
+ const resolver = new AdhocQueryResolver();
187
+ return {
188
+ Authorize: (sql, provider, contextUser) => resolver.AuthorizeRenderedSQL(sql, provider, contextUser),
189
+ ClampTimeoutSeconds: (requestedSeconds) => ClampAdhocTimeoutSeconds(requestedSeconds, requestTimeoutMs),
190
+ };
191
+ }
266
192
  //# sourceMappingURL=AdhocQueryResolver.js.map