@cat-factory/integrations 0.6.0
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/LICENSE +21 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/datadog/DatadogClient.d.ts +54 -0
- package/dist/modules/datadog/DatadogClient.d.ts.map +1 -0
- package/dist/modules/datadog/DatadogClient.js +132 -0
- package/dist/modules/datadog/DatadogClient.js.map +1 -0
- package/dist/modules/datadog/DatadogReleaseHealthProvider.d.ts +30 -0
- package/dist/modules/datadog/DatadogReleaseHealthProvider.d.ts.map +1 -0
- package/dist/modules/datadog/DatadogReleaseHealthProvider.js +101 -0
- package/dist/modules/datadog/DatadogReleaseHealthProvider.js.map +1 -0
- package/dist/modules/datadog/datadog.logic.d.ts +37 -0
- package/dist/modules/datadog/datadog.logic.d.ts.map +1 -0
- package/dist/modules/datadog/datadog.logic.js +90 -0
- package/dist/modules/datadog/datadog.logic.js.map +1 -0
- package/dist/modules/documents/ConfluenceProvider.d.ts +29 -0
- package/dist/modules/documents/ConfluenceProvider.d.ts.map +1 -0
- package/dist/modules/documents/ConfluenceProvider.js +180 -0
- package/dist/modules/documents/ConfluenceProvider.js.map +1 -0
- package/dist/modules/documents/DocumentConnectionService.d.ts +30 -0
- package/dist/modules/documents/DocumentConnectionService.d.ts.map +1 -0
- package/dist/modules/documents/DocumentConnectionService.js +69 -0
- package/dist/modules/documents/DocumentConnectionService.js.map +1 -0
- package/dist/modules/documents/DocumentImportService.d.ts +34 -0
- package/dist/modules/documents/DocumentImportService.d.ts.map +1 -0
- package/dist/modules/documents/DocumentImportService.js +83 -0
- package/dist/modules/documents/DocumentImportService.js.map +1 -0
- package/dist/modules/documents/DocumentLinkService.d.ts +31 -0
- package/dist/modules/documents/DocumentLinkService.d.ts.map +1 -0
- package/dist/modules/documents/DocumentLinkService.js +75 -0
- package/dist/modules/documents/DocumentLinkService.js.map +1 -0
- package/dist/modules/documents/DocumentPlannerService.d.ts +23 -0
- package/dist/modules/documents/DocumentPlannerService.d.ts.map +1 -0
- package/dist/modules/documents/DocumentPlannerService.js +96 -0
- package/dist/modules/documents/DocumentPlannerService.js.map +1 -0
- package/dist/modules/documents/GitHubDocsProvider.d.ts +42 -0
- package/dist/modules/documents/GitHubDocsProvider.d.ts.map +1 -0
- package/dist/modules/documents/GitHubDocsProvider.js +86 -0
- package/dist/modules/documents/GitHubDocsProvider.js.map +1 -0
- package/dist/modules/documents/NotionProvider.d.ts +32 -0
- package/dist/modules/documents/NotionProvider.d.ts.map +1 -0
- package/dist/modules/documents/NotionProvider.js +221 -0
- package/dist/modules/documents/NotionProvider.js.map +1 -0
- package/dist/modules/documents/confluence.logic.d.ts +37 -0
- package/dist/modules/documents/confluence.logic.d.ts.map +1 -0
- package/dist/modules/documents/confluence.logic.js +133 -0
- package/dist/modules/documents/confluence.logic.js.map +1 -0
- package/dist/modules/documents/documents.logic.d.ts +22 -0
- package/dist/modules/documents/documents.logic.d.ts.map +1 -0
- package/dist/modules/documents/documents.logic.js +138 -0
- package/dist/modules/documents/documents.logic.js.map +1 -0
- package/dist/modules/documents/github-docs.logic.d.ts +52 -0
- package/dist/modules/documents/github-docs.logic.d.ts.map +1 -0
- package/dist/modules/documents/github-docs.logic.js +94 -0
- package/dist/modules/documents/github-docs.logic.js.map +1 -0
- package/dist/modules/documents/notion.logic.d.ts +31 -0
- package/dist/modules/documents/notion.logic.d.ts.map +1 -0
- package/dist/modules/documents/notion.logic.js +142 -0
- package/dist/modules/documents/notion.logic.js.map +1 -0
- package/dist/modules/email/EmailConnectionService.d.ts +34 -0
- package/dist/modules/email/EmailConnectionService.d.ts.map +1 -0
- package/dist/modules/email/EmailConnectionService.js +82 -0
- package/dist/modules/email/EmailConnectionService.js.map +1 -0
- package/dist/modules/email/adapters.d.ts +39 -0
- package/dist/modules/email/adapters.d.ts.map +1 -0
- package/dist/modules/email/adapters.js +79 -0
- package/dist/modules/email/adapters.js.map +1 -0
- package/dist/modules/environments/EnvironmentConnectionService.d.ts +42 -0
- package/dist/modules/environments/EnvironmentConnectionService.d.ts.map +1 -0
- package/dist/modules/environments/EnvironmentConnectionService.js +120 -0
- package/dist/modules/environments/EnvironmentConnectionService.js.map +1 -0
- package/dist/modules/environments/EnvironmentProvisioningService.d.ts +56 -0
- package/dist/modules/environments/EnvironmentProvisioningService.d.ts.map +1 -0
- package/dist/modules/environments/EnvironmentProvisioningService.js +153 -0
- package/dist/modules/environments/EnvironmentProvisioningService.js.map +1 -0
- package/dist/modules/environments/EnvironmentTeardownService.d.ts +24 -0
- package/dist/modules/environments/EnvironmentTeardownService.d.ts.map +1 -0
- package/dist/modules/environments/EnvironmentTeardownService.js +54 -0
- package/dist/modules/environments/EnvironmentTeardownService.js.map +1 -0
- package/dist/modules/environments/HttpEnvironmentProvider.d.ts +30 -0
- package/dist/modules/environments/HttpEnvironmentProvider.d.ts.map +1 -0
- package/dist/modules/environments/HttpEnvironmentProvider.js +316 -0
- package/dist/modules/environments/HttpEnvironmentProvider.js.map +1 -0
- package/dist/modules/environments/environments.logic.d.ts +50 -0
- package/dist/modules/environments/environments.logic.d.ts.map +1 -0
- package/dist/modules/environments/environments.logic.js +257 -0
- package/dist/modules/environments/environments.logic.js.map +1 -0
- package/dist/modules/github/GitHubInstallationService.d.ts +66 -0
- package/dist/modules/github/GitHubInstallationService.d.ts.map +1 -0
- package/dist/modules/github/GitHubInstallationService.js +143 -0
- package/dist/modules/github/GitHubInstallationService.js.map +1 -0
- package/dist/modules/github/GitHubService.d.ts +29 -0
- package/dist/modules/github/GitHubService.d.ts.map +1 -0
- package/dist/modules/github/GitHubService.js +61 -0
- package/dist/modules/github/GitHubService.js.map +1 -0
- package/dist/modules/github/GitHubSyncService.d.ts +97 -0
- package/dist/modules/github/GitHubSyncService.d.ts.map +1 -0
- package/dist/modules/github/GitHubSyncService.js +241 -0
- package/dist/modules/github/GitHubSyncService.js.map +1 -0
- package/dist/modules/github/RepoProvisioningService.d.ts +26 -0
- package/dist/modules/github/RepoProvisioningService.d.ts.map +1 -0
- package/dist/modules/github/RepoProvisioningService.js +36 -0
- package/dist/modules/github/RepoProvisioningService.js.map +1 -0
- package/dist/modules/github/WebhookService.d.ts +28 -0
- package/dist/modules/github/WebhookService.d.ts.map +1 -0
- package/dist/modules/github/WebhookService.js +156 -0
- package/dist/modules/github/WebhookService.js.map +1 -0
- package/dist/modules/github/projection.logic.d.ts +95 -0
- package/dist/modules/github/projection.logic.d.ts.map +1 -0
- package/dist/modules/github/projection.logic.js +94 -0
- package/dist/modules/github/projection.logic.js.map +1 -0
- package/dist/modules/github/provisioning.logic.d.ts +11 -0
- package/dist/modules/github/provisioning.logic.d.ts.map +1 -0
- package/dist/modules/github/provisioning.logic.js +18 -0
- package/dist/modules/github/provisioning.logic.js.map +1 -0
- package/dist/modules/incident/incident.logic.d.ts +16 -0
- package/dist/modules/incident/incident.logic.d.ts.map +1 -0
- package/dist/modules/incident/incident.logic.js +23 -0
- package/dist/modules/incident/incident.logic.js.map +1 -0
- package/dist/modules/incidentio/IncidentIoEnrichmentProvider.d.ts +26 -0
- package/dist/modules/incidentio/IncidentIoEnrichmentProvider.d.ts.map +1 -0
- package/dist/modules/incidentio/IncidentIoEnrichmentProvider.js +84 -0
- package/dist/modules/incidentio/IncidentIoEnrichmentProvider.js.map +1 -0
- package/dist/modules/pagerduty/PagerDutyEnrichmentProvider.d.ts +27 -0
- package/dist/modules/pagerduty/PagerDutyEnrichmentProvider.d.ts.map +1 -0
- package/dist/modules/pagerduty/PagerDutyEnrichmentProvider.js +65 -0
- package/dist/modules/pagerduty/PagerDutyEnrichmentProvider.js.map +1 -0
- package/dist/modules/providers/ApiKeyService.d.ts +73 -0
- package/dist/modules/providers/ApiKeyService.d.ts.map +1 -0
- package/dist/modules/providers/ApiKeyService.js +122 -0
- package/dist/modules/providers/ApiKeyService.js.map +1 -0
- package/dist/modules/providers/LocalModelEndpointService.d.ts +52 -0
- package/dist/modules/providers/LocalModelEndpointService.d.ts.map +1 -0
- package/dist/modules/providers/LocalModelEndpointService.js +131 -0
- package/dist/modules/providers/LocalModelEndpointService.js.map +1 -0
- package/dist/modules/providers/PersonalSubscriptionService.d.ts +94 -0
- package/dist/modules/providers/PersonalSubscriptionService.d.ts.map +1 -0
- package/dist/modules/providers/PersonalSubscriptionService.js +218 -0
- package/dist/modules/providers/PersonalSubscriptionService.js.map +1 -0
- package/dist/modules/providers/ProviderSubscriptionService.d.ts +75 -0
- package/dist/modules/providers/ProviderSubscriptionService.d.ts.map +1 -0
- package/dist/modules/providers/ProviderSubscriptionService.js +130 -0
- package/dist/modules/providers/ProviderSubscriptionService.js.map +1 -0
- package/dist/modules/providers/localModelUrl.d.ts +7 -0
- package/dist/modules/providers/localModelUrl.d.ts.map +1 -0
- package/dist/modules/providers/localModelUrl.js +67 -0
- package/dist/modules/providers/localModelUrl.js.map +1 -0
- package/dist/modules/providers/providers.logic.d.ts +23 -0
- package/dist/modules/providers/providers.logic.d.ts.map +1 -0
- package/dist/modules/providers/providers.logic.js +46 -0
- package/dist/modules/providers/providers.logic.js.map +1 -0
- package/dist/modules/runners/HttpRunnerPoolProvider.d.ts +51 -0
- package/dist/modules/runners/HttpRunnerPoolProvider.d.ts.map +1 -0
- package/dist/modules/runners/HttpRunnerPoolProvider.js +304 -0
- package/dist/modules/runners/HttpRunnerPoolProvider.js.map +1 -0
- package/dist/modules/runners/RunnerPoolConnectionService.d.ts +47 -0
- package/dist/modules/runners/RunnerPoolConnectionService.d.ts.map +1 -0
- package/dist/modules/runners/RunnerPoolConnectionService.js +98 -0
- package/dist/modules/runners/RunnerPoolConnectionService.js.map +1 -0
- package/dist/modules/runners/RunnerPoolTransport.d.ts +11 -0
- package/dist/modules/runners/RunnerPoolTransport.d.ts.map +1 -0
- package/dist/modules/runners/RunnerPoolTransport.js +61 -0
- package/dist/modules/runners/RunnerPoolTransport.js.map +1 -0
- package/dist/modules/runners/runners.logic.d.ts +16 -0
- package/dist/modules/runners/runners.logic.d.ts.map +1 -0
- package/dist/modules/runners/runners.logic.js +52 -0
- package/dist/modules/runners/runners.logic.js.map +1 -0
- package/dist/modules/slack/SlackApiClient.d.ts +67 -0
- package/dist/modules/slack/SlackApiClient.d.ts.map +1 -0
- package/dist/modules/slack/SlackApiClient.js +132 -0
- package/dist/modules/slack/SlackApiClient.js.map +1 -0
- package/dist/modules/slack/SlackConnectionService.d.ts +41 -0
- package/dist/modules/slack/SlackConnectionService.d.ts.map +1 -0
- package/dist/modules/slack/SlackConnectionService.js +136 -0
- package/dist/modules/slack/SlackConnectionService.js.map +1 -0
- package/dist/modules/slack/SlackMemberMappingService.d.ts +17 -0
- package/dist/modules/slack/SlackMemberMappingService.d.ts.map +1 -0
- package/dist/modules/slack/SlackMemberMappingService.js +28 -0
- package/dist/modules/slack/SlackMemberMappingService.js.map +1 -0
- package/dist/modules/slack/SlackNotificationChannel.d.ts +45 -0
- package/dist/modules/slack/SlackNotificationChannel.d.ts.map +1 -0
- package/dist/modules/slack/SlackNotificationChannel.js +84 -0
- package/dist/modules/slack/SlackNotificationChannel.js.map +1 -0
- package/dist/modules/slack/SlackSettingsService.d.ts +16 -0
- package/dist/modules/slack/SlackSettingsService.d.ts.map +1 -0
- package/dist/modules/slack/SlackSettingsService.js +41 -0
- package/dist/modules/slack/SlackSettingsService.js.map +1 -0
- package/dist/modules/slack/slack.logic.d.ts +55 -0
- package/dist/modules/slack/slack.logic.d.ts.map +1 -0
- package/dist/modules/slack/slack.logic.js +149 -0
- package/dist/modules/slack/slack.logic.js.map +1 -0
- package/dist/modules/tasks/GitHubIssuesProvider.d.ts +50 -0
- package/dist/modules/tasks/GitHubIssuesProvider.d.ts.map +1 -0
- package/dist/modules/tasks/GitHubIssuesProvider.js +92 -0
- package/dist/modules/tasks/GitHubIssuesProvider.js.map +1 -0
- package/dist/modules/tasks/JiraProvider.d.ts +29 -0
- package/dist/modules/tasks/JiraProvider.d.ts.map +1 -0
- package/dist/modules/tasks/JiraProvider.js +114 -0
- package/dist/modules/tasks/JiraProvider.js.map +1 -0
- package/dist/modules/tasks/TaskConnectionService.d.ts +30 -0
- package/dist/modules/tasks/TaskConnectionService.d.ts.map +1 -0
- package/dist/modules/tasks/TaskConnectionService.js +69 -0
- package/dist/modules/tasks/TaskConnectionService.js.map +1 -0
- package/dist/modules/tasks/TaskImportService.d.ts +34 -0
- package/dist/modules/tasks/TaskImportService.d.ts.map +1 -0
- package/dist/modules/tasks/TaskImportService.js +96 -0
- package/dist/modules/tasks/TaskImportService.js.map +1 -0
- package/dist/modules/tasks/TaskLinkService.d.ts +30 -0
- package/dist/modules/tasks/TaskLinkService.d.ts.map +1 -0
- package/dist/modules/tasks/TaskLinkService.js +56 -0
- package/dist/modules/tasks/TaskLinkService.js.map +1 -0
- package/dist/modules/tasks/github-issues.logic.d.ts +35 -0
- package/dist/modules/tasks/github-issues.logic.d.ts.map +1 -0
- package/dist/modules/tasks/github-issues.logic.js +67 -0
- package/dist/modules/tasks/github-issues.logic.js.map +1 -0
- package/dist/modules/tasks/jira.logic.d.ts +28 -0
- package/dist/modules/tasks/jira.logic.d.ts.map +1 -0
- package/dist/modules/tasks/jira.logic.js +151 -0
- package/dist/modules/tasks/jira.logic.js.map +1 -0
- package/dist/modules/tasks/tasks.logic.d.ts +12 -0
- package/dist/modules/tasks/tasks.logic.d.ts.map +1 -0
- package/dist/modules/tasks/tasks.logic.js +17 -0
- package/dist/modules/tasks/tasks.logic.js.map +1 -0
- package/dist/modules/tracker/TicketTrackerService.d.ts +45 -0
- package/dist/modules/tracker/TicketTrackerService.d.ts.map +1 -0
- package/dist/modules/tracker/TicketTrackerService.js +52 -0
- package/dist/modules/tracker/TicketTrackerService.js.map +1 -0
- package/dist/modules/tracker/base64.d.ts +2 -0
- package/dist/modules/tracker/base64.d.ts.map +1 -0
- package/dist/modules/tracker/base64.js +18 -0
- package/dist/modules/tracker/base64.js.map +1 -0
- package/dist/modules/tracker/github.create.logic.d.ts +16 -0
- package/dist/modules/tracker/github.create.logic.d.ts.map +1 -0
- package/dist/modules/tracker/github.create.logic.js +25 -0
- package/dist/modules/tracker/github.create.logic.js.map +1 -0
- package/dist/modules/tracker/jira.create.logic.d.ts +31 -0
- package/dist/modules/tracker/jira.create.logic.d.ts.map +1 -0
- package/dist/modules/tracker/jira.create.logic.js +59 -0
- package/dist/modules/tracker/jira.create.logic.js.map +1 -0
- package/package.json +36 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Igor Savin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export { GitHubInstallationService, type GitHubInstallationServiceDependencies, } from './modules/github/GitHubInstallationService.js';
|
|
2
|
+
export { GitHubService, type GitHubServiceDependencies } from './modules/github/GitHubService.js';
|
|
3
|
+
export { GitHubSyncService, type GitHubSyncServiceDependencies, } from './modules/github/GitHubSyncService.js';
|
|
4
|
+
export { WebhookService, type WebhookServiceDependencies } from './modules/github/WebhookService.js';
|
|
5
|
+
export * as githubProjection from './modules/github/projection.logic.js';
|
|
6
|
+
export { RepoProvisioningService, type RepoProvisioningServiceDependencies, type DelegationReason, type ProvisionResult, } from './modules/github/RepoProvisioningService.js';
|
|
7
|
+
export { canCreateRepo } from './modules/github/provisioning.logic.js';
|
|
8
|
+
export { DocumentConnectionService, type DocumentConnectionServiceDependencies, } from './modules/documents/DocumentConnectionService.js';
|
|
9
|
+
export { DocumentImportService, type DocumentImportServiceDependencies, toSourceDocument, } from './modules/documents/DocumentImportService.js';
|
|
10
|
+
export { DocumentPlannerService, type DocumentPlannerServiceDependencies, } from './modules/documents/DocumentPlannerService.js';
|
|
11
|
+
export { DocumentLinkService, type DocumentLinkServiceDependencies, type SpawnResult, } from './modules/documents/DocumentLinkService.js';
|
|
12
|
+
export { MapDocumentSourceRegistry } from './modules/documents/documents.logic.js';
|
|
13
|
+
export * as documentsLogic from './modules/documents/documents.logic.js';
|
|
14
|
+
export * as confluenceLogic from './modules/documents/confluence.logic.js';
|
|
15
|
+
export * as notionLogic from './modules/documents/notion.logic.js';
|
|
16
|
+
export * as githubDocsLogic from './modules/documents/github-docs.logic.js';
|
|
17
|
+
export { CONFLUENCE_DESCRIPTOR } from './modules/documents/confluence.logic.js';
|
|
18
|
+
export { NOTION_DESCRIPTOR } from './modules/documents/notion.logic.js';
|
|
19
|
+
export { GITHUB_DOCS_DESCRIPTOR } from './modules/documents/github-docs.logic.js';
|
|
20
|
+
export { ConfluenceProvider, ConfluenceApiError } from './modules/documents/ConfluenceProvider.js';
|
|
21
|
+
export { NotionProvider, NotionApiError } from './modules/documents/NotionProvider.js';
|
|
22
|
+
export { GitHubDocsProvider } from './modules/documents/GitHubDocsProvider.js';
|
|
23
|
+
export { TaskConnectionService, type TaskConnectionServiceDependencies, } from './modules/tasks/TaskConnectionService.js';
|
|
24
|
+
export { TaskImportService, type TaskImportServiceDependencies, toSourceTask, } from './modules/tasks/TaskImportService.js';
|
|
25
|
+
export { TaskLinkService, type TaskLinkServiceDependencies, } from './modules/tasks/TaskLinkService.js';
|
|
26
|
+
export { MapTaskSourceRegistry, type TaskContextView, renderTaskContext, buildTaskExcerpt, } from './modules/tasks/tasks.logic.js';
|
|
27
|
+
export * as tasksLogic from './modules/tasks/tasks.logic.js';
|
|
28
|
+
export * as jiraLogic from './modules/tasks/jira.logic.js';
|
|
29
|
+
export { JIRA_DESCRIPTOR } from './modules/tasks/jira.logic.js';
|
|
30
|
+
export { TicketTrackerService, type TicketTrackerServiceDependencies, type JiraConnection, type FetchLike, } from './modules/tracker/TicketTrackerService.js';
|
|
31
|
+
export * as jiraCreateLogic from './modules/tracker/jira.create.logic.js';
|
|
32
|
+
export { createGitHubIssueViaToken, type GitHubIssueTokenRequest, } from './modules/tracker/github.create.logic.js';
|
|
33
|
+
export * as githubIssuesLogic from './modules/tasks/github-issues.logic.js';
|
|
34
|
+
export { GITHUB_ISSUES_DESCRIPTOR } from './modules/tasks/github-issues.logic.js';
|
|
35
|
+
export { GitHubIssuesProvider, type GitHubIssuesProviderDependencies, } from './modules/tasks/GitHubIssuesProvider.js';
|
|
36
|
+
export { JiraProvider, JiraApiError } from './modules/tasks/JiraProvider.js';
|
|
37
|
+
export { EnvironmentConnectionService, type EnvironmentConnectionServiceDependencies, type ResolvedConnection, referencedSecretKeys, } from './modules/environments/EnvironmentConnectionService.js';
|
|
38
|
+
export { EnvironmentProvisioningService, type EnvironmentProvisioningServiceDependencies, type ProvisionArgs, type ResolvedEnvironment, } from './modules/environments/EnvironmentProvisioningService.js';
|
|
39
|
+
export { EnvironmentTeardownService, type EnvironmentTeardownServiceDependencies, } from './modules/environments/EnvironmentTeardownService.js';
|
|
40
|
+
export * as environmentsLogic from './modules/environments/environments.logic.js';
|
|
41
|
+
export { HttpEnvironmentProvider, EnvironmentApiError, } from './modules/environments/HttpEnvironmentProvider.js';
|
|
42
|
+
export { isDeployStep, DEPLOYER_AGENT_KIND, ENVIRONMENT_BLOCK_TYPE, } from './modules/environments/environments.logic.js';
|
|
43
|
+
export { RunnerPoolConnectionService, type RunnerPoolConnectionServiceDependencies, type ResolvedRunnerPool, } from './modules/runners/RunnerPoolConnectionService.js';
|
|
44
|
+
export * as runnersLogic from './modules/runners/runners.logic.js';
|
|
45
|
+
export { HttpRunnerPoolProvider, RunnerPoolApiError, type HttpRunnerPoolProviderOptions, } from './modules/runners/HttpRunnerPoolProvider.js';
|
|
46
|
+
export { RunnerPoolTransport } from './modules/runners/RunnerPoolTransport.js';
|
|
47
|
+
export { SlackNotificationChannel, type SlackNotificationChannelDependencies, } from './modules/slack/SlackNotificationChannel.js';
|
|
48
|
+
export { SlackConnectionService, type SlackConnectionServiceDependencies, } from './modules/slack/SlackConnectionService.js';
|
|
49
|
+
export { SlackSettingsService, type SlackSettingsServiceDependencies, } from './modules/slack/SlackSettingsService.js';
|
|
50
|
+
export { SlackMemberMappingService, type SlackMemberMappingServiceDependencies, } from './modules/slack/SlackMemberMappingService.js';
|
|
51
|
+
export { SlackApiClient, SlackApiError, type SlackApiClientOptions, type SlackAuthInfo, type SlackOAuthResult, } from './modules/slack/SlackApiClient.js';
|
|
52
|
+
export * as slackLogic from './modules/slack/slack.logic.js';
|
|
53
|
+
export { SLACK_CIPHER_INFO, SLACK_ROUTABLE_TYPES, defaultSlackSettings, renderNotificationMessage, resolveRoute, } from './modules/slack/slack.logic.js';
|
|
54
|
+
export { ProviderSubscriptionService, type ProviderSubscriptionServiceDependencies, type VendorCredentialSummary, type LeasedSubscriptionToken, } from './modules/providers/ProviderSubscriptionService.js';
|
|
55
|
+
export { ApiKeyService, type ApiKeyServiceDependencies, type ApiKeySummary, type LeasedApiKey, type PoolScopeOpts, } from './modules/providers/ApiKeyService.js';
|
|
56
|
+
export { PersonalSubscriptionService, type PersonalSubscriptionServiceDependencies, type LeasedPersonalToken, DEFAULT_ACTIVATION_TTL_MS, DEFAULT_RENEW_WARNING_MS, } from './modules/providers/PersonalSubscriptionService.js';
|
|
57
|
+
export { LocalModelEndpointService, type LocalModelEndpointServiceDependencies, type ResolvedLocalEndpoint, } from './modules/providers/LocalModelEndpointService.js';
|
|
58
|
+
export { localRunnerUrlError } from './modules/providers/localModelUrl.js';
|
|
59
|
+
export * as providersLogic from './modules/providers/providers.logic.js';
|
|
60
|
+
export { DEFAULT_USAGE_WINDOW_MS, chooseToken, windowUsage, type PoolRotationRecord, } from './modules/providers/providers.logic.js';
|
|
61
|
+
export { DatadogReleaseHealthProvider, type DatadogReleaseHealthProviderDependencies, } from './modules/datadog/DatadogReleaseHealthProvider.js';
|
|
62
|
+
export { DatadogClient, type DatadogCredentials, type DatadogClientOptions, } from './modules/datadog/DatadogClient.js';
|
|
63
|
+
export { DATADOG_CIPHER_INFO, DatadogApiError, normalizeDatadogSite, datadogApiBase, } from './modules/datadog/datadog.logic.js';
|
|
64
|
+
export { PagerDutyEnrichmentProvider, type PagerDutyEnrichmentProviderOptions, } from './modules/pagerduty/PagerDutyEnrichmentProvider.js';
|
|
65
|
+
export { IncidentIoEnrichmentProvider, type IncidentIoEnrichmentProviderOptions, } from './modules/incidentio/IncidentIoEnrichmentProvider.js';
|
|
66
|
+
export { SendGridEmailSender, ResendEmailSender, createEmailSender, EMAIL_CIPHER_INFO, type EmailProviderConfig, type SendGridConfig, type ResendConfig, } from './modules/email/adapters.js';
|
|
67
|
+
export { EmailConnectionService, type EmailConnectionServiceDependencies, type EmailConnection, } from './modules/email/EmailConnectionService.js';
|
|
68
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Public surface of the external-system integration layer.
|
|
2
|
+
export { GitHubInstallationService, } from './modules/github/GitHubInstallationService.js';
|
|
3
|
+
export { GitHubService } from './modules/github/GitHubService.js';
|
|
4
|
+
export { GitHubSyncService, } from './modules/github/GitHubSyncService.js';
|
|
5
|
+
export { WebhookService } from './modules/github/WebhookService.js';
|
|
6
|
+
export * as githubProjection from './modules/github/projection.logic.js';
|
|
7
|
+
export { RepoProvisioningService, } from './modules/github/RepoProvisioningService.js';
|
|
8
|
+
export { canCreateRepo } from './modules/github/provisioning.logic.js';
|
|
9
|
+
export { DocumentConnectionService, } from './modules/documents/DocumentConnectionService.js';
|
|
10
|
+
export { DocumentImportService, toSourceDocument, } from './modules/documents/DocumentImportService.js';
|
|
11
|
+
export { DocumentPlannerService, } from './modules/documents/DocumentPlannerService.js';
|
|
12
|
+
export { DocumentLinkService, } from './modules/documents/DocumentLinkService.js';
|
|
13
|
+
export { MapDocumentSourceRegistry } from './modules/documents/documents.logic.js';
|
|
14
|
+
export * as documentsLogic from './modules/documents/documents.logic.js';
|
|
15
|
+
export * as confluenceLogic from './modules/documents/confluence.logic.js';
|
|
16
|
+
export * as notionLogic from './modules/documents/notion.logic.js';
|
|
17
|
+
export * as githubDocsLogic from './modules/documents/github-docs.logic.js';
|
|
18
|
+
export { CONFLUENCE_DESCRIPTOR } from './modules/documents/confluence.logic.js';
|
|
19
|
+
export { NOTION_DESCRIPTOR } from './modules/documents/notion.logic.js';
|
|
20
|
+
export { GITHUB_DOCS_DESCRIPTOR } from './modules/documents/github-docs.logic.js';
|
|
21
|
+
// Document-source provider classes (thin `fetch` shells around the logic above).
|
|
22
|
+
// Promoted from the Worker infra so every facade composes the same providers.
|
|
23
|
+
export { ConfluenceProvider, ConfluenceApiError } from './modules/documents/ConfluenceProvider.js';
|
|
24
|
+
export { NotionProvider, NotionApiError } from './modules/documents/NotionProvider.js';
|
|
25
|
+
export { GitHubDocsProvider } from './modules/documents/GitHubDocsProvider.js';
|
|
26
|
+
export { TaskConnectionService, } from './modules/tasks/TaskConnectionService.js';
|
|
27
|
+
export { TaskImportService, toSourceTask, } from './modules/tasks/TaskImportService.js';
|
|
28
|
+
export { TaskLinkService, } from './modules/tasks/TaskLinkService.js';
|
|
29
|
+
export { MapTaskSourceRegistry, renderTaskContext, buildTaskExcerpt, } from './modules/tasks/tasks.logic.js';
|
|
30
|
+
export * as tasksLogic from './modules/tasks/tasks.logic.js';
|
|
31
|
+
export * as jiraLogic from './modules/tasks/jira.logic.js';
|
|
32
|
+
export { JIRA_DESCRIPTOR } from './modules/tasks/jira.logic.js';
|
|
33
|
+
export { TicketTrackerService, } from './modules/tracker/TicketTrackerService.js';
|
|
34
|
+
export * as jiraCreateLogic from './modules/tracker/jira.create.logic.js';
|
|
35
|
+
export { createGitHubIssueViaToken, } from './modules/tracker/github.create.logic.js';
|
|
36
|
+
export * as githubIssuesLogic from './modules/tasks/github-issues.logic.js';
|
|
37
|
+
export { GITHUB_ISSUES_DESCRIPTOR } from './modules/tasks/github-issues.logic.js';
|
|
38
|
+
export { GitHubIssuesProvider, } from './modules/tasks/GitHubIssuesProvider.js';
|
|
39
|
+
// The Jira task-source provider (a thin `fetch` shell around the pure Jira logic):
|
|
40
|
+
// runtime-neutral, so both facades compose the SAME class instead of a per-runtime copy.
|
|
41
|
+
export { JiraProvider, JiraApiError } from './modules/tasks/JiraProvider.js';
|
|
42
|
+
export { EnvironmentConnectionService, referencedSecretKeys, } from './modules/environments/EnvironmentConnectionService.js';
|
|
43
|
+
export { EnvironmentProvisioningService, } from './modules/environments/EnvironmentProvisioningService.js';
|
|
44
|
+
export { EnvironmentTeardownService, } from './modules/environments/EnvironmentTeardownService.js';
|
|
45
|
+
export * as environmentsLogic from './modules/environments/environments.logic.js';
|
|
46
|
+
// The HTTP environment provider (a `fetch` shell around the manifest logic above),
|
|
47
|
+
// promoted from the Worker infra so every facade composes the same provider.
|
|
48
|
+
export { HttpEnvironmentProvider, EnvironmentApiError, } from './modules/environments/HttpEnvironmentProvider.js';
|
|
49
|
+
export { isDeployStep, DEPLOYER_AGENT_KIND, ENVIRONMENT_BLOCK_TYPE, } from './modules/environments/environments.logic.js';
|
|
50
|
+
export { RunnerPoolConnectionService, } from './modules/runners/RunnerPoolConnectionService.js';
|
|
51
|
+
export * as runnersLogic from './modules/runners/runners.logic.js';
|
|
52
|
+
// The runtime-neutral self-hosted runner-pool transport: a generic manifest
|
|
53
|
+
// interpreter (`HttpRunnerPoolProvider`) and the per-job `RunnerTransport` adapter
|
|
54
|
+
// (`RunnerPoolTransport`) both runtime facades resolve for a workspace's pool.
|
|
55
|
+
export { HttpRunnerPoolProvider, RunnerPoolApiError, } from './modules/runners/HttpRunnerPoolProvider.js';
|
|
56
|
+
export { RunnerPoolTransport } from './modules/runners/RunnerPoolTransport.js';
|
|
57
|
+
// Slack: an additional delivery transport for the existing notification mechanism
|
|
58
|
+
// (the `SlackNotificationChannel` implements the same `NotificationChannel` port),
|
|
59
|
+
// plus the per-account connection / per-workspace routing / member-mapping services.
|
|
60
|
+
export { SlackNotificationChannel, } from './modules/slack/SlackNotificationChannel.js';
|
|
61
|
+
export { SlackConnectionService, } from './modules/slack/SlackConnectionService.js';
|
|
62
|
+
export { SlackSettingsService, } from './modules/slack/SlackSettingsService.js';
|
|
63
|
+
export { SlackMemberMappingService, } from './modules/slack/SlackMemberMappingService.js';
|
|
64
|
+
export { SlackApiClient, SlackApiError, } from './modules/slack/SlackApiClient.js';
|
|
65
|
+
export * as slackLogic from './modules/slack/slack.logic.js';
|
|
66
|
+
export { SLACK_CIPHER_INFO, SLACK_ROUTABLE_TYPES, defaultSlackSettings, renderNotificationMessage, resolveRoute, } from './modules/slack/slack.logic.js';
|
|
67
|
+
export { ProviderSubscriptionService, } from './modules/providers/ProviderSubscriptionService.js';
|
|
68
|
+
export { ApiKeyService, } from './modules/providers/ApiKeyService.js';
|
|
69
|
+
export { PersonalSubscriptionService, DEFAULT_ACTIVATION_TTL_MS, DEFAULT_RENEW_WARNING_MS, } from './modules/providers/PersonalSubscriptionService.js';
|
|
70
|
+
export { LocalModelEndpointService, } from './modules/providers/LocalModelEndpointService.js';
|
|
71
|
+
export { localRunnerUrlError } from './modules/providers/localModelUrl.js';
|
|
72
|
+
export * as providersLogic from './modules/providers/providers.logic.js';
|
|
73
|
+
export { DEFAULT_USAGE_WINDOW_MS, chooseToken, windowUsage, } from './modules/providers/providers.logic.js';
|
|
74
|
+
// Datadog post-release-health: the release-health provider the gate reads + its thin
|
|
75
|
+
// fetch client, plus the optional incident-enrichment providers (PagerDuty / incident.io)
|
|
76
|
+
// that annotate — never re-alert — an incident those systems already opened.
|
|
77
|
+
export { DatadogReleaseHealthProvider, } from './modules/datadog/DatadogReleaseHealthProvider.js';
|
|
78
|
+
export { DatadogClient, } from './modules/datadog/DatadogClient.js';
|
|
79
|
+
export { DATADOG_CIPHER_INFO, DatadogApiError, normalizeDatadogSite, datadogApiBase, } from './modules/datadog/datadog.logic.js';
|
|
80
|
+
export { PagerDutyEnrichmentProvider, } from './modules/pagerduty/PagerDutyEnrichmentProvider.js';
|
|
81
|
+
export { IncidentIoEnrichmentProvider, } from './modules/incidentio/IncidentIoEnrichmentProvider.js';
|
|
82
|
+
export { SendGridEmailSender, ResendEmailSender, createEmailSender, EMAIL_CIPHER_INFO, } from './modules/email/adapters.js';
|
|
83
|
+
export { EmailConnectionService, } from './modules/email/EmailConnectionService.js';
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
type FetchLike = typeof fetch;
|
|
2
|
+
export interface DatadogCredentials {
|
|
3
|
+
site: string;
|
|
4
|
+
apiKey: string;
|
|
5
|
+
appKey: string;
|
|
6
|
+
}
|
|
7
|
+
/** A monitor's current state. */
|
|
8
|
+
export interface DatadogMonitorState {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
overallState: string | undefined;
|
|
12
|
+
/** When `overall_state` last changed (epoch ms), if Datadog reported it. */
|
|
13
|
+
stateModifiedMs?: number;
|
|
14
|
+
}
|
|
15
|
+
/** An SLO's current SLI value vs its target (the breach check). */
|
|
16
|
+
export interface DatadogSloState {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
sliValue: number | null;
|
|
20
|
+
target: number | null;
|
|
21
|
+
}
|
|
22
|
+
/** One recent error-log group. */
|
|
23
|
+
export interface DatadogLogSample {
|
|
24
|
+
title: string;
|
|
25
|
+
count?: number;
|
|
26
|
+
sampleMessage?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface DatadogClientOptions {
|
|
29
|
+
fetchImpl?: FetchLike;
|
|
30
|
+
}
|
|
31
|
+
export declare class DatadogClient {
|
|
32
|
+
private readonly creds;
|
|
33
|
+
private readonly fetchImpl;
|
|
34
|
+
constructor(creds: DatadogCredentials, options?: DatadogClientOptions);
|
|
35
|
+
/** Read a monitor's overall state + when it last changed (`GET /api/v1/monitor/{id}`). */
|
|
36
|
+
getMonitor(id: string): Promise<DatadogMonitorState>;
|
|
37
|
+
/**
|
|
38
|
+
* Read an SLO's current SLI value vs target over a window
|
|
39
|
+
* (`GET /api/v1/slo/{id}/history`). Returns nulls when Datadog has no data.
|
|
40
|
+
*/
|
|
41
|
+
getSloState(id: string, fromTs: number, toTs: number): Promise<DatadogSloState>;
|
|
42
|
+
/**
|
|
43
|
+
* Aggregate recent error logs (`POST /api/v2/logs/analytics/aggregate`) into the top
|
|
44
|
+
* error groups for the window. Best-effort: a query failure yields an empty list (the
|
|
45
|
+
* monitor/SLO signals are the gate's primary verdict).
|
|
46
|
+
*/
|
|
47
|
+
recentErrorLogs(query: string, fromMs: number, toMs: number, limit?: number): Promise<DatadogLogSample[]>;
|
|
48
|
+
private get;
|
|
49
|
+
private post;
|
|
50
|
+
private headers;
|
|
51
|
+
private parse;
|
|
52
|
+
}
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=DatadogClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatadogClient.d.ts","sourceRoot":"","sources":["../../../src/modules/datadog/DatadogClient.ts"],"names":[],"mappings":"AAQA,KAAK,SAAS,GAAG,OAAO,KAAK,CAAA;AAE7B,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,iCAAiC;AACjC,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,kCAAkC;AAClC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AA0CD,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IAErC,YACmB,KAAK,EAAE,kBAAkB,EAC1C,OAAO,GAAE,oBAAyB,EAGnC;IAED,0FAA0F;IACpF,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAazD;IAED;;;OAGG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAiBpF;IAED;;;;OAIG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,SAAI,GACR,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmB7B;YAEa,GAAG;YAQH,IAAI;IASlB,OAAO,CAAC,OAAO;YAQD,KAAK;CAOpB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { DatadogApiError, datadogApiBase } from './datadog.logic.js';
|
|
2
|
+
/**
|
|
3
|
+
* Pick the SLO target to compare the window SLI against. Datadog's SLO-history response
|
|
4
|
+
* keys `thresholds` by timeframe (e.g. `7d` / `30d` / `90d`), and a multi-timeframe SLO
|
|
5
|
+
* can carry a different target per timeframe — so `Object.values(...)[0]` would compare
|
|
6
|
+
* the (short) release-window SLI against whichever timeframe Datadog happened to list
|
|
7
|
+
* first, a non-deterministic, often-wrong verdict. Pick the SHORTEST configured timeframe
|
|
8
|
+
* deterministically: it is the one most sensitive to a just-shipped regression and is a
|
|
9
|
+
* stable choice across calls. Falls back to the only/first target when timeframes are
|
|
10
|
+
* unparseable, and to `null` when there are none (Datadog has no data).
|
|
11
|
+
*/
|
|
12
|
+
function pickSloTarget(thresholds) {
|
|
13
|
+
const entries = Object.entries(thresholds);
|
|
14
|
+
if (entries.length === 0)
|
|
15
|
+
return null;
|
|
16
|
+
const days = (timeframe) => {
|
|
17
|
+
const m = /^(\d+)\s*([smhdwy])$/.exec(timeframe.trim());
|
|
18
|
+
if (!m)
|
|
19
|
+
return Number.POSITIVE_INFINITY;
|
|
20
|
+
const n = Number(m[1]);
|
|
21
|
+
const unit = { s: 1 / 86400, m: 1 / 1440, h: 1 / 24, d: 1, w: 7, y: 365 }[m[2]] ?? 1;
|
|
22
|
+
return n * unit;
|
|
23
|
+
};
|
|
24
|
+
const sorted = [...entries].sort((a, b) => days(a[0]) - days(b[0]));
|
|
25
|
+
for (const [, threshold] of sorted) {
|
|
26
|
+
if (typeof threshold.target === 'number')
|
|
27
|
+
return threshold.target;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse a Datadog timestamp (`overall_state_modified` is an ISO-8601 string, but some
|
|
33
|
+
* endpoints report epoch seconds) into epoch ms. Returns undefined when absent/unparseable.
|
|
34
|
+
*/
|
|
35
|
+
function parseDatadogTimestamp(value) {
|
|
36
|
+
if (typeof value === 'number')
|
|
37
|
+
return Number.isFinite(value) ? value * 1000 : undefined;
|
|
38
|
+
if (typeof value === 'string' && value.trim() !== '') {
|
|
39
|
+
const ms = Date.parse(value);
|
|
40
|
+
return Number.isNaN(ms) ? undefined : ms;
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
export class DatadogClient {
|
|
45
|
+
creds;
|
|
46
|
+
fetchImpl;
|
|
47
|
+
constructor(creds, options = {}) {
|
|
48
|
+
this.creds = creds;
|
|
49
|
+
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
50
|
+
}
|
|
51
|
+
/** Read a monitor's overall state + when it last changed (`GET /api/v1/monitor/{id}`). */
|
|
52
|
+
async getMonitor(id) {
|
|
53
|
+
const data = await this.get(`/api/v1/monitor/${id}`);
|
|
54
|
+
const stateModifiedMs = parseDatadogTimestamp(data.overall_state_modified);
|
|
55
|
+
return {
|
|
56
|
+
id,
|
|
57
|
+
name: data.name ?? `monitor ${id}`,
|
|
58
|
+
overallState: data.overall_state,
|
|
59
|
+
...(stateModifiedMs !== undefined ? { stateModifiedMs } : {}),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Read an SLO's current SLI value vs target over a window
|
|
64
|
+
* (`GET /api/v1/slo/{id}/history`). Returns nulls when Datadog has no data.
|
|
65
|
+
*/
|
|
66
|
+
async getSloState(id, fromTs, toTs) {
|
|
67
|
+
const data = await this.get(`/api/v1/slo/${id}/history?from_ts=${fromTs}&to_ts=${toTs}`);
|
|
68
|
+
const overall = data.data?.overall;
|
|
69
|
+
const thresholds = data.data?.thresholds ?? {};
|
|
70
|
+
const target = pickSloTarget(thresholds);
|
|
71
|
+
return {
|
|
72
|
+
id,
|
|
73
|
+
name: data.data?.slo?.name ?? `slo ${id}`,
|
|
74
|
+
sliValue: typeof overall?.sli_value === 'number' ? overall.sli_value : null,
|
|
75
|
+
target,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Aggregate recent error logs (`POST /api/v2/logs/analytics/aggregate`) into the top
|
|
80
|
+
* error groups for the window. Best-effort: a query failure yields an empty list (the
|
|
81
|
+
* monitor/SLO signals are the gate's primary verdict).
|
|
82
|
+
*/
|
|
83
|
+
async recentErrorLogs(query, fromMs, toMs, limit = 5) {
|
|
84
|
+
try {
|
|
85
|
+
const body = {
|
|
86
|
+
compute: [{ aggregation: 'count', type: 'total' }],
|
|
87
|
+
filter: { from: String(fromMs), to: String(toMs), query },
|
|
88
|
+
group_by: [{ facet: '@error.type', limit, sort: { aggregation: 'count', order: 'desc' } }],
|
|
89
|
+
};
|
|
90
|
+
const data = await this.post(`/api/v2/logs/analytics/aggregate`, body);
|
|
91
|
+
const buckets = data.data?.buckets ?? [];
|
|
92
|
+
return buckets.map((b) => {
|
|
93
|
+
const title = Object.values(b.by ?? {})[0] ?? 'error';
|
|
94
|
+
const count = Object.values(b.computes ?? {})[0];
|
|
95
|
+
return { title: String(title), count: typeof count === 'number' ? count : undefined };
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async get(path) {
|
|
103
|
+
const res = await this.fetchImpl(`${datadogApiBase(this.creds.site)}${path}`, {
|
|
104
|
+
method: 'GET',
|
|
105
|
+
headers: this.headers(),
|
|
106
|
+
});
|
|
107
|
+
return this.parse(path, res);
|
|
108
|
+
}
|
|
109
|
+
async post(path, body) {
|
|
110
|
+
const res = await this.fetchImpl(`${datadogApiBase(this.creds.site)}${path}`, {
|
|
111
|
+
method: 'POST',
|
|
112
|
+
headers: { ...this.headers(), 'content-type': 'application/json' },
|
|
113
|
+
body: JSON.stringify(body),
|
|
114
|
+
});
|
|
115
|
+
return this.parse(path, res);
|
|
116
|
+
}
|
|
117
|
+
headers() {
|
|
118
|
+
return {
|
|
119
|
+
'DD-API-KEY': this.creds.apiKey,
|
|
120
|
+
'DD-APPLICATION-KEY': this.creds.appKey,
|
|
121
|
+
accept: 'application/json',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
async parse(path, res) {
|
|
125
|
+
if (!res.ok) {
|
|
126
|
+
const text = await res.text().catch(() => '');
|
|
127
|
+
throw new DatadogApiError(path, `HTTP ${res.status}${text ? `: ${text.slice(0, 200)}` : ''}`);
|
|
128
|
+
}
|
|
129
|
+
return (await res.json());
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=DatadogClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatadogClient.js","sourceRoot":"","sources":["../../../src/modules/datadog/DatadogClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { BlockRepository, DatadogConnectionRepository, ReleaseEvidence, ReleaseHealthConfigRepository, ReleaseHealthProvider, ReleaseHealthReport, SecretCipher } from '@cat-factory/kernel';
|
|
2
|
+
export interface DatadogReleaseHealthProviderDependencies {
|
|
3
|
+
datadogConnectionRepository: DatadogConnectionRepository;
|
|
4
|
+
releaseHealthConfigRepository: ReleaseHealthConfigRepository;
|
|
5
|
+
/** Resolves the service-frame config when a task block has none of its own. */
|
|
6
|
+
blockRepository: BlockRepository;
|
|
7
|
+
/** Decrypts the workspace's Datadog API/app keys at call time. */
|
|
8
|
+
secretCipher: SecretCipher;
|
|
9
|
+
/** Override fetch (tests). */
|
|
10
|
+
fetchImpl?: typeof fetch;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Reads a block's release health from Datadog for the post-release-health gate:
|
|
14
|
+
* resolve the block's monitor/SLO config (its own, else its service frame's) → read
|
|
15
|
+
* each monitor's state + each SLO's SLI-vs-target → reduce to a single verdict. On a
|
|
16
|
+
* regression, `gatherEvidence` adds recent error-log groups for the on-call agent.
|
|
17
|
+
* Returns a `healthy`/empty report when nothing is configured (the gate passes through).
|
|
18
|
+
*/
|
|
19
|
+
export declare class DatadogReleaseHealthProvider implements ReleaseHealthProvider {
|
|
20
|
+
private readonly deps;
|
|
21
|
+
constructor(deps: DatadogReleaseHealthProviderDependencies);
|
|
22
|
+
probe(workspaceId: string, blockId: string, since: number): Promise<ReleaseHealthReport>;
|
|
23
|
+
gatherEvidence(workspaceId: string, blockId: string, since: number): Promise<ReleaseEvidence>;
|
|
24
|
+
/** Resolve the connection + config for a block, building a client. Null when unconfigured. */
|
|
25
|
+
private resolve;
|
|
26
|
+
/** A block's release-health config: its own, else its nearest ancestor frame's. */
|
|
27
|
+
private resolveConfig;
|
|
28
|
+
private readSignals;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=DatadogReleaseHealthProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatadogReleaseHealthProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/datadog/DatadogReleaseHealthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,2BAA2B,EAC3B,eAAe,EAEf,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EAEnB,YAAY,EACb,MAAM,qBAAqB,CAAA;AAI5B,MAAM,WAAW,wCAAwC;IACvD,2BAA2B,EAAE,2BAA2B,CAAA;IACxD,6BAA6B,EAAE,6BAA6B,CAAA;IAC5D,+EAA+E;IAC/E,eAAe,EAAE,eAAe,CAAA;IAChC,kEAAkE;IAClE,YAAY,EAAE,YAAY,CAAA;IAC1B,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED;;;;;;GAMG;AACH,qBAAa,4BAA6B,YAAW,qBAAqB;IAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,wCAAwC,EAAI;IAEzE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAU7F;IAEK,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,CAAC,CAuB1B;IAED,8FAA8F;YAChF,OAAO;IAoBrB,mFAAmF;YACrE,aAAa;YAkBb,WAAW;CA+B1B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { DatadogClient } from './DatadogClient.js';
|
|
2
|
+
import { mapMonitorState, mapSloState } from './datadog.logic.js';
|
|
3
|
+
/**
|
|
4
|
+
* Reads a block's release health from Datadog for the post-release-health gate:
|
|
5
|
+
* resolve the block's monitor/SLO config (its own, else its service frame's) → read
|
|
6
|
+
* each monitor's state + each SLO's SLI-vs-target → reduce to a single verdict. On a
|
|
7
|
+
* regression, `gatherEvidence` adds recent error-log groups for the on-call agent.
|
|
8
|
+
* Returns a `healthy`/empty report when nothing is configured (the gate passes through).
|
|
9
|
+
*/
|
|
10
|
+
export class DatadogReleaseHealthProvider {
|
|
11
|
+
deps;
|
|
12
|
+
constructor(deps) {
|
|
13
|
+
this.deps = deps;
|
|
14
|
+
}
|
|
15
|
+
async probe(workspaceId, blockId, since) {
|
|
16
|
+
const resolved = await this.resolve(workspaceId, blockId);
|
|
17
|
+
if (!resolved)
|
|
18
|
+
return { status: 'healthy', signals: [] };
|
|
19
|
+
const { client, config } = resolved;
|
|
20
|
+
const signals = await this.readSignals(client, config, since);
|
|
21
|
+
if (signals.length === 0)
|
|
22
|
+
return { status: 'pending', signals };
|
|
23
|
+
if (signals.some((s) => s.state === 'alert'))
|
|
24
|
+
return { status: 'regressed', signals };
|
|
25
|
+
if (signals.every((s) => s.state === 'no_data'))
|
|
26
|
+
return { status: 'pending', signals };
|
|
27
|
+
return { status: 'healthy', signals };
|
|
28
|
+
}
|
|
29
|
+
async gatherEvidence(workspaceId, blockId, since) {
|
|
30
|
+
const resolved = await this.resolve(workspaceId, blockId);
|
|
31
|
+
if (!resolved)
|
|
32
|
+
return { regressedSignals: [], errors: [] };
|
|
33
|
+
const { client, config } = resolved;
|
|
34
|
+
const signals = await this.readSignals(client, config, since);
|
|
35
|
+
const regressedSignals = signals.filter((s) => s.state === 'alert');
|
|
36
|
+
// Pull recent error logs scoped to the env (when configured), best-effort, over the
|
|
37
|
+
// window [since, now].
|
|
38
|
+
const query = config.envTag ? `status:error env:${config.envTag}` : 'status:error';
|
|
39
|
+
const ddErrors = await client.recentErrorLogs(query, since, Date.now());
|
|
40
|
+
const errors = ddErrors.map((e) => ({
|
|
41
|
+
title: e.title,
|
|
42
|
+
count: e.count,
|
|
43
|
+
sampleMessage: e.sampleMessage,
|
|
44
|
+
}));
|
|
45
|
+
return {
|
|
46
|
+
regressedSignals,
|
|
47
|
+
errors,
|
|
48
|
+
notes: `Monitored ${config.monitorIds.length} monitor(s) and ${config.sloIds.length} SLO(s)${config.envTag ? ` for env ${config.envTag}` : ''}.`,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Resolve the connection + config for a block, building a client. Null when unconfigured. */
|
|
52
|
+
async resolve(workspaceId, blockId) {
|
|
53
|
+
const config = await this.resolveConfig(workspaceId, blockId);
|
|
54
|
+
if (!config || (config.monitorIds.length === 0 && config.sloIds.length === 0))
|
|
55
|
+
return null;
|
|
56
|
+
const connection = await this.deps.datadogConnectionRepository.get(workspaceId);
|
|
57
|
+
if (!connection)
|
|
58
|
+
return null;
|
|
59
|
+
const [apiKey, appKey] = await Promise.all([
|
|
60
|
+
this.deps.secretCipher.decrypt(connection.apiKey),
|
|
61
|
+
this.deps.secretCipher.decrypt(connection.appKey),
|
|
62
|
+
]);
|
|
63
|
+
const client = new DatadogClient({ site: connection.site, apiKey, appKey }, { fetchImpl: this.deps.fetchImpl });
|
|
64
|
+
return { client, config };
|
|
65
|
+
}
|
|
66
|
+
/** A block's release-health config: its own, else its nearest ancestor frame's. */
|
|
67
|
+
async resolveConfig(workspaceId, blockId) {
|
|
68
|
+
let currentId = blockId;
|
|
69
|
+
// Walk up the parent chain (task → module → frame), bounded against cycles.
|
|
70
|
+
for (let hops = 0; currentId && hops < 5; hops++) {
|
|
71
|
+
const config = await this.deps.releaseHealthConfigRepository.getByBlock(workspaceId, currentId);
|
|
72
|
+
if (config)
|
|
73
|
+
return config;
|
|
74
|
+
const block = await this.deps.blockRepository.get(workspaceId, currentId);
|
|
75
|
+
currentId = block?.parentId ?? null;
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
async readSignals(client, config, since) {
|
|
80
|
+
const now = Date.now();
|
|
81
|
+
const fromTs = Math.floor(since / 1000);
|
|
82
|
+
const toTs = Math.floor(now / 1000);
|
|
83
|
+
const monitors = await Promise.all(config.monitorIds.map(async (id) => {
|
|
84
|
+
const m = await client.getMonitor(id);
|
|
85
|
+
// Attribute the alert to THIS release: a monitor already alerting before the
|
|
86
|
+
// release marker (`since`) is a pre-existing incident, not this PR's regression.
|
|
87
|
+
const state = mapMonitorState(m.overallState, { stateModifiedMs: m.stateModifiedMs, since });
|
|
88
|
+
return { kind: 'monitor', id, name: m.name, state };
|
|
89
|
+
}));
|
|
90
|
+
const slos = await Promise.all(config.sloIds.map(async (id) => {
|
|
91
|
+
const s = await client.getSloState(id, fromTs, toTs);
|
|
92
|
+
const state = mapSloState(s.sliValue, s.target);
|
|
93
|
+
const detail = s.sliValue !== null && s.target !== null
|
|
94
|
+
? `SLI ${s.sliValue.toFixed(2)} vs target ${s.target}`
|
|
95
|
+
: undefined;
|
|
96
|
+
return { kind: 'slo', id, name: s.name, state, detail };
|
|
97
|
+
}));
|
|
98
|
+
return [...monitors, ...slos];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=DatadogReleaseHealthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatadogReleaseHealthProvider.js","sourceRoot":"","sources":["../../../src/modules/datadog/DatadogReleaseHealthProvider.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAajE;;;;;;GAMG;AACH,MAAM,OAAO,4BAA4B;IACV,IAAI;IAAjC,YAA6B,IAA8C;oBAA9C,IAAI;IAA6C,CAAC;IAE/E,KAAK,CAAC,KAAK,CAAC,WAAmB,EAAE,OAAe,EAAE,KAAa;QAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACzD,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;QACxD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAA;QAEnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;QAC/D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAA;QACrF,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;QACtF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,WAAmB,EACnB,OAAe,EACf,KAAa;QAEb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACzD,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QAC1D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAA;QAEnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QAC7D,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAA;QAEnE,oFAAoF;QACpF,uBAAuB;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,cAAc,CAAA;QAClF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QACvE,MAAM,MAAM,GAA8B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,aAAa,EAAE,CAAC,CAAC,aAAa;SAC/B,CAAC,CAAC,CAAA;QAEH,OAAO;YACL,gBAAgB;YAChB,MAAM;YACN,KAAK,EAAE,aAAa,MAAM,CAAC,UAAU,CAAC,MAAM,mBAAmB,MAAM,CAAC,MAAM,CAAC,MAAM,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;SACjJ,CAAA;IACH,CAAC;IAED,8FAA8F;IACtF,KAAK,CAAC,OAAO,CACnB,WAAmB,EACnB,OAAe;QAEf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAC7D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAE1F,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC/E,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAA;QAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;SAClD,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,IAAI,aAAa,CAC9B,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EACzC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CACnC,CAAA;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;IAC3B,CAAC;IAED,mFAAmF;IAC3E,KAAK,CAAC,aAAa,CACzB,WAAmB,EACnB,OAAe;QAEf,IAAI,SAAS,GAAkB,OAAO,CAAA;QACtC,4EAA4E;QAC5E,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,SAAS,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,UAAU,CACrE,WAAW,EACX,SAAS,CACV,CAAA;YACD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;YACzE,SAAS,GAAG,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAA;QACrC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,MAAqB,EACrB,MAAiC,EACjC,KAAa;QAEb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;QAEnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAA0B,EAAE;YACzD,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YACrC,6EAA6E;YAC7E,iFAAiF;YACjF,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,CAAA;YAC5F,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;QACrD,CAAC,CAAC,CACH,CAAA;QACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAA0B,EAAE;YACrD,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;YACpD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;YAC/C,MAAM,MAAM,GACV,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI;gBACtC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE;gBACtD,CAAC,CAAC,SAAS,CAAA;YACf,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;QACzD,CAAC,CAAC,CACH,CAAA;QACD,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAA;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ReleaseSignalState } from '@cat-factory/kernel';
|
|
2
|
+
/** The domain tag used to seal Datadog credentials at rest (HKDF info). */
|
|
3
|
+
export declare const DATADOG_CIPHER_INFO = "cat-factory:datadog";
|
|
4
|
+
/**
|
|
5
|
+
* Validate a configured Datadog `site` host and return the normalized host (no
|
|
6
|
+
* scheme/path). Throws when it isn't a recognised Datadog host so a misconfiguration
|
|
7
|
+
* can't turn the server into an SSRF vector. Accepts a bare host or a full URL.
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeDatadogSite(site: string): string;
|
|
10
|
+
/** The API base URL for a (validated) site host. */
|
|
11
|
+
export declare function datadogApiBase(site: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Map Datadog's monitor `overall_state` string onto a release signal state.
|
|
14
|
+
*
|
|
15
|
+
* `attribution` lets the post-release-health gate ignore an alert that PREDATES the
|
|
16
|
+
* release it is watching: a monitor already alerting before `since` (an unrelated /
|
|
17
|
+
* flaky / never-recovered incident) is not attributable to this release, so it is
|
|
18
|
+
* downgraded to `warn` (which does NOT regress the gate) rather than escalating an
|
|
19
|
+
* on-call investigation that blames an innocent PR. When the transition timestamp is
|
|
20
|
+
* unknown (Datadog didn't report `overall_state_modified`) we keep the alert — better
|
|
21
|
+
* to investigate than to silently miss a real regression.
|
|
22
|
+
*/
|
|
23
|
+
export declare function mapMonitorState(overallState: string | undefined, attribution?: {
|
|
24
|
+
stateModifiedMs?: number;
|
|
25
|
+
since: number;
|
|
26
|
+
}): ReleaseSignalState;
|
|
27
|
+
/**
|
|
28
|
+
* Map an SLO's current SLI value vs its target onto a release signal state:
|
|
29
|
+
* below target → `alert` (error budget breached), at/above → `ok`, missing → `no_data`.
|
|
30
|
+
*/
|
|
31
|
+
export declare function mapSloState(sliValue: number | null, target: number | null): ReleaseSignalState;
|
|
32
|
+
export declare class DatadogApiError extends Error {
|
|
33
|
+
readonly endpoint: string;
|
|
34
|
+
readonly detail: string;
|
|
35
|
+
constructor(endpoint: string, detail: string);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=datadog.logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datadog.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/datadog/datadog.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAM7D,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,wBAAwB,CAAA;AAYxD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYzD;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,WAAW,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxD,kBAAkB,CAuBpB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,kBAAkB,CAG9F;AAED,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAFzB,YACW,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAIxB;CACF"}
|