@frogbotai/piece-linear 0.22.0 → 0.24.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/README.md +111 -0
- package/dist/actions/createComment.d.ts +48 -0
- package/dist/actions/createComment.d.ts.map +1 -0
- package/dist/actions/createComment.js +22 -0
- package/dist/actions/createComment.js.map +1 -0
- package/dist/actions/createIssue.d.ts +79 -0
- package/dist/actions/createIssue.d.ts.map +1 -0
- package/dist/actions/createIssue.js +37 -0
- package/dist/actions/createIssue.js.map +1 -0
- package/dist/actions/createProject.d.ts +49 -0
- package/dist/actions/createProject.d.ts.map +1 -0
- package/dist/actions/createProject.js +32 -0
- package/dist/actions/createProject.js.map +1 -0
- package/dist/actions/options.d.ts +35 -0
- package/dist/actions/options.d.ts.map +1 -0
- package/dist/actions/options.js +27 -0
- package/dist/actions/options.js.map +1 -0
- package/dist/actions/rawGraphqlQuery.d.ts +20 -0
- package/dist/actions/rawGraphqlQuery.d.ts.map +1 -0
- package/dist/actions/rawGraphqlQuery.js +16 -0
- package/dist/actions/rawGraphqlQuery.js.map +1 -0
- package/dist/actions/updateIssue.d.ts +88 -0
- package/dist/actions/updateIssue.d.ts.map +1 -0
- package/dist/actions/updateIssue.js +39 -0
- package/dist/actions/updateIssue.js.map +1 -0
- package/dist/actions/updateProject.d.ts +57 -0
- package/dist/actions/updateProject.d.ts.map +1 -0
- package/dist/actions/updateProject.js +33 -0
- package/dist/actions/updateProject.js.map +1 -0
- package/dist/client.d.ts +6 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +9 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +25 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +456 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +107 -30
- package/dist/index.js.map +1 -1
- package/dist/triggers/commentCreated.d.ts +12 -0
- package/dist/triggers/commentCreated.d.ts.map +1 -0
- package/dist/triggers/commentCreated.js +17 -0
- package/dist/triggers/commentCreated.js.map +1 -0
- package/dist/triggers/issueCreated.d.ts +11 -0
- package/dist/triggers/issueCreated.d.ts.map +1 -0
- package/dist/triggers/issueCreated.js +10 -0
- package/dist/triggers/issueCreated.js.map +1 -0
- package/dist/triggers/issueRemoved.d.ts +11 -0
- package/dist/triggers/issueRemoved.d.ts.map +1 -0
- package/dist/triggers/issueRemoved.js +10 -0
- package/dist/triggers/issueRemoved.js.map +1 -0
- package/dist/triggers/issueUpdated.d.ts +11 -0
- package/dist/triggers/issueUpdated.d.ts.map +1 -0
- package/dist/triggers/issueUpdated.js +10 -0
- package/dist/triggers/issueUpdated.js.map +1 -0
- package/dist/triggers/projectCreated.d.ts +9 -0
- package/dist/triggers/projectCreated.d.ts.map +1 -0
- package/dist/triggers/projectCreated.js +9 -0
- package/dist/triggers/projectCreated.js.map +1 -0
- package/dist/triggers/projectRemoved.d.ts +9 -0
- package/dist/triggers/projectRemoved.d.ts.map +1 -0
- package/dist/triggers/projectRemoved.js +9 -0
- package/dist/triggers/projectRemoved.js.map +1 -0
- package/dist/triggers/projectUpdated.d.ts +12 -0
- package/dist/triggers/projectUpdated.d.ts.map +1 -0
- package/dist/triggers/projectUpdated.js +15 -0
- package/dist/triggers/projectUpdated.js.map +1 -0
- package/dist/triggers/webhook.d.ts +34 -0
- package/dist/triggers/webhook.d.ts.map +1 -0
- package/dist/triggers/webhook.js +52 -0
- package/dist/triggers/webhook.js.map +1 -0
- package/dist/webhook.d.ts +4 -0
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +33 -0
- package/dist/webhook.js.map +1 -0
- package/package.json +6 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commentCreated.js","sourceRoot":"","sources":["../../src/triggers/commentCreated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;IAC3C,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,SAAS;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACvC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC1C,CAAC;IACF,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAC3B,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM;QACrB,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,SAAS;YAC3C,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM;YACvB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;CAC7F,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const issueCreated: import("frogbot/pieces").PieceWebhookTrigger<z.ZodObject<{
|
|
3
|
+
teamId: z.ZodString;
|
|
4
|
+
}, z.core.$strip>, undefined, {
|
|
5
|
+
channelMode: "agent-sessions" | "comments";
|
|
6
|
+
webhookSecret?: string | undefined;
|
|
7
|
+
botUsername?: string | undefined;
|
|
8
|
+
}, import("@linear/sdk").LinearClient, {
|
|
9
|
+
webhookId: string;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=issueCreated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueCreated.d.ts","sourceRoot":"","sources":["../../src/triggers/issueCreated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;;EAKvB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { teamId } from '../config.js';
|
|
3
|
+
import { webhookTrigger } from './webhook.js';
|
|
4
|
+
export const issueCreated = webhookTrigger({
|
|
5
|
+
slug: 'issueCreated',
|
|
6
|
+
action: 'create',
|
|
7
|
+
resourceType: 'Issue',
|
|
8
|
+
input: z.object({ teamId }),
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=issueCreated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueCreated.js","sourceRoot":"","sources":["../../src/triggers/issueCreated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;IACzC,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const issueRemoved: import("frogbot/pieces").PieceWebhookTrigger<z.ZodObject<{
|
|
3
|
+
teamId: z.ZodString;
|
|
4
|
+
}, z.core.$strip>, undefined, {
|
|
5
|
+
channelMode: "agent-sessions" | "comments";
|
|
6
|
+
webhookSecret?: string | undefined;
|
|
7
|
+
botUsername?: string | undefined;
|
|
8
|
+
}, import("@linear/sdk").LinearClient, {
|
|
9
|
+
webhookId: string;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=issueRemoved.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueRemoved.d.ts","sourceRoot":"","sources":["../../src/triggers/issueRemoved.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;;EAKvB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { teamId } from '../config.js';
|
|
3
|
+
import { webhookTrigger } from './webhook.js';
|
|
4
|
+
export const issueRemoved = webhookTrigger({
|
|
5
|
+
slug: 'issueRemoved',
|
|
6
|
+
action: 'remove',
|
|
7
|
+
resourceType: 'Issue',
|
|
8
|
+
input: z.object({ teamId }),
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=issueRemoved.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueRemoved.js","sourceRoot":"","sources":["../../src/triggers/issueRemoved.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;IACzC,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const issueUpdated: import("frogbot/pieces").PieceWebhookTrigger<z.ZodObject<{
|
|
3
|
+
teamId: z.ZodOptional<z.ZodString>;
|
|
4
|
+
}, z.core.$strip>, undefined, {
|
|
5
|
+
channelMode: "agent-sessions" | "comments";
|
|
6
|
+
webhookSecret?: string | undefined;
|
|
7
|
+
botUsername?: string | undefined;
|
|
8
|
+
}, import("@linear/sdk").LinearClient, {
|
|
9
|
+
webhookId: string;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=issueUpdated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueUpdated.d.ts","sourceRoot":"","sources":["../../src/triggers/issueUpdated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;;EAKvB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { teamId } from '../config.js';
|
|
3
|
+
import { webhookTrigger } from './webhook.js';
|
|
4
|
+
export const issueUpdated = webhookTrigger({
|
|
5
|
+
slug: 'issueUpdated',
|
|
6
|
+
action: 'update',
|
|
7
|
+
resourceType: 'Issue',
|
|
8
|
+
input: z.object({ teamId: teamId.optional() }),
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=issueUpdated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueUpdated.js","sourceRoot":"","sources":["../../src/triggers/issueUpdated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;IACzC,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;CAC/C,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const projectCreated: import("frogbot/pieces").PieceWebhookTrigger<z.ZodObject<{}, z.core.$strip>, undefined, {
|
|
3
|
+
channelMode: "agent-sessions" | "comments";
|
|
4
|
+
webhookSecret?: string | undefined;
|
|
5
|
+
botUsername?: string | undefined;
|
|
6
|
+
}, import("@linear/sdk").LinearClient, {
|
|
7
|
+
webhookId: string;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=projectCreated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectCreated.d.ts","sourceRoot":"","sources":["../../src/triggers/projectCreated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;EAKzB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { webhookTrigger } from './webhook.js';
|
|
3
|
+
export const projectCreated = webhookTrigger({
|
|
4
|
+
slug: 'projectCreated',
|
|
5
|
+
action: 'create',
|
|
6
|
+
resourceType: 'Project',
|
|
7
|
+
input: z.object({}),
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=projectCreated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectCreated.js","sourceRoot":"","sources":["../../src/triggers/projectCreated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;IAC3C,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,SAAS;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;CACpB,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const projectRemoved: import("frogbot/pieces").PieceWebhookTrigger<z.ZodObject<{}, z.core.$strip>, undefined, {
|
|
3
|
+
channelMode: "agent-sessions" | "comments";
|
|
4
|
+
webhookSecret?: string | undefined;
|
|
5
|
+
botUsername?: string | undefined;
|
|
6
|
+
}, import("@linear/sdk").LinearClient, {
|
|
7
|
+
webhookId: string;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=projectRemoved.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectRemoved.d.ts","sourceRoot":"","sources":["../../src/triggers/projectRemoved.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;EAKzB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { webhookTrigger } from './webhook.js';
|
|
3
|
+
export const projectRemoved = webhookTrigger({
|
|
4
|
+
slug: 'projectRemoved',
|
|
5
|
+
action: 'remove',
|
|
6
|
+
resourceType: 'Project',
|
|
7
|
+
input: z.object({}),
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=projectRemoved.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectRemoved.js","sourceRoot":"","sources":["../../src/triggers/projectRemoved.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;IAC3C,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,SAAS;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;CACpB,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const projectUpdated: import("frogbot/pieces").PieceWebhookTrigger<z.ZodObject<{
|
|
3
|
+
teamIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
4
|
+
projectStatus: z.ZodOptional<z.ZodString>;
|
|
5
|
+
}, z.core.$strip>, undefined, {
|
|
6
|
+
channelMode: "agent-sessions" | "comments";
|
|
7
|
+
webhookSecret?: string | undefined;
|
|
8
|
+
botUsername?: string | undefined;
|
|
9
|
+
}, import("@linear/sdk").LinearClient, {
|
|
10
|
+
webhookId: string;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=projectUpdated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectUpdated.d.ts","sourceRoot":"","sources":["../../src/triggers/projectUpdated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;;;;EAYzB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { webhookTrigger } from './webhook.js';
|
|
3
|
+
export const projectUpdated = webhookTrigger({
|
|
4
|
+
slug: 'projectUpdated',
|
|
5
|
+
action: 'update',
|
|
6
|
+
resourceType: 'Project',
|
|
7
|
+
input: z.object({
|
|
8
|
+
teamIds: z.array(z.string()).optional(),
|
|
9
|
+
projectStatus: z.string().optional(),
|
|
10
|
+
}),
|
|
11
|
+
matches: (delivery, input) => Boolean(delivery.updatedFrom?.statusId) &&
|
|
12
|
+
(!input.teamIds?.length || input.teamIds.some((id) => delivery.data?.teamIds?.includes(id))) &&
|
|
13
|
+
(!input.projectStatus || input.projectStatus === delivery.data?.status?.name),
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=projectUpdated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectUpdated.js","sourceRoot":"","sources":["../../src/triggers/projectUpdated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;IAC3C,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,SAAS;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACrC,CAAC;IACF,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;QACvC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;CAChF,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type PieceWebhookTrigger } from 'frogbot/pieces';
|
|
2
|
+
import type { z } from 'zod';
|
|
3
|
+
import type { Linear } from '../client.js';
|
|
4
|
+
import type { LinearOptions } from '../config.js';
|
|
5
|
+
type Delivery = {
|
|
6
|
+
action?: string;
|
|
7
|
+
type?: string;
|
|
8
|
+
data?: {
|
|
9
|
+
issue?: {
|
|
10
|
+
team?: {
|
|
11
|
+
id?: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
userId?: string;
|
|
15
|
+
teamIds?: string[];
|
|
16
|
+
status?: {
|
|
17
|
+
name?: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
updatedFrom?: {
|
|
21
|
+
statusId?: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export declare function webhookTrigger<TInput extends z.ZodType>({ slug, action, resourceType, input, matches, }: {
|
|
25
|
+
slug: string;
|
|
26
|
+
action: string;
|
|
27
|
+
resourceType: 'Comment' | 'Issue' | 'Project';
|
|
28
|
+
input: TInput;
|
|
29
|
+
matches?: (delivery: Delivery, input: z.output<TInput>) => boolean;
|
|
30
|
+
}): PieceWebhookTrigger<TInput, undefined, LinearOptions, Linear, {
|
|
31
|
+
webhookId: string;
|
|
32
|
+
}>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/triggers/webhook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,KAAK,QAAQ,GAAG;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE;gBAAE,EAAE,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;QACnC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5B,CAAC;IACF,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,SAAS,CAAC,CAAC,OAAO,EAAE,EACvD,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,KAAK,EACL,OAAO,GACR,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;CACpE,GAAG,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAkDvF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
export function webhookTrigger({ slug, action, resourceType, input, matches, }) {
|
|
3
|
+
return {
|
|
4
|
+
slug,
|
|
5
|
+
description: `Trigger when a Linear ${resourceType.toLowerCase()} is ${action}d.`,
|
|
6
|
+
type: 'webhook',
|
|
7
|
+
input,
|
|
8
|
+
async onEnable({ client, input, webhookUrl, options }) {
|
|
9
|
+
if (!options.webhookSecret) {
|
|
10
|
+
throw new Error(`Linear ${slug} webhook requires createLinear({ webhookSecret }).`);
|
|
11
|
+
}
|
|
12
|
+
const team = typeof input === 'object' &&
|
|
13
|
+
input !== null &&
|
|
14
|
+
'teamId' in input &&
|
|
15
|
+
typeof input.teamId === 'string'
|
|
16
|
+
? input.teamId
|
|
17
|
+
: undefined;
|
|
18
|
+
const response = await client.createWebhook({
|
|
19
|
+
label: `FrogBot ${slug}`,
|
|
20
|
+
url: webhookUrl,
|
|
21
|
+
secret: options.webhookSecret,
|
|
22
|
+
resourceTypes: [resourceType],
|
|
23
|
+
...(team ? { teamId: team } : { allPublicTeams: true }),
|
|
24
|
+
});
|
|
25
|
+
const webhook = response.success ? await response.webhook : undefined;
|
|
26
|
+
if (!webhook) {
|
|
27
|
+
throw new Error(`Linear failed to create the ${slug} webhook.`);
|
|
28
|
+
}
|
|
29
|
+
return { webhookId: webhook.id };
|
|
30
|
+
},
|
|
31
|
+
async onDisable({ client, state }) {
|
|
32
|
+
const response = await client.deleteWebhook(state.webhookId);
|
|
33
|
+
if (!response.success) {
|
|
34
|
+
throw new Error(`Linear failed to delete the ${slug} webhook '${state.webhookId}'.`);
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
async run({ input, req }) {
|
|
38
|
+
const delivery = req.data;
|
|
39
|
+
return delivery?.type === resourceType &&
|
|
40
|
+
delivery.action === action &&
|
|
41
|
+
(!matches || matches(delivery, input))
|
|
42
|
+
? [
|
|
43
|
+
{
|
|
44
|
+
dedupeKey: createHash('sha256').update(JSON.stringify(delivery)).digest('hex'),
|
|
45
|
+
data: delivery,
|
|
46
|
+
},
|
|
47
|
+
]
|
|
48
|
+
: [];
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/triggers/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoBzC,MAAM,UAAU,cAAc,CAA2B,EACvD,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,KAAK,EACL,OAAO,GAOR;IACC,OAAO;QACL,IAAI;QACJ,WAAW,EAAE,yBAAyB,YAAY,CAAC,WAAW,EAAE,OAAO,MAAM,IAAI;QACjF,IAAI,EAAE,SAAS;QACf,KAAK;QACL,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;YACnD,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,oDAAoD,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,KAAK,IAAI;gBACd,QAAQ,IAAI,KAAK;gBACjB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAC9B,CAAC,CAAC,KAAK,CAAC,MAAM;gBACd,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;gBAC1C,KAAK,EAAE,WAAW,IAAI,EAAE;gBACxB,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,OAAO,CAAC,aAAa;gBAC7B,aAAa,EAAE,CAAC,YAAY,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;aACxD,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,WAAW,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;YAC/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,aAAa,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;YACtB,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAgB,CAAC;YACtC,OAAO,QAAQ,EAAE,IAAI,KAAK,YAAY;gBACpC,QAAQ,CAAC,MAAM,KAAK,MAAM;gBAC1B,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACtC,CAAC,CAAC;oBACE;wBACE,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;wBAC9E,IAAI,EAAE,QAAQ;qBACf;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,aAAa,CAgCrD,CAAC"}
|
package/dist/webhook.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { LinearWebhookClient } from '@linear/sdk/webhooks';
|
|
2
|
+
export const linearWebhook = {
|
|
3
|
+
async verify({ req, options }) {
|
|
4
|
+
const signature = req.headers.get('linear-signature');
|
|
5
|
+
if (!options.webhookSecret || !signature || !req.arrayBuffer)
|
|
6
|
+
return false;
|
|
7
|
+
try {
|
|
8
|
+
const body = Buffer.from(await req.arrayBuffer());
|
|
9
|
+
const delivery = JSON.parse(body.toString('utf8'));
|
|
10
|
+
const timestamp = typeof delivery === 'object' && delivery !== null && 'webhookTimestamp' in delivery
|
|
11
|
+
? delivery.webhookTimestamp
|
|
12
|
+
: undefined;
|
|
13
|
+
if (typeof timestamp !== 'number' || !Number.isSafeInteger(timestamp) || timestamp <= 0) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return new LinearWebhookClient(options.webhookSecret).verify(body, signature, timestamp);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
parse({ req }) {
|
|
23
|
+
const delivery = req.data;
|
|
24
|
+
const event = typeof delivery === 'object' &&
|
|
25
|
+
delivery !== null &&
|
|
26
|
+
'type' in delivery &&
|
|
27
|
+
typeof delivery.type === 'string'
|
|
28
|
+
? delivery.type
|
|
29
|
+
: 'unknown';
|
|
30
|
+
return { event };
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE;QAC3B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAE3E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5D,MAAM,SAAS,GACb,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,kBAAkB,IAAI,QAAQ;gBACjF,CAAC,CAAC,QAAQ,CAAC,gBAAgB;gBAC3B,CAAC,CAAC,SAAS,CAAC;YAChB,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACxF,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,KAAK,CAAC,EAAE,GAAG,EAAE;QACX,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC;QAC1B,MAAM,KAAK,GACT,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,KAAK,IAAI;YACjB,MAAM,IAAI,QAAQ;YAClB,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAC/B,CAAC,CAAC,QAAQ,CAAC,IAAI;YACf,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frogbotai/piece-linear",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.0",
|
|
4
4
|
"description": "Linear tools for FrogBot.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Colby Gilbert",
|
|
@@ -24,14 +24,16 @@
|
|
|
24
24
|
],
|
|
25
25
|
"sideEffects": false,
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@
|
|
27
|
+
"@chat-adapter/linear": "4.40.0",
|
|
28
|
+
"@linear/sdk": "^92.0.0",
|
|
29
|
+
"zod": "^4.3.6"
|
|
28
30
|
},
|
|
29
31
|
"peerDependencies": {
|
|
30
|
-
"frogbot": "0.
|
|
32
|
+
"frogbot": "0.24.0"
|
|
31
33
|
},
|
|
32
34
|
"devDependencies": {
|
|
33
35
|
"typescript": "5.6.2",
|
|
34
|
-
"frogbot": "0.
|
|
36
|
+
"frogbot": "0.24.0"
|
|
35
37
|
},
|
|
36
38
|
"publishConfig": {
|
|
37
39
|
"access": "public"
|