@discord-flow/multibots 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ export { createMultiBotServer } from './server.js';
2
+ export type { BotConfig, MultiBotServerOptions, MultiBotServer } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,SAAS,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { createMultiBotServer } from './server.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { MultiBotServerOptions, MultiBotServer } from './types.js';
2
+ export declare function createMultiBotServer(options: MultiBotServerOptions): MultiBotServer;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAiCtG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CA8OnF"}
package/dist/server.js ADDED
@@ -0,0 +1,225 @@
1
+ import { DiscordAPI, parseInteraction } from '@discord-flow/adapter-discord-http';
2
+ import { InteractionType } from '@discord-flow/types';
3
+ import chalk from 'chalk';
4
+ import nacl from 'tweetnacl';
5
+ const BASE_URL = 'https://discord.com/api/v10';
6
+ async function fetchApplicationId(token) {
7
+ const response = await fetch(`${BASE_URL}/users/@me`, {
8
+ headers: { Authorization: `Bot ${token}` }
9
+ });
10
+ if (!response.ok) {
11
+ throw new Error(`Falha ao obter ID do bot: ${response.status}`);
12
+ }
13
+ const data = await response.json();
14
+ return data.id;
15
+ }
16
+ function verifySignature(publicKey, signature, timestamp, body) {
17
+ try {
18
+ return nacl.sign.detached.verify(new TextEncoder().encode(timestamp + body), Buffer.from(signature, 'hex'), Buffer.from(publicKey, 'hex'));
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }
24
+ export function createMultiBotServer(options) {
25
+ const { port = 3000, bots: initialBots, autoRegisterCommands = true } = options;
26
+ const bots = new Map();
27
+ const pendingBots = [];
28
+ for (const bot of initialBots) {
29
+ if (!bot.publicKey || !bot.token) {
30
+ continue;
31
+ }
32
+ pendingBots.push(bot);
33
+ }
34
+ const handler = async (request) => {
35
+ const url = new URL(request.url);
36
+ if (request.method === 'GET' && url.pathname === '/health') {
37
+ return new Response('OK', { status: 200 });
38
+ }
39
+ if (request.method === 'GET' && url.pathname === '/') {
40
+ return new Response(JSON.stringify({
41
+ status: 'running',
42
+ bots: Array.from(bots.keys())
43
+ }), {
44
+ status: 200,
45
+ headers: { 'Content-Type': 'application/json' }
46
+ });
47
+ }
48
+ if (request.method !== 'POST' || url.pathname !== '/interactions') {
49
+ return new Response('Not Found', { status: 404 });
50
+ }
51
+ const signature = request.headers.get('x-signature-ed25519');
52
+ const timestamp = request.headers.get('x-signature-timestamp');
53
+ const body = await request.text();
54
+ if (!signature || !timestamp) {
55
+ return new Response('Missing headers', { status: 401 });
56
+ }
57
+ let interaction;
58
+ try {
59
+ interaction = JSON.parse(body);
60
+ }
61
+ catch {
62
+ return new Response('Invalid JSON', { status: 400 });
63
+ }
64
+ const applicationId = interaction.application_id;
65
+ if (!applicationId) {
66
+ return new Response('Missing application_id', { status: 400 });
67
+ }
68
+ const bot = bots.get(applicationId);
69
+ if (!bot) {
70
+ return new Response(`Bot not found for application: ${applicationId}`, { status: 404 });
71
+ }
72
+ if (!verifySignature(bot.publicKey, signature, timestamp, body)) {
73
+ return new Response('Invalid signature', { status: 401 });
74
+ }
75
+ if (interaction.type === InteractionType.PING) {
76
+ return new Response(JSON.stringify({ type: 1 }), {
77
+ headers: { 'Content-Type': 'application/json' }
78
+ });
79
+ }
80
+ try {
81
+ const event = parseInteraction(interaction);
82
+ if (!event) {
83
+ return new Response(JSON.stringify({
84
+ type: 4,
85
+ data: { content: 'Unknown interaction type', flags: 64 }
86
+ }), {
87
+ headers: { 'Content-Type': 'application/json' }
88
+ });
89
+ }
90
+ const result = await bot.engine.process(event);
91
+ if (!result) {
92
+ return new Response(JSON.stringify({
93
+ type: 4,
94
+ data: { content: 'No handler found', flags: 64 }
95
+ }), {
96
+ headers: { 'Content-Type': 'application/json' }
97
+ });
98
+ }
99
+ const responseType = event.type === 'command' ? 4 : 7;
100
+ return new Response(JSON.stringify({
101
+ type: responseType,
102
+ data: result
103
+ }), {
104
+ headers: { 'Content-Type': 'application/json' }
105
+ });
106
+ }
107
+ catch (error) {
108
+ console.error(`[${applicationId}] Error:`, error);
109
+ return new Response(JSON.stringify({
110
+ type: 4,
111
+ data: { content: 'Internal error', flags: 64 }
112
+ }), {
113
+ headers: { 'Content-Type': 'application/json' }
114
+ });
115
+ }
116
+ };
117
+ async function resolveBot(bot) {
118
+ const applicationId = bot.applicationId ?? await fetchApplicationId(bot.token);
119
+ return { ...bot, applicationId };
120
+ }
121
+ return {
122
+ async addBot(config) {
123
+ const resolved = await resolveBot(config);
124
+ bots.set(resolved.applicationId, resolved);
125
+ },
126
+ removeBot(applicationId) {
127
+ return bots.delete(applicationId);
128
+ },
129
+ getBots() {
130
+ return new Map(bots);
131
+ },
132
+ async start() {
133
+ console.log();
134
+ console.log(chalk.dim(' Iniciando bots...'));
135
+ const invalidBots = [];
136
+ for (let i = 0; i < pendingBots.length; i++) {
137
+ const bot = pendingBots[i];
138
+ try {
139
+ const resolved = await resolveBot(bot);
140
+ bots.set(resolved.applicationId, resolved);
141
+ console.log(` ${chalk.green('✓')} Bot ${i + 1}: ${chalk.dim(resolved.applicationId.slice(-6))}`);
142
+ }
143
+ catch (error) {
144
+ invalidBots.push({ index: i + 1, reason: String(error) });
145
+ console.log(` ${chalk.red('✗')} Bot ${i + 1}: ${chalk.red(String(error))}`);
146
+ }
147
+ }
148
+ const globalObj = globalThis;
149
+ if (globalObj.Bun) {
150
+ globalObj.Bun.serve({ port, hostname: '0.0.0.0', fetch: handler });
151
+ }
152
+ else {
153
+ const { createServer: createHttpServer } = await import('node:http');
154
+ const httpServer = createHttpServer(async (req, res) => {
155
+ const chunks = [];
156
+ for await (const chunk of req) {
157
+ chunks.push(chunk);
158
+ }
159
+ const body = Buffer.concat(chunks).toString();
160
+ const url = `http://0.0.0.0:${port}${req.url ?? '/'}`;
161
+ const headers = new Headers();
162
+ for (const [key, value] of Object.entries(req.headers)) {
163
+ if (value)
164
+ headers.set(key, Array.isArray(value) ? value[0] : value);
165
+ }
166
+ const method = req.method ?? 'GET';
167
+ const hasBody = method !== 'GET' && method !== 'HEAD';
168
+ const request = new Request(url, {
169
+ method,
170
+ headers,
171
+ body: hasBody ? body : null
172
+ });
173
+ const response = await handler(request);
174
+ const responseBody = await response.text();
175
+ res.writeHead(response.status, Object.fromEntries(response.headers.entries()));
176
+ res.end(responseBody);
177
+ });
178
+ httpServer.listen(port, '0.0.0.0');
179
+ }
180
+ console.log();
181
+ console.log(` ${chalk.bold.hex('#5865F2')('discord-flow')} ${chalk.bold.hex('#1EBE38')('multibots')}`);
182
+ console.log();
183
+ console.log(` ${chalk.green('➜')} ${chalk.bold('Local:')} ${chalk.cyan(`http://localhost:${port}/interactions`)}`);
184
+ console.log(` ${chalk.green('➜')} ${chalk.bold('Bots:')} ${chalk.white(bots.size)}`);
185
+ console.log();
186
+ if (autoRegisterCommands && bots.size > 0) {
187
+ for (const [appId, bot] of bots) {
188
+ try {
189
+ const discord = new DiscordAPI({ token: bot.token });
190
+ const commandsMeta = bot.engine.getRegistry().getCommandsMetadata();
191
+ if (commandsMeta.length > 0) {
192
+ const commands = commandsMeta.map(cmd => {
193
+ const command = {
194
+ name: cmd.name,
195
+ description: cmd.description
196
+ };
197
+ if (cmd.options) {
198
+ command.options = cmd.options;
199
+ }
200
+ return command;
201
+ });
202
+ if (bot.guildId) {
203
+ await discord.registerGuildCommands(appId, bot.guildId, commands);
204
+ }
205
+ else {
206
+ await discord.registerCommands(appId, commands);
207
+ }
208
+ console.log(` ${chalk.green('✓')} ${chalk.bold(appId.slice(-6))} ${chalk.dim(`${commands.length} comando(s)`)}`);
209
+ commands.forEach(cmd => {
210
+ console.log(chalk.gray(` /${cmd.name}`));
211
+ });
212
+ }
213
+ }
214
+ catch (error) {
215
+ console.log(chalk.red(` ✗ ${appId.slice(-6)}: ${error}`));
216
+ }
217
+ }
218
+ console.log();
219
+ }
220
+ console.log(chalk.dim(' Pressione Ctrl+C para parar'));
221
+ console.log();
222
+ }
223
+ };
224
+ }
225
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { FlowEngine } from '@discord-flow/core';
2
+ export interface BotConfig {
3
+ applicationId?: string;
4
+ publicKey: string;
5
+ token: string;
6
+ engine: FlowEngine;
7
+ guildId?: string;
8
+ }
9
+ export interface ResolvedBotConfig extends BotConfig {
10
+ applicationId: string;
11
+ }
12
+ export interface MultiBotServerOptions {
13
+ port?: number;
14
+ bots: BotConfig[];
15
+ autoRegisterCommands?: boolean;
16
+ }
17
+ export interface MultiBotServer {
18
+ start(): Promise<void>;
19
+ addBot(config: BotConfig): Promise<void>;
20
+ removeBot(applicationId: string): boolean;
21
+ getBots(): Map<string, ResolvedBotConfig>;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,SAAS;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAChD,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC7C"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@discord-flow/multibots",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Multi-bot server for discord-flow - run multiple bots on a single HTTP server",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -39,4 +39,4 @@
39
39
  "url": "https://github.com/discord-flow/discord-flow.git",
40
40
  "directory": "packages/multibots"
41
41
  }
42
- }
42
+ }