@agent-relay/cloud 0.1.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/dist/api/admin.d.ts +8 -0
- package/dist/api/admin.d.ts.map +1 -0
- package/dist/api/admin.js +225 -0
- package/dist/api/admin.js.map +1 -0
- package/dist/api/auth.d.ts +20 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +136 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/billing.d.ts +7 -0
- package/dist/api/billing.d.ts.map +1 -0
- package/dist/api/billing.js +564 -0
- package/dist/api/billing.js.map +1 -0
- package/dist/api/cli-pty-runner.d.ts +53 -0
- package/dist/api/cli-pty-runner.d.ts.map +1 -0
- package/dist/api/cli-pty-runner.js +193 -0
- package/dist/api/cli-pty-runner.js.map +1 -0
- package/dist/api/codex-auth-helper.d.ts +21 -0
- package/dist/api/codex-auth-helper.d.ts.map +1 -0
- package/dist/api/codex-auth-helper.js +327 -0
- package/dist/api/codex-auth-helper.js.map +1 -0
- package/dist/api/consensus.d.ts +13 -0
- package/dist/api/consensus.d.ts.map +1 -0
- package/dist/api/consensus.js +261 -0
- package/dist/api/consensus.js.map +1 -0
- package/dist/api/coordinators.d.ts +8 -0
- package/dist/api/coordinators.d.ts.map +1 -0
- package/dist/api/coordinators.js +750 -0
- package/dist/api/coordinators.js.map +1 -0
- package/dist/api/daemons.d.ts +12 -0
- package/dist/api/daemons.d.ts.map +1 -0
- package/dist/api/daemons.js +535 -0
- package/dist/api/daemons.js.map +1 -0
- package/dist/api/generic-webhooks.d.ts +8 -0
- package/dist/api/generic-webhooks.d.ts.map +1 -0
- package/dist/api/generic-webhooks.js +129 -0
- package/dist/api/generic-webhooks.js.map +1 -0
- package/dist/api/git.d.ts +8 -0
- package/dist/api/git.d.ts.map +1 -0
- package/dist/api/git.js +269 -0
- package/dist/api/git.js.map +1 -0
- package/dist/api/github-app.d.ts +11 -0
- package/dist/api/github-app.d.ts.map +1 -0
- package/dist/api/github-app.js +223 -0
- package/dist/api/github-app.js.map +1 -0
- package/dist/api/middleware/planLimits.d.ts +43 -0
- package/dist/api/middleware/planLimits.d.ts.map +1 -0
- package/dist/api/middleware/planLimits.js +202 -0
- package/dist/api/middleware/planLimits.js.map +1 -0
- package/dist/api/monitoring.d.ts +11 -0
- package/dist/api/monitoring.d.ts.map +1 -0
- package/dist/api/monitoring.js +578 -0
- package/dist/api/monitoring.js.map +1 -0
- package/dist/api/nango-auth.d.ts +9 -0
- package/dist/api/nango-auth.d.ts.map +1 -0
- package/dist/api/nango-auth.js +674 -0
- package/dist/api/nango-auth.js.map +1 -0
- package/dist/api/onboarding.d.ts +15 -0
- package/dist/api/onboarding.d.ts.map +1 -0
- package/dist/api/onboarding.js +679 -0
- package/dist/api/onboarding.js.map +1 -0
- package/dist/api/policy.d.ts +8 -0
- package/dist/api/policy.d.ts.map +1 -0
- package/dist/api/policy.js +229 -0
- package/dist/api/policy.js.map +1 -0
- package/dist/api/provider-env.d.ts +14 -0
- package/dist/api/provider-env.d.ts.map +1 -0
- package/dist/api/provider-env.js +75 -0
- package/dist/api/provider-env.js.map +1 -0
- package/dist/api/providers.d.ts +7 -0
- package/dist/api/providers.d.ts.map +1 -0
- package/dist/api/providers.js +564 -0
- package/dist/api/providers.js.map +1 -0
- package/dist/api/repos.d.ts +8 -0
- package/dist/api/repos.d.ts.map +1 -0
- package/dist/api/repos.js +577 -0
- package/dist/api/repos.js.map +1 -0
- package/dist/api/sessions.d.ts +11 -0
- package/dist/api/sessions.d.ts.map +1 -0
- package/dist/api/sessions.js +302 -0
- package/dist/api/sessions.js.map +1 -0
- package/dist/api/teams.d.ts +7 -0
- package/dist/api/teams.d.ts.map +1 -0
- package/dist/api/teams.js +281 -0
- package/dist/api/teams.js.map +1 -0
- package/dist/api/test-helpers.d.ts +10 -0
- package/dist/api/test-helpers.d.ts.map +1 -0
- package/dist/api/test-helpers.js +745 -0
- package/dist/api/test-helpers.js.map +1 -0
- package/dist/api/usage.d.ts +7 -0
- package/dist/api/usage.d.ts.map +1 -0
- package/dist/api/usage.js +111 -0
- package/dist/api/usage.js.map +1 -0
- package/dist/api/webhooks.d.ts +8 -0
- package/dist/api/webhooks.d.ts.map +1 -0
- package/dist/api/webhooks.js +645 -0
- package/dist/api/webhooks.js.map +1 -0
- package/dist/api/workspaces.d.ts +25 -0
- package/dist/api/workspaces.d.ts.map +1 -0
- package/dist/api/workspaces.js +1799 -0
- package/dist/api/workspaces.js.map +1 -0
- package/dist/billing/index.d.ts +9 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +9 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/billing/plans.d.ts +39 -0
- package/dist/billing/plans.d.ts.map +1 -0
- package/dist/billing/plans.js +245 -0
- package/dist/billing/plans.js.map +1 -0
- package/dist/billing/service.d.ts +80 -0
- package/dist/billing/service.d.ts.map +1 -0
- package/dist/billing/service.js +388 -0
- package/dist/billing/service.js.map +1 -0
- package/dist/billing/types.d.ts +141 -0
- package/dist/billing/types.d.ts.map +1 -0
- package/dist/billing/types.js +7 -0
- package/dist/billing/types.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -0
- package/dist/db/bulk-ingest.d.ts +89 -0
- package/dist/db/bulk-ingest.d.ts.map +1 -0
- package/dist/db/bulk-ingest.js +268 -0
- package/dist/db/bulk-ingest.js.map +1 -0
- package/dist/db/drizzle.d.ts +256 -0
- package/dist/db/drizzle.d.ts.map +1 -0
- package/dist/db/drizzle.js +1286 -0
- package/dist/db/drizzle.js.map +1 -0
- package/dist/db/index.d.ts +55 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +68 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +4873 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +620 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/provisioner/index.d.ts +207 -0
- package/dist/provisioner/index.d.ts.map +1 -0
- package/dist/provisioner/index.js +2114 -0
- package/dist/provisioner/index.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1924 -0
- package/dist/server.js.map +1 -0
- package/dist/services/auto-scaler.d.ts +152 -0
- package/dist/services/auto-scaler.d.ts.map +1 -0
- package/dist/services/auto-scaler.js +439 -0
- package/dist/services/auto-scaler.js.map +1 -0
- package/dist/services/capacity-manager.d.ts +148 -0
- package/dist/services/capacity-manager.d.ts.map +1 -0
- package/dist/services/capacity-manager.js +449 -0
- package/dist/services/capacity-manager.js.map +1 -0
- package/dist/services/ci-agent-spawner.d.ts +49 -0
- package/dist/services/ci-agent-spawner.d.ts.map +1 -0
- package/dist/services/ci-agent-spawner.js +373 -0
- package/dist/services/ci-agent-spawner.js.map +1 -0
- package/dist/services/cloud-message-bus.d.ts +28 -0
- package/dist/services/cloud-message-bus.d.ts.map +1 -0
- package/dist/services/cloud-message-bus.js +19 -0
- package/dist/services/cloud-message-bus.js.map +1 -0
- package/dist/services/compute-enforcement.d.ts +57 -0
- package/dist/services/compute-enforcement.d.ts.map +1 -0
- package/dist/services/compute-enforcement.js +175 -0
- package/dist/services/compute-enforcement.js.map +1 -0
- package/dist/services/coordinator.d.ts +62 -0
- package/dist/services/coordinator.d.ts.map +1 -0
- package/dist/services/coordinator.js +389 -0
- package/dist/services/coordinator.js.map +1 -0
- package/dist/services/index.d.ts +17 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +25 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/intro-expiration.d.ts +60 -0
- package/dist/services/intro-expiration.d.ts.map +1 -0
- package/dist/services/intro-expiration.js +252 -0
- package/dist/services/intro-expiration.js.map +1 -0
- package/dist/services/mention-handler.d.ts +65 -0
- package/dist/services/mention-handler.d.ts.map +1 -0
- package/dist/services/mention-handler.js +405 -0
- package/dist/services/mention-handler.js.map +1 -0
- package/dist/services/nango.d.ts +201 -0
- package/dist/services/nango.d.ts.map +1 -0
- package/dist/services/nango.js +392 -0
- package/dist/services/nango.js.map +1 -0
- package/dist/services/persistence.d.ts +131 -0
- package/dist/services/persistence.d.ts.map +1 -0
- package/dist/services/persistence.js +200 -0
- package/dist/services/persistence.js.map +1 -0
- package/dist/services/planLimits.d.ts +147 -0
- package/dist/services/planLimits.d.ts.map +1 -0
- package/dist/services/planLimits.js +335 -0
- package/dist/services/planLimits.js.map +1 -0
- package/dist/services/presence-registry.d.ts +56 -0
- package/dist/services/presence-registry.d.ts.map +1 -0
- package/dist/services/presence-registry.js +91 -0
- package/dist/services/presence-registry.js.map +1 -0
- package/dist/services/scaling-orchestrator.d.ts +159 -0
- package/dist/services/scaling-orchestrator.d.ts.map +1 -0
- package/dist/services/scaling-orchestrator.js +502 -0
- package/dist/services/scaling-orchestrator.js.map +1 -0
- package/dist/services/scaling-policy.d.ts +121 -0
- package/dist/services/scaling-policy.d.ts.map +1 -0
- package/dist/services/scaling-policy.js +415 -0
- package/dist/services/scaling-policy.js.map +1 -0
- package/dist/services/ssh-security.d.ts +31 -0
- package/dist/services/ssh-security.d.ts.map +1 -0
- package/dist/services/ssh-security.js +63 -0
- package/dist/services/ssh-security.js.map +1 -0
- package/dist/services/workspace-keepalive.d.ts +76 -0
- package/dist/services/workspace-keepalive.d.ts.map +1 -0
- package/dist/services/workspace-keepalive.js +234 -0
- package/dist/services/workspace-keepalive.js.map +1 -0
- package/dist/shims/consensus.d.ts +23 -0
- package/dist/shims/consensus.d.ts.map +1 -0
- package/dist/shims/consensus.js +5 -0
- package/dist/shims/consensus.js.map +1 -0
- package/dist/webhooks/index.d.ts +24 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +29 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/parsers/github.d.ts +8 -0
- package/dist/webhooks/parsers/github.d.ts.map +1 -0
- package/dist/webhooks/parsers/github.js +234 -0
- package/dist/webhooks/parsers/github.js.map +1 -0
- package/dist/webhooks/parsers/index.d.ts +23 -0
- package/dist/webhooks/parsers/index.d.ts.map +1 -0
- package/dist/webhooks/parsers/index.js +30 -0
- package/dist/webhooks/parsers/index.js.map +1 -0
- package/dist/webhooks/parsers/linear.d.ts +9 -0
- package/dist/webhooks/parsers/linear.d.ts.map +1 -0
- package/dist/webhooks/parsers/linear.js +258 -0
- package/dist/webhooks/parsers/linear.js.map +1 -0
- package/dist/webhooks/parsers/slack.d.ts +9 -0
- package/dist/webhooks/parsers/slack.d.ts.map +1 -0
- package/dist/webhooks/parsers/slack.js +214 -0
- package/dist/webhooks/parsers/slack.js.map +1 -0
- package/dist/webhooks/responders/github.d.ts +8 -0
- package/dist/webhooks/responders/github.d.ts.map +1 -0
- package/dist/webhooks/responders/github.js +73 -0
- package/dist/webhooks/responders/github.js.map +1 -0
- package/dist/webhooks/responders/index.d.ts +23 -0
- package/dist/webhooks/responders/index.d.ts.map +1 -0
- package/dist/webhooks/responders/index.js +30 -0
- package/dist/webhooks/responders/index.js.map +1 -0
- package/dist/webhooks/responders/linear.d.ts +9 -0
- package/dist/webhooks/responders/linear.d.ts.map +1 -0
- package/dist/webhooks/responders/linear.js +149 -0
- package/dist/webhooks/responders/linear.js.map +1 -0
- package/dist/webhooks/responders/slack.d.ts +20 -0
- package/dist/webhooks/responders/slack.d.ts.map +1 -0
- package/dist/webhooks/responders/slack.js +178 -0
- package/dist/webhooks/responders/slack.js.map +1 -0
- package/dist/webhooks/router.d.ts +25 -0
- package/dist/webhooks/router.d.ts.map +1 -0
- package/dist/webhooks/router.js +504 -0
- package/dist/webhooks/router.js.map +1 -0
- package/dist/webhooks/rules-engine.d.ts +24 -0
- package/dist/webhooks/rules-engine.d.ts.map +1 -0
- package/dist/webhooks/rules-engine.js +287 -0
- package/dist/webhooks/rules-engine.js.map +1 -0
- package/dist/webhooks/types.d.ts +186 -0
- package/dist/webhooks/types.d.ts.map +1 -0
- package/dist/webhooks/types.js +8 -0
- package/dist/webhooks/types.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webhook Responders Index
|
|
3
|
+
*
|
|
4
|
+
* Registry of all available responders.
|
|
5
|
+
*/
|
|
6
|
+
import type { WebhookResponder } from '../types.js';
|
|
7
|
+
import { githubResponder } from './github.js';
|
|
8
|
+
import { linearResponder } from './linear.js';
|
|
9
|
+
import { slackResponder, formatSlackBlocks } from './slack.js';
|
|
10
|
+
/**
|
|
11
|
+
* Registry of all available responders
|
|
12
|
+
*/
|
|
13
|
+
export declare const responders: Record<string, WebhookResponder>;
|
|
14
|
+
/**
|
|
15
|
+
* Get a responder by ID
|
|
16
|
+
*/
|
|
17
|
+
export declare function getResponder(id: string): WebhookResponder | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Register a custom responder
|
|
20
|
+
*/
|
|
21
|
+
export declare function registerResponder(responder: WebhookResponder): void;
|
|
22
|
+
export { githubResponder, linearResponder, slackResponder, formatSlackBlocks };
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webhooks/responders/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAIvD,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAErE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAEnE;AAED,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webhook Responders Index
|
|
3
|
+
*
|
|
4
|
+
* Registry of all available responders.
|
|
5
|
+
*/
|
|
6
|
+
import { githubResponder } from './github.js';
|
|
7
|
+
import { linearResponder } from './linear.js';
|
|
8
|
+
import { slackResponder, formatSlackBlocks } from './slack.js';
|
|
9
|
+
/**
|
|
10
|
+
* Registry of all available responders
|
|
11
|
+
*/
|
|
12
|
+
export const responders = {
|
|
13
|
+
github: githubResponder,
|
|
14
|
+
linear: linearResponder,
|
|
15
|
+
slack: slackResponder,
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Get a responder by ID
|
|
19
|
+
*/
|
|
20
|
+
export function getResponder(id) {
|
|
21
|
+
return responders[id];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Register a custom responder
|
|
25
|
+
*/
|
|
26
|
+
export function registerResponder(responder) {
|
|
27
|
+
responders[responder.id] = responder;
|
|
28
|
+
}
|
|
29
|
+
export { githubResponder, linearResponder, slackResponder, formatSlackBlocks };
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webhooks/responders/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAqC;IAC1D,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,eAAe;IACvB,KAAK,EAAE,cAAc;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAA2B;IAC3D,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;AACvC,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Responder
|
|
3
|
+
*
|
|
4
|
+
* Sends responses back to Linear via their GraphQL API.
|
|
5
|
+
* https://developers.linear.app/docs/graphql/working-with-the-graphql-api
|
|
6
|
+
*/
|
|
7
|
+
import type { WebhookResponder } from '../types.js';
|
|
8
|
+
export declare const linearResponder: WebhookResponder;
|
|
9
|
+
//# sourceMappingURL=linear.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/webhooks/responders/linear.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAmB,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAsBtF,eAAO,MAAM,eAAe,EAAE,gBAuJ7B,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Responder
|
|
3
|
+
*
|
|
4
|
+
* Sends responses back to Linear via their GraphQL API.
|
|
5
|
+
* https://developers.linear.app/docs/graphql/working-with-the-graphql-api
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Execute a Linear GraphQL mutation
|
|
9
|
+
*/
|
|
10
|
+
async function linearGraphQL(apiKey, query, variables) {
|
|
11
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
12
|
+
method: 'POST',
|
|
13
|
+
headers: {
|
|
14
|
+
'Content-Type': 'application/json',
|
|
15
|
+
'Authorization': apiKey,
|
|
16
|
+
},
|
|
17
|
+
body: JSON.stringify({ query, variables }),
|
|
18
|
+
});
|
|
19
|
+
return response.json();
|
|
20
|
+
}
|
|
21
|
+
export const linearResponder = {
|
|
22
|
+
id: 'linear',
|
|
23
|
+
async respond(event, response, config) {
|
|
24
|
+
const apiKey = config?.apiKey || process.env.LINEAR_API_KEY;
|
|
25
|
+
if (!apiKey) {
|
|
26
|
+
return {
|
|
27
|
+
success: false,
|
|
28
|
+
error: 'Linear API key not configured',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
switch (response.type) {
|
|
33
|
+
case 'comment': {
|
|
34
|
+
// Create a comment on an issue
|
|
35
|
+
const issueId = String(response.target);
|
|
36
|
+
const mutation = `
|
|
37
|
+
mutation CreateComment($issueId: String!, $body: String!) {
|
|
38
|
+
commentCreate(input: { issueId: $issueId, body: $body }) {
|
|
39
|
+
success
|
|
40
|
+
comment {
|
|
41
|
+
id
|
|
42
|
+
url
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
`;
|
|
47
|
+
const result = await linearGraphQL(apiKey, mutation, {
|
|
48
|
+
issueId,
|
|
49
|
+
body: response.body,
|
|
50
|
+
});
|
|
51
|
+
if (result.errors?.length) {
|
|
52
|
+
return {
|
|
53
|
+
success: false,
|
|
54
|
+
error: result.errors.map(e => e.message).join(', '),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const commentCreate = result.data?.commentCreate;
|
|
58
|
+
const comment = commentCreate?.comment;
|
|
59
|
+
return {
|
|
60
|
+
success: !!commentCreate?.success,
|
|
61
|
+
id: comment?.id,
|
|
62
|
+
url: comment?.url,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
case 'reaction': {
|
|
66
|
+
// Add a reaction/emoji to a comment
|
|
67
|
+
const commentId = String(response.target);
|
|
68
|
+
const emoji = response.metadata?.emoji || '👍';
|
|
69
|
+
const mutation = `
|
|
70
|
+
mutation CreateReaction($commentId: String!, $emoji: String!) {
|
|
71
|
+
reactionCreate(input: { commentId: $commentId, emoji: $emoji }) {
|
|
72
|
+
success
|
|
73
|
+
reaction {
|
|
74
|
+
id
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
`;
|
|
79
|
+
const result = await linearGraphQL(apiKey, mutation, {
|
|
80
|
+
commentId,
|
|
81
|
+
emoji,
|
|
82
|
+
});
|
|
83
|
+
if (result.errors?.length) {
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
error: result.errors.map(e => e.message).join(', '),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const reactionCreate = result.data?.reactionCreate;
|
|
90
|
+
return {
|
|
91
|
+
success: !!reactionCreate?.success,
|
|
92
|
+
id: reactionCreate?.reaction?.id,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
case 'status': {
|
|
96
|
+
// Update issue state
|
|
97
|
+
const issueId = String(response.target);
|
|
98
|
+
const stateId = response.metadata?.stateId;
|
|
99
|
+
if (!stateId) {
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
error: 'State ID required for status update',
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
const mutation = `
|
|
106
|
+
mutation UpdateIssue($issueId: String!, $stateId: String!) {
|
|
107
|
+
issueUpdate(id: $issueId, input: { stateId: $stateId }) {
|
|
108
|
+
success
|
|
109
|
+
issue {
|
|
110
|
+
id
|
|
111
|
+
url
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
`;
|
|
116
|
+
const result = await linearGraphQL(apiKey, mutation, {
|
|
117
|
+
issueId,
|
|
118
|
+
stateId,
|
|
119
|
+
});
|
|
120
|
+
if (result.errors?.length) {
|
|
121
|
+
return {
|
|
122
|
+
success: false,
|
|
123
|
+
error: result.errors.map(e => e.message).join(', '),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const issueUpdate = result.data?.issueUpdate;
|
|
127
|
+
const issue = issueUpdate?.issue;
|
|
128
|
+
return {
|
|
129
|
+
success: !!issueUpdate?.success,
|
|
130
|
+
id: issue?.id,
|
|
131
|
+
url: issue?.url,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
default:
|
|
135
|
+
return {
|
|
136
|
+
success: false,
|
|
137
|
+
error: `Unknown response type: ${response.type}`,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
return {
|
|
143
|
+
success: false,
|
|
144
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=linear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/webhooks/responders/linear.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack Responder
|
|
3
|
+
*
|
|
4
|
+
* Sends responses back to Slack via their Web API.
|
|
5
|
+
* https://api.slack.com/methods
|
|
6
|
+
*/
|
|
7
|
+
import type { WebhookResponder } from '../types.js';
|
|
8
|
+
export declare const slackResponder: WebhookResponder;
|
|
9
|
+
/**
|
|
10
|
+
* Helper to format a message with blocks for richer formatting
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatSlackBlocks(text: string, options?: {
|
|
13
|
+
header?: string;
|
|
14
|
+
context?: string;
|
|
15
|
+
actions?: Array<{
|
|
16
|
+
text: string;
|
|
17
|
+
url: string;
|
|
18
|
+
}>;
|
|
19
|
+
}): Array<Record<string, unknown>>;
|
|
20
|
+
//# sourceMappingURL=slack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/webhooks/responders/slack.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAmB,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAsBtF,eAAO,MAAM,cAAc,EAAE,gBAgI5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD,GACA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkDhC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack Responder
|
|
3
|
+
*
|
|
4
|
+
* Sends responses back to Slack via their Web API.
|
|
5
|
+
* https://api.slack.com/methods
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Call a Slack Web API method
|
|
9
|
+
*/
|
|
10
|
+
async function slackAPI(token, method, body) {
|
|
11
|
+
const response = await fetch(`https://slack.com/api/${method}`, {
|
|
12
|
+
method: 'POST',
|
|
13
|
+
headers: {
|
|
14
|
+
'Content-Type': 'application/json; charset=utf-8',
|
|
15
|
+
'Authorization': `Bearer ${token}`,
|
|
16
|
+
},
|
|
17
|
+
body: JSON.stringify(body),
|
|
18
|
+
});
|
|
19
|
+
return response.json();
|
|
20
|
+
}
|
|
21
|
+
export const slackResponder = {
|
|
22
|
+
id: 'slack',
|
|
23
|
+
async respond(event, response, config) {
|
|
24
|
+
const botToken = config?.botToken || process.env.SLACK_BOT_TOKEN;
|
|
25
|
+
if (!botToken) {
|
|
26
|
+
return {
|
|
27
|
+
success: false,
|
|
28
|
+
error: 'Slack bot token not configured',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
// Get channel from event metadata or response target
|
|
33
|
+
const channelId = response.metadata?.channel
|
|
34
|
+
|| event.metadata?.channelId
|
|
35
|
+
|| String(response.target);
|
|
36
|
+
if (!channelId) {
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
error: 'Channel ID required',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
switch (response.type) {
|
|
43
|
+
case 'message': {
|
|
44
|
+
// Post a message to a channel
|
|
45
|
+
const threadTs = response.metadata?.threadTs
|
|
46
|
+
|| event.metadata?.threadTs
|
|
47
|
+
|| event.metadata?.ts;
|
|
48
|
+
const result = await slackAPI(botToken, 'chat.postMessage', {
|
|
49
|
+
channel: channelId,
|
|
50
|
+
text: response.body,
|
|
51
|
+
thread_ts: threadTs, // Reply in thread if available
|
|
52
|
+
unfurl_links: false,
|
|
53
|
+
unfurl_media: false,
|
|
54
|
+
});
|
|
55
|
+
if (!result.ok) {
|
|
56
|
+
return {
|
|
57
|
+
success: false,
|
|
58
|
+
error: result.error || 'Failed to post message',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
success: true,
|
|
63
|
+
id: result.ts,
|
|
64
|
+
// Construct Slack message URL
|
|
65
|
+
url: `https://slack.com/archives/${channelId}/p${result.ts?.replace('.', '')}`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
case 'comment': {
|
|
69
|
+
// Same as message, but explicitly in a thread
|
|
70
|
+
const threadTs = String(response.target);
|
|
71
|
+
const result = await slackAPI(botToken, 'chat.postMessage', {
|
|
72
|
+
channel: channelId,
|
|
73
|
+
text: response.body,
|
|
74
|
+
thread_ts: threadTs,
|
|
75
|
+
reply_broadcast: response.metadata?.broadcast === true,
|
|
76
|
+
});
|
|
77
|
+
if (!result.ok) {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
error: result.error || 'Failed to post reply',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
success: true,
|
|
85
|
+
id: result.ts,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
case 'reaction': {
|
|
89
|
+
// Add a reaction to a message
|
|
90
|
+
const ts = String(response.target);
|
|
91
|
+
const emoji = response.metadata?.emoji || response.body.replace(/:/g, '');
|
|
92
|
+
const result = await slackAPI(botToken, 'reactions.add', {
|
|
93
|
+
channel: channelId,
|
|
94
|
+
timestamp: ts,
|
|
95
|
+
name: emoji,
|
|
96
|
+
});
|
|
97
|
+
if (!result.ok && result.error !== 'already_reacted') {
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
error: result.error || 'Failed to add reaction',
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
success: true,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
case 'status': {
|
|
108
|
+
// Update bot status/presence (not commonly used)
|
|
109
|
+
return {
|
|
110
|
+
success: false,
|
|
111
|
+
error: 'Status updates not implemented for Slack',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
default:
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
error: `Unknown response type: ${response.type}`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
return {
|
|
123
|
+
success: false,
|
|
124
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Helper to format a message with blocks for richer formatting
|
|
131
|
+
*/
|
|
132
|
+
export function formatSlackBlocks(text, options) {
|
|
133
|
+
const blocks = [];
|
|
134
|
+
if (options?.header) {
|
|
135
|
+
blocks.push({
|
|
136
|
+
type: 'header',
|
|
137
|
+
text: {
|
|
138
|
+
type: 'plain_text',
|
|
139
|
+
text: options.header,
|
|
140
|
+
emoji: true,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
blocks.push({
|
|
145
|
+
type: 'section',
|
|
146
|
+
text: {
|
|
147
|
+
type: 'mrkdwn',
|
|
148
|
+
text,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
if (options?.context) {
|
|
152
|
+
blocks.push({
|
|
153
|
+
type: 'context',
|
|
154
|
+
elements: [
|
|
155
|
+
{
|
|
156
|
+
type: 'mrkdwn',
|
|
157
|
+
text: options.context,
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (options?.actions?.length) {
|
|
163
|
+
blocks.push({
|
|
164
|
+
type: 'actions',
|
|
165
|
+
elements: options.actions.map(action => ({
|
|
166
|
+
type: 'button',
|
|
167
|
+
text: {
|
|
168
|
+
type: 'plain_text',
|
|
169
|
+
text: action.text,
|
|
170
|
+
emoji: true,
|
|
171
|
+
},
|
|
172
|
+
url: action.url,
|
|
173
|
+
})),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
return blocks;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=slack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/webhooks/responders/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Webhook Router
|
|
3
|
+
*
|
|
4
|
+
* Routes incoming webhooks from any source through the configurable pipeline:
|
|
5
|
+
* 1. Verify signature
|
|
6
|
+
* 2. Parse payload into normalized events
|
|
7
|
+
* 3. Match events against rules
|
|
8
|
+
* 4. Execute actions
|
|
9
|
+
* 5. Send responses
|
|
10
|
+
*/
|
|
11
|
+
import type { WebhookConfig, WebhookSourceConfig, WebhookResult } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Default webhook source configurations
|
|
14
|
+
*/
|
|
15
|
+
export declare const defaultSources: Record<string, WebhookSourceConfig>;
|
|
16
|
+
/**
|
|
17
|
+
* Get webhook configuration
|
|
18
|
+
* In the future, this could load from database per-workspace
|
|
19
|
+
*/
|
|
20
|
+
export declare function getWebhookConfig(): WebhookConfig;
|
|
21
|
+
/**
|
|
22
|
+
* Process a webhook from any source
|
|
23
|
+
*/
|
|
24
|
+
export declare function processWebhook(source: string, payload: string, headers: Record<string, string | string[] | undefined>, config?: WebhookConfig): Promise<WebhookResult>;
|
|
25
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/webhooks/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EAGnB,aAAa,EACd,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAsC9D,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AA0VD;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACtD,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,CAgKxB"}
|