@automate.ax/integration-contracts 0.55.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 (136) hide show
  1. package/dist/airtable/api.d.ts +19 -0
  2. package/dist/airtable/api.js +44 -0
  3. package/dist/airtable/index.d.ts +353 -0
  4. package/dist/airtable/index.js +32 -0
  5. package/dist/airtable/schemas.d.ts +716 -0
  6. package/dist/airtable/schemas.js +184 -0
  7. package/dist/asana/api.d.ts +70 -0
  8. package/dist/asana/api.js +119 -0
  9. package/dist/asana/index.d.ts +384 -0
  10. package/dist/asana/index.js +38 -0
  11. package/dist/asana/schemas.d.ts +1060 -0
  12. package/dist/asana/schemas.js +512 -0
  13. package/dist/brevo/api.d.ts +31 -0
  14. package/dist/brevo/api.js +64 -0
  15. package/dist/brevo/index.d.ts +822 -0
  16. package/dist/brevo/index.js +51 -0
  17. package/dist/brevo/schemas.d.ts +1217 -0
  18. package/dist/brevo/schemas.js +332 -0
  19. package/dist/github/index.d.ts +37 -0
  20. package/dist/github/index.js +106 -0
  21. package/dist/github/schemas.d.ts +8014 -0
  22. package/dist/github/schemas.js +113 -0
  23. package/dist/gmail/gmail.d.ts +172 -0
  24. package/dist/gmail/gmail.js +405 -0
  25. package/dist/gmail/index.d.ts +262 -0
  26. package/dist/gmail/index.js +23 -0
  27. package/dist/gmail/schemas.d.ts +444 -0
  28. package/dist/gmail/schemas.js +242 -0
  29. package/dist/google-calendar/event-schemas.d.ts +117 -0
  30. package/dist/google-calendar/event-schemas.js +13 -0
  31. package/dist/google-calendar/google-calendar.d.ts +147 -0
  32. package/dist/google-calendar/google-calendar.js +583 -0
  33. package/dist/google-calendar/index.d.ts +365 -0
  34. package/dist/google-calendar/index.js +24 -0
  35. package/dist/google-calendar/schemas.d.ts +592 -0
  36. package/dist/google-calendar/schemas.js +379 -0
  37. package/dist/google-forms/event-schemas.d.ts +105 -0
  38. package/dist/google-forms/event-schemas.js +20 -0
  39. package/dist/google-forms/google-forms.d.ts +243 -0
  40. package/dist/google-forms/google-forms.js +581 -0
  41. package/dist/google-forms/index.d.ts +141 -0
  42. package/dist/google-forms/index.js +20 -0
  43. package/dist/google-forms/schemas.d.ts +618 -0
  44. package/dist/google-forms/schemas.js +383 -0
  45. package/dist/linear/api.d.ts +63 -0
  46. package/dist/linear/api.js +88 -0
  47. package/dist/linear/index.d.ts +1338 -0
  48. package/dist/linear/index.js +55 -0
  49. package/dist/linear/schemas.d.ts +1795 -0
  50. package/dist/linear/schemas.js +760 -0
  51. package/dist/outlook/graph.d.ts +34 -0
  52. package/dist/outlook/graph.js +98 -0
  53. package/dist/outlook/index.d.ts +115 -0
  54. package/dist/outlook/index.js +11 -0
  55. package/dist/outlook/schemas.d.ts +529 -0
  56. package/dist/outlook/schemas.js +312 -0
  57. package/dist/resend/index.d.ts +707 -0
  58. package/dist/resend/index.js +54 -0
  59. package/dist/resend/schemas.d.ts +1033 -0
  60. package/dist/resend/schemas.js +377 -0
  61. package/dist/slack/index.d.ts +151 -0
  62. package/dist/slack/index.js +22 -0
  63. package/dist/slack/schemas.d.ts +641 -0
  64. package/dist/slack/schemas.js +581 -0
  65. package/dist/teams/graph.d.ts +33 -0
  66. package/dist/teams/graph.js +95 -0
  67. package/dist/teams/index.d.ts +164 -0
  68. package/dist/teams/index.js +21 -0
  69. package/dist/teams/schemas.d.ts +675 -0
  70. package/dist/teams/schemas.js +365 -0
  71. package/dist/trello/api.d.ts +69 -0
  72. package/dist/trello/api.js +140 -0
  73. package/dist/trello/event-schemas.d.ts +1101 -0
  74. package/dist/trello/event-schemas.js +233 -0
  75. package/dist/trello/index.d.ts +721 -0
  76. package/dist/trello/index.js +35 -0
  77. package/dist/trello/schemas.d.ts +283 -0
  78. package/dist/trello/schemas.js +401 -0
  79. package/dist/triggers.d.ts +26 -0
  80. package/dist/triggers.js +33 -0
  81. package/dist/vercel/index.d.ts +1065 -0
  82. package/dist/vercel/index.js +114 -0
  83. package/dist/vercel/schemas.d.ts +1518 -0
  84. package/dist/vercel/schemas.js +335 -0
  85. package/dist/whatsapp/api.d.ts +62 -0
  86. package/dist/whatsapp/api.js +121 -0
  87. package/dist/whatsapp/index.d.ts +614 -0
  88. package/dist/whatsapp/index.js +35 -0
  89. package/dist/whatsapp/schemas.d.ts +926 -0
  90. package/dist/whatsapp/schemas.js +326 -0
  91. package/package.json +169 -0
  92. package/src/airtable/api.ts +66 -0
  93. package/src/airtable/index.ts +41 -0
  94. package/src/airtable/schemas.ts +231 -0
  95. package/src/asana/api.ts +171 -0
  96. package/src/asana/index.ts +49 -0
  97. package/src/asana/schemas.ts +655 -0
  98. package/src/brevo/api.ts +89 -0
  99. package/src/brevo/index.ts +66 -0
  100. package/src/brevo/schemas.ts +449 -0
  101. package/src/github/index.ts +217 -0
  102. package/src/github/schemas.ts +435 -0
  103. package/src/gmail/gmail.ts +577 -0
  104. package/src/gmail/index.ts +26 -0
  105. package/src/gmail/schemas.ts +327 -0
  106. package/src/google-calendar/event-schemas.ts +16 -0
  107. package/src/google-calendar/google-calendar.ts +727 -0
  108. package/src/google-calendar/index.ts +27 -0
  109. package/src/google-calendar/schemas.ts +529 -0
  110. package/src/google-forms/event-schemas.ts +26 -0
  111. package/src/google-forms/google-forms.ts +683 -0
  112. package/src/google-forms/index.ts +23 -0
  113. package/src/google-forms/schemas.ts +499 -0
  114. package/src/linear/api.ts +141 -0
  115. package/src/linear/index.ts +71 -0
  116. package/src/linear/schemas.ts +1060 -0
  117. package/src/outlook/graph.ts +132 -0
  118. package/src/outlook/index.ts +14 -0
  119. package/src/outlook/schemas.ts +388 -0
  120. package/src/resend/index.ts +70 -0
  121. package/src/resend/schemas.ts +462 -0
  122. package/src/slack/index.ts +29 -0
  123. package/src/slack/schemas.ts +737 -0
  124. package/src/teams/graph.ts +130 -0
  125. package/src/teams/index.ts +27 -0
  126. package/src/teams/schemas.ts +463 -0
  127. package/src/trello/api.ts +190 -0
  128. package/src/trello/event-schemas.ts +290 -0
  129. package/src/trello/index.ts +45 -0
  130. package/src/trello/schemas.ts +507 -0
  131. package/src/triggers.ts +68 -0
  132. package/src/vercel/index.ts +147 -0
  133. package/src/vercel/schemas.ts +594 -0
  134. package/src/whatsapp/api.ts +171 -0
  135. package/src/whatsapp/index.ts +46 -0
  136. package/src/whatsapp/schemas.ts +341 -0
@@ -0,0 +1,217 @@
1
+ import { z } from "zod"
2
+ import {
3
+ GITHUB_ISSUE_CLOSED_EVENT_SCHEMA,
4
+ GITHUB_ISSUE_EVENT_SCHEMA,
5
+ GITHUB_ISSUE_OPENED_EVENT_SCHEMA,
6
+ GITHUB_ISSUE_REOPENED_EVENT_SCHEMA,
7
+ GITHUB_PULL_REQUEST_CLOSED_EVENT_SCHEMA,
8
+ GITHUB_PULL_REQUEST_EVENT_SCHEMA,
9
+ GITHUB_PULL_REQUEST_MERGED_EVENT_SCHEMA,
10
+ GITHUB_PULL_REQUEST_OPENED_EVENT_SCHEMA,
11
+ GITHUB_PULL_REQUEST_READY_FOR_REVIEW_EVENT_SCHEMA,
12
+ GITHUB_PULL_REQUEST_REVIEW_APPROVED_EVENT_SCHEMA,
13
+ GITHUB_PULL_REQUEST_REVIEW_CHANGES_REQUESTED_EVENT_SCHEMA,
14
+ GITHUB_PULL_REQUEST_REVIEW_DISMISSED_EVENT_SCHEMA,
15
+ GITHUB_PULL_REQUEST_REVIEW_EVENT_SCHEMA,
16
+ GITHUB_PULL_REQUEST_REVIEW_SUBMITTED_EVENT_SCHEMA,
17
+ GITHUB_PULL_REQUEST_SYNCHRONIZED_EVENT_SCHEMA,
18
+ GITHUB_PUSH_EVENT_SCHEMA,
19
+ GITHUB_RELEASE_EVENT_SCHEMA,
20
+ GITHUB_RELEASE_PUBLISHED_EVENT_SCHEMA,
21
+ GITHUB_WORKFLOW_RUN_CANCELLED_EVENT_SCHEMA,
22
+ GITHUB_WORKFLOW_RUN_COMPLETED_EVENT_SCHEMA,
23
+ GITHUB_WORKFLOW_RUN_EVENT_SCHEMA,
24
+ GITHUB_WORKFLOW_RUN_FAILED_EVENT_SCHEMA,
25
+ GITHUB_WORKFLOW_RUN_REQUESTED_EVENT_SCHEMA,
26
+ GITHUB_WORKFLOW_RUN_STARTED_EVENT_SCHEMA,
27
+ GITHUB_WORKFLOW_RUN_SUCCEEDED_EVENT_SCHEMA,
28
+ } from "./schemas"
29
+
30
+ export * from "./schemas"
31
+
32
+ export const GITHUB_TRIGGER_CONFIG_SCHEMA = z.object({})
33
+
34
+ type GitHubTriggerContract<TEventSchema> = {
35
+ readonly configSchema: typeof GITHUB_TRIGGER_CONFIG_SCHEMA
36
+ readonly eventSchema: TEventSchema
37
+ }
38
+
39
+ /** Named registry shape keeps declaration emit within its serialization limit. */
40
+ type GitHubTriggerContracts = {
41
+ readonly "github.issue.closed": GitHubTriggerContract<
42
+ typeof GITHUB_ISSUE_CLOSED_EVENT_SCHEMA
43
+ >
44
+ readonly "github.issue.event": GitHubTriggerContract<
45
+ typeof GITHUB_ISSUE_EVENT_SCHEMA
46
+ >
47
+ readonly "github.issue.opened": GitHubTriggerContract<
48
+ typeof GITHUB_ISSUE_OPENED_EVENT_SCHEMA
49
+ >
50
+ readonly "github.issue.reopened": GitHubTriggerContract<
51
+ typeof GITHUB_ISSUE_REOPENED_EVENT_SCHEMA
52
+ >
53
+ readonly "github.pull-request.closed": GitHubTriggerContract<
54
+ typeof GITHUB_PULL_REQUEST_CLOSED_EVENT_SCHEMA
55
+ >
56
+ readonly "github.pull-request.event": GitHubTriggerContract<
57
+ typeof GITHUB_PULL_REQUEST_EVENT_SCHEMA
58
+ >
59
+ readonly "github.pull-request.merged": GitHubTriggerContract<
60
+ typeof GITHUB_PULL_REQUEST_MERGED_EVENT_SCHEMA
61
+ >
62
+ readonly "github.pull-request.opened": GitHubTriggerContract<
63
+ typeof GITHUB_PULL_REQUEST_OPENED_EVENT_SCHEMA
64
+ >
65
+ readonly "github.pull-request.ready-for-review": GitHubTriggerContract<
66
+ typeof GITHUB_PULL_REQUEST_READY_FOR_REVIEW_EVENT_SCHEMA
67
+ >
68
+ readonly "github.pull-request-review.approved": GitHubTriggerContract<
69
+ typeof GITHUB_PULL_REQUEST_REVIEW_APPROVED_EVENT_SCHEMA
70
+ >
71
+ readonly "github.pull-request-review.changes-requested": GitHubTriggerContract<
72
+ typeof GITHUB_PULL_REQUEST_REVIEW_CHANGES_REQUESTED_EVENT_SCHEMA
73
+ >
74
+ readonly "github.pull-request-review.dismissed": GitHubTriggerContract<
75
+ typeof GITHUB_PULL_REQUEST_REVIEW_DISMISSED_EVENT_SCHEMA
76
+ >
77
+ readonly "github.pull-request-review.event": GitHubTriggerContract<
78
+ typeof GITHUB_PULL_REQUEST_REVIEW_EVENT_SCHEMA
79
+ >
80
+ readonly "github.pull-request-review.submitted": GitHubTriggerContract<
81
+ typeof GITHUB_PULL_REQUEST_REVIEW_SUBMITTED_EVENT_SCHEMA
82
+ >
83
+ readonly "github.pull-request.synchronized": GitHubTriggerContract<
84
+ typeof GITHUB_PULL_REQUEST_SYNCHRONIZED_EVENT_SCHEMA
85
+ >
86
+ readonly "github.push": GitHubTriggerContract<typeof GITHUB_PUSH_EVENT_SCHEMA>
87
+ readonly "github.release.event": GitHubTriggerContract<
88
+ typeof GITHUB_RELEASE_EVENT_SCHEMA
89
+ >
90
+ readonly "github.release.published": GitHubTriggerContract<
91
+ typeof GITHUB_RELEASE_PUBLISHED_EVENT_SCHEMA
92
+ >
93
+ readonly "github.workflow-run.cancelled": GitHubTriggerContract<
94
+ typeof GITHUB_WORKFLOW_RUN_CANCELLED_EVENT_SCHEMA
95
+ >
96
+ readonly "github.workflow-run.completed": GitHubTriggerContract<
97
+ typeof GITHUB_WORKFLOW_RUN_COMPLETED_EVENT_SCHEMA
98
+ >
99
+ readonly "github.workflow-run.event": GitHubTriggerContract<
100
+ typeof GITHUB_WORKFLOW_RUN_EVENT_SCHEMA
101
+ >
102
+ readonly "github.workflow-run.failed": GitHubTriggerContract<
103
+ typeof GITHUB_WORKFLOW_RUN_FAILED_EVENT_SCHEMA
104
+ >
105
+ readonly "github.workflow-run.requested": GitHubTriggerContract<
106
+ typeof GITHUB_WORKFLOW_RUN_REQUESTED_EVENT_SCHEMA
107
+ >
108
+ readonly "github.workflow-run.started": GitHubTriggerContract<
109
+ typeof GITHUB_WORKFLOW_RUN_STARTED_EVENT_SCHEMA
110
+ >
111
+ readonly "github.workflow-run.succeeded": GitHubTriggerContract<
112
+ typeof GITHUB_WORKFLOW_RUN_SUCCEEDED_EVENT_SCHEMA
113
+ >
114
+ }
115
+
116
+ export const githubTriggerContracts: GitHubTriggerContracts = {
117
+ "github.issue.closed": {
118
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
119
+ eventSchema: GITHUB_ISSUE_CLOSED_EVENT_SCHEMA,
120
+ },
121
+ "github.issue.event": {
122
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
123
+ eventSchema: GITHUB_ISSUE_EVENT_SCHEMA,
124
+ },
125
+ "github.issue.opened": {
126
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
127
+ eventSchema: GITHUB_ISSUE_OPENED_EVENT_SCHEMA,
128
+ },
129
+ "github.issue.reopened": {
130
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
131
+ eventSchema: GITHUB_ISSUE_REOPENED_EVENT_SCHEMA,
132
+ },
133
+ "github.pull-request.closed": {
134
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
135
+ eventSchema: GITHUB_PULL_REQUEST_CLOSED_EVENT_SCHEMA,
136
+ },
137
+ "github.pull-request.event": {
138
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
139
+ eventSchema: GITHUB_PULL_REQUEST_EVENT_SCHEMA,
140
+ },
141
+ "github.pull-request.merged": {
142
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
143
+ eventSchema: GITHUB_PULL_REQUEST_MERGED_EVENT_SCHEMA,
144
+ },
145
+ "github.pull-request.opened": {
146
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
147
+ eventSchema: GITHUB_PULL_REQUEST_OPENED_EVENT_SCHEMA,
148
+ },
149
+ "github.pull-request.ready-for-review": {
150
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
151
+ eventSchema: GITHUB_PULL_REQUEST_READY_FOR_REVIEW_EVENT_SCHEMA,
152
+ },
153
+ "github.pull-request-review.approved": {
154
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
155
+ eventSchema: GITHUB_PULL_REQUEST_REVIEW_APPROVED_EVENT_SCHEMA,
156
+ },
157
+ "github.pull-request-review.changes-requested": {
158
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
159
+ eventSchema: GITHUB_PULL_REQUEST_REVIEW_CHANGES_REQUESTED_EVENT_SCHEMA,
160
+ },
161
+ "github.pull-request-review.dismissed": {
162
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
163
+ eventSchema: GITHUB_PULL_REQUEST_REVIEW_DISMISSED_EVENT_SCHEMA,
164
+ },
165
+ "github.pull-request-review.event": {
166
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
167
+ eventSchema: GITHUB_PULL_REQUEST_REVIEW_EVENT_SCHEMA,
168
+ },
169
+ "github.pull-request-review.submitted": {
170
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
171
+ eventSchema: GITHUB_PULL_REQUEST_REVIEW_SUBMITTED_EVENT_SCHEMA,
172
+ },
173
+ "github.pull-request.synchronized": {
174
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
175
+ eventSchema: GITHUB_PULL_REQUEST_SYNCHRONIZED_EVENT_SCHEMA,
176
+ },
177
+ "github.push": {
178
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
179
+ eventSchema: GITHUB_PUSH_EVENT_SCHEMA,
180
+ },
181
+ "github.release.event": {
182
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
183
+ eventSchema: GITHUB_RELEASE_EVENT_SCHEMA,
184
+ },
185
+ "github.release.published": {
186
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
187
+ eventSchema: GITHUB_RELEASE_PUBLISHED_EVENT_SCHEMA,
188
+ },
189
+ "github.workflow-run.cancelled": {
190
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
191
+ eventSchema: GITHUB_WORKFLOW_RUN_CANCELLED_EVENT_SCHEMA,
192
+ },
193
+ "github.workflow-run.completed": {
194
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
195
+ eventSchema: GITHUB_WORKFLOW_RUN_COMPLETED_EVENT_SCHEMA,
196
+ },
197
+ "github.workflow-run.event": {
198
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
199
+ eventSchema: GITHUB_WORKFLOW_RUN_EVENT_SCHEMA,
200
+ },
201
+ "github.workflow-run.failed": {
202
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
203
+ eventSchema: GITHUB_WORKFLOW_RUN_FAILED_EVENT_SCHEMA,
204
+ },
205
+ "github.workflow-run.requested": {
206
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
207
+ eventSchema: GITHUB_WORKFLOW_RUN_REQUESTED_EVENT_SCHEMA,
208
+ },
209
+ "github.workflow-run.started": {
210
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
211
+ eventSchema: GITHUB_WORKFLOW_RUN_STARTED_EVENT_SCHEMA,
212
+ },
213
+ "github.workflow-run.succeeded": {
214
+ configSchema: GITHUB_TRIGGER_CONFIG_SCHEMA,
215
+ eventSchema: GITHUB_WORKFLOW_RUN_SUCCEEDED_EVENT_SCHEMA,
216
+ },
217
+ }
@@ -0,0 +1,435 @@
1
+ import type { Encodable } from "@automate.ax/codec"
2
+ import type { webhooks } from "@octokit/openapi-webhooks-types"
3
+ import type { Octokit } from "@octokit/rest"
4
+ import { z } from "zod"
5
+
6
+ const GITHUB_EVENT_BASE_SCHEMA = z.looseObject({
7
+ installation: z.looseObject({ id: z.number().int().positive() }),
8
+ repository: z.looseObject({
9
+ full_name: z.string(),
10
+ id: z.number().int().positive(),
11
+ }),
12
+ sender: z.looseObject({
13
+ id: z.number().int().positive(),
14
+ login: z.string(),
15
+ }),
16
+ })
17
+ const GITHUB_ISSUE_EVENT_BASE_SCHEMA = GITHUB_EVENT_BASE_SCHEMA.extend({
18
+ action: z.string(),
19
+ issue: z.looseObject({ id: z.number(), number: z.number().int() }),
20
+ })
21
+ const GITHUB_PULL_REQUEST_EVENT_BASE_SCHEMA = GITHUB_EVENT_BASE_SCHEMA.extend({
22
+ action: z.string(),
23
+ pull_request: z.looseObject({
24
+ id: z.number(),
25
+ merged: z.boolean(),
26
+ number: z.number().int(),
27
+ }),
28
+ })
29
+ const GITHUB_PULL_REQUEST_REVIEW_EVENT_BASE_SCHEMA =
30
+ GITHUB_PULL_REQUEST_EVENT_BASE_SCHEMA.extend({
31
+ review: z.looseObject({ id: z.number() }),
32
+ })
33
+ const GITHUB_PUSH_EVENT_BASE_SCHEMA = GITHUB_EVENT_BASE_SCHEMA.extend({
34
+ after: z.string(),
35
+ before: z.string(),
36
+ ref: z.string(),
37
+ })
38
+ const GITHUB_RELEASE_EVENT_BASE_SCHEMA = GITHUB_EVENT_BASE_SCHEMA.extend({
39
+ action: z.string(),
40
+ release: z.looseObject({ id: z.number(), tag_name: z.string() }),
41
+ })
42
+ const GITHUB_WORKFLOW_RUN_EVENT_BASE_SCHEMA = GITHUB_EVENT_BASE_SCHEMA.extend({
43
+ action: z.string(),
44
+ workflow_run: z.looseObject({
45
+ conclusion: z.string().nullable(),
46
+ id: z.number(),
47
+ }),
48
+ })
49
+ const GITHUB_ISSUE_BASE_SCHEMA = z.looseObject({
50
+ id: z.number(),
51
+ number: z.number().int(),
52
+ title: z.string(),
53
+ })
54
+ const GITHUB_PULL_REQUEST_BASE_SCHEMA = GITHUB_ISSUE_BASE_SCHEMA.extend({
55
+ head: z.looseObject({ ref: z.string(), sha: z.string() }),
56
+ })
57
+ const GITHUB_ISSUE_COMMENT_BASE_SCHEMA = z.looseObject({
58
+ body: z.string().nullable(),
59
+ id: z.number(),
60
+ })
61
+ const GITHUB_PULL_REQUEST_REVIEW_BASE_SCHEMA = z.looseObject({
62
+ id: z.number(),
63
+ state: z.string(),
64
+ })
65
+
66
+ type GitHubWebhookPayload<TKey extends keyof webhooks> =
67
+ webhooks[TKey]["post"] extends {
68
+ requestBody: {
69
+ content: { "application/json": infer TPayload }
70
+ }
71
+ }
72
+ ? TPayload & Record<string, Encodable>
73
+ : never
74
+
75
+ /** Official GitHub issue webhook payload union. */
76
+ export type GitHubIssueEvent = GitHubWebhookPayload<
77
+ Extract<keyof webhooks, `issues-${string}`>
78
+ >
79
+
80
+ /** Official GitHub pull request webhook payload union. */
81
+ export type GitHubPullRequestEvent = GitHubWebhookPayload<
82
+ Extract<keyof webhooks, `pull-request-${string}`>
83
+ >
84
+
85
+ /** Official GitHub pull request review webhook payload union. */
86
+ export type GitHubPullRequestReviewEvent = GitHubWebhookPayload<
87
+ Extract<keyof webhooks, `pull-request-review-${string}`>
88
+ >
89
+
90
+ /** Official GitHub push webhook payload. */
91
+ export type GitHubPushEvent = GitHubWebhookPayload<"push">
92
+
93
+ /** Official GitHub release webhook payload union. */
94
+ export type GitHubReleaseEvent = GitHubWebhookPayload<
95
+ Extract<keyof webhooks, `release-${string}`>
96
+ >
97
+
98
+ /** Official GitHub workflow run webhook payload union. */
99
+ export type GitHubWorkflowRunEvent = GitHubWebhookPayload<
100
+ Extract<keyof webhooks, `workflow-run-${string}`>
101
+ >
102
+
103
+ /** GitHub issue-opened webhook payload. */
104
+ export type GitHubIssueOpenedEvent = GitHubWebhookPayload<"issues-opened">
105
+
106
+ /** GitHub issue-reopened webhook payload. */
107
+ export type GitHubIssueReopenedEvent = GitHubWebhookPayload<"issues-reopened">
108
+
109
+ /** GitHub issue-closed webhook payload. */
110
+ export type GitHubIssueClosedEvent = GitHubWebhookPayload<"issues-closed">
111
+
112
+ /** GitHub pull-request-opened webhook payload. */
113
+ export type GitHubPullRequestOpenedEvent =
114
+ GitHubWebhookPayload<"pull-request-opened">
115
+
116
+ /** GitHub pull-request-ready-for-review webhook payload. */
117
+ export type GitHubPullRequestReadyForReviewEvent =
118
+ GitHubWebhookPayload<"pull-request-ready-for-review">
119
+
120
+ /** GitHub pull-request-synchronize webhook payload. */
121
+ export type GitHubPullRequestSynchronizedEvent =
122
+ GitHubWebhookPayload<"pull-request-synchronize">
123
+
124
+ /** GitHub unmerged pull-request-closed webhook payload. */
125
+ export type GitHubPullRequestClosedEvent =
126
+ GitHubWebhookPayload<"pull-request-closed"> & {
127
+ pull_request: GitHubWebhookPayload<"pull-request-closed">["pull_request"] & {
128
+ merged: false
129
+ }
130
+ }
131
+
132
+ /** GitHub merged pull-request-closed webhook payload. */
133
+ export type GitHubPullRequestMergedEvent =
134
+ GitHubWebhookPayload<"pull-request-closed"> & {
135
+ pull_request: GitHubWebhookPayload<"pull-request-closed">["pull_request"] & {
136
+ merged: true
137
+ }
138
+ }
139
+
140
+ /** GitHub pull-request-review-submitted webhook payload. */
141
+ export type GitHubPullRequestReviewSubmittedEvent =
142
+ GitHubWebhookPayload<"pull-request-review-submitted">
143
+
144
+ /** Submitted GitHub pull request review with an approved state. */
145
+ export type GitHubPullRequestReviewApprovedEvent =
146
+ GitHubPullRequestReviewSubmittedEvent & {
147
+ review: GitHubPullRequestReviewSubmittedEvent["review"] & {
148
+ state: "approved"
149
+ }
150
+ }
151
+
152
+ /** Submitted GitHub pull request review requesting changes. */
153
+ export type GitHubPullRequestReviewChangesRequestedEvent =
154
+ GitHubPullRequestReviewSubmittedEvent & {
155
+ review: GitHubPullRequestReviewSubmittedEvent["review"] & {
156
+ state: "changes_requested"
157
+ }
158
+ }
159
+
160
+ /** GitHub pull-request-review-dismissed webhook payload. */
161
+ export type GitHubPullRequestReviewDismissedEvent =
162
+ GitHubWebhookPayload<"pull-request-review-dismissed">
163
+
164
+ /** GitHub workflow-run-requested webhook payload. */
165
+ export type GitHubWorkflowRunRequestedEvent =
166
+ GitHubWebhookPayload<"workflow-run-requested">
167
+
168
+ /** GitHub workflow-run-in-progress webhook payload. */
169
+ export type GitHubWorkflowRunStartedEvent =
170
+ GitHubWebhookPayload<"workflow-run-in-progress">
171
+
172
+ /** GitHub workflow-run-completed webhook payload. */
173
+ export type GitHubWorkflowRunCompletedEvent =
174
+ GitHubWebhookPayload<"workflow-run-completed">
175
+
176
+ /** Completed GitHub workflow run with a successful conclusion. */
177
+ export type GitHubWorkflowRunSucceededEvent =
178
+ GitHubWorkflowRunCompletedEvent & {
179
+ workflow_run: GitHubWorkflowRunCompletedEvent["workflow_run"] & {
180
+ conclusion: "success"
181
+ }
182
+ }
183
+
184
+ /** Completed GitHub workflow run with a failure conclusion. */
185
+ export type GitHubWorkflowRunFailedEvent = GitHubWorkflowRunCompletedEvent & {
186
+ workflow_run: GitHubWorkflowRunCompletedEvent["workflow_run"] & {
187
+ conclusion: "failure"
188
+ }
189
+ }
190
+
191
+ /** Completed GitHub workflow run with a cancelled conclusion. */
192
+ export type GitHubWorkflowRunCancelledEvent =
193
+ GitHubWorkflowRunCompletedEvent & {
194
+ workflow_run: GitHubWorkflowRunCompletedEvent["workflow_run"] & {
195
+ conclusion: "cancelled"
196
+ }
197
+ }
198
+
199
+ /** GitHub release-published webhook payload. */
200
+ export type GitHubReleasePublishedEvent =
201
+ GitHubWebhookPayload<"release-published">
202
+
203
+ /** Octokit issue response kept aligned with the installed SDK version. */
204
+ type GitHubIssue = Awaited<
205
+ ReturnType<Octokit["rest"]["issues"]["get"]>
206
+ >["data"] &
207
+ Encodable
208
+
209
+ /** Octokit pull request response kept aligned with the installed SDK version. */
210
+ type GitHubPullRequest = Awaited<
211
+ ReturnType<Octokit["rest"]["pulls"]["get"]>
212
+ >["data"] &
213
+ Encodable
214
+
215
+ /** Octokit pull request list item kept aligned with the installed SDK version. */
216
+ type GitHubPullRequestSummary = Awaited<
217
+ ReturnType<Octokit["rest"]["pulls"]["list"]>
218
+ >["data"][number] &
219
+ Encodable
220
+
221
+ /** Octokit issue comment response kept aligned with the installed SDK version. */
222
+ type GitHubIssueComment = Awaited<
223
+ ReturnType<Octokit["rest"]["issues"]["createComment"]>
224
+ >["data"] &
225
+ Encodable
226
+
227
+ /**
228
+ * Octokit pull request review response kept aligned with the installed SDK
229
+ * version.
230
+ */
231
+ type GitHubPullRequestReview = Awaited<
232
+ ReturnType<Octokit["rest"]["pulls"]["createReview"]>
233
+ >["data"] &
234
+ Encodable
235
+
236
+ export const GITHUB_ISSUE_EVENT_SCHEMA: z.ZodType<GitHubIssueEvent> =
237
+ z.custom<GitHubIssueEvent>(
238
+ (value) => GITHUB_ISSUE_EVENT_BASE_SCHEMA.safeParse(value).success,
239
+ )
240
+ export const GITHUB_PULL_REQUEST_EVENT_SCHEMA: z.ZodType<GitHubPullRequestEvent> =
241
+ z.custom<GitHubPullRequestEvent>(
242
+ (value) => GITHUB_PULL_REQUEST_EVENT_BASE_SCHEMA.safeParse(value).success,
243
+ )
244
+ export const GITHUB_PULL_REQUEST_REVIEW_EVENT_SCHEMA: z.ZodType<GitHubPullRequestReviewEvent> =
245
+ z.custom<GitHubPullRequestReviewEvent>(
246
+ (value) =>
247
+ GITHUB_PULL_REQUEST_REVIEW_EVENT_BASE_SCHEMA.safeParse(value).success,
248
+ )
249
+ export const GITHUB_PUSH_EVENT_SCHEMA: z.ZodType<GitHubPushEvent> =
250
+ z.custom<GitHubPushEvent>(
251
+ (value) => GITHUB_PUSH_EVENT_BASE_SCHEMA.safeParse(value).success,
252
+ )
253
+ export const GITHUB_RELEASE_EVENT_SCHEMA: z.ZodType<GitHubReleaseEvent> =
254
+ z.custom<GitHubReleaseEvent>(
255
+ (value) => GITHUB_RELEASE_EVENT_BASE_SCHEMA.safeParse(value).success,
256
+ )
257
+ export const GITHUB_WORKFLOW_RUN_EVENT_SCHEMA: z.ZodType<GitHubWorkflowRunEvent> =
258
+ z.custom<GitHubWorkflowRunEvent>(
259
+ (value) => GITHUB_WORKFLOW_RUN_EVENT_BASE_SCHEMA.safeParse(value).success,
260
+ )
261
+
262
+ export const GITHUB_ISSUE_OPENED_EVENT_SCHEMA = githubSemanticEventSchema<
263
+ GitHubIssueEvent,
264
+ GitHubIssueOpenedEvent
265
+ >(GITHUB_ISSUE_EVENT_SCHEMA, (event) => event.action === "opened")
266
+ export const GITHUB_ISSUE_REOPENED_EVENT_SCHEMA = githubSemanticEventSchema<
267
+ GitHubIssueEvent,
268
+ GitHubIssueReopenedEvent
269
+ >(GITHUB_ISSUE_EVENT_SCHEMA, (event) => event.action === "reopened")
270
+ export const GITHUB_ISSUE_CLOSED_EVENT_SCHEMA = githubSemanticEventSchema<
271
+ GitHubIssueEvent,
272
+ GitHubIssueClosedEvent
273
+ >(GITHUB_ISSUE_EVENT_SCHEMA, (event) => event.action === "closed")
274
+ export const GITHUB_PULL_REQUEST_OPENED_EVENT_SCHEMA =
275
+ githubSemanticEventSchema<
276
+ GitHubPullRequestEvent,
277
+ GitHubPullRequestOpenedEvent
278
+ >(GITHUB_PULL_REQUEST_EVENT_SCHEMA, (event) => event.action === "opened")
279
+ export const GITHUB_PULL_REQUEST_READY_FOR_REVIEW_EVENT_SCHEMA =
280
+ githubSemanticEventSchema<
281
+ GitHubPullRequestEvent,
282
+ GitHubPullRequestReadyForReviewEvent
283
+ >(
284
+ GITHUB_PULL_REQUEST_EVENT_SCHEMA,
285
+ (event) => event.action === "ready_for_review",
286
+ )
287
+ export const GITHUB_PULL_REQUEST_SYNCHRONIZED_EVENT_SCHEMA =
288
+ githubSemanticEventSchema<
289
+ GitHubPullRequestEvent,
290
+ GitHubPullRequestSynchronizedEvent
291
+ >(GITHUB_PULL_REQUEST_EVENT_SCHEMA, (event) => event.action === "synchronize")
292
+ export const GITHUB_PULL_REQUEST_CLOSED_EVENT_SCHEMA =
293
+ githubSemanticEventSchema<
294
+ GitHubPullRequestEvent,
295
+ GitHubPullRequestClosedEvent
296
+ >(
297
+ GITHUB_PULL_REQUEST_EVENT_SCHEMA,
298
+ (event) => event.action === "closed" && !event.pull_request.merged,
299
+ )
300
+ export const GITHUB_PULL_REQUEST_MERGED_EVENT_SCHEMA =
301
+ githubSemanticEventSchema<
302
+ GitHubPullRequestEvent,
303
+ GitHubPullRequestMergedEvent
304
+ >(
305
+ GITHUB_PULL_REQUEST_EVENT_SCHEMA,
306
+ (event) => event.action === "closed" && event.pull_request.merged,
307
+ )
308
+ export const GITHUB_PULL_REQUEST_REVIEW_SUBMITTED_EVENT_SCHEMA =
309
+ githubSemanticEventSchema<
310
+ GitHubPullRequestReviewEvent,
311
+ GitHubPullRequestReviewSubmittedEvent
312
+ >(
313
+ GITHUB_PULL_REQUEST_REVIEW_EVENT_SCHEMA,
314
+ (event) => event.action === "submitted",
315
+ )
316
+ export const GITHUB_PULL_REQUEST_REVIEW_APPROVED_EVENT_SCHEMA =
317
+ githubSemanticEventSchema<
318
+ GitHubPullRequestReviewEvent,
319
+ GitHubPullRequestReviewApprovedEvent
320
+ >(
321
+ GITHUB_PULL_REQUEST_REVIEW_EVENT_SCHEMA,
322
+ (event) =>
323
+ event.action === "submitted" && event.review.state === "approved",
324
+ )
325
+ export const GITHUB_PULL_REQUEST_REVIEW_CHANGES_REQUESTED_EVENT_SCHEMA =
326
+ githubSemanticEventSchema<
327
+ GitHubPullRequestReviewEvent,
328
+ GitHubPullRequestReviewChangesRequestedEvent
329
+ >(
330
+ GITHUB_PULL_REQUEST_REVIEW_EVENT_SCHEMA,
331
+ (event) =>
332
+ event.action === "submitted" &&
333
+ event.review.state === "changes_requested",
334
+ )
335
+ export const GITHUB_PULL_REQUEST_REVIEW_DISMISSED_EVENT_SCHEMA =
336
+ githubSemanticEventSchema<
337
+ GitHubPullRequestReviewEvent,
338
+ GitHubPullRequestReviewDismissedEvent
339
+ >(
340
+ GITHUB_PULL_REQUEST_REVIEW_EVENT_SCHEMA,
341
+ (event) => event.action === "dismissed",
342
+ )
343
+ export const GITHUB_WORKFLOW_RUN_REQUESTED_EVENT_SCHEMA =
344
+ githubSemanticEventSchema<
345
+ GitHubWorkflowRunEvent,
346
+ GitHubWorkflowRunRequestedEvent
347
+ >(GITHUB_WORKFLOW_RUN_EVENT_SCHEMA, (event) => event.action === "requested")
348
+ export const GITHUB_WORKFLOW_RUN_STARTED_EVENT_SCHEMA =
349
+ githubSemanticEventSchema<
350
+ GitHubWorkflowRunEvent,
351
+ GitHubWorkflowRunStartedEvent
352
+ >(GITHUB_WORKFLOW_RUN_EVENT_SCHEMA, (event) => event.action === "in_progress")
353
+ export const GITHUB_WORKFLOW_RUN_COMPLETED_EVENT_SCHEMA =
354
+ githubSemanticEventSchema<
355
+ GitHubWorkflowRunEvent,
356
+ GitHubWorkflowRunCompletedEvent
357
+ >(GITHUB_WORKFLOW_RUN_EVENT_SCHEMA, (event) => event.action === "completed")
358
+ export const GITHUB_WORKFLOW_RUN_SUCCEEDED_EVENT_SCHEMA =
359
+ githubSemanticEventSchema<
360
+ GitHubWorkflowRunEvent,
361
+ GitHubWorkflowRunSucceededEvent
362
+ >(
363
+ GITHUB_WORKFLOW_RUN_EVENT_SCHEMA,
364
+ (event) =>
365
+ event.action === "completed" &&
366
+ event.workflow_run.conclusion === "success",
367
+ )
368
+ export const GITHUB_WORKFLOW_RUN_FAILED_EVENT_SCHEMA =
369
+ githubSemanticEventSchema<
370
+ GitHubWorkflowRunEvent,
371
+ GitHubWorkflowRunFailedEvent
372
+ >(
373
+ GITHUB_WORKFLOW_RUN_EVENT_SCHEMA,
374
+ (event) =>
375
+ event.action === "completed" &&
376
+ event.workflow_run.conclusion === "failure",
377
+ )
378
+ export const GITHUB_WORKFLOW_RUN_CANCELLED_EVENT_SCHEMA =
379
+ githubSemanticEventSchema<
380
+ GitHubWorkflowRunEvent,
381
+ GitHubWorkflowRunCancelledEvent
382
+ >(
383
+ GITHUB_WORKFLOW_RUN_EVENT_SCHEMA,
384
+ (event) =>
385
+ event.action === "completed" &&
386
+ event.workflow_run.conclusion === "cancelled",
387
+ )
388
+ export const GITHUB_RELEASE_PUBLISHED_EVENT_SCHEMA = githubSemanticEventSchema<
389
+ GitHubReleaseEvent,
390
+ GitHubReleasePublishedEvent
391
+ >(GITHUB_RELEASE_EVENT_SCHEMA, (event) => event.action === "published")
392
+
393
+ export const GITHUB_ISSUE_SCHEMA = z.custom<GitHubIssue>(
394
+ (value) => GITHUB_ISSUE_BASE_SCHEMA.safeParse(value).success,
395
+ )
396
+ export const GITHUB_PULL_REQUEST_SCHEMA = z.custom<GitHubPullRequest>(
397
+ (value) => GITHUB_PULL_REQUEST_BASE_SCHEMA.safeParse(value).success,
398
+ )
399
+ export const GITHUB_PULL_REQUEST_SUMMARY_SCHEMA =
400
+ z.custom<GitHubPullRequestSummary>(
401
+ (value) => GITHUB_PULL_REQUEST_BASE_SCHEMA.safeParse(value).success,
402
+ )
403
+ export const GITHUB_ISSUE_COMMENT_SCHEMA = z.custom<GitHubIssueComment>(
404
+ (value) => GITHUB_ISSUE_COMMENT_BASE_SCHEMA.safeParse(value).success,
405
+ )
406
+ export const GITHUB_PULL_REQUEST_REVIEW_SCHEMA =
407
+ z.custom<GitHubPullRequestReview>(
408
+ (value) => GITHUB_PULL_REQUEST_REVIEW_BASE_SCHEMA.safeParse(value).success,
409
+ )
410
+ export const GITHUB_PULL_REQUEST_MERGE_SCHEMA = z.object({
411
+ /** Provider status text describing the merge result. */
412
+ message: z.string(),
413
+
414
+ /** Whether GitHub merged the pull request. */
415
+ merged: z.boolean(),
416
+
417
+ /** Merge commit SHA, when GitHub created one. */
418
+ sha: z.string().nullable(),
419
+ })
420
+
421
+ /**
422
+ * Narrows a validated broad GitHub webhook family to one semantic event.
423
+ *
424
+ * @param schema - Broad webhook-family schema.
425
+ * @param matches - Semantic action or status classifier.
426
+ */
427
+ function githubSemanticEventSchema<TEvent, TSemanticEvent extends TEvent>(
428
+ schema: z.ZodType<TEvent>,
429
+ matches: (event: TEvent) => boolean,
430
+ ): z.ZodType<TSemanticEvent> {
431
+ return z.custom<TSemanticEvent>((value) => {
432
+ const event = schema.safeParse(value)
433
+ return event.success && matches(event.data)
434
+ })
435
+ }