@automate.ax/integration-contracts 0.128.0 → 0.130.1

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.
@@ -109,9 +109,9 @@ export declare const SLACK_MESSAGE_SCHEMA: z.ZodObject<{
109
109
  export declare const SLACK_REACTION_ITEM_SCHEMA: z.ZodDiscriminatedUnion<[z.ZodObject<{
110
110
  conversationId: z.ZodString;
111
111
  conversationType: z.ZodOptional<z.ZodEnum<{
112
+ channel: "channel";
112
113
  group: "group";
113
114
  im: "im";
114
- channel: "channel";
115
115
  mpim: "mpim";
116
116
  }>>;
117
117
  messageTimestamp: z.ZodString;
@@ -5,6 +5,7 @@ import type { automateTriggerContracts } from "./automate/index.js";
5
5
  import type { asanaTriggerContracts } from "./asana/index.js";
6
6
  import type { brevoTriggerContracts } from "./brevo/index.js";
7
7
  import type { convexTriggerContracts } from "./convex/index.js";
8
+ import type { discordTriggerContracts } from "./discord/index.js";
8
9
  import type { closeTriggerContracts } from "./close/index.js";
9
10
  import type { cloudflareTriggerContracts } from "./cloudflare/index.js";
10
11
  import type { githubTriggerContracts } from "./github/index.js";
@@ -29,7 +30,7 @@ import type { vercelTriggerContracts } from "./vercel/index.js";
29
30
  import type { webflowTriggerContracts } from "./webflow/index.js";
30
31
  import type { whatsappTriggerContracts } from "./whatsapp/index.js";
31
32
  import type { z } from "zod";
32
- export type TriggerContractMap = typeof airtableTriggerContracts & typeof apifyTriggerContracts & typeof axiomTriggerContracts & typeof automateTriggerContracts & typeof asanaTriggerContracts & typeof brevoTriggerContracts & typeof convexTriggerContracts & typeof closeTriggerContracts & typeof cloudflareTriggerContracts & typeof githubTriggerContracts & typeof gmailTriggerContracts & typeof googleCalendarTriggerContracts & typeof googleDriveTriggerContracts & typeof googleFormsTriggerContracts & typeof googleMeetTriggerContracts & typeof googleSheetsTriggerContracts & typeof hubspotTriggerContracts & typeof linearTriggerContracts & typeof millionVerifierTriggerContracts & typeof notionTriggerContracts & typeof outlookTriggerContracts & typeof redditTriggerContracts & typeof resendTriggerContracts & typeof slackTriggerContracts & typeof stripeTriggerContracts & typeof teamsTriggerContracts & typeof trelloTriggerContracts & typeof vercelTriggerContracts & typeof webflowTriggerContracts & typeof whatsappTriggerContracts;
33
+ export type TriggerContractMap = typeof airtableTriggerContracts & typeof apifyTriggerContracts & typeof axiomTriggerContracts & typeof automateTriggerContracts & typeof asanaTriggerContracts & typeof brevoTriggerContracts & typeof convexTriggerContracts & typeof discordTriggerContracts & typeof closeTriggerContracts & typeof cloudflareTriggerContracts & typeof githubTriggerContracts & typeof gmailTriggerContracts & typeof googleCalendarTriggerContracts & typeof googleDriveTriggerContracts & typeof googleFormsTriggerContracts & typeof googleMeetTriggerContracts & typeof googleSheetsTriggerContracts & typeof hubspotTriggerContracts & typeof linearTriggerContracts & typeof millionVerifierTriggerContracts & typeof notionTriggerContracts & typeof outlookTriggerContracts & typeof redditTriggerContracts & typeof resendTriggerContracts & typeof slackTriggerContracts & typeof stripeTriggerContracts & typeof teamsTriggerContracts & typeof trelloTriggerContracts & typeof vercelTriggerContracts & typeof webflowTriggerContracts & typeof whatsappTriggerContracts;
33
34
  export type IntegrationTriggerType = keyof TriggerContractMap;
34
35
  /** Canonical authoring configuration for one integration trigger type. */
35
36
  export type TriggerConfig<TType extends IntegrationTriggerType> = z.input<TriggerContractMap[TType]["configSchema"]> extends Record<string, never> ? object : z.input<TriggerContractMap[TType]["configSchema"]>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automate.ax/integration-contracts",
3
- "version": "0.128.0",
3
+ "version": "0.130.1",
4
4
  "description": "Shared integration payload contracts and provider primitives for Automate.ax.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -26,6 +26,7 @@
26
26
  "./brevo": "./src/brevo/index.ts",
27
27
  "./cloudflare": "./src/cloudflare/index.ts",
28
28
  "./convex": "./src/convex/index.ts",
29
+ "./discord": "./src/discord/index.ts",
29
30
  "./close": "./src/close/index.ts",
30
31
  "./gmail": "./src/gmail/index.ts",
31
32
  "./google-calendar": "./src/google-calendar/index.ts",
@@ -58,7 +59,7 @@
58
59
  }
59
60
  },
60
61
  "dependencies": {
61
- "@automate.ax/codec": "0.128.0",
62
+ "@automate.ax/codec": "0.130.1",
62
63
  "@cfworker/json-schema": "^4.1.1",
63
64
  "@googleapis/calendar": "^15.0.0",
64
65
  "@googleapis/forms": "^6.0.1",
@@ -149,6 +150,11 @@
149
150
  "types": "./dist/convex/index.d.ts",
150
151
  "default": "./dist/convex/index.js"
151
152
  },
153
+ "./discord": {
154
+ "bun": "./src/discord/index.ts",
155
+ "types": "./dist/discord/index.d.ts",
156
+ "default": "./dist/discord/index.js"
157
+ },
152
158
  "./close": {
153
159
  "bun": "./src/close/index.ts",
154
160
  "types": "./dist/close/index.d.ts",
@@ -39,8 +39,8 @@ const APIFY_BUILD_OPTIONS_SCHEMA = z.looseObject({
39
39
  })
40
40
  const APIFY_BUILD_STATS_SCHEMA = z.looseObject({
41
41
  computeUnits: z.number().nonnegative(),
42
- durationMillis: z.number().int().nonnegative(),
43
- runTimeSecs: z.number().nonnegative(),
42
+ durationMillis: z.number().int().nonnegative().optional(),
43
+ runTimeSecs: z.number().nonnegative().optional(),
44
44
  })
45
45
 
46
46
  const APIFY_RUN_WIRE_SCHEMA = z.looseObject({
@@ -137,8 +137,8 @@ export const APIFY_BUILD_SCHEMA = z.object({
137
137
  stats: z
138
138
  .object({
139
139
  computeUnits: z.number().nonnegative(),
140
- durationMillis: z.number().int().nonnegative(),
141
- runTimeSecs: z.number().nonnegative(),
140
+ durationMillis: z.number().int().nonnegative().optional(),
141
+ runTimeSecs: z.number().nonnegative().optional(),
142
142
  })
143
143
  .nullable()
144
144
  .optional(),
@@ -0,0 +1,41 @@
1
+ import * as z from "zod"
2
+ import {
3
+ DISCORD_APPLICATION_AUTHORIZED_EVENT_SCHEMA,
4
+ DISCORD_APPLICATION_DEAUTHORIZED_EVENT_SCHEMA,
5
+ DISCORD_ENTITLEMENT_CREATED_EVENT_SCHEMA,
6
+ DISCORD_ENTITLEMENT_DELETED_EVENT_SCHEMA,
7
+ DISCORD_ENTITLEMENT_UPDATED_EVENT_SCHEMA,
8
+ DISCORD_WEBHOOK_EVENT_SCHEMA,
9
+ } from "./schemas"
10
+
11
+ export * from "./provider"
12
+ export * from "./schemas"
13
+
14
+ export const DISCORD_TRIGGER_CONFIG_SCHEMA = z.object({})
15
+
16
+ export const discordTriggerContracts = {
17
+ "discord.application.authorized": {
18
+ configSchema: DISCORD_TRIGGER_CONFIG_SCHEMA,
19
+ eventSchema: DISCORD_APPLICATION_AUTHORIZED_EVENT_SCHEMA,
20
+ },
21
+ "discord.application.deauthorized": {
22
+ configSchema: DISCORD_TRIGGER_CONFIG_SCHEMA,
23
+ eventSchema: DISCORD_APPLICATION_DEAUTHORIZED_EVENT_SCHEMA,
24
+ },
25
+ "discord.entitlement.created": {
26
+ configSchema: DISCORD_TRIGGER_CONFIG_SCHEMA,
27
+ eventSchema: DISCORD_ENTITLEMENT_CREATED_EVENT_SCHEMA,
28
+ },
29
+ "discord.entitlement.deleted": {
30
+ configSchema: DISCORD_TRIGGER_CONFIG_SCHEMA,
31
+ eventSchema: DISCORD_ENTITLEMENT_DELETED_EVENT_SCHEMA,
32
+ },
33
+ "discord.entitlement.updated": {
34
+ configSchema: DISCORD_TRIGGER_CONFIG_SCHEMA,
35
+ eventSchema: DISCORD_ENTITLEMENT_UPDATED_EVENT_SCHEMA,
36
+ },
37
+ "discord.webhook.event": {
38
+ configSchema: DISCORD_TRIGGER_CONFIG_SCHEMA,
39
+ eventSchema: DISCORD_WEBHOOK_EVENT_SCHEMA,
40
+ },
41
+ } as const
@@ -0,0 +1,539 @@
1
+ import * as z from "zod"
2
+ import {
3
+ DISCORD_APPLICATION_AUTHORIZATION_SCHEMA,
4
+ DISCORD_APPLICATION_DEAUTHORIZATION_SCHEMA,
5
+ DISCORD_ACTIVE_THREADS_SCHEMA,
6
+ DISCORD_AUTOMOD_ACTION_SCHEMA,
7
+ DISCORD_AUTOMOD_RULE_SCHEMA,
8
+ DISCORD_BAN_SCHEMA,
9
+ DISCORD_CHANNEL_SCHEMA,
10
+ DISCORD_EMOJI_SCHEMA,
11
+ DISCORD_ENTITLEMENT_SCHEMA,
12
+ DISCORD_GUILD_SCHEMA,
13
+ DISCORD_INVITE_SCHEMA,
14
+ DISCORD_MEMBER_SCHEMA,
15
+ DISCORD_MESSAGE_SCHEMA,
16
+ DISCORD_POLL_SCHEMA,
17
+ DISCORD_ROLE_SCHEMA,
18
+ DISCORD_SCHEDULED_EVENT_SCHEMA,
19
+ DISCORD_THREAD_MEMBER_SCHEMA,
20
+ DISCORD_USER_SCHEMA,
21
+ DISCORD_WEBHOOK_SCHEMA,
22
+ } from "./schemas"
23
+
24
+ export const DISCORD_PROVIDER_USER_SCHEMA = z.looseObject({
25
+ avatar: z.string().nullable().optional(),
26
+ bot: z.boolean().optional(),
27
+ discriminator: z.string(),
28
+ global_name: z.string().nullable().optional(),
29
+ id: z.string(),
30
+ username: z.string(),
31
+ })
32
+ export const DISCORD_PROVIDER_GUILD_SCHEMA = z.looseObject({
33
+ approximate_member_count: z.number().int().nonnegative().optional(),
34
+ approximate_presence_count: z.number().int().nonnegative().optional(),
35
+ features: z.string().array().prefault([]),
36
+ icon: z.string().nullable().optional(),
37
+ id: z.string(),
38
+ name: z.string(),
39
+ owner: z.boolean().optional(),
40
+ permissions: z.string().optional(),
41
+ })
42
+ export const DISCORD_PROVIDER_CHANNEL_SCHEMA = z.looseObject({
43
+ guild_id: z.string().optional(),
44
+ id: z.string(),
45
+ name: z.string().nullable().optional(),
46
+ nsfw: z.boolean().optional(),
47
+ parent_id: z.string().nullable().optional(),
48
+ position: z.number().int().optional(),
49
+ topic: z.string().nullable().optional(),
50
+ type: z.number().int(),
51
+ })
52
+ export const DISCORD_PROVIDER_THREAD_MEMBER_SCHEMA = z.looseObject({
53
+ flags: z.number().int(),
54
+ id: z.string().optional(),
55
+ join_timestamp: z.string(),
56
+ user_id: z.string().optional(),
57
+ })
58
+ export const DISCORD_PROVIDER_ACTIVE_THREADS_SCHEMA = z.looseObject({
59
+ members: DISCORD_PROVIDER_THREAD_MEMBER_SCHEMA.array(),
60
+ threads: DISCORD_PROVIDER_CHANNEL_SCHEMA.array(),
61
+ })
62
+ export const DISCORD_PROVIDER_POLL_SCHEMA = z.looseObject({
63
+ allow_multiselect: z.boolean(),
64
+ answers: z
65
+ .looseObject({
66
+ answer_id: z.number().int().positive(),
67
+ poll_media: z.looseObject({
68
+ emoji: z
69
+ .looseObject({
70
+ animated: z.boolean().optional(),
71
+ id: z.string().nullable().optional(),
72
+ name: z.string().nullable().optional(),
73
+ })
74
+ .optional(),
75
+ text: z.string().optional(),
76
+ }),
77
+ })
78
+ .array(),
79
+ expiry: z.string(),
80
+ layout_type: z.number().int(),
81
+ question: z.looseObject({
82
+ emoji: z
83
+ .looseObject({
84
+ animated: z.boolean().optional(),
85
+ id: z.string().nullable().optional(),
86
+ name: z.string().nullable().optional(),
87
+ })
88
+ .optional(),
89
+ text: z.string().optional(),
90
+ }),
91
+ results: z
92
+ .looseObject({
93
+ answer_counts: z
94
+ .looseObject({
95
+ count: z.number().int().nonnegative(),
96
+ id: z.number().int().positive(),
97
+ me_voted: z.boolean(),
98
+ })
99
+ .array(),
100
+ is_finalized: z.boolean(),
101
+ })
102
+ .optional(),
103
+ })
104
+ export const DISCORD_PROVIDER_MESSAGE_SCHEMA = z.looseObject({
105
+ author: DISCORD_PROVIDER_USER_SCHEMA,
106
+ channel_id: z.string(),
107
+ content: z.string(),
108
+ edited_timestamp: z.string().nullable().optional(),
109
+ guild_id: z.string().optional(),
110
+ id: z.string(),
111
+ mention_everyone: z.boolean(),
112
+ pinned: z.boolean(),
113
+ poll: DISCORD_PROVIDER_POLL_SCHEMA.optional(),
114
+ timestamp: z.string(),
115
+ tts: z.boolean(),
116
+ type: z.number().int(),
117
+ webhook_id: z.string().optional(),
118
+ })
119
+ export const DISCORD_PROVIDER_MEMBER_SCHEMA = z.looseObject({
120
+ avatar: z.string().nullable().optional(),
121
+ communication_disabled_until: z.string().nullable().optional(),
122
+ deaf: z.boolean().optional(),
123
+ joined_at: z.string().nullable().optional(),
124
+ mute: z.boolean().optional(),
125
+ nick: z.string().nullable().optional(),
126
+ pending: z.boolean().optional(),
127
+ roles: z.string().array(),
128
+ user: DISCORD_PROVIDER_USER_SCHEMA.optional(),
129
+ })
130
+ export const DISCORD_PROVIDER_ROLE_SCHEMA = z.looseObject({
131
+ color: z.number().int(),
132
+ hoist: z.boolean(),
133
+ id: z.string(),
134
+ managed: z.boolean(),
135
+ mentionable: z.boolean(),
136
+ name: z.string(),
137
+ permissions: z.string(),
138
+ position: z.number().int(),
139
+ })
140
+ export const DISCORD_PROVIDER_INVITE_SCHEMA = z.looseObject({
141
+ channel: DISCORD_PROVIDER_CHANNEL_SCHEMA.nullable().optional(),
142
+ code: z.string(),
143
+ guild: DISCORD_PROVIDER_GUILD_SCHEMA.optional(),
144
+ inviter: DISCORD_PROVIDER_USER_SCHEMA.optional(),
145
+ max_age: z.number().optional(),
146
+ max_uses: z.number().optional(),
147
+ temporary: z.boolean().optional(),
148
+ uses: z.number().optional(),
149
+ })
150
+ export const DISCORD_PROVIDER_WEBHOOK_SCHEMA = z.looseObject({
151
+ application_id: z.string().nullable().optional(),
152
+ avatar: z.string().nullable().optional(),
153
+ channel_id: z.string().nullable().optional(),
154
+ guild_id: z.string().nullable().optional(),
155
+ id: z.string(),
156
+ name: z.string().nullable().optional(),
157
+ token: z.string().optional(),
158
+ type: z.number().int(),
159
+ url: z.string().optional(),
160
+ })
161
+ export const DISCORD_PROVIDER_EMOJI_SCHEMA = z.looseObject({
162
+ animated: z.boolean().optional(),
163
+ available: z.boolean().optional(),
164
+ id: z.string().nullable().optional(),
165
+ managed: z.boolean().optional(),
166
+ name: z.string().nullable().optional(),
167
+ require_colons: z.boolean().optional(),
168
+ roles: z.string().array().optional(),
169
+ user: DISCORD_PROVIDER_USER_SCHEMA.optional(),
170
+ })
171
+ export const DISCORD_PROVIDER_AUTOMOD_ACTION_SCHEMA = z.looseObject({
172
+ metadata: z
173
+ .looseObject({
174
+ channel_id: z.string().optional(),
175
+ custom_message: z.string().optional(),
176
+ duration_seconds: z.number().int().positive().optional(),
177
+ })
178
+ .optional(),
179
+ type: z.number().int(),
180
+ })
181
+ export const DISCORD_PROVIDER_AUTOMOD_RULE_SCHEMA = z.looseObject({
182
+ actions: DISCORD_PROVIDER_AUTOMOD_ACTION_SCHEMA.array(),
183
+ creator_id: z.string(),
184
+ enabled: z.boolean(),
185
+ event_type: z.number().int(),
186
+ exempt_channels: z.string().array(),
187
+ exempt_roles: z.string().array(),
188
+ guild_id: z.string(),
189
+ id: z.string(),
190
+ name: z.string(),
191
+ trigger_metadata: z.looseObject({
192
+ allow_list: z.string().array().optional(),
193
+ keyword_filter: z.string().array().optional(),
194
+ mention_raid_protection_enabled: z.boolean().optional(),
195
+ mention_total_limit: z.number().int().nonnegative().optional(),
196
+ presets: z.number().int().array().optional(),
197
+ regex_patterns: z.string().array().optional(),
198
+ }),
199
+ trigger_type: z.number().int(),
200
+ })
201
+ export const DISCORD_PROVIDER_SCHEDULED_EVENT_SCHEMA = z.looseObject({
202
+ channel_id: z.string().nullable().optional(),
203
+ creator_id: z.string().nullable().optional(),
204
+ description: z.string().nullable().optional(),
205
+ entity_id: z.string().nullable().optional(),
206
+ entity_metadata: z
207
+ .looseObject({ location: z.string().optional() })
208
+ .nullable()
209
+ .optional(),
210
+ entity_type: z.number().int(),
211
+ guild_id: z.string(),
212
+ id: z.string(),
213
+ name: z.string(),
214
+ privacy_level: z.number().int(),
215
+ scheduled_end_time: z.string().nullable().optional(),
216
+ scheduled_start_time: z.string(),
217
+ status: z.number().int(),
218
+ user_count: z.number().int().nonnegative().optional(),
219
+ })
220
+ export const DISCORD_PROVIDER_BAN_SCHEMA = z.looseObject({
221
+ reason: z.string().nullable(),
222
+ user: DISCORD_PROVIDER_USER_SCHEMA,
223
+ })
224
+ export const DISCORD_PROVIDER_ENTITLEMENT_SCHEMA = z.looseObject({
225
+ application_id: z.string(),
226
+ consumed: z.boolean().optional(),
227
+ deleted: z.boolean(),
228
+ ends_at: z.string().nullable().optional(),
229
+ gift_code_flags: z.number().int().optional(),
230
+ guild_id: z.string().nullable().optional(),
231
+ id: z.string(),
232
+ promotion_id: z.string().nullable().optional(),
233
+ sku_id: z.string(),
234
+ starts_at: z.string().nullable().optional(),
235
+ subscription_id: z.string().nullable().optional(),
236
+ type: z.number().int(),
237
+ user_id: z.string().nullable().optional(),
238
+ })
239
+
240
+ /** @param value - Provider user payload. */
241
+ export function toDiscordUser(value: unknown) {
242
+ const v = DISCORD_PROVIDER_USER_SCHEMA.parse(value)
243
+ return DISCORD_USER_SCHEMA.parse({
244
+ avatar: v.avatar,
245
+ bot: v.bot,
246
+ discriminator: v.discriminator,
247
+ globalName: v.global_name,
248
+ id: v.id,
249
+ username: v.username,
250
+ })
251
+ }
252
+
253
+ /** @param value - Provider guild payload. */
254
+ export function toDiscordGuild(value: unknown) {
255
+ const v = DISCORD_PROVIDER_GUILD_SCHEMA.parse(value)
256
+ return DISCORD_GUILD_SCHEMA.parse({
257
+ approximateMemberCount: v.approximate_member_count,
258
+ approximatePresenceCount: v.approximate_presence_count,
259
+ features: v.features,
260
+ icon: v.icon,
261
+ id: v.id,
262
+ name: v.name,
263
+ owner: v.owner,
264
+ permissions: v.permissions,
265
+ })
266
+ }
267
+
268
+ /** @param value - Provider channel payload. */
269
+ export function toDiscordChannel(value: unknown) {
270
+ const v = DISCORD_PROVIDER_CHANNEL_SCHEMA.parse(value)
271
+ return DISCORD_CHANNEL_SCHEMA.parse({
272
+ guildId: v.guild_id,
273
+ id: v.id,
274
+ name: v.name,
275
+ nsfw: v.nsfw,
276
+ parentId: v.parent_id,
277
+ position: v.position,
278
+ topic: v.topic,
279
+ type: v.type,
280
+ })
281
+ }
282
+
283
+ /** @param value - Provider thread-member payload. */
284
+ export function toDiscordThreadMember(value: unknown) {
285
+ const v = DISCORD_PROVIDER_THREAD_MEMBER_SCHEMA.parse(value)
286
+ return DISCORD_THREAD_MEMBER_SCHEMA.parse({
287
+ flags: v.flags,
288
+ joinTimestamp: v.join_timestamp,
289
+ threadId: v.id,
290
+ userId: v.user_id,
291
+ })
292
+ }
293
+
294
+ /** @param value - Provider active-thread payload. */
295
+ export function toDiscordActiveThreads(value: unknown) {
296
+ const v = DISCORD_PROVIDER_ACTIVE_THREADS_SCHEMA.parse(value)
297
+ return DISCORD_ACTIVE_THREADS_SCHEMA.parse({
298
+ members: v.members.map(toDiscordThreadMember),
299
+ threads: v.threads.map(toDiscordChannel),
300
+ })
301
+ }
302
+
303
+ /** @param value - Provider message payload. */
304
+ export function toDiscordMessage(value: unknown) {
305
+ const v = DISCORD_PROVIDER_MESSAGE_SCHEMA.parse(value)
306
+ return DISCORD_MESSAGE_SCHEMA.parse({
307
+ author: toDiscordUser(v.author),
308
+ channelId: v.channel_id,
309
+ content: v.content,
310
+ editedTimestamp: v.edited_timestamp,
311
+ guildId: v.guild_id,
312
+ id: v.id,
313
+ mentionEveryone: v.mention_everyone,
314
+ pinned: v.pinned,
315
+ poll: v.poll ? toDiscordPoll(v.poll) : undefined,
316
+ timestamp: v.timestamp,
317
+ tts: v.tts,
318
+ type: v.type,
319
+ webhookId: v.webhook_id,
320
+ })
321
+ }
322
+
323
+ /** @param value - Provider poll payload. */
324
+ export function toDiscordPoll(value: unknown) {
325
+ const v = DISCORD_PROVIDER_POLL_SCHEMA.parse(value)
326
+ return DISCORD_POLL_SCHEMA.parse({
327
+ allowMultiselect: v.allow_multiselect,
328
+ answers: v.answers.map((answer) => ({
329
+ answerId: answer.answer_id,
330
+ pollMedia: answer.poll_media,
331
+ })),
332
+ expiry: v.expiry,
333
+ layoutType: v.layout_type,
334
+ question: v.question,
335
+ results: v.results
336
+ ? {
337
+ answerCounts: v.results.answer_counts.map((count) => ({
338
+ count: count.count,
339
+ id: count.id,
340
+ meVoted: count.me_voted,
341
+ })),
342
+ isFinalized: v.results.is_finalized,
343
+ }
344
+ : undefined,
345
+ })
346
+ }
347
+
348
+ /** @param value - Provider member payload. */
349
+ export function toDiscordMember(value: unknown) {
350
+ const v = DISCORD_PROVIDER_MEMBER_SCHEMA.parse(value)
351
+ return DISCORD_MEMBER_SCHEMA.parse({
352
+ avatar: v.avatar,
353
+ communicationDisabledUntil: v.communication_disabled_until,
354
+ deaf: v.deaf,
355
+ joinedAt: v.joined_at,
356
+ mute: v.mute,
357
+ nick: v.nick,
358
+ pending: v.pending,
359
+ roles: v.roles,
360
+ user: v.user ? toDiscordUser(v.user) : undefined,
361
+ })
362
+ }
363
+
364
+ /** @param value - Provider role payload. */
365
+ export function toDiscordRole(value: unknown) {
366
+ const v = DISCORD_PROVIDER_ROLE_SCHEMA.parse(value)
367
+ return DISCORD_ROLE_SCHEMA.parse({
368
+ color: v.color,
369
+ hoist: v.hoist,
370
+ id: v.id,
371
+ managed: v.managed,
372
+ mentionable: v.mentionable,
373
+ name: v.name,
374
+ permissions: v.permissions,
375
+ position: v.position,
376
+ })
377
+ }
378
+
379
+ /** @param value - Provider invite payload. */
380
+ export function toDiscordInvite(value: unknown) {
381
+ const v = DISCORD_PROVIDER_INVITE_SCHEMA.parse(value)
382
+ return DISCORD_INVITE_SCHEMA.parse({
383
+ channel: v.channel ? toDiscordChannel(v.channel) : v.channel,
384
+ code: v.code,
385
+ guild: v.guild ? toDiscordGuild(v.guild) : undefined,
386
+ inviter: v.inviter ? toDiscordUser(v.inviter) : undefined,
387
+ maxAge: v.max_age,
388
+ maxUses: v.max_uses,
389
+ temporary: v.temporary,
390
+ uses: v.uses,
391
+ })
392
+ }
393
+
394
+ /** @param value - Provider webhook payload. */
395
+ export function toDiscordWebhook(value: unknown) {
396
+ const v = DISCORD_PROVIDER_WEBHOOK_SCHEMA.parse(value)
397
+ return DISCORD_WEBHOOK_SCHEMA.parse({
398
+ applicationId: v.application_id,
399
+ avatar: v.avatar,
400
+ channelId: v.channel_id,
401
+ guildId: v.guild_id,
402
+ id: v.id,
403
+ name: v.name,
404
+ type: v.type,
405
+ })
406
+ }
407
+
408
+ /** @param value - Provider emoji payload. */
409
+ export function toDiscordEmoji(value: unknown) {
410
+ const v = DISCORD_PROVIDER_EMOJI_SCHEMA.parse(value)
411
+ return DISCORD_EMOJI_SCHEMA.parse({
412
+ animated: v.animated,
413
+ available: v.available,
414
+ id: v.id,
415
+ managed: v.managed,
416
+ name: v.name,
417
+ requireColons: v.require_colons,
418
+ roles: v.roles,
419
+ user: v.user ? toDiscordUser(v.user) : undefined,
420
+ })
421
+ }
422
+
423
+ /** @param value - Provider Auto Moderation action payload. */
424
+ export function toDiscordAutomodAction(value: unknown) {
425
+ const v = DISCORD_PROVIDER_AUTOMOD_ACTION_SCHEMA.parse(value)
426
+ return DISCORD_AUTOMOD_ACTION_SCHEMA.parse({
427
+ metadata: v.metadata
428
+ ? {
429
+ channelId: v.metadata.channel_id,
430
+ customMessage: v.metadata.custom_message,
431
+ durationSeconds: v.metadata.duration_seconds,
432
+ }
433
+ : undefined,
434
+ type: v.type,
435
+ })
436
+ }
437
+
438
+ /** @param value - Provider Auto Moderation rule payload. */
439
+ export function toDiscordAutomodRule(value: unknown) {
440
+ const v = DISCORD_PROVIDER_AUTOMOD_RULE_SCHEMA.parse(value)
441
+ return DISCORD_AUTOMOD_RULE_SCHEMA.parse({
442
+ actions: v.actions.map(toDiscordAutomodAction),
443
+ creatorId: v.creator_id,
444
+ enabled: v.enabled,
445
+ eventType: v.event_type,
446
+ exemptChannels: v.exempt_channels,
447
+ exemptRoles: v.exempt_roles,
448
+ guildId: v.guild_id,
449
+ id: v.id,
450
+ name: v.name,
451
+ triggerMetadata: {
452
+ allowList: v.trigger_metadata.allow_list,
453
+ keywordFilter: v.trigger_metadata.keyword_filter,
454
+ mentionRaidProtectionEnabled:
455
+ v.trigger_metadata.mention_raid_protection_enabled,
456
+ mentionTotalLimit: v.trigger_metadata.mention_total_limit,
457
+ presets: v.trigger_metadata.presets,
458
+ regexPatterns: v.trigger_metadata.regex_patterns,
459
+ },
460
+ triggerType: v.trigger_type,
461
+ })
462
+ }
463
+
464
+ /** @param value - Provider scheduled-event payload. */
465
+ export function toDiscordScheduledEvent(value: unknown) {
466
+ const v = DISCORD_PROVIDER_SCHEDULED_EVENT_SCHEMA.parse(value)
467
+ return DISCORD_SCHEDULED_EVENT_SCHEMA.parse({
468
+ channelId: v.channel_id,
469
+ creatorId: v.creator_id,
470
+ description: v.description,
471
+ entityId: v.entity_id,
472
+ entityMetadata: v.entity_metadata,
473
+ entityType: v.entity_type,
474
+ guildId: v.guild_id,
475
+ id: v.id,
476
+ name: v.name,
477
+ privacyLevel: v.privacy_level,
478
+ scheduledEndTime: v.scheduled_end_time,
479
+ scheduledStartTime: v.scheduled_start_time,
480
+ status: v.status,
481
+ userCount: v.user_count,
482
+ })
483
+ }
484
+
485
+ /** @param value - Provider ban payload. */
486
+ export function toDiscordBan(value: unknown) {
487
+ const v = DISCORD_PROVIDER_BAN_SCHEMA.parse(value)
488
+ return DISCORD_BAN_SCHEMA.parse({
489
+ reason: v.reason,
490
+ user: toDiscordUser(v.user),
491
+ })
492
+ }
493
+
494
+ /** @param value - Provider entitlement payload. */
495
+ export function toDiscordEntitlement(value: unknown) {
496
+ const v = DISCORD_PROVIDER_ENTITLEMENT_SCHEMA.parse(value)
497
+ return DISCORD_ENTITLEMENT_SCHEMA.parse({
498
+ applicationId: v.application_id,
499
+ consumed: v.consumed,
500
+ deleted: v.deleted,
501
+ endsAt: v.ends_at,
502
+ giftCodeFlags: v.gift_code_flags,
503
+ guildId: v.guild_id,
504
+ id: v.id,
505
+ promotionId: v.promotion_id,
506
+ skuId: v.sku_id,
507
+ startsAt: v.starts_at,
508
+ subscriptionId: v.subscription_id,
509
+ type: v.type,
510
+ userId: v.user_id,
511
+ })
512
+ }
513
+
514
+ /** @param value - Provider application-authorization payload. */
515
+ export function toDiscordApplicationAuthorization(value: unknown) {
516
+ const v = z
517
+ .looseObject({
518
+ guild: DISCORD_PROVIDER_GUILD_SCHEMA.optional(),
519
+ integration_type: z.number().int().optional(),
520
+ scopes: z.string().array(),
521
+ user: DISCORD_PROVIDER_USER_SCHEMA,
522
+ })
523
+ .parse(value)
524
+ return DISCORD_APPLICATION_AUTHORIZATION_SCHEMA.parse({
525
+ guild: v.guild ? toDiscordGuild(v.guild) : undefined,
526
+ integrationType: v.integration_type,
527
+ scopes: v.scopes,
528
+ user: toDiscordUser(v.user),
529
+ })
530
+ }
531
+
532
+ /** @param value - Provider application-deauthorization payload. */
533
+ export function toDiscordApplicationDeauthorization(value: unknown) {
534
+ return DISCORD_APPLICATION_DEAUTHORIZATION_SCHEMA.parse({
535
+ user: toDiscordUser(
536
+ z.looseObject({ user: DISCORD_PROVIDER_USER_SCHEMA }).parse(value).user,
537
+ ),
538
+ })
539
+ }