@memberjunction/server 6.1.4 → 6.2.0-edge.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/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/exampleNewUserSubClass.js +2 -1
  16. package/dist/auth/exampleNewUserSubClass.js.map +1 -1
  17. package/dist/auth/index.d.ts +20 -1
  18. package/dist/auth/index.d.ts.map +1 -1
  19. package/dist/auth/index.js +20 -10
  20. package/dist/auth/index.js.map +1 -1
  21. package/dist/auth/initializeProviders.d.ts +8 -0
  22. package/dist/auth/initializeProviders.d.ts.map +1 -1
  23. package/dist/auth/initializeProviders.js +21 -5
  24. package/dist/auth/initializeProviders.js.map +1 -1
  25. package/dist/auth/magicLink/MagicLinkRouter.d.ts +9 -0
  26. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  27. package/dist/auth/magicLink/MagicLinkRouter.js +22 -10
  28. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  29. package/dist/auth/magicLink/MagicLinkService.d.ts +17 -15
  30. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  31. package/dist/auth/magicLink/MagicLinkService.js +65 -51
  32. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  33. package/dist/auth/magicLink/index.d.ts +2 -2
  34. package/dist/auth/magicLink/index.d.ts.map +1 -1
  35. package/dist/auth/magicLink/index.js +2 -2
  36. package/dist/auth/magicLink/index.js.map +1 -1
  37. package/dist/auth/magicLink/magicLinkCore.d.ts +54 -33
  38. package/dist/auth/magicLink/magicLinkCore.d.ts.map +1 -1
  39. package/dist/auth/magicLink/magicLinkCore.js +61 -61
  40. package/dist/auth/magicLink/magicLinkCore.js.map +1 -1
  41. package/dist/auth/magicLink/redeemLanding.d.ts +4 -0
  42. package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
  43. package/dist/auth/magicLink/redeemLanding.js +12 -4
  44. package/dist/auth/magicLink/redeemLanding.js.map +1 -1
  45. package/dist/auth/magicLink/types.d.ts +4 -4
  46. package/dist/auth/principals.d.ts +2 -0
  47. package/dist/auth/principals.d.ts.map +1 -1
  48. package/dist/auth/principals.js +6 -2
  49. package/dist/auth/principals.js.map +1 -1
  50. package/dist/cache.d.ts +2 -0
  51. package/dist/cache.d.ts.map +1 -1
  52. package/dist/cache.js +3 -1
  53. package/dist/cache.js.map +1 -1
  54. package/dist/config.d.ts +293 -2
  55. package/dist/config.d.ts.map +1 -1
  56. package/dist/config.js +11 -4
  57. package/dist/config.js.map +1 -1
  58. package/dist/context.d.ts +20 -0
  59. package/dist/context.d.ts.map +1 -1
  60. package/dist/context.js +27 -19
  61. package/dist/context.js.map +1 -1
  62. package/dist/directives/Public.d.ts +2 -0
  63. package/dist/directives/Public.d.ts.map +1 -1
  64. package/dist/directives/Public.js +3 -1
  65. package/dist/directives/Public.js.map +1 -1
  66. package/dist/directives/RequireSystemUser.d.ts +2 -0
  67. package/dist/directives/RequireSystemUser.d.ts.map +1 -1
  68. package/dist/directives/RequireSystemUser.js +3 -1
  69. package/dist/directives/RequireSystemUser.js.map +1 -1
  70. package/dist/generated/graphql-schemas/__mj.d.ts +266 -4
  71. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  72. package/dist/generated/graphql-schemas/__mj.js +1304 -0
  73. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  74. package/dist/generic/CacheInvalidationResolver.d.ts +8 -2
  75. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  76. package/dist/generic/CacheInvalidationResolver.js +7 -3
  77. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  78. package/dist/generic/FireAndForgetHeartbeat.d.ts +3 -1
  79. package/dist/generic/FireAndForgetHeartbeat.d.ts.map +1 -1
  80. package/dist/generic/FireAndForgetHeartbeat.js +8 -4
  81. package/dist/generic/FireAndForgetHeartbeat.js.map +1 -1
  82. package/dist/generic/PushStatusResolver.d.ts +10 -1
  83. package/dist/generic/PushStatusResolver.d.ts.map +1 -1
  84. package/dist/generic/PushStatusResolver.js +11 -3
  85. package/dist/generic/PushStatusResolver.js.map +1 -1
  86. package/dist/generic/ResolverBase.d.ts +27 -1
  87. package/dist/generic/ResolverBase.d.ts.map +1 -1
  88. package/dist/generic/ResolverBase.js +64 -6
  89. package/dist/generic/ResolverBase.js.map +1 -1
  90. package/dist/index.d.ts +6 -0
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +29 -6
  93. package/dist/index.js.map +1 -1
  94. package/dist/integration/CustomColumnPromoter.d.ts +2 -0
  95. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  96. package/dist/integration/CustomColumnPromoter.js +5 -1
  97. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  98. package/dist/integration/EntityMapLifecycle.d.ts +4 -0
  99. package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
  100. package/dist/integration/EntityMapLifecycle.js +10 -2
  101. package/dist/integration/EntityMapLifecycle.js.map +1 -1
  102. package/dist/logging/NoLog.d.ts +4 -0
  103. package/dist/logging/NoLog.d.ts.map +1 -1
  104. package/dist/logging/NoLog.js +10 -2
  105. package/dist/logging/NoLog.js.map +1 -1
  106. package/dist/logging/StartupLogger.d.ts +2 -0
  107. package/dist/logging/StartupLogger.d.ts.map +1 -1
  108. package/dist/logging/StartupLogger.js +5 -1
  109. package/dist/logging/StartupLogger.js.map +1 -1
  110. package/dist/logging/bootAudit.d.ts +11 -7
  111. package/dist/logging/bootAudit.d.ts.map +1 -1
  112. package/dist/logging/bootAudit.js +15 -7
  113. package/dist/logging/bootAudit.js.map +1 -1
  114. package/dist/logging/boundaryLogPayload.d.ts +4 -0
  115. package/dist/logging/boundaryLogPayload.d.ts.map +1 -1
  116. package/dist/logging/boundaryLogPayload.js +5 -1
  117. package/dist/logging/boundaryLogPayload.js.map +1 -1
  118. package/dist/logging/secretRedactor.d.ts +2 -0
  119. package/dist/logging/secretRedactor.d.ts.map +1 -1
  120. package/dist/logging/secretRedactor.js +8 -4
  121. package/dist/logging/secretRedactor.js.map +1 -1
  122. package/dist/logging/shortenForLog.d.ts +2 -0
  123. package/dist/logging/shortenForLog.d.ts.map +1 -1
  124. package/dist/logging/shortenForLog.js +7 -3
  125. package/dist/logging/shortenForLog.js.map +1 -1
  126. package/dist/logging/variablesLoggingMiddleware.d.ts +2 -0
  127. package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
  128. package/dist/logging/variablesLoggingMiddleware.js +8 -6
  129. package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
  130. package/dist/metadataRefreshSignal.d.ts +19 -0
  131. package/dist/metadataRefreshSignal.d.ts.map +1 -0
  132. package/dist/metadataRefreshSignal.js +45 -0
  133. package/dist/metadataRefreshSignal.js.map +1 -0
  134. package/dist/middleware/MJTenantFilterMiddleware.js +4 -4
  135. package/dist/multiTenancy/index.d.ts +8 -0
  136. package/dist/multiTenancy/index.d.ts.map +1 -1
  137. package/dist/multiTenancy/index.js +21 -5
  138. package/dist/multiTenancy/index.js.map +1 -1
  139. package/dist/realtimeWidget/WidgetRouter.d.ts +5 -0
  140. package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
  141. package/dist/realtimeWidget/WidgetRouter.js +14 -10
  142. package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
  143. package/dist/realtimeWidget/WidgetSessionService.d.ts +6 -6
  144. package/dist/realtimeWidget/WidgetSessionService.js +27 -27
  145. package/dist/realtimeWidget/host-identity.d.ts +5 -1
  146. package/dist/realtimeWidget/host-identity.d.ts.map +1 -1
  147. package/dist/realtimeWidget/host-identity.js +11 -3
  148. package/dist/realtimeWidget/host-identity.js.map +1 -1
  149. package/dist/realtimeWidget/index.d.ts +2 -2
  150. package/dist/realtimeWidget/index.d.ts.map +1 -1
  151. package/dist/realtimeWidget/index.js +2 -2
  152. package/dist/realtimeWidget/index.js.map +1 -1
  153. package/dist/realtimeWidget/visitorIdentity.d.ts +21 -1
  154. package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
  155. package/dist/realtimeWidget/visitorIdentity.js +16 -4
  156. package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
  157. package/dist/realtimeWidget/widgetCore.d.ts +48 -0
  158. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  159. package/dist/realtimeWidget/widgetCore.js +38 -10
  160. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  161. package/dist/realtimeWidget/widgetGuestElevation.d.ts +10 -6
  162. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  163. package/dist/realtimeWidget/widgetGuestElevation.js +14 -6
  164. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  165. package/dist/resolvers/AdhocQueryResolver.js +3 -3
  166. package/dist/resolvers/FetchEntityVectorsResolver.js +2 -2
  167. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  168. package/dist/resolvers/FileResolver.js +3 -3
  169. package/dist/resolvers/GeoResolver.d.ts +2 -2
  170. package/dist/resolvers/GeoResolver.js +4 -4
  171. package/dist/resolvers/GetDataResolver.d.ts +14 -0
  172. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  173. package/dist/resolvers/GetDataResolver.js +43 -15
  174. package/dist/resolvers/GetDataResolver.js.map +1 -1
  175. package/dist/resolvers/IntegrationDiscoveryResolver.js +2 -2
  176. package/dist/resolvers/ListOperationsResolver.d.ts +20 -0
  177. package/dist/resolvers/ListOperationsResolver.d.ts.map +1 -1
  178. package/dist/resolvers/ListOperationsResolver.js +68 -28
  179. package/dist/resolvers/ListOperationsResolver.js.map +1 -1
  180. package/dist/resolvers/MCPResolver.d.ts +11 -1
  181. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  182. package/dist/resolvers/MCPResolver.js +7 -3
  183. package/dist/resolvers/MCPResolver.js.map +1 -1
  184. package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
  185. package/dist/resolvers/QuerySystemUserResolver.js +2 -1
  186. package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
  187. package/dist/resolvers/RealtimeBridgeResolver.js +3 -3
  188. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +37 -0
  189. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  190. package/dist/resolvers/RealtimeClientSessionResolver.js +101 -11
  191. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  192. package/dist/resolvers/RemoteBrowserActionResolver.js +5 -5
  193. package/dist/resolvers/RunAIAgentResolver.d.ts +10 -4
  194. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  195. package/dist/resolvers/RunAIAgentResolver.js +74 -42
  196. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  197. package/dist/resolvers/RunAIPromptResolver.d.ts +1 -1
  198. package/dist/resolvers/RunAIPromptResolver.js +2 -2
  199. package/dist/resolvers/RunTestResolver.js +5 -5
  200. package/dist/resolvers/SearchEntitiesResolver.d.ts.map +1 -1
  201. package/dist/resolvers/SearchEntitiesResolver.js +3 -1
  202. package/dist/resolvers/SearchEntitiesResolver.js.map +1 -1
  203. package/dist/resolvers/SearchKnowledgeResolver.d.ts +1 -0
  204. package/dist/resolvers/SearchKnowledgeResolver.d.ts.map +1 -1
  205. package/dist/resolvers/SearchKnowledgeResolver.js +5 -0
  206. package/dist/resolvers/SearchKnowledgeResolver.js.map +1 -1
  207. package/dist/resolvers/SearchKnowledgeSystemUserResolver.d.ts.map +1 -1
  208. package/dist/resolvers/SearchKnowledgeSystemUserResolver.js +1 -0
  209. package/dist/resolvers/SearchKnowledgeSystemUserResolver.js.map +1 -1
  210. package/dist/resolvers/SqlLoggingConfigResolver.d.ts +8 -4
  211. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  212. package/dist/resolvers/SqlLoggingConfigResolver.js +5 -5
  213. package/dist/resolvers/TaskGraphFrameResolver.d.ts +8 -1
  214. package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
  215. package/dist/resolvers/TaskGraphFrameResolver.js +6 -2
  216. package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
  217. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  218. package/dist/resolvers/TransactionGroupResolver.js +53 -4
  219. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  220. package/dist/resolvers/adhoc-query-helpers.d.ts +6 -0
  221. package/dist/resolvers/adhoc-query-helpers.d.ts.map +1 -1
  222. package/dist/resolvers/adhoc-query-helpers.js +10 -2
  223. package/dist/resolvers/adhoc-query-helpers.js.map +1 -1
  224. package/dist/resolvers/artifact-routing.d.ts +8 -8
  225. package/dist/resolvers/artifact-routing.js +2 -2
  226. package/dist/resolvers/artifact-routing.js.map +1 -1
  227. package/dist/resolvers/meetingRecordingRegistration.d.ts +10 -2
  228. package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
  229. package/dist/resolvers/meetingRecordingRegistration.js +24 -8
  230. package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
  231. package/dist/resolvers/peaksSidecar.d.ts +4 -0
  232. package/dist/resolvers/peaksSidecar.d.ts.map +1 -1
  233. package/dist/resolvers/peaksSidecar.js +10 -2
  234. package/dist/resolvers/peaksSidecar.js.map +1 -1
  235. package/dist/rest/EntityCRUDHandler.d.ts +28 -0
  236. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  237. package/dist/rest/EntityCRUDHandler.js +20 -4
  238. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  239. package/dist/rest/MediaStreamHandler.d.ts +2 -0
  240. package/dist/rest/MediaStreamHandler.d.ts.map +1 -1
  241. package/dist/rest/MediaStreamHandler.js +10 -6
  242. package/dist/rest/MediaStreamHandler.js.map +1 -1
  243. package/dist/rest/OAuthCallbackHandler.d.ts +9 -0
  244. package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
  245. package/dist/rest/OAuthCallbackHandler.js +15 -3
  246. package/dist/rest/OAuthCallbackHandler.js.map +1 -1
  247. package/dist/rest/RESTEndpointHandler.d.ts +6 -4
  248. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  249. package/dist/rest/RESTEndpointHandler.js +15 -11
  250. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  251. package/dist/rest/RealtimeSdpBrokerHandler.d.ts +5 -1
  252. package/dist/rest/RealtimeSdpBrokerHandler.d.ts.map +1 -1
  253. package/dist/rest/RealtimeSdpBrokerHandler.js +12 -4
  254. package/dist/rest/RealtimeSdpBrokerHandler.js.map +1 -1
  255. package/dist/rest/SignatureWebhookHandler.d.ts +2 -0
  256. package/dist/rest/SignatureWebhookHandler.d.ts.map +1 -1
  257. package/dist/rest/SignatureWebhookHandler.js +5 -1
  258. package/dist/rest/SignatureWebhookHandler.js.map +1 -1
  259. package/dist/rest/UploadTokenManager.d.ts +24 -8
  260. package/dist/rest/UploadTokenManager.d.ts.map +1 -1
  261. package/dist/rest/UploadTokenManager.js +53 -21
  262. package/dist/rest/UploadTokenManager.js.map +1 -1
  263. package/dist/rest/ViewOperationsHandler.d.ts +20 -0
  264. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  265. package/dist/rest/ViewOperationsHandler.js +20 -4
  266. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  267. package/dist/rest/mediaRange.d.ts +4 -0
  268. package/dist/rest/mediaRange.d.ts.map +1 -1
  269. package/dist/rest/mediaRange.js +10 -2
  270. package/dist/rest/mediaRange.js.map +1 -1
  271. package/dist/rest/setupRESTEndpoints.d.ts +4 -0
  272. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  273. package/dist/rest/setupRESTEndpoints.js +13 -7
  274. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  275. package/dist/serverExtensionReservedRoots.d.ts +2 -0
  276. package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
  277. package/dist/serverExtensionReservedRoots.js +5 -1
  278. package/dist/serverExtensionReservedRoots.js.map +1 -1
  279. package/dist/services/MJStorageBlobStore.d.ts +41 -0
  280. package/dist/services/MJStorageBlobStore.d.ts.map +1 -0
  281. package/dist/services/MJStorageBlobStore.js +160 -0
  282. package/dist/services/MJStorageBlobStore.js.map +1 -0
  283. package/dist/services/TaskGraphActionRunner.d.ts +13 -8
  284. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  285. package/dist/services/TaskGraphActionRunner.js +16 -15
  286. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  287. package/dist/types.d.ts +2 -0
  288. package/dist/types.d.ts.map +1 -1
  289. package/dist/types.js +7 -3
  290. package/dist/types.js.map +1 -1
  291. package/dist/util.d.ts +12 -3
  292. package/dist/util.d.ts.map +1 -1
  293. package/dist/util.js +19 -8
  294. package/dist/util.js.map +1 -1
  295. package/package.json +92 -92
  296. package/src/__tests__/FileResolverPeaks.test.ts +13 -13
  297. package/src/__tests__/ListOperationsResolver.test.ts +17 -17
  298. package/src/__tests__/MediaStreamHandler.test.ts +28 -28
  299. package/src/__tests__/NoLog.test.ts +11 -11
  300. package/src/__tests__/PrimaryKeyAlwaysMapped.test.ts +10 -10
  301. package/src/__tests__/RESTEndpointHandler.test.ts +14 -14
  302. package/src/__tests__/RealtimeBridgeResolver.test.ts +4 -2
  303. package/src/__tests__/RealtimeClientSessionResolver.test.ts +229 -0
  304. package/src/__tests__/RealtimeSdpBrokerHandler.test.ts +6 -6
  305. package/src/__tests__/RefreshAdoptsNewColumns.test.ts +8 -8
  306. package/src/__tests__/RemoteBrowserGoalEngine.test.ts +18 -18
  307. package/src/__tests__/ResolverBase.isaPromotionCreate.test.ts +412 -0
  308. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +228 -0
  309. package/src/__tests__/SearchEntitiesResolver.readOnlyFallback.test.ts +78 -0
  310. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +129 -0
  311. package/src/__tests__/TaskGraphFrameResolver.test.ts +2 -2
  312. package/src/__tests__/TransactionGroupResolver.refusals.test.ts +290 -0
  313. package/src/__tests__/WidgetSessionService.test.ts +8 -4
  314. package/src/__tests__/adhoc-query-helpers.test.ts +21 -21
  315. package/src/__tests__/bootAudit.test.ts +11 -11
  316. package/src/__tests__/boundaryLogPayload.test.ts +6 -6
  317. package/src/__tests__/databaseAbstraction.test.ts +12 -6
  318. package/src/__tests__/getDataTokenRedaction.test.ts +7 -7
  319. package/src/__tests__/initializeProviders.refresh.test.ts +4 -4
  320. package/src/__tests__/magicLink.test.ts +73 -134
  321. package/src/__tests__/magicLinkService.consume.test.ts +224 -0
  322. package/src/__tests__/meetingRecordingRegistration.test.ts +12 -12
  323. package/src/__tests__/metadataRefreshSignal.test.ts +78 -0
  324. package/src/__tests__/multiTenancy.security.test.ts +40 -40
  325. package/src/__tests__/multiTenancy.test.ts +18 -18
  326. package/src/__tests__/newUsers.test.ts +24 -23
  327. package/src/__tests__/principals.test.ts +22 -22
  328. package/src/__tests__/pushStatusResolver.filter.test.ts +8 -8
  329. package/src/__tests__/secretRedactor.failOpen.test.ts +12 -12
  330. package/src/__tests__/secretRedactor.test.ts +12 -12
  331. package/src/__tests__/serverExtensionReservedRoots.test.ts +7 -7
  332. package/src/__tests__/subscriptionRedaction.test.ts +5 -5
  333. package/src/__tests__/unifiedAuth.test.ts +15 -9
  334. package/src/__tests__/visitorIdentity.resolve.test.ts +6 -6
  335. package/src/__tests__/widget.test.ts +45 -45
  336. package/src/__tests__/widgetGuestElevation.test.ts +7 -7
  337. package/src/__tests__/widgetHostIdentity.test.ts +14 -14
  338. package/src/agentSessions/ReturningVisitorRecap.ts +12 -1
  339. package/src/agentSessions/SessionManager.ts +2 -2
  340. package/src/agentSessions/remoteBrowserGoalEngine.ts +30 -5
  341. package/src/auth/AuthProviderCatalogRouter.ts +6 -1
  342. package/src/auth/__tests__/backward-compatibility.test.ts +3 -3
  343. package/src/auth/exampleNewUserSubClass.ts +2 -2
  344. package/src/auth/index.ts +43 -28
  345. package/src/auth/initializeProviders.ts +25 -5
  346. package/src/auth/magicLink/MagicLinkRouter.ts +28 -10
  347. package/src/auth/magicLink/MagicLinkService.ts +71 -52
  348. package/src/auth/magicLink/index.ts +7 -7
  349. package/src/auth/magicLink/magicLinkCore.ts +96 -64
  350. package/src/auth/magicLink/redeemLanding.ts +14 -4
  351. package/src/auth/magicLink/types.ts +54 -54
  352. package/src/auth/newUsers.ts +1 -1
  353. package/src/auth/principals.ts +11 -2
  354. package/src/cache.ts +4 -1
  355. package/src/config.ts +14 -4
  356. package/src/context.ts +37 -24
  357. package/src/directives/Public.ts +4 -1
  358. package/src/directives/RequireSystemUser.ts +4 -1
  359. package/src/generated/graphql-schemas/__mj.ts +933 -5
  360. package/src/generic/CacheInvalidationResolver.ts +12 -4
  361. package/src/generic/FireAndForgetHeartbeat.ts +19 -14
  362. package/src/generic/PushStatusResolver.ts +21 -7
  363. package/src/generic/ResolverBase.ts +66 -5
  364. package/src/generic/RunViewResolver.ts +22 -22
  365. package/src/generic/__tests__/FireAndForgetHeartbeat.test.ts +7 -7
  366. package/src/index.ts +34 -7
  367. package/src/integration/CustomColumnPromoter.ts +6 -1
  368. package/src/integration/EntityMapLifecycle.ts +20 -2
  369. package/src/logging/NoLog.ts +16 -2
  370. package/src/logging/StartupLogger.ts +6 -1
  371. package/src/logging/bootAudit.ts +26 -16
  372. package/src/logging/boundaryLogPayload.ts +8 -1
  373. package/src/logging/secretRedactor.ts +14 -9
  374. package/src/logging/shortenForLog.ts +8 -3
  375. package/src/logging/variablesLoggingMiddleware.ts +9 -6
  376. package/src/metadataRefreshSignal.ts +45 -0
  377. package/src/middleware/MJTenantFilterMiddleware.ts +4 -4
  378. package/src/multiTenancy/index.ts +29 -5
  379. package/src/realtimeWidget/WidgetRouter.ts +15 -10
  380. package/src/realtimeWidget/WidgetSessionService.ts +76 -76
  381. package/src/realtimeWidget/host-identity.ts +24 -10
  382. package/src/realtimeWidget/index.ts +3 -3
  383. package/src/realtimeWidget/visitorIdentity.ts +39 -8
  384. package/src/realtimeWidget/widgetCore.ts +75 -10
  385. package/src/realtimeWidget/widgetGuestElevation.ts +25 -12
  386. package/src/resolvers/AdhocQueryResolver.ts +3 -3
  387. package/src/resolvers/AgentSessionResolver.ts +3 -3
  388. package/src/resolvers/ColorResolver.ts +6 -6
  389. package/src/resolvers/ComponentRegistryResolver.ts +36 -36
  390. package/src/resolvers/EntityCommunicationsResolver.ts +4 -4
  391. package/src/resolvers/ExecuteRemoteOperationResolver.ts +9 -9
  392. package/src/resolvers/FetchEntityVectorsResolver.ts +2 -2
  393. package/src/resolvers/FileResolver.ts +42 -42
  394. package/src/resolvers/GeoResolver.ts +4 -4
  395. package/src/resolvers/GetDataResolver.ts +50 -15
  396. package/src/resolvers/IntegrationDiscoveryResolver.ts +2 -2
  397. package/src/resolvers/ListOperationsResolver.ts +78 -28
  398. package/src/resolvers/MCPResolver.ts +30 -15
  399. package/src/resolvers/QueryResolver.ts +13 -13
  400. package/src/resolvers/QuerySystemUserResolver.ts +2 -1
  401. package/src/resolvers/RealtimeBridgeResolver.ts +3 -3
  402. package/src/resolvers/RealtimeClientSessionResolver.ts +126 -13
  403. package/src/resolvers/RemoteBrowserActionResolver.ts +5 -5
  404. package/src/resolvers/RunAIAgentResolver.ts +118 -76
  405. package/src/resolvers/RunAIPromptResolver.ts +22 -22
  406. package/src/resolvers/RunTemplateResolver.ts +4 -4
  407. package/src/resolvers/RunTestResolver.ts +25 -25
  408. package/src/resolvers/SearchEntitiesResolver.ts +3 -1
  409. package/src/resolvers/SearchKnowledgeResolver.ts +4 -0
  410. package/src/resolvers/SearchKnowledgeSystemUserResolver.ts +1 -0
  411. package/src/resolvers/SqlLoggingConfigResolver.ts +56 -56
  412. package/src/resolvers/TaskGraphFrameResolver.ts +37 -28
  413. package/src/resolvers/TelemetryResolver.ts +79 -79
  414. package/src/resolvers/TransactionGroupResolver.ts +57 -4
  415. package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +40 -38
  416. package/src/resolvers/__tests__/artifact-routing.test.ts +23 -23
  417. package/src/resolvers/adhoc-query-helpers.ts +19 -2
  418. package/src/resolvers/artifact-routing.ts +19 -19
  419. package/src/resolvers/meetingRecordingRegistration.ts +44 -10
  420. package/src/resolvers/peaksSidecar.ts +12 -2
  421. package/src/rest/EntityCRUDHandler.ts +24 -4
  422. package/src/rest/MediaStreamHandler.ts +11 -6
  423. package/src/rest/OAuthCallbackHandler.ts +25 -7
  424. package/src/rest/RESTEndpointHandler.ts +20 -15
  425. package/src/rest/RealtimeSdpBrokerHandler.ts +14 -4
  426. package/src/rest/SignatureWebhookHandler.ts +6 -1
  427. package/src/rest/UploadTokenManager.ts +66 -30
  428. package/src/rest/ViewOperationsHandler.ts +24 -4
  429. package/src/rest/mediaRange.ts +16 -6
  430. package/src/rest/setupRESTEndpoints.ts +24 -12
  431. package/src/serverExtensionReservedRoots.ts +6 -1
  432. package/src/services/MJStorageBlobStore.ts +209 -0
  433. package/src/services/TaskGraphActionRunner.ts +16 -15
  434. package/src/types.ts +21 -16
  435. package/src/util.ts +22 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/server",
3
- "version": "6.1.4",
3
+ "version": "6.2.0-edge.1",
4
4
  "description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./src/index.ts",
@@ -19,97 +19,97 @@
19
19
  "@as-integrations/express5": "^1.0.0",
20
20
  "@graphql-tools/schema": "^10.0.38",
21
21
  "@graphql-tools/utils": "^11.0.0",
22
- "@memberjunction/actions": "6.1.4",
23
- "@memberjunction/actions-apollo": "6.1.4",
24
- "@memberjunction/actions-base": "6.1.4",
25
- "@memberjunction/actions-bizapps-accounting": "6.1.4",
26
- "@memberjunction/actions-bizapps-crm": "6.1.4",
27
- "@memberjunction/actions-bizapps-formbuilders": "6.1.4",
28
- "@memberjunction/actions-bizapps-lms": "6.1.4",
29
- "@memberjunction/actions-bizapps-social": "6.1.4",
30
- "@memberjunction/ai": "6.1.4",
31
- "@memberjunction/ai-agent-manager": "6.1.4",
32
- "@memberjunction/ai-agent-manager-actions": "6.1.4",
33
- "@memberjunction/ai-agents": "6.1.4",
34
- "@memberjunction/ai-bridge-base": "6.1.4",
35
- "@memberjunction/ai-bridge-ringcentral": "6.1.4",
36
- "@memberjunction/ai-bridge-server": "6.1.4",
37
- "@memberjunction/ai-bridge-teams": "6.1.4",
38
- "@memberjunction/ai-bridge-twilio": "6.1.4",
39
- "@memberjunction/ai-bridge-vonage": "6.1.4",
40
- "@memberjunction/ai-core-plus": "6.1.4",
41
- "@memberjunction/ai-engine-base": "6.1.4",
42
- "@memberjunction/ai-mcp-client": "6.1.4",
43
- "@memberjunction/ai-prompts": "6.1.4",
44
- "@memberjunction/ai-provider-bundle": "6.1.4",
45
- "@memberjunction/ai-vector-sync": "6.1.4",
46
- "@memberjunction/ai-vectordb": "6.1.4",
47
- "@memberjunction/ai-vectors-pinecone": "6.1.4",
48
- "@memberjunction/aiengine": "6.1.4",
49
- "@memberjunction/api-keys": "6.1.4",
50
- "@memberjunction/auth-providers": "6.1.4",
51
- "@memberjunction/clustering-engine": "6.1.4",
52
- "@memberjunction/codegen-lib": "6.1.4",
53
- "@memberjunction/communication-engine": "6.1.4",
54
- "@memberjunction/communication-ms-graph": "6.1.4",
55
- "@memberjunction/communication-sendgrid": "6.1.4",
56
- "@memberjunction/communication-types": "6.1.4",
57
- "@memberjunction/component-registry-client-sdk": "6.1.4",
58
- "@memberjunction/computer-use": "6.1.4",
59
- "@memberjunction/computer-use-engine": "6.1.4",
60
- "@memberjunction/config": "6.1.4",
61
- "@memberjunction/core": "6.1.4",
62
- "@memberjunction/core-actions": "6.1.4",
63
- "@memberjunction/core-entities": "6.1.4",
64
- "@memberjunction/core-entities-server": "6.1.4",
65
- "@memberjunction/credentials": "6.1.4",
66
- "@memberjunction/data-context": "6.1.4",
67
- "@memberjunction/data-context-server": "6.1.4",
68
- "@memberjunction/doc-utils": "6.1.4",
69
- "@memberjunction/encryption": "6.1.4",
70
- "@memberjunction/entity-communications-base": "6.1.4",
71
- "@memberjunction/entity-communications-server": "6.1.4",
72
- "@memberjunction/esignature": "6.1.4",
73
- "@memberjunction/external-change-detection": "6.1.4",
74
- "@memberjunction/generic-database-provider": "6.1.4",
75
- "@memberjunction/global": "6.1.4",
76
- "@memberjunction/graphql-dataprovider": "6.1.4",
77
- "@memberjunction/integration-engine": "6.1.4",
78
- "@memberjunction/integration-engine-base": "6.1.4",
79
- "@memberjunction/integration-progress-artifacts": "6.1.4",
80
- "@memberjunction/integration-schema-builder": "6.1.4",
81
- "@memberjunction/interactive-component-types": "6.1.4",
82
- "@memberjunction/lists": "6.1.4",
83
- "@memberjunction/lists-base": "6.1.4",
84
- "@memberjunction/livekit-room-server": "6.1.4",
85
- "@memberjunction/network-utils": "6.1.4",
86
- "@memberjunction/notifications": "6.1.4",
87
- "@memberjunction/postgresql-dataprovider": "6.1.4",
88
- "@memberjunction/queue": "6.1.4",
89
- "@memberjunction/record-comparison": "6.1.4",
90
- "@memberjunction/redis-provider": "6.1.4",
91
- "@memberjunction/remote-browser-base": "6.1.4",
92
- "@memberjunction/remote-browser-cdp": "6.1.4",
93
- "@memberjunction/remote-browser-selfhost": "6.1.4",
94
- "@memberjunction/remote-browser-server": "6.1.4",
95
- "@memberjunction/scheduling-actions": "6.1.4",
96
- "@memberjunction/scheduling-base-types": "6.1.4",
97
- "@memberjunction/scheduling-engine": "6.1.4",
98
- "@memberjunction/scheduling-engine-base": "6.1.4",
99
- "@memberjunction/schema-engine": "6.1.4",
100
- "@memberjunction/search-engine": "6.1.4",
101
- "@memberjunction/server-extensions-core": "6.1.4",
102
- "@memberjunction/sql-dialect": "6.1.4",
103
- "@memberjunction/sql-parser": "6.1.4",
104
- "@memberjunction/sqlserver-dataprovider": "6.1.4",
105
- "@memberjunction/storage": "6.1.4",
106
- "@memberjunction/tag-engine": "6.1.4",
107
- "@memberjunction/tag-engine-base": "6.1.4",
108
- "@memberjunction/task-graph": "6.1.4",
109
- "@memberjunction/templates": "6.1.4",
110
- "@memberjunction/testing-engine": "6.1.4",
111
- "@memberjunction/testing-engine-base": "6.1.4",
112
- "@memberjunction/version-history": "6.1.4",
22
+ "@memberjunction/actions": "6.2.0-edge.1",
23
+ "@memberjunction/actions-apollo": "6.2.0-edge.1",
24
+ "@memberjunction/actions-base": "6.2.0-edge.1",
25
+ "@memberjunction/actions-bizapps-accounting": "6.2.0-edge.1",
26
+ "@memberjunction/actions-bizapps-crm": "6.2.0-edge.1",
27
+ "@memberjunction/actions-bizapps-formbuilders": "6.2.0-edge.1",
28
+ "@memberjunction/actions-bizapps-lms": "6.2.0-edge.1",
29
+ "@memberjunction/actions-bizapps-social": "6.2.0-edge.1",
30
+ "@memberjunction/ai": "6.2.0-edge.1",
31
+ "@memberjunction/ai-agent-manager": "6.2.0-edge.1",
32
+ "@memberjunction/ai-agent-manager-actions": "6.2.0-edge.1",
33
+ "@memberjunction/ai-agents": "6.2.0-edge.1",
34
+ "@memberjunction/ai-bridge-base": "6.2.0-edge.1",
35
+ "@memberjunction/ai-bridge-ringcentral": "6.2.0-edge.1",
36
+ "@memberjunction/ai-bridge-server": "6.2.0-edge.1",
37
+ "@memberjunction/ai-bridge-teams": "6.2.0-edge.1",
38
+ "@memberjunction/ai-bridge-twilio": "6.2.0-edge.1",
39
+ "@memberjunction/ai-bridge-vonage": "6.2.0-edge.1",
40
+ "@memberjunction/ai-core-plus": "6.2.0-edge.1",
41
+ "@memberjunction/ai-engine-base": "6.2.0-edge.1",
42
+ "@memberjunction/ai-mcp-client": "6.2.0-edge.1",
43
+ "@memberjunction/ai-prompts": "6.2.0-edge.1",
44
+ "@memberjunction/ai-provider-bundle": "6.2.0-edge.1",
45
+ "@memberjunction/ai-vector-sync": "6.2.0-edge.1",
46
+ "@memberjunction/ai-vectordb": "6.2.0-edge.1",
47
+ "@memberjunction/ai-vectors-pinecone": "6.2.0-edge.1",
48
+ "@memberjunction/aiengine": "6.2.0-edge.1",
49
+ "@memberjunction/api-keys": "6.2.0-edge.1",
50
+ "@memberjunction/auth-providers": "6.2.0-edge.1",
51
+ "@memberjunction/clustering-engine": "6.2.0-edge.1",
52
+ "@memberjunction/codegen-lib": "6.2.0-edge.1",
53
+ "@memberjunction/communication-engine": "6.2.0-edge.1",
54
+ "@memberjunction/communication-ms-graph": "6.2.0-edge.1",
55
+ "@memberjunction/communication-sendgrid": "6.2.0-edge.1",
56
+ "@memberjunction/communication-types": "6.2.0-edge.1",
57
+ "@memberjunction/component-registry-client-sdk": "6.2.0-edge.1",
58
+ "@memberjunction/computer-use": "6.2.0-edge.1",
59
+ "@memberjunction/computer-use-engine": "6.2.0-edge.1",
60
+ "@memberjunction/config": "6.2.0-edge.1",
61
+ "@memberjunction/core": "6.2.0-edge.1",
62
+ "@memberjunction/core-actions": "6.2.0-edge.1",
63
+ "@memberjunction/core-entities": "6.2.0-edge.1",
64
+ "@memberjunction/core-entities-server": "6.2.0-edge.1",
65
+ "@memberjunction/credentials": "6.2.0-edge.1",
66
+ "@memberjunction/data-context": "6.2.0-edge.1",
67
+ "@memberjunction/data-context-server": "6.2.0-edge.1",
68
+ "@memberjunction/doc-utils": "6.2.0-edge.1",
69
+ "@memberjunction/encryption": "6.2.0-edge.1",
70
+ "@memberjunction/entity-communications-base": "6.2.0-edge.1",
71
+ "@memberjunction/entity-communications-server": "6.2.0-edge.1",
72
+ "@memberjunction/esignature": "6.2.0-edge.1",
73
+ "@memberjunction/external-change-detection": "6.2.0-edge.1",
74
+ "@memberjunction/generic-database-provider": "6.2.0-edge.1",
75
+ "@memberjunction/global": "6.2.0-edge.1",
76
+ "@memberjunction/graphql-dataprovider": "6.2.0-edge.1",
77
+ "@memberjunction/integration-engine": "6.2.0-edge.1",
78
+ "@memberjunction/integration-engine-base": "6.2.0-edge.1",
79
+ "@memberjunction/integration-progress-artifacts": "6.2.0-edge.1",
80
+ "@memberjunction/integration-schema-builder": "6.2.0-edge.1",
81
+ "@memberjunction/interactive-component-types": "6.2.0-edge.1",
82
+ "@memberjunction/lists": "6.2.0-edge.1",
83
+ "@memberjunction/lists-base": "6.2.0-edge.1",
84
+ "@memberjunction/livekit-room-server": "6.2.0-edge.1",
85
+ "@memberjunction/network-utils": "6.2.0-edge.1",
86
+ "@memberjunction/notifications": "6.2.0-edge.1",
87
+ "@memberjunction/postgresql-dataprovider": "6.2.0-edge.1",
88
+ "@memberjunction/queue": "6.2.0-edge.1",
89
+ "@memberjunction/record-comparison": "6.2.0-edge.1",
90
+ "@memberjunction/redis-provider": "6.2.0-edge.1",
91
+ "@memberjunction/remote-browser-base": "6.2.0-edge.1",
92
+ "@memberjunction/remote-browser-cdp": "6.2.0-edge.1",
93
+ "@memberjunction/remote-browser-selfhost": "6.2.0-edge.1",
94
+ "@memberjunction/remote-browser-server": "6.2.0-edge.1",
95
+ "@memberjunction/scheduling-actions": "6.2.0-edge.1",
96
+ "@memberjunction/scheduling-base-types": "6.2.0-edge.1",
97
+ "@memberjunction/scheduling-engine": "6.2.0-edge.1",
98
+ "@memberjunction/scheduling-engine-base": "6.2.0-edge.1",
99
+ "@memberjunction/schema-engine": "6.2.0-edge.1",
100
+ "@memberjunction/search-engine": "6.2.0-edge.1",
101
+ "@memberjunction/server-extensions-core": "6.2.0-edge.1",
102
+ "@memberjunction/sql-dialect": "6.2.0-edge.1",
103
+ "@memberjunction/sql-parser": "6.2.0-edge.1",
104
+ "@memberjunction/sqlserver-dataprovider": "6.2.0-edge.1",
105
+ "@memberjunction/storage": "6.2.0-edge.1",
106
+ "@memberjunction/tag-engine": "6.2.0-edge.1",
107
+ "@memberjunction/tag-engine-base": "6.2.0-edge.1",
108
+ "@memberjunction/task-graph": "6.2.0-edge.1",
109
+ "@memberjunction/templates": "6.2.0-edge.1",
110
+ "@memberjunction/testing-engine": "6.2.0-edge.1",
111
+ "@memberjunction/testing-engine-base": "6.2.0-edge.1",
112
+ "@memberjunction/version-history": "6.2.0-edge.1",
113
113
  "@octokit/auth-app": "^7.1.5",
114
114
  "@octokit/rest": "^21.1.1",
115
115
  "@types/compression": "^1.8.1",
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import { deriveSidecarPath, parsePeaksSidecar, MAX_PEAKS } from '../resolvers/peaksSidecar.js';
2
+ import { DeriveSidecarPath, ParsePeaksSidecar, MAX_PEAKS } from '../resolvers/peaksSidecar.js';
3
3
 
4
4
  /**
5
5
  * Tests for the pure `peaks.json` sidecar helpers that back FileResolver.CreateMediaAccessToken's
@@ -14,51 +14,51 @@ import { deriveSidecarPath, parsePeaksSidecar, MAX_PEAKS } from '../resolvers/pe
14
14
 
15
15
  describe('deriveSidecarPath', () => {
16
16
  it('replaces the final path segment with peaks.json (recording in a session folder)', () => {
17
- expect(deriveSidecarPath('realtime-recordings/sess-1/recording.wav')).toBe('realtime-recordings/sess-1/peaks.json');
17
+ expect(DeriveSidecarPath('realtime-recordings/sess-1/recording.wav')).toBe('realtime-recordings/sess-1/peaks.json');
18
18
  });
19
19
 
20
20
  it('uses a bare peaks.json when the key has no folder', () => {
21
- expect(deriveSidecarPath('recording.wav')).toBe('peaks.json');
21
+ expect(DeriveSidecarPath('recording.wav')).toBe('peaks.json');
22
22
  });
23
23
 
24
24
  it('returns null when there is no ProviderKey (cannot derive a folder)', () => {
25
- expect(deriveSidecarPath(null)).toBeNull();
26
- expect(deriveSidecarPath(undefined)).toBeNull();
27
- expect(deriveSidecarPath('')).toBeNull();
25
+ expect(DeriveSidecarPath(null)).toBeNull();
26
+ expect(DeriveSidecarPath(undefined)).toBeNull();
27
+ expect(DeriveSidecarPath('')).toBeNull();
28
28
  });
29
29
  });
30
30
 
31
31
  describe('parsePeaksSidecar', () => {
32
32
  it('returns sanitized peaks from a valid JSON array (clamped to 0..1)', () => {
33
33
  const bytes = Buffer.from(JSON.stringify([0, 0.5, 1, 1.7, -0.3]), 'utf8');
34
- expect(parsePeaksSidecar(bytes)).toEqual([0, 0.5, 1, 1, 0]);
34
+ expect(ParsePeaksSidecar(bytes)).toEqual([0, 0.5, 1, 1, 0]);
35
35
  });
36
36
 
37
37
  it('returns undefined for non-JSON garbage (never throws)', () => {
38
- expect(parsePeaksSidecar(Buffer.from('this is not json', 'utf8'))).toBeUndefined();
38
+ expect(ParsePeaksSidecar(Buffer.from('this is not json', 'utf8'))).toBeUndefined();
39
39
  });
40
40
 
41
41
  it('returns undefined when the JSON is not an array', () => {
42
- expect(parsePeaksSidecar(Buffer.from(JSON.stringify({ not: 'an array' }), 'utf8'))).toBeUndefined();
42
+ expect(ParsePeaksSidecar(Buffer.from(JSON.stringify({ not: 'an array' }), 'utf8'))).toBeUndefined();
43
43
  });
44
44
 
45
45
  it('returns undefined for an empty array', () => {
46
- expect(parsePeaksSidecar(Buffer.from('[]', 'utf8'))).toBeUndefined();
46
+ expect(ParsePeaksSidecar(Buffer.from('[]', 'utf8'))).toBeUndefined();
47
47
  });
48
48
 
49
49
  it('drops non-finite / non-number entries, keeping the finite numbers', () => {
50
50
  const bytes = Buffer.from(JSON.stringify([0.2, 'x', null, NaN, 0.8]), 'utf8');
51
51
  // NaN serializes to null in JSON; both 'x' and the nulls are dropped, leaving the two numbers.
52
- expect(parsePeaksSidecar(bytes)).toEqual([0.2, 0.8]);
52
+ expect(ParsePeaksSidecar(bytes)).toEqual([0.2, 0.8]);
53
53
  });
54
54
 
55
55
  it('returns undefined when nothing finite survives sanitization', () => {
56
- expect(parsePeaksSidecar(Buffer.from(JSON.stringify(['a', 'b', null]), 'utf8'))).toBeUndefined();
56
+ expect(ParsePeaksSidecar(Buffer.from(JSON.stringify(['a', 'b', null]), 'utf8'))).toBeUndefined();
57
57
  });
58
58
 
59
59
  it('caps the array length at MAX_PEAKS', () => {
60
60
  const huge = new Array(MAX_PEAKS + 500).fill(0.5);
61
- const result = parsePeaksSidecar(Buffer.from(JSON.stringify(huge), 'utf8'));
61
+ const result = ParsePeaksSidecar(Buffer.from(JSON.stringify(huge), 'utf8'));
62
62
  expect(result).toHaveLength(MAX_PEAKS);
63
63
  });
64
64
  });
@@ -22,24 +22,24 @@ import type { ApplyResult, ListDelta } from '@memberjunction/lists-base';
22
22
  import {
23
23
  ApplyDeltaInput,
24
24
  ListSourceInput,
25
- fromCoreApplyResult,
26
- fromCoreDelta,
27
- fromCoreWarning,
28
- rebuildDeltaFromInput,
29
- toCoreSource,
25
+ FromCoreApplyResult,
26
+ FromCoreDelta,
27
+ FromCoreWarning,
28
+ RebuildDeltaFromInput,
29
+ ToCoreSource,
30
30
  } from '../resolvers/ListOperationsResolver.js';
31
31
 
32
32
  describe('ListOperationsResolver — boundary converters', () => {
33
33
  describe('toCoreSource', () => {
34
34
  it('maps a list-kind input to a core ListSource', () => {
35
35
  const input = Object.assign(new ListSourceInput(), { Kind: 'list', ListID: 'list-1' });
36
- const result = toCoreSource(input);
36
+ const result = ToCoreSource(input);
37
37
  expect(result).toEqual({ kind: 'list', listId: 'list-1' });
38
38
  });
39
39
 
40
40
  it('maps a view-kind input to a core ListSource', () => {
41
41
  const input = Object.assign(new ListSourceInput(), { Kind: 'view', ViewID: 'view-1' });
42
- expect(toCoreSource(input)).toEqual({ kind: 'view', viewId: 'view-1' });
42
+ expect(ToCoreSource(input)).toEqual({ kind: 'view', viewId: 'view-1' });
43
43
  });
44
44
 
45
45
  it('maps an adhoc-kind input to a core ListSource', () => {
@@ -48,7 +48,7 @@ describe('ListOperationsResolver — boundary converters', () => {
48
48
  EntityName: 'Contacts',
49
49
  ExtraFilter: "Status='Active'",
50
50
  });
51
- expect(toCoreSource(input)).toEqual({
51
+ expect(ToCoreSource(input)).toEqual({
52
52
  kind: 'adhoc',
53
53
  entityName: 'Contacts',
54
54
  extraFilter: "Status='Active'",
@@ -57,22 +57,22 @@ describe('ListOperationsResolver — boundary converters', () => {
57
57
 
58
58
  it('throws when list-kind input has no ListID', () => {
59
59
  const input = Object.assign(new ListSourceInput(), { Kind: 'list' });
60
- expect(() => toCoreSource(input)).toThrow(/ListID is required/);
60
+ expect(() => ToCoreSource(input)).toThrow(/ListID is required/);
61
61
  });
62
62
 
63
63
  it('throws when view-kind input has no ViewID', () => {
64
64
  const input = Object.assign(new ListSourceInput(), { Kind: 'view' });
65
- expect(() => toCoreSource(input)).toThrow(/ViewID is required/);
65
+ expect(() => ToCoreSource(input)).toThrow(/ViewID is required/);
66
66
  });
67
67
 
68
68
  it('throws when adhoc-kind input lacks EntityName or ExtraFilter', () => {
69
69
  const input = Object.assign(new ListSourceInput(), { Kind: 'adhoc', EntityName: 'X' });
70
- expect(() => toCoreSource(input)).toThrow(/EntityName and ExtraFilter/);
70
+ expect(() => ToCoreSource(input)).toThrow(/EntityName and ExtraFilter/);
71
71
  });
72
72
 
73
73
  it('throws on an unknown discriminator', () => {
74
74
  const input = Object.assign(new ListSourceInput(), { Kind: 'mystery' as never });
75
- expect(() => toCoreSource(input)).toThrow(/Unknown ListSourceInput\.Kind/);
75
+ expect(() => ToCoreSource(input)).toThrow(/Unknown ListSourceInput\.Kind/);
76
76
  });
77
77
  });
78
78
 
@@ -90,7 +90,7 @@ describe('ListOperationsResolver — boundary converters', () => {
90
90
  ],
91
91
  DeltaToken: 'abc.def',
92
92
  };
93
- const output = fromCoreDelta(delta);
93
+ const output = FromCoreDelta(delta);
94
94
  expect(output).toMatchObject({
95
95
  TargetListId: 'list-1',
96
96
  EntityName: 'Contacts',
@@ -111,7 +111,7 @@ describe('ListOperationsResolver — boundary converters', () => {
111
111
 
112
112
  describe('fromCoreWarning', () => {
113
113
  it('leaves DetailsJSON undefined when no details supplied', () => {
114
- const output = fromCoreWarning({ Code: 'EMPTY_SOURCE', Message: 'No records' });
114
+ const output = FromCoreWarning({ Code: 'EMPTY_SOURCE', Message: 'No records' });
115
115
  expect(output.DetailsJSON).toBeUndefined();
116
116
  });
117
117
  });
@@ -126,7 +126,7 @@ describe('ListOperationsResolver — boundary converters', () => {
126
126
  CreatedListId: 'list-1',
127
127
  Counts: { Added: 5, Removed: 2, Failed: 0 },
128
128
  };
129
- const output = fromCoreApplyResult(result);
129
+ const output = FromCoreApplyResult(result);
130
130
  expect(output).toMatchObject({
131
131
  Success: true,
132
132
  ResultCode: 'SUCCESS',
@@ -145,7 +145,7 @@ describe('ListOperationsResolver — boundary converters', () => {
145
145
  Message: 'partial',
146
146
  Errors: ['failed record a'],
147
147
  };
148
- expect(fromCoreApplyResult(result).Errors).toEqual(['failed record a']);
148
+ expect(FromCoreApplyResult(result).Errors).toEqual(['failed record a']);
149
149
  });
150
150
  });
151
151
 
@@ -165,7 +165,7 @@ describe('ListOperationsResolver — boundary converters', () => {
165
165
  DeltaToken: 'tok',
166
166
  ConfirmDrops: true,
167
167
  });
168
- const out = rebuildDeltaFromInput(input);
168
+ const out = RebuildDeltaFromInput(input);
169
169
  expect(out).toMatchObject({
170
170
  TargetListId: 'list-1',
171
171
  EntityName: 'Contacts',
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import { parseRangeHeaderLoose, parseRange } from '../rest/mediaRange.js';
2
+ import { ParseRangeHeaderLoose, ParseRange } from '../rest/mediaRange.js';
3
3
 
4
4
  /**
5
5
  * Tests for the pure HTTP-Range parsing helpers behind the authenticated `/media/:fileId`
@@ -16,34 +16,34 @@ import { parseRangeHeaderLoose, parseRange } from '../rest/mediaRange.js';
16
16
 
17
17
  describe('parseRangeHeaderLoose (streaming path — no known total)', () => {
18
18
  it('parses a closed range bytes=start-end into inclusive offsets', () => {
19
- expect(parseRangeHeaderLoose('bytes=0-499')).toEqual({ start: 0, end: 499 });
20
- expect(parseRangeHeaderLoose('bytes=200-1023')).toEqual({ start: 200, end: 1023 });
19
+ expect(ParseRangeHeaderLoose('bytes=0-499')).toEqual({ start: 0, end: 499 });
20
+ expect(ParseRangeHeaderLoose('bytes=200-1023')).toEqual({ start: 200, end: 1023 });
21
21
  });
22
22
 
23
23
  it('leaves end undefined for an open-ended range bytes=start- (stream to EOF)', () => {
24
- expect(parseRangeHeaderLoose('bytes=500-')).toEqual({ start: 500 });
25
- expect(parseRangeHeaderLoose('bytes=0-')).toEqual({ start: 0 });
24
+ expect(ParseRangeHeaderLoose('bytes=500-')).toEqual({ start: 500 });
25
+ expect(ParseRangeHeaderLoose('bytes=0-')).toEqual({ start: 0 });
26
26
  });
27
27
 
28
28
  it('tolerates surrounding whitespace', () => {
29
- expect(parseRangeHeaderLoose(' bytes=10-20 ')).toEqual({ start: 10, end: 20 });
29
+ expect(ParseRangeHeaderLoose(' bytes=10-20 ')).toEqual({ start: 10, end: 20 });
30
30
  });
31
31
 
32
32
  it('returns undefined when end < start (nonsensical range)', () => {
33
- expect(parseRangeHeaderLoose('bytes=500-100')).toBeUndefined();
33
+ expect(ParseRangeHeaderLoose('bytes=500-100')).toBeUndefined();
34
34
  });
35
35
 
36
36
  it('returns undefined for malformed / multi-range / suffix-only headers', () => {
37
- expect(parseRangeHeaderLoose('bytes=abc-def')).toBeUndefined();
38
- expect(parseRangeHeaderLoose('bytes=-500')).toBeUndefined(); // suffix range — left to a full read
39
- expect(parseRangeHeaderLoose('bytes=0-100,200-300')).toBeUndefined(); // multi-range
40
- expect(parseRangeHeaderLoose('items=0-100')).toBeUndefined(); // wrong unit
41
- expect(parseRangeHeaderLoose('bytes=')).toBeUndefined();
42
- expect(parseRangeHeaderLoose('')).toBeUndefined();
37
+ expect(ParseRangeHeaderLoose('bytes=abc-def')).toBeUndefined();
38
+ expect(ParseRangeHeaderLoose('bytes=-500')).toBeUndefined(); // suffix range — left to a full read
39
+ expect(ParseRangeHeaderLoose('bytes=0-100,200-300')).toBeUndefined(); // multi-range
40
+ expect(ParseRangeHeaderLoose('items=0-100')).toBeUndefined(); // wrong unit
41
+ expect(ParseRangeHeaderLoose('bytes=')).toBeUndefined();
42
+ expect(ParseRangeHeaderLoose('')).toBeUndefined();
43
43
  });
44
44
 
45
45
  it('accepts a zero-length point range bytes=N-N', () => {
46
- expect(parseRangeHeaderLoose('bytes=42-42')).toEqual({ start: 42, end: 42 });
46
+ expect(ParseRangeHeaderLoose('bytes=42-42')).toEqual({ start: 42, end: 42 });
47
47
  });
48
48
  });
49
49
 
@@ -51,41 +51,41 @@ describe('parseRange (buffer path — known total)', () => {
51
51
  const TOTAL = 1000;
52
52
 
53
53
  it('parses a closed range within bounds', () => {
54
- expect(parseRange('bytes=0-499', TOTAL)).toEqual({ start: 0, end: 499 });
54
+ expect(ParseRange('bytes=0-499', TOTAL)).toEqual({ start: 0, end: 499 });
55
55
  });
56
56
 
57
57
  it('clamps end to the last byte when the requested end exceeds total', () => {
58
58
  // bytes=500-99999 against a 1000-byte file → end clamps to 999.
59
- expect(parseRange('bytes=500-99999', TOTAL)).toEqual({ start: 500, end: 999 });
59
+ expect(ParseRange('bytes=500-99999', TOTAL)).toEqual({ start: 500, end: 999 });
60
60
  });
61
61
 
62
62
  it('resolves an open-ended range to the last byte', () => {
63
- expect(parseRange('bytes=200-', TOTAL)).toEqual({ start: 200, end: 999 });
63
+ expect(ParseRange('bytes=200-', TOTAL)).toEqual({ start: 200, end: 999 });
64
64
  });
65
65
 
66
66
  it('returns undefined when start is at or past EOF (unsatisfiable → 416)', () => {
67
- expect(parseRange('bytes=1000-1100', TOTAL)).toBeUndefined(); // start === total
68
- expect(parseRange('bytes=2000-', TOTAL)).toBeUndefined(); // start > total
67
+ expect(ParseRange('bytes=1000-1100', TOTAL)).toBeUndefined(); // start === total
68
+ expect(ParseRange('bytes=2000-', TOTAL)).toBeUndefined(); // start > total
69
69
  });
70
70
 
71
71
  it('returns undefined when end < start after parsing', () => {
72
- expect(parseRange('bytes=600-100', TOTAL)).toBeUndefined();
72
+ expect(ParseRange('bytes=600-100', TOTAL)).toBeUndefined();
73
73
  });
74
74
 
75
75
  it('returns undefined for malformed / multi-range / suffix-only headers', () => {
76
- expect(parseRange('bytes=abc-', TOTAL)).toBeUndefined();
77
- expect(parseRange('bytes=-200', TOTAL)).toBeUndefined();
78
- expect(parseRange('bytes=0-100,200-300', TOTAL)).toBeUndefined();
79
- expect(parseRange('items=0-100', TOTAL)).toBeUndefined();
80
- expect(parseRange('', TOTAL)).toBeUndefined();
76
+ expect(ParseRange('bytes=abc-', TOTAL)).toBeUndefined();
77
+ expect(ParseRange('bytes=-200', TOTAL)).toBeUndefined();
78
+ expect(ParseRange('bytes=0-100,200-300', TOTAL)).toBeUndefined();
79
+ expect(ParseRange('items=0-100', TOTAL)).toBeUndefined();
80
+ expect(ParseRange('', TOTAL)).toBeUndefined();
81
81
  });
82
82
 
83
83
  it('handles the very first byte and the very last byte exactly', () => {
84
- expect(parseRange('bytes=0-0', TOTAL)).toEqual({ start: 0, end: 0 });
85
- expect(parseRange('bytes=999-999', TOTAL)).toEqual({ start: 999, end: 999 });
84
+ expect(ParseRange('bytes=0-0', TOTAL)).toEqual({ start: 0, end: 0 });
85
+ expect(ParseRange('bytes=999-999', TOTAL)).toEqual({ start: 999, end: 999 });
86
86
  });
87
87
 
88
88
  it('tolerates surrounding whitespace', () => {
89
- expect(parseRange(' bytes=10-20 ', TOTAL)).toEqual({ start: 10, end: 20 });
89
+ expect(ParseRange(' bytes=10-20 ', TOTAL)).toEqual({ start: 10, end: 20 });
90
90
  });
91
91
  });
@@ -1,6 +1,6 @@
1
1
  import 'reflect-metadata';
2
2
  import { describe, it, expect } from 'vitest';
3
- import { NoLog, hasNoLogParameter, getNoLogFields } from '../logging/NoLog.js';
3
+ import { NoLog, HasNoLogParameter, GetNoLogFields } from '../logging/NoLog.js';
4
4
 
5
5
  describe('NoLog decorator', () => {
6
6
  it('marks a resolver method parameter (3-arg call) and is readable via hasNoLogParameter', () => {
@@ -11,9 +11,9 @@ describe('NoLog decorator', () => {
11
11
  }
12
12
  NoLog(MyResolver.prototype, 'doThing', 1);
13
13
 
14
- expect(hasNoLogParameter(MyResolver, 'doThing', 1)).toBe(true);
15
- expect(hasNoLogParameter(MyResolver, 'doThing', 0)).toBe(false);
16
- expect(hasNoLogParameter(MyResolver, 'unknownMethod', 0)).toBe(false);
14
+ expect(HasNoLogParameter(MyResolver, 'doThing', 1)).toBe(true);
15
+ expect(HasNoLogParameter(MyResolver, 'doThing', 0)).toBe(false);
16
+ expect(HasNoLogParameter(MyResolver, 'unknownMethod', 0)).toBe(false);
17
17
  });
18
18
 
19
19
  it('marks a field on an input class (2-arg call) and is readable via getNoLogFields', () => {
@@ -24,7 +24,7 @@ describe('NoLog decorator', () => {
24
24
  }
25
25
  NoLog(MyInput.prototype, 'Token');
26
26
 
27
- const fields = getNoLogFields(MyInput);
27
+ const fields = GetNoLogFields(MyInput);
28
28
  expect(fields.has('Token')).toBe(true);
29
29
  expect(fields.has('Queries')).toBe(false);
30
30
  expect(fields.size).toBe(1);
@@ -41,8 +41,8 @@ describe('NoLog decorator', () => {
41
41
  B: string = '';
42
42
  }
43
43
 
44
- expect(hasNoLogParameter(UndecoratedResolver, 'doNothing', 0)).toBe(false);
45
- expect(getNoLogFields(UndecoratedInput).size).toBe(0);
44
+ expect(HasNoLogParameter(UndecoratedResolver, 'doNothing', 0)).toBe(false);
45
+ expect(GetNoLogFields(UndecoratedInput).size).toBe(0);
46
46
  });
47
47
 
48
48
  it('supports multiple parameter marks on the same method', () => {
@@ -54,9 +54,9 @@ describe('NoLog decorator', () => {
54
54
  NoLog(TwoSecrets.prototype, 'handle', 0);
55
55
  NoLog(TwoSecrets.prototype, 'handle', 2);
56
56
 
57
- expect(hasNoLogParameter(TwoSecrets, 'handle', 0)).toBe(true);
58
- expect(hasNoLogParameter(TwoSecrets, 'handle', 1)).toBe(false);
59
- expect(hasNoLogParameter(TwoSecrets, 'handle', 2)).toBe(true);
57
+ expect(HasNoLogParameter(TwoSecrets, 'handle', 0)).toBe(true);
58
+ expect(HasNoLogParameter(TwoSecrets, 'handle', 1)).toBe(false);
59
+ expect(HasNoLogParameter(TwoSecrets, 'handle', 2)).toBe(true);
60
60
  });
61
61
 
62
62
  it('supports multiple field marks on the same input class', () => {
@@ -68,7 +68,7 @@ describe('NoLog decorator', () => {
68
68
  NoLog(TwoFieldSecrets.prototype, 'A');
69
69
  NoLog(TwoFieldSecrets.prototype, 'C');
70
70
 
71
- const fields = getNoLogFields(TwoFieldSecrets);
71
+ const fields = GetNoLogFields(TwoFieldSecrets);
72
72
  expect(fields.has('A')).toBe(true);
73
73
  expect(fields.has('B')).toBe(false);
74
74
  expect(fields.has('C')).toBe(true);
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import { selectFieldsToMap } from '../integration/EntityMapLifecycle.js';
2
+ import { SelectFieldsToMap } from '../integration/EntityMapLifecycle.js';
3
3
 
4
4
  /**
5
5
  * Deselecting the primary key must not cost the object its identity.
@@ -18,41 +18,41 @@ const names = (out: Array<{ Name: string }>) => out.map(x => x.Name);
18
18
 
19
19
  describe('selectFieldsToMap — the primary key is never optional', () => {
20
20
  it('includes the key even when the user did not select it', () => {
21
- expect(names(selectFieldsToMap(ALL, ['name', 'email']))).toEqual(['id', 'name', 'email']);
21
+ expect(names(SelectFieldsToMap(ALL, ['name', 'email']))).toEqual(['id', 'name', 'email']);
22
22
  });
23
23
 
24
24
  it('includes the key when the selection is EMPTY — an empty choice is still a choice', () => {
25
25
  // Distinct from "no selection". An empty array is unusual but real, and it still cannot
26
26
  // produce a keyless map.
27
- expect(names(selectFieldsToMap(ALL, []))).toEqual(['id']);
27
+ expect(names(SelectFieldsToMap(ALL, []))).toEqual(['id']);
28
28
  });
29
29
 
30
30
  it('does not duplicate the key when it IS selected', () => {
31
- expect(names(selectFieldsToMap(ALL, ['id', 'name']))).toEqual(['id', 'name']);
31
+ expect(names(SelectFieldsToMap(ALL, ['id', 'name']))).toEqual(['id', 'name']);
32
32
  });
33
33
 
34
34
  it('null or undefined selection means every field', () => {
35
- expect(names(selectFieldsToMap(ALL, null))).toEqual(['id', 'name', 'email', 'notes']);
36
- expect(names(selectFieldsToMap(ALL, undefined))).toEqual(['id', 'name', 'email', 'notes']);
35
+ expect(names(SelectFieldsToMap(ALL, null))).toEqual(['id', 'name', 'email', 'notes']);
36
+ expect(names(SelectFieldsToMap(ALL, undefined))).toEqual(['id', 'name', 'email', 'notes']);
37
37
  });
38
38
 
39
39
  it('keeps every part of a COMPOSITE key, selected or not', () => {
40
40
  const composite = [f('tenant_id', true), f('row_id', true), f('label')];
41
- expect(names(selectFieldsToMap(composite, ['label']))).toEqual(['tenant_id', 'row_id', 'label']);
41
+ expect(names(SelectFieldsToMap(composite, ['label']))).toEqual(['tenant_id', 'row_id', 'label']);
42
42
  });
43
43
 
44
44
  it('matches selection names case-insensitively', () => {
45
- expect(names(selectFieldsToMap(ALL, ['NAME', 'Email']))).toEqual(['id', 'name', 'email']);
45
+ expect(names(SelectFieldsToMap(ALL, ['NAME', 'Email']))).toEqual(['id', 'name', 'email']);
46
46
  });
47
47
 
48
48
  it('preserves the discovered field order', () => {
49
49
  // Field-map creation walks this list; reordering would reshuffle Priority-adjacent behaviour
50
50
  // for no reason.
51
- expect(names(selectFieldsToMap(ALL, ['notes', 'name']))).toEqual(['id', 'name', 'notes']);
51
+ expect(names(SelectFieldsToMap(ALL, ['notes', 'name']))).toEqual(['id', 'name', 'notes']);
52
52
  });
53
53
 
54
54
  it('an object with no key at all is unaffected', () => {
55
55
  const keyless = [f('a'), f('b')];
56
- expect(names(selectFieldsToMap(keyless, ['a']))).toEqual(['a']);
56
+ expect(names(SelectFieldsToMap(keyless, ['a']))).toEqual(['a']);
57
57
  });
58
58
  });