@memberjunction/server 6.2.0-edge.0 → 6.2.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 (459) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/agentSessions/ReturningVisitorRecap.d.ts +2 -0
  3. package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
  4. package/dist/agentSessions/ReturningVisitorRecap.js +5 -1
  5. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  6. package/dist/agentSessions/SessionManager.js +2 -2
  7. package/dist/agentSessions/remoteBrowserGoalEngine.d.ts +8 -0
  8. package/dist/agentSessions/remoteBrowserGoalEngine.d.ts.map +1 -1
  9. package/dist/agentSessions/remoteBrowserGoalEngine.js +21 -5
  10. package/dist/agentSessions/remoteBrowserGoalEngine.js.map +1 -1
  11. package/dist/auth/AuthProviderCatalogRouter.d.ts +2 -0
  12. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  13. package/dist/auth/AuthProviderCatalogRouter.js +5 -1
  14. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  15. package/dist/auth/index.d.ts +20 -1
  16. package/dist/auth/index.d.ts.map +1 -1
  17. package/dist/auth/index.js +20 -10
  18. package/dist/auth/index.js.map +1 -1
  19. package/dist/auth/initializeProviders.d.ts +8 -0
  20. package/dist/auth/initializeProviders.d.ts.map +1 -1
  21. package/dist/auth/initializeProviders.js +21 -5
  22. package/dist/auth/initializeProviders.js.map +1 -1
  23. package/dist/auth/magicLink/MagicLinkRouter.d.ts +9 -0
  24. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  25. package/dist/auth/magicLink/MagicLinkRouter.js +22 -10
  26. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  27. package/dist/auth/magicLink/MagicLinkService.d.ts +17 -15
  28. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  29. package/dist/auth/magicLink/MagicLinkService.js +65 -51
  30. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  31. package/dist/auth/magicLink/index.d.ts +2 -2
  32. package/dist/auth/magicLink/index.d.ts.map +1 -1
  33. package/dist/auth/magicLink/index.js +2 -2
  34. package/dist/auth/magicLink/index.js.map +1 -1
  35. package/dist/auth/magicLink/magicLinkCore.d.ts +54 -33
  36. package/dist/auth/magicLink/magicLinkCore.d.ts.map +1 -1
  37. package/dist/auth/magicLink/magicLinkCore.js +61 -61
  38. package/dist/auth/magicLink/magicLinkCore.js.map +1 -1
  39. package/dist/auth/magicLink/redeemLanding.d.ts +4 -0
  40. package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
  41. package/dist/auth/magicLink/redeemLanding.js +12 -4
  42. package/dist/auth/magicLink/redeemLanding.js.map +1 -1
  43. package/dist/auth/magicLink/types.d.ts +4 -4
  44. package/dist/auth/principals.d.ts +2 -0
  45. package/dist/auth/principals.d.ts.map +1 -1
  46. package/dist/auth/principals.js +6 -2
  47. package/dist/auth/principals.js.map +1 -1
  48. package/dist/cache.d.ts +2 -0
  49. package/dist/cache.d.ts.map +1 -1
  50. package/dist/cache.js +3 -1
  51. package/dist/cache.js.map +1 -1
  52. package/dist/config.d.ts +346 -2
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +34 -4
  55. package/dist/config.js.map +1 -1
  56. package/dist/context.d.ts +20 -0
  57. package/dist/context.d.ts.map +1 -1
  58. package/dist/context.js +27 -19
  59. package/dist/context.js.map +1 -1
  60. package/dist/directives/Public.d.ts +2 -0
  61. package/dist/directives/Public.d.ts.map +1 -1
  62. package/dist/directives/Public.js +3 -1
  63. package/dist/directives/Public.js.map +1 -1
  64. package/dist/directives/RequireSystemUser.d.ts +2 -0
  65. package/dist/directives/RequireSystemUser.d.ts.map +1 -1
  66. package/dist/directives/RequireSystemUser.js +3 -1
  67. package/dist/directives/RequireSystemUser.js.map +1 -1
  68. package/dist/generated/graphql-schemas/__mj.d.ts +1021 -0
  69. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  70. package/dist/generated/graphql-schemas/__mj.js +7368 -2145
  71. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  72. package/dist/generic/CacheInvalidationResolver.d.ts +94 -4
  73. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  74. package/dist/generic/CacheInvalidationResolver.js +122 -3
  75. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  76. package/dist/generic/DeleteOptionsInput.d.ts +8 -1
  77. package/dist/generic/DeleteOptionsInput.d.ts.map +1 -1
  78. package/dist/generic/DeleteOptionsInput.js +1 -1
  79. package/dist/generic/DeleteOptionsInput.js.map +1 -1
  80. package/dist/generic/FireAndForgetHeartbeat.d.ts +18 -2
  81. package/dist/generic/FireAndForgetHeartbeat.d.ts.map +1 -1
  82. package/dist/generic/FireAndForgetHeartbeat.js +24 -6
  83. package/dist/generic/FireAndForgetHeartbeat.js.map +1 -1
  84. package/dist/generic/OrphanedConversationDetailReconciler.d.ts +31 -0
  85. package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -0
  86. package/dist/generic/OrphanedConversationDetailReconciler.js +215 -0
  87. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -0
  88. package/dist/generic/PushStatusResolver.d.ts +48 -1
  89. package/dist/generic/PushStatusResolver.d.ts.map +1 -1
  90. package/dist/generic/PushStatusResolver.js +95 -4
  91. package/dist/generic/PushStatusResolver.js.map +1 -1
  92. package/dist/generic/ResolverBase.d.ts +18 -2
  93. package/dist/generic/ResolverBase.d.ts.map +1 -1
  94. package/dist/generic/ResolverBase.js +64 -55
  95. package/dist/generic/ResolverBase.js.map +1 -1
  96. package/dist/index.d.ts +9 -0
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +120 -11
  99. package/dist/index.js.map +1 -1
  100. package/dist/integration/CustomColumnPromoter.d.ts +2 -0
  101. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  102. package/dist/integration/CustomColumnPromoter.js +5 -1
  103. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  104. package/dist/integration/EntityMapLifecycle.d.ts +4 -0
  105. package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
  106. package/dist/integration/EntityMapLifecycle.js +10 -2
  107. package/dist/integration/EntityMapLifecycle.js.map +1 -1
  108. package/dist/logging/NoLog.d.ts +4 -0
  109. package/dist/logging/NoLog.d.ts.map +1 -1
  110. package/dist/logging/NoLog.js +10 -2
  111. package/dist/logging/NoLog.js.map +1 -1
  112. package/dist/logging/StartupLogger.d.ts +2 -0
  113. package/dist/logging/StartupLogger.d.ts.map +1 -1
  114. package/dist/logging/StartupLogger.js +5 -1
  115. package/dist/logging/StartupLogger.js.map +1 -1
  116. package/dist/logging/bootAudit.d.ts +11 -7
  117. package/dist/logging/bootAudit.d.ts.map +1 -1
  118. package/dist/logging/bootAudit.js +15 -7
  119. package/dist/logging/bootAudit.js.map +1 -1
  120. package/dist/logging/boundaryLogPayload.d.ts +4 -0
  121. package/dist/logging/boundaryLogPayload.d.ts.map +1 -1
  122. package/dist/logging/boundaryLogPayload.js +5 -1
  123. package/dist/logging/boundaryLogPayload.js.map +1 -1
  124. package/dist/logging/secretRedactor.d.ts +2 -0
  125. package/dist/logging/secretRedactor.d.ts.map +1 -1
  126. package/dist/logging/secretRedactor.js +8 -4
  127. package/dist/logging/secretRedactor.js.map +1 -1
  128. package/dist/logging/shortenForLog.d.ts +2 -0
  129. package/dist/logging/shortenForLog.d.ts.map +1 -1
  130. package/dist/logging/shortenForLog.js +7 -3
  131. package/dist/logging/shortenForLog.js.map +1 -1
  132. package/dist/logging/variablesLoggingMiddleware.d.ts +2 -0
  133. package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
  134. package/dist/logging/variablesLoggingMiddleware.js +8 -6
  135. package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
  136. package/dist/metadataRefreshSignal.d.ts +19 -0
  137. package/dist/metadataRefreshSignal.d.ts.map +1 -0
  138. package/dist/metadataRefreshSignal.js +45 -0
  139. package/dist/metadataRefreshSignal.js.map +1 -0
  140. package/dist/middleware/MJTenantFilterMiddleware.js +4 -4
  141. package/dist/multiTenancy/index.d.ts +8 -0
  142. package/dist/multiTenancy/index.d.ts.map +1 -1
  143. package/dist/multiTenancy/index.js +21 -5
  144. package/dist/multiTenancy/index.js.map +1 -1
  145. package/dist/realtimeWidget/WidgetRouter.d.ts +5 -0
  146. package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
  147. package/dist/realtimeWidget/WidgetRouter.js +14 -10
  148. package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
  149. package/dist/realtimeWidget/WidgetSessionService.d.ts +6 -6
  150. package/dist/realtimeWidget/WidgetSessionService.js +27 -27
  151. package/dist/realtimeWidget/host-identity.d.ts +5 -1
  152. package/dist/realtimeWidget/host-identity.d.ts.map +1 -1
  153. package/dist/realtimeWidget/host-identity.js +11 -3
  154. package/dist/realtimeWidget/host-identity.js.map +1 -1
  155. package/dist/realtimeWidget/index.d.ts +2 -2
  156. package/dist/realtimeWidget/index.d.ts.map +1 -1
  157. package/dist/realtimeWidget/index.js +2 -2
  158. package/dist/realtimeWidget/index.js.map +1 -1
  159. package/dist/realtimeWidget/visitorIdentity.d.ts +21 -1
  160. package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
  161. package/dist/realtimeWidget/visitorIdentity.js +16 -4
  162. package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
  163. package/dist/realtimeWidget/widgetCore.d.ts +48 -0
  164. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  165. package/dist/realtimeWidget/widgetCore.js +38 -10
  166. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  167. package/dist/realtimeWidget/widgetGuestElevation.d.ts +10 -6
  168. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  169. package/dist/realtimeWidget/widgetGuestElevation.js +14 -6
  170. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  171. package/dist/resolvers/AdhocQueryResolver.js +3 -3
  172. package/dist/resolvers/AgentRunStatusPublisher.d.ts +55 -0
  173. package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -0
  174. package/dist/resolvers/AgentRunStatusPublisher.js +141 -0
  175. package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -0
  176. package/dist/resolvers/ConversationRunEventsResolver.d.ts +90 -0
  177. package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -0
  178. package/dist/resolvers/ConversationRunEventsResolver.js +283 -0
  179. package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -0
  180. package/dist/resolvers/DuplicateEntryCheckResolver.d.ts +98 -0
  181. package/dist/resolvers/DuplicateEntryCheckResolver.d.ts.map +1 -0
  182. package/dist/resolvers/DuplicateEntryCheckResolver.js +227 -0
  183. package/dist/resolvers/DuplicateEntryCheckResolver.js.map +1 -0
  184. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  185. package/dist/resolvers/FetchEntityVectorsResolver.js +2 -1
  186. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  187. package/dist/resolvers/FileResolver.js +3 -3
  188. package/dist/resolvers/GeoResolver.d.ts +2 -2
  189. package/dist/resolvers/GeoResolver.js +4 -4
  190. package/dist/resolvers/GetDataResolver.d.ts +14 -0
  191. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  192. package/dist/resolvers/GetDataResolver.js +43 -15
  193. package/dist/resolvers/GetDataResolver.js.map +1 -1
  194. package/dist/resolvers/IntegrationDiscoveryResolver.js +2 -2
  195. package/dist/resolvers/ListOperationsResolver.d.ts +20 -0
  196. package/dist/resolvers/ListOperationsResolver.d.ts.map +1 -1
  197. package/dist/resolvers/ListOperationsResolver.js +68 -28
  198. package/dist/resolvers/ListOperationsResolver.js.map +1 -1
  199. package/dist/resolvers/MCPResolver.d.ts +11 -1
  200. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  201. package/dist/resolvers/MCPResolver.js +7 -3
  202. package/dist/resolvers/MCPResolver.js.map +1 -1
  203. package/dist/resolvers/MergeRecordsResolver.d.ts +7 -0
  204. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  205. package/dist/resolvers/MergeRecordsResolver.js +16 -2
  206. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  207. package/dist/resolvers/RealtimeBridgeResolver.js +3 -3
  208. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +44 -6
  209. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  210. package/dist/resolvers/RealtimeClientSessionResolver.js +93 -37
  211. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  212. package/dist/resolvers/RemoteBrowserActionResolver.js +5 -5
  213. package/dist/resolvers/RunAIAgentResolver.d.ts +8 -18
  214. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  215. package/dist/resolvers/RunAIAgentResolver.js +85 -184
  216. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  217. package/dist/resolvers/RunAIPromptResolver.d.ts +1 -1
  218. package/dist/resolvers/RunAIPromptResolver.js +2 -2
  219. package/dist/resolvers/RunDecisionResolver.d.ts +149 -0
  220. package/dist/resolvers/RunDecisionResolver.d.ts.map +1 -0
  221. package/dist/resolvers/RunDecisionResolver.js +396 -0
  222. package/dist/resolvers/RunDecisionResolver.js.map +1 -0
  223. package/dist/resolvers/RunTestResolver.js +5 -5
  224. package/dist/resolvers/SqlLoggingConfigResolver.d.ts +8 -4
  225. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  226. package/dist/resolvers/SqlLoggingConfigResolver.js +5 -5
  227. package/dist/resolvers/TaskGraphFrameResolver.d.ts +8 -1
  228. package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
  229. package/dist/resolvers/TaskGraphFrameResolver.js +6 -2
  230. package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
  231. package/dist/resolvers/VectorizeEntityResolver.d.ts +1 -1
  232. package/dist/resolvers/VectorizeEntityResolver.d.ts.map +1 -1
  233. package/dist/resolvers/VectorizeEntityResolver.js +14 -10
  234. package/dist/resolvers/VectorizeEntityResolver.js.map +1 -1
  235. package/dist/resolvers/adhoc-query-helpers.d.ts +6 -0
  236. package/dist/resolvers/adhoc-query-helpers.d.ts.map +1 -1
  237. package/dist/resolvers/adhoc-query-helpers.js +10 -2
  238. package/dist/resolvers/adhoc-query-helpers.js.map +1 -1
  239. package/dist/resolvers/artifact-routing.d.ts +8 -8
  240. package/dist/resolvers/artifact-routing.js +2 -2
  241. package/dist/resolvers/artifact-routing.js.map +1 -1
  242. package/dist/resolvers/meetingRecordingRegistration.d.ts +10 -2
  243. package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
  244. package/dist/resolvers/meetingRecordingRegistration.js +24 -8
  245. package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
  246. package/dist/resolvers/peaksSidecar.d.ts +4 -0
  247. package/dist/resolvers/peaksSidecar.d.ts.map +1 -1
  248. package/dist/resolvers/peaksSidecar.js +10 -2
  249. package/dist/resolvers/peaksSidecar.js.map +1 -1
  250. package/dist/rest/EntityCRUDHandler.d.ts +28 -0
  251. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  252. package/dist/rest/EntityCRUDHandler.js +20 -4
  253. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  254. package/dist/rest/MediaStreamHandler.d.ts +2 -0
  255. package/dist/rest/MediaStreamHandler.d.ts.map +1 -1
  256. package/dist/rest/MediaStreamHandler.js +10 -6
  257. package/dist/rest/MediaStreamHandler.js.map +1 -1
  258. package/dist/rest/OAuthCallbackHandler.d.ts +9 -0
  259. package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
  260. package/dist/rest/OAuthCallbackHandler.js +15 -3
  261. package/dist/rest/OAuthCallbackHandler.js.map +1 -1
  262. package/dist/rest/RESTEndpointHandler.d.ts +6 -4
  263. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  264. package/dist/rest/RESTEndpointHandler.js +15 -11
  265. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  266. package/dist/rest/RealtimeSdpBrokerHandler.d.ts +5 -1
  267. package/dist/rest/RealtimeSdpBrokerHandler.d.ts.map +1 -1
  268. package/dist/rest/RealtimeSdpBrokerHandler.js +12 -4
  269. package/dist/rest/RealtimeSdpBrokerHandler.js.map +1 -1
  270. package/dist/rest/SignatureWebhookHandler.d.ts +2 -0
  271. package/dist/rest/SignatureWebhookHandler.d.ts.map +1 -1
  272. package/dist/rest/SignatureWebhookHandler.js +5 -1
  273. package/dist/rest/SignatureWebhookHandler.js.map +1 -1
  274. package/dist/rest/UploadTokenManager.d.ts +24 -8
  275. package/dist/rest/UploadTokenManager.d.ts.map +1 -1
  276. package/dist/rest/UploadTokenManager.js +53 -21
  277. package/dist/rest/UploadTokenManager.js.map +1 -1
  278. package/dist/rest/ViewOperationsHandler.d.ts +20 -0
  279. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  280. package/dist/rest/ViewOperationsHandler.js +20 -4
  281. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  282. package/dist/rest/mediaRange.d.ts +4 -0
  283. package/dist/rest/mediaRange.d.ts.map +1 -1
  284. package/dist/rest/mediaRange.js +10 -2
  285. package/dist/rest/mediaRange.js.map +1 -1
  286. package/dist/rest/setupRESTEndpoints.d.ts +4 -0
  287. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  288. package/dist/rest/setupRESTEndpoints.js +13 -7
  289. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  290. package/dist/serverExtensionReservedRoots.d.ts +2 -0
  291. package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
  292. package/dist/serverExtensionReservedRoots.js +5 -1
  293. package/dist/serverExtensionReservedRoots.js.map +1 -1
  294. package/dist/services/TaskGraphActionRunner.d.ts +13 -8
  295. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  296. package/dist/services/TaskGraphActionRunner.js +16 -15
  297. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  298. package/dist/types.d.ts +2 -0
  299. package/dist/types.d.ts.map +1 -1
  300. package/dist/types.js +7 -3
  301. package/dist/types.js.map +1 -1
  302. package/dist/util.d.ts +6 -0
  303. package/dist/util.d.ts.map +1 -1
  304. package/dist/util.js +13 -5
  305. package/dist/util.js.map +1 -1
  306. package/package.json +94 -92
  307. package/src/__tests__/AgentRunStatusPublisher.test.ts +175 -0
  308. package/src/__tests__/DeleteOptionsInput.wireShape.test.ts +62 -0
  309. package/src/__tests__/DuplicateEntryCheckResolver.test.ts +300 -0
  310. package/src/__tests__/FileResolverPeaks.test.ts +13 -13
  311. package/src/__tests__/ListOperationsResolver.test.ts +17 -17
  312. package/src/__tests__/MediaStreamHandler.test.ts +28 -28
  313. package/src/__tests__/NoLog.test.ts +11 -11
  314. package/src/__tests__/PrimaryKeyAlwaysMapped.test.ts +10 -10
  315. package/src/__tests__/RESTEndpointHandler.test.ts +14 -14
  316. package/src/__tests__/RealtimeBridgeResolver.test.ts +4 -2
  317. package/src/__tests__/RealtimeClientSessionResolver.test.ts +216 -2
  318. package/src/__tests__/RealtimeSdpBrokerHandler.test.ts +6 -6
  319. package/src/__tests__/RefreshAdoptsNewColumns.test.ts +8 -8
  320. package/src/__tests__/RemoteBrowserActionRecovery.test.ts +7 -1
  321. package/src/__tests__/RemoteBrowserAudioStream.test.ts +7 -1
  322. package/src/__tests__/RemoteBrowserGoalEngine.test.ts +18 -18
  323. package/src/__tests__/RemoteBrowserSnapshot.test.ts +7 -1
  324. package/src/__tests__/ResolverBase.clientOldValues.test.ts +52 -0
  325. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +398 -0
  326. package/src/__tests__/RunAIAgentResolver.streaming.test.ts +18 -27
  327. package/src/__tests__/RunDecisionResolver.test.ts +699 -0
  328. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +131 -0
  329. package/src/__tests__/TaskGraphFrameResolver.test.ts +2 -2
  330. package/src/__tests__/VectorizeEntityResolver.test.ts +106 -0
  331. package/src/__tests__/WidgetSessionService.test.ts +8 -4
  332. package/src/__tests__/adhoc-query-helpers.test.ts +21 -21
  333. package/src/__tests__/bootAudit.test.ts +11 -11
  334. package/src/__tests__/boundaryLogPayload.test.ts +6 -6
  335. package/src/__tests__/cacheInvalidationRecordData.test.ts +177 -0
  336. package/src/__tests__/conversationRunEvents.test.ts +399 -0
  337. package/src/__tests__/databaseAbstraction.test.ts +12 -6
  338. package/src/__tests__/getDataTokenRedaction.test.ts +7 -7
  339. package/src/__tests__/initializeProviders.refresh.test.ts +4 -4
  340. package/src/__tests__/magicLink.test.ts +73 -134
  341. package/src/__tests__/magicLinkService.consume.test.ts +224 -0
  342. package/src/__tests__/meetingRecordingRegistration.test.ts +12 -12
  343. package/src/__tests__/metadataRefreshSignal.test.ts +78 -0
  344. package/src/__tests__/multiTenancy.security.test.ts +40 -40
  345. package/src/__tests__/multiTenancy.test.ts +18 -18
  346. package/src/__tests__/newUsers.test.ts +24 -23
  347. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +283 -0
  348. package/src/__tests__/principals.test.ts +22 -22
  349. package/src/__tests__/pushStatusFanOut.test.ts +206 -0
  350. package/src/__tests__/pushStatusResolver.filter.test.ts +8 -8
  351. package/src/__tests__/secretRedactor.failOpen.test.ts +12 -12
  352. package/src/__tests__/secretRedactor.test.ts +12 -12
  353. package/src/__tests__/serverExtensionReservedRoots.test.ts +7 -7
  354. package/src/__tests__/subscriptionRedaction.test.ts +5 -5
  355. package/src/__tests__/unifiedAuth.test.ts +15 -9
  356. package/src/__tests__/visitorIdentity.resolve.test.ts +6 -6
  357. package/src/__tests__/widget.test.ts +45 -45
  358. package/src/__tests__/widgetGuestElevation.test.ts +7 -7
  359. package/src/__tests__/widgetHostIdentity.test.ts +14 -14
  360. package/src/agentSessions/ReturningVisitorRecap.ts +12 -1
  361. package/src/agentSessions/SessionManager.ts +2 -2
  362. package/src/agentSessions/remoteBrowserGoalEngine.ts +30 -5
  363. package/src/auth/AuthProviderCatalogRouter.ts +6 -1
  364. package/src/auth/__tests__/backward-compatibility.test.ts +4 -3
  365. package/src/auth/index.ts +43 -28
  366. package/src/auth/initializeProviders.ts +25 -5
  367. package/src/auth/magicLink/MagicLinkRouter.ts +28 -10
  368. package/src/auth/magicLink/MagicLinkService.ts +71 -52
  369. package/src/auth/magicLink/index.ts +7 -7
  370. package/src/auth/magicLink/magicLinkCore.ts +96 -64
  371. package/src/auth/magicLink/redeemLanding.ts +14 -4
  372. package/src/auth/magicLink/types.ts +54 -54
  373. package/src/auth/newUsers.ts +1 -1
  374. package/src/auth/principals.ts +11 -2
  375. package/src/cache.ts +4 -1
  376. package/src/config.ts +37 -4
  377. package/src/context.ts +37 -24
  378. package/src/directives/Public.ts +4 -1
  379. package/src/directives/RequireSystemUser.ts +4 -1
  380. package/src/generated/graphql-schemas/__mj.ts +3674 -4
  381. package/src/generic/CacheInvalidationResolver.ts +148 -4
  382. package/src/generic/DeleteOptionsInput.ts +9 -2
  383. package/src/generic/FireAndForgetHeartbeat.ts +35 -16
  384. package/src/generic/OrphanedConversationDetailReconciler.ts +267 -0
  385. package/src/generic/PushStatusResolver.ts +118 -8
  386. package/src/generic/ResolverBase.ts +65 -57
  387. package/src/generic/RunViewResolver.ts +22 -22
  388. package/src/generic/__tests__/FireAndForgetHeartbeat.test.ts +7 -7
  389. package/src/index.ts +137 -11
  390. package/src/integration/CustomColumnPromoter.ts +6 -1
  391. package/src/integration/EntityMapLifecycle.ts +20 -2
  392. package/src/logging/NoLog.ts +16 -2
  393. package/src/logging/StartupLogger.ts +6 -1
  394. package/src/logging/bootAudit.ts +26 -16
  395. package/src/logging/boundaryLogPayload.ts +8 -1
  396. package/src/logging/secretRedactor.ts +14 -9
  397. package/src/logging/shortenForLog.ts +8 -3
  398. package/src/logging/variablesLoggingMiddleware.ts +9 -6
  399. package/src/metadataRefreshSignal.ts +45 -0
  400. package/src/middleware/MJTenantFilterMiddleware.ts +4 -4
  401. package/src/multiTenancy/index.ts +29 -5
  402. package/src/realtimeWidget/WidgetRouter.ts +15 -10
  403. package/src/realtimeWidget/WidgetSessionService.ts +76 -76
  404. package/src/realtimeWidget/host-identity.ts +24 -10
  405. package/src/realtimeWidget/index.ts +3 -3
  406. package/src/realtimeWidget/visitorIdentity.ts +39 -8
  407. package/src/realtimeWidget/widgetCore.ts +75 -10
  408. package/src/realtimeWidget/widgetGuestElevation.ts +25 -12
  409. package/src/resolvers/AdhocQueryResolver.ts +3 -3
  410. package/src/resolvers/AgentRunStatusPublisher.ts +175 -0
  411. package/src/resolvers/AgentSessionResolver.ts +3 -3
  412. package/src/resolvers/ColorResolver.ts +6 -6
  413. package/src/resolvers/ComponentRegistryResolver.ts +36 -36
  414. package/src/resolvers/ConversationRunEventsResolver.ts +308 -0
  415. package/src/resolvers/DuplicateEntryCheckResolver.ts +232 -0
  416. package/src/resolvers/EntityCommunicationsResolver.ts +4 -4
  417. package/src/resolvers/ExecuteRemoteOperationResolver.ts +9 -9
  418. package/src/resolvers/FetchEntityVectorsResolver.ts +2 -1
  419. package/src/resolvers/FileResolver.ts +42 -42
  420. package/src/resolvers/GeoResolver.ts +4 -4
  421. package/src/resolvers/GetDataResolver.ts +50 -15
  422. package/src/resolvers/IntegrationDiscoveryResolver.ts +2 -2
  423. package/src/resolvers/ListOperationsResolver.ts +78 -28
  424. package/src/resolvers/MCPResolver.ts +30 -15
  425. package/src/resolvers/MergeRecordsResolver.ts +14 -2
  426. package/src/resolvers/QueryResolver.ts +13 -13
  427. package/src/resolvers/RealtimeBridgeResolver.ts +3 -3
  428. package/src/resolvers/RealtimeClientSessionResolver.ts +96 -38
  429. package/src/resolvers/RemoteBrowserActionResolver.ts +5 -5
  430. package/src/resolvers/RunAIAgentResolver.ts +134 -239
  431. package/src/resolvers/RunAIPromptResolver.ts +22 -22
  432. package/src/resolvers/RunDecisionResolver.ts +435 -0
  433. package/src/resolvers/RunTemplateResolver.ts +4 -4
  434. package/src/resolvers/RunTestResolver.ts +25 -25
  435. package/src/resolvers/SqlLoggingConfigResolver.ts +56 -56
  436. package/src/resolvers/TaskGraphFrameResolver.ts +37 -28
  437. package/src/resolvers/TelemetryResolver.ts +79 -79
  438. package/src/resolvers/VectorizeEntityResolver.ts +16 -11
  439. package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +40 -38
  440. package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +93 -0
  441. package/src/resolvers/__tests__/artifact-routing.test.ts +23 -23
  442. package/src/resolvers/adhoc-query-helpers.ts +19 -2
  443. package/src/resolvers/artifact-routing.ts +19 -19
  444. package/src/resolvers/meetingRecordingRegistration.ts +44 -10
  445. package/src/resolvers/peaksSidecar.ts +12 -2
  446. package/src/rest/EntityCRUDHandler.ts +24 -4
  447. package/src/rest/MediaStreamHandler.ts +11 -6
  448. package/src/rest/OAuthCallbackHandler.ts +25 -7
  449. package/src/rest/RESTEndpointHandler.ts +20 -15
  450. package/src/rest/RealtimeSdpBrokerHandler.ts +14 -4
  451. package/src/rest/SignatureWebhookHandler.ts +6 -1
  452. package/src/rest/UploadTokenManager.ts +66 -30
  453. package/src/rest/ViewOperationsHandler.ts +24 -4
  454. package/src/rest/mediaRange.ts +16 -6
  455. package/src/rest/setupRESTEndpoints.ts +24 -12
  456. package/src/serverExtensionReservedRoots.ts +6 -1
  457. package/src/services/TaskGraphActionRunner.ts +16 -15
  458. package/src/types.ts +21 -16
  459. package/src/util.ts +16 -6
@@ -4,8 +4,8 @@ import { getNamedType } from 'graphql';
4
4
  import type { GraphQLArgument } from 'graphql';
5
5
  import { configInfo } from '../config.js';
6
6
  import type { AppContext } from '../types.js';
7
- import { redactArg } from './secretRedactor.js';
8
- import { hasNoLogParameter, getNoLogFields } from './NoLog.js';
7
+ import { RedactArg } from './secretRedactor.js';
8
+ import { HasNoLogParameter, GetNoLogFields } from './NoLog.js';
9
9
  import { StartupLogger } from './StartupLogger.js';
10
10
 
11
11
  /**
@@ -112,7 +112,7 @@ const warnedResolverSignatures = new Set<string>();
112
112
  * differ from the always-on log line (`operationName` vs `operation`, `variables` vs `args`)
113
113
  * — operators with log-grep automation should update their patterns.
114
114
  */
115
- export const variablesLoggingMiddleware: MiddlewareFn<AppContext> = async (action, next) => {
115
+ export const VariablesLoggingMiddleware: MiddlewareFn<AppContext> = async (action, next) => {
116
116
  // Field resolvers (info.path.prev !== undefined) are skipped — only root @Query/@Mutation/@Subscription.
117
117
  if (action.info.path.prev !== undefined) {
118
118
  return next();
@@ -144,13 +144,13 @@ export const variablesLoggingMiddleware: MiddlewareFn<AppContext> = async (actio
144
144
 
145
145
  const paramMeta = argParams.find((p) => p.name === argDef.name);
146
146
  const noLogParameter = paramMeta && resolverEntry
147
- ? hasNoLogParameter(resolverEntry.target, resolverEntry.methodName, paramMeta.index)
147
+ ? HasNoLogParameter(resolverEntry.target, resolverEntry.methodName, paramMeta.index)
148
148
  : false;
149
149
 
150
150
  const inputClass = findInputClass(inputTypeName);
151
- const noLogFields = inputClass ? getNoLogFields(inputClass) : new Set<string>();
151
+ const noLogFields = inputClass ? GetNoLogFields(inputClass) : new Set<string>();
152
152
 
153
- redactedArgs[argDef.name] = redactArg({
153
+ redactedArgs[argDef.name] = RedactArg({
154
154
  inputTypeName,
155
155
  rawValue,
156
156
  provider,
@@ -188,6 +188,9 @@ export const variablesLoggingMiddleware: MiddlewareFn<AppContext> = async (actio
188
188
  return next();
189
189
  };
190
190
 
191
+ /** @deprecated Use {@link VariablesLoggingMiddleware}. */
192
+ export const variablesLoggingMiddleware: MiddlewareFn<AppContext> = VariablesLoggingMiddleware;
193
+
191
194
  /**
192
195
  * Heuristic: an arg is "custom" (i.e. needs `@NoLog` discipline because metadata can't redact it)
193
196
  * when its GraphQL input type is not a known `Create<X>Input` / `Update<X>Input` for an entity
@@ -0,0 +1,45 @@
1
+ import { LogError, LogStatus } from '@memberjunction/core';
2
+
3
+ /**
4
+ * Operator control: `kill -HUP <pid>` (or `docker kill -s HUP`, `pm2 sendSignal SIGHUP`) makes a
5
+ * running MJAPI hard-reload its metadata from the database, without a restart and without a
6
+ * user-facing endpoint. SIGHUP is the conventional "reload" signal; SIGUSR1 is reserved by Node
7
+ * for the inspector.
8
+ *
9
+ * Only the global provider needs refreshing: per-request providers adopt the global provider's
10
+ * metadata on every request (ProviderBase.CopyMetadataFromGlobalProvider).
11
+ */
12
+ export const METADATA_REFRESH_SIGNAL = 'SIGHUP';
13
+
14
+ /**
15
+ * Builds the signal handler. A signal that arrives while a refresh is still running is ignored
16
+ * (and logged) rather than stacked, so a burst of signals cannot queue a burst of full reloads.
17
+ * The handler never rejects — a failed refresh is logged.
18
+ *
19
+ * @param refresh - performs the hard reload, e.g. `() => Metadata.Provider.Refresh()`
20
+ */
21
+ export function CreateMetadataRefreshSignalHandler(refresh: () => Promise<boolean>): () => Promise<void> {
22
+ let inFlight = false;
23
+
24
+ return async () => {
25
+ if (inFlight) {
26
+ LogStatus(`🔄 ${METADATA_REFRESH_SIGNAL} received while a metadata refresh is already running; ignored. Send it again once the current refresh finishes.`);
27
+ return;
28
+ }
29
+
30
+ inFlight = true;
31
+ LogStatus(`🔄 ${METADATA_REFRESH_SIGNAL} received, refreshing metadata from the database`);
32
+ try {
33
+ const ok = await refresh();
34
+ if (ok) {
35
+ LogStatus('✅ Metadata refreshed');
36
+ } else {
37
+ LogError(`❌ ${METADATA_REFRESH_SIGNAL} metadata refresh reported failure`);
38
+ }
39
+ } catch (err) {
40
+ LogError(`❌ ${METADATA_REFRESH_SIGNAL} metadata refresh failed`, undefined, err);
41
+ } finally {
42
+ inFlight = false;
43
+ }
44
+ };
45
+ }
@@ -10,7 +10,7 @@
10
10
  import { RegisterClass } from '@memberjunction/global';
11
11
  import { BaseServerMiddleware } from './BaseServerMiddleware.js';
12
12
  import { configInfo } from '../config.js';
13
- import { createTenantMiddleware, createTenantPreRunViewHook, createTenantPreSaveHook } from '../multiTenancy/index.js';
13
+ import { CreateTenantMiddleware, CreateTenantPreRunViewHook, CreateTenantPreSaveHook } from '../multiTenancy/index.js';
14
14
  import type { RequestHandler } from 'express';
15
15
  import type { RunViewParams, UserInfo, BaseEntity } from '@memberjunction/core';
16
16
 
@@ -26,14 +26,14 @@ export class MJTenantFilterMiddleware extends BaseServerMiddleware {
26
26
  }
27
27
 
28
28
  GetPostAuthMiddleware(): RequestHandler[] {
29
- return [createTenantMiddleware(configInfo.multiTenancy!)];
29
+ return [CreateTenantMiddleware(configInfo.multiTenancy!)];
30
30
  }
31
31
 
32
32
  PreRunView(params: RunViewParams, contextUser: UserInfo | undefined): RunViewParams | Promise<RunViewParams> {
33
- return createTenantPreRunViewHook(configInfo.multiTenancy!)(params, contextUser);
33
+ return CreateTenantPreRunViewHook(configInfo.multiTenancy!)(params, contextUser);
34
34
  }
35
35
 
36
36
  PreSave(entity: BaseEntity, contextUser: UserInfo | undefined): boolean | string | Promise<boolean | string> {
37
- return createTenantPreSaveHook(configInfo.multiTenancy!)(entity, contextUser);
37
+ return CreateTenantPreSaveHook(configInfo.multiTenancy!)(entity, contextUser);
38
38
  }
39
39
  }
@@ -48,7 +48,7 @@ export type TenantContextExtractor = (
48
48
  * By the time GraphQL resolvers or REST handlers run, the contextUser already
49
49
  * has TenantContext set — no deferred pickup via `req['__mj_tenantId']` needed.
50
50
  */
51
- export function createTenantMiddleware(config: MultiTenancyConfig): RequestHandler {
51
+ export function CreateTenantMiddleware(config: MultiTenancyConfig): RequestHandler {
52
52
  return (req, res, next) => {
53
53
  const userPayload = (req as { userPayload?: UserPayload }).userPayload;
54
54
  if (!userPayload?.userRecord) {
@@ -79,7 +79,7 @@ export function createTenantMiddleware(config: MultiTenancyConfig): RequestHandl
79
79
  // instance, and stamping it in place races concurrent requests for the
80
80
  // same user (one request's tenant becomes another's, same-instant).
81
81
  const sessionUser = CloneUserForSessionContext(userPayload.userRecord as UserInfo);
82
- attachTenantContext(sessionUser, tenantId, 'header');
82
+ AttachTenantContext(sessionUser, tenantId, 'header');
83
83
  userPayload.userRecord = sessionUser;
84
84
  }
85
85
  }
@@ -87,6 +87,11 @@ export function createTenantMiddleware(config: MultiTenancyConfig): RequestHandl
87
87
  };
88
88
  }
89
89
 
90
+ /** @deprecated Use {@link CreateTenantMiddleware}. */
91
+ export function createTenantMiddleware(config: MultiTenancyConfig): RequestHandler {
92
+ return CreateTenantMiddleware(config);
93
+ }
94
+
90
95
  /**
91
96
  * Attaches TenantContext to a UserInfo object.
92
97
  * Called from the GraphQL context function after authentication.
@@ -98,7 +103,7 @@ export function createTenantMiddleware(config: MultiTenancyConfig): RequestHandl
98
103
  * so a future caller from a different source ('linkedEntity', 'custom') cannot
99
104
  * reintroduce the injection path.
100
105
  */
101
- export function attachTenantContext(
106
+ export function AttachTenantContext(
102
107
  user: UserInfo,
103
108
  tenantId: string,
104
109
  source: TenantContext['Source']
@@ -109,6 +114,15 @@ export function attachTenantContext(
109
114
  user.TenantContext = { TenantID: tenantId, Source: source };
110
115
  }
111
116
 
117
+ /** @deprecated Use {@link AttachTenantContext}. */
118
+ export function attachTenantContext(
119
+ user: UserInfo,
120
+ tenantId: string,
121
+ source: TenantContext['Source']
122
+ ): void {
123
+ return AttachTenantContext(user, tenantId, source);
124
+ }
125
+
112
126
  /**
113
127
  * Determines whether a given entity name should have tenant filtering applied.
114
128
  */
@@ -151,7 +165,7 @@ function isAdminUser(user: UserInfo, adminRoles: string[]): boolean {
151
165
  * Creates a PreRunViewHook that auto-injects tenant WHERE clauses
152
166
  * into RunView queries for scoped entities.
153
167
  */
154
- export function createTenantPreRunViewHook(config: MultiTenancyConfig): PreRunViewHook {
168
+ export function CreateTenantPreRunViewHook(config: MultiTenancyConfig): PreRunViewHook {
155
169
  return (params, contextUser) => {
156
170
  // No tenant context → no filtering
157
171
  if (!contextUser?.TenantContext) return params;
@@ -201,6 +215,11 @@ export function createTenantPreRunViewHook(config: MultiTenancyConfig): PreRunVi
201
215
  };
202
216
  }
203
217
 
218
+ /** @deprecated Use {@link CreateTenantPreRunViewHook}. */
219
+ export function createTenantPreRunViewHook(config: MultiTenancyConfig): PreRunViewHook {
220
+ return CreateTenantPreRunViewHook(config);
221
+ }
222
+
204
223
  /**
205
224
  * Quotes an identifier for use in a tenant predicate via the active provider's
206
225
  * QuoteIdentifier (DatabaseProviderBase always exposes one server-side, yielding [x]
@@ -227,7 +246,7 @@ export function QuoteFilterIdentifier(name: string): string {
227
246
  * match the user's TenantContext. In 'log' mode, warns but allows. In
228
247
  * 'off' mode, this hook is a no-op.
229
248
  */
230
- export function createTenantPreSaveHook(config: MultiTenancyConfig): PreSaveHook {
249
+ export function CreateTenantPreSaveHook(config: MultiTenancyConfig): PreSaveHook {
231
250
  return (entity, contextUser) => {
232
251
  // No validation needed if write protection is off
233
252
  if (config.writeProtection === 'off') return true;
@@ -268,3 +287,8 @@ export function createTenantPreSaveHook(config: MultiTenancyConfig): PreSaveHook
268
287
  return true;
269
288
  };
270
289
  }
290
+
291
+ /** @deprecated Use {@link CreateTenantPreSaveHook}. */
292
+ export function createTenantPreSaveHook(config: MultiTenancyConfig): PreSaveHook {
293
+ return CreateTenantPreSaveHook(config);
294
+ }
@@ -15,9 +15,9 @@ import { rateLimit, ipKeyGenerator } from 'express-rate-limit';
15
15
  import { LogStatus } from '@memberjunction/core';
16
16
  import { configInfo, type WidgetConfig } from '../config.js';
17
17
  import { MagicLinkKeyManager } from '../auth/magicLink/MagicLinkKeys.js';
18
- import { registerMagicLinkAuthProvider } from '../auth/magicLink/MagicLinkRouter.js';
18
+ import { RegisterMagicLinkAuthProvider } from '../auth/magicLink/MagicLinkRouter.js';
19
19
  import { WidgetSessionService, type MintGuestSessionResult } from './WidgetSessionService.js';
20
- import { looksLikeBot } from './widgetCore.js';
20
+ import { LooksLikeBot } from './widgetCore.js';
21
21
 
22
22
  /** The mount path for the widget public router (`/widget`). */
23
23
  export const WIDGET_MOUNT_PATH = '/widget';
@@ -41,7 +41,7 @@ function ensureWidgetSigning(publicUrl: string, widgetConfig: WidgetConfig): voi
41
41
  // Register the magic-link provider against the magic-link config (its audience),
42
42
  // which is what validates widget tokens. No-op if already registered.
43
43
  if (mlConfig) {
44
- registerMagicLinkAuthProvider(publicUrl, mlConfig);
44
+ RegisterMagicLinkAuthProvider(publicUrl, mlConfig);
45
45
  }
46
46
  }
47
47
 
@@ -51,7 +51,7 @@ function ensureWidgetSigning(publicUrl: string, widgetConfig: WidgetConfig): voi
51
51
  * `authenticatedRouter` at the same path AFTER it (the RV4 resolve-identity endpoint needs the
52
52
  * verified principal from `req.userPayload`).
53
53
  */
54
- export function createWidgetHandler(publicUrl: string, config: WidgetConfig): { publicRouter: Router; authenticatedRouter: Router } {
54
+ export function CreateWidgetHandler(publicUrl: string, config: WidgetConfig): { publicRouter: Router; authenticatedRouter: Router } {
55
55
  ensureWidgetSigning(publicUrl, config);
56
56
 
57
57
  const service = new WidgetSessionService(publicUrl, config);
@@ -106,6 +106,11 @@ export function createWidgetHandler(publicUrl: string, config: WidgetConfig): {
106
106
  return { publicRouter, authenticatedRouter };
107
107
  }
108
108
 
109
+ /** @deprecated Use {@link CreateWidgetHandler}. */
110
+ export function createWidgetHandler(publicUrl: string, config: WidgetConfig): { publicRouter: Router; authenticatedRouter: Router } {
111
+ return CreateWidgetHandler(publicUrl, config);
112
+ }
113
+
109
114
  /** Reads the `widgetKey` from a parsed JSON body, or '' when absent (used to key the dynamic limiter). */
110
115
  function readWidgetKey(req: Request): string {
111
116
  const body = (req.body ?? {}) as { widgetKey?: string };
@@ -121,7 +126,7 @@ async function handleForget(service: WidgetSessionService, req: Request, res: Re
121
126
  res.status(400).json({ success: false, errorCode: 'not_found', error: 'widgetKey is required.' });
122
127
  return;
123
128
  }
124
- const result = await service.ForgetVisitor({ widgetKey, visitorKey, origin: req.get('origin') ?? undefined });
129
+ const result = await service.ForgetVisitor({ WidgetKey: widgetKey, VisitorKey: visitorKey, origin: req.get('origin') ?? undefined });
125
130
  res.status(result.success ? 200 : result.errorCode === 'server_error' ? 500 : 403).json(result);
126
131
  }
127
132
 
@@ -143,9 +148,9 @@ async function handleResolveIdentity(service: WidgetSessionService, req: Request
143
148
  return;
144
149
  }
145
150
  const result = await service.ResolveVisitorIdentity({
146
- widgetKey,
147
- visitorKey,
148
- verifiedEmail: verifiedUser.Email,
151
+ WidgetKey: widgetKey,
152
+ VisitorKey: visitorKey,
153
+ VerifiedEmail: verifiedUser.Email,
149
154
  origin: req.get('origin') ?? undefined,
150
155
  });
151
156
  res.status(result.success ? 200 : result.errorCode === 'server_error' ? 500 : 403).json(result);
@@ -160,7 +165,7 @@ async function handleUpgrade(service: WidgetSessionService, req: Request, res: R
160
165
  res.status(400).json({ success: false, errorCode: 'not_found', error: 'widgetKey is required.' });
161
166
  return;
162
167
  }
163
- const result = await service.RequestUpgrade({ widgetKey, email, origin: req.get('origin') ?? undefined });
168
+ const result = await service.RequestUpgrade({ WidgetKey: widgetKey, email, origin: req.get('origin') ?? undefined });
164
169
  // 400 for a bad email (client can fix it); 403 for any policy rejection (uniform, non-enumerable); 500 for faults.
165
170
  const status = result.success ? 200 : result.errorCode === 'invalid_email' ? 400 : result.errorCode === 'server_error' ? 500 : 403;
166
171
  res.status(status).json(result);
@@ -177,7 +182,7 @@ async function handleMint(service: WidgetSessionService, req: Request, res: Resp
177
182
 
178
183
  // W6 hardening: coarse bot/automation rejection before any DB lookup or token mint. Returns the same
179
184
  // 403 as a policy rejection so a probe can't distinguish "bot-blocked" from "bad key/origin".
180
- if (looksLikeBot(req.get('user-agent'))) {
185
+ if (LooksLikeBot(req.get('user-agent'))) {
181
186
  res.status(403).json({ success: false, errorCode: 'origin_not_allowed', error: 'Widget mint rejected.' });
182
187
  return;
183
188
  }