You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: restore staging linear handler and utils with teamId support
Restores the staging version of linear provider handler and trigger
utils that were accidentally regressed. Key restorations:
- teamId sub-block and allPublicTeams fallback in createSubscription
- Timestamp skew validation in verifyAuth
- actorType renaming in formatInput (avoids TriggerOutput collision)
- url field in formatInput and all output builders
- edited field in comment outputs
- externalId validation after webhook creation
- isLinearEventMatch returns false (not true) for unknown triggers
Adds extractIdempotencyId to the linear provider handler for webhook
deduplication support.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
'Enter your Linear API Key above. You can create one in Linear at <a href="https://linear.app/settings/api" target="_blank" rel="noopener noreferrer">Settings > API > Personal API keys</a>.',
87
+
'Optionally enter a <strong>Team ID</strong> to scope the webhook to a single team. Leave it empty to receive events from all public teams. You can find Team IDs in Linear under <a href="https://linear.app/settings" target="_blank" rel="noopener noreferrer">Settings > Teams</a> or via the API.',
87
88
`Click <strong>"Save Configuration"</strong> to automatically create the webhook in Linear for <strong>${eventType}</strong> events.`,
88
89
'The webhook will be automatically deleted when you remove this trigger.',
89
90
]
@@ -160,6 +161,15 @@ export function buildLinearV2SubBlocks(options: {
* @see https://linear.app/developers/webhooks — actor may be a User, OauthClient, or Integration; `type` is mapped to `actorType` (TriggerOutput reserves nested `type` for field kinds).
189
199
*/
190
200
exportconstuserOutputs={
191
201
id: {
@@ -196,9 +206,18 @@ export const userOutputs = {
196
206
type: 'string',
197
207
description: 'User display name',
198
208
},
199
-
user_type: {
209
+
/** Linear sends this as `actor.type`; exposed as `actorType` here (TriggerOutput reserves `type`). */
210
+
actorType: {
211
+
type: 'string',
212
+
description: 'Actor type from Linear (e.g. user, OauthClient, Integration)',
213
+
},
214
+
email: {
215
+
type: 'string',
216
+
description: 'Actor email (present for user actors in Linear webhook payloads)',
217
+
},
218
+
url: {
200
219
type: 'string',
201
-
description: 'Actor type (user, bot, etc.)',
220
+
description: 'Actor profile URL in Linear (distinct from the top-level subject entity `url`)',
202
221
},
203
222
}asconst
204
223
@@ -287,6 +306,10 @@ export function buildIssueOutputs(): Record<string, TriggerOutput> {
287
306
type: 'string',
288
307
description: 'Event creation timestamp',
289
308
},
309
+
url: {
310
+
type: 'string',
311
+
description: 'URL of the subject entity in Linear (top-level webhook payload)',
312
+
},
290
313
actor: userOutputs,
291
314
data: {
292
315
id: {
@@ -466,6 +489,10 @@ export function buildCommentOutputs(): Record<string, TriggerOutput> {
466
489
type: 'string',
467
490
description: 'Event creation timestamp',
468
491
},
492
+
url: {
493
+
type: 'string',
494
+
description: 'URL of the subject entity in Linear (top-level webhook payload)',
495
+
},
469
496
actor: userOutputs,
470
497
data: {
471
498
id: {
@@ -476,6 +503,10 @@ export function buildCommentOutputs(): Record<string, TriggerOutput> {
476
503
type: 'string',
477
504
description: 'Comment body text',
478
505
},
506
+
edited: {
507
+
type: 'boolean',
508
+
description: 'Whether the comment body has been edited (Linear webhook payload field)',
509
+
},
479
510
url: {
480
511
type: 'string',
481
512
description: 'Comment URL',
@@ -553,6 +584,10 @@ export function buildProjectOutputs(): Record<string, TriggerOutput> {
553
584
type: 'string',
554
585
description: 'Event creation timestamp',
555
586
},
587
+
url: {
588
+
type: 'string',
589
+
description: 'URL of the subject entity in Linear (top-level webhook payload)',
590
+
},
556
591
actor: userOutputs,
557
592
data: {
558
593
id: {
@@ -696,6 +731,10 @@ export function buildCycleOutputs(): Record<string, TriggerOutput> {
696
731
type: 'string',
697
732
description: 'Event creation timestamp',
698
733
},
734
+
url: {
735
+
type: 'string',
736
+
description: 'URL of the subject entity in Linear (top-level webhook payload)',
737
+
},
699
738
actor: userOutputs,
700
739
data: {
701
740
id: {
@@ -799,6 +838,10 @@ export function buildLabelOutputs(): Record<string, TriggerOutput> {
799
838
type: 'string',
800
839
description: 'Event creation timestamp',
801
840
},
841
+
url: {
842
+
type: 'string',
843
+
description: 'URL of the subject entity in Linear (top-level webhook payload)',
844
+
},
802
845
actor: userOutputs,
803
846
data: {
804
847
id: {
@@ -886,6 +929,10 @@ export function buildProjectUpdateOutputs(): Record<string, TriggerOutput> {
886
929
type: 'string',
887
930
description: 'Event creation timestamp',
888
931
},
932
+
url: {
933
+
type: 'string',
934
+
description: 'URL of the subject entity in Linear (top-level webhook payload)',
935
+
},
889
936
actor: userOutputs,
890
937
data: {
891
938
id: {
@@ -961,6 +1008,10 @@ export function buildCustomerRequestOutputs(): Record<string, TriggerOutput> {
961
1008
type: 'string',
962
1009
description: 'Event creation timestamp',
963
1010
},
1011
+
url: {
1012
+
type: 'string',
1013
+
description: 'URL of the subject entity in Linear (top-level webhook payload)',
0 commit comments