@cat-factory/integrations 0.94.1 → 0.95.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.
Files changed (37) hide show
  1. package/dist/index.d.ts +6 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +13 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/modules/environments/environments.logic.d.ts +6 -2
  6. package/dist/modules/environments/environments.logic.d.ts.map +1 -1
  7. package/dist/modules/environments/environments.logic.js +9 -42
  8. package/dist/modules/environments/environments.logic.js.map +1 -1
  9. package/dist/modules/notificationWebhook/NotificationWebhookService.d.ts +25 -0
  10. package/dist/modules/notificationWebhook/NotificationWebhookService.d.ts.map +1 -0
  11. package/dist/modules/notificationWebhook/NotificationWebhookService.js +49 -0
  12. package/dist/modules/notificationWebhook/NotificationWebhookService.js.map +1 -0
  13. package/dist/modules/notificationWebhook/WebhookNotificationChannel.d.ts +39 -0
  14. package/dist/modules/notificationWebhook/WebhookNotificationChannel.d.ts.map +1 -0
  15. package/dist/modules/notificationWebhook/WebhookNotificationChannel.js +154 -0
  16. package/dist/modules/notificationWebhook/WebhookNotificationChannel.js.map +1 -0
  17. package/dist/modules/notificationWebhook/support.d.ts +42 -0
  18. package/dist/modules/notificationWebhook/support.d.ts.map +1 -0
  19. package/dist/modules/notificationWebhook/support.js +37 -0
  20. package/dist/modules/notificationWebhook/support.js.map +1 -0
  21. package/dist/modules/notificationWebhook/webhookSignature.d.ts +17 -0
  22. package/dist/modules/notificationWebhook/webhookSignature.d.ts.map +1 -0
  23. package/dist/modules/notificationWebhook/webhookSignature.js +42 -0
  24. package/dist/modules/notificationWebhook/webhookSignature.js.map +1 -0
  25. package/dist/modules/notificationWebhook/webhookUrl.d.ts +9 -0
  26. package/dist/modules/notificationWebhook/webhookUrl.d.ts.map +1 -0
  27. package/dist/modules/notificationWebhook/webhookUrl.js +26 -0
  28. package/dist/modules/notificationWebhook/webhookUrl.js.map +1 -0
  29. package/dist/modules/publicApi/PublicApiKeyService.d.ts +6 -3
  30. package/dist/modules/publicApi/PublicApiKeyService.d.ts.map +1 -1
  31. package/dist/modules/publicApi/PublicApiKeyService.js +9 -4
  32. package/dist/modules/publicApi/PublicApiKeyService.js.map +1 -1
  33. package/dist/modules/shared/url-guard.d.ts +24 -0
  34. package/dist/modules/shared/url-guard.d.ts.map +1 -0
  35. package/dist/modules/shared/url-guard.js +53 -0
  36. package/dist/modules/shared/url-guard.js.map +1 -0
  37. package/package.json +4 -4
package/dist/index.d.ts CHANGED
@@ -90,6 +90,12 @@ export { PreflightService, preflightBlockingFailures, formatPreflightFailure, }
90
90
  export { ProvisioningLogRecorder, ProvisioningLogService, PROVISIONING_LOG_MAX_LIMIT, type ProvisioningLogEvent, type ProvisioningLogRecorderDependencies, type ProvisioningLogServiceDependencies, } from './modules/provisioning-logs/ProvisioningLogService.js';
91
91
  export { LoggingRunnerTransport, type LoggingRunnerTransportOptions, } from './modules/provisioning-logs/LoggingRunnerTransport.js';
92
92
  export { redactSecrets } from './modules/provisioning-logs/redact.js';
93
+ export { WebhookNotificationChannel, type WebhookNotificationChannelDependencies, } from './modules/notificationWebhook/WebhookNotificationChannel.js';
94
+ export { NotificationWebhookService, type NotificationWebhookServiceDependencies, } from './modules/notificationWebhook/NotificationWebhookService.js';
95
+ export { WEBHOOK_SIGNATURE_HEADERS, signWebhookDelivery, } from './modules/notificationWebhook/webhookSignature.js';
96
+ export { NOTIFICATION_WEBHOOK_CIPHER_INFO, buildNotificationWebhookSupport, type NotificationWebhookSupportDependencies, } from './modules/notificationWebhook/support.js';
97
+ export { assertSafeNotificationWebhookUrl } from './modules/notificationWebhook/webhookUrl.js';
98
+ export { assertSafePublicUrl, type PublicUrlGuardOptions } from './modules/shared/url-guard.js';
93
99
  export { SlackNotificationChannel, type SlackNotificationChannelDependencies, } from './modules/slack/SlackNotificationChannel.js';
94
100
  export { SlackConnectionService, type SlackConnectionServiceDependencies, } from './modules/slack/SlackConnectionService.js';
95
101
  export { SlackSettingsService, type SlackSettingsServiceDependencies, } from './modules/slack/SlackSettingsService.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -126,6 +126,19 @@ export { PreflightService, preflightBlockingFailures, formatPreflightFailure, }
126
126
  export { ProvisioningLogRecorder, ProvisioningLogService, PROVISIONING_LOG_MAX_LIMIT, } from './modules/provisioning-logs/ProvisioningLogService.js';
127
127
  export { LoggingRunnerTransport, } from './modules/provisioning-logs/LoggingRunnerTransport.js';
128
128
  export { redactSecrets } from './modules/provisioning-logs/redact.js';
129
+ // Notification webhook: an outbound HTTP delivery transport for the existing notification
130
+ // mechanism (`WebhookNotificationChannel` implements the same `NotificationChannel` port),
131
+ // plus the per-workspace endpoint management service. This is how a HEADLESS integration —
132
+ // which has no in-app inbox and no browser WebSocket — learns that a run parked.
133
+ export { WebhookNotificationChannel, } from './modules/notificationWebhook/WebhookNotificationChannel.js';
134
+ export { NotificationWebhookService, } from './modules/notificationWebhook/NotificationWebhookService.js';
135
+ export { WEBHOOK_SIGNATURE_HEADERS, signWebhookDelivery, } from './modules/notificationWebhook/webhookSignature.js';
136
+ export { NOTIFICATION_WEBHOOK_CIPHER_INFO, buildNotificationWebhookSupport, } from './modules/notificationWebhook/support.js';
137
+ export { assertSafeNotificationWebhookUrl } from './modules/notificationWebhook/webhookUrl.js';
138
+ // The provider-neutral SSRF host/scheme guard behind every operator-supplied-URL integration
139
+ // (environments, runner pools, notification webhooks). One implementation, so a bypass found in
140
+ // any of them is fixed for all of them; each caller supplies only its wording + its own policy.
141
+ export { assertSafePublicUrl } from './modules/shared/url-guard.js';
129
142
  // Slack: an additional delivery transport for the existing notification mechanism
130
143
  // (the `SlackNotificationChannel` implements the same `NotificationChannel` port),
131
144
  // plus the per-account connection / per-workspace routing / member-mapping services.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -34,8 +34,12 @@ export declare function shouldTeardownSuperseded(prior: EnvironmentIdentity, nex
34
34
  * (STRICT_URL_SAFETY_POLICY) requires `https` and rejects internal/private hosts; a
35
35
  * trusted operator-installed adapter can pass a widened policy to permit specific
36
36
  * schemes/hosts (e.g. an internal env platform on a private/VPN host). Embedded
37
- * credentials are forbidden regardless of policy. Parsed by hand (no `URL` global) so
38
- * this stays in the platform-agnostic core.
37
+ * credentials are forbidden regardless of policy.
38
+ *
39
+ * The environment-labelled face of the SHARED {@link assertSafePublicUrl} guard, which the
40
+ * runner-pool and notification-webhook integrations also front with their own wording. Only the
41
+ * message differs — the host/scheme rules are one implementation, so an SSRF bypass is fixed once
42
+ * rather than per integration.
39
43
  */
40
44
  export declare function assertSafeEnvironmentUrl(url: string, label?: string, policy?: UrlSafetyPolicy): void;
41
45
  /** Validate every URL a manifest will fetch (defence against SSRF). */
@@ -1 +1 @@
1
- {"version":3,"file":"environments.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/environments.logic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environments.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/environments/environments.logic.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import { getErrorMessage, isBlockedPrivateHost, STRICT_URL_SAFETY_POLICY, ValidationError, } from '@cat-factory/kernel';
1
+ import { getErrorMessage, STRICT_URL_SAFETY_POLICY } from '@cat-factory/kernel';
2
2
  import { safeFetch } from '../shared/safe-fetch.js';
3
+ import { assertSafePublicUrl } from '../shared/url-guard.js';
3
4
  // Pure helpers for the ephemeral-environment integration: SSRF validation of the
4
5
  // URLs we fetch/expose, `{{var}}` interpolation over a bounded scope, dot-path
5
6
  // extraction from an arbitrary self-rolled response, status mapping and expiry
@@ -41,54 +42,20 @@ export function shouldTeardownSuperseded(prior, next) {
41
42
  return true;
42
43
  return false;
43
44
  }
44
- /**
45
- * Whether `host` is exempt from the private/internal-host block under `policy`.
46
- * An allow-list entry matches the hostname case-insensitively, either exactly or as a
47
- * dot suffix when it begins with `.` (`.internal` matches `a.b.internal`).
48
- */
49
- function hostExempt(host, policy) {
50
- const h = host.toLowerCase().replace(/^\[|\]$/g, '');
51
- return policy.allowHosts.some((entry) => {
52
- const e = entry.toLowerCase();
53
- return e.startsWith('.') ? h === e.slice(1) || h.endsWith(e) : h === e;
54
- });
55
- }
56
45
  /**
57
46
  * Validate a URL before it is stored, fetched, or exposed. The default policy
58
47
  * (STRICT_URL_SAFETY_POLICY) requires `https` and rejects internal/private hosts; a
59
48
  * trusted operator-installed adapter can pass a widened policy to permit specific
60
49
  * schemes/hosts (e.g. an internal env platform on a private/VPN host). Embedded
61
- * credentials are forbidden regardless of policy. Parsed by hand (no `URL` global) so
62
- * this stays in the platform-agnostic core.
50
+ * credentials are forbidden regardless of policy.
51
+ *
52
+ * The environment-labelled face of the SHARED {@link assertSafePublicUrl} guard, which the
53
+ * runner-pool and notification-webhook integrations also front with their own wording. Only the
54
+ * message differs — the host/scheme rules are one implementation, so an SSRF bypass is fixed once
55
+ * rather than per integration.
63
56
  */
64
57
  export function assertSafeEnvironmentUrl(url, label = 'URL', policy = STRICT_URL_SAFETY_POLICY) {
65
- const invalid = () => new ValidationError(`Environment ${label} is not a valid URL: '${url}'`);
66
- const match = url.match(/^([a-zA-Z][a-zA-Z0-9+.-]*):\/\/([^/?#]*)/);
67
- if (!match)
68
- throw invalid();
69
- if (!policy.schemes.includes(match[1].toLowerCase())) {
70
- const allowed = policy.schemes.join('/') || '(none)';
71
- throw new ValidationError(`Environment ${label} must use ${allowed}`);
72
- }
73
- const authority = match[2];
74
- if (authority.includes('@')) {
75
- throw new ValidationError(`Environment ${label} must not contain credentials`);
76
- }
77
- let host;
78
- if (authority.startsWith('[')) {
79
- const end = authority.indexOf(']');
80
- if (end === -1)
81
- throw invalid();
82
- host = authority.slice(1, end);
83
- }
84
- else {
85
- host = authority.split(':')[0];
86
- }
87
- if (host === '')
88
- throw invalid();
89
- if (!hostExempt(host, policy) && isBlockedPrivateHost(host)) {
90
- throw new ValidationError(`Environment ${label} must be a public host`);
91
- }
58
+ assertSafePublicUrl(url, { subject: 'Environment', label, policy });
92
59
  }
93
60
  /** Validate every URL a manifest will fetch (defence against SSRF). */
94
61
  export function assertManifestUrlsSafe(manifest, policy) {
@@ -1 +1 @@
1
- {"version":3,"file":"environments.logic.js","sourceRoot":"","sources":["../../../src/modules/environments/environments.logic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environments.logic.js","sourceRoot":"","sources":["../../../src/modules/environments/environments.logic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { NotificationWebhook, PutNotificationWebhookInput } from '@cat-factory/contracts';
2
+ import type { Clock, NotificationWebhookRepository, SecretCipher, UrlSafetyPolicy } from '@cat-factory/kernel';
3
+ export interface NotificationWebhookServiceDependencies {
4
+ notificationWebhookRepository: NotificationWebhookRepository;
5
+ secretCipher: SecretCipher;
6
+ clock: Clock;
7
+ /**
8
+ * The deployment's widened endpoint guard, when configured. Absent ⇒ strict public-https. The
9
+ * SAME policy the delivery channel re-applies per redirect hop — they come from one builder for
10
+ * exactly this reason, so an endpoint can never be accepted at write time by a rule the delivery
11
+ * path would then reject (or, far worse, the reverse).
12
+ */
13
+ urlSafetyPolicy?: UrlSafetyPolicy;
14
+ }
15
+ export declare class NotificationWebhookService {
16
+ private readonly deps;
17
+ constructor(deps: NotificationWebhookServiceDependencies);
18
+ /** The workspace's webhook as exposed to clients, or null when none is registered. */
19
+ get(workspaceId: string): Promise<NotificationWebhook | null>;
20
+ /** Register or update the workspace's webhook. */
21
+ put(workspaceId: string, input: PutNotificationWebhookInput): Promise<NotificationWebhook>;
22
+ /** Remove the workspace's webhook. Idempotent. */
23
+ remove(workspaceId: string): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=NotificationWebhookService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationWebhookService.d.ts","sourceRoot":"","sources":["../../../src/modules/notificationWebhook/NotificationWebhookService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,KAAK,EACV,KAAK,EAEL,6BAA6B,EAC7B,YAAY,EACZ,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAc5B,MAAM,WAAW,sCAAsC;IACrD,6BAA6B,EAAE,6BAA6B,CAAA;IAC5D,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAA;IACZ;;;;;OAKG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC;AAED,qBAAa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,sCAAsC,EAAI;IAE7E,sFAAsF;IAChF,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAGlE;IAED,kDAAkD;IAC5C,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoB/F;IAED,kDAAkD;IAC5C,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;CACF"}
@@ -0,0 +1,49 @@
1
+ import { assertSafeNotificationWebhookUrl } from './webhookUrl.js';
2
+ export class NotificationWebhookService {
3
+ deps;
4
+ constructor(deps) {
5
+ this.deps = deps;
6
+ }
7
+ /** The workspace's webhook as exposed to clients, or null when none is registered. */
8
+ async get(workspaceId) {
9
+ const record = await this.deps.notificationWebhookRepository.get(workspaceId);
10
+ return record ? toWire(record) : null;
11
+ }
12
+ /** Register or update the workspace's webhook. */
13
+ async put(workspaceId, input) {
14
+ // Reject a private/internal/metadata endpoint HERE, where an operator sees the error, rather
15
+ // than leaving it to fail per-delivery later. The wire schema's `https://` prefix check is the
16
+ // friendly first pass; this is the guard that actually holds (and the same one the delivery
17
+ // path re-runs on every redirect hop).
18
+ assertSafeNotificationWebhookUrl(input.url, this.deps.urlSafetyPolicy);
19
+ const existing = await this.deps.notificationWebhookRepository.get(workspaceId);
20
+ const record = {
21
+ workspaceId,
22
+ url: input.url,
23
+ types: input.types ?? existing?.types ?? [],
24
+ enabled: input.enabled ?? existing?.enabled ?? true,
25
+ // Omitted `secret` keeps the stored one; a supplied one rotates it.
26
+ secretSealed: input.secret
27
+ ? await this.deps.secretCipher.encrypt(input.secret)
28
+ : (existing?.secretSealed ?? null),
29
+ updatedAt: this.deps.clock.now(),
30
+ };
31
+ await this.deps.notificationWebhookRepository.put(record);
32
+ return toWire(record);
33
+ }
34
+ /** Remove the workspace's webhook. Idempotent. */
35
+ async remove(workspaceId) {
36
+ await this.deps.notificationWebhookRepository.delete(workspaceId);
37
+ }
38
+ }
39
+ /** Project the persisted record onto the wire shape — the sealed secret becomes a boolean. */
40
+ function toWire(record) {
41
+ return {
42
+ url: record.url,
43
+ types: record.types,
44
+ enabled: record.enabled,
45
+ hasSecret: record.secretSealed != null,
46
+ updatedAt: record.updatedAt,
47
+ };
48
+ }
49
+ //# sourceMappingURL=NotificationWebhookService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationWebhookService.js","sourceRoot":"","sources":["../../../src/modules/notificationWebhook/NotificationWebhookService.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAA;AA0BlE,MAAM,OAAO,0BAA0B;IACR,IAAI;IAAjC,YAA6B,IAA4C;oBAA5C,IAAI;IAA2C,CAAC;IAE7E,sFAAsF;IACtF,KAAK,CAAC,GAAG,CAAC,WAAmB;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC7E,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACvC,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,GAAG,CAAC,WAAmB,EAAE,KAAkC;QAC/D,6FAA6F;QAC7F,+FAA+F;QAC/F,4FAA4F;QAC5F,uCAAuC;QACvC,gCAAgC,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACtE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC/E,MAAM,MAAM,GAA8B;YACxC,WAAW;YACX,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC3C,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ,EAAE,OAAO,IAAI,IAAI;YACnD,oEAAoE;YACpE,YAAY,EAAE,KAAK,CAAC,MAAM;gBACxB,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;gBACpD,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,IAAI,IAAI,CAAC;YACpC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;SACjC,CAAA;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACzD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;IACvB,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,MAAM,CAAC,WAAmB;QAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IACnE,CAAC;CACF;AAED,8FAA8F;AAC9F,SAAS,MAAM,CAAC,MAAiC;IAC/C,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;QACtC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAA;AACH,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { Clock, Notification, NotificationChannel, NotificationWebhookRepository, SecretCipher, UrlSafetyPolicy } from '@cat-factory/kernel';
2
+ import { WEBHOOK_SIGNATURE_HEADERS } from './webhookSignature.js';
3
+ export interface WebhookNotificationChannelDependencies {
4
+ notificationWebhookRepository: NotificationWebhookRepository;
5
+ secretCipher: SecretCipher;
6
+ clock: Clock;
7
+ /** HTTP transport (each runtime exposes a global `fetch`); injectable for tests. */
8
+ fetchImpl?: typeof fetch;
9
+ /** Sleep between retries; injectable so tests don't spend real wall-clock on backoff. */
10
+ sleep?: (ms: number) => Promise<void>;
11
+ /**
12
+ * The deployment's widened URL guard for webhook endpoints, when one is configured
13
+ * (`NOTIFICATION_WEBHOOK_ALLOW_URL_HOSTS` / `_ALLOW_HTTP_URLS`). Absent ⇒ the strict
14
+ * public-https default: no private/internal hosts, no cloud-metadata endpoint. Resolved from the
15
+ * webhook's OWN config slice, so widening it cannot widen the runner-pool or environment guard.
16
+ */
17
+ urlSafetyPolicy?: UrlSafetyPolicy;
18
+ /**
19
+ * Optional observability hook invoked when a delivery ultimately fails. Delivery is best-effort
20
+ * (a receiver outage must never break the notification lifecycle), but a swallowed failure
21
+ * should still be diagnosable — the facades wire this to their structured logger, so a broken
22
+ * endpoint surfaces instead of vanishing. Mirrors `SlackNotificationChannel.onError`.
23
+ */
24
+ onError?: (error: unknown, context: {
25
+ workspaceId: string;
26
+ notificationId: string;
27
+ type: string;
28
+ }) => void;
29
+ }
30
+ export declare class WebhookNotificationChannel implements NotificationChannel {
31
+ private readonly deps;
32
+ private readonly fetchImpl;
33
+ private readonly sleep;
34
+ constructor(deps: WebhookNotificationChannelDependencies);
35
+ deliver(workspaceId: string, notification: Notification): Promise<void>;
36
+ private post;
37
+ }
38
+ export { WEBHOOK_SIGNATURE_HEADERS };
39
+ //# sourceMappingURL=WebhookNotificationChannel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhookNotificationChannel.d.ts","sourceRoot":"","sources":["../../../src/modules/notificationWebhook/WebhookNotificationChannel.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,KAAK,EACL,YAAY,EACZ,mBAAmB,EAGnB,6BAA6B,EAC7B,YAAY,EACZ,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAI5B,OAAO,EAAuB,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAqCtF,MAAM,WAAW,sCAAsC;IACrD,6BAA6B,EAAE,6BAA6B,CAAA;IAC5D,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAA;IACZ,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACxB,yFAAyF;IACzF,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CACR,KAAK,EAAE,OAAO,EACd,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KACnE,IAAI,CAAA;CACV;AAED,qBAAa,0BAA2B,YAAW,mBAAmB;IAIxD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IAErD,YAA6B,IAAI,EAAE,sCAAsC,EAGxE;IAEK,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5E;YAEa,IAAI;CA8EnB;AAmBD,OAAO,EAAE,yBAAyB,EAAE,CAAA"}
@@ -0,0 +1,154 @@
1
+ import { DEFAULT_NOTIFICATION_WEBHOOK_TYPES, } from '@cat-factory/contracts';
2
+ import { ValidationError } from '@cat-factory/kernel';
3
+ import { DEFAULT_MAX_REDIRECTS, safeFetch } from '../shared/safe-fetch.js';
4
+ import { assertSafeNotificationWebhookUrl } from './webhookUrl.js';
5
+ import { signWebhookDelivery, WEBHOOK_SIGNATURE_HEADERS } from './webhookSignature.js';
6
+ // WebhookNotificationChannel: an outbound HTTP delivery transport for the existing notification
7
+ // mechanism. It implements the same `NotificationChannel` port as the in-app and Slack channels
8
+ // and is composed alongside them via `CompositeNotificationChannel` — so the engine call sites
9
+ // that raise notifications are untouched.
10
+ //
11
+ // This is the channel a HEADLESS integration needs. A public-API caller has no in-app inbox to
12
+ // watch and no browser to hold a WebSocket open, so without a push it can only learn that its run
13
+ // parked by polling. That matters most for the clarification loop: a parked run waits for a human
14
+ // INDEFINITELY, so "the caller will notice eventually" is not a design (see
15
+ // `docs/initiatives/headless-clarification-loop.md`, D3).
16
+ //
17
+ // Runtime-neutral (fetch + decrypt + one DB read), so it lives here in @cat-factory/integrations
18
+ // and serves BOTH runtime facades unchanged.
19
+ /** How many attempts one delivery gets, and how long to wait between them (exponential). */
20
+ const MAX_ATTEMPTS = 3;
21
+ const BASE_RETRY_MS = 250;
22
+ /** Give up on a single HTTP attempt after this long, so a black-holing endpoint can't hang us. */
23
+ const REQUEST_TIMEOUT_MS = 5000;
24
+ /**
25
+ * The ceiling on ONE delivery across all of its attempts. This is the number that matters, and it
26
+ * is not the per-attempt timeout multiplied out: `NotificationService.raise` AWAITS the channel
27
+ * fan-out, so every millisecond spent here is latency added to the engine step that raises the
28
+ * notification — the very step that parks a run. Three 5s attempts plus backoff would let a dead
29
+ * receiver add ~15.8s to a park, which the in-app and Slack channels never do.
30
+ *
31
+ * So the retry budget is a WALL-CLOCK deadline, not an attempt count: attempts stop as soon as the
32
+ * remaining budget is gone, and each attempt's own timeout is clamped to what is left. Delivery is
33
+ * best-effort by contract, so a receiver too slow to answer inside the budget is treated exactly
34
+ * like one that failed — logged through `onError`, never propagated.
35
+ */
36
+ const TOTAL_DELIVERY_BUDGET_MS = 6000;
37
+ export class WebhookNotificationChannel {
38
+ deps;
39
+ fetchImpl;
40
+ sleep;
41
+ constructor(deps) {
42
+ this.deps = deps;
43
+ this.fetchImpl = deps.fetchImpl ?? ((...args) => globalThis.fetch(...args));
44
+ this.sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
45
+ }
46
+ async deliver(workspaceId, notification) {
47
+ try {
48
+ await this.post(workspaceId, notification);
49
+ }
50
+ catch (error) {
51
+ // Best-effort: never let a receiver outage/misconfig break the notification lifecycle
52
+ // (CompositeNotificationChannel also isolates us, belt-and-braces). Surface it through the
53
+ // optional observability hook so the failure is diagnosable instead of silently dropped.
54
+ this.deps.onError?.(error, {
55
+ workspaceId,
56
+ notificationId: notification.id,
57
+ type: notification.type,
58
+ });
59
+ }
60
+ }
61
+ async post(workspaceId, notification) {
62
+ const webhook = await this.deps.notificationWebhookRepository.get(workspaceId);
63
+ if (!webhook || !webhook.enabled)
64
+ return;
65
+ if (!deliversType(webhook, notification.type))
66
+ return;
67
+ const body = {
68
+ // Stable per notification-and-status: a retried attempt repeats it, so a receiver dedupes on
69
+ // it. The status suffix keeps the delivery of a RESOLVED card (channels are re-delivered on
70
+ // resolve) distinct from the original open one, which is a genuinely different event.
71
+ deliveryId: `${notification.id}-${notification.status}`,
72
+ sentAt: this.deps.clock.now(),
73
+ workspaceId,
74
+ runId: notification.executionId,
75
+ taskId: notification.blockId,
76
+ notification,
77
+ };
78
+ const payload = JSON.stringify(body);
79
+ const headers = {
80
+ 'content-type': 'application/json',
81
+ 'user-agent': 'cat-factory',
82
+ };
83
+ if (webhook.secretSealed) {
84
+ const secret = await this.deps.secretCipher.decrypt(webhook.secretSealed);
85
+ Object.assign(headers, await signWebhookDelivery(secret, payload, body.sentAt));
86
+ }
87
+ // The endpoint is operator-supplied, and the body we are about to POST carries the workspace's
88
+ // work descriptions signed with a deployment secret. So the URL is re-validated on EVERY
89
+ // redirect hop through the shared SSRF seam: `startsWith('https://')` at registration only ever
90
+ // vouched for the FIRST url, and a receiver is free to 302 that to the cloud-metadata endpoint.
91
+ // `safeFetch` also strips the body and credential headers on a cross-origin hop, so a permitted
92
+ // host cannot bounce the delivery to a different one.
93
+ const assertSafe = (u) => assertSafeNotificationWebhookUrl(u, this.deps.urlSafetyPolicy);
94
+ const deadline = this.deps.clock.now() + TOTAL_DELIVERY_BUDGET_MS;
95
+ let lastError;
96
+ for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
97
+ if (attempt > 0) {
98
+ // Only back off if there is budget left to use afterwards — sleeping into the deadline
99
+ // would burn the caller's latency and then not even attempt the retry it paid for.
100
+ const backoff = BASE_RETRY_MS * 2 ** (attempt - 1);
101
+ if (this.deps.clock.now() + backoff >= deadline)
102
+ break;
103
+ await this.sleep(backoff);
104
+ }
105
+ // Clamp this attempt to whatever is left, so the TOTAL is bounded rather than the per-attempt
106
+ // timeout multiplied by the attempt count.
107
+ const remaining = deadline - this.deps.clock.now();
108
+ if (remaining <= 0)
109
+ break;
110
+ try {
111
+ const response = await safeFetch(webhook.url, {
112
+ method: 'POST',
113
+ headers,
114
+ body: payload,
115
+ signal: AbortSignal.timeout(Math.min(REQUEST_TIMEOUT_MS, remaining)),
116
+ }, assertSafe, makeWebhookError, DEFAULT_MAX_REDIRECTS, this.fetchImpl);
117
+ if (response.ok)
118
+ return;
119
+ // A 4xx is the receiver saying "this request is wrong" — a bad secret, a rejected shape, a
120
+ // revoked endpoint. Retrying cannot fix it and only multiplies the load, so give up now
121
+ // and let the error hook report it. 5xx / network faults are transient: those retry.
122
+ lastError = new Error(`Webhook endpoint responded ${response.status}`);
123
+ if (response.status >= 400 && response.status < 500)
124
+ break;
125
+ }
126
+ catch (error) {
127
+ // A blocked hop (`assertSafe` threw) is a CONFIGURATION fault, not a transient one:
128
+ // retrying re-walks the same redirect chain to the same rejected target. Give up and let
129
+ // the operator see it, exactly as with a 4xx.
130
+ lastError = error;
131
+ if (error instanceof ValidationError)
132
+ break;
133
+ }
134
+ }
135
+ throw lastError ?? new Error('Webhook delivery failed');
136
+ }
137
+ }
138
+ /** Builds the redirect/size errors `safeFetch` raises, carrying its status for the log line. */
139
+ function makeWebhookError(status, message) {
140
+ return new Error(`Webhook delivery failed (${status}): ${message}`);
141
+ }
142
+ /**
143
+ * Whether a webhook delivers this notification type. An EMPTY filter means the defaults (the
144
+ * parking + actionable-tail types), NOT everything — registering an endpoint should not silently
145
+ * fire-hose every operator card at an integration that only wanted to hear about parked decisions.
146
+ */
147
+ function deliversType(webhook, type) {
148
+ const types = webhook.types.length
149
+ ? webhook.types
150
+ : DEFAULT_NOTIFICATION_WEBHOOK_TYPES;
151
+ return types.includes(type);
152
+ }
153
+ export { WEBHOOK_SIGNATURE_HEADERS };
154
+ //# sourceMappingURL=WebhookNotificationChannel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhookNotificationChannel.js","sourceRoot":"","sources":["../../../src/modules/notificationWebhook/WebhookNotificationChannel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { Clock, NotificationWebhookRepository, SecretCipher, UrlSafetyPolicy } from '@cat-factory/kernel';
2
+ import { NotificationWebhookService } from './NotificationWebhookService.js';
3
+ import { WebhookNotificationChannel } from './WebhookNotificationChannel.js';
4
+ /**
5
+ * HKDF `info` tag the notification-webhook signing secret is sealed under, so it is
6
+ * cryptographically isolated from every other sealed credential class (Slack tokens, tracker
7
+ * credentials, package-registry auth) even though they share the deployment master key.
8
+ */
9
+ export declare const NOTIFICATION_WEBHOOK_CIPHER_INFO = "cat-factory:notification-webhook";
10
+ export interface NotificationWebhookSupportDependencies {
11
+ notificationWebhookRepository: NotificationWebhookRepository;
12
+ secretCipher: SecretCipher;
13
+ clock: Clock;
14
+ /**
15
+ * The deployment's widened endpoint guard (its own `NOTIFICATION_WEBHOOK_ALLOW_*` slice), or
16
+ * absent for the strict public-https default. Handed to BOTH halves from here, so the rule that
17
+ * admits an endpoint at registration is by construction the rule the delivery path enforces.
18
+ */
19
+ urlSafetyPolicy?: UrlSafetyPolicy;
20
+ fetchImpl?: typeof fetch;
21
+ /** Structured-logger hook for a delivery that ultimately failed (best-effort ≠ invisible). */
22
+ onError?: (error: unknown, context: {
23
+ workspaceId: string;
24
+ notificationId: string;
25
+ type: string;
26
+ }) => void;
27
+ }
28
+ /**
29
+ * Build BOTH halves of the notification-webhook feature from one dependency set: the management
30
+ * service (behind the workspace controller) and the delivery channel (composed into the facade's
31
+ * `CompositeNotificationChannel`).
32
+ *
33
+ * They exist as one builder because they MUST read the same rows through the same cipher —
34
+ * a facade that wired the service against one repository and the channel against another would
35
+ * present a webhook as configured while delivering nothing, and each facade wiring them
36
+ * separately is exactly how that drift happens. Both runtimes call this with their own repo.
37
+ */
38
+ export declare function buildNotificationWebhookSupport(deps: NotificationWebhookSupportDependencies): {
39
+ service: NotificationWebhookService;
40
+ channel: WebhookNotificationChannel;
41
+ };
42
+ //# sourceMappingURL=support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../../src/modules/notificationWebhook/support.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,6BAA6B,EAC7B,YAAY,EACZ,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAE5E;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,qCAAqC,CAAA;AAElF,MAAM,WAAW,sCAAsC;IACrD,6BAA6B,EAAE,6BAA6B,CAAA;IAC5D,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAA;IACZ;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACxB,8FAA8F;IAC9F,OAAO,CAAC,EAAE,CACR,KAAK,EAAE,OAAO,EACd,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KACnE,IAAI,CAAA;CACV;AAED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,sCAAsC,GAAG;IAC7F,OAAO,EAAE,0BAA0B,CAAA;IACnC,OAAO,EAAE,0BAA0B,CAAA;CACpC,CAiBA"}
@@ -0,0 +1,37 @@
1
+ import { NotificationWebhookService } from './NotificationWebhookService.js';
2
+ import { WebhookNotificationChannel } from './WebhookNotificationChannel.js';
3
+ /**
4
+ * HKDF `info` tag the notification-webhook signing secret is sealed under, so it is
5
+ * cryptographically isolated from every other sealed credential class (Slack tokens, tracker
6
+ * credentials, package-registry auth) even though they share the deployment master key.
7
+ */
8
+ export const NOTIFICATION_WEBHOOK_CIPHER_INFO = 'cat-factory:notification-webhook';
9
+ /**
10
+ * Build BOTH halves of the notification-webhook feature from one dependency set: the management
11
+ * service (behind the workspace controller) and the delivery channel (composed into the facade's
12
+ * `CompositeNotificationChannel`).
13
+ *
14
+ * They exist as one builder because they MUST read the same rows through the same cipher —
15
+ * a facade that wired the service against one repository and the channel against another would
16
+ * present a webhook as configured while delivering nothing, and each facade wiring them
17
+ * separately is exactly how that drift happens. Both runtimes call this with their own repo.
18
+ */
19
+ export function buildNotificationWebhookSupport(deps) {
20
+ return {
21
+ service: new NotificationWebhookService({
22
+ notificationWebhookRepository: deps.notificationWebhookRepository,
23
+ secretCipher: deps.secretCipher,
24
+ clock: deps.clock,
25
+ urlSafetyPolicy: deps.urlSafetyPolicy,
26
+ }),
27
+ channel: new WebhookNotificationChannel({
28
+ notificationWebhookRepository: deps.notificationWebhookRepository,
29
+ secretCipher: deps.secretCipher,
30
+ clock: deps.clock,
31
+ urlSafetyPolicy: deps.urlSafetyPolicy,
32
+ fetchImpl: deps.fetchImpl,
33
+ onError: deps.onError,
34
+ }),
35
+ };
36
+ }
37
+ //# sourceMappingURL=support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.js","sourceRoot":"","sources":["../../../src/modules/notificationWebhook/support.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAE5E;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,kCAAkC,CAAA;AAoBlF;;;;;;;;;GASG;AACH,MAAM,UAAU,+BAA+B,CAAC,IAA4C;IAI1F,OAAO;QACL,OAAO,EAAE,IAAI,0BAA0B,CAAC;YACtC,6BAA6B,EAAE,IAAI,CAAC,6BAA6B;YACjE,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC;QACF,OAAO,EAAE,IAAI,0BAA0B,CAAC;YACtC,6BAA6B,EAAE,IAAI,CAAC,6BAA6B;YACjE,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;KACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /** Header names a receiver reads to verify a delivery. */
2
+ export declare const WEBHOOK_SIGNATURE_HEADERS: {
3
+ /** Epoch-ms the delivery was produced; part of the signed string (replay window). */
4
+ readonly timestamp: 'x-cat-factory-timestamp';
5
+ /** `v1=<hex HMAC-SHA256>` over `<timestamp>.<body>`. */
6
+ readonly signature: 'x-cat-factory-signature';
7
+ };
8
+ /**
9
+ * Sign a delivery body, returning the headers to send with it.
10
+ *
11
+ * The signed string is `<timestamp>.<body>`, NOT the body alone: binding the timestamp INTO the
12
+ * MAC is what makes the timestamp header trustworthy, so a receiver can reject a replayed delivery
13
+ * by rejecting an old timestamp. Signing the body alone would leave the timestamp freely rewritable
14
+ * by anyone replaying the capture, making the whole replay window decorative.
15
+ */
16
+ export declare function signWebhookDelivery(secret: string, body: string, timestamp: number): Promise<Record<string, string>>;
17
+ //# sourceMappingURL=webhookSignature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookSignature.d.ts","sourceRoot":"","sources":["../../../src/modules/notificationWebhook/webhookSignature.ts"],"names":[],"mappings":"AAWA,0DAA0D;AAC1D,eAAO,MAAM,yBAAyB;IACpC,qFAAqF;aACrF,SAAS,EAAE,yBAAyB;IACpC,wDAAwD;aACxD,SAAS,EAAE,yBAAyB;CAC5B,CAAA;AAKV;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiBjC"}
@@ -0,0 +1,42 @@
1
+ // Detached HMAC signature over an outbound webhook body — the proof a receiver uses to decide that
2
+ // a delivery really came from this deployment and was not replayed or tampered with.
3
+ //
4
+ // NOTE on why this is not the server's `HmacSigner` (`@cat-factory/server` `auth/signing.ts`):
5
+ // that primitive mints self-contained TOKENS (`base64url(payload).base64url(mac)`) whose payload
6
+ // travels inside the signed string, and it is audience-keyed for the session/OAuth/container/ws
7
+ // token classes. A webhook needs the opposite shape — a signature DETACHED from a body the
8
+ // receiver already has — and, decisively, `@cat-factory/server` sits ABOVE this package in the
9
+ // layering, so importing it here would invert the dependency. The construction below is the plain
10
+ // Web Crypto HMAC-SHA256 both use underneath, so it runs unchanged on workerd and Node.
11
+ /** Header names a receiver reads to verify a delivery. */
12
+ export const WEBHOOK_SIGNATURE_HEADERS = {
13
+ /** Epoch-ms the delivery was produced; part of the signed string (replay window). */
14
+ timestamp: 'x-cat-factory-timestamp',
15
+ /** `v1=<hex HMAC-SHA256>` over `<timestamp>.<body>`. */
16
+ signature: 'x-cat-factory-signature',
17
+ };
18
+ /** The signature scheme version, so the format can change without silently breaking receivers. */
19
+ const SCHEME = 'v1';
20
+ /**
21
+ * Sign a delivery body, returning the headers to send with it.
22
+ *
23
+ * The signed string is `<timestamp>.<body>`, NOT the body alone: binding the timestamp INTO the
24
+ * MAC is what makes the timestamp header trustworthy, so a receiver can reject a replayed delivery
25
+ * by rejecting an old timestamp. Signing the body alone would leave the timestamp freely rewritable
26
+ * by anyone replaying the capture, making the whole replay window decorative.
27
+ */
28
+ export async function signWebhookDelivery(secret, body, timestamp) {
29
+ const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
30
+ const mac = await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(`${timestamp}.${body}`));
31
+ return {
32
+ [WEBHOOK_SIGNATURE_HEADERS.timestamp]: String(timestamp),
33
+ [WEBHOOK_SIGNATURE_HEADERS.signature]: `${SCHEME}=${toHex(new Uint8Array(mac))}`,
34
+ };
35
+ }
36
+ function toHex(bytes) {
37
+ let out = '';
38
+ for (const b of bytes)
39
+ out += b.toString(16).padStart(2, '0');
40
+ return out;
41
+ }
42
+ //# sourceMappingURL=webhookSignature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookSignature.js","sourceRoot":"","sources":["../../../src/modules/notificationWebhook/webhookSignature.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,qFAAqF;AACrF,EAAE;AACF,+FAA+F;AAC/F,iGAAiG;AACjG,gGAAgG;AAChG,2FAA2F;AAC3F,+FAA+F;AAC/F,kGAAkG;AAClG,wFAAwF;AAExF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,qFAAqF;IACrF,SAAS,EAAE,yBAAyB;IACpC,wDAAwD;IACxD,SAAS,EAAE,yBAAyB;CAC5B,CAAA;AAEV,kGAAkG;AAClG,MAAM,MAAM,GAAG,IAAI,CAAA;AAEnB;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,IAAY,EACZ,SAAiB;IAEjB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACvC,KAAK,EACL,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAChC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,MAAM,CAAC,CACT,CAAA;IACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAClC,MAAM,EACN,GAAG,EACH,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC,CACjD,CAAA;IACD,OAAO;QACL,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC;QACxD,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;KACjF,CAAA;AACH,CAAC;AAED,SAAS,KAAK,CAAC,KAAiB;IAC9B,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7D,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { UrlSafetyPolicy } from '@cat-factory/kernel';
2
+ /**
3
+ * Validate a notification-webhook endpoint. Strict by default — `https` only, no private/internal
4
+ * or cloud-metadata host — widened only by the deployment's own
5
+ * `NOTIFICATION_WEBHOOK_ALLOW_URL_HOSTS` / `_ALLOW_HTTP_URLS` slice, which a developer running a
6
+ * receiver on `localhost` genuinely needs. Throws `ValidationError` (a 400 at the controller).
7
+ */
8
+ export declare function assertSafeNotificationWebhookUrl(url: string, policy?: UrlSafetyPolicy): void;
9
+ //# sourceMappingURL=webhookUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookUrl.d.ts","sourceRoot":"","sources":["../../../src/modules/notificationWebhook/webhookUrl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAe1D;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAM5F"}
@@ -0,0 +1,26 @@
1
+ import { assertSafePublicUrl } from '../shared/url-guard.js';
2
+ // The notification-webhook face of the shared SSRF guard. Applied in BOTH places a URL can enter
3
+ // the system, which is the point:
4
+ //
5
+ // - the WRITE boundary (`NotificationWebhookService.put`), so a private/internal endpoint is
6
+ // rejected with a clear message when an operator registers it, not silently at 3am;
7
+ // - every REDIRECT hop of a delivery (`WebhookNotificationChannel` via `safeFetch`), because the
8
+ // write-time check only ever vouched for the FIRST URL and a receiver is free to 302 the
9
+ // delivery — body, signature headers and all — at an internal target.
10
+ //
11
+ // The contract schema's `https://` prefix check is kept as well: it is the friendly wire-level
12
+ // message, whereas this is the guard that actually holds.
13
+ /**
14
+ * Validate a notification-webhook endpoint. Strict by default — `https` only, no private/internal
15
+ * or cloud-metadata host — widened only by the deployment's own
16
+ * `NOTIFICATION_WEBHOOK_ALLOW_URL_HOSTS` / `_ALLOW_HTTP_URLS` slice, which a developer running a
17
+ * receiver on `localhost` genuinely needs. Throws `ValidationError` (a 400 at the controller).
18
+ */
19
+ export function assertSafeNotificationWebhookUrl(url, policy) {
20
+ assertSafePublicUrl(url, {
21
+ subject: 'Notification webhook',
22
+ label: 'endpoint',
23
+ ...(policy ? { policy } : {}),
24
+ });
25
+ }
26
+ //# sourceMappingURL=webhookUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookUrl.js","sourceRoot":"","sources":["../../../src/modules/notificationWebhook/webhookUrl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE5D,iGAAiG;AACjG,kCAAkC;AAClC,EAAE;AACF,8FAA8F;AAC9F,uFAAuF;AACvF,kGAAkG;AAClG,4FAA4F;AAC5F,yEAAyE;AACzE,EAAE;AACF,+FAA+F;AAC/F,0DAA0D;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,GAAW,EAAE,MAAwB;IACpF,mBAAmB,CAAC,GAAG,EAAE;QACvB,OAAO,EAAE,sBAAsB;QAC/B,KAAK,EAAE,UAAU;QACjB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC,CAAA;AACJ,CAAC"}
@@ -16,13 +16,16 @@ export interface PublicApiKeyAuth {
16
16
  keyId: string;
17
17
  accountId: string;
18
18
  workspaceId: string;
19
- /** What this key may do (read ⊂ write ⊂ admin) — the public surface gates each route on it. */
19
+ /**
20
+ * What this key may do (read ⊂ write ⊂ decide ⊂ admin) — the public surface gates each
21
+ * route on it.
22
+ */
20
23
  scope: PublicApiScope;
21
24
  }
22
25
  /**
23
26
  * Whether a key that HOLDS `have` satisfies an endpoint that NEEDS `need`. The ladder is
24
- * inclusive — an `admin` key satisfies a `write` or `read` requirement — so this is a simple
25
- * rank comparison, the single source of truth for every `/api/v1` scope gate.
27
+ * inclusive — an `admin` key satisfies a `decide`, `write` or `read` requirement — so this is
28
+ * a simple rank comparison, the single source of truth for every `/api/v1` scope gate.
26
29
  */
27
30
  export declare function scopeSatisfies(have: PublicApiScope, need: PublicApiScope): boolean;
28
31
  /** The result of issuing a key: the stored record + the one-time raw secret to hand back. */
@@ -1 +1 @@
1
- {"version":3,"file":"PublicApiKeyService.d.ts","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicApiKeyService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AA0B/E,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,sBAAsB,CAAA;IAClC;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;CACb;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,+FAA+F;IAC/F,KAAK,EAAE,cAAc,CAAA;CACtB;AAKD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAElF;AAED,6FAA6F;AAC7F,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,kBAAkB,CAAA;IAC1B,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,cAAc,CAAC,CAAoB;IAE3C,YAA6B,IAAI,EAAE,+BAA+B,EAAI;IAEtE;;;OAGG;IACG,KAAK,CACT,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAClF,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,cAAwB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CA8B7B;IAED,qEAAqE;IAC/D,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAE7D;IAED,yDAAyD;IACnD,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;IAED;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAmB/E;IAED;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG9C;IAED,OAAO,CAAC,OAAO;YAaD,IAAI;CAQnB"}
1
+ {"version":3,"file":"PublicApiKeyService.d.ts","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicApiKeyService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AA0B/E,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,sBAAsB,CAAA;IAClC;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;CACb;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,KAAK,EAAE,cAAc,CAAA;CACtB;AAYD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAElF;AAED,6FAA6F;AAC7F,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,kBAAkB,CAAA;IAC1B,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,cAAc,CAAC,CAAoB;IAE3C,YAA6B,IAAI,EAAE,+BAA+B,EAAI;IAEtE;;;OAGG;IACG,KAAK,CACT,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAClF,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,cAAwB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CA8B7B;IAED,qEAAqE;IAC/D,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAE7D;IAED,yDAAyD;IACnD,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;IAED;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAmB/E;IAED;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG9C;IAED,OAAO,CAAC,OAAO;YAaD,IAAI;CAQnB"}
@@ -22,12 +22,17 @@ const MAX_KEYS_PER_WORKSPACE = 50;
22
22
  * collapses that write amplification.
23
23
  */
24
24
  const LAST_USED_STAMP_THROTTLE_MS = 60_000;
25
- /** The scope ladder as a rank, so a `have ≥ need` check is one comparison. */
26
- const SCOPE_RANK = { read: 0, write: 1, admin: 2 };
25
+ /**
26
+ * The scope ladder as a rank, so a `have ≥ need` check is one comparison. DERIVED from the
27
+ * contract's `PUBLIC_API_SCOPES` array order rather than hand-listed, so inserting a rung
28
+ * (as `decide` was, between `write` and `admin`) cannot leave the wire vocabulary and the
29
+ * server-side check disagreeing about the ladder.
30
+ */
31
+ const SCOPE_RANK = Object.fromEntries(PUBLIC_API_SCOPES.map((scope, rank) => [scope, rank]));
27
32
  /**
28
33
  * Whether a key that HOLDS `have` satisfies an endpoint that NEEDS `need`. The ladder is
29
- * inclusive — an `admin` key satisfies a `write` or `read` requirement — so this is a simple
30
- * rank comparison, the single source of truth for every `/api/v1` scope gate.
34
+ * inclusive — an `admin` key satisfies a `decide`, `write` or `read` requirement — so this is
35
+ * a simple rank comparison, the single source of truth for every `/api/v1` scope gate.
31
36
  */
32
37
  export function scopeSatisfies(have, need) {
33
38
  return SCOPE_RANK[have] >= SCOPE_RANK[need];
@@ -1 +1 @@
1
- {"version":3,"file":"PublicApiKeyService.js","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicApiKeyService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PublicApiKeyService.js","sourceRoot":"","sources":["../../../src/modules/publicApi/PublicApiKeyService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { UrlSafetyPolicy } from '@cat-factory/kernel';
2
+ /** Per-call wording + policy for {@link assertSafePublicUrl}. */
3
+ export interface PublicUrlGuardOptions {
4
+ /** What owns the URL, capitalised for the message ('Environment', 'Notification webhook'). */
5
+ subject: string;
6
+ /** Which URL of that subject ('base URL', 'endpoint', 'OAuth token URL'). */
7
+ label?: string;
8
+ /**
9
+ * The widened policy, when the deployment configured one. Defaults to
10
+ * {@link STRICT_URL_SAFETY_POLICY} — `https` only, no private/internal hosts.
11
+ */
12
+ policy?: UrlSafetyPolicy;
13
+ }
14
+ /**
15
+ * Validate a URL before it is stored or fetched. The default policy requires `https` and rejects
16
+ * internal/private hosts (loopback, RFC1918, the link-local range including the 169.254.169.254
17
+ * cloud-metadata endpoint); a trusted operator-installed integration can pass a widened policy to
18
+ * permit specific schemes/hosts. Embedded credentials are forbidden regardless of policy.
19
+ *
20
+ * Parsed by hand (no `URL` global) so this stays in the platform-agnostic core and behaves
21
+ * identically on workerd and Node.
22
+ */
23
+ export declare function assertSafePublicUrl(url: string, options: PublicUrlGuardOptions): void;
24
+ //# sourceMappingURL=url-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-guard.d.ts","sourceRoot":"","sources":["../../../src/modules/shared/url-guard.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAa1D,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IACpC,8FAA8F;IAC9F,OAAO,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAA;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CA0BrF"}
@@ -0,0 +1,53 @@
1
+ import { isBlockedPrivateHost, STRICT_URL_SAFETY_POLICY, ValidationError, } from '@cat-factory/kernel';
2
+ /**
3
+ * Validate a URL before it is stored or fetched. The default policy requires `https` and rejects
4
+ * internal/private hosts (loopback, RFC1918, the link-local range including the 169.254.169.254
5
+ * cloud-metadata endpoint); a trusted operator-installed integration can pass a widened policy to
6
+ * permit specific schemes/hosts. Embedded credentials are forbidden regardless of policy.
7
+ *
8
+ * Parsed by hand (no `URL` global) so this stays in the platform-agnostic core and behaves
9
+ * identically on workerd and Node.
10
+ */
11
+ export function assertSafePublicUrl(url, options) {
12
+ const { subject, label = 'URL', policy = STRICT_URL_SAFETY_POLICY } = options;
13
+ const invalid = () => new ValidationError(`${subject} ${label} is not a valid URL: '${url}'`);
14
+ const match = url.match(/^([a-zA-Z][a-zA-Z0-9+.-]*):\/\/([^/?#]*)/);
15
+ if (!match)
16
+ throw invalid();
17
+ if (!policy.schemes.includes(match[1].toLowerCase())) {
18
+ const allowed = policy.schemes.join('/') || '(none)';
19
+ throw new ValidationError(`${subject} ${label} must use ${allowed}`);
20
+ }
21
+ const authority = match[2];
22
+ if (authority.includes('@')) {
23
+ throw new ValidationError(`${subject} ${label} must not contain credentials`);
24
+ }
25
+ let host;
26
+ if (authority.startsWith('[')) {
27
+ const end = authority.indexOf(']');
28
+ if (end === -1)
29
+ throw invalid();
30
+ host = authority.slice(1, end);
31
+ }
32
+ else {
33
+ host = authority.split(':')[0];
34
+ }
35
+ if (host === '')
36
+ throw invalid();
37
+ if (!hostExempt(host, policy) && isBlockedPrivateHost(host)) {
38
+ throw new ValidationError(`${subject} ${label} must be a public host`);
39
+ }
40
+ }
41
+ /**
42
+ * Whether `host` is exempt from the private/internal-host block under `policy`.
43
+ * An allow-list entry matches the hostname case-insensitively, either exactly or as a
44
+ * dot suffix when it begins with `.` (`.internal` matches `a.b.internal`).
45
+ */
46
+ function hostExempt(host, policy) {
47
+ const h = host.toLowerCase().replace(/^\[|\]$/g, '');
48
+ return policy.allowHosts.some((entry) => {
49
+ const e = entry.toLowerCase();
50
+ return e.startsWith('.') ? h === e.slice(1) || h.endsWith(e) : h === e;
51
+ });
52
+ }
53
+ //# sourceMappingURL=url-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-guard.js","sourceRoot":"","sources":["../../../src/modules/shared/url-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,GAChB,MAAM,qBAAqB,CAAA;AA2B5B;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,OAA8B;IAC7E,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,KAAK,EAAE,MAAM,GAAG,wBAAwB,EAAE,GAAG,OAAO,CAAA;IAC7E,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,eAAe,CAAC,GAAG,OAAO,IAAI,KAAK,yBAAyB,GAAG,GAAG,CAAC,CAAA;IAC7F,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAA;IACnE,IAAI,CAAC,KAAK;QAAE,MAAM,OAAO,EAAE,CAAA;IAE3B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAA;QACpD,MAAM,IAAI,eAAe,CAAC,GAAG,OAAO,IAAI,KAAK,aAAa,OAAO,EAAE,CAAC,CAAA;IACtE,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;IAC3B,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,eAAe,CAAC,GAAG,OAAO,IAAI,KAAK,+BAA+B,CAAC,CAAA;IAC/E,CAAC;IACD,IAAI,IAAY,CAAA;IAChB,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,MAAM,OAAO,EAAE,CAAA;QAC/B,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAChC,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;IACjC,CAAC;IACD,IAAI,IAAI,KAAK,EAAE;QAAE,MAAM,OAAO,EAAE,CAAA;IAChC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,eAAe,CAAC,GAAG,OAAO,IAAI,KAAK,wBAAwB,CAAC,CAAA;IACxE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,IAAY,EAAE,MAAuB;IACvD,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IACpD,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAC7B,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/integrations",
3
- "version": "0.94.1",
3
+ "version": "0.95.0",
4
4
  "description": "External-system integration domain logic for the Agent Architecture Board (GitHub, documents, tasks, environments, runners).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -27,15 +27,15 @@
27
27
  "ai": "^7.0.35",
28
28
  "p-map": "^7.0.6",
29
29
  "yaml": "^2.9.0",
30
- "@cat-factory/contracts": "0.162.0",
31
- "@cat-factory/kernel": "0.156.0"
30
+ "@cat-factory/contracts": "0.163.0",
31
+ "@cat-factory/kernel": "0.157.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "typescript": "7.0.2",
35
35
  "undici": "^8.8.0",
36
36
  "valibot": "^1.4.2",
37
37
  "vitest": "^4.1.10",
38
- "@cat-factory/caching": "0.10.37"
38
+ "@cat-factory/caching": "0.10.38"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "tsc -b tsconfig.build.json",