@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
@@ -0,0 +1,93 @@
1
+ import 'reflect-metadata';
2
+ import { describe, it, expect, vi } from 'vitest';
3
+ import { CompositeKey, KeyValuePair, RecordDependency, type IMetadataProvider } from '@memberjunction/core';
4
+ import type { AppContext } from '../../types.js';
5
+ import type { PubSubEngine } from 'type-graphql';
6
+
7
+ vi.mock('../../util.js', () => ({
8
+ GetReadOnlyProvider: vi.fn(),
9
+ GetReadWriteProvider: vi.fn(),
10
+ }));
11
+
12
+ import { GetReadOnlyProvider } from '../../util.js';
13
+ import { RecordDependencyResolver, RecordDependencyResult } from '../MergeRecordsResolver.js';
14
+
15
+ describe('RecordDependencyResolver', () => {
16
+ it('returns PrimaryKey, IsSoftLink, and EntityIDFieldName from metadata provider', async () => {
17
+ const mockDep: RecordDependency = {
18
+ EntityName: 'Users',
19
+ RelatedEntityName: 'RecordChanges',
20
+ FieldName: 'RecordID',
21
+ PrimaryKey: new CompositeKey([new KeyValuePair('ID', 'CHG-100')]),
22
+ IsSoftLink: true,
23
+ EntityIDFieldName: 'EntityID',
24
+ };
25
+
26
+ const mockProvider = {
27
+ GetRecordDependencies: vi.fn().mockResolvedValue([mockDep]),
28
+ } as unknown as IMetadataProvider;
29
+
30
+ vi.mocked(GetReadOnlyProvider).mockReturnValue(mockProvider);
31
+
32
+ const resolver = new RecordDependencyResolver();
33
+ const mockContext = {
34
+ dataSource: {},
35
+ userPayload: {},
36
+ providers: [],
37
+ } as unknown as AppContext;
38
+ const mockPubSub = {} as PubSubEngine;
39
+
40
+ const result = await resolver.GetRecordDependencies(
41
+ 'Users',
42
+ { KeyValuePairs: [{ FieldName: 'ID', Value: 'USER-1' }] },
43
+ mockContext,
44
+ mockPubSub
45
+ );
46
+
47
+ expect(result).toHaveLength(1);
48
+ expect(result[0].EntityName).toBe('Users');
49
+ expect(result[0].RelatedEntityName).toBe('RecordChanges');
50
+ expect(result[0].FieldName).toBe('RecordID');
51
+ expect(result[0].PrimaryKey).toBe(mockDep.PrimaryKey);
52
+ expect(result[0].IsSoftLink).toBe(true);
53
+ expect(result[0].EntityIDFieldName).toBe('EntityID');
54
+
55
+ // The pre-6.2 name stays as a deprecated alias for one release, so older clients keep working
56
+ expect(result[0].CompositeKey).toBe(mockDep.PrimaryKey);
57
+ });
58
+
59
+ it('handles hard foreign key dependencies with undefined soft-link flags', async () => {
60
+ const mockDep: RecordDependency = {
61
+ EntityName: 'Customers',
62
+ RelatedEntityName: 'Orders',
63
+ FieldName: 'CustomerID',
64
+ PrimaryKey: new CompositeKey([new KeyValuePair('ID', 'ORD-555')]),
65
+ };
66
+
67
+ const mockProvider = {
68
+ GetRecordDependencies: vi.fn().mockResolvedValue([mockDep]),
69
+ } as unknown as IMetadataProvider;
70
+
71
+ vi.mocked(GetReadOnlyProvider).mockReturnValue(mockProvider);
72
+
73
+ const resolver = new RecordDependencyResolver();
74
+ const mockContext = {
75
+ dataSource: {},
76
+ userPayload: {},
77
+ providers: [],
78
+ } as unknown as AppContext;
79
+ const mockPubSub = {} as PubSubEngine;
80
+
81
+ const result = await resolver.GetRecordDependencies(
82
+ 'Customers',
83
+ { KeyValuePairs: [{ FieldName: 'ID', Value: 'CUST-1' }] },
84
+ mockContext,
85
+ mockPubSub
86
+ );
87
+
88
+ expect(result).toHaveLength(1);
89
+ expect(result[0].PrimaryKey).toBe(mockDep.PrimaryKey);
90
+ expect(result[0].IsSoftLink).toBeUndefined();
91
+ expect(result[0].EntityIDFieldName).toBeUndefined();
92
+ });
93
+ });
@@ -2,14 +2,14 @@ import { describe, it, expect, vi } from 'vitest';
2
2
  import { RouteArtifact, type ArtifactRoutingInput } from '../artifact-routing';
3
3
 
4
4
  const baseInput = (overrides: Partial<ArtifactRoutingInput> = {}): ArtifactRoutingInput => ({
5
- typeDefault: 'Inline',
6
- forceToolsOnly: false,
5
+ TypeDefault: 'Inline',
6
+ ForceToolsOnly: false,
7
7
  mimeType: 'image/png',
8
- sizeBytes: 5_000,
9
- inlineSizeCap: 100 * 1024,
10
- modelSupportsModality: () => true,
11
- modelName: 'TestModel',
12
- artifactTypeName: 'Image',
8
+ SizeBytes: 5_000,
9
+ InlineSizeCap: 100 * 1024,
10
+ ModelSupportsModality: () => true,
11
+ ModelName: 'TestModel',
12
+ ArtifactTypeName: 'Image',
13
13
  ...overrides,
14
14
  });
15
15
 
@@ -20,18 +20,18 @@ describe('RouteArtifact', () => {
20
20
  });
21
21
 
22
22
  it('routes ToolsOnly type default to tools', () => {
23
- const result = RouteArtifact(baseInput({ typeDefault: 'ToolsOnly' }));
23
+ const result = RouteArtifact(baseInput({ TypeDefault: 'ToolsOnly' }));
24
24
  expect(result).toEqual({ delivery: 'tools' });
25
25
  });
26
26
 
27
27
  it('routes ForceToolsOnly per-instance override to tools regardless of type default', () => {
28
- const result = RouteArtifact(baseInput({ forceToolsOnly: true }));
28
+ const result = RouteArtifact(baseInput({ ForceToolsOnly: true }));
29
29
  expect(result).toEqual({ delivery: 'tools' });
30
30
  });
31
31
 
32
32
  it('returns an error when the model lacks modality support for an Inline type', () => {
33
33
  const result = RouteArtifact(baseInput({
34
- modelSupportsModality: () => false,
34
+ ModelSupportsModality: () => false,
35
35
  }));
36
36
  expect(result.delivery).toBe('error');
37
37
  if (result.delivery !== 'error') return;
@@ -46,22 +46,22 @@ describe('RouteArtifact', () => {
46
46
 
47
47
  it('falls back to tools with annotation when size exceeds the cap', () => {
48
48
  const result = RouteArtifact(baseInput({
49
- sizeBytes: 200 * 1024,
50
- inlineSizeCap: 100 * 1024,
49
+ SizeBytes: 200 * 1024,
50
+ InlineSizeCap: 100 * 1024,
51
51
  }));
52
52
  expect(result.delivery).toBe('tools');
53
53
  if (result.delivery !== 'tools') return;
54
- expect(result.annotation).toBeDefined();
55
- expect(result.annotation).toMatch(/exceeds the inline cap/);
56
- expect(result.annotation).toContain('204800');
57
- expect(result.annotation).toContain('102400');
54
+ expect(result.Annotation).toBeDefined();
55
+ expect(result.Annotation).toMatch(/exceeds the inline cap/);
56
+ expect(result.Annotation).toContain('204800');
57
+ expect(result.Annotation).toContain('102400');
58
58
  });
59
59
 
60
60
  it('checks ToolsOnly before modality (modality check is irrelevant when type is ToolsOnly)', () => {
61
61
  const modelSupportsModality = vi.fn(() => false);
62
62
  const result = RouteArtifact(baseInput({
63
- typeDefault: 'ToolsOnly',
64
- modelSupportsModality,
63
+ TypeDefault: 'ToolsOnly',
64
+ ModelSupportsModality: modelSupportsModality,
65
65
  }));
66
66
  expect(result).toEqual({ delivery: 'tools' });
67
67
  expect(modelSupportsModality).not.toHaveBeenCalled();
@@ -69,8 +69,8 @@ describe('RouteArtifact', () => {
69
69
 
70
70
  it('checks modality before size (modality error wins over size fallback)', () => {
71
71
  const result = RouteArtifact(baseInput({
72
- modelSupportsModality: () => false,
73
- sizeBytes: 200 * 1024,
72
+ ModelSupportsModality: () => false,
73
+ SizeBytes: 200 * 1024,
74
74
  }));
75
75
  expect(result.delivery).toBe('error');
76
76
  });
@@ -78,9 +78,9 @@ describe('RouteArtifact', () => {
78
78
  it('ForceToolsOnly bypasses both modality and size checks', () => {
79
79
  const modelSupportsModality = vi.fn(() => false);
80
80
  const result = RouteArtifact(baseInput({
81
- forceToolsOnly: true,
82
- modelSupportsModality,
83
- sizeBytes: 200 * 1024,
81
+ ForceToolsOnly: true,
82
+ ModelSupportsModality: modelSupportsModality,
83
+ SizeBytes: 200 * 1024,
84
84
  }));
85
85
  expect(result).toEqual({ delivery: 'tools' });
86
86
  expect(modelSupportsModality).not.toHaveBeenCalled();
@@ -15,7 +15,7 @@
15
15
  * - **Full page** (`pageLength >= maxRows`): more rows may exist — returns `null` to
16
16
  * signal that a `COUNT(*)` is required to know the true total.
17
17
  */
18
- export function exactTotalFromPage(
18
+ export function ExactTotalFromPage(
19
19
  startRow: number,
20
20
  pageLength: number,
21
21
  maxRows: number | null,
@@ -29,13 +29,22 @@ export function exactTotalFromPage(
29
29
  return null;
30
30
  }
31
31
 
32
+ /** @deprecated Use {@link ExactTotalFromPage}. */
33
+ export function exactTotalFromPage(
34
+ startRow: number,
35
+ pageLength: number,
36
+ maxRows: number | null,
37
+ ): number | null {
38
+ return ExactTotalFromPage(startRow, pageLength, maxRows);
39
+ }
40
+
32
41
  /**
33
42
  * Reads the total row count from a `COUNT(*)` recordset (`[{ TotalRowCount }]`),
34
43
  * falling back to `fallback` when the count is absent, non-numeric, or negative — so
35
44
  * an unexpected count shape never yields a misleading total. `fallback` should be a
36
45
  * safe lower bound (e.g. `startRow + rowsReturned`).
37
46
  */
38
- export function resolveAdhocTotalRowCount(
47
+ export function ResolveAdhocTotalRowCount(
39
48
  countRows: ReadonlyArray<{ TotalRowCount?: unknown }> | null | undefined,
40
49
  fallback: number,
41
50
  ): number {
@@ -48,3 +57,11 @@ export function resolveAdhocTotalRowCount(
48
57
  }
49
58
  return fallback;
50
59
  }
60
+
61
+ /** @deprecated Use {@link ResolveAdhocTotalRowCount}. */
62
+ export function resolveAdhocTotalRowCount(
63
+ countRows: ReadonlyArray<{ TotalRowCount?: unknown }> | null | undefined,
64
+ fallback: number,
65
+ ): number {
66
+ return ResolveAdhocTotalRowCount(countRows, fallback);
67
+ }
@@ -12,38 +12,38 @@ export type ArtifactDeliveryMode = 'Inline' | 'ToolsOnly';
12
12
 
13
13
  export interface ArtifactRoutingInput {
14
14
  /** The Artifact Type's DefaultDeliveryMode. */
15
- typeDefault: ArtifactDeliveryMode;
15
+ TypeDefault: ArtifactDeliveryMode;
16
16
  /** Per-instance opt-out — `true` forces tools regardless of typeDefault. */
17
- forceToolsOnly: boolean;
17
+ ForceToolsOnly: boolean;
18
18
  /** MIME type of the artifact content (e.g. 'image/png'). */
19
- mimeType: string;
19
+ mimeType: string; // case-violation-ok-legacy-back-compat: the old name is also read off a value typed `any`, where a rename would compile and silently return undefined
20
20
  /** Size of the content in bytes. */
21
- sizeBytes: number;
21
+ SizeBytes: number;
22
22
  /** Maximum inline size in bytes; over this, even Inline-default artifacts go to tools. */
23
- inlineSizeCap: number;
23
+ InlineSizeCap: number;
24
24
  /** Predicate: does the active model driver support the given MIME modality inline? */
25
- modelSupportsModality: (mimeType: string) => boolean;
25
+ ModelSupportsModality: (mimeType: string) => boolean;
26
26
  /** Model name used in error messages — never used to make decisions. */
27
- modelName: string;
27
+ ModelName: string;
28
28
  /** Artifact type name used in error messages. */
29
- artifactTypeName: string;
29
+ ArtifactTypeName: string;
30
30
  }
31
31
 
32
32
  export type ArtifactRoutingDecision =
33
- | { delivery: 'inline' }
34
- | { delivery: 'tools'; annotation?: string }
35
- | { delivery: 'error'; message: string };
33
+ | { delivery: 'inline' } // case-violation-ok-legacy-back-compat: the old name is also read off a value typed `any`, where a rename would compile and silently return undefined
34
+ | { delivery: 'tools'; Annotation?: string } // case-violation-ok-legacy-back-compat: the old name is also read off a value typed `any`, where a rename would compile and silently return undefined
35
+ | { delivery: 'error'; message: string }; // case-violation-ok-legacy-back-compat: the old name is also read off a value typed `any`, where a rename would compile and silently return undefined
36
36
 
37
37
  export function RouteArtifact(input: ArtifactRoutingInput): ArtifactRoutingDecision {
38
38
  const {
39
- typeDefault,
40
- forceToolsOnly,
39
+ TypeDefault: typeDefault,
40
+ ForceToolsOnly: forceToolsOnly,
41
41
  mimeType,
42
- sizeBytes,
43
- inlineSizeCap,
44
- modelSupportsModality,
45
- modelName,
46
- artifactTypeName,
42
+ SizeBytes: sizeBytes,
43
+ InlineSizeCap: inlineSizeCap,
44
+ ModelSupportsModality: modelSupportsModality,
45
+ ModelName: modelName,
46
+ ArtifactTypeName: artifactTypeName,
47
47
  } = input;
48
48
 
49
49
  // Path 1: ToolsOnly default or per-instance opt-out — always tools.
@@ -71,7 +71,7 @@ export function RouteArtifact(input: ArtifactRoutingInput): ArtifactRoutingDecis
71
71
  if (sizeBytes >= inlineSizeCap) {
72
72
  return {
73
73
  delivery: 'tools',
74
- annotation: `Artifact type "${artifactTypeName}" is configured for Inline delivery but content size (${sizeBytes} bytes) exceeds the inline cap (${inlineSizeCap} bytes); delivered via tools instead.`,
74
+ Annotation: `Artifact type "${artifactTypeName}" is configured for Inline delivery but content size (${sizeBytes} bytes) exceeds the inline cap (${inlineSizeCap} bytes); delivered via tools instead.`,
75
75
  };
76
76
  }
77
77
 
@@ -81,13 +81,13 @@ export interface MeetingRecordingRegistrationConfig {
81
81
  * The `MJ: File Storage Providers` id whose accounts target the egress sink (where LiveKit wrote the
82
82
  * MP4). Falls back to `process.env.MJ_MEETING_RECORDING_STORAGE_PROVIDER`.
83
83
  */
84
- sinkStorageProviderID?: string;
84
+ SinkStorageProviderID?: string;
85
85
  /**
86
86
  * OPTIONAL canonical provider id — when set AND different from the sink, the MP4 is copied into it and
87
87
  * the Files row points there (the "copy into Box" option). Falls back to
88
88
  * `process.env.MJ_MEETING_RECORDING_CANONICAL_STORAGE_PROVIDER`. OFF by default.
89
89
  */
90
- canonicalStorageProviderID?: string;
90
+ CanonicalStorageProviderID?: string;
91
91
  }
92
92
 
93
93
  /**
@@ -100,7 +100,7 @@ export interface MeetingRecordingRegistrationConfig {
100
100
  * @param provider The metadata provider servicing this request.
101
101
  * @param config Optional config overrides (otherwise read from env).
102
102
  */
103
- export async function registerMeetingRecordingFile(
103
+ export async function RegisterMeetingRecordingFile(
104
104
  egress: MeetingRecordingEgressResult,
105
105
  contextUser: UserInfo,
106
106
  provider: IMetadataProvider,
@@ -115,7 +115,7 @@ export async function registerMeetingRecordingFile(
115
115
  };
116
116
  }
117
117
 
118
- const sinkProviderID = config?.sinkStorageProviderID ?? process.env.MJ_MEETING_RECORDING_STORAGE_PROVIDER;
118
+ const sinkProviderID = config?.SinkStorageProviderID ?? process.env.MJ_MEETING_RECORDING_STORAGE_PROVIDER;
119
119
  if (!sinkProviderID) {
120
120
  return {
121
121
  Success: false,
@@ -138,7 +138,7 @@ export async function registerMeetingRecordingFile(
138
138
  };
139
139
  }
140
140
 
141
- const conversationID = await resolveMeetingConversation(egress, contextUser, provider);
141
+ const conversationID = await ResolveMeetingConversation(egress, contextUser, provider);
142
142
  if (!conversationID) {
143
143
  return { Success: false, ErrorMessage: 'Could not resolve or create the Meeting-Room Conversation for the recording.' };
144
144
  }
@@ -175,6 +175,16 @@ export async function registerMeetingRecordingFile(
175
175
  }
176
176
  }
177
177
 
178
+ /** @deprecated Use {@link RegisterMeetingRecordingFile}. */
179
+ export async function registerMeetingRecordingFile(
180
+ egress: MeetingRecordingEgressResult,
181
+ contextUser: UserInfo,
182
+ provider: IMetadataProvider,
183
+ config?: MeetingRecordingRegistrationConfig,
184
+ ): Promise<MeetingRecordingRegistrationResult> {
185
+ return RegisterMeetingRecordingFile(egress, contextUser, provider, config);
186
+ }
187
+
178
188
  /**
179
189
  * Best-effort correlation when a recording STARTS: stamps `Conversation.EgressID` onto the room's
180
190
  * Meeting-Room Conversation (if it already exists) so a live recording is tracked against the room. If the
@@ -187,7 +197,7 @@ export async function registerMeetingRecordingFile(
187
197
  * @param provider The metadata provider.
188
198
  * @returns `true` when an existing conversation was stamped, else `false`.
189
199
  */
190
- export async function correlateRecordingStart(roomName: string, egressID: string, contextUser: UserInfo, provider: IMetadataProvider): Promise<boolean> {
200
+ export async function CorrelateRecordingStart(roomName: string, egressID: string, contextUser: UserInfo, provider: IMetadataProvider): Promise<boolean> {
191
201
  try {
192
202
  const conversationID = await findConversationByRoomName(roomName, contextUser, provider);
193
203
  if (!conversationID) {
@@ -210,12 +220,17 @@ export async function correlateRecordingStart(roomName: string, egressID: string
210
220
  }
211
221
  }
212
222
 
223
+ /** @deprecated Use {@link CorrelateRecordingStart}. */
224
+ export async function correlateRecordingStart(roomName: string, egressID: string, contextUser: UserInfo, provider: IMetadataProvider): Promise<boolean> {
225
+ return CorrelateRecordingStart(roomName, egressID, contextUser, provider);
226
+ }
227
+
213
228
  /**
214
229
  * Resolves the Meeting-Room Conversation for a completed recording: prefer matching by `EgressID` (set on
215
230
  * start), fall back to the room name (`ExternalID` + `Type`), else create one following the transcript
216
231
  * sink's pattern (scoped `Application` so it stays out of the normal chat list).
217
232
  */
218
- export async function resolveMeetingConversation(
233
+ export async function ResolveMeetingConversation(
219
234
  egress: MeetingRecordingEgressResult,
220
235
  contextUser: UserInfo,
221
236
  provider: IMetadataProvider,
@@ -231,6 +246,15 @@ export async function resolveMeetingConversation(
231
246
  return createMeetingConversation(egress.RoomName, contextUser, provider);
232
247
  }
233
248
 
249
+ /** @deprecated Use {@link ResolveMeetingConversation}. */
250
+ export async function resolveMeetingConversation(
251
+ egress: MeetingRecordingEgressResult,
252
+ contextUser: UserInfo,
253
+ provider: IMetadataProvider,
254
+ ): Promise<string | null> {
255
+ return ResolveMeetingConversation(egress, contextUser, provider);
256
+ }
257
+
234
258
  /** Finds a non-archived Meeting-Room Conversation by its `EgressID`. */
235
259
  async function findConversationByEgressID(egressID: string, contextUser: UserInfo, provider: IMetadataProvider): Promise<string | null> {
236
260
  if (!egressID) {
@@ -310,7 +334,7 @@ async function resolveFileLocation(
310
334
  config?: MeetingRecordingRegistrationConfig,
311
335
  ): Promise<FileLocationResult> {
312
336
  const outputLocation = egress.OutputLocation!;
313
- const canonicalProviderID = config?.canonicalStorageProviderID ?? process.env.MJ_MEETING_RECORDING_CANONICAL_STORAGE_PROVIDER;
337
+ const canonicalProviderID = config?.CanonicalStorageProviderID ?? process.env.MJ_MEETING_RECORDING_CANONICAL_STORAGE_PROVIDER;
314
338
 
315
339
  // Default (v1): point directly at the sink output — playback streams straight from it, no byte copy.
316
340
  if (!canonicalProviderID || canonicalProviderID === sinkProviderID) {
@@ -319,7 +343,7 @@ async function resolveFileLocation(
319
343
 
320
344
  // OPTIONAL "copy into Box": a separate canonical provider IS configured and differs from the sink —
321
345
  // read the bytes from the sink and upload them into the canonical provider, then point there.
322
- const canonicalKey = await copyEgressOutputToCanonical(outputLocation, sinkAccountID, canonicalProviderID, contextUser);
346
+ const canonicalKey = await CopyEgressOutputToCanonical(outputLocation, sinkAccountID, canonicalProviderID, contextUser);
323
347
  if (!canonicalKey.Success) {
324
348
  return { Success: false, ErrorMessage: canonicalKey.ErrorMessage, ProviderID: '', ProviderKey: '' };
325
349
  }
@@ -338,7 +362,7 @@ interface CanonicalCopyResult {
338
362
  * into Box" option). Reads the bytes via the sink driver's `GetObject({ fullPath })` and re-uploads them
339
363
  * into the canonical provider via `FileStorageEngine.UploadFile`. Returns the canonical `ProviderKey`.
340
364
  */
341
- export async function copyEgressOutputToCanonical(
365
+ export async function CopyEgressOutputToCanonical(
342
366
  outputLocation: string,
343
367
  sinkAccountID: string,
344
368
  canonicalProviderID: string,
@@ -369,6 +393,16 @@ export async function copyEgressOutputToCanonical(
369
393
  return { Success: true, ProviderKey: uploaded.StoragePath };
370
394
  }
371
395
 
396
+ /** @deprecated Use {@link CopyEgressOutputToCanonical}. */
397
+ export async function copyEgressOutputToCanonical(
398
+ outputLocation: string,
399
+ sinkAccountID: string,
400
+ canonicalProviderID: string,
401
+ contextUser: UserInfo,
402
+ ): Promise<CanonicalCopyResult> {
403
+ return CopyEgressOutputToCanonical(outputLocation, sinkAccountID, canonicalProviderID, contextUser);
404
+ }
405
+
372
406
  /** Creates the `MJ: Files` row pointing at the recording (no byte copy in the default v1 path). */
373
407
  async function createRecordingFileRow(
374
408
  egress: MeetingRecordingEgressResult,
@@ -15,7 +15,7 @@
15
15
  * @example deriveSidecarPath('realtime-recordings/sess-1/recording.wav') === 'realtime-recordings/sess-1/peaks.json'
16
16
  * @example deriveSidecarPath('recording.wav') === 'peaks.json'
17
17
  */
18
- export function deriveSidecarPath(providerKey: string | null | undefined): string | null {
18
+ export function DeriveSidecarPath(providerKey: string | null | undefined): string | null {
19
19
  if (!providerKey) {
20
20
  return null;
21
21
  }
@@ -23,6 +23,11 @@ export function deriveSidecarPath(providerKey: string | null | undefined): strin
23
23
  return lastSlash >= 0 ? `${providerKey.slice(0, lastSlash)}/peaks.json` : 'peaks.json';
24
24
  }
25
25
 
26
+ /** @deprecated Use {@link DeriveSidecarPath}. */
27
+ export function deriveSidecarPath(providerKey: string | null | undefined): string | null {
28
+ return DeriveSidecarPath(providerKey);
29
+ }
30
+
26
31
  /** Generous ceiling on the number of peaks returned — matches the capture-side cap. */
27
32
  export const MAX_PEAKS = 4096;
28
33
 
@@ -35,7 +40,7 @@ export const MAX_PEAKS = 4096;
35
40
  * @param bytes The raw sidecar bytes (e.g. from a storage `GetObject`).
36
41
  * @returns Sanitized `0..1` peaks, or `undefined`.
37
42
  */
38
- export function parsePeaksSidecar(bytes: Buffer): number[] | undefined {
43
+ export function ParsePeaksSidecar(bytes: Buffer): number[] | undefined {
39
44
  try {
40
45
  const parsed: unknown = JSON.parse(bytes.toString('utf8'));
41
46
  if (!Array.isArray(parsed) || parsed.length === 0) {
@@ -50,3 +55,8 @@ export function parsePeaksSidecar(bytes: Buffer): number[] | undefined {
50
55
  return undefined;
51
56
  }
52
57
  }
58
+
59
+ /** @deprecated Use {@link ParsePeaksSidecar}. */
60
+ export function parsePeaksSidecar(bytes: Buffer): number[] | undefined {
61
+ return ParsePeaksSidecar(bytes);
62
+ }
@@ -11,7 +11,7 @@ export class EntityCRUDHandler {
11
11
  /**
12
12
  * Create a new entity
13
13
  */
14
- static async createEntity(entityName: string, data: any, user: UserInfo): Promise<{ success: boolean, entity?: any, error?: string, details?: any, validationErrors?: any[] }> {
14
+ static async CreateEntity(entityName: string, data: any, user: UserInfo): Promise<{ success: boolean, entity?: any, error?: string, details?: any, validationErrors?: any[] }> {
15
15
  try {
16
16
  // Get entity object
17
17
  const md = new Metadata(); // global-provider-ok: REST endpoint — no per-request provider injection in REST middleware yet
@@ -77,11 +77,16 @@ export class EntityCRUDHandler {
77
77
  return { success: false, error: error?.message || 'Unknown error' };
78
78
  }
79
79
  }
80
+
81
+ /** @deprecated Use {@link CreateEntity}. */
82
+ static async createEntity(entityName: string, data: any, user: UserInfo): Promise<{ success: boolean, entity?: any, error?: string, details?: any, validationErrors?: any[] }> {
83
+ return this.CreateEntity(entityName, data, user);
84
+ }
80
85
 
81
86
  /**
82
87
  * Read an entity by ID
83
88
  */
84
- static async getEntity(entityName: string, id: string | number, relatedEntities: string[] = null, user: UserInfo): Promise<{ success: boolean, entity?: any, error?: string }> {
89
+ static async GetEntity(entityName: string, id: string | number, relatedEntities: string[] = null, user: UserInfo): Promise<{ success: boolean, entity?: any, error?: string }> {
85
90
  try {
86
91
  // Get entity object
87
92
  const md = new Metadata(); // global-provider-ok: REST endpoint — no per-request provider injection in REST middleware yet
@@ -116,11 +121,16 @@ export class EntityCRUDHandler {
116
121
  return { success: false, error: error?.message || 'Unknown error' };
117
122
  }
118
123
  }
124
+
125
+ /** @deprecated Use {@link GetEntity}. */
126
+ static async getEntity(entityName: string, id: string | number, relatedEntities: string[] = null, user: UserInfo): Promise<{ success: boolean, entity?: any, error?: string }> {
127
+ return this.GetEntity(entityName, id, relatedEntities, user);
128
+ }
119
129
 
120
130
  /**
121
131
  * Update an existing entity
122
132
  */
123
- static async updateEntity(entityName: string, id: string | number, data: any, user: UserInfo): Promise<{ success: boolean, entity?: any, error?: string, details?: any, validationErrors?: any[] }> {
133
+ static async UpdateEntity(entityName: string, id: string | number, data: any, user: UserInfo): Promise<{ success: boolean, entity?: any, error?: string, details?: any, validationErrors?: any[] }> {
124
134
  try {
125
135
  // Get entity object
126
136
  const md = new Metadata(); // global-provider-ok: REST endpoint — no per-request provider injection in REST middleware yet
@@ -203,11 +213,16 @@ export class EntityCRUDHandler {
203
213
  return { success: false, error: error?.message || 'Unknown error' };
204
214
  }
205
215
  }
216
+
217
+ /** @deprecated Use {@link UpdateEntity}. */
218
+ static async updateEntity(entityName: string, id: string | number, data: any, user: UserInfo): Promise<{ success: boolean, entity?: any, error?: string, details?: any, validationErrors?: any[] }> {
219
+ return this.UpdateEntity(entityName, id, data, user);
220
+ }
206
221
 
207
222
  /**
208
223
  * Delete an entity
209
224
  */
210
- static async deleteEntity(entityName: string, id: string | number, options: EntityDeleteOptions, user: UserInfo): Promise<{ success: boolean, error?: string, details?: any }> {
225
+ static async DeleteEntity(entityName: string, id: string | number, options: EntityDeleteOptions, user: UserInfo): Promise<{ success: boolean, error?: string, details?: any }> {
211
226
  try {
212
227
  // Get entity object
213
228
  const md = new Metadata(); // global-provider-ok: REST endpoint — no per-request provider injection in REST middleware yet
@@ -252,6 +267,11 @@ export class EntityCRUDHandler {
252
267
  return { success: false, error: error?.message || 'Unknown error' };
253
268
  }
254
269
  }
270
+
271
+ /** @deprecated Use {@link DeleteEntity}. */
272
+ static async deleteEntity(entityName: string, id: string | number, options: EntityDeleteOptions, user: UserInfo): Promise<{ success: boolean, error?: string, details?: any }> {
273
+ return this.DeleteEntity(entityName, id, options, user);
274
+ }
255
275
 
256
276
  /**
257
277
  * Build the record key from the `:id` path segment. A single-column key (any column name) is
@@ -23,10 +23,10 @@ import { LogError, Metadata, UserInfo } from '@memberjunction/core';
23
23
  import { MJFileEntity } from '@memberjunction/core-entities';
24
24
  import { FileStorageEngine } from '@memberjunction/storage';
25
25
  import type { FileStorageBase, ByteRange } from '@memberjunction/storage';
26
- import { getSystemUser } from '../auth/index.js';
26
+ import { GetSystemUser } from '../auth/index.js';
27
27
  import { MediaAccessKeyManager } from './MediaAccessKeys.js';
28
28
  import { UploadTokenManager } from './UploadTokenManager.js';
29
- import { parseRange, parseRangeHeaderLoose } from './mediaRange.js';
29
+ import { ParseRange, ParseRangeHeaderLoose } from './mediaRange.js';
30
30
 
31
31
  /** A located bytes source for a file: the driver + the provider key to read. */
32
32
  interface FileBytesSource {
@@ -41,7 +41,7 @@ interface FileBytesSource {
41
41
  * - `GET /media/:fileId` and `GET /media/:fileId/:filename` (Range streaming)
42
42
  * - `POST /media/upload-stage` (Raw binary upload staging)
43
43
  */
44
- export function createMediaStreamRouter(): Router {
44
+ export function CreateMediaStreamRouter(): Router {
45
45
  const router = express.Router();
46
46
 
47
47
  router.post(
@@ -61,6 +61,11 @@ export function createMediaStreamRouter(): Router {
61
61
  return router;
62
62
  }
63
63
 
64
+ /** @deprecated Use {@link CreateMediaStreamRouter}. */
65
+ export function createMediaStreamRouter(): Router {
66
+ return CreateMediaStreamRouter();
67
+ }
68
+
64
69
  /**
65
70
  * Authenticated raw binary upload staging handler (`POST /media/upload-stage`).
66
71
  *
@@ -203,7 +208,7 @@ function verifyMediaToken(token: string, fileId: string): { fileId: string; user
203
208
  * provider indistinguishable from a deleted file.
204
209
  */
205
210
  async function resolveFileBytesSource(fileId: string): Promise<FileBytesSource | null> {
206
- const systemUser: UserInfo = await getSystemUser();
211
+ const systemUser: UserInfo = await GetSystemUser();
207
212
 
208
213
  // The /media route runs pre-auth on the server's own provider; access was already authorized
209
214
  // at token-mint time, so this load only locates the bytes.
@@ -261,7 +266,7 @@ async function streamOrBuffer(req: Request, res: Response, source: FileBytesSour
261
266
 
262
267
  /** True-streaming path: `GetObjectStream` + pipe, with 206 when a Range was honored. */
263
268
  async function serveViaStream(res: Response, source: FileBytesSource, rangeHeader: string | undefined): Promise<void> {
264
- const range = rangeHeader ? parseRangeHeaderLoose(rangeHeader) : undefined;
269
+ const range = rangeHeader ? ParseRangeHeaderLoose(rangeHeader) : undefined;
265
270
  // Omit End for an open-ended range so the driver streams to EOF (per ByteRange semantics).
266
271
  const streamRange: ByteRange | undefined = range
267
272
  ? (range.end == null ? { Start: range.start } : { Start: range.start, End: range.end })
@@ -315,7 +320,7 @@ async function serveViaBuffer(res: Response, source: FileBytesSource, rangeHeade
315
320
  return;
316
321
  }
317
322
 
318
- const range = parseRange(rangeHeader, total);
323
+ const range = ParseRange(rangeHeader, total);
319
324
  if (!range) {
320
325
  // Unsatisfiable range — per RFC 7233, 416 + Content-Range with the total size.
321
326
  res.setHeader('Content-Range', `bytes */${total}`);