@cat-factory/server 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/agents/CompositeAgentExecutor.d.ts +39 -0
- package/dist/agents/CompositeAgentExecutor.d.ts.map +1 -0
- package/dist/agents/CompositeAgentExecutor.js +169 -0
- package/dist/agents/CompositeAgentExecutor.js.map +1 -0
- package/dist/agents/ContainerAgentExecutor.d.ts +235 -0
- package/dist/agents/ContainerAgentExecutor.d.ts.map +1 -0
- package/dist/agents/ContainerAgentExecutor.js +825 -0
- package/dist/agents/ContainerAgentExecutor.js.map +1 -0
- package/dist/agents/ContainerRepoBootstrapper.d.ts +78 -0
- package/dist/agents/ContainerRepoBootstrapper.d.ts.map +1 -0
- package/dist/agents/ContainerRepoBootstrapper.js +279 -0
- package/dist/agents/ContainerRepoBootstrapper.js.map +1 -0
- package/dist/agents/ModelRouter.d.ts +69 -0
- package/dist/agents/ModelRouter.d.ts.map +1 -0
- package/dist/agents/ModelRouter.js +84 -0
- package/dist/agents/ModelRouter.js.map +1 -0
- package/dist/agents/RunnerJobClient.d.ts +41 -0
- package/dist/agents/RunnerJobClient.d.ts.map +1 -0
- package/dist/agents/RunnerJobClient.js +43 -0
- package/dist/agents/RunnerJobClient.js.map +1 -0
- package/dist/agents/modelProviderResolver.d.ts +33 -0
- package/dist/agents/modelProviderResolver.d.ts.map +1 -0
- package/dist/agents/modelProviderResolver.js +48 -0
- package/dist/agents/modelProviderResolver.js.map +1 -0
- package/dist/agents/providerCapabilities.d.ts +22 -0
- package/dist/agents/providerCapabilities.d.ts.map +1 -0
- package/dist/agents/providerCapabilities.js +43 -0
- package/dist/agents/providerCapabilities.js.map +1 -0
- package/dist/agents/resolveRepoTarget.d.ts +33 -0
- package/dist/agents/resolveRepoTarget.d.ts.map +1 -0
- package/dist/agents/resolveRepoTarget.js +81 -0
- package/dist/agents/resolveRepoTarget.js.map +1 -0
- package/dist/app.d.ts +12 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +102 -0
- package/dist/app.js.map +1 -0
- package/dist/auth/GitHubOAuth.d.ts +39 -0
- package/dist/auth/GitHubOAuth.d.ts.map +1 -0
- package/dist/auth/GitHubOAuth.js +90 -0
- package/dist/auth/GitHubOAuth.js.map +1 -0
- package/dist/auth/GoogleOAuth.d.ts +35 -0
- package/dist/auth/GoogleOAuth.d.ts.map +1 -0
- package/dist/auth/GoogleOAuth.js +66 -0
- package/dist/auth/GoogleOAuth.js.map +1 -0
- package/dist/auth/middleware.d.ts +15 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +63 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/signing.d.ts +50 -0
- package/dist/auth/signing.d.ts.map +1 -0
- package/dist/auth/signing.js +96 -0
- package/dist/auth/signing.js.map +1 -0
- package/dist/auth/wsTicket.d.ts +34 -0
- package/dist/auth/wsTicket.d.ts.map +1 -0
- package/dist/auth/wsTicket.js +50 -0
- package/dist/auth/wsTicket.js.map +1 -0
- package/dist/config/types.d.ts +294 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/url-safety.d.ts +8 -0
- package/dist/config/url-safety.d.ts.map +1 -0
- package/dist/config/url-safety.js +11 -0
- package/dist/config/url-safety.js.map +1 -0
- package/dist/containers/ContainerSessionService.d.ts +67 -0
- package/dist/containers/ContainerSessionService.d.ts.map +1 -0
- package/dist/containers/ContainerSessionService.js +44 -0
- package/dist/containers/ContainerSessionService.js.map +1 -0
- package/dist/crypto/WebCryptoPasswordHasher.d.ts +9 -0
- package/dist/crypto/WebCryptoPasswordHasher.d.ts.map +1 -0
- package/dist/crypto/WebCryptoPasswordHasher.js +67 -0
- package/dist/crypto/WebCryptoPasswordHasher.js.map +1 -0
- package/dist/crypto/WebCryptoPersonalSecretCipher.d.ts +6 -0
- package/dist/crypto/WebCryptoPersonalSecretCipher.d.ts.map +1 -0
- package/dist/crypto/WebCryptoPersonalSecretCipher.js +57 -0
- package/dist/crypto/WebCryptoPersonalSecretCipher.js.map +1 -0
- package/dist/crypto/WebCryptoSecretCipher.d.ts +23 -0
- package/dist/crypto/WebCryptoSecretCipher.d.ts.map +1 -0
- package/dist/crypto/WebCryptoSecretCipher.js +60 -0
- package/dist/crypto/WebCryptoSecretCipher.js.map +1 -0
- package/dist/crypto/encoding.d.ts +14 -0
- package/dist/crypto/encoding.d.ts.map +1 -0
- package/dist/crypto/encoding.js +58 -0
- package/dist/crypto/encoding.js.map +1 -0
- package/dist/events/FanOutEventPublisher.d.ts +32 -0
- package/dist/events/FanOutEventPublisher.d.ts.map +1 -0
- package/dist/events/FanOutEventPublisher.js +76 -0
- package/dist/events/FanOutEventPublisher.js.map +1 -0
- package/dist/events/InAppNotificationChannel.d.ts +20 -0
- package/dist/events/InAppNotificationChannel.d.ts.map +1 -0
- package/dist/events/InAppNotificationChannel.js +23 -0
- package/dist/events/InAppNotificationChannel.js.map +1 -0
- package/dist/github/FetchGitHubClient.d.ts +72 -0
- package/dist/github/FetchGitHubClient.d.ts.map +1 -0
- package/dist/github/FetchGitHubClient.js +485 -0
- package/dist/github/FetchGitHubClient.js.map +1 -0
- package/dist/github/FetchGitHubProvisioningClient.d.ts +13 -0
- package/dist/github/FetchGitHubProvisioningClient.d.ts.map +1 -0
- package/dist/github/FetchGitHubProvisioningClient.js +59 -0
- package/dist/github/FetchGitHubProvisioningClient.js.map +1 -0
- package/dist/github/GitHubAppAuth.d.ts +30 -0
- package/dist/github/GitHubAppAuth.d.ts.map +1 -0
- package/dist/github/GitHubAppAuth.js +95 -0
- package/dist/github/GitHubAppAuth.js.map +1 -0
- package/dist/github/GitHubAppRegistry.d.ts +57 -0
- package/dist/github/GitHubAppRegistry.d.ts.map +1 -0
- package/dist/github/GitHubAppRegistry.js +51 -0
- package/dist/github/GitHubAppRegistry.js.map +1 -0
- package/dist/github/GitHubCiStatusProvider.d.ts +21 -0
- package/dist/github/GitHubCiStatusProvider.d.ts.map +1 -0
- package/dist/github/GitHubCiStatusProvider.js +39 -0
- package/dist/github/GitHubCiStatusProvider.js.map +1 -0
- package/dist/github/GitHubMergeabilityProvider.d.ts +26 -0
- package/dist/github/GitHubMergeabilityProvider.d.ts.map +1 -0
- package/dist/github/GitHubMergeabilityProvider.js +38 -0
- package/dist/github/GitHubMergeabilityProvider.js.map +1 -0
- package/dist/github/GitHubPullRequestMerger.d.ts +23 -0
- package/dist/github/GitHubPullRequestMerger.d.ts.map +1 -0
- package/dist/github/GitHubPullRequestMerger.js +38 -0
- package/dist/github/GitHubPullRequestMerger.js.map +1 -0
- package/dist/github/WebCryptoWebhookVerifier.d.ts +9 -0
- package/dist/github/WebCryptoWebhookVerifier.d.ts.map +1 -0
- package/dist/github/WebCryptoWebhookVerifier.js +40 -0
- package/dist/github/WebCryptoWebhookVerifier.js.map +1 -0
- package/dist/github/ensureWorkBranch.d.ts +26 -0
- package/dist/github/ensureWorkBranch.d.ts.map +1 -0
- package/dist/github/ensureWorkBranch.js +97 -0
- package/dist/github/ensureWorkBranch.js.map +1 -0
- package/dist/github/state.d.ts +19 -0
- package/dist/github/state.d.ts.map +1 -0
- package/dist/github/state.js +55 -0
- package/dist/github/state.js.map +1 -0
- package/dist/http/authGate.d.ts +21 -0
- package/dist/http/authGate.d.ts.map +1 -0
- package/dist/http/authGate.js +77 -0
- package/dist/http/authGate.js.map +1 -0
- package/dist/http/cors.d.ts +13 -0
- package/dist/http/cors.d.ts.map +1 -0
- package/dist/http/cors.js +30 -0
- package/dist/http/cors.js.map +1 -0
- package/dist/http/env.d.ts +68 -0
- package/dist/http/env.d.ts.map +1 -0
- package/dist/http/env.js +2 -0
- package/dist/http/env.js.map +1 -0
- package/dist/http/errorHandler.d.ts +4 -0
- package/dist/http/errorHandler.d.ts.map +1 -0
- package/dist/http/errorHandler.js +33 -0
- package/dist/http/errorHandler.js.map +1 -0
- package/dist/http/params.d.ts +8 -0
- package/dist/http/params.d.ts.map +1 -0
- package/dist/http/params.js +13 -0
- package/dist/http/params.js.map +1 -0
- package/dist/http/validation.d.ts +12 -0
- package/dist/http/validation.d.ts.map +1 -0
- package/dist/http/validation.js +21 -0
- package/dist/http/validation.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/accounts/AccountController.d.ts +10 -0
- package/dist/modules/accounts/AccountController.d.ts.map +1 -0
- package/dist/modules/accounts/AccountController.js +197 -0
- package/dist/modules/accounts/AccountController.js.map +1 -0
- package/dist/modules/agentRuns/AgentRunController.d.ts +10 -0
- package/dist/modules/agentRuns/AgentRunController.d.ts.map +1 -0
- package/dist/modules/agentRuns/AgentRunController.js +65 -0
- package/dist/modules/agentRuns/AgentRunController.js.map +1 -0
- package/dist/modules/auth/AuthController.d.ts +12 -0
- package/dist/modules/auth/AuthController.d.ts.map +1 -0
- package/dist/modules/auth/AuthController.js +457 -0
- package/dist/modules/auth/AuthController.js.map +1 -0
- package/dist/modules/board/BoardController.d.ts +8 -0
- package/dist/modules/board/BoardController.d.ts.map +1 -0
- package/dist/modules/board/BoardController.js +89 -0
- package/dist/modules/board/BoardController.js.map +1 -0
- package/dist/modules/boardScan/BoardScanController.d.ts +10 -0
- package/dist/modules/boardScan/BoardScanController.d.ts.map +1 -0
- package/dist/modules/boardScan/BoardScanController.js +53 -0
- package/dist/modules/boardScan/BoardScanController.js.map +1 -0
- package/dist/modules/bootstrap/BootstrapController.d.ts +10 -0
- package/dist/modules/bootstrap/BootstrapController.d.ts.map +1 -0
- package/dist/modules/bootstrap/BootstrapController.js +75 -0
- package/dist/modules/bootstrap/BootstrapController.js.map +1 -0
- package/dist/modules/clarity/ClarityReviewController.d.ts +11 -0
- package/dist/modules/clarity/ClarityReviewController.d.ts.map +1 -0
- package/dist/modules/clarity/ClarityReviewController.js +97 -0
- package/dist/modules/clarity/ClarityReviewController.js.map +1 -0
- package/dist/modules/consensus/ConsensusController.d.ts +12 -0
- package/dist/modules/consensus/ConsensusController.d.ts.map +1 -0
- package/dist/modules/consensus/ConsensusController.js +23 -0
- package/dist/modules/consensus/ConsensusController.js.map +1 -0
- package/dist/modules/documents/DocumentSourceController.d.ts +10 -0
- package/dist/modules/documents/DocumentSourceController.d.ts.map +1 -0
- package/dist/modules/documents/DocumentSourceController.js +116 -0
- package/dist/modules/documents/DocumentSourceController.js.map +1 -0
- package/dist/modules/environments/EnvironmentController.d.ts +10 -0
- package/dist/modules/environments/EnvironmentController.d.ts.map +1 -0
- package/dist/modules/environments/EnvironmentController.js +95 -0
- package/dist/modules/environments/EnvironmentController.js.map +1 -0
- package/dist/modules/events/EventsController.d.ts +26 -0
- package/dist/modules/events/EventsController.d.ts.map +1 -0
- package/dist/modules/events/EventsController.js +56 -0
- package/dist/modules/events/EventsController.js.map +1 -0
- package/dist/modules/execution/ExecutionController.d.ts +10 -0
- package/dist/modules/execution/ExecutionController.d.ts.map +1 -0
- package/dist/modules/execution/ExecutionController.js +156 -0
- package/dist/modules/execution/ExecutionController.js.map +1 -0
- package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts +14 -0
- package/dist/modules/fragmentLibrary/FragmentLibraryController.d.ts.map +1 -0
- package/dist/modules/fragmentLibrary/FragmentLibraryController.js +128 -0
- package/dist/modules/fragmentLibrary/FragmentLibraryController.js.map +1 -0
- package/dist/modules/github/GitHubController.d.ts +12 -0
- package/dist/modules/github/GitHubController.d.ts.map +1 -0
- package/dist/modules/github/GitHubController.js +234 -0
- package/dist/modules/github/GitHubController.js.map +1 -0
- package/dist/modules/github/GitHubWebhookController.d.ts +13 -0
- package/dist/modules/github/GitHubWebhookController.d.ts.map +1 -0
- package/dist/modules/github/GitHubWebhookController.js +74 -0
- package/dist/modules/github/GitHubWebhookController.js.map +1 -0
- package/dist/modules/llmProxy/LlmProxyController.d.ts +18 -0
- package/dist/modules/llmProxy/LlmProxyController.d.ts.map +1 -0
- package/dist/modules/llmProxy/LlmProxyController.js +567 -0
- package/dist/modules/llmProxy/LlmProxyController.js.map +1 -0
- package/dist/modules/localModels/LocalModelEndpointController.d.ts +4 -0
- package/dist/modules/localModels/LocalModelEndpointController.d.ts.map +1 -0
- package/dist/modules/localModels/LocalModelEndpointController.js +58 -0
- package/dist/modules/localModels/LocalModelEndpointController.js.map +1 -0
- package/dist/modules/merge/MergePresetController.d.ts +9 -0
- package/dist/modules/merge/MergePresetController.d.ts.map +1 -0
- package/dist/modules/merge/MergePresetController.js +46 -0
- package/dist/modules/merge/MergePresetController.js.map +1 -0
- package/dist/modules/modelDefaults/ModelDefaultsController.d.ts +9 -0
- package/dist/modules/modelDefaults/ModelDefaultsController.d.ts.map +1 -0
- package/dist/modules/modelDefaults/ModelDefaultsController.js +32 -0
- package/dist/modules/modelDefaults/ModelDefaultsController.js.map +1 -0
- package/dist/modules/models/ModelController.d.ts +11 -0
- package/dist/modules/models/ModelController.d.ts.map +1 -0
- package/dist/modules/models/ModelController.js +38 -0
- package/dist/modules/models/ModelController.js.map +1 -0
- package/dist/modules/notifications/NotificationController.d.ts +13 -0
- package/dist/modules/notifications/NotificationController.d.ts.map +1 -0
- package/dist/modules/notifications/NotificationController.js +67 -0
- package/dist/modules/notifications/NotificationController.js.map +1 -0
- package/dist/modules/pipelines/PipelineController.d.ts +5 -0
- package/dist/modules/pipelines/PipelineController.d.ts.map +1 -0
- package/dist/modules/pipelines/PipelineController.js +46 -0
- package/dist/modules/pipelines/PipelineController.js.map +1 -0
- package/dist/modules/promptFragments/PromptFragmentController.d.ts +11 -0
- package/dist/modules/promptFragments/PromptFragmentController.d.ts.map +1 -0
- package/dist/modules/promptFragments/PromptFragmentController.js +18 -0
- package/dist/modules/promptFragments/PromptFragmentController.js.map +1 -0
- package/dist/modules/providers/ApiKeyController.d.ts +13 -0
- package/dist/modules/providers/ApiKeyController.d.ts.map +1 -0
- package/dist/modules/providers/ApiKeyController.js +98 -0
- package/dist/modules/providers/ApiKeyController.js.map +1 -0
- package/dist/modules/providers/PersonalSubscriptionController.d.ts +4 -0
- package/dist/modules/providers/PersonalSubscriptionController.d.ts.map +1 -0
- package/dist/modules/providers/PersonalSubscriptionController.js +48 -0
- package/dist/modules/providers/PersonalSubscriptionController.js.map +1 -0
- package/dist/modules/providers/VendorCredentialController.d.ts +4 -0
- package/dist/modules/providers/VendorCredentialController.d.ts.map +1 -0
- package/dist/modules/providers/VendorCredentialController.js +55 -0
- package/dist/modules/providers/VendorCredentialController.js.map +1 -0
- package/dist/modules/providers/personalCredentialGate.d.ts +34 -0
- package/dist/modules/providers/personalCredentialGate.d.ts.map +1 -0
- package/dist/modules/providers/personalCredentialGate.js +106 -0
- package/dist/modules/providers/personalCredentialGate.js.map +1 -0
- package/dist/modules/recurring/RecurringPipelineController.d.ts +8 -0
- package/dist/modules/recurring/RecurringPipelineController.d.ts.map +1 -0
- package/dist/modules/recurring/RecurringPipelineController.js +58 -0
- package/dist/modules/recurring/RecurringPipelineController.js.map +1 -0
- package/dist/modules/recurring/TrackerSettingsController.d.ts +8 -0
- package/dist/modules/recurring/TrackerSettingsController.d.ts.map +1 -0
- package/dist/modules/recurring/TrackerSettingsController.js +30 -0
- package/dist/modules/recurring/TrackerSettingsController.js.map +1 -0
- package/dist/modules/releaseHealth/ReleaseHealthController.d.ts +9 -0
- package/dist/modules/releaseHealth/ReleaseHealthController.d.ts.map +1 -0
- package/dist/modules/releaseHealth/ReleaseHealthController.js +58 -0
- package/dist/modules/releaseHealth/ReleaseHealthController.js.map +1 -0
- package/dist/modules/requirements/RequirementReviewController.d.ts +12 -0
- package/dist/modules/requirements/RequirementReviewController.d.ts.map +1 -0
- package/dist/modules/requirements/RequirementReviewController.js +107 -0
- package/dist/modules/requirements/RequirementReviewController.js.map +1 -0
- package/dist/modules/runners/RunnerPoolController.d.ts +10 -0
- package/dist/modules/runners/RunnerPoolController.d.ts.map +1 -0
- package/dist/modules/runners/RunnerPoolController.js +52 -0
- package/dist/modules/runners/RunnerPoolController.js.map +1 -0
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts +9 -0
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.d.ts.map +1 -0
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js +32 -0
- package/dist/modules/serviceFragmentDefaults/ServiceFragmentDefaultsController.js.map +1 -0
- package/dist/modules/services/ServiceMountController.d.ts +11 -0
- package/dist/modules/services/ServiceMountController.d.ts.map +1 -0
- package/dist/modules/services/ServiceMountController.js +64 -0
- package/dist/modules/services/ServiceMountController.js.map +1 -0
- package/dist/modules/settings/WorkspaceSettingsController.d.ts +9 -0
- package/dist/modules/settings/WorkspaceSettingsController.d.ts.map +1 -0
- package/dist/modules/settings/WorkspaceSettingsController.js +32 -0
- package/dist/modules/settings/WorkspaceSettingsController.js.map +1 -0
- package/dist/modules/slack/SlackController.d.ts +17 -0
- package/dist/modules/slack/SlackController.d.ts.map +1 -0
- package/dist/modules/slack/SlackController.js +135 -0
- package/dist/modules/slack/SlackController.js.map +1 -0
- package/dist/modules/tasks/TaskSourceController.d.ts +9 -0
- package/dist/modules/tasks/TaskSourceController.d.ts.map +1 -0
- package/dist/modules/tasks/TaskSourceController.js +103 -0
- package/dist/modules/tasks/TaskSourceController.js.map +1 -0
- package/dist/modules/webSearch/WebSearchProxyController.d.ts +4 -0
- package/dist/modules/webSearch/WebSearchProxyController.d.ts.map +1 -0
- package/dist/modules/webSearch/WebSearchProxyController.js +78 -0
- package/dist/modules/webSearch/WebSearchProxyController.js.map +1 -0
- package/dist/modules/webSearch/upstreams.d.ts +50 -0
- package/dist/modules/webSearch/upstreams.d.ts.map +1 -0
- package/dist/modules/webSearch/upstreams.js +107 -0
- package/dist/modules/webSearch/upstreams.js.map +1 -0
- package/dist/modules/workspaces/WorkspaceController.d.ts +5 -0
- package/dist/modules/workspaces/WorkspaceController.d.ts.map +1 -0
- package/dist/modules/workspaces/WorkspaceController.js +167 -0
- package/dist/modules/workspaces/WorkspaceController.js.map +1 -0
- package/dist/observability/logger.d.ts +9 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +39 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/persistence/mappers.d.ts +101 -0
- package/dist/persistence/mappers.d.ts.map +1 -0
- package/dist/persistence/mappers.js +260 -0
- package/dist/persistence/mappers.js.map +1 -0
- package/dist/runtime/escalateNotifications.d.ts +12 -0
- package/dist/runtime/escalateNotifications.d.ts.map +1 -0
- package/dist/runtime/escalateNotifications.js +25 -0
- package/dist/runtime/escalateNotifications.js.map +1 -0
- package/dist/runtime/gateways.d.ts +159 -0
- package/dist/runtime/gateways.d.ts.map +1 -0
- package/dist/runtime/gateways.js +2 -0
- package/dist/runtime/gateways.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { SecretCipher } from '@cat-factory/kernel';
|
|
2
|
+
export interface WebCryptoSecretCipherOptions {
|
|
3
|
+
/** Service-level master key, base64 (≥32 bytes decoded). */
|
|
4
|
+
masterKeyBase64: string;
|
|
5
|
+
/**
|
|
6
|
+
* HKDF `info` string, separating the keys derived for distinct uses of the
|
|
7
|
+
* same (or a shared) master key — e.g. environment secrets vs document-source
|
|
8
|
+
* credentials. Defaults to the environments tag for backward compatibility.
|
|
9
|
+
* Ciphertext is only decryptable by a cipher built with the same `info`.
|
|
10
|
+
*/
|
|
11
|
+
info?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class WebCryptoSecretCipher implements SecretCipher {
|
|
14
|
+
private readonly masterKey;
|
|
15
|
+
private readonly info;
|
|
16
|
+
private baseKeyPromise?;
|
|
17
|
+
constructor({ masterKeyBase64, info }: WebCryptoSecretCipherOptions);
|
|
18
|
+
encrypt(plaintext: string): Promise<string>;
|
|
19
|
+
decrypt(envelope: string): Promise<string>;
|
|
20
|
+
private baseKey;
|
|
21
|
+
private deriveKey;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=WebCryptoSecretCipher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebCryptoSecretCipher.d.ts","sourceRoot":"","sources":["../../src/crypto/WebCryptoSecretCipher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAmBvD,MAAM,WAAW,4BAA4B;IAC3C,4DAA4D;IAC5D,eAAe,EAAE,MAAM,CAAA;IACvB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,qBAAa,qBAAsB,YAAW,YAAY;IAGxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyB;IAC9C,OAAO,CAAC,cAAc,CAAC,CAAoB;IAE3C,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,4BAA4B,EAMlE;IAEK,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUhD;IAEK,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW/C;IAED,OAAO,CAAC,OAAO;YASD,SAAS;CASxB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { base64url, base64urlToBytes } from './encoding.js';
|
|
2
|
+
// Authenticated encryption of credentials at rest, on Web Crypto (AES-256-GCM)
|
|
3
|
+
// — no Node `crypto`, runs in a plain Workers isolate AND under Node (crypto.subtle
|
|
4
|
+
// is a global there too). A service-level master key (e.g. the runners /
|
|
5
|
+
// environments encryption-key secret) is imported once for HKDF; every record
|
|
6
|
+
// derives a fresh AES key from a random per-record salt and is sealed under a
|
|
7
|
+
// random per-record IV. The self-describing envelope carries a version tag so the
|
|
8
|
+
// scheme/key can be rotated later without ambiguity.
|
|
9
|
+
//
|
|
10
|
+
// envelope = "v1." + base64url(salt) + "." + base64url(iv) + "." + base64url(ciphertext|tag)
|
|
11
|
+
const VERSION = 'v1';
|
|
12
|
+
const SALT_BYTES = 16;
|
|
13
|
+
const IV_BYTES = 12;
|
|
14
|
+
/** Default HKDF domain-separation tag (used by the environments integration). */
|
|
15
|
+
const DEFAULT_INFO = 'cat-factory:environments';
|
|
16
|
+
export class WebCryptoSecretCipher {
|
|
17
|
+
// ArrayBuffer-backed (not the wider ArrayBufferLike) so the bytes satisfy the
|
|
18
|
+
// Web Crypto `BufferSource` parameters under the strict DOM lib.
|
|
19
|
+
masterKey;
|
|
20
|
+
info;
|
|
21
|
+
baseKeyPromise;
|
|
22
|
+
constructor({ masterKeyBase64, info }) {
|
|
23
|
+
this.masterKey = base64urlToBytes(masterKeyBase64.trim());
|
|
24
|
+
if (this.masterKey.length < 32) {
|
|
25
|
+
throw new Error('encryption key must decode to at least 32 bytes');
|
|
26
|
+
}
|
|
27
|
+
this.info = new TextEncoder().encode(info ?? DEFAULT_INFO);
|
|
28
|
+
}
|
|
29
|
+
async encrypt(plaintext) {
|
|
30
|
+
const salt = crypto.getRandomValues(new Uint8Array(SALT_BYTES));
|
|
31
|
+
const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));
|
|
32
|
+
const key = await this.deriveKey(salt);
|
|
33
|
+
const sealed = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, new TextEncoder().encode(plaintext));
|
|
34
|
+
return [VERSION, base64url(salt), base64url(iv), base64url(new Uint8Array(sealed))].join('.');
|
|
35
|
+
}
|
|
36
|
+
async decrypt(envelope) {
|
|
37
|
+
const parts = envelope.split('.');
|
|
38
|
+
if (parts.length !== 4 || parts[0] !== VERSION) {
|
|
39
|
+
throw new Error('Invalid secret envelope');
|
|
40
|
+
}
|
|
41
|
+
const salt = base64urlToBytes(parts[1]);
|
|
42
|
+
const iv = base64urlToBytes(parts[2]);
|
|
43
|
+
const ciphertext = base64urlToBytes(parts[3]);
|
|
44
|
+
const key = await this.deriveKey(salt);
|
|
45
|
+
const plain = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, ciphertext);
|
|
46
|
+
return new TextDecoder().decode(plain);
|
|
47
|
+
}
|
|
48
|
+
baseKey() {
|
|
49
|
+
if (!this.baseKeyPromise) {
|
|
50
|
+
this.baseKeyPromise = crypto.subtle.importKey('raw', this.masterKey, 'HKDF', false, [
|
|
51
|
+
'deriveKey',
|
|
52
|
+
]);
|
|
53
|
+
}
|
|
54
|
+
return this.baseKeyPromise;
|
|
55
|
+
}
|
|
56
|
+
async deriveKey(salt) {
|
|
57
|
+
return crypto.subtle.deriveKey({ name: 'HKDF', hash: 'SHA-256', salt, info: this.info }, await this.baseKey(), { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt']);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=WebCryptoSecretCipher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebCryptoSecretCipher.js","sourceRoot":"","sources":["../../src/crypto/WebCryptoSecretCipher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Base64url-encode bytes or a UTF-8 string (no padding), per JWT/JWS. */
|
|
2
|
+
export declare function base64url(input: ArrayBuffer | Uint8Array | string): string;
|
|
3
|
+
/** Decode a base64url string to bytes. */
|
|
4
|
+
export declare function base64urlToBytes(value: string): Uint8Array;
|
|
5
|
+
/**
|
|
6
|
+
* Decode a PEM private key body to DER bytes. Requires PKCS#8
|
|
7
|
+
* (`-----BEGIN PRIVATE KEY-----`); GitHub issues PKCS#1
|
|
8
|
+
* (`-----BEGIN RSA PRIVATE KEY-----`), which must be converted once via
|
|
9
|
+
* `openssl pkcs8 -topk8 -nocrypt` (see backend/docs/github-operations.md).
|
|
10
|
+
*/
|
|
11
|
+
export declare function pkcs8PemToDer(pem: string): ArrayBuffer;
|
|
12
|
+
/** Constant-time-ish equality for two byte arrays (length + XOR accumulation). */
|
|
13
|
+
export declare function timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean;
|
|
14
|
+
//# sourceMappingURL=encoding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/crypto/encoding.ts"],"names":[],"mappings":"AAIA,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAS1E;AAED,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAO1D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAetD;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAKrE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Small encoding helpers built on what both the Workers runtime and Node provide
|
|
2
|
+
// natively (atob/btoa, TextEncoder, Web Crypto). No Node `Buffer` or `crypto`
|
|
3
|
+
// module is used, so this works in plain V8 isolates and in Node alike.
|
|
4
|
+
/** Base64url-encode bytes or a UTF-8 string (no padding), per JWT/JWS. */
|
|
5
|
+
export function base64url(input) {
|
|
6
|
+
let bytes;
|
|
7
|
+
if (typeof input === 'string')
|
|
8
|
+
bytes = new TextEncoder().encode(input);
|
|
9
|
+
else if (input instanceof Uint8Array)
|
|
10
|
+
bytes = input;
|
|
11
|
+
else
|
|
12
|
+
bytes = new Uint8Array(input);
|
|
13
|
+
let binary = '';
|
|
14
|
+
for (const byte of bytes)
|
|
15
|
+
binary += String.fromCharCode(byte);
|
|
16
|
+
return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
17
|
+
}
|
|
18
|
+
/** Decode a base64url string to bytes. */
|
|
19
|
+
export function base64urlToBytes(value) {
|
|
20
|
+
const base64 = value.replace(/-/g, '+').replace(/_/g, '/');
|
|
21
|
+
const padded = base64 + '='.repeat((4 - (base64.length % 4)) % 4);
|
|
22
|
+
const binary = atob(padded);
|
|
23
|
+
const bytes = new Uint8Array(binary.length);
|
|
24
|
+
for (let i = 0; i < binary.length; i++)
|
|
25
|
+
bytes[i] = binary.charCodeAt(i);
|
|
26
|
+
return bytes;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Decode a PEM private key body to DER bytes. Requires PKCS#8
|
|
30
|
+
* (`-----BEGIN PRIVATE KEY-----`); GitHub issues PKCS#1
|
|
31
|
+
* (`-----BEGIN RSA PRIVATE KEY-----`), which must be converted once via
|
|
32
|
+
* `openssl pkcs8 -topk8 -nocrypt` (see backend/docs/github-operations.md).
|
|
33
|
+
*/
|
|
34
|
+
export function pkcs8PemToDer(pem) {
|
|
35
|
+
if (/BEGIN RSA PRIVATE KEY/.test(pem)) {
|
|
36
|
+
throw new Error('GITHUB_APP_PRIVATE_KEY is PKCS#1 (BEGIN RSA PRIVATE KEY); convert it to PKCS#8 ' +
|
|
37
|
+
'with `openssl pkcs8 -topk8 -nocrypt -in key.pem -out key.pk8.pem`');
|
|
38
|
+
}
|
|
39
|
+
const body = pem
|
|
40
|
+
.replace(/-----BEGIN [^-]+-----/g, '')
|
|
41
|
+
.replace(/-----END [^-]+-----/g, '')
|
|
42
|
+
.replace(/\s+/g, '');
|
|
43
|
+
const binary = atob(body);
|
|
44
|
+
const bytes = new Uint8Array(binary.length);
|
|
45
|
+
for (let i = 0; i < binary.length; i++)
|
|
46
|
+
bytes[i] = binary.charCodeAt(i);
|
|
47
|
+
return bytes.buffer;
|
|
48
|
+
}
|
|
49
|
+
/** Constant-time-ish equality for two byte arrays (length + XOR accumulation). */
|
|
50
|
+
export function timingSafeEqual(a, b) {
|
|
51
|
+
if (a.length !== b.length)
|
|
52
|
+
return false;
|
|
53
|
+
let diff = 0;
|
|
54
|
+
for (let i = 0; i < a.length; i++)
|
|
55
|
+
diff |= a[i] ^ b[i];
|
|
56
|
+
return diff === 0;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=encoding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../src/crypto/encoding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Block, BootstrapJob, ConsensusSession, ClarityReview, ExecutionEventPublisher, ExecutionInstance, LlmCallActivity, Notification, RequirementReview, WorkspaceMountRepository } from '@cat-factory/kernel';
|
|
2
|
+
export interface FanOutEventPublisherDependencies {
|
|
3
|
+
workspaceMountRepository: Pick<WorkspaceMountRepository, 'listWorkspaceIdsMountingBlock'>;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* In-org real-time fan-out. A shared service can appear on several workspaces' boards, so
|
|
7
|
+
* a live change to it (run progress, bootstrap, notification) must reach EVERY board that
|
|
8
|
+
* mounts the service — not just the workspace the engine happens to address. This decorator
|
|
9
|
+
* resolves the changed block's service, expands it to the set of mounting workspaces, and
|
|
10
|
+
* re-publishes the event to each via the inner per-workspace publisher.
|
|
11
|
+
*
|
|
12
|
+
* Best-effort like the inner publisher: the persisted row is the source of truth, so a
|
|
13
|
+
* client reconciles any miss by re-fetching its snapshot. When a block can't be resolved to
|
|
14
|
+
* a service (e.g. a legacy workspace-local block, or a coarse `boardChanged` with no block)
|
|
15
|
+
* it falls back to delivering to the originating workspace only.
|
|
16
|
+
*/
|
|
17
|
+
export declare class FanOutEventPublisher implements ExecutionEventPublisher {
|
|
18
|
+
private readonly inner;
|
|
19
|
+
private readonly deps;
|
|
20
|
+
constructor(inner: ExecutionEventPublisher, deps: FanOutEventPublisherDependencies);
|
|
21
|
+
/** The set of workspaces a change to `blockId` should reach: the origin + every mount. */
|
|
22
|
+
private targets;
|
|
23
|
+
executionChanged(workspaceId: string, instance: ExecutionInstance, block?: Block | null): Promise<void>;
|
|
24
|
+
boardChanged(workspaceId: string, reason: string, blockId?: string | null): Promise<void>;
|
|
25
|
+
bootstrapChanged(workspaceId: string, job: BootstrapJob, block?: Block | null): Promise<void>;
|
|
26
|
+
notificationChanged(workspaceId: string, notification: Notification): Promise<void>;
|
|
27
|
+
llmCallObserved(workspaceId: string, activity: LlmCallActivity): Promise<void>;
|
|
28
|
+
requirementReviewChanged(workspaceId: string, review: RequirementReview): Promise<void>;
|
|
29
|
+
consensusSessionChanged(workspaceId: string, session: ConsensusSession): Promise<void>;
|
|
30
|
+
clarityReviewChanged(workspaceId: string, review: ClarityReview): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=FanOutEventPublisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FanOutEventPublisher.d.ts","sourceRoot":"","sources":["../../src/events/FanOutEventPublisher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,gCAAgC;IAC/C,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,EAAE,+BAA+B,CAAC,CAAA;CAC1F;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAqB,YAAW,uBAAuB;IAEhE,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,KAAK,EAAE,uBAAuB,EAC9B,IAAI,EAAE,gCAAgC,EACrD;IAEJ,0FAA0F;YAC5E,OAAO;IAWf,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,GACnB,OAAO,CAAC,IAAI,CAAC,CAIf;IAEK,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9F;IAEK,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,YAAY,EACjB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,GACnB,OAAO,CAAC,IAAI,CAAC,CAIf;IAEK,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxF;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnF;IAEK,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5F;IAEK,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3F;IAEK,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF;CACF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-org real-time fan-out. A shared service can appear on several workspaces' boards, so
|
|
3
|
+
* a live change to it (run progress, bootstrap, notification) must reach EVERY board that
|
|
4
|
+
* mounts the service — not just the workspace the engine happens to address. This decorator
|
|
5
|
+
* resolves the changed block's service, expands it to the set of mounting workspaces, and
|
|
6
|
+
* re-publishes the event to each via the inner per-workspace publisher.
|
|
7
|
+
*
|
|
8
|
+
* Best-effort like the inner publisher: the persisted row is the source of truth, so a
|
|
9
|
+
* client reconciles any miss by re-fetching its snapshot. When a block can't be resolved to
|
|
10
|
+
* a service (e.g. a legacy workspace-local block, or a coarse `boardChanged` with no block)
|
|
11
|
+
* it falls back to delivering to the originating workspace only.
|
|
12
|
+
*/
|
|
13
|
+
export class FanOutEventPublisher {
|
|
14
|
+
inner;
|
|
15
|
+
deps;
|
|
16
|
+
constructor(inner, deps) {
|
|
17
|
+
this.inner = inner;
|
|
18
|
+
this.deps = deps;
|
|
19
|
+
}
|
|
20
|
+
/** The set of workspaces a change to `blockId` should reach: the origin + every mount. */
|
|
21
|
+
async targets(originWorkspaceId, blockId) {
|
|
22
|
+
if (!blockId)
|
|
23
|
+
return [originWorkspaceId];
|
|
24
|
+
// Single join (block → its service → the workspaces mounting it). Empty when the block has
|
|
25
|
+
// no service, so the result collapses to the origin only.
|
|
26
|
+
const mounting = await this.deps.workspaceMountRepository.listWorkspaceIdsMountingBlock(originWorkspaceId, blockId);
|
|
27
|
+
return [...new Set([originWorkspaceId, ...mounting])];
|
|
28
|
+
}
|
|
29
|
+
async executionChanged(workspaceId, instance, block) {
|
|
30
|
+
for (const ws of await this.targets(workspaceId, block?.id ?? instance.blockId)) {
|
|
31
|
+
await this.inner.executionChanged(ws, instance, block);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async boardChanged(workspaceId, reason, blockId) {
|
|
35
|
+
// A structural change to a shared service (a module materialised, a run cancelled, a
|
|
36
|
+
// bootstrap finished) must prompt a refresh on EVERY board that mounts it. When the caller
|
|
37
|
+
// names a block of the affected service we resolve it to that set; a genuinely block-less
|
|
38
|
+
// signal falls back to the originating workspace only.
|
|
39
|
+
for (const ws of await this.targets(workspaceId, blockId)) {
|
|
40
|
+
await this.inner.boardChanged(ws, reason, blockId);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async bootstrapChanged(workspaceId, job, block) {
|
|
44
|
+
for (const ws of await this.targets(workspaceId, block?.id ?? job.blockId)) {
|
|
45
|
+
await this.inner.bootstrapChanged?.(ws, job, block);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async notificationChanged(workspaceId, notification) {
|
|
49
|
+
for (const ws of await this.targets(workspaceId, notification.blockId)) {
|
|
50
|
+
await this.inner.notificationChanged?.(ws, notification);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async llmCallObserved(workspaceId, activity) {
|
|
54
|
+
// The compact activity carries no block id, so there is nothing to resolve a shared
|
|
55
|
+
// service from — deliver to the originating workspace only. Model activity for a
|
|
56
|
+
// mounted service surfacing solely on its origin board is an acceptable edge; the
|
|
57
|
+
// persisted metrics (and the panel's lazy load) remain the cross-workspace source.
|
|
58
|
+
await this.inner.llmCallObserved?.(workspaceId, activity);
|
|
59
|
+
}
|
|
60
|
+
async requirementReviewChanged(workspaceId, review) {
|
|
61
|
+
for (const ws of await this.targets(workspaceId, review.blockId)) {
|
|
62
|
+
await this.inner.requirementReviewChanged?.(ws, review);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async consensusSessionChanged(workspaceId, session) {
|
|
66
|
+
for (const ws of await this.targets(workspaceId, session.blockId)) {
|
|
67
|
+
await this.inner.consensusSessionChanged?.(ws, session);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async clarityReviewChanged(workspaceId, review) {
|
|
71
|
+
for (const ws of await this.targets(workspaceId, review.blockId)) {
|
|
72
|
+
await this.inner.clarityReviewChanged?.(ws, review);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=FanOutEventPublisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FanOutEventPublisher.js","sourceRoot":"","sources":["../../src/events/FanOutEventPublisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ExecutionEventPublisher, Notification, NotificationChannel } from '@cat-factory/kernel';
|
|
2
|
+
/**
|
|
3
|
+
* The in-app notification channel: pushes the `notification` WorkspaceEvent to the
|
|
4
|
+
* board (via the same event publisher that carries execution/board events) so the
|
|
5
|
+
* inbox + per-block badge update live. The canonical row is already persisted by
|
|
6
|
+
* the NotificationService, so this is purely the live push — best-effort, errors
|
|
7
|
+
* swallowed by the publisher.
|
|
8
|
+
*
|
|
9
|
+
* Runtime-neutral: it wraps whatever {@link ExecutionEventPublisher} a facade wires
|
|
10
|
+
* (the Worker's Durable-Object publisher, the Node service's WebSocket-hub publisher),
|
|
11
|
+
* so both facades deliver in-app notifications through the same channel. Composed
|
|
12
|
+
* alongside Slack/email channels via CompositeNotificationChannel, with no change to
|
|
13
|
+
* the code that raises notifications.
|
|
14
|
+
*/
|
|
15
|
+
export declare class InAppNotificationChannel implements NotificationChannel {
|
|
16
|
+
private readonly publisher;
|
|
17
|
+
constructor(publisher: ExecutionEventPublisher);
|
|
18
|
+
deliver(workspaceId: string, notification: Notification): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=InAppNotificationChannel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InAppNotificationChannel.d.ts","sourceRoot":"","sources":["../../src/events/InAppNotificationChannel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAE5B;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAyB,YAAW,mBAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAtC,YAA6B,SAAS,EAAE,uBAAuB,EAAI;IAE7D,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The in-app notification channel: pushes the `notification` WorkspaceEvent to the
|
|
3
|
+
* board (via the same event publisher that carries execution/board events) so the
|
|
4
|
+
* inbox + per-block badge update live. The canonical row is already persisted by
|
|
5
|
+
* the NotificationService, so this is purely the live push — best-effort, errors
|
|
6
|
+
* swallowed by the publisher.
|
|
7
|
+
*
|
|
8
|
+
* Runtime-neutral: it wraps whatever {@link ExecutionEventPublisher} a facade wires
|
|
9
|
+
* (the Worker's Durable-Object publisher, the Node service's WebSocket-hub publisher),
|
|
10
|
+
* so both facades deliver in-app notifications through the same channel. Composed
|
|
11
|
+
* alongside Slack/email channels via CompositeNotificationChannel, with no change to
|
|
12
|
+
* the code that raises notifications.
|
|
13
|
+
*/
|
|
14
|
+
export class InAppNotificationChannel {
|
|
15
|
+
publisher;
|
|
16
|
+
constructor(publisher) {
|
|
17
|
+
this.publisher = publisher;
|
|
18
|
+
}
|
|
19
|
+
async deliver(workspaceId, notification) {
|
|
20
|
+
await this.publisher.notificationChanged?.(workspaceId, notification);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=InAppNotificationChannel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InAppNotificationChannel.js","sourceRoot":"","sources":["../../src/events/InAppNotificationChannel.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAwB;IACN,SAAS;IAAtC,YAA6B,SAAkC;yBAAlC,SAAS;IAA4B,CAAC;IAEnE,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,YAA0B;QAC3D,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IACvE,CAAC;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type Clock, type CommitFilesResult, type GitHubBranch, type GitHubCheckRun, type GitHubClient, type GitHubCodeSearchHit, type GitHubCommit, type GitHubIssue, type GitHubIssueDetail, type GitHubIssueSearchHit, type GitHubPullRequest, type GitHubRepo, type GitHubRepoRef, type IdGenerator, type InstallationMeta, type InstallationSummary, type ListOptions, type MergePullRequestInput, type OpenPullRequestInput, type Paged, type RateLimitRepository, type RepoContentEntry, type RepoEntry, type RepoFileContent } from '@cat-factory/kernel';
|
|
2
|
+
import type { CommitFilesInput } from '@cat-factory/contracts';
|
|
3
|
+
import type { AppTokenSource } from './GitHubAppRegistry.js';
|
|
4
|
+
export interface FetchGitHubClientDependencies {
|
|
5
|
+
/**
|
|
6
|
+
* Mints the per-call token. The App registry (resolving which App's credentials to
|
|
7
|
+
* use per installation, ADR 0005) satisfies this; a static-PAT source does too (it
|
|
8
|
+
* returns the PAT for installation calls and has no app-JWT paths).
|
|
9
|
+
*/
|
|
10
|
+
registry: AppTokenSource;
|
|
11
|
+
rateLimitRepository: RateLimitRepository;
|
|
12
|
+
idGenerator: IdGenerator;
|
|
13
|
+
clock: Clock;
|
|
14
|
+
apiBase: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class FetchGitHubClient implements GitHubClient {
|
|
17
|
+
private readonly deps;
|
|
18
|
+
constructor(deps: FetchGitHubClientDependencies);
|
|
19
|
+
getInstallation(installationId: number): Promise<InstallationMeta>;
|
|
20
|
+
listInstallations(): Promise<InstallationSummary[]>;
|
|
21
|
+
listInstallationRepos(installationId: number): Promise<Paged<GitHubRepo>>;
|
|
22
|
+
getRepo(installationId: number, ref: GitHubRepoRef): Promise<GitHubRepo>;
|
|
23
|
+
listBranches(installationId: number, ref: GitHubRepoRef, etag?: string): Promise<Paged<GitHubBranch>>;
|
|
24
|
+
listRootEntries(installationId: number, ref: GitHubRepoRef): Promise<RepoEntry[]>;
|
|
25
|
+
listDirectory(installationId: number, ref: GitHubRepoRef, path: string, gitRef?: string): Promise<RepoContentEntry[]>;
|
|
26
|
+
getFileContent(installationId: number, ref: GitHubRepoRef, path: string, gitRef?: string): Promise<RepoFileContent | null>;
|
|
27
|
+
listPullRequests(installationId: number, ref: GitHubRepoRef, opts?: ListOptions): Promise<Paged<GitHubPullRequest>>;
|
|
28
|
+
listIssues(installationId: number, ref: GitHubRepoRef, opts?: ListOptions): Promise<Paged<GitHubIssue>>;
|
|
29
|
+
getIssue(installationId: number, ref: GitHubRepoRef, issueNumber: number): Promise<GitHubIssueDetail>;
|
|
30
|
+
searchIssues(installationId: number, query: string, limit?: number): Promise<GitHubIssueSearchHit[]>;
|
|
31
|
+
searchCode(installationId: number, query: string, limit?: number): Promise<GitHubCodeSearchHit[]>;
|
|
32
|
+
listCommits(installationId: number, ref: GitHubRepoRef, opts?: ListOptions & {
|
|
33
|
+
sha?: string;
|
|
34
|
+
}): Promise<Paged<GitHubCommit>>;
|
|
35
|
+
listCheckRuns(installationId: number, ref: GitHubRepoRef, sha: string): Promise<Paged<GitHubCheckRun>>;
|
|
36
|
+
createBranch(installationId: number, ref: GitHubRepoRef, name: string, fromSha: string): Promise<void>;
|
|
37
|
+
commitFiles(installationId: number, ref: GitHubRepoRef, input: CommitFilesInput): Promise<CommitFilesResult>;
|
|
38
|
+
openPullRequest(installationId: number, ref: GitHubRepoRef, input: OpenPullRequestInput): Promise<GitHubPullRequest>;
|
|
39
|
+
createIssue(installationId: number, ref: GitHubRepoRef, input: {
|
|
40
|
+
title: string;
|
|
41
|
+
body: string;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
number: number;
|
|
44
|
+
url: string;
|
|
45
|
+
}>;
|
|
46
|
+
updatePullRequest(installationId: number, ref: GitHubRepoRef, number: number, patch: {
|
|
47
|
+
title?: string;
|
|
48
|
+
body?: string;
|
|
49
|
+
state?: 'open' | 'closed';
|
|
50
|
+
base?: string;
|
|
51
|
+
}): Promise<GitHubPullRequest>;
|
|
52
|
+
getPullRequestMergeability(installationId: number, ref: GitHubRepoRef, number: number): Promise<{
|
|
53
|
+
mergeable: boolean | null;
|
|
54
|
+
mergeableState: string;
|
|
55
|
+
headSha: string | null;
|
|
56
|
+
}>;
|
|
57
|
+
mergePullRequest(installationId: number, ref: GitHubRepoRef, number: number, input?: MergePullRequestInput): Promise<void>;
|
|
58
|
+
deleteBranch(installationId: number, ref: GitHubRepoRef, branch: string): Promise<void>;
|
|
59
|
+
comment(installationId: number, ref: GitHubRepoRef, issueOrPrNumber: number, body: string): Promise<void>;
|
|
60
|
+
/** Lazily resolve a repo's numeric id (needed where the payload omits it). */
|
|
61
|
+
private repoId;
|
|
62
|
+
/** Follow `Link` pagination, mapping each page, until exhausted/capped/`stop`. */
|
|
63
|
+
private paginate;
|
|
64
|
+
private request;
|
|
65
|
+
private recordRateLimit;
|
|
66
|
+
}
|
|
67
|
+
/** Carries the HTTP status so callers/queue can decide whether to retry. */
|
|
68
|
+
export declare class GitHubApiError extends Error {
|
|
69
|
+
readonly status: number;
|
|
70
|
+
constructor(status: number, message: string);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=FetchGitHubClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FetchGitHubClient.d.ts","sourceRoot":"","sources":["../../src/github/FetchGitHubClient.ts"],"names":[],"mappings":"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"}
|