@oneuptime/common 12.0.34 → 13.0.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/Models/DatabaseModels/Alert.ts +55 -0
- package/Models/DatabaseModels/CloudResource.ts +45 -7
- package/Models/DatabaseModels/CodeRepository.ts +85 -0
- package/Models/DatabaseModels/GlobalConfig.ts +12 -12
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +57 -7
- package/Models/DatabaseModels/GoogleSecOpsConnectionRun.ts +263 -0
- package/Models/DatabaseModels/Incident.ts +55 -0
- package/Models/DatabaseModels/Index.ts +16 -0
- package/Models/DatabaseModels/InventoryItem.ts +44 -1
- package/Models/DatabaseModels/NetworkDevice.ts +126 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +55 -0
- package/Models/DatabaseModels/User.ts +51 -2
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +43 -2
- package/Models/DatabaseModels/UserWebAuthn.ts +17 -0
- package/Models/DatabaseModels/VMwareResource.ts +1149 -0
- package/Models/DatabaseModels/VMwareVCenter.ts +1122 -0
- package/Models/DatabaseModels/VMwareVCenterFeed.ts +625 -0
- package/Models/DatabaseModels/VMwareVCenterLabelRule.ts +514 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerRule.ts +596 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +485 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +484 -0
- package/Models/DatabaseModels/WorkflowVariable.ts +22 -1
- package/Server/API/AIAgentDataAPI.ts +79 -4
- package/Server/API/AIAgentGitHubAPI.ts +523 -0
- package/Server/API/AIChatAPI.ts +20 -1
- package/Server/API/BillingAPI.ts +33 -0
- package/Server/API/DashboardAPI.ts +10 -0
- package/Server/API/GitHubAPI.ts +47 -5
- package/Server/API/GoogleSecOpsConnectionAPI.ts +79 -0
- package/Server/API/UserWebAuthnAPI.ts +21 -1
- package/Server/API/VMwareResourceAPI.ts +143 -0
- package/Server/EnvironmentConfig.ts +47 -16
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.ts +68 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.ts +636 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.ts +83 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
- package/Server/Infrastructure/Redis.ts +8 -8
- package/Server/Infrastructure/Status.ts +10 -4
- package/Server/Middleware/IdentityRateLimit.ts +101 -0
- package/Server/Services/AIRunService.ts +13 -0
- package/Server/Services/BillingPaymentMethodService.ts +99 -28
- package/Server/Services/BillingService.ts +287 -20
- package/Server/Services/CloudResourceInstanceService.ts +70 -0
- package/Server/Services/DatabaseService.ts +65 -13
- package/Server/Services/ExceptionAggregationService.ts +1 -0
- package/Server/Services/GoogleSecOpsConnectionRunService.ts +10 -0
- package/Server/Services/GoogleSecOpsConnectionService.ts +12 -0
- package/Server/Services/Index.ts +16 -0
- package/Server/Services/InventoryItemService.ts +31 -1
- package/Server/Services/LogAggregationService.ts +1 -0
- package/Server/Services/MetricAggregationService.ts +1 -0
- package/Server/Services/MobilePasskeyLoginService.ts +216 -0
- package/Server/Services/MonitorService.ts +51 -1
- package/Server/Services/MonitorTemplateService.ts +218 -35
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +481 -42
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +176 -2
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +87 -2
- package/Server/Services/NetworkDeviceService.ts +69 -0
- package/Server/Services/OpenTelemetryIngestService.ts +17 -0
- package/Server/Services/PayAsYouGoBillingService.ts +446 -0
- package/Server/Services/ProjectService.ts +46 -2
- package/Server/Services/ServerlessFunctionInstanceService.ts +71 -0
- package/Server/Services/TeamMemberService.ts +96 -36
- package/Server/Services/TelemetryIngestionKeyService.ts +80 -10
- package/Server/Services/TelemetryUsageBillingService.ts +95 -5
- package/Server/Services/TraceAggregationService.ts +5 -4
- package/Server/Services/UserNotificationRuleService.ts +76 -25
- package/Server/Services/UserWebAuthnService.ts +592 -133
- package/Server/Services/VMwareResourceService.ts +648 -0
- package/Server/Services/VMwareVCenterFeedService.ts +99 -0
- package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +240 -0
- package/Server/Services/VMwareVCenterLabelRuleService.ts +14 -0
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +252 -0
- package/Server/Services/VMwareVCenterOwnerRuleService.ts +14 -0
- package/Server/Services/VMwareVCenterOwnerTeamService.ts +139 -0
- package/Server/Services/VMwareVCenterOwnerUserService.ts +133 -0
- package/Server/Services/VMwareVCenterService.ts +629 -0
- package/Server/Services/WorkflowVariableService.ts +203 -0
- package/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.ts +17 -0
- package/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.ts +31 -1
- package/Server/Types/Database/Permissions/ReadPermission.ts +45 -5
- package/Server/Types/Database/QueryUtil.ts +56 -0
- package/Server/Types/Markdown.ts +93 -1
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +7 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.ts +341 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.ts +274 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.ts +375 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubConversation.ts +846 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.ts +360 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubRunReply.ts +421 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.ts +140 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.ts +906 -0
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +225 -17
- package/Server/Utils/DataSource/EgressGuard.ts +160 -15
- package/Server/Utils/Database/TruncateColumnValue.ts +1 -1
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +12 -1
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +35 -2
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +44 -0
- package/Server/Utils/LogRedaction.ts +2 -1
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +82 -35
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +31 -5
- package/Server/Utils/Monitor/MonitorAlert.ts +1 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +502 -38
- package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +82 -9
- package/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.ts +16 -7
- package/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.ts +29 -17
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +107 -48
- package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +26 -4
- package/Server/Utils/Monitor/MonitorResourceContext.ts +5 -3
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +14 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
- package/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.ts +158 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +27 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +28 -5
- package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +3 -3
- package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +14 -9
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +116 -84
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +594 -195
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +466 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +16 -1
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +2 -1
- package/Server/Utils/Telemetry/TelemetryEntity.ts +264 -10
- package/Server/Utils/Telemetry/VMwareSnapshotScan.ts +1352 -0
- package/Tests/App/Accounts/LoginPasskey.test.tsx +529 -0
- package/Tests/App/Accounts/MobilePasskey.test.tsx +620 -0
- package/Tests/App/Accounts/PasswordRequirements.test.tsx +254 -0
- package/Tests/App/Accounts/RegisterPassword.test.tsx +553 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +32 -0
- package/Tests/App/Dashboard/AdoptedDeviceDrawer.test.tsx +374 -0
- package/Tests/App/Dashboard/AskAiAvailability.test.ts +224 -0
- package/Tests/App/Dashboard/AskAiDisabled.test.tsx +432 -0
- package/Tests/App/Dashboard/BackupCodes.test.tsx +414 -0
- package/Tests/App/Dashboard/BillingPaidUsageFlow.test.tsx +530 -0
- package/Tests/App/Dashboard/BillingPaymentMethodForm.test.tsx +195 -0
- package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +199 -0
- package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +198 -0
- package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +215 -0
- package/Tests/App/Dashboard/CloudFleetSummary.test.ts +183 -0
- package/Tests/App/Dashboard/CloudFleetSummaryComponent.test.tsx +248 -0
- package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +215 -0
- package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +3 -0
- package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +441 -0
- package/Tests/App/Dashboard/DashboardLabelVariables.test.tsx +580 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +458 -0
- package/Tests/App/Dashboard/DashboardMonitorLabelVariable.test.tsx +438 -0
- package/Tests/App/Dashboard/DashboardToolbarPopupLayering.test.tsx +566 -0
- package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +5 -2
- package/Tests/App/Dashboard/DeviceAttachmentCard.test.tsx +273 -0
- package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +505 -0
- package/Tests/App/Dashboard/DiscoveryScanLivePage.test.tsx +376 -0
- package/Tests/App/Dashboard/DiscoveryScanLiveUpdates.test.tsx +642 -0
- package/Tests/App/Dashboard/DiscoveryScanProgress.test.tsx +267 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +69 -231
- package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +163 -0
- package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +244 -0
- package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +724 -0
- package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +401 -0
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +232 -0
- package/Tests/App/Dashboard/InventoryItems.test.tsx +201 -0
- package/Tests/App/Dashboard/InventoryTypeAndStatusFacets.test.tsx +798 -0
- package/Tests/App/Dashboard/MonitorTemplateSyncFields.test.tsx +539 -0
- package/Tests/App/Dashboard/NetworkTopologyLiveView.test.tsx +320 -0
- package/Tests/App/Dashboard/NetworkTopologyToolbar.test.tsx +275 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedEmptyState.test.tsx +975 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +63 -0
- package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +24 -7
- package/Tests/App/Dashboard/OnCallOverridePresentation.test.ts +496 -0
- package/Tests/App/Dashboard/OnCallScheduleOverrideClarity.test.tsx +677 -0
- package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +31 -3
- package/Tests/App/Dashboard/PaidUsageConsent.test.tsx +180 -0
- package/Tests/App/Dashboard/PasskeySettings.test.tsx +1220 -0
- package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +176 -275
- package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +380 -233
- package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +3 -23
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +1 -0
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +626 -0
- package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +348 -0
- package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +331 -0
- package/Tests/App/Dashboard/TwoFactorStatus.test.tsx +260 -0
- package/Tests/App/Dashboard/UserSettingsEmailPreferences.test.tsx +603 -0
- package/Tests/App/Dashboard/UserSettingsNotificationSettings.test.tsx +324 -0
- package/Tests/App/Dashboard/VMwareDashboardWidgets.test.ts +573 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +2 -0
- package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +768 -0
- package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +13 -4
- package/Tests/App/StatusPage/StatusPageOidcOrigin.test.tsx +223 -0
- package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +532 -40
- package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +19 -2
- package/Tests/Fixtures/MobilePasskeyUser.json +8 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +25 -6
- package/Tests/Models/DatabaseModels/VMwareModels.test.ts +1134 -0
- package/Tests/Models/InventoryItemStatus.test.ts +147 -0
- package/Tests/Models/NetworkDeviceMacAddressColumn.test.ts +294 -0
- package/Tests/Models/RunnerVersionLabel.test.ts +4 -2
- package/Tests/Server/API/AIChatProvidersAIEnabled.test.ts +259 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +31 -2
- package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +116 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +158 -1
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +13 -2
- package/Tests/Server/API/GitHubWebhookSignature.test.ts +368 -0
- package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +248 -0
- package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +330 -0
- package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +172 -0
- package/Tests/Server/API/VMwareResourceAPI.test.ts +546 -0
- package/Tests/Server/EnvironmentConfigValkey.test.ts +227 -0
- package/Tests/Server/Infrastructure/Postgres/AddMacAddressToNetworkDeviceMigration.test.ts +365 -0
- package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +62 -23
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupMetadataMigration.test.ts +85 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +34 -3
- package/Tests/Server/Infrastructure/ValkeyDeploymentConfig.test.ts +265 -0
- package/Tests/Server/Middleware/HttpMetricsMiddleware.test.ts +382 -0
- package/Tests/Server/Middleware/PasskeyRateLimit.test.ts +141 -0
- package/Tests/Server/Middleware/SCIMAuthorization.test.ts +525 -0
- package/Tests/Server/Services/AutoImportRuleRearmRecentScans.test.ts +343 -0
- package/Tests/Server/Services/AutoImportRuleWriteRearmsScans.test.ts +381 -0
- package/Tests/Server/Services/BillingPaymentMethodServiceSync.test.ts +175 -0
- package/Tests/Server/Services/BillingService.test.ts +26 -11
- package/Tests/Server/Services/BillingServiceMeteredPaymentAuthorization.test.ts +245 -0
- package/Tests/Server/Services/BillingServicePaymentMethodReads.test.ts +362 -0
- package/Tests/Server/Services/CloudResourceInstanceStalePrune.test.ts +188 -0
- package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +291 -56
- package/Tests/Server/Services/DatabaseServiceSortTiebreaker.test.ts +151 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +16 -2
- package/Tests/Server/Services/GoogleSecOpsDiagnosticsModel.test.ts +153 -0
- package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +13 -0
- package/Tests/Server/Services/InventoryItemManualCreate.test.ts +105 -0
- package/Tests/Server/Services/InventoryItemPromotionGate.test.ts +183 -0
- package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +36 -0
- package/Tests/Server/Services/InventoryUpsertTruncationGuard.test.ts +151 -0
- package/Tests/Server/Services/MobilePasskeyLoginIntegration.test.ts +231 -0
- package/Tests/Server/Services/MobilePasskeyLoginService.test.ts +315 -0
- package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +302 -0
- package/Tests/Server/Services/MonitorTemplateServiceCustomFieldSync.test.ts +502 -0
- package/Tests/Server/Services/MonitorTemplateServiceFieldSync.test.ts +994 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +1133 -81
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +22 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanRegistration.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceMacAddressNormalization.test.ts +572 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
- package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +857 -0
- package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +379 -0
- package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +99 -1
- package/Tests/Server/Services/ProjectServiceSubscriptionSeats.test.ts +134 -0
- package/Tests/Server/Services/ResourceFeedServices.test.ts +3 -2
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +32 -6
- package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +363 -175
- package/Tests/Server/Services/ServerlessFunctionInstanceStalePrune.test.ts +200 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +3 -0
- package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +762 -0
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +3 -0
- package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +72 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +17 -4
- package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +355 -0
- package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +41 -4
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +37 -0
- package/Tests/Server/Services/UserWebAuthnPasskeyIntegration.test.ts +401 -0
- package/Tests/Server/Services/UserWebAuthnPasskeyService.test.ts +769 -0
- package/Tests/Server/Services/UserWebAuthnUserVerification.test.ts +649 -0
- package/Tests/Server/Services/VMwareResourceService.test.ts +945 -0
- package/Tests/Server/Services/VMwareVCenterService.test.ts +722 -0
- package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +842 -0
- package/Tests/Server/TestingUtils/PasskeyHttpIntegration.ts +102 -0
- package/Tests/Server/TestingUtils/SecurityKey.ts +464 -0
- package/Tests/Server/TestingUtils/WebAuthnServiceMocks.ts +60 -0
- package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +573 -0
- package/Tests/Server/Types/Database/InventoryStatusPostgres.test.ts +368 -0
- package/Tests/Server/Types/Database/Permissions/ProjectCustomerSupportAccessColumn.test.ts +261 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +261 -14
- package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +95 -0
- package/Tests/Server/Types/Database/QueryUtilIncludesAnyOfGroups.test.ts +169 -0
- package/Tests/Server/Types/Database/QueryUtilIncludesAnyOfGroupsPostgres.test.ts +297 -0
- package/Tests/Server/Types/Markdown.test.ts +194 -1
- package/Tests/Server/Types/Workflow/Components/IncomingWebhookUtils.test.ts +279 -0
- package/Tests/Server/Types/Workflow/Components/TextToJson.test.ts +212 -0
- package/Tests/Server/Utils/CodeRepository/GitHubAgentTaskTrigger.test.ts +2101 -0
- package/Tests/Server/Utils/CodeRepository/GitHubCommandAuthorizer.test.ts +883 -0
- package/Tests/Server/Utils/CodeRepository/GitHubCommandParser.test.ts +1474 -0
- package/Tests/Server/Utils/CodeRepository/GitHubConversation.test.ts +1526 -0
- package/Tests/Server/Utils/CodeRepository/GitHubReplyComposer.test.ts +1389 -0
- package/Tests/Server/Utils/CodeRepository/GitHubRunReply.test.ts +1707 -0
- package/Tests/Server/Utils/CodeRepository/GitHubWebhookHandler.test.ts +2202 -0
- package/Tests/Server/Utils/CustomField/CustomFieldMappingRegistry.test.ts +436 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +559 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +896 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1 -1
- package/Tests/Server/Utils/EmailRollup/EmailRollupMetadataIntegration.test.ts +246 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +309 -4
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +6 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +185 -0
- package/Tests/Server/Utils/EventLoop.test.ts +359 -0
- package/Tests/Server/Utils/JsonWebToken.test.ts +30 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +33 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +2 -1
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +242 -0
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +13 -7
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +29 -0
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +30 -6
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +246 -0
- package/Tests/Server/Utils/Monitor/Criteria/TelemetryStepMetricAlias.test.ts +10 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +66 -1
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEmailEvalLogAgreement.test.ts +280 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +586 -10
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +570 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilderUnits.test.ts +30 -5
- package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageBuilderUnits.test.ts +68 -21
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +36 -19
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +60 -1
- package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +60 -0
- package/Tests/Server/Utils/Monitor/MonitorRootCauseTargetResolution.test.ts +423 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +6 -0
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.test.ts +573 -0
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +317 -0
- package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +46 -2
- package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +81 -45
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +711 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClickhouseIntegration.test.ts +223 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +69 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +838 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsErrorHandling.test.ts +241 -28
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +651 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +11 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +13 -12
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +112 -127
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsRequestContract.test.ts +12 -18
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsResponseParsing.test.ts +43 -0
- package/Tests/Server/Utils/Telemetry/ContextSpanProcessor.test.ts +281 -0
- package/Tests/Server/Utils/Telemetry/InventoryDuplicateIdentity.test.ts +316 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +691 -8
- package/Tests/Server/Utils/Telemetry/VMwareSnapshotScan.test.ts +1748 -0
- package/Tests/Types/Cloud/CloudPlatform.test.ts +574 -0
- package/Tests/Types/Database/IncludesAnyOfGroups.test.ts +106 -0
- package/Tests/Types/JSONFunctions.test.ts +40 -0
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +2 -0
- package/Tests/Types/Monitor/MonitorCriteriaMetricVariables.test.ts +9 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorStepInfraMonitorUtils.test.ts +53 -8
- package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +97 -0
- package/Tests/Types/Monitor/MonitorStepMetricViewConfigUtil.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorStepTemplateSyncFields.test.ts +107 -0
- package/Tests/Types/Monitor/MonitorTemplateSyncField.test.ts +172 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +2 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +1 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +9 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
- package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +131 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +10 -0
- package/Tests/Types/Monitor/VMwareAlertTemplates.test.ts +1608 -0
- package/Tests/Types/Monitor/VMwareMetricCatalog.test.ts +488 -0
- package/Tests/Types/NetworkAutomation/AutoImportRunMerge.test.ts +235 -0
- package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +66 -0
- package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +309 -1
- package/Tests/Types/OnCallDutyPolicy/OverrideProvenance.test.ts +295 -0
- package/Tests/Types/Runner/RunnerLiveStatus.test.ts +2 -2
- package/Tests/Types/SignupPassword.test.ts +205 -0
- package/Tests/Types/StatusPage/StatusPageLanguage.test.ts +44 -0
- package/Tests/Types/SupportedLanguages.test.ts +119 -0
- package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +19 -0
- package/Tests/Types/Telemetry/InventoryLiveness.test.ts +99 -0
- package/Tests/UI/ColorPickerBuild.test.ts +86 -0
- package/Tests/UI/Components/Breadcrumbs.test.tsx +32 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetail.test.tsx +160 -0
- package/Tests/UI/Components/Forms/ModelFormPreservesUserInput.test.tsx +937 -0
- package/Tests/UI/Components/Forms/ModelFormWriteOnlyColumnSelect.test.tsx +230 -0
- package/Tests/UI/Components/Forms/ValidationFormSteps.test.ts +3 -4
- package/Tests/UI/Components/LabelRuleImportExport.test.tsx +907 -0
- package/Tests/UI/Components/ModelTable/ModelTableCreateAfterEdit.test.tsx +514 -0
- package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +301 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +2 -1
- package/Tests/UI/Components/TooltipLazyContent.test.tsx +373 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsMessagingEndpointGuidance.test.tsx +43 -12
- package/Tests/UI/ReactDomBuild.test.ts +104 -0
- package/Tests/UI/ReactRouterSingletonBuild.test.ts +143 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +10 -2
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +514 -0
- package/Tests/UI/Rum/ReplayTimeFormat.test.ts +94 -0
- package/Tests/UI/Rum/ReplayUi.test.tsx +559 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +153 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +30 -0
- package/Tests/UI/Utils/DashboardStackingLayers.test.ts +197 -0
- package/Tests/UI/Utils/LabelRuleImportExport.test.ts +546 -0
- package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +109 -2
- package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +7 -2
- package/Tests/UI/Utils/UserEmailRegistrationStatus.test.tsx +295 -0
- package/Tests/UI/Utils/WebAuthn.test.ts +265 -0
- package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +5 -0
- package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +11 -1
- package/Tests/Utils/Dashboard/Components/DashboardVMwareListComponents.test.ts +548 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +17 -3
- package/Tests/Utils/Dashboard/LabelVariable.test.ts +257 -0
- package/Tests/Utils/Dashboard/VariableUrlState.test.ts +144 -14
- package/Tests/Utils/LabelRuleImportExport.test.ts +583 -0
- package/Tests/Utils/MetricUnitUtil.test.ts +81 -0
- package/Tests/Utils/Monitor/DeviceMacLearningUtil.test.ts +497 -0
- package/Tests/Utils/Monitor/MetricValueFormatter.test.ts +546 -0
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/MonitorTemplateCustomFieldUtil.test.ts +218 -0
- package/Tests/Utils/Monitor/MonitorTemplateSyncUtil.test.ts +590 -0
- package/Tests/Utils/Monitor/NetworkTopologyEndpointAdoption.test.ts +1755 -0
- package/Tests/Utils/NetworkAutomation/AutoImportRunChain.test.ts +320 -0
- package/Tests/Utils/RequestFailedDetails.test.ts +325 -0
- package/Tests/Utils/Telemetry/CloudInstanceIdentity.test.ts +255 -0
- package/Tests/Utils/Telemetry/EntityRelationship.test.ts +167 -0
- package/Tests/Utils/WebAuthnTestUtil.ts +79 -0
- package/Tests/__mocks__/simplewebauthn.js +33 -4
- package/Types/AI/CodeFixTaskContext.ts +122 -0
- package/Types/AI/CodeFixTaskType.ts +62 -0
- package/Types/Accounts/AccountsLanguage.ts +1 -0
- package/Types/AdminDashboard/AdminDashboardLanguage.ts +1 -0
- package/Types/BaseDatabase/IncludesAnyOfGroups.ts +77 -0
- package/Types/Calendar/CalendarEvent.ts +16 -0
- package/Types/Cloud/CloudPlatform.ts +372 -0
- package/Types/CodeRepository/GitHubCommand.ts +69 -0
- package/Types/Dashboard/DashboardComponentType.ts +2 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
- package/Types/Dashboard/DashboardComponents/DashboardMonitorListComponent.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.ts +23 -0
- package/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.ts +30 -0
- package/Types/Dashboard/DashboardLanguage.ts +1 -0
- package/Types/Dashboard/DashboardTemplates.ts +314 -0
- package/Types/Dashboard/DashboardVariable.ts +8 -0
- package/Types/Docs/DocsLanguage.ts +1 -0
- package/Types/Exception/EgressGuardException.ts +65 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/JSON.ts +4 -0
- package/Types/JSONFunctions.ts +16 -0
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +36 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +1 -0
- package/Types/Monitor/MonitorStep.ts +78 -17
- package/Types/Monitor/MonitorStepMetricViewConfigUtil.ts +1 -0
- package/Types/Monitor/MonitorStepVMwareMonitor.ts +127 -0
- package/Types/Monitor/MonitorTemplateSyncField.ts +291 -0
- package/Types/Monitor/MonitorType.ts +24 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +33 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +2 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +3 -0
- package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +158 -0
- package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +61 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +13 -0
- package/Types/Monitor/VMwareAlertTemplates.ts +1070 -0
- package/Types/Monitor/VMwareMetricCatalog.ts +914 -0
- package/Types/NetworkAutomation/RuleRunResult.ts +402 -13
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +29 -0
- package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +16 -0
- package/Types/Password.ts +84 -5
- package/Types/Permission.ts +265 -0
- package/Types/Probe/RequestFailedDetails.ts +7 -0
- package/Types/Runner/RunnerLiveStatus.ts +1 -1
- package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -0
- package/Types/SerializableObjectDictionary.ts +4 -0
- package/Types/StatusPage/StatusPageLanguage.ts +1 -0
- package/Types/Telemetry/EntityType.ts +21 -0
- package/Types/Telemetry/InventoryLiveness.ts +56 -0
- package/Types/Telemetry/ServiceType.ts +1 -0
- package/Typings/Index.d.ts +63 -0
- package/UI/Components/Breadcrumbs/Breadcrumbs.tsx +2 -2
- package/UI/Components/CSVFileUpload/CSVFileUpload.tsx +9 -2
- package/UI/Components/Calendar/Calendar.css +78 -0
- package/UI/Components/Calendar/Calendar.tsx +28 -3
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +46 -21
- package/UI/Components/Dashboard/DashboardVariableControl.tsx +285 -0
- package/UI/Components/Forms/BasicForm.tsx +44 -2
- package/UI/Components/Forms/Fields/ColorPicker.tsx +2 -1
- package/UI/Components/Forms/Fields/FormField.tsx +16 -3
- package/UI/Components/Forms/ModelForm.tsx +159 -5
- package/UI/Components/Forms/Types/Field.ts +8 -1
- package/UI/Components/Graphs/DayUptimeGraph.tsx +8 -10
- package/UI/Components/Icon/Icon.tsx +16 -0
- package/UI/Components/Input/Input.tsx +42 -7
- package/UI/Components/LabelRule/ImportLabelRulesModal.tsx +441 -0
- package/UI/Components/LabelRule/LabelRuleTable.tsx +142 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +22 -5
- package/UI/Components/ModelTable/ModelTable.tsx +14 -6
- package/UI/Components/MonitorGraphs/Uptime.tsx +17 -27
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +3 -1
- package/UI/Components/Tooltip/Tooltip.tsx +52 -6
- package/UI/Utils/DashboardStackingLayers.ts +85 -0
- package/UI/Utils/LabelRuleImportExport.ts +310 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +4 -3
- package/UI/Utils/TelemetryService.ts +4 -3
- package/UI/Utils/UseDashboardGridDnd.ts +4 -1
- package/UI/Utils/UserEmailRegistrationStatus.ts +33 -5
- package/UI/Utils/WebAuthn.ts +220 -0
- package/UI/esbuild-config.js +10 -0
- package/Utils/API.ts +34 -0
- package/Utils/Dashboard/Components/DashboardMonitorListComponent.ts +12 -1
- package/Utils/Dashboard/Components/DashboardVMwareHostListComponent.ts +38 -0
- package/Utils/Dashboard/Components/DashboardVMwareResourceListShared.ts +70 -0
- package/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.ts +76 -0
- package/Utils/Dashboard/Components/Index.ts +16 -0
- package/Utils/Dashboard/LabelVariable.ts +152 -0
- package/Utils/Dashboard/VariableUrlState.ts +27 -5
- package/Utils/LabelRuleImportExport.ts +496 -0
- package/Utils/MetricUnitUtil.ts +34 -0
- package/Utils/Monitor/DeviceMacLearningUtil.ts +177 -0
- package/Utils/Monitor/MetricValueFormatter.ts +342 -0
- package/Utils/Monitor/MonitorTemplateCustomFieldUtil.ts +124 -0
- package/Utils/Monitor/MonitorTemplateSyncUtil.ts +164 -0
- package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +7 -2
- package/Utils/Monitor/NetworkTopologyUtil.ts +693 -0
- package/Utils/NetworkAutomation/AutoImportRunChain.ts +138 -0
- package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +8 -0
- package/Utils/Telemetry/CloudInstanceIdentity.ts +94 -0
- package/Utils/Telemetry/EntityKey.ts +19 -0
- package/Utils/Telemetry/EntityRelationship.ts +19 -0
- package/build/dist/Models/DatabaseModels/Alert.js +54 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResource.js +44 -7
- package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +87 -0
- package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +12 -12
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +60 -7
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js +287 -0
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Incident.js +54 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +16 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/InventoryItem.js +34 -1
- package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +128 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +54 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +57 -4
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +47 -2
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js +18 -0
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareResource.js +1201 -0
- package/build/dist/Models/DatabaseModels/VMwareResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js +1149 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +22 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +63 -3
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentGitHubAPI.js +363 -0
- package/build/dist/Server/API/AIAgentGitHubAPI.js.map +1 -0
- package/build/dist/Server/API/AIChatAPI.js +19 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/BillingAPI.js +22 -0
- package/build/dist/Server/API/BillingAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +10 -0
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GitHubAPI.js +33 -5
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +56 -0
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -0
- package/build/dist/Server/API/UserWebAuthnAPI.js +17 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
- package/build/dist/Server/API/VMwareResourceAPI.js +106 -0
- package/build/dist/Server/API/VMwareResourceAPI.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +44 -12
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js +241 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Redis.js +8 -8
- package/build/dist/Server/Infrastructure/Redis.js.map +1 -1
- package/build/dist/Server/Infrastructure/Status.js +10 -4
- package/build/dist/Server/Infrastructure/Status.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +80 -0
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +14 -1
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/BillingPaymentMethodService.js +71 -21
- package/build/dist/Server/Services/BillingPaymentMethodService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +210 -22
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceInstanceService.js +66 -0
- package/build/dist/Server/Services/CloudResourceInstanceService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +58 -13
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js +9 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js.map +1 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +7 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +16 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemService.js +28 -1
- package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +1 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +1 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MobilePasskeyLoginService.js +137 -0
- package/build/dist/Server/Services/MobilePasskeyLoginService.js.map +1 -0
- package/build/dist/Server/Services/MonitorService.js +34 -1
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +167 -30
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +394 -38
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +142 -2
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +65 -0
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +54 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +28 -13
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PayAsYouGoBillingService.js +297 -0
- package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -0
- package/build/dist/Server/Services/ProjectService.js +38 -2
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionInstanceService.js +66 -0
- package/build/dist/Server/Services/ServerlessFunctionInstanceService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +85 -28
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +61 -10
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +62 -5
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +5 -4
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +60 -25
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserWebAuthnService.js +345 -113
- package/build/dist/Server/Services/UserWebAuthnService.js.map +1 -1
- package/build/dist/Server/Services/VMwareResourceService.js +395 -0
- package/build/dist/Server/Services/VMwareResourceService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterFeedService.js +89 -0
- package/build/dist/Server/Services/VMwareVCenterFeedService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js +197 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js +13 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +214 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js +129 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js +122 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterService.js +533 -0
- package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -0
- package/build/dist/Server/Services/WorkflowVariableService.js +169 -0
- package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js +12 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js +25 -2
- package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +29 -4
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryUtil.js +36 -0
- package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +75 -0
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js +275 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js +226 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js +297 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js +582 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js +275 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js +365 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js +103 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js +661 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +166 -18
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +99 -15
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +12 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +20 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +31 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +2 -1
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +58 -35
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +29 -5
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +382 -36
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +58 -9
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js +9 -3
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js +26 -12
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +74 -33
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +12 -4
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +5 -3
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +22 -9
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.js +114 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +25 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +21 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +21 -6
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +3 -3
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +9 -9
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +92 -71
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +428 -143
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +376 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +14 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +206 -14
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js +933 -0
- package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js +40 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskType.js +57 -0
- package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -1
- package/build/dist/Types/Accounts/AccountsLanguage.js +1 -0
- package/build/dist/Types/Accounts/AccountsLanguage.js.map +1 -1
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js +1 -0
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js.map +1 -1
- package/build/dist/Types/BaseDatabase/IncludesAnyOfGroups.js +54 -0
- package/build/dist/Types/BaseDatabase/IncludesAnyOfGroups.js.map +1 -0
- package/build/dist/Types/Cloud/CloudPlatform.js +277 -0
- package/build/dist/Types/Cloud/CloudPlatform.js.map +1 -0
- package/build/dist/Types/CodeRepository/GitHubCommand.js +52 -0
- package/build/dist/Types/CodeRepository/GitHubCommand.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js +286 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardVariable.js +1 -0
- package/build/dist/Types/Dashboard/DashboardVariable.js.map +1 -1
- package/build/dist/Types/Docs/DocsLanguage.js +1 -0
- package/build/dist/Types/Docs/DocsLanguage.js.map +1 -1
- package/build/dist/Types/Exception/EgressGuardException.js +59 -0
- package/build/dist/Types/Exception/EgressGuardException.js.map +1 -0
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/JSON.js +1 -0
- package/build/dist/Types/JSON.js.map +1 -1
- package/build/dist/Types/JSONFunctions.js +13 -0
- package/build/dist/Types/JSONFunctions.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +61 -18
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js +1 -0
- package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js +71 -0
- package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorTemplateSyncField.js +211 -0
- package/build/dist/Types/Monitor/MonitorTemplateSyncField.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +23 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +28 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +2 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +120 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +60 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -1
- package/build/dist/Types/Monitor/VMwareAlertTemplates.js +775 -0
- package/build/dist/Types/Monitor/VMwareAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/VMwareMetricCatalog.js +799 -0
- package/build/dist/Types/Monitor/VMwareMetricCatalog.js.map +1 -0
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js +291 -6
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +25 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +5 -0
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -1
- package/build/dist/Types/Password.js +63 -5
- package/build/dist/Types/Password.js.map +1 -1
- package/build/dist/Types/Permission.js +234 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Probe/RequestFailedDetails.js +7 -0
- package/build/dist/Types/Probe/RequestFailedDetails.js.map +1 -1
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js +2 -0
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js.map +1 -0
- package/build/dist/Types/SerializableObjectDictionary.js +4 -0
- package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
- package/build/dist/Types/StatusPage/StatusPageLanguage.js +1 -0
- package/build/dist/Types/StatusPage/StatusPageLanguage.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityType.js +21 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/InventoryLiveness.js +37 -0
- package/build/dist/Types/Telemetry/InventoryLiveness.js.map +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js +2 -2
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js +7 -0
- package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js.map +1 -1
- package/build/dist/UI/Components/Calendar/Calendar.js +24 -4
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +9 -2
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js +137 -0
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -0
- package/build/dist/UI/Components/Forms/BasicForm.js +28 -3
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -3
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +89 -6
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +5 -6
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +14 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +37 -8
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js +228 -0
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js.map +1 -0
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js +102 -0
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +15 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +13 -5
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +14 -15
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +2 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +33 -4
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Utils/DashboardStackingLayers.js +44 -0
- package/build/dist/UI/Utils/DashboardStackingLayers.js.map +1 -0
- package/build/dist/UI/Utils/LabelRuleImportExport.js +195 -0
- package/build/dist/UI/Utils/LabelRuleImportExport.js.map +1 -0
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +4 -4
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/TelemetryService.js +3 -2
- package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js +2 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -1
- package/build/dist/UI/Utils/UserEmailRegistrationStatus.js +21 -4
- package/build/dist/UI/Utils/UserEmailRegistrationStatus.js.map +1 -1
- package/build/dist/UI/Utils/WebAuthn.js +121 -0
- package/build/dist/UI/Utils/WebAuthn.js.map +1 -0
- package/build/dist/Utils/API.js +29 -0
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js +9 -1
- package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js +33 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js +54 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js +60 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/Dashboard/LabelVariable.js +96 -0
- package/build/dist/Utils/Dashboard/LabelVariable.js.map +1 -0
- package/build/dist/Utils/Dashboard/VariableUrlState.js +19 -4
- package/build/dist/Utils/Dashboard/VariableUrlState.js.map +1 -1
- package/build/dist/Utils/LabelRuleImportExport.js +356 -0
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -0
- package/build/dist/Utils/MetricUnitUtil.js +26 -0
- package/build/dist/Utils/MetricUnitUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/DeviceMacLearningUtil.js +112 -0
- package/build/dist/Utils/Monitor/DeviceMacLearningUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MetricValueFormatter.js +276 -0
- package/build/dist/Utils/Monitor/MetricValueFormatter.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorTemplateCustomFieldUtil.js +101 -0
- package/build/dist/Utils/Monitor/MonitorTemplateCustomFieldUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js +110 -0
- package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +7 -2
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +484 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkAutomation/AutoImportRunChain.js +59 -0
- package/build/dist/Utils/NetworkAutomation/AutoImportRunChain.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +6 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -1
- package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js +88 -0
- package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +15 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityRelationship.js +13 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
- package/jest.config.json +2 -0
- package/package.json +1 -1
- package/test-setup.sh +9 -9
- package/tsconfig.json +51 -11
- package/Tests/App/Dashboard/NotificationEmailPreferences.test.tsx +0 -399
|
@@ -0,0 +1,906 @@
|
|
|
1
|
+
import logger from "../../Logger";
|
|
2
|
+
import ObjectID from "../../../../Types/ObjectID";
|
|
3
|
+
import { JSONObject } from "../../../../Types/JSON";
|
|
4
|
+
import AIRun from "../../../../Models/DatabaseModels/AIRun";
|
|
5
|
+
import CodeRepository from "../../../../Models/DatabaseModels/CodeRepository";
|
|
6
|
+
import CodeFixTaskType from "../../../../Types/AI/CodeFixTaskType";
|
|
7
|
+
import { GitHubTaskContext } from "../../../../Types/AI/CodeFixTaskContext";
|
|
8
|
+
import GitHubCommandType, {
|
|
9
|
+
GitHubCommand,
|
|
10
|
+
GitHubCommandSurface,
|
|
11
|
+
isConversationalCommand,
|
|
12
|
+
} from "../../../../Types/CodeRepository/GitHubCommand";
|
|
13
|
+
import GlobalCache from "../../../Infrastructure/GlobalCache";
|
|
14
|
+
import GitHubAgentTaskTrigger from "./GitHubAgentTaskTrigger";
|
|
15
|
+
import GitHubCommandAuthorizer, {
|
|
16
|
+
GitHubAuthorizationOutcome,
|
|
17
|
+
GitHubAuthorizationResult,
|
|
18
|
+
} from "./GitHubCommandAuthorizer";
|
|
19
|
+
import GitHubCommandParser from "./GitHubCommandParser";
|
|
20
|
+
import GitHubConversation, {
|
|
21
|
+
GitHubPullRequestDetails,
|
|
22
|
+
GitHubReaction,
|
|
23
|
+
} from "./GitHubConversation";
|
|
24
|
+
import GitHubReplyComposer from "./GitHubReplyComposer";
|
|
25
|
+
import GitHubRunReply from "./GitHubRunReply";
|
|
26
|
+
import GitHubWebhookEvents, {
|
|
27
|
+
DEFAULT_GITHUB_TRIGGER_LABEL,
|
|
28
|
+
GitHubWebhookEvent,
|
|
29
|
+
GitHubWebhookRepository,
|
|
30
|
+
GitHubWebhookSender,
|
|
31
|
+
} from "./GitHubWebhookEvents";
|
|
32
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* The interactive half of the GitHub App: everything between a verified
|
|
36
|
+
* webhook and a queued agent run.
|
|
37
|
+
*
|
|
38
|
+
* Kept out of the express route on purpose. The route's job is signature
|
|
39
|
+
* verification and a 200; this file's job is the decision tree, and a decision
|
|
40
|
+
* tree that can only be exercised through an HTTP request does not get tested
|
|
41
|
+
* properly.
|
|
42
|
+
*
|
|
43
|
+
* Two rules run through all of it:
|
|
44
|
+
*
|
|
45
|
+
* - It NEVER throws at the caller. GitHub retries a delivery that did not
|
|
46
|
+
* get a 2xx, so an exception escaping here becomes a redelivery storm of
|
|
47
|
+
* the exact payload that just failed. Everything is caught and logged.
|
|
48
|
+
*
|
|
49
|
+
* - A command that was understood always gets a visible response — a
|
|
50
|
+
* reaction, a comment, or both. The one deliberate exception is a command
|
|
51
|
+
* from someone without write access, which gets a reaction and no comment;
|
|
52
|
+
* see GitHubCommandAuthorizer for why replying there would be a mistake.
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
// How long a processed delivery id is remembered, to swallow redeliveries.
|
|
56
|
+
const DELIVERY_DEDUPE_SECONDS: number = 60 * 60 * 6;
|
|
57
|
+
const DELIVERY_DEDUPE_NAMESPACE: string = "github-webhook-delivery";
|
|
58
|
+
|
|
59
|
+
export interface GitHubWebhookHandlingResult {
|
|
60
|
+
// True when this delivery started a run or wrote something to GitHub.
|
|
61
|
+
handled: boolean;
|
|
62
|
+
// A short machine-readable reason, for logs and tests.
|
|
63
|
+
outcome: string;
|
|
64
|
+
aiRunId?: ObjectID | undefined;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const NOT_HANDLED: (outcome: string) => GitHubWebhookHandlingResult = (
|
|
68
|
+
outcome: string,
|
|
69
|
+
): GitHubWebhookHandlingResult => {
|
|
70
|
+
return { handled: false, outcome: outcome };
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default class GitHubWebhookHandler {
|
|
74
|
+
/*
|
|
75
|
+
* Has this exact delivery been processed before?
|
|
76
|
+
*
|
|
77
|
+
* GitHub redelivers on any non-2xx and on manual replay, and a duplicate
|
|
78
|
+
* delivery must not produce a duplicate comment. The per-conversation run
|
|
79
|
+
* dedupe already stops a duplicate RUN, but it does not stop a duplicate
|
|
80
|
+
* acknowledgement, and two "on it" comments on one request reads as a bug.
|
|
81
|
+
*
|
|
82
|
+
* A cache outage answers "not seen": the run dedupe still holds, so the
|
|
83
|
+
* worst case is a repeated comment, and refusing to work while Redis is
|
|
84
|
+
* down would be a much larger outage than the one being avoided.
|
|
85
|
+
*/
|
|
86
|
+
@CaptureSpan()
|
|
87
|
+
public static async isDuplicateDelivery(
|
|
88
|
+
deliveryId: string | undefined,
|
|
89
|
+
): Promise<boolean> {
|
|
90
|
+
if (!deliveryId) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
const claimed: boolean = await GlobalCache.setStringIfNotExists(
|
|
96
|
+
DELIVERY_DEDUPE_NAMESPACE,
|
|
97
|
+
deliveryId,
|
|
98
|
+
"1",
|
|
99
|
+
{ expiresInSeconds: DELIVERY_DEDUPE_SECONDS },
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
return !claimed;
|
|
103
|
+
} catch (error) {
|
|
104
|
+
logger.debug(
|
|
105
|
+
`Could not check the GitHub webhook delivery fence, continuing: ${error}`,
|
|
106
|
+
);
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@CaptureSpan()
|
|
112
|
+
public static async handleEvent(data: {
|
|
113
|
+
event: string | undefined;
|
|
114
|
+
deliveryId: string | undefined;
|
|
115
|
+
payload: JSONObject;
|
|
116
|
+
}): Promise<GitHubWebhookHandlingResult> {
|
|
117
|
+
try {
|
|
118
|
+
if (!GitHubWebhookHandler.isInteractiveEvent(data.event)) {
|
|
119
|
+
return NOT_HANDLED("event-not-interactive");
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (await GitHubWebhookHandler.isDuplicateDelivery(data.deliveryId)) {
|
|
123
|
+
logger.debug(
|
|
124
|
+
`Ignoring a redelivered GitHub webhook (${data.deliveryId}).`,
|
|
125
|
+
);
|
|
126
|
+
return NOT_HANDLED("duplicate-delivery");
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
switch (data.event) {
|
|
130
|
+
case GitHubWebhookEvent.IssueComment:
|
|
131
|
+
case GitHubWebhookEvent.PullRequestReviewComment:
|
|
132
|
+
case GitHubWebhookEvent.PullRequestReview:
|
|
133
|
+
return await GitHubWebhookHandler.handleMention(data);
|
|
134
|
+
case GitHubWebhookEvent.Issues:
|
|
135
|
+
return await GitHubWebhookHandler.handleIssuesEvent(data);
|
|
136
|
+
case GitHubWebhookEvent.PullRequest:
|
|
137
|
+
return await GitHubWebhookHandler.handlePullRequestEvent(data);
|
|
138
|
+
default:
|
|
139
|
+
return NOT_HANDLED("event-not-interactive");
|
|
140
|
+
}
|
|
141
|
+
} catch (error) {
|
|
142
|
+
/*
|
|
143
|
+
* Swallowed on purpose — see the note at the top. A failure here has
|
|
144
|
+
* already been logged with its context; propagating it would turn one
|
|
145
|
+
* bad payload into an endless redelivery loop.
|
|
146
|
+
*/
|
|
147
|
+
logger.error(
|
|
148
|
+
`Failed to handle GitHub webhook event "${data.event}" (${data.deliveryId}):`,
|
|
149
|
+
);
|
|
150
|
+
logger.error(error);
|
|
151
|
+
|
|
152
|
+
/*
|
|
153
|
+
* Give the fence back. It is claimed before any work is attempted, so a
|
|
154
|
+
* transient failure — a database blip, a 502 from GitHub — would
|
|
155
|
+
* otherwise be permanent: GitHub's redelivery of the SAME delivery id
|
|
156
|
+
* arrives inside the six-hour window and is swallowed as a duplicate,
|
|
157
|
+
* and the command is lost with the user still looking at their comment.
|
|
158
|
+
*
|
|
159
|
+
* Releasing it risks a duplicate ACKNOWLEDGEMENT if the failure happened
|
|
160
|
+
* after one was posted. That is the better failure: the per-conversation
|
|
161
|
+
* run guard still stops a duplicate run, so the cost is one extra
|
|
162
|
+
* comment rather than a command that silently never happened.
|
|
163
|
+
*/
|
|
164
|
+
await GitHubWebhookHandler.releaseDelivery(data.deliveryId);
|
|
165
|
+
|
|
166
|
+
return NOT_HANDLED("error");
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/*
|
|
171
|
+
* Release a delivery fence so GitHub's retry of that delivery is processed.
|
|
172
|
+
* Only used on the failure path — see the note in handleEvent.
|
|
173
|
+
*/
|
|
174
|
+
private static async releaseDelivery(
|
|
175
|
+
deliveryId: string | undefined,
|
|
176
|
+
): Promise<void> {
|
|
177
|
+
if (!deliveryId) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
try {
|
|
182
|
+
await GlobalCache.deleteKey(DELIVERY_DEDUPE_NAMESPACE, deliveryId);
|
|
183
|
+
} catch (error) {
|
|
184
|
+
logger.debug(
|
|
185
|
+
`Could not release the GitHub webhook delivery fence for ${deliveryId}: ${error}`,
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
public static isInteractiveEvent(event: string | undefined): boolean {
|
|
191
|
+
return (
|
|
192
|
+
event === GitHubWebhookEvent.IssueComment ||
|
|
193
|
+
event === GitHubWebhookEvent.Issues ||
|
|
194
|
+
event === GitHubWebhookEvent.PullRequest ||
|
|
195
|
+
event === GitHubWebhookEvent.PullRequestReview ||
|
|
196
|
+
event === GitHubWebhookEvent.PullRequestReviewComment
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/*
|
|
201
|
+
* A comment somewhere in an issue or pull request conversation: the plain
|
|
202
|
+
* comment stream, an inline review comment on the diff, or the body of a
|
|
203
|
+
* submitted review. All three are the same interaction — a human wrote
|
|
204
|
+
* something that may mention the app — so they share a path.
|
|
205
|
+
*/
|
|
206
|
+
private static async handleMention(data: {
|
|
207
|
+
event: string | undefined;
|
|
208
|
+
deliveryId: string | undefined;
|
|
209
|
+
payload: JSONObject;
|
|
210
|
+
}): Promise<GitHubWebhookHandlingResult> {
|
|
211
|
+
const action: string | null = GitHubWebhookEvents.getAction(data.payload);
|
|
212
|
+
|
|
213
|
+
/*
|
|
214
|
+
* `created` covers a new comment; `submitted` a new review; `edited` a
|
|
215
|
+
* comment someone went back and added the mention to, which is a real way
|
|
216
|
+
* people ask. Every other action (deleted, dismissed) is not a request.
|
|
217
|
+
*/
|
|
218
|
+
if (action !== "created" && action !== "edited" && action !== "submitted") {
|
|
219
|
+
return NOT_HANDLED("action-not-actionable");
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const commentContainer: JSONObject | undefined =
|
|
223
|
+
(data.payload["comment"] as JSONObject) ||
|
|
224
|
+
(data.payload["review"] as JSONObject);
|
|
225
|
+
|
|
226
|
+
const body: string | undefined = commentContainer?.["body"]?.toString();
|
|
227
|
+
|
|
228
|
+
if (!body) {
|
|
229
|
+
return NOT_HANDLED("no-comment-body");
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/*
|
|
233
|
+
* On issue_comment GitHub sends the same event for both surfaces; on the
|
|
234
|
+
* review events the surface is always a pull request.
|
|
235
|
+
*/
|
|
236
|
+
const issue: JSONObject | undefined = data.payload["issue"] as JSONObject;
|
|
237
|
+
const pullRequest: JSONObject | undefined = data.payload[
|
|
238
|
+
"pull_request"
|
|
239
|
+
] as JSONObject;
|
|
240
|
+
|
|
241
|
+
const isPullRequest: boolean =
|
|
242
|
+
Boolean(pullRequest) || GitHubWebhookEvents.isPullRequestIssue(issue);
|
|
243
|
+
|
|
244
|
+
const conversationNumber: number | null = GitHubWebhookEvents.getNumber(
|
|
245
|
+
issue || pullRequest,
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
if (conversationNumber === null) {
|
|
249
|
+
return NOT_HANDLED("no-conversation-number");
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return GitHubWebhookHandler.runCommandFromText({
|
|
253
|
+
payload: data.payload,
|
|
254
|
+
deliveryId: data.deliveryId,
|
|
255
|
+
body: body,
|
|
256
|
+
surface: isPullRequest
|
|
257
|
+
? GitHubCommandSurface.PullRequest
|
|
258
|
+
: GitHubCommandSurface.Issue,
|
|
259
|
+
conversationNumber: conversationNumber,
|
|
260
|
+
triggerCommentId: (commentContainer?.["id"] as number) || undefined,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/*
|
|
265
|
+
* An issue assigned to the app's bot user, or labelled with the
|
|
266
|
+
* repository's trigger label.
|
|
267
|
+
*
|
|
268
|
+
* Both exist because GitHub does not offer one reliable way to hand work to
|
|
269
|
+
* an app. Assignment is the gesture people reach for first, but a GitHub
|
|
270
|
+
* App's bot user cannot be assigned from the web UI on most repositories, so
|
|
271
|
+
* a label is the mechanism that always works. Supporting both costs one
|
|
272
|
+
* branch and means the feature is never mysteriously unavailable.
|
|
273
|
+
*/
|
|
274
|
+
private static async handleIssuesEvent(data: {
|
|
275
|
+
event: string | undefined;
|
|
276
|
+
deliveryId: string | undefined;
|
|
277
|
+
payload: JSONObject;
|
|
278
|
+
}): Promise<GitHubWebhookHandlingResult> {
|
|
279
|
+
const action: string | null = GitHubWebhookEvents.getAction(data.payload);
|
|
280
|
+
const issue: JSONObject | undefined = data.payload["issue"] as JSONObject;
|
|
281
|
+
const issueNumber: number | null = GitHubWebhookEvents.getNumber(issue);
|
|
282
|
+
|
|
283
|
+
if (issueNumber === null) {
|
|
284
|
+
return NOT_HANDLED("no-issue-number");
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (GitHubWebhookEvents.isPullRequestIssue(issue)) {
|
|
288
|
+
// Pull requests arrive on the `pull_request` event; ignore the alias.
|
|
289
|
+
return NOT_HANDLED("issue-is-pull-request");
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/*
|
|
293
|
+
* Everything cheap first. Most `issues` deliveries are opened / edited /
|
|
294
|
+
* closed, and resolveContext costs a database read plus a GitHub
|
|
295
|
+
* permission call — spending that on every issue anyone touches in every
|
|
296
|
+
* connected repository is how an integration eats its own rate limit.
|
|
297
|
+
*/
|
|
298
|
+
if (action !== "assigned" && action !== "labeled") {
|
|
299
|
+
return NOT_HANDLED("action-not-actionable");
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
if (action === "assigned") {
|
|
303
|
+
const assigneeLogin: string | undefined = (
|
|
304
|
+
data.payload["assignee"] as JSONObject
|
|
305
|
+
)?.["login"]?.toString();
|
|
306
|
+
|
|
307
|
+
const appSlug: string | null = await GitHubConversation.getAppSlug();
|
|
308
|
+
|
|
309
|
+
if (
|
|
310
|
+
!appSlug ||
|
|
311
|
+
!assigneeLogin ||
|
|
312
|
+
assigneeLogin.toLowerCase() !==
|
|
313
|
+
GitHubConversation.toBotLogin(appSlug).toLowerCase()
|
|
314
|
+
) {
|
|
315
|
+
return NOT_HANDLED("assignee-is-not-this-app");
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const context: ResolvedWebhookContext | null =
|
|
320
|
+
await GitHubWebhookHandler.resolveContext(data.payload);
|
|
321
|
+
|
|
322
|
+
if (!context) {
|
|
323
|
+
return NOT_HANDLED("unresolvable-context");
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/*
|
|
327
|
+
* The label check needs the repository, so it is the one that has to wait
|
|
328
|
+
* until after resolveContext — the trigger label is per-repository
|
|
329
|
+
* configuration.
|
|
330
|
+
*/
|
|
331
|
+
if (action === "labeled") {
|
|
332
|
+
const triggerLabel: string =
|
|
333
|
+
context.authorization.codeRepository?.gitHubTriggerLabel?.trim() ||
|
|
334
|
+
DEFAULT_GITHUB_TRIGGER_LABEL;
|
|
335
|
+
|
|
336
|
+
const addedLabel: string | undefined = (
|
|
337
|
+
data.payload["label"] as JSONObject
|
|
338
|
+
)?.["name"]?.toString();
|
|
339
|
+
|
|
340
|
+
if (
|
|
341
|
+
!addedLabel ||
|
|
342
|
+
addedLabel.trim().toLowerCase() !== triggerLabel.toLowerCase()
|
|
343
|
+
) {
|
|
344
|
+
return NOT_HANDLED("label-is-not-the-trigger-label");
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/*
|
|
349
|
+
* Only now — with an assignment to this app or its own trigger label
|
|
350
|
+
* confirmed — is the app addressed, and only now is a comment about the
|
|
351
|
+
* switch being off something the person did anything to deserve.
|
|
352
|
+
*/
|
|
353
|
+
if (GitHubWebhookHandler.areCommandsDisabled(context)) {
|
|
354
|
+
return GitHubWebhookHandler.replyCommandsDisabled({
|
|
355
|
+
context: context,
|
|
356
|
+
conversationNumber: issueNumber,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/*
|
|
361
|
+
* Assignment and labelling carry no words, so the issue speaks for
|
|
362
|
+
* itself. The empty instruction is honest: the agent is told to read the
|
|
363
|
+
* issue rather than handed a sentence nobody wrote.
|
|
364
|
+
*/
|
|
365
|
+
return GitHubWebhookHandler.startRun({
|
|
366
|
+
context: context,
|
|
367
|
+
command: { commandType: GitHubCommandType.Implement, instruction: "" },
|
|
368
|
+
surface: GitHubCommandSurface.Issue,
|
|
369
|
+
conversationNumber: issueNumber,
|
|
370
|
+
triggerCommentId: undefined,
|
|
371
|
+
deliveryId: data.deliveryId,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// A review requested from the app's bot user on a pull request.
|
|
376
|
+
private static async handlePullRequestEvent(data: {
|
|
377
|
+
event: string | undefined;
|
|
378
|
+
deliveryId: string | undefined;
|
|
379
|
+
payload: JSONObject;
|
|
380
|
+
}): Promise<GitHubWebhookHandlingResult> {
|
|
381
|
+
if (GitHubWebhookEvents.getAction(data.payload) !== "review_requested") {
|
|
382
|
+
return NOT_HANDLED("action-not-actionable");
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
const pullRequestNumber: number | null = GitHubWebhookEvents.getNumber(
|
|
386
|
+
data.payload["pull_request"] as JSONObject,
|
|
387
|
+
);
|
|
388
|
+
|
|
389
|
+
if (pullRequestNumber === null) {
|
|
390
|
+
return NOT_HANDLED("no-pull-request-number");
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
const requestedLogin: string | undefined = (
|
|
394
|
+
data.payload["requested_reviewer"] as JSONObject
|
|
395
|
+
)?.["login"]?.toString();
|
|
396
|
+
|
|
397
|
+
const appSlug: string | null = await GitHubConversation.getAppSlug();
|
|
398
|
+
|
|
399
|
+
if (
|
|
400
|
+
!appSlug ||
|
|
401
|
+
!requestedLogin ||
|
|
402
|
+
requestedLogin.toLowerCase() !==
|
|
403
|
+
GitHubConversation.toBotLogin(appSlug).toLowerCase()
|
|
404
|
+
) {
|
|
405
|
+
return NOT_HANDLED("reviewer-is-not-this-app");
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
const context: ResolvedWebhookContext | null =
|
|
409
|
+
await GitHubWebhookHandler.resolveContext(data.payload);
|
|
410
|
+
|
|
411
|
+
if (!context) {
|
|
412
|
+
return NOT_HANDLED("unresolvable-context");
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
if (GitHubWebhookHandler.areCommandsDisabled(context)) {
|
|
416
|
+
return GitHubWebhookHandler.replyCommandsDisabled({
|
|
417
|
+
context: context,
|
|
418
|
+
conversationNumber: pullRequestNumber,
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
return GitHubWebhookHandler.startRun({
|
|
423
|
+
context: context,
|
|
424
|
+
command: { commandType: GitHubCommandType.Review, instruction: "" },
|
|
425
|
+
surface: GitHubCommandSurface.PullRequest,
|
|
426
|
+
conversationNumber: pullRequestNumber,
|
|
427
|
+
triggerCommentId: undefined,
|
|
428
|
+
deliveryId: data.deliveryId,
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/*
|
|
433
|
+
* Parse a comment, authorize its author, and either answer it or start work.
|
|
434
|
+
*/
|
|
435
|
+
private static async runCommandFromText(data: {
|
|
436
|
+
payload: JSONObject;
|
|
437
|
+
deliveryId: string | undefined;
|
|
438
|
+
body: string;
|
|
439
|
+
surface: GitHubCommandSurface;
|
|
440
|
+
conversationNumber: number;
|
|
441
|
+
triggerCommentId: number | undefined;
|
|
442
|
+
}): Promise<GitHubWebhookHandlingResult> {
|
|
443
|
+
const appSlug: string | null = await GitHubConversation.getAppSlug();
|
|
444
|
+
|
|
445
|
+
if (!appSlug) {
|
|
446
|
+
logger.warn(
|
|
447
|
+
"A GitHub comment arrived but this instance cannot resolve its own app slug — set GITHUB_APP_NAME or check the app credentials.",
|
|
448
|
+
);
|
|
449
|
+
return NOT_HANDLED("no-app-slug");
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
const command: GitHubCommand | null = GitHubCommandParser.parse({
|
|
453
|
+
body: data.body,
|
|
454
|
+
appSlug: appSlug,
|
|
455
|
+
surface: data.surface,
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
if (!command) {
|
|
459
|
+
// By far the common case: an ordinary comment that never mentions us.
|
|
460
|
+
return NOT_HANDLED("no-mention");
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
const context: ResolvedWebhookContext | null =
|
|
464
|
+
await GitHubWebhookHandler.resolveContext(data.payload);
|
|
465
|
+
|
|
466
|
+
if (!context) {
|
|
467
|
+
return NOT_HANDLED("unresolvable-context");
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
if (GitHubWebhookHandler.areCommandsDisabled(context)) {
|
|
471
|
+
return GitHubWebhookHandler.replyCommandsDisabled({
|
|
472
|
+
context: context,
|
|
473
|
+
conversationNumber: data.conversationNumber,
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
if (
|
|
478
|
+
!GitHubCommandParser.isSupportedOnSurface({
|
|
479
|
+
commandType: command.commandType,
|
|
480
|
+
surface: data.surface,
|
|
481
|
+
})
|
|
482
|
+
) {
|
|
483
|
+
await GitHubWebhookHandler.reply({
|
|
484
|
+
context: context,
|
|
485
|
+
conversationNumber: data.conversationNumber,
|
|
486
|
+
body: GitHubReplyComposer.unsupportedOnSurface({
|
|
487
|
+
commandType: command.commandType,
|
|
488
|
+
appSlug: appSlug,
|
|
489
|
+
}),
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
return { handled: true, outcome: "unsupported-on-surface" };
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
if (isConversationalCommand(command.commandType)) {
|
|
496
|
+
return GitHubWebhookHandler.answerConversationalCommand({
|
|
497
|
+
context: context,
|
|
498
|
+
command: command,
|
|
499
|
+
appSlug: appSlug,
|
|
500
|
+
conversationNumber: data.conversationNumber,
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
return GitHubWebhookHandler.startRun({
|
|
505
|
+
context: context,
|
|
506
|
+
command: command,
|
|
507
|
+
surface: data.surface,
|
|
508
|
+
conversationNumber: data.conversationNumber,
|
|
509
|
+
triggerCommentId: data.triggerCommentId,
|
|
510
|
+
deliveryId: data.deliveryId,
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/*
|
|
515
|
+
* help / status / cancel. None of them costs an agent run, so none of them
|
|
516
|
+
* is subject to the fix-run budget — and all of them are answered even when
|
|
517
|
+
* the repository has commands switched off, because "why is nothing
|
|
518
|
+
* happening?" is exactly the question those replies exist to answer.
|
|
519
|
+
*/
|
|
520
|
+
private static async answerConversationalCommand(data: {
|
|
521
|
+
context: ResolvedWebhookContext;
|
|
522
|
+
command: GitHubCommand;
|
|
523
|
+
appSlug: string;
|
|
524
|
+
conversationNumber: number;
|
|
525
|
+
}): Promise<GitHubWebhookHandlingResult> {
|
|
526
|
+
const codeRepository: CodeRepository | undefined =
|
|
527
|
+
data.context.authorization.codeRepository;
|
|
528
|
+
|
|
529
|
+
if (data.command.commandType === GitHubCommandType.Help) {
|
|
530
|
+
await GitHubWebhookHandler.reply({
|
|
531
|
+
context: data.context,
|
|
532
|
+
conversationNumber: data.conversationNumber,
|
|
533
|
+
body: GitHubReplyComposer.help({ appSlug: data.appSlug }),
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
return { handled: true, outcome: "help" };
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
if (!codeRepository?.id || !codeRepository.projectId) {
|
|
540
|
+
return NOT_HANDLED("no-repository-for-conversational-command");
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
if (data.command.commandType === GitHubCommandType.Status) {
|
|
544
|
+
const runs: Array<AIRun> =
|
|
545
|
+
await GitHubAgentTaskTrigger.findNonTerminalRunsForConversation({
|
|
546
|
+
projectId: codeRepository.projectId,
|
|
547
|
+
codeRepositoryId: codeRepository.id,
|
|
548
|
+
conversationNumber: data.conversationNumber,
|
|
549
|
+
});
|
|
550
|
+
|
|
551
|
+
await GitHubWebhookHandler.reply({
|
|
552
|
+
context: data.context,
|
|
553
|
+
conversationNumber: data.conversationNumber,
|
|
554
|
+
body: GitHubReplyComposer.status({
|
|
555
|
+
runDescriptions: runs.map((run: AIRun) => {
|
|
556
|
+
return GitHubRunReply.describeLiveRun(run);
|
|
557
|
+
}),
|
|
558
|
+
runUrlBase: GitHubRunReply.buildProjectRunsUrl(
|
|
559
|
+
codeRepository.projectId,
|
|
560
|
+
),
|
|
561
|
+
}),
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
return { handled: true, outcome: "status" };
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
const cancelledCount: number =
|
|
568
|
+
await GitHubAgentTaskTrigger.cancelRunsForConversation({
|
|
569
|
+
projectId: codeRepository.projectId,
|
|
570
|
+
codeRepositoryId: codeRepository.id,
|
|
571
|
+
conversationNumber: data.conversationNumber,
|
|
572
|
+
});
|
|
573
|
+
|
|
574
|
+
await GitHubWebhookHandler.reply({
|
|
575
|
+
context: data.context,
|
|
576
|
+
conversationNumber: data.conversationNumber,
|
|
577
|
+
body: GitHubReplyComposer.cancelled({ cancelledCount: cancelledCount }),
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
return { handled: true, outcome: "cancel" };
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
/*
|
|
584
|
+
* Queue the agent run and acknowledge it in the thread.
|
|
585
|
+
*
|
|
586
|
+
* A Revise or Review reads the pull request first, because the run needs the
|
|
587
|
+
* head branch it must push to — captured HERE, at trigger time, so that a
|
|
588
|
+
* force-push between the comment and the agent claiming the work cannot
|
|
589
|
+
* silently redirect it at a different branch.
|
|
590
|
+
*/
|
|
591
|
+
private static async startRun(data: {
|
|
592
|
+
context: ResolvedWebhookContext;
|
|
593
|
+
command: GitHubCommand;
|
|
594
|
+
surface: GitHubCommandSurface;
|
|
595
|
+
conversationNumber: number;
|
|
596
|
+
triggerCommentId: number | undefined;
|
|
597
|
+
deliveryId: string | undefined;
|
|
598
|
+
}): Promise<GitHubWebhookHandlingResult> {
|
|
599
|
+
const codeRepository: CodeRepository | undefined =
|
|
600
|
+
data.context.authorization.codeRepository;
|
|
601
|
+
|
|
602
|
+
if (!codeRepository?.id || !codeRepository.projectId) {
|
|
603
|
+
return NOT_HANDLED("no-repository");
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
const taskType: CodeFixTaskType | null =
|
|
607
|
+
GitHubAgentTaskTrigger.getTaskTypeForCommand(data.command.commandType);
|
|
608
|
+
|
|
609
|
+
if (!taskType) {
|
|
610
|
+
return NOT_HANDLED("command-has-no-task-type");
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
const isPullRequestCommand: boolean =
|
|
614
|
+
data.surface === GitHubCommandSurface.PullRequest;
|
|
615
|
+
|
|
616
|
+
let pullRequestHeadRefName: string | undefined = undefined;
|
|
617
|
+
let isPullRequestFromFork: boolean = false;
|
|
618
|
+
|
|
619
|
+
if (isPullRequestCommand) {
|
|
620
|
+
const pullRequest: GitHubPullRequestDetails =
|
|
621
|
+
await GitHubConversation.getPullRequestDetails({
|
|
622
|
+
installationId: data.context.installationId,
|
|
623
|
+
organizationName: data.context.repository.organizationName,
|
|
624
|
+
repositoryName: data.context.repository.repositoryName,
|
|
625
|
+
pullRequestNumber: data.conversationNumber,
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
/*
|
|
629
|
+
* A merged or closed pull request has nothing left to revise, and a
|
|
630
|
+
* review of it would land on a thread nobody is reading. Say so rather
|
|
631
|
+
* than spending a run to discover it.
|
|
632
|
+
*/
|
|
633
|
+
if (pullRequest.state !== "open") {
|
|
634
|
+
await GitHubWebhookHandler.reply({
|
|
635
|
+
context: data.context,
|
|
636
|
+
conversationNumber: data.conversationNumber,
|
|
637
|
+
body: GitHubReplyComposer.refusal({
|
|
638
|
+
reason:
|
|
639
|
+
"This pull request is already closed, so there is nothing for me to do here.",
|
|
640
|
+
}),
|
|
641
|
+
});
|
|
642
|
+
|
|
643
|
+
return { handled: true, outcome: "pull-request-not-open" };
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
isPullRequestFromFork = GitHubConversation.isFromFork({
|
|
647
|
+
headRepositoryFullName: pullRequest.headRepositoryFullName,
|
|
648
|
+
organizationName: data.context.repository.organizationName,
|
|
649
|
+
repositoryName: data.context.repository.repositoryName,
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
/*
|
|
653
|
+
* A fork's branch is in a repository this installation cannot write to.
|
|
654
|
+
* Reviewing one is fine — reviews are written on the BASE repository's
|
|
655
|
+
* pull request — but revising one is not, and finding that out after a
|
|
656
|
+
* clone and a full agent run would waste the budget and end in a
|
|
657
|
+
* confusing push error. Refuse up front and say why.
|
|
658
|
+
*/
|
|
659
|
+
if (
|
|
660
|
+
data.command.commandType === GitHubCommandType.Revise &&
|
|
661
|
+
isPullRequestFromFork
|
|
662
|
+
) {
|
|
663
|
+
await GitHubWebhookHandler.reply({
|
|
664
|
+
context: data.context,
|
|
665
|
+
conversationNumber: data.conversationNumber,
|
|
666
|
+
body: GitHubReplyComposer.refusal({
|
|
667
|
+
reason:
|
|
668
|
+
"This pull request comes from a fork, so I cannot push to its branch. I can still review it — ask me to review instead, or push the branch to this repository if you want me to revise it.",
|
|
669
|
+
}),
|
|
670
|
+
});
|
|
671
|
+
|
|
672
|
+
return { handled: true, outcome: "pull-request-from-fork" };
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
/*
|
|
676
|
+
* Pin the head branch only when it is actually reachable. For a fork it
|
|
677
|
+
* is not, and pinning it would send the review after a branch that does
|
|
678
|
+
* not exist here — which the clone would quietly answer with the default
|
|
679
|
+
* branch. Leaving it unset says "work from the base", which is the
|
|
680
|
+
* honest description of what a fork review can do.
|
|
681
|
+
*/
|
|
682
|
+
if (!isPullRequestFromFork) {
|
|
683
|
+
pullRequestHeadRefName = pullRequest.headRefName;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
const github: GitHubTaskContext = {
|
|
688
|
+
codeRepositoryId: codeRepository.id.toString(),
|
|
689
|
+
installationId: data.context.installationId,
|
|
690
|
+
organizationName: data.context.repository.organizationName,
|
|
691
|
+
repositoryName: data.context.repository.repositoryName,
|
|
692
|
+
commandType: data.command.commandType,
|
|
693
|
+
instruction: data.command.instruction,
|
|
694
|
+
...(isPullRequestCommand
|
|
695
|
+
? { pullRequestNumber: data.conversationNumber }
|
|
696
|
+
: { issueNumber: data.conversationNumber }),
|
|
697
|
+
...(pullRequestHeadRefName
|
|
698
|
+
? { pullRequestHeadRefName: pullRequestHeadRefName }
|
|
699
|
+
: {}),
|
|
700
|
+
...(isPullRequestCommand
|
|
701
|
+
? { isPullRequestFromFork: isPullRequestFromFork }
|
|
702
|
+
: {}),
|
|
703
|
+
...(data.triggerCommentId
|
|
704
|
+
? { triggerCommentId: data.triggerCommentId }
|
|
705
|
+
: {}),
|
|
706
|
+
...(data.context.sender
|
|
707
|
+
? { triggeredByLogin: data.context.sender.login }
|
|
708
|
+
: {}),
|
|
709
|
+
...(data.deliveryId ? { webhookDeliveryId: data.deliveryId } : {}),
|
|
710
|
+
};
|
|
711
|
+
|
|
712
|
+
let run: AIRun;
|
|
713
|
+
|
|
714
|
+
try {
|
|
715
|
+
run = await GitHubAgentTaskTrigger.enqueueGitHubCodeFixRun({
|
|
716
|
+
projectId: codeRepository.projectId,
|
|
717
|
+
taskType: taskType,
|
|
718
|
+
github: github,
|
|
719
|
+
});
|
|
720
|
+
} catch (error) {
|
|
721
|
+
/*
|
|
722
|
+
* "Already working on this" and "over the daily budget" are both normal
|
|
723
|
+
* answers, not failures — and both are useless unless the person who
|
|
724
|
+
* asked can read them, so they go into the thread verbatim.
|
|
725
|
+
*/
|
|
726
|
+
await GitHubWebhookHandler.reply({
|
|
727
|
+
context: data.context,
|
|
728
|
+
conversationNumber: data.conversationNumber,
|
|
729
|
+
body: GitHubReplyComposer.refusal({
|
|
730
|
+
reason:
|
|
731
|
+
error instanceof Error
|
|
732
|
+
? error.message
|
|
733
|
+
: "I could not start that just now.",
|
|
734
|
+
}),
|
|
735
|
+
});
|
|
736
|
+
|
|
737
|
+
return { handled: true, outcome: "refused" };
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
const acknowledgementCommentId: number | null =
|
|
741
|
+
await GitHubRunReply.acknowledge({
|
|
742
|
+
aiRunId: run.id!,
|
|
743
|
+
projectId: codeRepository.projectId,
|
|
744
|
+
projectName: data.context.authorization.projectName,
|
|
745
|
+
github: github,
|
|
746
|
+
});
|
|
747
|
+
|
|
748
|
+
if (acknowledgementCommentId) {
|
|
749
|
+
/*
|
|
750
|
+
* The run is already queued and the comment is already posted; this only
|
|
751
|
+
* records which comment to EDIT later. A failure here costs one extra
|
|
752
|
+
* comment when the run finishes — it must not turn a successful command
|
|
753
|
+
* into an "error" outcome that releases the delivery fence and invites
|
|
754
|
+
* GitHub to replay the whole thing.
|
|
755
|
+
*/
|
|
756
|
+
try {
|
|
757
|
+
await GitHubAgentTaskTrigger.recordAcknowledgementComment({
|
|
758
|
+
aiRunId: run.id!,
|
|
759
|
+
github: github,
|
|
760
|
+
acknowledgementCommentId: acknowledgementCommentId,
|
|
761
|
+
});
|
|
762
|
+
} catch (error) {
|
|
763
|
+
logger.warn(
|
|
764
|
+
`Could not record the acknowledgement comment for run ${run.id?.toString()}: ${error}`,
|
|
765
|
+
);
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
logger.info(
|
|
770
|
+
`Queued a ${taskType} run (${run.id?.toString()}) from GitHub for ${data.context.repository.organizationName}/${data.context.repository.repositoryName}#${data.conversationNumber}.`,
|
|
771
|
+
);
|
|
772
|
+
|
|
773
|
+
return { handled: true, outcome: "queued", aiRunId: run.id || undefined };
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/*
|
|
777
|
+
* Everything a command needs from the payload, once. Returns null — and
|
|
778
|
+
* says nothing in the thread — whenever the app has no business answering:
|
|
779
|
+
* a malformed payload, a bot author, an unconnected repository, or a
|
|
780
|
+
* commenter without write access.
|
|
781
|
+
*/
|
|
782
|
+
private static async resolveContext(
|
|
783
|
+
payload: JSONObject,
|
|
784
|
+
): Promise<ResolvedWebhookContext | null> {
|
|
785
|
+
const repository: GitHubWebhookRepository | null =
|
|
786
|
+
GitHubWebhookEvents.getRepository(payload);
|
|
787
|
+
const installationId: string | null =
|
|
788
|
+
GitHubWebhookEvents.getInstallationId(payload);
|
|
789
|
+
const sender: GitHubWebhookSender | null =
|
|
790
|
+
GitHubWebhookEvents.getSender(payload);
|
|
791
|
+
|
|
792
|
+
if (!repository || !installationId || !sender) {
|
|
793
|
+
return null;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
const authorization: GitHubAuthorizationResult =
|
|
797
|
+
await GitHubCommandAuthorizer.authorize({
|
|
798
|
+
organizationName: repository.organizationName,
|
|
799
|
+
repositoryName: repository.repositoryName,
|
|
800
|
+
installationId: installationId,
|
|
801
|
+
senderLogin: sender.login,
|
|
802
|
+
senderType: sender.type,
|
|
803
|
+
});
|
|
804
|
+
|
|
805
|
+
if (authorization.outcome === GitHubAuthorizationOutcome.Ignore) {
|
|
806
|
+
return null;
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
if (
|
|
810
|
+
authorization.outcome ===
|
|
811
|
+
GitHubAuthorizationOutcome.InsufficientPermission
|
|
812
|
+
) {
|
|
813
|
+
/*
|
|
814
|
+
* A reaction, never a comment. See GitHubCommandAuthorizer: a comment
|
|
815
|
+
* here would let any GitHub account use this app to post in a
|
|
816
|
+
* repository it has no write access to.
|
|
817
|
+
*/
|
|
818
|
+
const commentId: number | undefined = (
|
|
819
|
+
payload["comment"] as JSONObject
|
|
820
|
+
)?.["id"] as number | undefined;
|
|
821
|
+
|
|
822
|
+
if (commentId) {
|
|
823
|
+
await GitHubConversation.addReactionToComment({
|
|
824
|
+
installationId: installationId,
|
|
825
|
+
organizationName: repository.organizationName,
|
|
826
|
+
repositoryName: repository.repositoryName,
|
|
827
|
+
commentId: commentId,
|
|
828
|
+
reaction: GitHubReaction.Confused,
|
|
829
|
+
});
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
return null;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
/*
|
|
836
|
+
* CommandsDisabled is returned rather than answered here. Whether it
|
|
837
|
+
* deserves a comment depends on whether the app was actually addressed,
|
|
838
|
+
* and only the caller knows that: a mention was, and a trigger label was —
|
|
839
|
+
* but this runs for EVERY label added to EVERY issue, and replying at this
|
|
840
|
+
* point turned a repository with the switch off into one where labelling
|
|
841
|
+
* anything produced a bot comment.
|
|
842
|
+
*/
|
|
843
|
+
return {
|
|
844
|
+
repository: repository,
|
|
845
|
+
installationId: installationId,
|
|
846
|
+
sender: sender,
|
|
847
|
+
authorization: authorization,
|
|
848
|
+
};
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
/*
|
|
852
|
+
* Answer a command the repository has switched off. Called only once the
|
|
853
|
+
* caller has established that the app really was addressed.
|
|
854
|
+
*/
|
|
855
|
+
private static async replyCommandsDisabled(data: {
|
|
856
|
+
context: ResolvedWebhookContext;
|
|
857
|
+
conversationNumber: number;
|
|
858
|
+
}): Promise<GitHubWebhookHandlingResult> {
|
|
859
|
+
await GitHubWebhookHandler.reply({
|
|
860
|
+
context: data.context,
|
|
861
|
+
conversationNumber: data.conversationNumber,
|
|
862
|
+
body: GitHubReplyComposer.refusal({
|
|
863
|
+
reason:
|
|
864
|
+
data.context.authorization.reason ||
|
|
865
|
+
"GitHub commands are switched off for this repository.",
|
|
866
|
+
}),
|
|
867
|
+
});
|
|
868
|
+
|
|
869
|
+
return { handled: true, outcome: "commands-disabled" };
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
private static areCommandsDisabled(context: ResolvedWebhookContext): boolean {
|
|
873
|
+
return (
|
|
874
|
+
context.authorization.outcome ===
|
|
875
|
+
GitHubAuthorizationOutcome.CommandsDisabled
|
|
876
|
+
);
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
// Post one comment, and never let a failed comment fail the delivery.
|
|
880
|
+
private static async reply(data: {
|
|
881
|
+
context: ResolvedWebhookContext;
|
|
882
|
+
conversationNumber: number;
|
|
883
|
+
body: string;
|
|
884
|
+
}): Promise<void> {
|
|
885
|
+
try {
|
|
886
|
+
await GitHubConversation.createIssueComment({
|
|
887
|
+
installationId: data.context.installationId,
|
|
888
|
+
organizationName: data.context.repository.organizationName,
|
|
889
|
+
repositoryName: data.context.repository.repositoryName,
|
|
890
|
+
issueNumber: data.conversationNumber,
|
|
891
|
+
body: data.body,
|
|
892
|
+
});
|
|
893
|
+
} catch (error) {
|
|
894
|
+
logger.warn(
|
|
895
|
+
`Could not reply in ${data.context.repository.organizationName}/${data.context.repository.repositoryName}#${data.conversationNumber}: ${error}`,
|
|
896
|
+
);
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
interface ResolvedWebhookContext {
|
|
902
|
+
repository: GitHubWebhookRepository;
|
|
903
|
+
installationId: string;
|
|
904
|
+
sender: GitHubWebhookSender;
|
|
905
|
+
authorization: GitHubAuthorizationResult;
|
|
906
|
+
}
|