@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
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TaskSourceKind } from '@cat-factory/kernel';
|
|
2
|
+
import type { TaskSourceProvider, TaskSourceRegistry, TaskContent } from '@cat-factory/kernel';
|
|
3
|
+
import type { TaskRecord } from '@cat-factory/kernel';
|
|
4
|
+
import { MapSourceRegistry } from '@cat-factory/kernel';
|
|
5
|
+
export type { TaskContextView } from '@cat-factory/kernel';
|
|
6
|
+
export { renderTaskContext } from '@cat-factory/kernel';
|
|
7
|
+
/** A trivial in-memory provider registry built from the wired providers. */
|
|
8
|
+
export declare class MapTaskSourceRegistry extends MapSourceRegistry<TaskSourceKind, TaskSourceProvider> implements TaskSourceRegistry {
|
|
9
|
+
}
|
|
10
|
+
/** A short plain-text excerpt of an issue: its summary + the start of its description. */
|
|
11
|
+
export declare function buildTaskExcerpt(content: TaskContent | TaskRecord, max?: number): string;
|
|
12
|
+
//# sourceMappingURL=tasks.logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/tasks.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAgC,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAErF,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAQvD,4EAA4E;AAC5E,qBAAa,qBACX,SAAQ,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,CAC5D,YAAW,kBAAkB;CAAG;AAElC,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,EAAE,GAAG,SAAM,GAAG,MAAM,CAIrF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { markdownToText, buildExcerpt, MapSourceRegistry } from '@cat-factory/kernel';
|
|
2
|
+
export { renderTaskContext } from '@cat-factory/kernel';
|
|
3
|
+
// Source-agnostic helpers shared by every task source: a trivial provider
|
|
4
|
+
// registry, deriving a plain-text excerpt from an issue, and rendering an issue
|
|
5
|
+
// into the compact Markdown section fed to agents as context. Providers normalize
|
|
6
|
+
// their description/comment bodies to lightweight Markdown so these stay
|
|
7
|
+
// independent of any one source's format. Kept pure for easy testing.
|
|
8
|
+
/** A trivial in-memory provider registry built from the wired providers. */
|
|
9
|
+
export class MapTaskSourceRegistry extends MapSourceRegistry {
|
|
10
|
+
}
|
|
11
|
+
/** A short plain-text excerpt of an issue: its summary + the start of its description. */
|
|
12
|
+
export function buildTaskExcerpt(content, max = 280) {
|
|
13
|
+
const description = markdownToText(content.description);
|
|
14
|
+
const lead = description ? `${content.title} — ${description}` : content.title;
|
|
15
|
+
return buildExcerpt(lead, max);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=tasks.logic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.logic.js","sourceRoot":"","sources":["../../../src/modules/tasks/tasks.logic.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,0EAA0E;AAC1E,gFAAgF;AAChF,kFAAkF;AAClF,yEAAyE;AACzE,sEAAsE;AAEtE,4EAA4E;AAC5E,MAAM,OAAO,qBACX,SAAQ,iBAAqD;CAC7B;AAElC,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB,CAAC,OAAiC,EAAE,GAAG,GAAG,GAAG;IAC3E,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACvD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,MAAM,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAA;IAC9E,OAAO,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAChC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { CreateTicketRequest, CreatedTicket, TicketTrackerProvider, TrackerSettingsRepository } from '@cat-factory/kernel';
|
|
2
|
+
/** Jira Cloud credentials (HTTP Basic: account email + API token against a site). */
|
|
3
|
+
export interface JiraConnection {
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
accountEmail: string;
|
|
6
|
+
apiToken: string;
|
|
7
|
+
}
|
|
8
|
+
export interface TicketTrackerServiceDependencies {
|
|
9
|
+
trackerSettingsRepository: TrackerSettingsRepository;
|
|
10
|
+
/**
|
|
11
|
+
* Files a GitHub issue for the request's service frame and returns the created
|
|
12
|
+
* ticket, or null when GitHub isn't configured for the workspace. The facade
|
|
13
|
+
* resolves the repo + auth (App installation token on Cloudflare, a token + env
|
|
14
|
+
* repo on Node). Absent → the GitHub tracker passes through.
|
|
15
|
+
*/
|
|
16
|
+
fileGitHubIssue?: (request: CreateTicketRequest) => Promise<CreatedTicket | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Resolves the workspace's Jira credentials, or null when Jira isn't configured.
|
|
19
|
+
* Absent → the Jira tracker passes through.
|
|
20
|
+
*/
|
|
21
|
+
resolveJiraConnection?: (workspaceId: string) => Promise<JiraConnection | null>;
|
|
22
|
+
/**
|
|
23
|
+
* HTTP transport for the Jira create call. Injected by each runtime (both expose
|
|
24
|
+
* a global `fetch`) so this package needs no DOM lib; absent → Jira passes through.
|
|
25
|
+
*/
|
|
26
|
+
fetchImpl?: FetchLike;
|
|
27
|
+
}
|
|
28
|
+
/** The minimal slice of the Fetch API the Jira create call needs (no DOM lib). */
|
|
29
|
+
export type FetchLike = (url: string, init: {
|
|
30
|
+
method: string;
|
|
31
|
+
headers: Record<string, string>;
|
|
32
|
+
body: string;
|
|
33
|
+
}) => Promise<{
|
|
34
|
+
ok: boolean;
|
|
35
|
+
status: number;
|
|
36
|
+
text(): Promise<string>;
|
|
37
|
+
json(): Promise<unknown>;
|
|
38
|
+
}>;
|
|
39
|
+
export declare class TicketTrackerService implements TicketTrackerProvider {
|
|
40
|
+
private readonly deps;
|
|
41
|
+
constructor(deps: TicketTrackerServiceDependencies);
|
|
42
|
+
createTicket(request: CreateTicketRequest): Promise<CreatedTicket | null>;
|
|
43
|
+
private createJiraIssue;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=TicketTrackerService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TicketTrackerService.d.ts","sourceRoot":"","sources":["../../../src/modules/tracker/TicketTrackerService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,qBAAqB,CAAA;AAc5B,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gCAAgC;IAC/C,yBAAyB,EAAE,yBAAyB,CAAA;IACpD;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACjF;;;OAGG;IACH,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAC/E;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACpE,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAAA;AAIhG,qBAAa,oBAAqB,YAAW,qBAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,gCAAgC,EAAI;IAEjE,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAM9E;YAEa,eAAe;CAkC9B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { buildJiraIssuePayload } from './jira.create.logic.js';
|
|
2
|
+
import { toBase64 } from './base64.js';
|
|
3
|
+
const USER_AGENT = 'cat-factory';
|
|
4
|
+
export class TicketTrackerService {
|
|
5
|
+
deps;
|
|
6
|
+
constructor(deps) {
|
|
7
|
+
this.deps = deps;
|
|
8
|
+
}
|
|
9
|
+
async createTicket(request) {
|
|
10
|
+
const settings = await this.deps.trackerSettingsRepository.get(request.workspaceId);
|
|
11
|
+
if (!settings?.tracker)
|
|
12
|
+
return null;
|
|
13
|
+
if (settings.tracker === 'github')
|
|
14
|
+
return (await this.deps.fileGitHubIssue?.(request)) ?? null;
|
|
15
|
+
if (settings.tracker === 'jira')
|
|
16
|
+
return this.createJiraIssue(request, settings.jiraProjectKey);
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
async createJiraIssue(request, projectKey) {
|
|
20
|
+
const { resolveJiraConnection, fetchImpl } = this.deps;
|
|
21
|
+
if (!resolveJiraConnection || !fetchImpl || !projectKey)
|
|
22
|
+
return null;
|
|
23
|
+
const connection = await resolveJiraConnection(request.workspaceId);
|
|
24
|
+
if (!connection)
|
|
25
|
+
return null;
|
|
26
|
+
const { baseUrl, accountEmail, apiToken } = connection;
|
|
27
|
+
if (!baseUrl || !accountEmail || !apiToken)
|
|
28
|
+
return null;
|
|
29
|
+
const base = baseUrl.replace(/\/+$/, '');
|
|
30
|
+
const url = `${base}/rest/api/3/issue`;
|
|
31
|
+
const auth = toBase64(`${accountEmail}:${apiToken}`);
|
|
32
|
+
const res = await fetchImpl(url, {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: {
|
|
35
|
+
authorization: `Basic ${auth}`,
|
|
36
|
+
accept: 'application/json',
|
|
37
|
+
'content-type': 'application/json',
|
|
38
|
+
'user-agent': USER_AGENT,
|
|
39
|
+
},
|
|
40
|
+
body: JSON.stringify(buildJiraIssuePayload({ projectKey, title: request.title, body: request.body })),
|
|
41
|
+
});
|
|
42
|
+
if (!res.ok) {
|
|
43
|
+
const text = await res.text().catch(() => '');
|
|
44
|
+
throw new Error(`Jira POST ${url} → ${res.status}: ${text.slice(0, 300)}`);
|
|
45
|
+
}
|
|
46
|
+
const json = (await res.json().catch(() => null));
|
|
47
|
+
if (!json?.key)
|
|
48
|
+
throw new Error('Jira returned no issue key for the created issue');
|
|
49
|
+
return { externalId: json.key, url: `${base}/browse/${json.key}` };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=TicketTrackerService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TicketTrackerService.js","sourceRoot":"","sources":["../../../src/modules/tracker/TicketTrackerService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../../src/modules/tracker/base64.ts"],"names":[],"mappings":"AAMA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAY9C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Pure base64 encoder for ASCII credentials (HTTP Basic auth). Avoids depending on
|
|
2
|
+
// `btoa` (DOM lib) or `Buffer` (Node lib) so this package stays runtime-neutral.
|
|
3
|
+
// Jira account emails + API tokens are ASCII, so a byte-per-char encode is correct.
|
|
4
|
+
const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
5
|
+
export function toBase64(input) {
|
|
6
|
+
let out = '';
|
|
7
|
+
for (let i = 0; i < input.length; i += 3) {
|
|
8
|
+
const b0 = input.charCodeAt(i) & 0xff;
|
|
9
|
+
const b1 = i + 1 < input.length ? input.charCodeAt(i + 1) & 0xff : 0;
|
|
10
|
+
const b2 = i + 2 < input.length ? input.charCodeAt(i + 2) & 0xff : 0;
|
|
11
|
+
out += ALPHABET[b0 >> 2];
|
|
12
|
+
out += ALPHABET[((b0 & 0x03) << 4) | (b1 >> 4)];
|
|
13
|
+
out += i + 1 < input.length ? ALPHABET[((b1 & 0x0f) << 2) | (b2 >> 6)] : '=';
|
|
14
|
+
out += i + 2 < input.length ? ALPHABET[b2 & 0x3f] : '=';
|
|
15
|
+
}
|
|
16
|
+
return out;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../../src/modules/tracker/base64.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,iFAAiF;AACjF,oFAAoF;AAEpF,MAAM,QAAQ,GAAG,kEAAkE,CAAA;AAEnF,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;QACrC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACpE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACpE,GAAG,IAAI,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;QACxB,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/C,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QAC5E,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACzD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { FetchLike } from './TicketTrackerService.js';
|
|
2
|
+
export interface GitHubIssueTokenRequest {
|
|
3
|
+
fetchImpl: FetchLike;
|
|
4
|
+
token: string;
|
|
5
|
+
owner: string;
|
|
6
|
+
repo: string;
|
|
7
|
+
title: string;
|
|
8
|
+
body: string;
|
|
9
|
+
apiBase?: string;
|
|
10
|
+
}
|
|
11
|
+
/** File an issue and return its number + canonical web URL. */
|
|
12
|
+
export declare function createGitHubIssueViaToken(req: GitHubIssueTokenRequest): Promise<{
|
|
13
|
+
number: number;
|
|
14
|
+
url: string;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=github.create.logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.create.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/tracker/github.create.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAU1D,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,SAAS,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,+DAA+D;AAC/D,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,uBAAuB,GAC3B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB1C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** File an issue and return its number + canonical web URL. */
|
|
2
|
+
export async function createGitHubIssueViaToken(req) {
|
|
3
|
+
const base = (req.apiBase ?? 'https://api.github.com').replace(/\/+$/, '');
|
|
4
|
+
const url = `${base}/repos/${req.owner}/${req.repo}/issues`;
|
|
5
|
+
const res = await req.fetchImpl(url, {
|
|
6
|
+
method: 'POST',
|
|
7
|
+
headers: {
|
|
8
|
+
authorization: `Bearer ${req.token}`,
|
|
9
|
+
accept: 'application/vnd.github+json',
|
|
10
|
+
'content-type': 'application/json',
|
|
11
|
+
'user-agent': 'cat-factory',
|
|
12
|
+
'x-github-api-version': '2022-11-28',
|
|
13
|
+
},
|
|
14
|
+
body: JSON.stringify({ title: req.title, body: req.body }),
|
|
15
|
+
});
|
|
16
|
+
if (!res.ok) {
|
|
17
|
+
const text = await res.text().catch(() => '');
|
|
18
|
+
throw new Error(`GitHub POST ${url} → ${res.status}: ${text.slice(0, 300)}`);
|
|
19
|
+
}
|
|
20
|
+
const json = (await res.json().catch(() => null));
|
|
21
|
+
if (!json?.number)
|
|
22
|
+
throw new Error('GitHub returned no issue number for the created issue');
|
|
23
|
+
return { number: json.number, url: json.html_url ?? '' };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=github.create.logic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.create.logic.js","sourceRoot":"","sources":["../../../src/modules/tracker/github.create.logic.ts"],"names":[],"mappings":"AAoBA,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAA4B;IAE5B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,wBAAwB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC1E,MAAM,GAAG,GAAG,GAAG,IAAI,UAAU,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,SAAS,CAAA;IAC3D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACnC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE;YACpC,MAAM,EAAE,6BAA6B;YACrC,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,aAAa;YAC3B,sBAAsB,EAAE,YAAY;SACrC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;KAC3D,CAAC,CAAA;IACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QAC7C,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,MAAM,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;IAC9E,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAGxC,CAAA;IACR,IAAI,CAAC,IAAI,EAAE,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC3F,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAA;AAC1D,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
interface AdfText {
|
|
2
|
+
type: 'text';
|
|
3
|
+
text: string;
|
|
4
|
+
}
|
|
5
|
+
interface AdfNode {
|
|
6
|
+
type: string;
|
|
7
|
+
content?: (AdfNode | AdfText)[];
|
|
8
|
+
attrs?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface AdfDoc {
|
|
11
|
+
type: 'doc';
|
|
12
|
+
version: 1;
|
|
13
|
+
content: AdfNode[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Convert lightweight Markdown into ADF. Deliberately minimal — paragraphs split
|
|
17
|
+
* on blank lines, `#`/`##`/`###` headings, and `- ` bullet lists — which covers
|
|
18
|
+
* the analysis reports the tech-debt pipeline produces. Anything else is carried
|
|
19
|
+
* through as paragraph text so no content is lost. An empty body yields a single
|
|
20
|
+
* empty paragraph (ADF requires non-empty `content`).
|
|
21
|
+
*/
|
|
22
|
+
export declare function markdownToAdf(markdown: string): AdfDoc;
|
|
23
|
+
/** Build the POST /rest/api/3/issue request body for a new issue. */
|
|
24
|
+
export declare function buildJiraIssuePayload(input: {
|
|
25
|
+
projectKey: string;
|
|
26
|
+
title: string;
|
|
27
|
+
body: string;
|
|
28
|
+
issueType?: string;
|
|
29
|
+
}): Record<string, unknown>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=jira.create.logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira.create.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/tracker/jira.create.logic.ts"],"names":[],"mappings":"AAKA,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AACD,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AACD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,KAAK,CAAA;IACX,OAAO,EAAE,CAAC,CAAA;IACV,OAAO,EAAE,OAAO,EAAE,CAAA;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiCtD;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAS1B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Pure helpers for filing a Jira issue: converting a Markdown body into the
|
|
2
|
+
// minimal Atlassian Document Format (ADF) Jira's create API expects, and building
|
|
3
|
+
// the request payload. Kept out of the worker so it is unit-testable without a
|
|
4
|
+
// live site (the inverse of `jira.logic.ts`'s `adfToMarkdown`).
|
|
5
|
+
/**
|
|
6
|
+
* Convert lightweight Markdown into ADF. Deliberately minimal — paragraphs split
|
|
7
|
+
* on blank lines, `#`/`##`/`###` headings, and `- ` bullet lists — which covers
|
|
8
|
+
* the analysis reports the tech-debt pipeline produces. Anything else is carried
|
|
9
|
+
* through as paragraph text so no content is lost. An empty body yields a single
|
|
10
|
+
* empty paragraph (ADF requires non-empty `content`).
|
|
11
|
+
*/
|
|
12
|
+
export function markdownToAdf(markdown) {
|
|
13
|
+
const blocks = markdown.replace(/\r\n/g, '\n').split(/\n{2,}/);
|
|
14
|
+
const content = [];
|
|
15
|
+
for (const raw of blocks) {
|
|
16
|
+
const block = raw.trim();
|
|
17
|
+
if (!block)
|
|
18
|
+
continue;
|
|
19
|
+
const heading = block.match(/^(#{1,3})\s+(.*)$/);
|
|
20
|
+
if (heading) {
|
|
21
|
+
content.push({
|
|
22
|
+
type: 'heading',
|
|
23
|
+
attrs: { level: heading[1].length },
|
|
24
|
+
content: [{ type: 'text', text: heading[2].trim() }],
|
|
25
|
+
});
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const lines = block.split('\n');
|
|
29
|
+
const isList = lines.every((l) => /^\s*[-*]\s+/.test(l));
|
|
30
|
+
if (isList) {
|
|
31
|
+
content.push({
|
|
32
|
+
type: 'bulletList',
|
|
33
|
+
content: lines.map((l) => ({
|
|
34
|
+
type: 'listItem',
|
|
35
|
+
content: [
|
|
36
|
+
{ type: 'paragraph', content: [{ type: 'text', text: l.replace(/^\s*[-*]\s+/, '') }] },
|
|
37
|
+
],
|
|
38
|
+
})),
|
|
39
|
+
});
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
content.push({ type: 'paragraph', content: [{ type: 'text', text: lines.join(' ') }] });
|
|
43
|
+
}
|
|
44
|
+
if (content.length === 0)
|
|
45
|
+
content.push({ type: 'paragraph', content: [] });
|
|
46
|
+
return { type: 'doc', version: 1, content };
|
|
47
|
+
}
|
|
48
|
+
/** Build the POST /rest/api/3/issue request body for a new issue. */
|
|
49
|
+
export function buildJiraIssuePayload(input) {
|
|
50
|
+
return {
|
|
51
|
+
fields: {
|
|
52
|
+
project: { key: input.projectKey },
|
|
53
|
+
summary: input.title.slice(0, 250),
|
|
54
|
+
description: markdownToAdf(input.body),
|
|
55
|
+
issuetype: { name: input.issueType ?? 'Task' },
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=jira.create.logic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira.create.logic.js","sourceRoot":"","sources":["../../../src/modules/tracker/jira.create.logic.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,kFAAkF;AAClF,+EAA+E;AAC/E,gEAAgE;AAiBhE;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC9D,MAAM,OAAO,GAAc,EAAE,CAAA;IAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;QACxB,IAAI,CAAC,KAAK;YAAE,SAAQ;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QAChD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,EAAE;gBACpC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,CAAC;aACtD,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;qBACvF;iBACF,CAAC,CAAC;aACJ,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACzF,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;IAC1E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAA;AAC7C,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CAAC,KAKrC;IACC,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE;YAClC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAClC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;YACtC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,IAAI,MAAM,EAAE;SAC/C;KACF,CAAA;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cat-factory/integrations",
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "External-system integration domain logic for the Agent Architecture Board (GitHub, documents, tasks, environments, runners).",
|
|
5
|
+
"files": [
|
|
6
|
+
"dist"
|
|
7
|
+
],
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"default": "./dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./package.json": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"ai": "^6.0.208",
|
|
23
|
+
"@cat-factory/contracts": "0.6.0",
|
|
24
|
+
"@cat-factory/kernel": "0.6.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"typescript": "7.0.1-rc",
|
|
28
|
+
"vitest": "^4.1.9"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc -b tsconfig.build.json",
|
|
32
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"test:run": "vitest run"
|
|
35
|
+
}
|
|
36
|
+
}
|