skillshield 1.0.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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +400 -0
  3. package/dist/channels/discord.d.ts +18 -0
  4. package/dist/channels/discord.d.ts.map +1 -0
  5. package/dist/channels/discord.js +275 -0
  6. package/dist/channels/discord.js.map +1 -0
  7. package/dist/channels/index.d.ts +67 -0
  8. package/dist/channels/index.d.ts.map +1 -0
  9. package/dist/channels/index.js +127 -0
  10. package/dist/channels/index.js.map +1 -0
  11. package/dist/channels/slack.d.ts +20 -0
  12. package/dist/channels/slack.d.ts.map +1 -0
  13. package/dist/channels/slack.js +296 -0
  14. package/dist/channels/slack.js.map +1 -0
  15. package/dist/channels/telegram.d.ts +20 -0
  16. package/dist/channels/telegram.d.ts.map +1 -0
  17. package/dist/channels/telegram.js +223 -0
  18. package/dist/channels/telegram.js.map +1 -0
  19. package/dist/channels/whatsapp.d.ts +25 -0
  20. package/dist/channels/whatsapp.d.ts.map +1 -0
  21. package/dist/channels/whatsapp.js +187 -0
  22. package/dist/channels/whatsapp.js.map +1 -0
  23. package/dist/cli/commands/badge.d.ts +11 -0
  24. package/dist/cli/commands/badge.d.ts.map +1 -0
  25. package/dist/cli/commands/badge.js +98 -0
  26. package/dist/cli/commands/badge.js.map +1 -0
  27. package/dist/cli/commands/config.d.ts +3 -0
  28. package/dist/cli/commands/config.d.ts.map +1 -0
  29. package/dist/cli/commands/config.js +140 -0
  30. package/dist/cli/commands/config.js.map +1 -0
  31. package/dist/cli/commands/deploy.d.ts +3 -0
  32. package/dist/cli/commands/deploy.d.ts.map +1 -0
  33. package/dist/cli/commands/deploy.js +56 -0
  34. package/dist/cli/commands/deploy.js.map +1 -0
  35. package/dist/cli/commands/init.d.ts +3 -0
  36. package/dist/cli/commands/init.d.ts.map +1 -0
  37. package/dist/cli/commands/init.js +99 -0
  38. package/dist/cli/commands/init.js.map +1 -0
  39. package/dist/cli/commands/install.d.ts +3 -0
  40. package/dist/cli/commands/install.d.ts.map +1 -0
  41. package/dist/cli/commands/install.js +90 -0
  42. package/dist/cli/commands/install.js.map +1 -0
  43. package/dist/cli/commands/list.d.ts +3 -0
  44. package/dist/cli/commands/list.d.ts.map +1 -0
  45. package/dist/cli/commands/list.js +76 -0
  46. package/dist/cli/commands/list.js.map +1 -0
  47. package/dist/cli/commands/run.d.ts +3 -0
  48. package/dist/cli/commands/run.d.ts.map +1 -0
  49. package/dist/cli/commands/run.js +160 -0
  50. package/dist/cli/commands/run.js.map +1 -0
  51. package/dist/cli/commands/scan.d.ts +3 -0
  52. package/dist/cli/commands/scan.d.ts.map +1 -0
  53. package/dist/cli/commands/scan.js +133 -0
  54. package/dist/cli/commands/scan.js.map +1 -0
  55. package/dist/cli/commands/search.d.ts +3 -0
  56. package/dist/cli/commands/search.d.ts.map +1 -0
  57. package/dist/cli/commands/search.js +56 -0
  58. package/dist/cli/commands/search.js.map +1 -0
  59. package/dist/cli/index.d.ts +3 -0
  60. package/dist/cli/index.d.ts.map +1 -0
  61. package/dist/cli/index.js +70 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/core/config.d.ts +167 -0
  64. package/dist/core/config.d.ts.map +1 -0
  65. package/dist/core/config.js +398 -0
  66. package/dist/core/config.js.map +1 -0
  67. package/dist/core/parser.d.ts +34 -0
  68. package/dist/core/parser.d.ts.map +1 -0
  69. package/dist/core/parser.js +462 -0
  70. package/dist/core/parser.js.map +1 -0
  71. package/dist/core/runtime.d.ts +68 -0
  72. package/dist/core/runtime.d.ts.map +1 -0
  73. package/dist/core/runtime.js +560 -0
  74. package/dist/core/runtime.js.map +1 -0
  75. package/dist/core/types.d.ts +525 -0
  76. package/dist/core/types.d.ts.map +1 -0
  77. package/dist/core/types.js +44 -0
  78. package/dist/core/types.js.map +1 -0
  79. package/dist/guard/index.d.ts +57 -0
  80. package/dist/guard/index.d.ts.map +1 -0
  81. package/dist/guard/index.js +238 -0
  82. package/dist/guard/index.js.map +1 -0
  83. package/dist/guard/patterns.d.ts +21 -0
  84. package/dist/guard/patterns.d.ts.map +1 -0
  85. package/dist/guard/patterns.js +797 -0
  86. package/dist/guard/patterns.js.map +1 -0
  87. package/dist/hub/index.d.ts +44 -0
  88. package/dist/hub/index.d.ts.map +1 -0
  89. package/dist/hub/index.js +144 -0
  90. package/dist/hub/index.js.map +1 -0
  91. package/dist/hub/registry.d.ts +52 -0
  92. package/dist/hub/registry.d.ts.map +1 -0
  93. package/dist/hub/registry.js +192 -0
  94. package/dist/hub/registry.js.map +1 -0
  95. package/dist/i18n/index.d.ts +19 -0
  96. package/dist/i18n/index.d.ts.map +1 -0
  97. package/dist/i18n/index.js +92 -0
  98. package/dist/i18n/index.js.map +1 -0
  99. package/dist/i18n/locales/en.d.ts +110 -0
  100. package/dist/i18n/locales/en.d.ts.map +1 -0
  101. package/dist/i18n/locales/en.js +123 -0
  102. package/dist/i18n/locales/en.js.map +1 -0
  103. package/dist/i18n/locales/es.d.ts +110 -0
  104. package/dist/i18n/locales/es.d.ts.map +1 -0
  105. package/dist/i18n/locales/es.js +123 -0
  106. package/dist/i18n/locales/es.js.map +1 -0
  107. package/dist/i18n/locales/pt.d.ts +110 -0
  108. package/dist/i18n/locales/pt.d.ts.map +1 -0
  109. package/dist/i18n/locales/pt.js +123 -0
  110. package/dist/i18n/locales/pt.js.map +1 -0
  111. package/dist/i18n/locales/zh.d.ts +110 -0
  112. package/dist/i18n/locales/zh.d.ts.map +1 -0
  113. package/dist/i18n/locales/zh.js +123 -0
  114. package/dist/i18n/locales/zh.js.map +1 -0
  115. package/dist/index.d.ts +168 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +275 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/router/index.d.ts +89 -0
  120. package/dist/router/index.d.ts.map +1 -0
  121. package/dist/router/index.js +292 -0
  122. package/dist/router/index.js.map +1 -0
  123. package/dist/router/providers.d.ts +48 -0
  124. package/dist/router/providers.d.ts.map +1 -0
  125. package/dist/router/providers.js +733 -0
  126. package/dist/router/providers.js.map +1 -0
  127. package/dist/runtime/executor.d.ts +96 -0
  128. package/dist/runtime/executor.d.ts.map +1 -0
  129. package/dist/runtime/executor.js +389 -0
  130. package/dist/runtime/executor.js.map +1 -0
  131. package/dist/sandbox/index.d.ts +52 -0
  132. package/dist/sandbox/index.d.ts.map +1 -0
  133. package/dist/sandbox/index.js +248 -0
  134. package/dist/sandbox/index.js.map +1 -0
  135. package/dist/security/skillguard.d.ts +25 -0
  136. package/dist/security/skillguard.d.ts.map +1 -0
  137. package/dist/security/skillguard.js +137 -0
  138. package/dist/security/skillguard.js.map +1 -0
  139. package/dist/tools/index.d.ts +55 -0
  140. package/dist/tools/index.d.ts.map +1 -0
  141. package/dist/tools/index.js +276 -0
  142. package/dist/tools/index.js.map +1 -0
  143. package/dist/tools/web-engine.d.ts +158 -0
  144. package/dist/tools/web-engine.d.ts.map +1 -0
  145. package/dist/tools/web-engine.js +802 -0
  146. package/dist/tools/web-engine.js.map +1 -0
  147. package/dist/tools/web-tools.d.ts +173 -0
  148. package/dist/tools/web-tools.d.ts.map +1 -0
  149. package/dist/tools/web-tools.js +251 -0
  150. package/dist/tools/web-tools.js.map +1 -0
  151. package/dist/utils/errors.d.ts +44 -0
  152. package/dist/utils/errors.d.ts.map +1 -0
  153. package/dist/utils/errors.js +130 -0
  154. package/dist/utils/errors.js.map +1 -0
  155. package/dist/utils/logger.d.ts +28 -0
  156. package/dist/utils/logger.d.ts.map +1 -0
  157. package/dist/utils/logger.js +121 -0
  158. package/dist/utils/logger.js.map +1 -0
  159. package/examples/basic-usage.ts +276 -0
  160. package/examples/code-reviewer.skill.md +83 -0
  161. package/examples/creative-writer.skill.md +80 -0
  162. package/examples/data-analyzer.skill.md +61 -0
  163. package/examples/hello-world.skill.md +36 -0
  164. package/examples/sample-skill.md +156 -0
  165. package/examples/summarizer.skill.md +62 -0
  166. package/examples/translator.skill.md +45 -0
  167. package/package.json +110 -0
@@ -0,0 +1,296 @@
1
+ import { BaseChannelAdapter } from './index.js';
2
+ import { ChannelError } from '../utils/errors.js';
3
+ export class SlackAdapter extends BaseChannelAdapter {
4
+ constructor(botToken, signingSecret) {
5
+ super();
6
+ this.name = 'slack';
7
+ this.app = null;
8
+ this.botToken = botToken;
9
+ this.signingSecret = signingSecret;
10
+ }
11
+ async connect() {
12
+ try {
13
+ // Try to load Slack Bolt dynamically
14
+ let boltModule;
15
+ try {
16
+ boltModule = await import('@slack/bolt');
17
+ }
18
+ catch {
19
+ throw new ChannelError('@slack/bolt not installed. Install with: npm install @slack/bolt', {
20
+ adapter: 'slack',
21
+ });
22
+ }
23
+ const { App } = boltModule;
24
+ this.app = new App({
25
+ token: this.botToken,
26
+ signingSecret: this.signingSecret,
27
+ socketMode: true, // Use Socket Mode
28
+ appToken: process.env.SLACK_APP_TOKEN,
29
+ });
30
+ this.setupEventHandlers();
31
+ this.setupCommands();
32
+ await this.app.start();
33
+ this.connected = true;
34
+ this.logger.info('Slack bot connected');
35
+ }
36
+ catch (error) {
37
+ throw new ChannelError(`Failed to connect Slack: ${String(error)}`);
38
+ }
39
+ }
40
+ setupEventHandlers() {
41
+ if (!this.app)
42
+ return;
43
+ // Handle app_mention events
44
+ this.app.event('app_mention', async ({ event, say }) => {
45
+ const message = {
46
+ id: event.ts,
47
+ content: event.text,
48
+ sender: event.user,
49
+ timestamp: new Date(parseInt(event.ts) * 1000),
50
+ metadata: {
51
+ channelId: event.channel,
52
+ userId: event.user,
53
+ ts: event.ts,
54
+ },
55
+ };
56
+ await this.handleMessage(message);
57
+ });
58
+ // Handle message events
59
+ this.app.message(async ({ message, say }) => {
60
+ if (message.bot_id || message.subtype)
61
+ return; // Skip bot messages
62
+ const channelMessage = {
63
+ id: message.ts,
64
+ content: message.text,
65
+ sender: message.user,
66
+ timestamp: new Date(parseInt(message.ts) * 1000),
67
+ metadata: {
68
+ channelId: message.channel,
69
+ userId: message.user,
70
+ ts: message.ts,
71
+ threadTs: message.thread_ts,
72
+ },
73
+ };
74
+ // Handle files/attachments
75
+ if (message.files) {
76
+ channelMessage.attachments = message.files.map((file) => ({
77
+ type: file.mimetype?.startsWith('image/') ? 'image' : 'document',
78
+ url: file.url_private,
79
+ name: file.name,
80
+ }));
81
+ }
82
+ await this.handleMessage(channelMessage);
83
+ });
84
+ }
85
+ setupCommands() {
86
+ if (!this.app)
87
+ return;
88
+ // Handle /skillkit command
89
+ this.app.command('/skillkit', async ({ ack, body, respond }) => {
90
+ await ack();
91
+ const args = body.text.split(' ');
92
+ const command = args[0];
93
+ if (command === 'run') {
94
+ const skillName = args.slice(1).join(' ');
95
+ await respond({
96
+ text: `Running skill: ${skillName}`,
97
+ blocks: this.createRunSkillBlocks(skillName),
98
+ });
99
+ }
100
+ else if (command === 'list') {
101
+ await respond({
102
+ text: 'Available skills',
103
+ blocks: this.createListSkillsBlocks(),
104
+ });
105
+ }
106
+ else if (command === 'help') {
107
+ await respond({
108
+ text: 'SkillKit Help',
109
+ blocks: this.createHelpBlocks(),
110
+ });
111
+ }
112
+ else {
113
+ await respond({
114
+ text: 'Unknown command. Use /skillkit help',
115
+ });
116
+ }
117
+ });
118
+ // Handle interactive actions (button clicks, etc)
119
+ this.app.action(/skillkit_.*/, async ({ ack, body, respond }) => {
120
+ await ack();
121
+ // Handle action
122
+ });
123
+ }
124
+ createRunSkillBlocks(skillName) {
125
+ return [
126
+ {
127
+ type: 'section',
128
+ text: {
129
+ type: 'mrkdwn',
130
+ text: `*Running Skill:* ${skillName}`,
131
+ },
132
+ },
133
+ {
134
+ type: 'section',
135
+ text: {
136
+ type: 'mrkdwn',
137
+ text: 'Executing...',
138
+ },
139
+ },
140
+ ];
141
+ }
142
+ createListSkillsBlocks() {
143
+ return [
144
+ {
145
+ type: 'header',
146
+ text: {
147
+ type: 'plain_text',
148
+ text: 'Available Skills',
149
+ },
150
+ },
151
+ {
152
+ type: 'section',
153
+ text: {
154
+ type: 'mrkdwn',
155
+ text: 'Skills will be listed here',
156
+ },
157
+ },
158
+ ];
159
+ }
160
+ createHelpBlocks() {
161
+ return [
162
+ {
163
+ type: 'header',
164
+ text: {
165
+ type: 'plain_text',
166
+ text: 'SkillKit Help',
167
+ },
168
+ },
169
+ {
170
+ type: 'section',
171
+ text: {
172
+ type: 'mrkdwn',
173
+ text: '*/skillkit run <skill>* - Run a skill\n*/skillkit list* - List available skills\n*/skillkit help* - Show help',
174
+ },
175
+ },
176
+ ];
177
+ }
178
+ async disconnect() {
179
+ try {
180
+ if (this.app) {
181
+ await this.app.close();
182
+ this.app = null;
183
+ }
184
+ this.connected = false;
185
+ }
186
+ catch (error) {
187
+ throw new ChannelError(`Failed to disconnect Slack: ${String(error)}`);
188
+ }
189
+ }
190
+ async sendMessage(message) {
191
+ if (!this.app) {
192
+ throw new ChannelError('Slack bot not connected');
193
+ }
194
+ const channelId = message.metadata?.channelId;
195
+ if (!channelId) {
196
+ throw new ChannelError('Channel ID not provided in message metadata');
197
+ }
198
+ try {
199
+ const blocks = [];
200
+ // Create text block
201
+ if (message.formatting?.code) {
202
+ blocks.push({
203
+ type: 'section',
204
+ text: {
205
+ type: 'mrkdwn',
206
+ text: `\`\`\`\n${message.content}\n\`\`\``,
207
+ },
208
+ });
209
+ }
210
+ else if (message.formatting?.markdown) {
211
+ blocks.push({
212
+ type: 'section',
213
+ text: {
214
+ type: 'mrkdwn',
215
+ text: message.content,
216
+ },
217
+ });
218
+ }
219
+ else {
220
+ blocks.push({
221
+ type: 'section',
222
+ text: {
223
+ type: 'mrkdwn',
224
+ text: message.content,
225
+ },
226
+ });
227
+ }
228
+ // Add mentions if any
229
+ if (message.formatting?.mentions && message.formatting.mentions.length > 0) {
230
+ const mentions = message.formatting.mentions.map((m) => `<@${m}>`).join(' ');
231
+ blocks.push({
232
+ type: 'section',
233
+ text: {
234
+ type: 'mrkdwn',
235
+ text: mentions,
236
+ },
237
+ });
238
+ }
239
+ // Send blocks
240
+ await this.app.client.chat.postMessage({
241
+ channel: channelId,
242
+ blocks,
243
+ });
244
+ // Send attachments if any
245
+ if (message.attachments) {
246
+ for (const attachment of message.attachments) {
247
+ if (attachment.url) {
248
+ // Send as attachment via Slack API
249
+ await this.app.client.files.upload({
250
+ channels: channelId,
251
+ file: attachment.data,
252
+ filename: attachment.name,
253
+ });
254
+ }
255
+ }
256
+ }
257
+ }
258
+ catch (error) {
259
+ throw new ChannelError(`Failed to send Slack message: ${String(error)}`);
260
+ }
261
+ }
262
+ async sendEphemeralMessage(userId, channelId, content) {
263
+ if (!this.app) {
264
+ throw new ChannelError('Slack bot not connected');
265
+ }
266
+ try {
267
+ await this.app.client.chat.postEphemeral({
268
+ user: userId,
269
+ channel: channelId,
270
+ text: content,
271
+ });
272
+ }
273
+ catch (error) {
274
+ throw new ChannelError(`Failed to send ephemeral message: ${String(error)}`);
275
+ }
276
+ }
277
+ async updateMessage(channelId, ts, content) {
278
+ if (!this.app) {
279
+ throw new ChannelError('Slack bot not connected');
280
+ }
281
+ try {
282
+ await this.app.client.chat.update({
283
+ channel: channelId,
284
+ ts,
285
+ text: content,
286
+ });
287
+ }
288
+ catch (error) {
289
+ throw new ChannelError(`Failed to update message: ${String(error)}`);
290
+ }
291
+ }
292
+ }
293
+ export function createSlackAdapter(botToken, signingSecret) {
294
+ return new SlackAdapter(botToken, signingSecret);
295
+ }
296
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/channels/slack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { BaseChannelAdapter, ChannelResponse } from './index.js';
2
+ export declare class TelegramAdapter extends BaseChannelAdapter {
3
+ name: string;
4
+ private botToken;
5
+ private bot;
6
+ private lastUpdateId;
7
+ private pollingInterval;
8
+ constructor(botToken: string);
9
+ connect(): Promise<void>;
10
+ private setupCommands;
11
+ private setupMessageHandlers;
12
+ private startPolling;
13
+ disconnect(): Promise<void>;
14
+ sendMessage(message: ChannelResponse): Promise<void>;
15
+ private formatMarkdown;
16
+ private createInlineKeyboard;
17
+ sendTypingIndicator(chatId: number): Promise<void>;
18
+ }
19
+ export declare function createTelegramAdapter(botToken: string): TelegramAdapter;
20
+ //# sourceMappingURL=telegram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../src/channels/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAkB,eAAe,EAAE,MAAM,YAAY,CAAC;AAqBjF,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,IAAI,SAAc;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,eAAe,CAA+C;gBAE1D,QAAQ,EAAE,MAAM;IAKtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B9B,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,oBAAoB;YAmDd,YAAY;IAiBpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAgD1D,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,oBAAoB;IAetB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAWzD;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAEvE"}
@@ -0,0 +1,223 @@
1
+ import { BaseChannelAdapter } from './index.js';
2
+ import { ChannelError } from '../utils/errors.js';
3
+ export class TelegramAdapter extends BaseChannelAdapter {
4
+ constructor(botToken) {
5
+ super();
6
+ this.name = 'telegram';
7
+ this.bot = null;
8
+ this.lastUpdateId = 0;
9
+ this.pollingInterval = null;
10
+ this.botToken = botToken;
11
+ }
12
+ async connect() {
13
+ try {
14
+ // Try to load grammY dynamically
15
+ let grammyModule;
16
+ try {
17
+ grammyModule = await import('grammy');
18
+ }
19
+ catch {
20
+ throw new ChannelError('grammY not installed. Install with: npm install grammy', {
21
+ adapter: 'telegram',
22
+ });
23
+ }
24
+ const { Bot } = grammyModule;
25
+ this.bot = new Bot(this.botToken);
26
+ // Setup commands
27
+ this.setupCommands();
28
+ // Setup message handlers
29
+ this.setupMessageHandlers();
30
+ // Start polling
31
+ await this.startPolling();
32
+ this.connected = true;
33
+ this.logger.info('Telegram bot connected');
34
+ }
35
+ catch (error) {
36
+ throw new ChannelError(`Failed to connect Telegram: ${String(error)}`);
37
+ }
38
+ }
39
+ setupCommands() {
40
+ if (!this.bot)
41
+ return;
42
+ this.bot.command('start', async (ctx) => {
43
+ await ctx.reply('Welcome to SkillKit Bot! Use /help to see available commands.');
44
+ });
45
+ this.bot.command('help', async (ctx) => {
46
+ const helpText = `
47
+ SkillKit Bot Commands:
48
+ /run <skill> - Execute a skill
49
+ /list - List available skills
50
+ /help - Show this message
51
+ `.trim();
52
+ await ctx.reply(helpText, { parse_mode: 'Markdown' });
53
+ });
54
+ this.bot.command('list', async (ctx) => {
55
+ await ctx.reply('Available skills will be listed here');
56
+ });
57
+ this.bot.command('run', async (ctx) => {
58
+ const skillName = ctx.match;
59
+ if (!skillName) {
60
+ await ctx.reply('Usage: /run <skill_name>');
61
+ return;
62
+ }
63
+ await ctx.reply(`Running skill: ${skillName}`);
64
+ });
65
+ }
66
+ setupMessageHandlers() {
67
+ if (!this.bot)
68
+ return;
69
+ this.bot.on('message', async (ctx) => {
70
+ const msg = ctx.message;
71
+ const sender = msg.from?.username || msg.from?.id.toString() || 'unknown';
72
+ let content = '';
73
+ const attachments = [];
74
+ if (msg.text) {
75
+ content = msg.text;
76
+ }
77
+ else if (msg.caption) {
78
+ content = msg.caption;
79
+ }
80
+ if (msg.photo) {
81
+ attachments.push({
82
+ type: 'image',
83
+ url: `telegram-photo-${msg.photo[msg.photo.length - 1].file_id}`,
84
+ name: 'photo.jpg',
85
+ });
86
+ if (msg.caption)
87
+ content = msg.caption;
88
+ }
89
+ if (msg.document) {
90
+ attachments.push({
91
+ type: 'document',
92
+ url: `telegram-document-${msg.document.file_id}`,
93
+ name: msg.document.file_name || 'document',
94
+ });
95
+ if (msg.caption)
96
+ content = msg.caption;
97
+ }
98
+ const message = {
99
+ id: msg.message_id.toString(),
100
+ content,
101
+ sender,
102
+ timestamp: new Date(msg.date * 1000),
103
+ metadata: {
104
+ chatId: msg.chat.id,
105
+ userId: msg.from?.id,
106
+ messageId: msg.message_id,
107
+ },
108
+ attachments: attachments.length > 0 ? attachments : undefined,
109
+ };
110
+ await this.handleMessage(message);
111
+ });
112
+ }
113
+ async startPolling() {
114
+ if (!this.bot)
115
+ return;
116
+ try {
117
+ // Get updates with long polling
118
+ await this.bot.start({
119
+ onStart: () => {
120
+ this.logger.info('Telegram bot polling started');
121
+ },
122
+ });
123
+ }
124
+ catch (error) {
125
+ this.logger.error(`Polling error: ${String(error)}`);
126
+ // Retry polling after delay
127
+ setTimeout(() => this.startPolling(), 5000);
128
+ }
129
+ }
130
+ async disconnect() {
131
+ try {
132
+ if (this.bot) {
133
+ await this.bot.stop();
134
+ this.bot = null;
135
+ }
136
+ if (this.pollingInterval) {
137
+ clearInterval(this.pollingInterval);
138
+ this.pollingInterval = null;
139
+ }
140
+ this.connected = false;
141
+ }
142
+ catch (error) {
143
+ throw new ChannelError(`Failed to disconnect Telegram: ${String(error)}`);
144
+ }
145
+ }
146
+ async sendMessage(message) {
147
+ if (!this.bot) {
148
+ throw new ChannelError('Telegram bot not connected');
149
+ }
150
+ const chatId = message.metadata?.chatId;
151
+ if (!chatId) {
152
+ throw new ChannelError('Chat ID not provided in message metadata');
153
+ }
154
+ try {
155
+ let content = message.content;
156
+ // Format with markdown if requested
157
+ if (message.formatting?.markdown) {
158
+ content = this.formatMarkdown(content);
159
+ }
160
+ // Format code if requested
161
+ if (message.formatting?.code) {
162
+ content = `\`\`\`\n${content}\n\`\`\``;
163
+ }
164
+ // Send text message
165
+ await this.bot.api.sendMessage(chatId, content, {
166
+ parse_mode: 'Markdown',
167
+ reply_markup: this.createInlineKeyboard(message.formatting?.mentions),
168
+ });
169
+ // Send attachments if any
170
+ if (message.attachments) {
171
+ for (const attachment of message.attachments) {
172
+ if (attachment.type === 'image' && attachment.data) {
173
+ await this.bot.api.sendPhoto(chatId, new Blob([attachment.data]), {
174
+ caption: attachment.name,
175
+ });
176
+ }
177
+ else if (attachment.type === 'document' && attachment.data) {
178
+ await this.bot.api.sendDocument(chatId, new Blob([attachment.data]), {
179
+ caption: attachment.name,
180
+ });
181
+ }
182
+ }
183
+ }
184
+ }
185
+ catch (error) {
186
+ throw new ChannelError(`Failed to send Telegram message: ${String(error)}`);
187
+ }
188
+ }
189
+ formatMarkdown(text) {
190
+ // Simple markdown formatting
191
+ text = text.replace(/\*\*(.*?)\*\*/g, '*$1*'); // Convert ** to *
192
+ text = text.replace(/__(.*?)__/g, '_$1_'); // Convert __ to _
193
+ return text;
194
+ }
195
+ createInlineKeyboard(mentions) {
196
+ if (!mentions || mentions.length === 0) {
197
+ return undefined;
198
+ }
199
+ return {
200
+ inline_keyboard: [
201
+ mentions.map((mention) => ({
202
+ text: mention,
203
+ callback_data: `mention_${mention}`,
204
+ })),
205
+ ],
206
+ };
207
+ }
208
+ async sendTypingIndicator(chatId) {
209
+ if (!this.bot) {
210
+ throw new ChannelError('Telegram bot not connected');
211
+ }
212
+ try {
213
+ await this.bot.api.sendChatAction(chatId, 'typing');
214
+ }
215
+ catch (error) {
216
+ this.logger.error(`Failed to send typing indicator: ${String(error)}`);
217
+ }
218
+ }
219
+ }
220
+ export function createTelegramAdapter(botToken) {
221
+ return new TelegramAdapter(botToken);
222
+ }
223
+ //# sourceMappingURL=telegram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/channels/telegram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { BaseChannelAdapter, ChannelResponse } from './index.js';
2
+ interface WhatsAppSession {
3
+ sessionId: string;
4
+ phone?: string;
5
+ isAuthenticated: boolean;
6
+ }
7
+ export declare class WhatsAppAdapter extends BaseChannelAdapter {
8
+ name: string;
9
+ private sessions;
10
+ private baiileysClient;
11
+ private qrCode?;
12
+ private sessionName;
13
+ constructor(sessionName?: string);
14
+ connect(): Promise<void>;
15
+ disconnect(): Promise<void>;
16
+ sendMessage(message: ChannelResponse): Promise<void>;
17
+ createSession(): Promise<string>;
18
+ deleteSession(sessionId: string): Promise<void>;
19
+ getSession(sessionId: string): WhatsAppSession | undefined;
20
+ getAllSessions(): WhatsAppSession[];
21
+ getQRCode(): string | undefined;
22
+ }
23
+ export declare function createWhatsAppAdapter(sessionName?: string): WhatsAppAdapter;
24
+ export {};
25
+ //# sourceMappingURL=whatsapp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp.d.ts","sourceRoot":"","sources":["../../src/channels/whatsapp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAkB,eAAe,EAAE,MAAM,YAAY,CAAC;AAIjF,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,IAAI,SAAc;IAClB,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,GAAE,MAA2B;IAK9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkHxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCpD,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAUhC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI1D,cAAc,IAAI,eAAe,EAAE;IAInC,SAAS,IAAI,MAAM,GAAG,SAAS;CAGhC;AAED,wBAAgB,qBAAqB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,eAAe,CAE3E"}