@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.
- 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/exampleNewUserSubClass.js +2 -1
- package/dist/auth/exampleNewUserSubClass.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 +293 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -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 +266 -4
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +1304 -0
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/CacheInvalidationResolver.d.ts +8 -2
- package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
- package/dist/generic/CacheInvalidationResolver.js +7 -3
- package/dist/generic/CacheInvalidationResolver.js.map +1 -1
- package/dist/generic/FireAndForgetHeartbeat.d.ts +3 -1
- package/dist/generic/FireAndForgetHeartbeat.d.ts.map +1 -1
- package/dist/generic/FireAndForgetHeartbeat.js +8 -4
- package/dist/generic/FireAndForgetHeartbeat.js.map +1 -1
- package/dist/generic/PushStatusResolver.d.ts +10 -1
- package/dist/generic/PushStatusResolver.d.ts.map +1 -1
- package/dist/generic/PushStatusResolver.js +11 -3
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +27 -1
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +64 -6
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -6
- 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/FetchEntityVectorsResolver.js +2 -2
- 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/QuerySystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.js +2 -1
- package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.js +3 -3
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +37 -0
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +101 -11
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +5 -5
- package/dist/resolvers/RunAIAgentResolver.d.ts +10 -4
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +74 -42
- 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/RunTestResolver.js +5 -5
- package/dist/resolvers/SearchEntitiesResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchEntitiesResolver.js +3 -1
- package/dist/resolvers/SearchEntitiesResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeResolver.d.ts +1 -0
- package/dist/resolvers/SearchKnowledgeResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchKnowledgeResolver.js +5 -0
- package/dist/resolvers/SearchKnowledgeResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.js +1 -0
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.js.map +1 -1
- 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/TransactionGroupResolver.d.ts.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.js +53 -4
- package/dist/resolvers/TransactionGroupResolver.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/MJStorageBlobStore.d.ts +41 -0
- package/dist/services/MJStorageBlobStore.d.ts.map +1 -0
- package/dist/services/MJStorageBlobStore.js +160 -0
- package/dist/services/MJStorageBlobStore.js.map +1 -0
- 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 +12 -3
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +19 -8
- package/dist/util.js.map +1 -1
- package/package.json +92 -92
- 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 +229 -0
- package/src/__tests__/RealtimeSdpBrokerHandler.test.ts +6 -6
- package/src/__tests__/RefreshAdoptsNewColumns.test.ts +8 -8
- package/src/__tests__/RemoteBrowserGoalEngine.test.ts +18 -18
- package/src/__tests__/ResolverBase.isaPromotionCreate.test.ts +412 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +228 -0
- package/src/__tests__/SearchEntitiesResolver.readOnlyFallback.test.ts +78 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +129 -0
- package/src/__tests__/TaskGraphFrameResolver.test.ts +2 -2
- package/src/__tests__/TransactionGroupResolver.refusals.test.ts +290 -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__/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__/principals.test.ts +22 -22
- 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 +3 -3
- package/src/auth/exampleNewUserSubClass.ts +2 -2
- 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 +14 -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 +933 -5
- package/src/generic/CacheInvalidationResolver.ts +12 -4
- package/src/generic/FireAndForgetHeartbeat.ts +19 -14
- package/src/generic/PushStatusResolver.ts +21 -7
- package/src/generic/ResolverBase.ts +66 -5
- package/src/generic/RunViewResolver.ts +22 -22
- package/src/generic/__tests__/FireAndForgetHeartbeat.test.ts +7 -7
- package/src/index.ts +34 -7
- 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/AgentSessionResolver.ts +3 -3
- package/src/resolvers/ColorResolver.ts +6 -6
- package/src/resolvers/ComponentRegistryResolver.ts +36 -36
- package/src/resolvers/EntityCommunicationsResolver.ts +4 -4
- package/src/resolvers/ExecuteRemoteOperationResolver.ts +9 -9
- package/src/resolvers/FetchEntityVectorsResolver.ts +2 -2
- 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/QueryResolver.ts +13 -13
- package/src/resolvers/QuerySystemUserResolver.ts +2 -1
- package/src/resolvers/RealtimeBridgeResolver.ts +3 -3
- package/src/resolvers/RealtimeClientSessionResolver.ts +126 -13
- package/src/resolvers/RemoteBrowserActionResolver.ts +5 -5
- package/src/resolvers/RunAIAgentResolver.ts +118 -76
- package/src/resolvers/RunAIPromptResolver.ts +22 -22
- package/src/resolvers/RunTemplateResolver.ts +4 -4
- package/src/resolvers/RunTestResolver.ts +25 -25
- package/src/resolvers/SearchEntitiesResolver.ts +3 -1
- package/src/resolvers/SearchKnowledgeResolver.ts +4 -0
- package/src/resolvers/SearchKnowledgeSystemUserResolver.ts +1 -0
- package/src/resolvers/SqlLoggingConfigResolver.ts +56 -56
- package/src/resolvers/TaskGraphFrameResolver.ts +37 -28
- package/src/resolvers/TelemetryResolver.ts +79 -79
- package/src/resolvers/TransactionGroupResolver.ts +57 -4
- package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +40 -38
- 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/MJStorageBlobStore.ts +209 -0
- package/src/services/TaskGraphActionRunner.ts +16 -15
- package/src/types.ts +21 -16
- package/src/util.ts +22 -9
|
@@ -26,86 +26,86 @@ export const TASK_GRAPH_FRAMES_TOPIC = 'TASK_GRAPH_FRAMES';
|
|
|
26
26
|
@ObjectType()
|
|
27
27
|
export class TaskGraphFrameNotification {
|
|
28
28
|
@Field(() => String)
|
|
29
|
-
kind!: string;
|
|
29
|
+
kind!: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
30
30
|
|
|
31
31
|
@Field(() => ID)
|
|
32
|
-
parentTaskId!: string;
|
|
32
|
+
parentTaskId!: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
33
33
|
|
|
34
34
|
@Field(() => ID, { nullable: true })
|
|
35
|
-
taskId?: string;
|
|
35
|
+
taskId?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
36
36
|
|
|
37
37
|
@Field(() => String, { nullable: true })
|
|
38
|
-
taskName?: string;
|
|
38
|
+
taskName?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
39
39
|
|
|
40
40
|
@Field(() => String, { nullable: true })
|
|
41
|
-
status?: string;
|
|
41
|
+
status?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
42
42
|
|
|
43
43
|
@Field(() => String, { nullable: true })
|
|
44
|
-
errorMessage?: string;
|
|
44
|
+
errorMessage?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
45
45
|
|
|
46
46
|
@Field(() => ID, { nullable: true })
|
|
47
|
-
assignedUserId?: string;
|
|
47
|
+
assignedUserId?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
48
48
|
|
|
49
49
|
@Field(() => Number, { nullable: true })
|
|
50
|
-
completedCount?: number;
|
|
50
|
+
completedCount?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
51
51
|
|
|
52
52
|
@Field(() => Number, { nullable: true })
|
|
53
|
-
totalCount?: number;
|
|
53
|
+
totalCount?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
54
54
|
|
|
55
55
|
// ── GateDecision ──────────────────────────────────────────────────────────
|
|
56
56
|
@Field(() => ID, { nullable: true })
|
|
57
|
-
edgeId?: string;
|
|
57
|
+
edgeId?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
58
58
|
|
|
59
59
|
@Field(() => ID, { nullable: true })
|
|
60
|
-
dependsOnTaskId?: string;
|
|
60
|
+
dependsOnTaskId?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
61
61
|
|
|
62
62
|
/** 'satisfied' | 'notTaken' | 'held' */
|
|
63
63
|
@Field(() => String, { nullable: true })
|
|
64
|
-
verdict?: string;
|
|
64
|
+
verdict?: string; // 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
|
-
conditionText?: string;
|
|
67
|
+
conditionText?: 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
|
@Field(() => String, { nullable: true })
|
|
70
|
-
reason?: string;
|
|
70
|
+
reason?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
71
71
|
|
|
72
72
|
// ── ClaimChanged ──────────────────────────────────────────────────────────
|
|
73
73
|
/** 'claimed' | 'heartbeat-lost' | 'reclaimed' */
|
|
74
74
|
@Field(() => String, { nullable: true })
|
|
75
|
-
claimEvent?: string;
|
|
75
|
+
claimEvent?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
76
76
|
|
|
77
77
|
@Field(() => String, { nullable: true })
|
|
78
|
-
claimedBy?: string;
|
|
78
|
+
claimedBy?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
79
79
|
|
|
80
80
|
@Field(() => String, { nullable: true })
|
|
81
|
-
claimExpiresAt?: string;
|
|
81
|
+
claimExpiresAt?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
82
82
|
|
|
83
83
|
// ── PassCompleted ─────────────────────────────────────────────────────────
|
|
84
84
|
@Field(() => Number, { nullable: true })
|
|
85
|
-
passNumber?: number;
|
|
85
|
+
passNumber?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
86
86
|
|
|
87
87
|
@Field(() => Number, { nullable: true })
|
|
88
|
-
eligibleCount?: number;
|
|
88
|
+
eligibleCount?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
89
89
|
|
|
90
90
|
@Field(() => Number, { nullable: true })
|
|
91
|
-
heldCount?: number;
|
|
91
|
+
heldCount?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
92
92
|
|
|
93
93
|
@Field(() => Number, { nullable: true })
|
|
94
|
-
claimedCount?: number;
|
|
94
|
+
claimedCount?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
95
95
|
|
|
96
96
|
/** The dispatcher instance's own load across every graph — not this graph's in-flight count. */
|
|
97
97
|
@Field(() => Number, { nullable: true })
|
|
98
|
-
instanceInFlightCount?: number;
|
|
98
|
+
instanceInFlightCount?: 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
|
// ── NodeProgress ──────────────────────────────────────────────────────────
|
|
101
101
|
@Field(() => String, { nullable: true })
|
|
102
|
-
progressMessage?: string;
|
|
102
|
+
progressMessage?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
103
103
|
|
|
104
104
|
@Field(() => Number, { nullable: true })
|
|
105
|
-
progressPercent?: number;
|
|
105
|
+
progressPercent?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
106
106
|
|
|
107
107
|
@Field(() => Date)
|
|
108
|
-
date!: Date;
|
|
108
|
+
date!: Date; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
/**
|
|
@@ -137,7 +137,7 @@ export interface TaskGraphFrameFilterContext {
|
|
|
137
137
|
* another user's workflow — including its per-step error messages. **Fails closed** — a missing
|
|
138
138
|
* identity on either side never matches.
|
|
139
139
|
*/
|
|
140
|
-
export function
|
|
140
|
+
export function TaskGraphFrameFilter(data: {
|
|
141
141
|
payload: TaskGraphFramePayload;
|
|
142
142
|
args: TaskGraphFrameArgs;
|
|
143
143
|
context: TaskGraphFrameFilterContext | undefined;
|
|
@@ -156,6 +156,15 @@ export function taskGraphFrameFilter(data: {
|
|
|
156
156
|
return UUIDsEqual(payload.ownerUserId, connectionUserId);
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
+
/** @deprecated Use {@link TaskGraphFrameFilter}. */
|
|
160
|
+
export function taskGraphFrameFilter(data: {
|
|
161
|
+
payload: TaskGraphFramePayload;
|
|
162
|
+
args: TaskGraphFrameArgs;
|
|
163
|
+
context: TaskGraphFrameFilterContext | undefined;
|
|
164
|
+
}): boolean {
|
|
165
|
+
return TaskGraphFrameFilter(data);
|
|
166
|
+
}
|
|
167
|
+
|
|
159
168
|
/**
|
|
160
169
|
* MJServer's `TaskGraphObserver` — turns dispatcher frames into a PubSub publish.
|
|
161
170
|
*
|
|
@@ -189,9 +198,9 @@ export class TaskGraphFrameResolver {
|
|
|
189
198
|
@Subscription(() => TaskGraphFrameNotification, {
|
|
190
199
|
topics: TASK_GRAPH_FRAMES_TOPIC,
|
|
191
200
|
filter: (data: ResolverFilterData<TaskGraphFramePayload, TaskGraphFrameArgs, TaskGraphFrameFilterContext>) =>
|
|
192
|
-
|
|
201
|
+
TaskGraphFrameFilter(data),
|
|
193
202
|
})
|
|
194
|
-
taskGraphFrames(
|
|
203
|
+
taskGraphFrames( // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
195
204
|
@Root() payload: TaskGraphFramePayload,
|
|
196
205
|
@Arg('parentTaskId', () => ID) parentTaskId: string
|
|
197
206
|
): TaskGraphFrameNotification {
|
|
@@ -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
|
// ============================================================================
|
|
@@ -78,6 +78,19 @@ export class TransactionOutputType {
|
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Renders one refused transaction-group item for the server log, naming the position, entity and
|
|
83
|
+
* operation so an operator can tie the refusal back to the row the client sent.
|
|
84
|
+
*
|
|
85
|
+
* `CompleteMessage` rather than `Message` because a refusal can report itself through any of
|
|
86
|
+
* `Message`, `Error` or the `Errors` array — a validation failure populates only the last of the
|
|
87
|
+
* three, so reading `Message` alone logs an empty reason for exactly the case that matters most.
|
|
88
|
+
*/
|
|
89
|
+
function describeRefusedItem(index: number, item: TransactionItemInputType, entity: BaseEntity): string {
|
|
90
|
+
const reason = entity.LatestResult?.CompleteMessage?.trim();
|
|
91
|
+
return ` [${index}] ${item.OperationType} '${item.EntityName}': ${reason || 'refused without a reported reason'}`;
|
|
92
|
+
}
|
|
93
|
+
|
|
81
94
|
export class TransactionResolver extends ResolverBase {
|
|
82
95
|
/**
|
|
83
96
|
* Maps a TransactionGroup item's operation type onto the SAME API-key scope path the singular
|
|
@@ -123,8 +136,14 @@ export class TransactionResolver extends ResolverBase {
|
|
|
123
136
|
const tg = await md.CreateTransactionGroup();
|
|
124
137
|
const entityObjects: BaseEntity[] = [];
|
|
125
138
|
const objectValues: any[] = [];
|
|
139
|
+
// #4309: Save()/Delete() report a LOGICAL refusal by returning false — they do not throw —
|
|
140
|
+
// and a refused row is never enrolled, because TransactionGroup.AddTransaction() is reached
|
|
141
|
+
// only from inside ProviderToUse.Save()/Delete(). Discarding that boolean let a group whose
|
|
142
|
+
// rows were all refused arrive at Submit() empty, take its legitimate "nothing to do"
|
|
143
|
+
// branch, and report success for writes that never happened.
|
|
144
|
+
const refusals: string[] = [];
|
|
126
145
|
|
|
127
|
-
for (const item of group.Items) {
|
|
146
|
+
for (const [index, item] of group.Items.entries()) {
|
|
128
147
|
// instantiate a new entity object for the item
|
|
129
148
|
const entity = await md.GetEntityObject(item.EntityName, context.userPayload.userRecord);
|
|
130
149
|
entityObjects.push(entity); // save for later for mapping variables if needed
|
|
@@ -147,17 +166,51 @@ export class TransactionResolver extends ResolverBase {
|
|
|
147
166
|
objectValues.push(itemValues);
|
|
148
167
|
entity.SetMany(itemValues, true);
|
|
149
168
|
entity.TransactionGroup = tg;
|
|
150
|
-
await entity.Save()
|
|
169
|
+
if (!await entity.Save()) {
|
|
170
|
+
refusals.push(describeRefusedItem(index, item, entity));
|
|
171
|
+
}
|
|
151
172
|
break;
|
|
152
173
|
case "Delete":
|
|
153
174
|
await entity.InnerLoad(pkey);
|
|
154
|
-
|
|
175
|
+
// AWAITED: GetDataObject() is async, and pushing the un-awaited Promise put
|
|
176
|
+
// one into `objectValues` — which is `any[]`, so neither tsc nor a
|
|
177
|
+
// floating-promise lint could see it. PrepareReturnValue's Delete branch
|
|
178
|
+
// then stringified that Promise, and JSON.stringify(Promise) is "{}", so
|
|
179
|
+
// EVERY Delete in a transaction group reported an empty payload, successful
|
|
180
|
+
// ones included. Worse than losing the payload: GraphQLDataProvider's Delete
|
|
181
|
+
// transaction callback validates the commit with
|
|
182
|
+
// `pk.Value !== results[pk.FieldName]`, so "{}" made every key mismatch and
|
|
183
|
+
// reported 'Transaction failed to commit' for a delete that DID commit.
|
|
184
|
+
// Awaiting costs nothing here — DataObjectParams defaults
|
|
185
|
+
// includeRelatedEntityData to false, which guards the method's only awaited
|
|
186
|
+
// work, so with no params this is GetAll() plus a filter loop.
|
|
187
|
+
objectValues.push(await entity.GetDataObject());
|
|
155
188
|
entity.TransactionGroup = tg;
|
|
156
|
-
await entity.Delete()
|
|
189
|
+
if (!await entity.Delete()) {
|
|
190
|
+
refusals.push(describeRefusedItem(index, item, entity));
|
|
191
|
+
}
|
|
157
192
|
break;
|
|
158
193
|
}
|
|
159
194
|
}
|
|
160
195
|
|
|
196
|
+
// A refused row never enrolled, so submitting now would commit only the SURVIVORS and
|
|
197
|
+
// still report unqualified success. Nothing has been written at this point — enrolment
|
|
198
|
+
// is deferral, and the provider does not touch the database until Submit() — so
|
|
199
|
+
// returning here leaves the database exactly as we found it.
|
|
200
|
+
//
|
|
201
|
+
// The predicate is the RETURN VALUE, not whether the group ended up empty: a row that
|
|
202
|
+
// is not dirty also fails to enrol and correctly returns true, and an empty group
|
|
203
|
+
// legitimately means "nothing to do" for a caller that enrolled nothing. That is also
|
|
204
|
+
// why this belongs here rather than in TransactionGroupBase.Submit() — this is the only
|
|
205
|
+
// layer that still knows which row was refused and why.
|
|
206
|
+
if (refusals.length > 0) {
|
|
207
|
+
LogError(
|
|
208
|
+
`TransactionResolver::ExecuteTransactionGroup --- ${refusals.length} of ${group.Items.length} ` +
|
|
209
|
+
`item(s) were refused, so the group was not submitted:\n${refusals.join('\n')}`
|
|
210
|
+
);
|
|
211
|
+
return await this.PrepareReturnValue(false, entityObjects, objectValues, group);
|
|
212
|
+
}
|
|
213
|
+
|
|
161
214
|
// now, we need to set the variables
|
|
162
215
|
if (group.Variables && group.Variables.length > 0) {
|
|
163
216
|
for (const networkVar of group.Variables) {
|