terse-types 0.0.3 → 0.0.5

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.
@@ -0,0 +1,436 @@
1
+ import { z } from "zod";
2
+ import { GitHubEventType, WorkOSEventType, gitHubEventTypeSchema, gmailEventTypeSchema, linearEventTypeSchema, slackEventTypeSchema, workOSEventTypeSchema } from "./Configs.js";
3
+ import { IntegrationType, integrationTypeEnum } from "./Integrations.js";
4
+ import { SlackChannelType } from "./SlackTypes.js";
5
+ import { debugTrigger as debugTriggerWithPresenter, formatTriggerForAgent as formatTriggerForAgentWithPresenter } from "./TriggerPresenters.js";
6
+ const providerTriggerTypeSchema = z.union([slackEventTypeSchema, gitHubEventTypeSchema, linearEventTypeSchema, gmailEventTypeSchema, workOSEventTypeSchema]);
7
+ const TriggerHeaderSchema = z.object({
8
+ integrationType: integrationTypeEnum,
9
+ eventType: providerTriggerTypeSchema
10
+ });
11
+ const slackTriggerBaseSchema = TriggerHeaderSchema.extend({
12
+ integrationType: z.literal(IntegrationType.SLACK),
13
+ eventType: slackEventTypeSchema,
14
+ channelId: z.string(),
15
+ channelName: z.string().nullable(),
16
+ userId: z.string(),
17
+ userName: z.string().nullable(),
18
+ text: z.string(),
19
+ timestamp: z.string(),
20
+ // Keep both names during migration; `threadTs` is the target shared field.
21
+ threadTs: z.string().nullable().optional(),
22
+ threadTimestamp: z.string().nullable(),
23
+ teamId: z.string(),
24
+ permalink: z.string().nullable(),
25
+ channelType: z.enum(SlackChannelType).nullable(),
26
+ blocks: z.array(z.unknown()).nullable(),
27
+ attachments: z.array(z.unknown()).nullable(),
28
+ files: z.array(z.unknown()).nullable()
29
+ });
30
+ export const slackMessageTriggerSchema = slackTriggerBaseSchema.extend({
31
+ eventType: z.literal("message")
32
+ });
33
+ export const slackAppMentionTriggerSchema = slackTriggerBaseSchema.extend({
34
+ eventType: z.literal("app_mention")
35
+ });
36
+ export const slackReactionAddedTriggerSchema = slackTriggerBaseSchema.extend({
37
+ eventType: z.literal("reaction_added"),
38
+ reaction: z.string(),
39
+ itemType: z.string().nullable(),
40
+ itemUserId: z.string().nullable(),
41
+ itemChannelId: z.string().nullable(),
42
+ itemTimestamp: z.string().nullable()
43
+ });
44
+ export const slackTriggerSchema = z.discriminatedUnion("eventType", [slackMessageTriggerSchema, slackAppMentionTriggerSchema, slackReactionAddedTriggerSchema]);
45
+ // Github Event Data
46
+ export const fileDiffSchema = z.object({
47
+ filename: z.string(),
48
+ diff: z.string()
49
+ });
50
+ export const commitSchema = z.object({
51
+ sha: z.string(),
52
+ // Keep both names during migration; `message` is the target shared field.
53
+ message: z.string().optional(),
54
+ name: z.string(),
55
+ fileDiffs: z.array(fileDiffSchema)
56
+ });
57
+ export const pullRequestUserSchema = z.object({
58
+ login: z.string(),
59
+ email: z.string().optional()
60
+ });
61
+ export const pullRequestRefSchema = z.object({
62
+ ref: z.string(),
63
+ sha: z.string()
64
+ });
65
+ export const pullRequestSchema = z.object({
66
+ id: z.string(),
67
+ number: z.number(),
68
+ title: z.string(),
69
+ body: z.string().optional(),
70
+ state: z.enum(["open", "closed"]),
71
+ merged: z.boolean(),
72
+ head: pullRequestRefSchema,
73
+ base: pullRequestRefSchema,
74
+ // Keep both names during migration; `author` is the target shared field.
75
+ user: pullRequestUserSchema,
76
+ author: pullRequestUserSchema.optional(),
77
+ url: z.string().optional()
78
+ });
79
+ export const githubRepositorySchema = z.object({
80
+ id: z.number(),
81
+ name: z.string(),
82
+ owner: z.string(),
83
+ defaultBranch: z.string()
84
+ });
85
+ export const senderSchema = z.object({
86
+ login: z.string(),
87
+ email: z.string().optional()
88
+ });
89
+ const GithubTriggerBaseSchema = z.object({
90
+ integrationType: z.literal(IntegrationType.GITHUB),
91
+ username: z.string(),
92
+ installationId: z.number(),
93
+ repositoryName: z.string(),
94
+ repository: githubRepositorySchema,
95
+ sender: senderSchema
96
+ });
97
+ export const GithubPushTriggerSchema = GithubTriggerBaseSchema.extend({
98
+ eventType: z.literal(GitHubEventType.PUSH),
99
+ branch: z.string(),
100
+ commits: z.array(commitSchema),
101
+ pullRequest: z.undefined().optional()
102
+ });
103
+ const GithubPRTriggerBaseSchema = GithubTriggerBaseSchema.extend({
104
+ pullRequest: pullRequestSchema,
105
+ branch: z.string().optional(),
106
+ commits: z.array(commitSchema)
107
+ });
108
+ export const GithubPROpenedTriggerSchema = GithubPRTriggerBaseSchema.extend({
109
+ eventType: z.literal(GitHubEventType.PR_OPENED)
110
+ });
111
+ export const GithubPRSynchronizedTriggerSchema = GithubPRTriggerBaseSchema.extend({
112
+ eventType: z.literal(GitHubEventType.PR_SYNCHRONIZE)
113
+ });
114
+ export const GithubPRClosedTriggerSchema = GithubPRTriggerBaseSchema.extend({
115
+ eventType: z.literal(GitHubEventType.PR_CLOSED)
116
+ });
117
+ export const GithubPRMergedTriggerSchema = GithubPRTriggerBaseSchema.extend({
118
+ eventType: z.literal(GitHubEventType.PR_MERGED)
119
+ });
120
+ export const GithubPRTriggerSchema = z.discriminatedUnion("eventType", [GithubPROpenedTriggerSchema, GithubPRSynchronizedTriggerSchema, GithubPRClosedTriggerSchema, GithubPRMergedTriggerSchema]);
121
+ export const GithubTriggerSchema = z.discriminatedUnion("eventType", [
122
+ GithubPushTriggerSchema,
123
+ GithubPROpenedTriggerSchema,
124
+ GithubPRSynchronizedTriggerSchema,
125
+ GithubPRClosedTriggerSchema,
126
+ GithubPRMergedTriggerSchema
127
+ ]);
128
+ export const GmailParsedAttachmentSchema = z.object({
129
+ attachmentId: z.string(),
130
+ filename: z.string(),
131
+ mimeType: z.string(),
132
+ contentId: z.string().optional(),
133
+ isInline: z.boolean()
134
+ });
135
+ const gmailMessagePayloadSchema = z.object({
136
+ id: z.string(),
137
+ threadId: z.string(),
138
+ subject: z.string(),
139
+ from: z.string(),
140
+ to: z.string(),
141
+ date: z.string(),
142
+ internalDate: z.string(),
143
+ messageId: z.string(),
144
+ body: z.string(),
145
+ snippet: z.string(),
146
+ labelIds: z.array(z.string()),
147
+ attachments: z.array(GmailParsedAttachmentSchema).optional()
148
+ });
149
+ export const LinearWebhookActionSchema = z.enum(["create", "update", "remove"]);
150
+ export const LinearWebhookTypeSchema = z.union([z.literal("Issue"), z.literal("Comment"), z.literal("Project"), z.string()]);
151
+ export const LinearWebhookActorSchema = z.object({
152
+ id: z.string(),
153
+ name: z.string(),
154
+ email: z.string(),
155
+ url: z.string(),
156
+ type: z.string()
157
+ });
158
+ export const LinearWebhookStateSchema = z.object({
159
+ id: z.string(),
160
+ color: z.string(),
161
+ name: z.string(),
162
+ type: z.string()
163
+ });
164
+ export const LinearWebhookTeamSchema = z.object({
165
+ id: z.string(),
166
+ key: z.string(),
167
+ name: z.string()
168
+ });
169
+ export const LinearWebhookAssigneeSchema = z.object({
170
+ id: z.string(),
171
+ name: z.string()
172
+ });
173
+ export const LinearWebhookDataSchema = z.object({
174
+ id: z.string(),
175
+ createdAt: z.string(),
176
+ updatedAt: z.string(),
177
+ number: z.number(),
178
+ title: z.string(),
179
+ priority: z.number(),
180
+ sortOrder: z.number(),
181
+ prioritySortOrder: z.number(),
182
+ slaType: z.string(),
183
+ addedToTeamAt: z.string(),
184
+ trashed: z.boolean(),
185
+ labelIds: z.array(z.string()),
186
+ teamId: z.string(),
187
+ previousIdentifiers: z.array(z.string()),
188
+ stateId: z.string(),
189
+ reactionData: z.array(z.any()),
190
+ priorityLabel: z.string(),
191
+ botActor: z.string().optional(),
192
+ identifier: z.string(),
193
+ url: z.string(),
194
+ subscriberIds: z.array(z.string()),
195
+ state: LinearWebhookStateSchema,
196
+ team: LinearWebhookTeamSchema,
197
+ labels: z.array(z.any()),
198
+ description: z.string().optional(),
199
+ descriptionData: z.string().optional(),
200
+ assignee: LinearWebhookAssigneeSchema.optional(),
201
+ /** Present on many issue webhooks; used for trigger scoping */
202
+ projectId: z.string().optional()
203
+ });
204
+ export const LinearWebhookCommentDataSchema = z
205
+ .object({
206
+ id: z.string(),
207
+ body: z.string().optional(),
208
+ issueId: z.string().optional()
209
+ })
210
+ .passthrough();
211
+ export const linearWebhookPayloadSchema = z.object({
212
+ action: LinearWebhookActionSchema,
213
+ actor: LinearWebhookActorSchema,
214
+ createdAt: z.string(),
215
+ data: LinearWebhookDataSchema,
216
+ type: LinearWebhookTypeSchema,
217
+ url: z.string().optional(),
218
+ organizationId: z.string(),
219
+ webhookTimestamp: z.number(),
220
+ webhookId: z.string()
221
+ });
222
+ export const WorkOSWebhookDataSchema = z.record(z.string(), z.any());
223
+ export const workOSWebhookPayloadSchema = z.object({
224
+ id: z.string(),
225
+ event: z.string(),
226
+ data: WorkOSWebhookDataSchema,
227
+ created_at: z.string()
228
+ });
229
+ // MARK: Canonical Trigger Events
230
+ export const webhookTriggerTypeSchema = z.literal("webhook");
231
+ export const cronTriggerTypeSchema = z.literal("cron");
232
+ export const manualSampleTriggerTypeSchema = z.literal("manual_sample");
233
+ export const TriggerTypeSchema = z.union([
234
+ slackEventTypeSchema,
235
+ gitHubEventTypeSchema,
236
+ linearEventTypeSchema,
237
+ gmailEventTypeSchema,
238
+ workOSEventTypeSchema,
239
+ webhookTriggerTypeSchema,
240
+ cronTriggerTypeSchema,
241
+ manualSampleTriggerTypeSchema
242
+ ]);
243
+ export const baseTriggerSchema = z.object({
244
+ integrationType: integrationTypeEnum,
245
+ eventType: TriggerTypeSchema
246
+ });
247
+ export const gmailTriggerSchema = baseTriggerSchema
248
+ .extend({
249
+ integrationType: z.literal(IntegrationType.GMAIL),
250
+ eventType: gmailEventTypeSchema
251
+ })
252
+ .merge(gmailMessagePayloadSchema);
253
+ const linearTriggerBaseSchema = z.object({
254
+ integrationType: z.literal(IntegrationType.LINEAR),
255
+ action: LinearWebhookActionSchema,
256
+ actor: LinearWebhookActorSchema,
257
+ createdAt: z.string(),
258
+ url: z.string().optional(),
259
+ organizationId: z.string(),
260
+ webhookTimestamp: z.number(),
261
+ webhookId: z.string()
262
+ });
263
+ export const linearIssueCreatedTriggerSchema = linearTriggerBaseSchema.extend({
264
+ eventType: z.literal("issue.created"),
265
+ action: z.literal("create"),
266
+ type: z.literal("Issue"),
267
+ data: LinearWebhookDataSchema
268
+ });
269
+ export const linearIssueUpdatedTriggerSchema = linearTriggerBaseSchema.extend({
270
+ eventType: z.literal("issue.updated"),
271
+ action: z.literal("update"),
272
+ type: z.literal("Issue"),
273
+ data: LinearWebhookDataSchema
274
+ });
275
+ export const linearCommentCreatedTriggerSchema = linearTriggerBaseSchema.extend({
276
+ eventType: z.literal("comment.created"),
277
+ action: z.literal("create"),
278
+ type: z.literal("Comment"),
279
+ data: LinearWebhookCommentDataSchema
280
+ });
281
+ export const linearTriggerSchema = z.discriminatedUnion("eventType", [linearIssueCreatedTriggerSchema, linearIssueUpdatedTriggerSchema, linearCommentCreatedTriggerSchema]);
282
+ export const workOSTriggerUserSchema = z.object({
283
+ id: z.string(),
284
+ email: z.string(),
285
+ firstName: z.string().optional(),
286
+ lastName: z.string().optional(),
287
+ emailVerified: z.boolean(),
288
+ profilePictureUrl: z.string().optional()
289
+ });
290
+ export const workOSTriggerMembershipSchema = z.object({
291
+ id: z.string(),
292
+ userId: z.string(),
293
+ organizationId: z.string(),
294
+ role: z.object({
295
+ slug: z.string()
296
+ }),
297
+ status: z.string()
298
+ });
299
+ export const workOSTriggerInvitationSchema = z.object({
300
+ id: z.string(),
301
+ email: z.string(),
302
+ organizationId: z.string(),
303
+ inviterEmail: z.string().optional(),
304
+ state: z.string(),
305
+ acceptedAt: z.string().optional()
306
+ });
307
+ export const workOSTriggerOrganizationSchema = z.object({
308
+ id: z.string(),
309
+ name: z.string()
310
+ });
311
+ const workOSTriggerBaseSchema = baseTriggerSchema.extend({
312
+ integrationType: z.literal(IntegrationType.WORKOS),
313
+ eventType: workOSEventTypeSchema,
314
+ eventId: z.string(),
315
+ createdAt: z.string()
316
+ });
317
+ export const workOSUserCreatedTriggerSchema = workOSTriggerBaseSchema.extend({
318
+ eventType: z.literal(WorkOSEventType.USER_CREATED),
319
+ user: workOSTriggerUserSchema
320
+ });
321
+ export const workOSUserUpdatedTriggerSchema = workOSTriggerBaseSchema.extend({
322
+ eventType: z.literal(WorkOSEventType.USER_UPDATED),
323
+ user: workOSTriggerUserSchema
324
+ });
325
+ export const workOSUserDeletedTriggerSchema = workOSTriggerBaseSchema.extend({
326
+ eventType: z.literal(WorkOSEventType.USER_DELETED),
327
+ user: workOSTriggerUserSchema
328
+ });
329
+ export const workOSUserTriggerSchema = z.discriminatedUnion("eventType", [workOSUserCreatedTriggerSchema, workOSUserUpdatedTriggerSchema, workOSUserDeletedTriggerSchema]);
330
+ export const workOSOrganizationMembershipCreatedTriggerSchema = workOSTriggerBaseSchema.extend({
331
+ eventType: z.literal(WorkOSEventType.ORGANIZATION_MEMBERSHIP_CREATED),
332
+ membership: workOSTriggerMembershipSchema
333
+ });
334
+ export const workOSOrganizationMembershipUpdatedTriggerSchema = workOSTriggerBaseSchema.extend({
335
+ eventType: z.literal(WorkOSEventType.ORGANIZATION_MEMBERSHIP_UPDATED),
336
+ membership: workOSTriggerMembershipSchema
337
+ });
338
+ export const workOSOrganizationMembershipDeletedTriggerSchema = workOSTriggerBaseSchema.extend({
339
+ eventType: z.literal(WorkOSEventType.ORGANIZATION_MEMBERSHIP_DELETED),
340
+ membership: workOSTriggerMembershipSchema
341
+ });
342
+ export const workOSMembershipTriggerSchema = z.discriminatedUnion("eventType", [
343
+ workOSOrganizationMembershipCreatedTriggerSchema,
344
+ workOSOrganizationMembershipUpdatedTriggerSchema,
345
+ workOSOrganizationMembershipDeletedTriggerSchema
346
+ ]);
347
+ export const workOSInvitationCreatedTriggerSchema = workOSTriggerBaseSchema.extend({
348
+ eventType: z.literal(WorkOSEventType.INVITATION_CREATED),
349
+ invitation: workOSTriggerInvitationSchema,
350
+ user: workOSTriggerUserSchema.optional()
351
+ });
352
+ export const workOSInvitationAcceptedTriggerSchema = workOSTriggerBaseSchema.extend({
353
+ eventType: z.literal(WorkOSEventType.INVITATION_ACCEPTED),
354
+ invitation: workOSTriggerInvitationSchema,
355
+ user: workOSTriggerUserSchema.optional()
356
+ });
357
+ export const workOSInvitationResentTriggerSchema = workOSTriggerBaseSchema.extend({
358
+ eventType: z.literal(WorkOSEventType.INVITATION_RESENT),
359
+ invitation: workOSTriggerInvitationSchema,
360
+ user: workOSTriggerUserSchema.optional()
361
+ });
362
+ export const workOSInvitationRevokedTriggerSchema = workOSTriggerBaseSchema.extend({
363
+ eventType: z.literal(WorkOSEventType.INVITATION_REVOKED),
364
+ invitation: workOSTriggerInvitationSchema,
365
+ user: workOSTriggerUserSchema.optional()
366
+ });
367
+ export const workOSInvitationTriggerSchema = z.discriminatedUnion("eventType", [
368
+ workOSInvitationCreatedTriggerSchema,
369
+ workOSInvitationAcceptedTriggerSchema,
370
+ workOSInvitationResentTriggerSchema,
371
+ workOSInvitationRevokedTriggerSchema
372
+ ]);
373
+ export const workOSOrganizationTriggerSchema = workOSTriggerBaseSchema.extend({
374
+ eventType: z.literal(WorkOSEventType.ORGANIZATION_CREATED),
375
+ organization: workOSTriggerOrganizationSchema
376
+ });
377
+ export const workOSTriggerSchema = z.discriminatedUnion("eventType", [
378
+ workOSUserCreatedTriggerSchema,
379
+ workOSUserUpdatedTriggerSchema,
380
+ workOSUserDeletedTriggerSchema,
381
+ workOSOrganizationMembershipCreatedTriggerSchema,
382
+ workOSOrganizationMembershipUpdatedTriggerSchema,
383
+ workOSOrganizationMembershipDeletedTriggerSchema,
384
+ workOSInvitationCreatedTriggerSchema,
385
+ workOSInvitationAcceptedTriggerSchema,
386
+ workOSInvitationResentTriggerSchema,
387
+ workOSInvitationRevokedTriggerSchema,
388
+ workOSOrganizationTriggerSchema
389
+ ]);
390
+ export const webhookTriggerSchema = baseTriggerSchema.extend({
391
+ integrationType: z.literal(IntegrationType.WEBHOOK),
392
+ eventType: webhookTriggerTypeSchema,
393
+ body: z.record(z.string(), z.unknown()),
394
+ headers: z.record(z.string(), z.string()),
395
+ method: z.string()
396
+ });
397
+ export const cronTriggerSchema = baseTriggerSchema.extend({
398
+ integrationType: z.literal(IntegrationType.CRON_JOB),
399
+ eventType: cronTriggerTypeSchema,
400
+ inputId: z.string(),
401
+ isManualTrigger: z.boolean().optional(),
402
+ manualContext: z.string().optional()
403
+ });
404
+ export const manualSampleTriggerSchema = baseTriggerSchema.extend({
405
+ eventType: manualSampleTriggerTypeSchema
406
+ });
407
+ export const TriggerSchema = z.union([
408
+ slackTriggerSchema,
409
+ GithubTriggerSchema,
410
+ gmailTriggerSchema,
411
+ linearTriggerSchema,
412
+ workOSTriggerSchema,
413
+ webhookTriggerSchema,
414
+ cronTriggerSchema,
415
+ manualSampleTriggerSchema
416
+ ]);
417
+ export function createManualTrigger(params = {}) {
418
+ return TriggerSchema.parse({
419
+ integrationType: params.integrationType ?? IntegrationType.TERSE,
420
+ eventType: "manual_sample"
421
+ });
422
+ }
423
+ export function formatTriggerForAgent(event) {
424
+ return formatTriggerForAgentWithPresenter(event);
425
+ }
426
+ export function debugTrigger(event) {
427
+ return debugTriggerWithPresenter(event);
428
+ }
429
+ export const TriggerArraySchema = z.array(TriggerSchema);
430
+ export const serializedEventSchema = z.object({
431
+ integrationType: integrationTypeEnum,
432
+ eventType: TriggerTypeSchema,
433
+ formattedContent: z.string(),
434
+ debugLog: z.string(),
435
+ data: TriggerSchema
436
+ });
package/dist/index.d.ts CHANGED
@@ -11,10 +11,12 @@ export * from "./ModelEvents.js";
11
11
  export * from "./Notifications.js";
12
12
  export * from "./RunHistoryTypes.js";
13
13
  export * from "./SentNotifications.js";
14
+ export * from "./SlackTypes.js";
14
15
  export * from "./SocketEvents.js";
15
16
  export * from "./Survey.js";
16
17
  export * from "./Tools.js";
17
18
  export { Comment, CreateTicketInput, LinearStateName, Milestone, Organization, Project, Team, Ticket, TicketState, TicketSystemType, TicketWebhookHandler, Update, UpdateTicketInput, UserContext } from "./TicketSystem.js";
18
19
  export * from "./ToolDisplayUtils.js";
20
+ export * from "./Triggers.js";
19
21
  export * from "./ToolsTypes.js";
20
22
  export * from "./types.js";
package/dist/index.js CHANGED
@@ -11,10 +11,12 @@ export * from "./ModelEvents.js";
11
11
  export * from "./Notifications.js";
12
12
  export * from "./RunHistoryTypes.js";
13
13
  export * from "./SentNotifications.js";
14
+ export * from "./SlackTypes.js";
14
15
  export * from "./SocketEvents.js";
15
16
  export * from "./Survey.js";
16
17
  export * from "./Tools.js";
17
18
  export { LinearStateName, TicketSystemType } from "./TicketSystem.js";
18
19
  export * from "./ToolDisplayUtils.js";
20
+ export * from "./Triggers.js";
19
21
  export * from "./ToolsTypes.js";
20
22
  export * from "./types.js";