@framers/agentos 0.1.26 → 0.1.28

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 (79) hide show
  1. package/dist/api/AgentOSOrchestrator.js +1 -1
  2. package/dist/api/AgentOSOrchestrator.js.map +1 -1
  3. package/dist/channels/ChannelRouter.d.ts.map +1 -1
  4. package/dist/channels/ChannelRouter.js +1 -1
  5. package/dist/channels/ChannelRouter.js.map +1 -1
  6. package/dist/channels/IChannelAdapter.d.ts.map +1 -1
  7. package/dist/channels/adapters/BaseChannelAdapter.d.ts +130 -0
  8. package/dist/channels/adapters/BaseChannelAdapter.d.ts.map +1 -0
  9. package/dist/channels/adapters/BaseChannelAdapter.js +257 -0
  10. package/dist/channels/adapters/BaseChannelAdapter.js.map +1 -0
  11. package/dist/channels/adapters/DiscordChannelAdapter.d.ts +86 -0
  12. package/dist/channels/adapters/DiscordChannelAdapter.d.ts.map +1 -0
  13. package/dist/channels/adapters/DiscordChannelAdapter.js +550 -0
  14. package/dist/channels/adapters/DiscordChannelAdapter.js.map +1 -0
  15. package/dist/channels/adapters/GoogleChatChannelAdapter.d.ts +117 -0
  16. package/dist/channels/adapters/GoogleChatChannelAdapter.d.ts.map +1 -0
  17. package/dist/channels/adapters/GoogleChatChannelAdapter.js +632 -0
  18. package/dist/channels/adapters/GoogleChatChannelAdapter.js.map +1 -0
  19. package/dist/channels/adapters/IRCChannelAdapter.d.ts +86 -0
  20. package/dist/channels/adapters/IRCChannelAdapter.d.ts.map +1 -0
  21. package/dist/channels/adapters/IRCChannelAdapter.js +253 -0
  22. package/dist/channels/adapters/IRCChannelAdapter.js.map +1 -0
  23. package/dist/channels/adapters/RedditChannelAdapter.d.ts +123 -0
  24. package/dist/channels/adapters/RedditChannelAdapter.d.ts.map +1 -0
  25. package/dist/channels/adapters/RedditChannelAdapter.js +516 -0
  26. package/dist/channels/adapters/RedditChannelAdapter.js.map +1 -0
  27. package/dist/channels/adapters/SignalChannelAdapter.d.ts +120 -0
  28. package/dist/channels/adapters/SignalChannelAdapter.d.ts.map +1 -0
  29. package/dist/channels/adapters/SignalChannelAdapter.js +521 -0
  30. package/dist/channels/adapters/SignalChannelAdapter.js.map +1 -0
  31. package/dist/channels/adapters/SlackChannelAdapter.d.ts +96 -0
  32. package/dist/channels/adapters/SlackChannelAdapter.d.ts.map +1 -0
  33. package/dist/channels/adapters/SlackChannelAdapter.js +535 -0
  34. package/dist/channels/adapters/SlackChannelAdapter.js.map +1 -0
  35. package/dist/channels/adapters/TeamsChannelAdapter.d.ts +138 -0
  36. package/dist/channels/adapters/TeamsChannelAdapter.d.ts.map +1 -0
  37. package/dist/channels/adapters/TeamsChannelAdapter.js +639 -0
  38. package/dist/channels/adapters/TeamsChannelAdapter.js.map +1 -0
  39. package/dist/channels/adapters/TelegramChannelAdapter.d.ts +83 -0
  40. package/dist/channels/adapters/TelegramChannelAdapter.d.ts.map +1 -0
  41. package/dist/channels/adapters/TelegramChannelAdapter.js +463 -0
  42. package/dist/channels/adapters/TelegramChannelAdapter.js.map +1 -0
  43. package/dist/channels/adapters/TwitterChannelAdapter.d.ts +117 -0
  44. package/dist/channels/adapters/TwitterChannelAdapter.d.ts.map +1 -0
  45. package/dist/channels/adapters/TwitterChannelAdapter.js +489 -0
  46. package/dist/channels/adapters/TwitterChannelAdapter.js.map +1 -0
  47. package/dist/channels/adapters/WebChatChannelAdapter.d.ts +141 -0
  48. package/dist/channels/adapters/WebChatChannelAdapter.d.ts.map +1 -0
  49. package/dist/channels/adapters/WebChatChannelAdapter.js +539 -0
  50. package/dist/channels/adapters/WebChatChannelAdapter.js.map +1 -0
  51. package/dist/channels/adapters/WhatsAppChannelAdapter.d.ts +122 -0
  52. package/dist/channels/adapters/WhatsAppChannelAdapter.d.ts.map +1 -0
  53. package/dist/channels/adapters/WhatsAppChannelAdapter.js +643 -0
  54. package/dist/channels/adapters/WhatsAppChannelAdapter.js.map +1 -0
  55. package/dist/channels/adapters/index.d.ts +34 -0
  56. package/dist/channels/adapters/index.d.ts.map +1 -0
  57. package/dist/channels/adapters/index.js +25 -0
  58. package/dist/channels/adapters/index.js.map +1 -0
  59. package/dist/channels/index.d.ts +24 -0
  60. package/dist/channels/index.d.ts.map +1 -1
  61. package/dist/channels/index.js +16 -0
  62. package/dist/channels/index.js.map +1 -1
  63. package/dist/cognitive_substrate/personas/metaprompt_presets.d.ts.map +1 -1
  64. package/dist/cognitive_substrate/personas/metaprompt_presets.js +0 -2
  65. package/dist/cognitive_substrate/personas/metaprompt_presets.js.map +1 -1
  66. package/dist/core/provenance/crypto/HashChain.d.ts.map +1 -1
  67. package/dist/core/provenance/enforcement/AutonomyGuard.d.ts.map +1 -1
  68. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.d.ts.map +1 -1
  69. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js +2 -1
  70. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js.map +1 -1
  71. package/dist/core/provenance/ledger/EventTypes.d.ts.map +1 -1
  72. package/dist/core/safety/ToolExecutionGuard.d.ts.map +1 -1
  73. package/dist/core/safety/ToolExecutionGuard.js +0 -1
  74. package/dist/core/safety/ToolExecutionGuard.js.map +1 -1
  75. package/dist/extensions/ExtensionManager.d.ts.map +1 -1
  76. package/dist/extensions/ExtensionManager.js +3 -9
  77. package/dist/extensions/ExtensionManager.js.map +1 -1
  78. package/dist/rag/RetrievalAugmentor.js.map +1 -1
  79. package/package.json +1 -1
@@ -0,0 +1,550 @@
1
+ /**
2
+ * @fileoverview Discord Channel Adapter for AgentOS.
3
+ *
4
+ * Wraps the `discord.js` npm package to connect agents to Discord servers.
5
+ * Supports rich messaging including text, embeds, images, video, audio,
6
+ * reactions, threads, mentions, buttons, and message management.
7
+ *
8
+ * **Dependencies**: Requires `discord.js` to be installed. The adapter
9
+ * uses a dynamic import so the package is only loaded at connection time,
10
+ * avoiding hard failures if it is not present.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const discord = new DiscordChannelAdapter();
15
+ * await discord.initialize({
16
+ * platform: 'discord',
17
+ * credential: 'DISCORD_BOT_TOKEN',
18
+ * params: {
19
+ * botToken: 'DISCORD_BOT_TOKEN',
20
+ * applicationId: 'APP_ID',
21
+ * guildId: 'OPTIONAL_GUILD_ID',
22
+ * },
23
+ * });
24
+ * ```
25
+ *
26
+ * @module @framers/agentos/channels/adapters/DiscordChannelAdapter
27
+ */
28
+ import { BaseChannelAdapter } from './BaseChannelAdapter.js';
29
+ // ============================================================================
30
+ // DiscordChannelAdapter
31
+ // ============================================================================
32
+ /**
33
+ * Channel adapter for Discord using the discord.js SDK.
34
+ *
35
+ * Uses dynamic import so `discord.js` is only required at runtime when the
36
+ * adapter is actually initialized.
37
+ *
38
+ * Capabilities: text, rich_text, images, video, audio, embeds, reactions,
39
+ * threads, mentions, buttons, group_chat, channels, editing, deletion.
40
+ */
41
+ export class DiscordChannelAdapter extends BaseChannelAdapter {
42
+ constructor() {
43
+ super(...arguments);
44
+ this.platform = 'discord';
45
+ this.displayName = 'Discord';
46
+ this.capabilities = [
47
+ 'text',
48
+ 'rich_text',
49
+ 'images',
50
+ 'video',
51
+ 'audio',
52
+ 'embeds',
53
+ 'reactions',
54
+ 'threads',
55
+ 'mentions',
56
+ 'buttons',
57
+ 'group_chat',
58
+ 'channels',
59
+ 'editing',
60
+ 'deletion',
61
+ ];
62
+ }
63
+ // ── Abstract hook implementations ──
64
+ async doConnect(auth) {
65
+ const botToken = auth.params?.botToken ?? auth.credential;
66
+ if (!botToken) {
67
+ throw new Error('Discord bot token is required. Provide it as credential or params.botToken.');
68
+ }
69
+ // Dynamic import
70
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
+ let discordJs;
72
+ try {
73
+ discordJs = await import('discord.js');
74
+ }
75
+ catch {
76
+ throw new Error('The "discord.js" package is required for the Discord adapter. ' +
77
+ 'Install it with: npm install discord.js');
78
+ }
79
+ this.djs = discordJs;
80
+ // Build intents — we need at minimum Guilds, GuildMessages, MessageContent, DirectMessages
81
+ const { GatewayIntentBits, Client, Partials, } = discordJs;
82
+ const intentFlags = [
83
+ GatewayIntentBits.Guilds,
84
+ GatewayIntentBits.GuildMessages,
85
+ GatewayIntentBits.MessageContent,
86
+ GatewayIntentBits.DirectMessages,
87
+ GatewayIntentBits.GuildMessageReactions,
88
+ ];
89
+ // Parse any additional intents from params
90
+ if (auth.params?.intents) {
91
+ const extraIntents = auth.params.intents.split(',').map((i) => i.trim());
92
+ for (const intentName of extraIntents) {
93
+ if (GatewayIntentBits[intentName] !== undefined) {
94
+ intentFlags.push(GatewayIntentBits[intentName]);
95
+ }
96
+ }
97
+ }
98
+ this.client = new Client({
99
+ intents: intentFlags,
100
+ partials: [Partials?.Channel, Partials?.Message, Partials?.Reaction].filter(Boolean),
101
+ });
102
+ // Set up event handlers before login
103
+ this.wireEventHandlers();
104
+ // Login and await the ready event
105
+ await new Promise((resolve, reject) => {
106
+ const readyTimeout = setTimeout(() => {
107
+ reject(new Error('Discord client ready timeout after 30s'));
108
+ }, 30000);
109
+ this.client.once('ready', () => {
110
+ clearTimeout(readyTimeout);
111
+ resolve();
112
+ });
113
+ this.client.once('error', (err) => {
114
+ clearTimeout(readyTimeout);
115
+ reject(err);
116
+ });
117
+ this.client.login(botToken).catch((err) => {
118
+ clearTimeout(readyTimeout);
119
+ reject(err);
120
+ });
121
+ });
122
+ // Populate platform info
123
+ const user = this.client.user;
124
+ this.platformInfo = {
125
+ botId: user?.id,
126
+ botUsername: user?.username,
127
+ botTag: user?.tag,
128
+ applicationId: auth.params?.applicationId,
129
+ guildId: auth.params?.guildId,
130
+ guildCount: this.client.guilds?.cache?.size,
131
+ };
132
+ console.log(`[Discord] Connected as ${user?.tag ?? 'unknown'} (${this.client.guilds?.cache?.size ?? 0} guilds)`);
133
+ }
134
+ async doSendMessage(conversationId, content) {
135
+ if (!this.client || !this.djs) {
136
+ throw new Error('[Discord] Client is not connected.');
137
+ }
138
+ // Resolve channel
139
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
140
+ if (!channel) {
141
+ throw new Error(`[Discord] Channel ${conversationId} not found.`);
142
+ }
143
+ if (typeof channel.send !== 'function') {
144
+ throw new Error(`[Discord] Channel ${conversationId} is not a text channel.`);
145
+ }
146
+ // Build message payload
147
+ const payload = this.buildMessagePayload(content);
148
+ // If replying to a message, set the reply reference
149
+ if (content.replyToMessageId) {
150
+ payload.reply = { messageReference: content.replyToMessageId };
151
+ }
152
+ const msg = await channel.send(payload);
153
+ return {
154
+ messageId: msg.id,
155
+ timestamp: msg.createdAt?.toISOString() ?? new Date().toISOString(),
156
+ };
157
+ }
158
+ async doShutdown() {
159
+ if (this.client) {
160
+ try {
161
+ this.client.destroy();
162
+ }
163
+ catch {
164
+ // Best effort
165
+ }
166
+ }
167
+ this.client = undefined;
168
+ this.djs = undefined;
169
+ console.log('[Discord] Adapter shut down.');
170
+ }
171
+ // ── IChannelAdapter optional methods ──
172
+ async editMessage(conversationId, messageId, content) {
173
+ if (!this.client)
174
+ throw new Error('[Discord] Client is not connected.');
175
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
176
+ if (!channel || typeof channel.messages?.fetch !== 'function') {
177
+ throw new Error(`[Discord] Channel ${conversationId} not found or not a text channel.`);
178
+ }
179
+ const msg = await channel.messages.fetch(messageId);
180
+ if (!msg)
181
+ throw new Error(`[Discord] Message ${messageId} not found.`);
182
+ const payload = this.buildMessagePayload(content);
183
+ await msg.edit(payload);
184
+ }
185
+ async deleteMessage(conversationId, messageId) {
186
+ if (!this.client)
187
+ throw new Error('[Discord] Client is not connected.');
188
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
189
+ if (!channel || typeof channel.messages?.fetch !== 'function') {
190
+ throw new Error(`[Discord] Channel ${conversationId} not found or not a text channel.`);
191
+ }
192
+ const msg = await channel.messages.fetch(messageId);
193
+ if (msg)
194
+ await msg.delete();
195
+ }
196
+ async addReaction(conversationId, messageId, emoji) {
197
+ if (!this.client)
198
+ throw new Error('[Discord] Client is not connected.');
199
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
200
+ if (!channel || typeof channel.messages?.fetch !== 'function')
201
+ return;
202
+ const msg = await channel.messages.fetch(messageId);
203
+ if (msg)
204
+ await msg.react(emoji);
205
+ }
206
+ async sendTypingIndicator(conversationId, _isTyping) {
207
+ if (!this.client)
208
+ return;
209
+ try {
210
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
211
+ if (channel && typeof channel.sendTyping === 'function') {
212
+ await channel.sendTyping();
213
+ }
214
+ }
215
+ catch {
216
+ // Non-critical
217
+ }
218
+ }
219
+ async getConversationInfo(conversationId) {
220
+ if (!this.client)
221
+ throw new Error('[Discord] Client is not connected.');
222
+ const channel = await this.client.channels.fetch(conversationId).catch(() => null);
223
+ if (!channel) {
224
+ throw new Error(`[Discord] Channel ${conversationId} not found.`);
225
+ }
226
+ return {
227
+ name: channel.name ?? undefined,
228
+ memberCount: channel.members?.size ?? channel.guild?.memberCount,
229
+ isGroup: channel.type !== 1, // DM channel type is 1
230
+ metadata: {
231
+ type: channel.type,
232
+ guildId: channel.guildId ?? undefined,
233
+ guildName: channel.guild?.name ?? undefined,
234
+ topic: channel.topic ?? undefined,
235
+ },
236
+ };
237
+ }
238
+ // ── Private helpers ──
239
+ /**
240
+ * Wire up discord.js event handlers for inbound messages and interactions.
241
+ */
242
+ wireEventHandlers() {
243
+ if (!this.client)
244
+ return;
245
+ // Inbound messages
246
+ this.client.on('messageCreate', (msg) => {
247
+ // Ignore messages from self
248
+ if (msg.author?.bot && msg.author?.id === this.client?.user?.id)
249
+ return;
250
+ this.handleInboundMessage(msg);
251
+ });
252
+ // Message edits
253
+ this.client.on('messageUpdate', (_old, updated) => {
254
+ if (updated.author?.bot && updated.author?.id === this.client?.user?.id)
255
+ return;
256
+ this.emit({
257
+ type: 'message_edited',
258
+ platform: 'discord',
259
+ conversationId: updated.channelId ?? '',
260
+ timestamp: updated.editedAt?.toISOString() ?? new Date().toISOString(),
261
+ data: {
262
+ messageId: updated.id,
263
+ newContent: updated.content,
264
+ },
265
+ });
266
+ });
267
+ // Message deletions
268
+ this.client.on('messageDelete', (msg) => {
269
+ this.emit({
270
+ type: 'message_deleted',
271
+ platform: 'discord',
272
+ conversationId: msg.channelId ?? '',
273
+ timestamp: new Date().toISOString(),
274
+ data: { messageId: msg.id },
275
+ });
276
+ });
277
+ // Reaction add
278
+ this.client.on('messageReactionAdd', (reaction, user) => {
279
+ this.emit({
280
+ type: 'reaction_added',
281
+ platform: 'discord',
282
+ conversationId: reaction.message?.channelId ?? '',
283
+ timestamp: new Date().toISOString(),
284
+ data: {
285
+ messageId: reaction.message?.id,
286
+ emoji: reaction.emoji?.name ?? reaction.emoji?.toString(),
287
+ userId: user?.id,
288
+ },
289
+ });
290
+ });
291
+ // Reaction remove
292
+ this.client.on('messageReactionRemove', (reaction, user) => {
293
+ this.emit({
294
+ type: 'reaction_removed',
295
+ platform: 'discord',
296
+ conversationId: reaction.message?.channelId ?? '',
297
+ timestamp: new Date().toISOString(),
298
+ data: {
299
+ messageId: reaction.message?.id,
300
+ emoji: reaction.emoji?.name ?? reaction.emoji?.toString(),
301
+ userId: user?.id,
302
+ },
303
+ });
304
+ });
305
+ // Interaction (button clicks, etc.)
306
+ this.client.on('interactionCreate', (interaction) => {
307
+ if (interaction.isButton?.()) {
308
+ this.emit({
309
+ type: 'button_callback',
310
+ platform: 'discord',
311
+ conversationId: interaction.channelId ?? '',
312
+ timestamp: new Date().toISOString(),
313
+ data: {
314
+ callbackId: interaction.id,
315
+ buttonId: interaction.customId,
316
+ sender: {
317
+ id: interaction.user?.id ?? '',
318
+ displayName: interaction.user?.displayName ?? interaction.user?.username,
319
+ username: interaction.user?.username,
320
+ },
321
+ messageId: interaction.message?.id ?? '',
322
+ },
323
+ });
324
+ // Acknowledge the interaction
325
+ try {
326
+ interaction.deferUpdate?.();
327
+ }
328
+ catch {
329
+ // Non-critical
330
+ }
331
+ }
332
+ });
333
+ // Connection events
334
+ this.client.on('disconnect', () => {
335
+ if (this.status === 'connected') {
336
+ this.setStatus('reconnecting', 'Connection lost');
337
+ this.reconnect().catch((e) => {
338
+ console.error('[Discord] Reconnect failed:', e);
339
+ });
340
+ }
341
+ });
342
+ }
343
+ /**
344
+ * Handle an inbound discord.js Message and emit a channel event.
345
+ */
346
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
347
+ handleInboundMessage(msg) {
348
+ const contentBlocks = [];
349
+ // Text content
350
+ if (msg.content) {
351
+ contentBlocks.push({ type: 'text', text: msg.content });
352
+ }
353
+ // Attachments (images, video, audio, documents)
354
+ if (msg.attachments?.size > 0) {
355
+ for (const [, attachment] of msg.attachments) {
356
+ const contentType = attachment.contentType ?? '';
357
+ if (contentType.startsWith('image/')) {
358
+ contentBlocks.push({
359
+ type: 'image',
360
+ url: attachment.url,
361
+ caption: attachment.description ?? undefined,
362
+ mimeType: contentType,
363
+ });
364
+ }
365
+ else if (contentType.startsWith('video/')) {
366
+ contentBlocks.push({
367
+ type: 'video',
368
+ url: attachment.url,
369
+ mimeType: contentType,
370
+ });
371
+ }
372
+ else if (contentType.startsWith('audio/')) {
373
+ contentBlocks.push({
374
+ type: 'audio',
375
+ url: attachment.url,
376
+ mimeType: contentType,
377
+ });
378
+ }
379
+ else {
380
+ contentBlocks.push({
381
+ type: 'document',
382
+ url: attachment.url,
383
+ filename: attachment.name ?? 'attachment',
384
+ mimeType: contentType || undefined,
385
+ });
386
+ }
387
+ }
388
+ }
389
+ // Embeds (pass through as text summaries)
390
+ if (msg.embeds?.length > 0) {
391
+ for (const embed of msg.embeds) {
392
+ if (embed.description) {
393
+ contentBlocks.push({ type: 'text', text: embed.description });
394
+ }
395
+ }
396
+ }
397
+ // Stickers
398
+ if (msg.stickers?.size > 0) {
399
+ for (const [, sticker] of msg.stickers) {
400
+ contentBlocks.push({
401
+ type: 'sticker',
402
+ stickerId: sticker.id,
403
+ url: sticker.url,
404
+ });
405
+ }
406
+ }
407
+ if (contentBlocks.length === 0) {
408
+ contentBlocks.push({ type: 'text', text: '' });
409
+ }
410
+ // Determine conversation type
411
+ // discord.js channel types: 0=GuildText, 1=DM, 2=GuildVoice, 5=GuildAnnouncement, 11=PublicThread, etc.
412
+ const channelType = msg.channel?.type;
413
+ const isDM = channelType === 1;
414
+ const isThread = channelType === 11 || channelType === 12;
415
+ const channelMessage = {
416
+ messageId: msg.id,
417
+ platform: 'discord',
418
+ conversationId: msg.channelId ?? '',
419
+ conversationType: isDM ? 'direct' : isThread ? 'thread' : 'group',
420
+ sender: {
421
+ id: msg.author?.id ?? '',
422
+ displayName: msg.member?.displayName ?? msg.author?.displayName ?? msg.author?.username,
423
+ username: msg.author?.username,
424
+ avatarUrl: msg.author?.displayAvatarURL?.() ?? undefined,
425
+ },
426
+ content: contentBlocks,
427
+ text: msg.content ?? '',
428
+ timestamp: msg.createdAt?.toISOString() ?? new Date().toISOString(),
429
+ replyToMessageId: msg.reference?.messageId ?? undefined,
430
+ rawEvent: msg,
431
+ };
432
+ this.emit({
433
+ type: 'message',
434
+ platform: 'discord',
435
+ conversationId: msg.channelId ?? '',
436
+ timestamp: channelMessage.timestamp,
437
+ data: channelMessage,
438
+ });
439
+ }
440
+ /**
441
+ * Build a discord.js message payload from MessageContent.
442
+ */
443
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
444
+ buildMessagePayload(content) {
445
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
446
+ const payload = {};
447
+ const embeds = []; // eslint-disable-line @typescript-eslint/no-explicit-any
448
+ const files = []; // eslint-disable-line @typescript-eslint/no-explicit-any
449
+ const components = []; // eslint-disable-line @typescript-eslint/no-explicit-any
450
+ for (const block of content.blocks) {
451
+ switch (block.type) {
452
+ case 'text': {
453
+ // Append to content string (discord.js uses a single `content` field)
454
+ payload.content = payload.content
455
+ ? `${payload.content}\n${block.text}`
456
+ : block.text;
457
+ break;
458
+ }
459
+ case 'embed': {
460
+ const embed = {
461
+ title: block.title,
462
+ description: block.description,
463
+ url: block.url,
464
+ };
465
+ if (block.color) {
466
+ embed.color = parseInt(block.color.replace('#', ''), 16);
467
+ }
468
+ if (block.fields) {
469
+ embed.fields = block.fields.map((f) => ({
470
+ name: f.name,
471
+ value: f.value,
472
+ inline: f.inline ?? false,
473
+ }));
474
+ }
475
+ embeds.push(embed);
476
+ break;
477
+ }
478
+ case 'image': {
479
+ if (block.url.startsWith('http')) {
480
+ embeds.push({
481
+ image: { url: block.url },
482
+ description: block.caption,
483
+ });
484
+ }
485
+ else {
486
+ files.push({ attachment: block.url, name: 'image.png' });
487
+ }
488
+ break;
489
+ }
490
+ case 'video':
491
+ case 'audio':
492
+ case 'document': {
493
+ files.push({
494
+ attachment: block.url,
495
+ name: block.type === 'document'
496
+ ? block.filename ?? 'file' // eslint-disable-line @typescript-eslint/no-explicit-any
497
+ : `${block.type}.${block.url.split('.').pop() ?? 'bin'}`,
498
+ });
499
+ break;
500
+ }
501
+ case 'button_group': {
502
+ if (this.djs) {
503
+ try {
504
+ const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = this.djs;
505
+ const row = new ActionRowBuilder();
506
+ for (const btn of block.buttons) {
507
+ const button = new ButtonBuilder()
508
+ .setLabel(btn.label);
509
+ if (btn.action === 'url') {
510
+ button.setStyle(ButtonStyle.Link).setURL(btn.value);
511
+ }
512
+ else {
513
+ button.setStyle(ButtonStyle.Primary).setCustomId(btn.id);
514
+ }
515
+ row.addComponents(button);
516
+ }
517
+ components.push(row);
518
+ }
519
+ catch {
520
+ // Fall back to text representation if button builders fail
521
+ const buttonText = block.buttons
522
+ .map((b) => `[${b.label}](${b.value})`)
523
+ .join(' | ');
524
+ payload.content = payload.content
525
+ ? `${payload.content}\n${buttonText}`
526
+ : buttonText;
527
+ }
528
+ }
529
+ break;
530
+ }
531
+ default:
532
+ // Unsupported block type
533
+ console.warn(`[Discord] Unsupported content block type: ${block.type}`); // eslint-disable-line @typescript-eslint/no-explicit-any
534
+ break;
535
+ }
536
+ }
537
+ if (embeds.length > 0)
538
+ payload.embeds = embeds;
539
+ if (files.length > 0)
540
+ payload.files = files;
541
+ if (components.length > 0)
542
+ payload.components = components;
543
+ // Apply any platform-specific options
544
+ if (content.platformOptions) {
545
+ Object.assign(payload, content.platformOptions);
546
+ }
547
+ return payload;
548
+ }
549
+ }
550
+ //# sourceMappingURL=DiscordChannelAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscordChannelAdapter.js","sourceRoot":"","sources":["../../../src/channels/adapters/DiscordChannelAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAWH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAkB7D,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAsB,SAAQ,kBAAqC;IAAhF;;QACW,aAAQ,GAAoB,SAAS,CAAC;QACtC,gBAAW,GAAG,SAAS,CAAC;QACxB,iBAAY,GAAiC;YACpD,MAAM;YACN,WAAW;YACX,QAAQ;YACR,OAAO;YACP,OAAO;YACP,QAAQ;YACR,WAAW;YACX,SAAS;YACT,UAAU;YACV,SAAS;YACT,YAAY;YACZ,UAAU;YACV,SAAS;YACT,UAAU;SACF,CAAC;IA8jBb,CAAC;IApjBC,sCAAsC;IAE5B,KAAK,CAAC,SAAS,CACvB,IAAwD;QAExD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;QACJ,CAAC;QAED,iBAAiB;QACjB,8DAA8D;QAC9D,IAAI,SAAc,CAAC;QACnB,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,gEAAgE;gBAC9D,yCAAyC,CAC5C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QAErB,2FAA2F;QAC3F,MAAM,EACJ,iBAAiB,EACjB,MAAM,EACN,QAAQ,GACT,GAAG,SAAS,CAAC;QAEd,MAAM,WAAW,GAAG;YAClB,iBAAiB,CAAC,MAAM;YACxB,iBAAiB,CAAC,aAAa;YAC/B,iBAAiB,CAAC,cAAc;YAChC,iBAAiB,CAAC,cAAc;YAChC,iBAAiB,CAAC,qBAAqB;SACxC,CAAC;QAEF,2CAA2C;QAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzE,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;gBACtC,IAAI,iBAAiB,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;oBAChD,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;SACrF,CAAC,CAAC;QAEH,qCAAqC;QACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,kCAAkC;QAClC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBACnC,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;YAC9D,CAAC,EAAE,KAAM,CAAC,CAAC;YAEX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC7B,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBACvC,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;gBAC/C,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG;YAClB,KAAK,EAAE,IAAI,EAAE,EAAE;YACf,WAAW,EAAE,IAAI,EAAE,QAAQ;YAC3B,MAAM,EAAE,IAAI,EAAE,GAAG;YACjB,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa;YACzC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO;YAC7B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI;SAC5C,CAAC;QAEF,OAAO,CAAC,GAAG,CACT,0BAA0B,IAAI,EAAE,GAAG,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,UAAU,CACpG,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,cAAsB,EACtB,OAAuB;QAEvB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,kBAAkB;QAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,cAAc,aAAa,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,qBAAqB,cAAc,yBAAyB,CAAC,CAAC;QAChF,CAAC;QAED,wBAAwB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAElD,oDAAoD;QACpD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACjE,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAExC,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,EAAE;YACjB,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpE,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,UAAU;QACxB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAED,yCAAyC;IAEzC,KAAK,CAAC,WAAW,CACf,cAAsB,EACtB,SAAiB,EACjB,OAAuB;QAEvB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAExE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,QAAQ,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,qBAAqB,cAAc,mCAAmC,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,SAAS,aAAa,CAAC,CAAC;QAEvE,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,cAAsB,EACtB,SAAiB;QAEjB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAExE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,QAAQ,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,qBAAqB,cAAc,mCAAmC,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,GAAG;YAAE,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,WAAW,CACf,cAAsB,EACtB,SAAiB,EACjB,KAAa;QAEb,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAExE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,QAAQ,EAAE,KAAK,KAAK,UAAU;YAAE,OAAO;QAEtE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,GAAG;YAAE,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,cAAsB,EACtB,SAAkB;QAElB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACnF,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACxD,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,cAAsB;QAEtB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAExE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,cAAc,aAAa,CAAC,CAAC;QACpE,CAAC;QAED,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,SAAS;YAC/B,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,WAAW;YAChE,OAAO,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,uBAAuB;YACpD,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,SAAS;gBACrC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,SAAS;gBAC3C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;aAClC;SACF,CAAC;IACJ,CAAC;IAED,wBAAwB;IAExB;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,mBAAmB;QACnB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC3C,4BAA4B;YAC5B,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAAE,OAAO;YAExE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,gBAAgB;QAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAS,EAAE,OAAY,EAAE,EAAE;YAC1D,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAAE,OAAO;YAEhF,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE,SAAS;gBACnB,cAAc,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;gBACvC,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACtE,IAAI,EAAE;oBACJ,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,UAAU,EAAE,OAAO,CAAC,OAAO;iBAC5B;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE,SAAS;gBACnB,cAAc,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;gBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE;aAC5B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,eAAe;QACf,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,QAAa,EAAE,IAAS,EAAE,EAAE;YAChE,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE,SAAS;gBACnB,cAAc,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE;gBACjD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,IAAI,EAAE;oBACJ,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE;oBAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE;oBACzD,MAAM,EAAE,IAAI,EAAE,EAAE;iBACjB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,QAAa,EAAE,IAAS,EAAE,EAAE;YACnE,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,SAAS;gBACnB,cAAc,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE;gBACjD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,IAAI,EAAE;oBACJ,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE;oBAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE;oBACzD,MAAM,EAAE,IAAI,EAAE,EAAE;iBACjB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,oCAAoC;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,WAAgB,EAAE,EAAE;YACvD,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,SAAS;oBACnB,cAAc,EAAE,WAAW,CAAC,SAAS,IAAI,EAAE;oBAC3C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,IAAI,EAAE;wBACJ,UAAU,EAAE,WAAW,CAAC,EAAE;wBAC1B,QAAQ,EAAE,WAAW,CAAC,QAAQ;wBAC9B,MAAM,EAAE;4BACN,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE;4BAC9B,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,QAAQ;4BACxE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ;yBACrC;wBACD,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE;qBACzC;iBACF,CAAC,CAAC;gBAEH,8BAA8B;gBAC9B,IAAI,CAAC;oBACH,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;gBACjB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAChC,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAChC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;gBAClD,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC3B,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,8DAA8D;IACtD,oBAAoB,CAAC,GAAQ;QACnC,MAAM,aAAa,GAA0B,EAAE,CAAC;QAEhD,eAAe;QACf,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,gDAAgD;QAChD,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,CAAC,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBAC7C,MAAM,WAAW,GAAW,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;gBACzD,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrC,aAAa,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,OAAO;wBACb,GAAG,EAAE,UAAU,CAAC,GAAG;wBACnB,OAAO,EAAE,UAAU,CAAC,WAAW,IAAI,SAAS;wBAC5C,QAAQ,EAAE,WAAW;qBACtB,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5C,aAAa,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,OAAO;wBACb,GAAG,EAAE,UAAU,CAAC,GAAG;wBACnB,QAAQ,EAAE,WAAW;qBACtB,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5C,aAAa,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,OAAO;wBACb,GAAG,EAAE,UAAU,CAAC,GAAG;wBACnB,QAAQ,EAAE,WAAW;qBACtB,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,aAAa,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,UAAU;wBAChB,GAAG,EAAE,UAAU,CAAC,GAAG;wBACnB,QAAQ,EAAE,UAAU,CAAC,IAAI,IAAI,YAAY;wBACzC,QAAQ,EAAE,WAAW,IAAI,SAAS;qBACnC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC/B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACtB,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QAED,WAAW;QACX,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACvC,aAAa,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,GAAG,EAAE,OAAO,CAAC,GAAG;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,8BAA8B;QAC9B,wGAAwG;QACxG,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;QACtC,MAAM,IAAI,GAAG,WAAW,KAAK,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,WAAW,KAAK,EAAE,IAAI,WAAW,KAAK,EAAE,CAAC;QAE1D,MAAM,cAAc,GAAmB;YACrC,SAAS,EAAE,GAAG,CAAC,EAAE;YACjB,QAAQ,EAAE,SAAS;YACnB,cAAc,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;YACnC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;YACjE,MAAM,EAAE;gBACN,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;gBACxB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ;gBACvF,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ;gBAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,IAAI,SAAS;aACzD;YACD,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;YACvB,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnE,gBAAgB,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,IAAI,SAAS;YACvD,QAAQ,EAAE,GAAG;SACd,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,SAAS;YACnB,cAAc,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;YACnC,SAAS,EAAE,cAAc,CAAC,SAAS;YACnC,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,8DAA8D;IACtD,mBAAmB,CAAC,OAAuB;QACjD,8DAA8D;QAC9D,MAAM,OAAO,GAAQ,EAAE,CAAC;QACxB,MAAM,MAAM,GAAU,EAAE,CAAC,CAAC,yDAAyD;QACnF,MAAM,KAAK,GAAU,EAAE,CAAC,CAAC,yDAAyD;QAClF,MAAM,UAAU,GAAU,EAAE,CAAC,CAAC,yDAAyD;QAEvF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,sEAAsE;oBACtE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;wBAC/B,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE;wBACrC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBACf,MAAM;gBACR,CAAC;gBAED,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,KAAK,GAA4B;wBACrC,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,WAAW,EAAE,KAAK,CAAC,WAAW;wBAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;qBACf,CAAC;oBACF,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBAChB,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC3D,CAAC;oBACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBACjB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACtC,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK;yBAC1B,CAAC,CAAC,CAAC;oBACN,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,MAAM;gBACR,CAAC;gBAED,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBACjC,MAAM,CAAC,IAAI,CAAC;4BACV,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;4BACzB,WAAW,EAAE,KAAK,CAAC,OAAO;yBAC3B,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;oBAC3D,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,OAAO,CAAC;gBACb,KAAK,OAAO,CAAC;gBACb,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,KAAK,CAAC,IAAI,CAAC;wBACT,UAAU,EAAE,KAAK,CAAC,GAAG;wBACrB,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,UAAU;4BAC7B,CAAC,CAAE,KAAa,CAAC,QAAQ,IAAI,MAAM,CAAC,yDAAyD;4BAC7F,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE;qBAC3D,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;gBAED,KAAK,cAAc,CAAC,CAAC,CAAC;oBACpB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;wBACb,IAAI,CAAC;4BACH,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;4BAClE,MAAM,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAC;4BAEnC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gCAChC,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE;qCAC/B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gCAEvB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oCACzB,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gCACtD,CAAC;qCAAM,CAAC;oCACN,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gCAC3D,CAAC;gCAED,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;4BAC5B,CAAC;4BAED,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACvB,CAAC;wBAAC,MAAM,CAAC;4BACP,2DAA2D;4BAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO;iCAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC;iCACtC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACf,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;gCAC/B,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE;gCACrC,CAAC,CAAC,UAAU,CAAC;wBACjB,CAAC;oBACH,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED;oBACE,yBAAyB;oBACzB,OAAO,CAAC,IAAI,CAAC,6CAA8C,KAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,yDAAyD;oBAC3I,MAAM;YACV,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;QAE3D,sCAAsC;QACtC,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}