@frogbotai/piece-linear 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +111 -0
  2. package/dist/actions/createComment.d.ts +48 -0
  3. package/dist/actions/createComment.d.ts.map +1 -0
  4. package/dist/actions/createComment.js +22 -0
  5. package/dist/actions/createComment.js.map +1 -0
  6. package/dist/actions/createIssue.d.ts +79 -0
  7. package/dist/actions/createIssue.d.ts.map +1 -0
  8. package/dist/actions/createIssue.js +37 -0
  9. package/dist/actions/createIssue.js.map +1 -0
  10. package/dist/actions/createProject.d.ts +49 -0
  11. package/dist/actions/createProject.d.ts.map +1 -0
  12. package/dist/actions/createProject.js +32 -0
  13. package/dist/actions/createProject.js.map +1 -0
  14. package/dist/actions/options.d.ts +35 -0
  15. package/dist/actions/options.d.ts.map +1 -0
  16. package/dist/actions/options.js +27 -0
  17. package/dist/actions/options.js.map +1 -0
  18. package/dist/actions/rawGraphqlQuery.d.ts +20 -0
  19. package/dist/actions/rawGraphqlQuery.d.ts.map +1 -0
  20. package/dist/actions/rawGraphqlQuery.js +16 -0
  21. package/dist/actions/rawGraphqlQuery.js.map +1 -0
  22. package/dist/actions/updateIssue.d.ts +88 -0
  23. package/dist/actions/updateIssue.d.ts.map +1 -0
  24. package/dist/actions/updateIssue.js +39 -0
  25. package/dist/actions/updateIssue.js.map +1 -0
  26. package/dist/actions/updateProject.d.ts +57 -0
  27. package/dist/actions/updateProject.d.ts.map +1 -0
  28. package/dist/actions/updateProject.js +33 -0
  29. package/dist/actions/updateProject.js.map +1 -0
  30. package/dist/client.d.ts +6 -0
  31. package/dist/client.d.ts.map +1 -0
  32. package/dist/client.js +9 -0
  33. package/dist/client.js.map +1 -0
  34. package/dist/config.d.ts +20 -0
  35. package/dist/config.d.ts.map +1 -0
  36. package/dist/config.js +25 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/index.d.ts +456 -15
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +107 -30
  41. package/dist/index.js.map +1 -1
  42. package/dist/triggers/commentCreated.d.ts +12 -0
  43. package/dist/triggers/commentCreated.d.ts.map +1 -0
  44. package/dist/triggers/commentCreated.js +17 -0
  45. package/dist/triggers/commentCreated.js.map +1 -0
  46. package/dist/triggers/issueCreated.d.ts +11 -0
  47. package/dist/triggers/issueCreated.d.ts.map +1 -0
  48. package/dist/triggers/issueCreated.js +10 -0
  49. package/dist/triggers/issueCreated.js.map +1 -0
  50. package/dist/triggers/issueRemoved.d.ts +11 -0
  51. package/dist/triggers/issueRemoved.d.ts.map +1 -0
  52. package/dist/triggers/issueRemoved.js +10 -0
  53. package/dist/triggers/issueRemoved.js.map +1 -0
  54. package/dist/triggers/issueUpdated.d.ts +11 -0
  55. package/dist/triggers/issueUpdated.d.ts.map +1 -0
  56. package/dist/triggers/issueUpdated.js +10 -0
  57. package/dist/triggers/issueUpdated.js.map +1 -0
  58. package/dist/triggers/projectCreated.d.ts +9 -0
  59. package/dist/triggers/projectCreated.d.ts.map +1 -0
  60. package/dist/triggers/projectCreated.js +9 -0
  61. package/dist/triggers/projectCreated.js.map +1 -0
  62. package/dist/triggers/projectRemoved.d.ts +9 -0
  63. package/dist/triggers/projectRemoved.d.ts.map +1 -0
  64. package/dist/triggers/projectRemoved.js +9 -0
  65. package/dist/triggers/projectRemoved.js.map +1 -0
  66. package/dist/triggers/projectUpdated.d.ts +12 -0
  67. package/dist/triggers/projectUpdated.d.ts.map +1 -0
  68. package/dist/triggers/projectUpdated.js +15 -0
  69. package/dist/triggers/projectUpdated.js.map +1 -0
  70. package/dist/triggers/webhook.d.ts +34 -0
  71. package/dist/triggers/webhook.d.ts.map +1 -0
  72. package/dist/triggers/webhook.js +52 -0
  73. package/dist/triggers/webhook.js.map +1 -0
  74. package/dist/webhook.d.ts +4 -0
  75. package/dist/webhook.d.ts.map +1 -0
  76. package/dist/webhook.js +33 -0
  77. package/dist/webhook.js.map +1 -0
  78. 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,4 @@
1
+ import type { PieceWebhook } from 'frogbot/pieces';
2
+ import type { LinearOptions } from './config.js';
3
+ export declare const linearWebhook: PieceWebhook<LinearOptions>;
4
+ //# sourceMappingURL=webhook.d.ts.map
@@ -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"}
@@ -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.21.0",
3
+ "version": "0.23.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
- "@activepieces/piece-linear": "0.4.4"
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.21.0"
32
+ "frogbot": "0.23.0"
31
33
  },
32
34
  "devDependencies": {
33
35
  "typescript": "5.6.2",
34
- "frogbot": "0.21.0"
36
+ "frogbot": "0.23.0"
35
37
  },
36
38
  "publishConfig": {
37
39
  "access": "public"