@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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentSessions/ReturningVisitorRecap.d.ts +2 -0
- package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
- package/dist/agentSessions/ReturningVisitorRecap.js +5 -1
- package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
- package/dist/agentSessions/SessionManager.js +2 -2
- package/dist/agentSessions/remoteBrowserGoalEngine.d.ts +8 -0
- package/dist/agentSessions/remoteBrowserGoalEngine.d.ts.map +1 -1
- package/dist/agentSessions/remoteBrowserGoalEngine.js +21 -5
- package/dist/agentSessions/remoteBrowserGoalEngine.js.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.d.ts +2 -0
- package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.js +5 -1
- package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
- package/dist/auth/index.d.ts +20 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +20 -10
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.d.ts +8 -0
- package/dist/auth/initializeProviders.d.ts.map +1 -1
- package/dist/auth/initializeProviders.js +21 -5
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.d.ts +9 -0
- package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.js +22 -10
- package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.d.ts +17 -15
- package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.js +65 -51
- package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
- package/dist/auth/magicLink/index.d.ts +2 -2
- package/dist/auth/magicLink/index.d.ts.map +1 -1
- package/dist/auth/magicLink/index.js +2 -2
- package/dist/auth/magicLink/index.js.map +1 -1
- package/dist/auth/magicLink/magicLinkCore.d.ts +54 -33
- package/dist/auth/magicLink/magicLinkCore.d.ts.map +1 -1
- package/dist/auth/magicLink/magicLinkCore.js +61 -61
- package/dist/auth/magicLink/magicLinkCore.js.map +1 -1
- package/dist/auth/magicLink/redeemLanding.d.ts +4 -0
- package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
- package/dist/auth/magicLink/redeemLanding.js +12 -4
- package/dist/auth/magicLink/redeemLanding.js.map +1 -1
- package/dist/auth/magicLink/types.d.ts +4 -4
- package/dist/auth/principals.d.ts +2 -0
- package/dist/auth/principals.d.ts.map +1 -1
- package/dist/auth/principals.js +6 -2
- package/dist/auth/principals.js.map +1 -1
- package/dist/cache.d.ts +2 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +3 -1
- package/dist/cache.js.map +1 -1
- package/dist/config.d.ts +346 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +34 -4
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +20 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +27 -19
- package/dist/context.js.map +1 -1
- package/dist/directives/Public.d.ts +2 -0
- package/dist/directives/Public.d.ts.map +1 -1
- package/dist/directives/Public.js +3 -1
- package/dist/directives/Public.js.map +1 -1
- package/dist/directives/RequireSystemUser.d.ts +2 -0
- package/dist/directives/RequireSystemUser.d.ts.map +1 -1
- package/dist/directives/RequireSystemUser.js +3 -1
- package/dist/directives/RequireSystemUser.js.map +1 -1
- package/dist/generated/graphql-schemas/__mj.d.ts +1021 -0
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +7368 -2145
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/CacheInvalidationResolver.d.ts +94 -4
- package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
- package/dist/generic/CacheInvalidationResolver.js +122 -3
- package/dist/generic/CacheInvalidationResolver.js.map +1 -1
- package/dist/generic/DeleteOptionsInput.d.ts +8 -1
- package/dist/generic/DeleteOptionsInput.d.ts.map +1 -1
- package/dist/generic/DeleteOptionsInput.js +1 -1
- package/dist/generic/DeleteOptionsInput.js.map +1 -1
- package/dist/generic/FireAndForgetHeartbeat.d.ts +18 -2
- package/dist/generic/FireAndForgetHeartbeat.d.ts.map +1 -1
- package/dist/generic/FireAndForgetHeartbeat.js +24 -6
- package/dist/generic/FireAndForgetHeartbeat.js.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts +31 -0
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -0
- package/dist/generic/OrphanedConversationDetailReconciler.js +215 -0
- package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -0
- package/dist/generic/PushStatusResolver.d.ts +48 -1
- package/dist/generic/PushStatusResolver.d.ts.map +1 -1
- package/dist/generic/PushStatusResolver.js +95 -4
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +18 -2
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +64 -55
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +120 -11
- package/dist/index.js.map +1 -1
- package/dist/integration/CustomColumnPromoter.d.ts +2 -0
- package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
- package/dist/integration/CustomColumnPromoter.js +5 -1
- package/dist/integration/CustomColumnPromoter.js.map +1 -1
- package/dist/integration/EntityMapLifecycle.d.ts +4 -0
- package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
- package/dist/integration/EntityMapLifecycle.js +10 -2
- package/dist/integration/EntityMapLifecycle.js.map +1 -1
- package/dist/logging/NoLog.d.ts +4 -0
- package/dist/logging/NoLog.d.ts.map +1 -1
- package/dist/logging/NoLog.js +10 -2
- package/dist/logging/NoLog.js.map +1 -1
- package/dist/logging/StartupLogger.d.ts +2 -0
- package/dist/logging/StartupLogger.d.ts.map +1 -1
- package/dist/logging/StartupLogger.js +5 -1
- package/dist/logging/StartupLogger.js.map +1 -1
- package/dist/logging/bootAudit.d.ts +11 -7
- package/dist/logging/bootAudit.d.ts.map +1 -1
- package/dist/logging/bootAudit.js +15 -7
- package/dist/logging/bootAudit.js.map +1 -1
- package/dist/logging/boundaryLogPayload.d.ts +4 -0
- package/dist/logging/boundaryLogPayload.d.ts.map +1 -1
- package/dist/logging/boundaryLogPayload.js +5 -1
- package/dist/logging/boundaryLogPayload.js.map +1 -1
- package/dist/logging/secretRedactor.d.ts +2 -0
- package/dist/logging/secretRedactor.d.ts.map +1 -1
- package/dist/logging/secretRedactor.js +8 -4
- package/dist/logging/secretRedactor.js.map +1 -1
- package/dist/logging/shortenForLog.d.ts +2 -0
- package/dist/logging/shortenForLog.d.ts.map +1 -1
- package/dist/logging/shortenForLog.js +7 -3
- package/dist/logging/shortenForLog.js.map +1 -1
- package/dist/logging/variablesLoggingMiddleware.d.ts +2 -0
- package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
- package/dist/logging/variablesLoggingMiddleware.js +8 -6
- package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
- package/dist/metadataRefreshSignal.d.ts +19 -0
- package/dist/metadataRefreshSignal.d.ts.map +1 -0
- package/dist/metadataRefreshSignal.js +45 -0
- package/dist/metadataRefreshSignal.js.map +1 -0
- package/dist/middleware/MJTenantFilterMiddleware.js +4 -4
- package/dist/multiTenancy/index.d.ts +8 -0
- package/dist/multiTenancy/index.d.ts.map +1 -1
- package/dist/multiTenancy/index.js +21 -5
- package/dist/multiTenancy/index.js.map +1 -1
- package/dist/realtimeWidget/WidgetRouter.d.ts +5 -0
- package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
- package/dist/realtimeWidget/WidgetRouter.js +14 -10
- package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.d.ts +6 -6
- package/dist/realtimeWidget/WidgetSessionService.js +27 -27
- package/dist/realtimeWidget/host-identity.d.ts +5 -1
- package/dist/realtimeWidget/host-identity.d.ts.map +1 -1
- package/dist/realtimeWidget/host-identity.js +11 -3
- package/dist/realtimeWidget/host-identity.js.map +1 -1
- package/dist/realtimeWidget/index.d.ts +2 -2
- package/dist/realtimeWidget/index.d.ts.map +1 -1
- package/dist/realtimeWidget/index.js +2 -2
- package/dist/realtimeWidget/index.js.map +1 -1
- package/dist/realtimeWidget/visitorIdentity.d.ts +21 -1
- package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
- package/dist/realtimeWidget/visitorIdentity.js +16 -4
- package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
- package/dist/realtimeWidget/widgetCore.d.ts +48 -0
- package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetCore.js +38 -10
- package/dist/realtimeWidget/widgetCore.js.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.d.ts +10 -6
- package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.js +14 -6
- package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +3 -3
- package/dist/resolvers/AgentRunStatusPublisher.d.ts +55 -0
- package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -0
- package/dist/resolvers/AgentRunStatusPublisher.js +141 -0
- package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -0
- package/dist/resolvers/ConversationRunEventsResolver.d.ts +90 -0
- package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -0
- package/dist/resolvers/ConversationRunEventsResolver.js +283 -0
- package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -0
- package/dist/resolvers/DuplicateEntryCheckResolver.d.ts +98 -0
- package/dist/resolvers/DuplicateEntryCheckResolver.d.ts.map +1 -0
- package/dist/resolvers/DuplicateEntryCheckResolver.js +227 -0
- package/dist/resolvers/DuplicateEntryCheckResolver.js.map +1 -0
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.js +2 -1
- package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.js +3 -3
- package/dist/resolvers/GeoResolver.d.ts +2 -2
- package/dist/resolvers/GeoResolver.js +4 -4
- package/dist/resolvers/GetDataResolver.d.ts +14 -0
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +43 -15
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +2 -2
- package/dist/resolvers/ListOperationsResolver.d.ts +20 -0
- package/dist/resolvers/ListOperationsResolver.d.ts.map +1 -1
- package/dist/resolvers/ListOperationsResolver.js +68 -28
- package/dist/resolvers/ListOperationsResolver.js.map +1 -1
- package/dist/resolvers/MCPResolver.d.ts +11 -1
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +7 -3
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.d.ts +7 -0
- package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.js +16 -2
- package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.js +3 -3
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +44 -6
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +93 -37
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +5 -5
- package/dist/resolvers/RunAIAgentResolver.d.ts +8 -18
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +85 -184
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.d.ts +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +2 -2
- package/dist/resolvers/RunDecisionResolver.d.ts +149 -0
- package/dist/resolvers/RunDecisionResolver.d.ts.map +1 -0
- package/dist/resolvers/RunDecisionResolver.js +396 -0
- package/dist/resolvers/RunDecisionResolver.js.map +1 -0
- package/dist/resolvers/RunTestResolver.js +5 -5
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts +8 -4
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.js +5 -5
- package/dist/resolvers/TaskGraphFrameResolver.d.ts +8 -1
- package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
- package/dist/resolvers/TaskGraphFrameResolver.js +6 -2
- package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
- package/dist/resolvers/VectorizeEntityResolver.d.ts +1 -1
- package/dist/resolvers/VectorizeEntityResolver.d.ts.map +1 -1
- package/dist/resolvers/VectorizeEntityResolver.js +14 -10
- package/dist/resolvers/VectorizeEntityResolver.js.map +1 -1
- package/dist/resolvers/adhoc-query-helpers.d.ts +6 -0
- package/dist/resolvers/adhoc-query-helpers.d.ts.map +1 -1
- package/dist/resolvers/adhoc-query-helpers.js +10 -2
- package/dist/resolvers/adhoc-query-helpers.js.map +1 -1
- package/dist/resolvers/artifact-routing.d.ts +8 -8
- package/dist/resolvers/artifact-routing.js +2 -2
- package/dist/resolvers/artifact-routing.js.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.d.ts +10 -2
- package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.js +24 -8
- package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
- package/dist/resolvers/peaksSidecar.d.ts +4 -0
- package/dist/resolvers/peaksSidecar.d.ts.map +1 -1
- package/dist/resolvers/peaksSidecar.js +10 -2
- package/dist/resolvers/peaksSidecar.js.map +1 -1
- package/dist/rest/EntityCRUDHandler.d.ts +28 -0
- package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
- package/dist/rest/EntityCRUDHandler.js +20 -4
- package/dist/rest/EntityCRUDHandler.js.map +1 -1
- package/dist/rest/MediaStreamHandler.d.ts +2 -0
- package/dist/rest/MediaStreamHandler.d.ts.map +1 -1
- package/dist/rest/MediaStreamHandler.js +10 -6
- package/dist/rest/MediaStreamHandler.js.map +1 -1
- package/dist/rest/OAuthCallbackHandler.d.ts +9 -0
- package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
- package/dist/rest/OAuthCallbackHandler.js +15 -3
- package/dist/rest/OAuthCallbackHandler.js.map +1 -1
- package/dist/rest/RESTEndpointHandler.d.ts +6 -4
- package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
- package/dist/rest/RESTEndpointHandler.js +15 -11
- package/dist/rest/RESTEndpointHandler.js.map +1 -1
- package/dist/rest/RealtimeSdpBrokerHandler.d.ts +5 -1
- package/dist/rest/RealtimeSdpBrokerHandler.d.ts.map +1 -1
- package/dist/rest/RealtimeSdpBrokerHandler.js +12 -4
- package/dist/rest/RealtimeSdpBrokerHandler.js.map +1 -1
- package/dist/rest/SignatureWebhookHandler.d.ts +2 -0
- package/dist/rest/SignatureWebhookHandler.d.ts.map +1 -1
- package/dist/rest/SignatureWebhookHandler.js +5 -1
- package/dist/rest/SignatureWebhookHandler.js.map +1 -1
- package/dist/rest/UploadTokenManager.d.ts +24 -8
- package/dist/rest/UploadTokenManager.d.ts.map +1 -1
- package/dist/rest/UploadTokenManager.js +53 -21
- package/dist/rest/UploadTokenManager.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts +20 -0
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +20 -4
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/rest/mediaRange.d.ts +4 -0
- package/dist/rest/mediaRange.d.ts.map +1 -1
- package/dist/rest/mediaRange.js +10 -2
- package/dist/rest/mediaRange.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts +4 -0
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +13 -7
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/dist/serverExtensionReservedRoots.d.ts +2 -0
- package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
- package/dist/serverExtensionReservedRoots.js +5 -1
- package/dist/serverExtensionReservedRoots.js.map +1 -1
- package/dist/services/TaskGraphActionRunner.d.ts +13 -8
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +16 -15
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -3
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +6 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +13 -5
- package/dist/util.js.map +1 -1
- package/package.json +94 -92
- package/src/__tests__/AgentRunStatusPublisher.test.ts +175 -0
- package/src/__tests__/DeleteOptionsInput.wireShape.test.ts +62 -0
- package/src/__tests__/DuplicateEntryCheckResolver.test.ts +300 -0
- package/src/__tests__/FileResolverPeaks.test.ts +13 -13
- package/src/__tests__/ListOperationsResolver.test.ts +17 -17
- package/src/__tests__/MediaStreamHandler.test.ts +28 -28
- package/src/__tests__/NoLog.test.ts +11 -11
- package/src/__tests__/PrimaryKeyAlwaysMapped.test.ts +10 -10
- package/src/__tests__/RESTEndpointHandler.test.ts +14 -14
- package/src/__tests__/RealtimeBridgeResolver.test.ts +4 -2
- package/src/__tests__/RealtimeClientSessionResolver.test.ts +216 -2
- package/src/__tests__/RealtimeSdpBrokerHandler.test.ts +6 -6
- package/src/__tests__/RefreshAdoptsNewColumns.test.ts +8 -8
- package/src/__tests__/RemoteBrowserActionRecovery.test.ts +7 -1
- package/src/__tests__/RemoteBrowserAudioStream.test.ts +7 -1
- package/src/__tests__/RemoteBrowserGoalEngine.test.ts +18 -18
- package/src/__tests__/RemoteBrowserSnapshot.test.ts +7 -1
- package/src/__tests__/ResolverBase.clientOldValues.test.ts +52 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +398 -0
- package/src/__tests__/RunAIAgentResolver.streaming.test.ts +18 -27
- package/src/__tests__/RunDecisionResolver.test.ts +699 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +131 -0
- package/src/__tests__/TaskGraphFrameResolver.test.ts +2 -2
- package/src/__tests__/VectorizeEntityResolver.test.ts +106 -0
- package/src/__tests__/WidgetSessionService.test.ts +8 -4
- package/src/__tests__/adhoc-query-helpers.test.ts +21 -21
- package/src/__tests__/bootAudit.test.ts +11 -11
- package/src/__tests__/boundaryLogPayload.test.ts +6 -6
- package/src/__tests__/cacheInvalidationRecordData.test.ts +177 -0
- package/src/__tests__/conversationRunEvents.test.ts +399 -0
- package/src/__tests__/databaseAbstraction.test.ts +12 -6
- package/src/__tests__/getDataTokenRedaction.test.ts +7 -7
- package/src/__tests__/initializeProviders.refresh.test.ts +4 -4
- package/src/__tests__/magicLink.test.ts +73 -134
- package/src/__tests__/magicLinkService.consume.test.ts +224 -0
- package/src/__tests__/meetingRecordingRegistration.test.ts +12 -12
- package/src/__tests__/metadataRefreshSignal.test.ts +78 -0
- package/src/__tests__/multiTenancy.security.test.ts +40 -40
- package/src/__tests__/multiTenancy.test.ts +18 -18
- package/src/__tests__/newUsers.test.ts +24 -23
- package/src/__tests__/orphanedConversationDetailReconciler.test.ts +283 -0
- package/src/__tests__/principals.test.ts +22 -22
- package/src/__tests__/pushStatusFanOut.test.ts +206 -0
- package/src/__tests__/pushStatusResolver.filter.test.ts +8 -8
- package/src/__tests__/secretRedactor.failOpen.test.ts +12 -12
- package/src/__tests__/secretRedactor.test.ts +12 -12
- package/src/__tests__/serverExtensionReservedRoots.test.ts +7 -7
- package/src/__tests__/subscriptionRedaction.test.ts +5 -5
- package/src/__tests__/unifiedAuth.test.ts +15 -9
- package/src/__tests__/visitorIdentity.resolve.test.ts +6 -6
- package/src/__tests__/widget.test.ts +45 -45
- package/src/__tests__/widgetGuestElevation.test.ts +7 -7
- package/src/__tests__/widgetHostIdentity.test.ts +14 -14
- package/src/agentSessions/ReturningVisitorRecap.ts +12 -1
- package/src/agentSessions/SessionManager.ts +2 -2
- package/src/agentSessions/remoteBrowserGoalEngine.ts +30 -5
- package/src/auth/AuthProviderCatalogRouter.ts +6 -1
- package/src/auth/__tests__/backward-compatibility.test.ts +4 -3
- package/src/auth/index.ts +43 -28
- package/src/auth/initializeProviders.ts +25 -5
- package/src/auth/magicLink/MagicLinkRouter.ts +28 -10
- package/src/auth/magicLink/MagicLinkService.ts +71 -52
- package/src/auth/magicLink/index.ts +7 -7
- package/src/auth/magicLink/magicLinkCore.ts +96 -64
- package/src/auth/magicLink/redeemLanding.ts +14 -4
- package/src/auth/magicLink/types.ts +54 -54
- package/src/auth/newUsers.ts +1 -1
- package/src/auth/principals.ts +11 -2
- package/src/cache.ts +4 -1
- package/src/config.ts +37 -4
- package/src/context.ts +37 -24
- package/src/directives/Public.ts +4 -1
- package/src/directives/RequireSystemUser.ts +4 -1
- package/src/generated/graphql-schemas/__mj.ts +3674 -4
- package/src/generic/CacheInvalidationResolver.ts +148 -4
- package/src/generic/DeleteOptionsInput.ts +9 -2
- package/src/generic/FireAndForgetHeartbeat.ts +35 -16
- package/src/generic/OrphanedConversationDetailReconciler.ts +267 -0
- package/src/generic/PushStatusResolver.ts +118 -8
- package/src/generic/ResolverBase.ts +65 -57
- package/src/generic/RunViewResolver.ts +22 -22
- package/src/generic/__tests__/FireAndForgetHeartbeat.test.ts +7 -7
- package/src/index.ts +137 -11
- package/src/integration/CustomColumnPromoter.ts +6 -1
- package/src/integration/EntityMapLifecycle.ts +20 -2
- package/src/logging/NoLog.ts +16 -2
- package/src/logging/StartupLogger.ts +6 -1
- package/src/logging/bootAudit.ts +26 -16
- package/src/logging/boundaryLogPayload.ts +8 -1
- package/src/logging/secretRedactor.ts +14 -9
- package/src/logging/shortenForLog.ts +8 -3
- package/src/logging/variablesLoggingMiddleware.ts +9 -6
- package/src/metadataRefreshSignal.ts +45 -0
- package/src/middleware/MJTenantFilterMiddleware.ts +4 -4
- package/src/multiTenancy/index.ts +29 -5
- package/src/realtimeWidget/WidgetRouter.ts +15 -10
- package/src/realtimeWidget/WidgetSessionService.ts +76 -76
- package/src/realtimeWidget/host-identity.ts +24 -10
- package/src/realtimeWidget/index.ts +3 -3
- package/src/realtimeWidget/visitorIdentity.ts +39 -8
- package/src/realtimeWidget/widgetCore.ts +75 -10
- package/src/realtimeWidget/widgetGuestElevation.ts +25 -12
- package/src/resolvers/AdhocQueryResolver.ts +3 -3
- package/src/resolvers/AgentRunStatusPublisher.ts +175 -0
- package/src/resolvers/AgentSessionResolver.ts +3 -3
- package/src/resolvers/ColorResolver.ts +6 -6
- package/src/resolvers/ComponentRegistryResolver.ts +36 -36
- package/src/resolvers/ConversationRunEventsResolver.ts +308 -0
- package/src/resolvers/DuplicateEntryCheckResolver.ts +232 -0
- package/src/resolvers/EntityCommunicationsResolver.ts +4 -4
- package/src/resolvers/ExecuteRemoteOperationResolver.ts +9 -9
- package/src/resolvers/FetchEntityVectorsResolver.ts +2 -1
- package/src/resolvers/FileResolver.ts +42 -42
- package/src/resolvers/GeoResolver.ts +4 -4
- package/src/resolvers/GetDataResolver.ts +50 -15
- package/src/resolvers/IntegrationDiscoveryResolver.ts +2 -2
- package/src/resolvers/ListOperationsResolver.ts +78 -28
- package/src/resolvers/MCPResolver.ts +30 -15
- package/src/resolvers/MergeRecordsResolver.ts +14 -2
- package/src/resolvers/QueryResolver.ts +13 -13
- package/src/resolvers/RealtimeBridgeResolver.ts +3 -3
- package/src/resolvers/RealtimeClientSessionResolver.ts +96 -38
- package/src/resolvers/RemoteBrowserActionResolver.ts +5 -5
- package/src/resolvers/RunAIAgentResolver.ts +134 -239
- package/src/resolvers/RunAIPromptResolver.ts +22 -22
- package/src/resolvers/RunDecisionResolver.ts +435 -0
- package/src/resolvers/RunTemplateResolver.ts +4 -4
- package/src/resolvers/RunTestResolver.ts +25 -25
- package/src/resolvers/SqlLoggingConfigResolver.ts +56 -56
- package/src/resolvers/TaskGraphFrameResolver.ts +37 -28
- package/src/resolvers/TelemetryResolver.ts +79 -79
- package/src/resolvers/VectorizeEntityResolver.ts +16 -11
- package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +40 -38
- package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +93 -0
- package/src/resolvers/__tests__/artifact-routing.test.ts +23 -23
- package/src/resolvers/adhoc-query-helpers.ts +19 -2
- package/src/resolvers/artifact-routing.ts +19 -19
- package/src/resolvers/meetingRecordingRegistration.ts +44 -10
- package/src/resolvers/peaksSidecar.ts +12 -2
- package/src/rest/EntityCRUDHandler.ts +24 -4
- package/src/rest/MediaStreamHandler.ts +11 -6
- package/src/rest/OAuthCallbackHandler.ts +25 -7
- package/src/rest/RESTEndpointHandler.ts +20 -15
- package/src/rest/RealtimeSdpBrokerHandler.ts +14 -4
- package/src/rest/SignatureWebhookHandler.ts +6 -1
- package/src/rest/UploadTokenManager.ts +66 -30
- package/src/rest/ViewOperationsHandler.ts +24 -4
- package/src/rest/mediaRange.ts +16 -6
- package/src/rest/setupRESTEndpoints.ts +24 -12
- package/src/serverExtensionReservedRoots.ts +6 -1
- package/src/services/TaskGraphActionRunner.ts +16 -15
- package/src/types.ts +21 -16
- package/src/util.ts +16 -6
|
@@ -13,58 +13,58 @@ import {
|
|
|
13
13
|
@ObjectType()
|
|
14
14
|
export class MemorySnapshotGQL {
|
|
15
15
|
@Field(() => Float)
|
|
16
|
-
heapUsed: number;
|
|
16
|
+
heapUsed: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
17
17
|
|
|
18
18
|
@Field(() => Float)
|
|
19
|
-
heapTotal: number;
|
|
19
|
+
heapTotal: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
20
20
|
|
|
21
21
|
@Field(() => Float)
|
|
22
|
-
timestamp: number;
|
|
22
|
+
timestamp: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
@ObjectType()
|
|
26
26
|
export class TelemetryEventGQL {
|
|
27
27
|
@Field(() => String)
|
|
28
|
-
id: string;
|
|
28
|
+
id: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
29
29
|
|
|
30
30
|
@Field(() => String)
|
|
31
|
-
category: string;
|
|
31
|
+
category: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
32
32
|
|
|
33
33
|
@Field(() => String)
|
|
34
|
-
operation: string;
|
|
34
|
+
operation: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
35
35
|
|
|
36
36
|
@Field(() => String)
|
|
37
|
-
fingerprint: string;
|
|
37
|
+
fingerprint: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
38
38
|
|
|
39
39
|
@Field(() => Float)
|
|
40
|
-
startTime: number;
|
|
40
|
+
startTime: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
41
41
|
|
|
42
42
|
@Field(() => Float, { nullable: true })
|
|
43
|
-
endTime?: number;
|
|
43
|
+
endTime?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
44
44
|
|
|
45
45
|
@Field(() => Float, { nullable: true })
|
|
46
|
-
elapsedMs?: number;
|
|
46
|
+
elapsedMs?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
47
47
|
|
|
48
48
|
@Field(() => String, { nullable: true })
|
|
49
|
-
userId?: string;
|
|
49
|
+
userId?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
50
50
|
|
|
51
51
|
@Field(() => String)
|
|
52
|
-
params: string; // JSON stringified
|
|
52
|
+
params: string; // JSON stringified — case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
53
53
|
|
|
54
54
|
@Field(() => [String], { nullable: true })
|
|
55
|
-
tags?: string[];
|
|
55
|
+
tags?: string[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
56
56
|
|
|
57
57
|
@Field(() => String, { nullable: true })
|
|
58
|
-
stackTrace?: string;
|
|
58
|
+
stackTrace?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
59
59
|
|
|
60
60
|
@Field(() => MemorySnapshotGQL, { nullable: true })
|
|
61
|
-
memoryBefore?: MemorySnapshotGQL;
|
|
61
|
+
memoryBefore?: MemorySnapshotGQL; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
62
62
|
|
|
63
63
|
@Field(() => MemorySnapshotGQL, { nullable: true })
|
|
64
|
-
memoryAfter?: MemorySnapshotGQL;
|
|
64
|
+
memoryAfter?: MemorySnapshotGQL; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
65
65
|
|
|
66
66
|
@Field(() => String, { nullable: true })
|
|
67
|
-
parentEventId?: string;
|
|
67
|
+
parentEventId?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// ============================================================================
|
|
@@ -74,52 +74,52 @@ export class TelemetryEventGQL {
|
|
|
74
74
|
@ObjectType()
|
|
75
75
|
export class CallerLocationGQL {
|
|
76
76
|
@Field(() => String)
|
|
77
|
-
location: string;
|
|
77
|
+
location: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
78
78
|
|
|
79
79
|
@Field(() => Int)
|
|
80
|
-
count: number;
|
|
80
|
+
count: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
@ObjectType()
|
|
84
84
|
export class TelemetryPatternGQL {
|
|
85
85
|
@Field(() => String)
|
|
86
|
-
fingerprint: string;
|
|
86
|
+
fingerprint: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
87
87
|
|
|
88
88
|
@Field(() => String)
|
|
89
|
-
category: string;
|
|
89
|
+
category: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
90
90
|
|
|
91
91
|
@Field(() => String)
|
|
92
|
-
operation: string;
|
|
92
|
+
operation: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
93
93
|
|
|
94
94
|
@Field(() => String)
|
|
95
|
-
sampleParams: string; // JSON stringified
|
|
95
|
+
sampleParams: string; // JSON stringified — case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
96
96
|
|
|
97
97
|
@Field(() => Int)
|
|
98
|
-
count: number;
|
|
98
|
+
count: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
99
99
|
|
|
100
100
|
@Field(() => Float)
|
|
101
|
-
totalElapsedMs: number;
|
|
101
|
+
totalElapsedMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
102
102
|
|
|
103
103
|
@Field(() => Float)
|
|
104
|
-
avgElapsedMs: number;
|
|
104
|
+
avgElapsedMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
105
105
|
|
|
106
106
|
@Field(() => Float)
|
|
107
|
-
minElapsedMs: number;
|
|
107
|
+
minElapsedMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
108
108
|
|
|
109
109
|
@Field(() => Float)
|
|
110
|
-
maxElapsedMs: number;
|
|
110
|
+
maxElapsedMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
111
111
|
|
|
112
112
|
@Field(() => [CallerLocationGQL])
|
|
113
|
-
callerLocations: CallerLocationGQL[];
|
|
113
|
+
callerLocations: CallerLocationGQL[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
114
114
|
|
|
115
115
|
@Field(() => Float)
|
|
116
|
-
firstSeen: number;
|
|
116
|
+
firstSeen: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
117
117
|
|
|
118
118
|
@Field(() => Float)
|
|
119
|
-
lastSeen: number;
|
|
119
|
+
lastSeen: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
120
120
|
|
|
121
121
|
@Field(() => Float)
|
|
122
|
-
windowStartTime: number;
|
|
122
|
+
windowStartTime: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
// ============================================================================
|
|
@@ -129,37 +129,37 @@ export class TelemetryPatternGQL {
|
|
|
129
129
|
@ObjectType()
|
|
130
130
|
export class TelemetryInsightGQL {
|
|
131
131
|
@Field(() => String)
|
|
132
|
-
id: string;
|
|
132
|
+
id: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
133
133
|
|
|
134
134
|
@Field(() => String)
|
|
135
|
-
severity: string;
|
|
135
|
+
severity: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
136
136
|
|
|
137
137
|
@Field(() => String)
|
|
138
|
-
analyzerName: string;
|
|
138
|
+
analyzerName: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
139
139
|
|
|
140
140
|
@Field(() => String)
|
|
141
|
-
category: string;
|
|
141
|
+
category: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
142
142
|
|
|
143
143
|
@Field(() => String)
|
|
144
|
-
title: string;
|
|
144
|
+
title: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
145
145
|
|
|
146
146
|
@Field(() => String)
|
|
147
|
-
message: string;
|
|
147
|
+
message: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
148
148
|
|
|
149
149
|
@Field(() => String)
|
|
150
|
-
suggestion: string;
|
|
150
|
+
suggestion: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
151
151
|
|
|
152
152
|
@Field(() => [String])
|
|
153
|
-
relatedEventIds: string[];
|
|
153
|
+
relatedEventIds: string[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
154
154
|
|
|
155
155
|
@Field(() => String, { nullable: true })
|
|
156
|
-
entityName?: string;
|
|
156
|
+
entityName?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
157
157
|
|
|
158
158
|
@Field(() => String, { nullable: true })
|
|
159
|
-
metadata?: string; // JSON stringified
|
|
159
|
+
metadata?: string; // JSON stringified — case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
160
160
|
|
|
161
161
|
@Field(() => Float)
|
|
162
|
-
timestamp: number;
|
|
162
|
+
timestamp: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
// ============================================================================
|
|
@@ -169,31 +169,31 @@ export class TelemetryInsightGQL {
|
|
|
169
169
|
@ObjectType()
|
|
170
170
|
export class CategoryStatsGQL {
|
|
171
171
|
@Field(() => String)
|
|
172
|
-
category: string;
|
|
172
|
+
category: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
173
173
|
|
|
174
174
|
@Field(() => Int)
|
|
175
|
-
events: number;
|
|
175
|
+
events: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
176
176
|
|
|
177
177
|
@Field(() => Float)
|
|
178
|
-
avgMs: number;
|
|
178
|
+
avgMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
@ObjectType()
|
|
182
182
|
export class TelemetryStatsGQL {
|
|
183
183
|
@Field(() => Int)
|
|
184
|
-
totalEvents: number;
|
|
184
|
+
totalEvents: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
185
185
|
|
|
186
186
|
@Field(() => Int)
|
|
187
|
-
totalPatterns: number;
|
|
187
|
+
totalPatterns: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
188
188
|
|
|
189
189
|
@Field(() => Int)
|
|
190
|
-
totalInsights: number;
|
|
190
|
+
totalInsights: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
191
191
|
|
|
192
192
|
@Field(() => Int)
|
|
193
|
-
activeEvents: number;
|
|
193
|
+
activeEvents: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
194
194
|
|
|
195
195
|
@Field(() => [CategoryStatsGQL])
|
|
196
|
-
byCategory: CategoryStatsGQL[];
|
|
196
|
+
byCategory: CategoryStatsGQL[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
197
197
|
}
|
|
198
198
|
|
|
199
199
|
// ============================================================================
|
|
@@ -203,64 +203,64 @@ export class TelemetryStatsGQL {
|
|
|
203
203
|
@ObjectType()
|
|
204
204
|
export class CategoryOverrideGQL {
|
|
205
205
|
@Field(() => String)
|
|
206
|
-
category: string;
|
|
206
|
+
category: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
207
207
|
|
|
208
208
|
@Field(() => Boolean)
|
|
209
|
-
enabled: boolean;
|
|
209
|
+
enabled: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
210
210
|
|
|
211
211
|
@Field(() => String, { nullable: true })
|
|
212
|
-
level?: string;
|
|
212
|
+
level?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
@ObjectType()
|
|
216
216
|
export class AutoTrimSettingsGQL {
|
|
217
217
|
@Field(() => Boolean)
|
|
218
|
-
enabled: boolean;
|
|
218
|
+
enabled: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
219
219
|
|
|
220
220
|
@Field(() => Int, { nullable: true })
|
|
221
|
-
maxEvents?: number;
|
|
221
|
+
maxEvents?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
222
222
|
|
|
223
223
|
@Field(() => Int, { nullable: true })
|
|
224
|
-
maxAgeMs?: number;
|
|
224
|
+
maxAgeMs?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
225
225
|
}
|
|
226
226
|
|
|
227
227
|
@ObjectType()
|
|
228
228
|
export class DuplicateDetectionSettingsGQL {
|
|
229
229
|
@Field(() => Boolean)
|
|
230
|
-
enabled: boolean;
|
|
230
|
+
enabled: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
231
231
|
|
|
232
232
|
@Field(() => Int)
|
|
233
|
-
windowMs: number;
|
|
233
|
+
windowMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
@ObjectType()
|
|
237
237
|
export class AnalyzerSettingsGQL {
|
|
238
238
|
@Field(() => Boolean)
|
|
239
|
-
enabled: boolean;
|
|
239
|
+
enabled: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
240
240
|
|
|
241
241
|
@Field(() => Int)
|
|
242
|
-
dedupeWindowMs: number;
|
|
242
|
+
dedupeWindowMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
@ObjectType()
|
|
246
246
|
export class TelemetrySettingsGQL {
|
|
247
247
|
@Field(() => Boolean)
|
|
248
|
-
enabled: boolean;
|
|
248
|
+
enabled: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
249
249
|
|
|
250
250
|
@Field(() => String)
|
|
251
|
-
level: string;
|
|
251
|
+
level: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
252
252
|
|
|
253
253
|
@Field(() => [CategoryOverrideGQL])
|
|
254
|
-
categoryOverrides: CategoryOverrideGQL[];
|
|
254
|
+
categoryOverrides: CategoryOverrideGQL[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
255
255
|
|
|
256
256
|
@Field(() => AutoTrimSettingsGQL)
|
|
257
|
-
autoTrim: AutoTrimSettingsGQL;
|
|
257
|
+
autoTrim: AutoTrimSettingsGQL; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
258
258
|
|
|
259
259
|
@Field(() => DuplicateDetectionSettingsGQL)
|
|
260
|
-
duplicateDetection: DuplicateDetectionSettingsGQL;
|
|
260
|
+
duplicateDetection: DuplicateDetectionSettingsGQL; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
261
261
|
|
|
262
262
|
@Field(() => AnalyzerSettingsGQL)
|
|
263
|
-
analyzers: AnalyzerSettingsGQL;
|
|
263
|
+
analyzers: AnalyzerSettingsGQL; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
264
264
|
}
|
|
265
265
|
|
|
266
266
|
// ============================================================================
|
|
@@ -270,46 +270,46 @@ export class TelemetrySettingsGQL {
|
|
|
270
270
|
@InputType()
|
|
271
271
|
export class TelemetryEventFilterInput {
|
|
272
272
|
@Field(() => String, { nullable: true })
|
|
273
|
-
category?: string;
|
|
273
|
+
category?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
274
274
|
|
|
275
275
|
@Field(() => String, { nullable: true })
|
|
276
|
-
operation?: string;
|
|
276
|
+
operation?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
277
277
|
|
|
278
278
|
@Field(() => Float, { nullable: true })
|
|
279
|
-
minElapsedMs?: number;
|
|
279
|
+
minElapsedMs?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
280
280
|
|
|
281
281
|
@Field(() => Float, { nullable: true })
|
|
282
|
-
since?: number;
|
|
282
|
+
since?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
283
283
|
|
|
284
284
|
@Field(() => Int, { nullable: true })
|
|
285
|
-
limit?: number;
|
|
285
|
+
limit?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
286
286
|
}
|
|
287
287
|
|
|
288
288
|
@InputType()
|
|
289
289
|
export class TelemetryPatternFilterInput {
|
|
290
290
|
@Field(() => String, { nullable: true })
|
|
291
|
-
category?: string;
|
|
291
|
+
category?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
292
292
|
|
|
293
293
|
@Field(() => Int, { nullable: true })
|
|
294
|
-
minCount?: number;
|
|
294
|
+
minCount?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
295
295
|
|
|
296
296
|
@Field(() => String, { nullable: true })
|
|
297
|
-
sortBy?: string;
|
|
297
|
+
sortBy?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
@InputType()
|
|
301
301
|
export class TelemetryInsightFilterInput {
|
|
302
302
|
@Field(() => String, { nullable: true })
|
|
303
|
-
severity?: string;
|
|
303
|
+
severity?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
304
304
|
|
|
305
305
|
@Field(() => String, { nullable: true })
|
|
306
|
-
category?: string;
|
|
306
|
+
category?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
307
307
|
|
|
308
308
|
@Field(() => String, { nullable: true })
|
|
309
|
-
entityName?: string;
|
|
309
|
+
entityName?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
310
310
|
|
|
311
311
|
@Field(() => Int, { nullable: true })
|
|
312
|
-
limit?: number;
|
|
312
|
+
limit?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
313
313
|
}
|
|
314
314
|
|
|
315
315
|
// ============================================================================
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
import { Resolver, Mutation, Arg, Ctx, ObjectType, Field, Float } from 'type-graphql';
|
|
2
2
|
import { AppContext } from '../types.js';
|
|
3
|
-
import { LogError, LogStatus, UserInfo } from '@memberjunction/core';
|
|
3
|
+
import { IMetadataProvider, LogError, LogStatus, UserInfo } from '@memberjunction/core';
|
|
4
4
|
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
5
5
|
import { EntityVectorSyncer, VectorizeEntityParams, VectorizeProgressUpdate } from '@memberjunction/ai-vector-sync';
|
|
6
6
|
import { PubSubManager } from '../generic/PubSubManager.js';
|
|
7
7
|
import { PipelineProgressNotification } from './PipelineProgressResolver.js';
|
|
8
8
|
import { v4 as uuidv4 } from 'uuid';
|
|
9
|
+
import { GetReadWriteProvider } from '../util.js';
|
|
9
10
|
|
|
10
11
|
const PIPELINE_PROGRESS_TOPIC = 'PIPELINE_PROGRESS';
|
|
11
12
|
|
|
12
13
|
@ObjectType()
|
|
13
14
|
export class VectorizeEntityResult {
|
|
14
|
-
@Field()
|
|
15
|
+
@Field(() => Boolean)
|
|
15
16
|
Success: boolean;
|
|
16
17
|
|
|
17
|
-
@Field({ nullable: true })
|
|
18
|
+
@Field(() => String, { nullable: true })
|
|
18
19
|
Status?: string;
|
|
19
20
|
|
|
20
|
-
@Field({ nullable: true })
|
|
21
|
+
@Field(() => String, { nullable: true })
|
|
21
22
|
ErrorMessage?: string;
|
|
22
23
|
|
|
23
|
-
@Field({ nullable: true })
|
|
24
|
+
@Field(() => String, { nullable: true })
|
|
24
25
|
PipelineRunID?: string;
|
|
25
26
|
}
|
|
26
27
|
|
|
@@ -28,10 +29,10 @@ export class VectorizeEntityResult {
|
|
|
28
29
|
export class VectorizeEntityResolver extends ResolverBase {
|
|
29
30
|
@Mutation(() => VectorizeEntityResult)
|
|
30
31
|
async VectorizeEntity(
|
|
31
|
-
@Arg('entityDocumentID') entityDocumentID: string,
|
|
32
|
-
@Arg('entityID') entityID: string,
|
|
32
|
+
@Arg('entityDocumentID', () => String) entityDocumentID: string,
|
|
33
|
+
@Arg('entityID', () => String) entityID: string,
|
|
33
34
|
@Arg('batchSize', () => Float, { nullable: true }) batchSize?: number,
|
|
34
|
-
@Ctx() { userPayload }: AppContext = {} as AppContext
|
|
35
|
+
@Ctx() { userPayload, providers }: AppContext = {} as AppContext
|
|
35
36
|
): Promise<VectorizeEntityResult> {
|
|
36
37
|
try {
|
|
37
38
|
const currentUser = this.GetUserFromPayload(userPayload);
|
|
@@ -39,12 +40,15 @@ export class VectorizeEntityResolver extends ResolverBase {
|
|
|
39
40
|
return { Success: false, Status: 'Error', ErrorMessage: 'Unable to determine current user' };
|
|
40
41
|
}
|
|
41
42
|
|
|
43
|
+
// Capture the request's provider before returning, so the background run writes through the
|
|
44
|
+
// same connection the caller used. It is also the colocated vector host (#4910).
|
|
45
|
+
const provider = GetReadWriteProvider(providers, { allowFallbackToReadOnly: true }) ?? undefined;
|
|
42
46
|
const pipelineRunID = uuidv4();
|
|
43
47
|
LogStatus(`VectorizeEntity: starting pipeline ${pipelineRunID} for entity document ${entityDocumentID}`);
|
|
44
48
|
|
|
45
49
|
// Fire-and-forget: start the pipeline in the background and return immediately.
|
|
46
50
|
// Progress is delivered to the client via the PipelineProgress GraphQL subscription.
|
|
47
|
-
this.runPipelineInBackground(pipelineRunID, entityDocumentID, entityID, batchSize, currentUser);
|
|
51
|
+
this.runPipelineInBackground(pipelineRunID, entityDocumentID, entityID, batchSize, currentUser, provider);
|
|
48
52
|
|
|
49
53
|
return {
|
|
50
54
|
Success: true,
|
|
@@ -71,10 +75,11 @@ export class VectorizeEntityResolver extends ResolverBase {
|
|
|
71
75
|
entityDocumentID: string,
|
|
72
76
|
entityID: string,
|
|
73
77
|
batchSize: number | undefined,
|
|
74
|
-
currentUser: UserInfo
|
|
78
|
+
currentUser: UserInfo,
|
|
79
|
+
provider?: IMetadataProvider
|
|
75
80
|
): Promise<void> {
|
|
76
81
|
try {
|
|
77
|
-
const syncer = new EntityVectorSyncer();
|
|
82
|
+
const syncer = new EntityVectorSyncer(provider);
|
|
78
83
|
await syncer.Config(true, currentUser);
|
|
79
84
|
|
|
80
85
|
const params: VectorizeEntityParams = {
|
|
@@ -12,22 +12,24 @@ import { describe, it, expect, vi } from 'vitest';
|
|
|
12
12
|
// vars to even import. Mock those heavy imports out so this file stays a true,
|
|
13
13
|
// isolated unit test of the token-tracking logic (mirrors the mocking convention
|
|
14
14
|
// in RealtimeBridgeResolver.test.ts).
|
|
15
|
-
vi.mock('../../index.js', () => ({
|
|
15
|
+
vi.mock('../../index.js', () => ({ GetDbType: vi.fn(),
|
|
16
|
+
get getDbType() { return this.GetDbType; } }));
|
|
16
17
|
vi.mock('@memberjunction/generic-database-provider', () => ({
|
|
17
18
|
QueryCompositionEngine: vi.fn(() => ({ HasCompositionTokens: vi.fn(() => false) })),
|
|
18
19
|
}));
|
|
19
20
|
vi.mock('../../util.js', () => ({ GetReadOnlyDataSource: vi.fn(), GetReadOnlyProvider: vi.fn() }));
|
|
20
|
-
vi.mock('../../auth/index.js', () => ({
|
|
21
|
+
vi.mock('../../auth/index.js', () => ({ GetSystemUser: vi.fn(),
|
|
22
|
+
get getSystemUser() { return this.GetSystemUser; } }));
|
|
21
23
|
vi.mock('mssql', () => ({ default: { Request: vi.fn() } }));
|
|
22
24
|
|
|
23
25
|
import {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
RegisterAccessToken,
|
|
27
|
+
DeleteAccessToken,
|
|
28
|
+
TokenExists,
|
|
29
|
+
IsTokenValid,
|
|
30
|
+
RecordTokenUse,
|
|
31
|
+
PruneExpiredTokens,
|
|
32
|
+
GetAccessTokenCount,
|
|
31
33
|
} from '../GetDataResolver.js';
|
|
32
34
|
|
|
33
35
|
// ---------------------------------------------------------------------------
|
|
@@ -51,88 +53,88 @@ const uniqueToken = () => `test-token-${Date.now()}-${++seq}`;
|
|
|
51
53
|
describe('GetDataResolver access-token lifecycle', () => {
|
|
52
54
|
it('registerAccessToken() creates a token that is valid and exists', () => {
|
|
53
55
|
const token = uniqueToken();
|
|
54
|
-
const created =
|
|
56
|
+
const created = RegisterAccessToken(token, 60_000);
|
|
55
57
|
expect(created.Token).toBe(token);
|
|
56
|
-
expect(
|
|
57
|
-
expect(
|
|
58
|
+
expect(TokenExists(token)).toBe(true);
|
|
59
|
+
expect(IsTokenValid(token)).toBe(true);
|
|
58
60
|
});
|
|
59
61
|
|
|
60
62
|
it('registerAccessToken() throws when the same custom token is registered twice', () => {
|
|
61
63
|
const token = uniqueToken();
|
|
62
|
-
|
|
63
|
-
expect(() =>
|
|
64
|
+
RegisterAccessToken(token, 60_000);
|
|
65
|
+
expect(() => RegisterAccessToken(token, 60_000)).toThrow(/already exists/);
|
|
64
66
|
});
|
|
65
67
|
|
|
66
68
|
it('isTokenValid() is false for an unknown token and for an expired one', () => {
|
|
67
|
-
expect(
|
|
69
|
+
expect(IsTokenValid('never-registered-token')).toBe(false);
|
|
68
70
|
|
|
69
71
|
const token = uniqueToken();
|
|
70
|
-
|
|
71
|
-
expect(
|
|
72
|
+
RegisterAccessToken(token, -1); // already expired (ExpiresAt in the past)
|
|
73
|
+
expect(IsTokenValid(token)).toBe(false);
|
|
72
74
|
});
|
|
73
75
|
|
|
74
76
|
it('deleteAccessToken() removes a token and throws for an unknown one', () => {
|
|
75
77
|
const token = uniqueToken();
|
|
76
|
-
|
|
77
|
-
expect(
|
|
78
|
+
RegisterAccessToken(token, 60_000);
|
|
79
|
+
expect(TokenExists(token)).toBe(true);
|
|
78
80
|
|
|
79
|
-
|
|
80
|
-
expect(
|
|
81
|
-
expect(() =>
|
|
81
|
+
DeleteAccessToken(token);
|
|
82
|
+
expect(TokenExists(token)).toBe(false);
|
|
83
|
+
expect(() => DeleteAccessToken(token)).toThrow(/does not exist/);
|
|
82
84
|
});
|
|
83
85
|
|
|
84
86
|
it('recordTokenUse() appends to TokenUses and throws for an unknown token', () => {
|
|
85
87
|
const token = uniqueToken();
|
|
86
|
-
|
|
88
|
+
RegisterAccessToken(token, 60_000);
|
|
87
89
|
|
|
88
|
-
expect(() =>
|
|
89
|
-
expect(() =>
|
|
90
|
+
expect(() => RecordTokenUse(token, { some: 'payload' })).not.toThrow();
|
|
91
|
+
expect(() => RecordTokenUse('never-registered-token', {})).toThrow(/does not exist/);
|
|
90
92
|
});
|
|
91
93
|
|
|
92
94
|
it('pruneExpiredTokens() removes only tokens whose ExpiresAt has passed', () => {
|
|
93
95
|
const expiredToken = uniqueToken();
|
|
94
96
|
const liveToken = uniqueToken();
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
RegisterAccessToken(expiredToken, -1); // already expired
|
|
98
|
+
RegisterAccessToken(liveToken, 60_000); // still valid
|
|
97
99
|
|
|
98
|
-
|
|
100
|
+
PruneExpiredTokens();
|
|
99
101
|
|
|
100
|
-
expect(
|
|
101
|
-
expect(
|
|
102
|
+
expect(TokenExists(expiredToken)).toBe(false);
|
|
103
|
+
expect(TokenExists(liveToken)).toBe(true);
|
|
102
104
|
});
|
|
103
105
|
|
|
104
106
|
it('pruneExpiredTokens() accepts an injected "now" for deterministic testing', () => {
|
|
105
107
|
const token = uniqueToken();
|
|
106
108
|
const registeredAt = new Date('2026-01-01T00:00:00Z');
|
|
107
|
-
|
|
109
|
+
RegisterAccessToken(token, 5 * 60 * 1000); // 5-minute lifespan from real "now"
|
|
108
110
|
|
|
109
111
|
// Simulate a check far in the future — token should count as expired at that instant.
|
|
110
112
|
const farFuture = new Date(registeredAt.getTime() + 365 * 24 * 60 * 60 * 1000);
|
|
111
|
-
|
|
113
|
+
PruneExpiredTokens(farFuture);
|
|
112
114
|
|
|
113
|
-
expect(
|
|
115
|
+
expect(TokenExists(token)).toBe(false);
|
|
114
116
|
});
|
|
115
117
|
|
|
116
118
|
it('the core Round 7 regression: registering many expired tokens does not grow the array without bound', () => {
|
|
117
|
-
const before =
|
|
119
|
+
const before = GetAccessTokenCount();
|
|
118
120
|
|
|
119
121
|
// Simulate 50 short-lived tokens that all expire immediately (e.g. a burst
|
|
120
122
|
// of external calls with a near-zero lifespan, or tokens whose consumer
|
|
121
123
|
// never came back before expiry — the exact shape of the leak this fix
|
|
122
124
|
// addresses).
|
|
123
125
|
for (let i = 0; i < 50; i++) {
|
|
124
|
-
|
|
126
|
+
RegisterAccessToken(`${uniqueToken()}-burst-${i}`, -1);
|
|
125
127
|
}
|
|
126
128
|
|
|
127
129
|
// Register one more, healthy token — its registerAccessToken() call sweeps
|
|
128
130
|
// all 50 expired ones out, so the count should NOT have grown by 51; it
|
|
129
131
|
// should only reflect whatever was live before plus this one new token.
|
|
130
132
|
const survivorToken = uniqueToken();
|
|
131
|
-
|
|
133
|
+
RegisterAccessToken(survivorToken, 60_000);
|
|
132
134
|
|
|
133
135
|
// The 50 expired burst tokens must be gone — the array self-bounded rather
|
|
134
136
|
// than accumulating every registration for the life of the process.
|
|
135
|
-
expect(
|
|
136
|
-
expect(
|
|
137
|
+
expect(GetAccessTokenCount()).toBeLessThan(before + 51);
|
|
138
|
+
expect(TokenExists(survivorToken)).toBe(true);
|
|
137
139
|
});
|
|
138
140
|
});
|