@ninenity/neutrun 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 (226) hide show
  1. package/README.md +5 -0
  2. package/dist/CLI/Bootstrap.d.ts +2 -0
  3. package/dist/CLI/Bootstrap.d.ts.map +1 -0
  4. package/dist/CLI/Bootstrap.js +71 -0
  5. package/dist/CLI/Bootstrap.js.map +1 -0
  6. package/dist/CLI/Localize.d.ts +2 -0
  7. package/dist/CLI/Localize.d.ts.map +1 -0
  8. package/dist/CLI/Localize.js +248 -0
  9. package/dist/CLI/Localize.js.map +1 -0
  10. package/dist/CLI/Translate.d.ts +2 -0
  11. package/dist/CLI/Translate.d.ts.map +1 -0
  12. package/dist/CLI/Translate.js +82 -0
  13. package/dist/CLI/Translate.js.map +1 -0
  14. package/dist/CLI/bin.d.ts +3 -0
  15. package/dist/CLI/bin.d.ts.map +1 -0
  16. package/dist/CLI/bin.js +36 -0
  17. package/dist/CLI/bin.js.map +1 -0
  18. package/dist/Emojis/EmojiLoader.d.ts +4 -0
  19. package/dist/Emojis/EmojiLoader.d.ts.map +1 -0
  20. package/dist/Emojis/EmojiLoader.js +262 -0
  21. package/dist/Emojis/EmojiLoader.js.map +1 -0
  22. package/dist/Emojis/Pool.d.ts +3 -0
  23. package/dist/Emojis/Pool.d.ts.map +1 -0
  24. package/dist/Emojis/Pool.js +33 -0
  25. package/dist/Emojis/Pool.js.map +1 -0
  26. package/dist/Emojis/index.d.ts +3 -0
  27. package/dist/Emojis/index.d.ts.map +1 -0
  28. package/dist/Emojis/index.js +9 -0
  29. package/dist/Emojis/index.js.map +1 -0
  30. package/dist/Emojis/types.d.ts +15 -0
  31. package/dist/Emojis/types.d.ts.map +1 -0
  32. package/dist/Emojis/types.js +3 -0
  33. package/dist/Emojis/types.js.map +1 -0
  34. package/dist/I18n/index.d.ts +34 -0
  35. package/dist/I18n/index.d.ts.map +1 -0
  36. package/dist/I18n/index.js +77 -0
  37. package/dist/I18n/index.js.map +1 -0
  38. package/dist/Logger/Color.d.ts +15 -0
  39. package/dist/Logger/Color.d.ts.map +1 -0
  40. package/dist/Logger/Color.js +54 -0
  41. package/dist/Logger/Color.js.map +1 -0
  42. package/dist/Logger/index.d.ts +38 -0
  43. package/dist/Logger/index.d.ts.map +1 -0
  44. package/dist/Logger/index.js +577 -0
  45. package/dist/Logger/index.js.map +1 -0
  46. package/dist/Modules/Bots/index.d.ts +4 -0
  47. package/dist/Modules/Bots/index.d.ts.map +1 -0
  48. package/dist/Modules/Bots/index.js +45 -0
  49. package/dist/Modules/Bots/index.js.map +1 -0
  50. package/dist/Modules/Component/index.d.ts +14 -0
  51. package/dist/Modules/Component/index.d.ts.map +1 -0
  52. package/dist/Modules/Component/index.js +32 -0
  53. package/dist/Modules/Component/index.js.map +1 -0
  54. package/dist/Modules/Config/index.d.ts +5 -0
  55. package/dist/Modules/Config/index.d.ts.map +1 -0
  56. package/dist/Modules/Config/index.js +13 -0
  57. package/dist/Modules/Config/index.js.map +1 -0
  58. package/dist/Modules/Database/index.d.ts +15 -0
  59. package/dist/Modules/Database/index.d.ts.map +1 -0
  60. package/dist/Modules/Database/index.js +22 -0
  61. package/dist/Modules/Database/index.js.map +1 -0
  62. package/dist/Modules/Diagnostics/ModuleDiagnostics.d.ts +18 -0
  63. package/dist/Modules/Diagnostics/ModuleDiagnostics.d.ts.map +1 -0
  64. package/dist/Modules/Diagnostics/ModuleDiagnostics.js +101 -0
  65. package/dist/Modules/Diagnostics/ModuleDiagnostics.js.map +1 -0
  66. package/dist/Modules/Diagnostics/index.d.ts +3 -0
  67. package/dist/Modules/Diagnostics/index.d.ts.map +1 -0
  68. package/dist/Modules/Diagnostics/index.js +7 -0
  69. package/dist/Modules/Diagnostics/index.js.map +1 -0
  70. package/dist/Modules/Logs/index.d.ts +4 -0
  71. package/dist/Modules/Logs/index.d.ts.map +1 -0
  72. package/dist/Modules/Logs/index.js +11 -0
  73. package/dist/Modules/Logs/index.js.map +1 -0
  74. package/dist/Modules/Storage/index.d.ts +3 -0
  75. package/dist/Modules/Storage/index.d.ts.map +1 -0
  76. package/dist/Modules/Storage/index.js +11 -0
  77. package/dist/Modules/Storage/index.js.map +1 -0
  78. package/dist/Modules/index.d.ts +8 -0
  79. package/dist/Modules/index.d.ts.map +1 -0
  80. package/dist/Modules/index.js +45 -0
  81. package/dist/Modules/index.js.map +1 -0
  82. package/dist/Shared/Autocomplete.d.ts +31 -0
  83. package/dist/Shared/Autocomplete.d.ts.map +1 -0
  84. package/dist/Shared/Autocomplete.js +37 -0
  85. package/dist/Shared/Autocomplete.js.map +1 -0
  86. package/dist/Shared/ChannelLoader.d.ts +4 -0
  87. package/dist/Shared/ChannelLoader.d.ts.map +1 -0
  88. package/dist/Shared/ChannelLoader.js +133 -0
  89. package/dist/Shared/ChannelLoader.js.map +1 -0
  90. package/dist/Shared/Client.d.ts +30 -0
  91. package/dist/Shared/Client.d.ts.map +1 -0
  92. package/dist/Shared/Client.js +517 -0
  93. package/dist/Shared/Client.js.map +1 -0
  94. package/dist/Shared/ComponentAutoDeploy.d.ts +3 -0
  95. package/dist/Shared/ComponentAutoDeploy.d.ts.map +1 -0
  96. package/dist/Shared/ComponentAutoDeploy.js +230 -0
  97. package/dist/Shared/ComponentAutoDeploy.js.map +1 -0
  98. package/dist/Shared/ComponentRuntime.d.ts +43 -0
  99. package/dist/Shared/ComponentRuntime.d.ts.map +1 -0
  100. package/dist/Shared/ComponentRuntime.js +393 -0
  101. package/dist/Shared/ComponentRuntime.js.map +1 -0
  102. package/dist/Shared/Config.d.ts +6 -0
  103. package/dist/Shared/Config.d.ts.map +1 -0
  104. package/dist/Shared/Config.js +15 -0
  105. package/dist/Shared/Config.js.map +1 -0
  106. package/dist/Shared/ConfigLoader.d.ts +2 -0
  107. package/dist/Shared/ConfigLoader.d.ts.map +1 -0
  108. package/dist/Shared/ConfigLoader.js +74 -0
  109. package/dist/Shared/ConfigLoader.js.map +1 -0
  110. package/dist/Shared/ConfigProxy.d.ts +2 -0
  111. package/dist/Shared/ConfigProxy.d.ts.map +1 -0
  112. package/dist/Shared/ConfigProxy.js +46 -0
  113. package/dist/Shared/ConfigProxy.js.map +1 -0
  114. package/dist/Shared/ConsoleLog.d.ts +7 -0
  115. package/dist/Shared/ConsoleLog.d.ts.map +1 -0
  116. package/dist/Shared/ConsoleLog.js +23 -0
  117. package/dist/Shared/ConsoleLog.js.map +1 -0
  118. package/dist/Shared/CooldownManager.d.ts +16 -0
  119. package/dist/Shared/CooldownManager.d.ts.map +1 -0
  120. package/dist/Shared/CooldownManager.js +167 -0
  121. package/dist/Shared/CooldownManager.js.map +1 -0
  122. package/dist/Shared/Definer.d.ts +10 -0
  123. package/dist/Shared/Definer.d.ts.map +1 -0
  124. package/dist/Shared/Definer.js +711 -0
  125. package/dist/Shared/Definer.js.map +1 -0
  126. package/dist/Shared/EventBus.d.ts +48 -0
  127. package/dist/Shared/EventBus.d.ts.map +1 -0
  128. package/dist/Shared/EventBus.js +181 -0
  129. package/dist/Shared/EventBus.js.map +1 -0
  130. package/dist/Shared/InteractionContext.d.ts +12 -0
  131. package/dist/Shared/InteractionContext.d.ts.map +1 -0
  132. package/dist/Shared/InteractionContext.js +34 -0
  133. package/dist/Shared/InteractionContext.js.map +1 -0
  134. package/dist/Shared/InteractionManager.d.ts +27 -0
  135. package/dist/Shared/InteractionManager.d.ts.map +1 -0
  136. package/dist/Shared/InteractionManager.js +256 -0
  137. package/dist/Shared/InteractionManager.js.map +1 -0
  138. package/dist/Shared/LocalBotRegistry.d.ts +14 -0
  139. package/dist/Shared/LocalBotRegistry.d.ts.map +1 -0
  140. package/dist/Shared/LocalBotRegistry.js +140 -0
  141. package/dist/Shared/LocalBotRegistry.js.map +1 -0
  142. package/dist/Shared/LogTransport.d.ts +49 -0
  143. package/dist/Shared/LogTransport.d.ts.map +1 -0
  144. package/dist/Shared/LogTransport.js +357 -0
  145. package/dist/Shared/LogTransport.js.map +1 -0
  146. package/dist/Shared/Neutrun.d.ts +55 -0
  147. package/dist/Shared/Neutrun.d.ts.map +1 -0
  148. package/dist/Shared/Neutrun.js +269 -0
  149. package/dist/Shared/Neutrun.js.map +1 -0
  150. package/dist/Shared/Plugin.d.ts +8 -0
  151. package/dist/Shared/Plugin.d.ts.map +1 -0
  152. package/dist/Shared/Plugin.js +3 -0
  153. package/dist/Shared/Plugin.js.map +1 -0
  154. package/dist/Shared/Pool.d.ts +3 -0
  155. package/dist/Shared/Pool.d.ts.map +1 -0
  156. package/dist/Shared/Pool.js +29 -0
  157. package/dist/Shared/Pool.js.map +1 -0
  158. package/dist/Shared/ProcessManager.d.ts +11 -0
  159. package/dist/Shared/ProcessManager.d.ts.map +1 -0
  160. package/dist/Shared/ProcessManager.js +56 -0
  161. package/dist/Shared/ProcessManager.js.map +1 -0
  162. package/dist/Shared/QueueManager.d.ts +9 -0
  163. package/dist/Shared/QueueManager.d.ts.map +1 -0
  164. package/dist/Shared/QueueManager.js +65 -0
  165. package/dist/Shared/QueueManager.js.map +1 -0
  166. package/dist/Shared/RoleLoader.d.ts +4 -0
  167. package/dist/Shared/RoleLoader.d.ts.map +1 -0
  168. package/dist/Shared/RoleLoader.js +138 -0
  169. package/dist/Shared/RoleLoader.js.map +1 -0
  170. package/dist/Shared/Supervisor.d.ts +67 -0
  171. package/dist/Shared/Supervisor.d.ts.map +1 -0
  172. package/dist/Shared/Supervisor.js +308 -0
  173. package/dist/Shared/Supervisor.js.map +1 -0
  174. package/dist/Shared/TelemetryService.d.ts +63 -0
  175. package/dist/Shared/TelemetryService.d.ts.map +1 -0
  176. package/dist/Shared/TelemetryService.js +631 -0
  177. package/dist/Shared/TelemetryService.js.map +1 -0
  178. package/dist/Shared/Utils.d.ts +94 -0
  179. package/dist/Shared/Utils.d.ts.map +1 -0
  180. package/dist/Shared/Utils.js +390 -0
  181. package/dist/Shared/Utils.js.map +1 -0
  182. package/dist/Shared/WebSocket.d.ts +15 -0
  183. package/dist/Shared/WebSocket.d.ts.map +1 -0
  184. package/dist/Shared/WebSocket.js +599 -0
  185. package/dist/Shared/WebSocket.js.map +1 -0
  186. package/dist/Types/Client.Type.d.ts +130 -0
  187. package/dist/Types/Client.Type.d.ts.map +1 -0
  188. package/dist/Types/Client.Type.js +182 -0
  189. package/dist/Types/Client.Type.js.map +1 -0
  190. package/dist/Types/Command.Type.d.ts +28 -0
  191. package/dist/Types/Command.Type.d.ts.map +1 -0
  192. package/dist/Types/Command.Type.js +4 -0
  193. package/dist/Types/Command.Type.js.map +1 -0
  194. package/dist/Types/Definer.Type.d.ts +37 -0
  195. package/dist/Types/Definer.Type.d.ts.map +1 -0
  196. package/dist/Types/Definer.Type.js +4 -0
  197. package/dist/Types/Definer.Type.js.map +1 -0
  198. package/dist/Types/InputInteraction.Type.d.ts +90 -0
  199. package/dist/Types/InputInteraction.Type.d.ts.map +1 -0
  200. package/dist/Types/InputInteraction.Type.js +339 -0
  201. package/dist/Types/InputInteraction.Type.js.map +1 -0
  202. package/dist/Types/Interaction.Type.d.ts +47 -0
  203. package/dist/Types/Interaction.Type.d.ts.map +1 -0
  204. package/dist/Types/Interaction.Type.js +4 -0
  205. package/dist/Types/Interaction.Type.js.map +1 -0
  206. package/dist/Types/Log.Type.d.ts +28 -0
  207. package/dist/Types/Log.Type.d.ts.map +1 -0
  208. package/dist/Types/Log.Type.js +3 -0
  209. package/dist/Types/Log.Type.js.map +1 -0
  210. package/dist/Types/Permission.Type.d.ts +17 -0
  211. package/dist/Types/Permission.Type.d.ts.map +1 -0
  212. package/dist/Types/Permission.Type.js +13 -0
  213. package/dist/Types/Permission.Type.js.map +1 -0
  214. package/dist/Types/PrefixCommandBuilder.Type.d.ts +81 -0
  215. package/dist/Types/PrefixCommandBuilder.Type.d.ts.map +1 -0
  216. package/dist/Types/PrefixCommandBuilder.Type.js +203 -0
  217. package/dist/Types/PrefixCommandBuilder.Type.js.map +1 -0
  218. package/dist/Types/TaskDefiner.Type.d.ts +14 -0
  219. package/dist/Types/TaskDefiner.Type.d.ts.map +1 -0
  220. package/dist/Types/TaskDefiner.Type.js +4 -0
  221. package/dist/Types/TaskDefiner.Type.js.map +1 -0
  222. package/dist/index.d.ts +44 -0
  223. package/dist/index.d.ts.map +1 -0
  224. package/dist/index.js +122 -0
  225. package/dist/index.js.map +1 -0
  226. package/package.json +55 -0
@@ -0,0 +1,599 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.IsConnected = exports.OnConnectionChange = exports.Disconnect = exports.SendResourceSnapshot = exports.Send = exports.Connect = void 0;
7
+ const ws_1 = __importDefault(require("ws"));
8
+ const Client_1 = require("./Client");
9
+ const ConsoleLog_1 = require("./ConsoleLog");
10
+ const Color_1 = __importDefault(require("../Logger/Color"));
11
+ const Utils_1 = __importDefault(require("./Utils"));
12
+ const Config_1 = __importDefault(require("./Config"));
13
+ const LogTransport_1 = __importDefault(require("./LogTransport"));
14
+ const EventBus_1 = __importDefault(require("./EventBus"));
15
+ const Diagnostics_1 = require("../Modules/Diagnostics");
16
+ const LocalBotRegistry_1 = require("./LocalBotRegistry");
17
+ const MAX_FRAME_BYTES = 256 * 1024;
18
+ // Keep resource chunks well below the transport limit so the API can validate
19
+ // and forward them without ever truncating a guild snapshot.
20
+ const RESOURCE_CHUNK_TARGET_BYTES = 180 * 1024;
21
+ const RESOURCE_SYNC_INTERVAL_MS = 2_000;
22
+ const DEFAULT_HEARTBEAT_MS = 30_000;
23
+ const MAX_RECONNECT_DELAY_MS = 30_000;
24
+ const CONNECTION_FAILURE_LOG_INTERVAL_MS = 15 * 60_000;
25
+ const CONNECTION_STABILITY_WINDOW_MS = 30_000;
26
+ let Ws = null;
27
+ let Connected = false;
28
+ let Authenticated = false;
29
+ let Attempt = 0;
30
+ let HeartbeatTimer = null;
31
+ let ReconnectTimer = null;
32
+ let ConnectionAttempt = null;
33
+ let ResourceSnapshotPromise = null;
34
+ let LastResourceSyncAt = 0;
35
+ let ShuttingDown = false;
36
+ let LastProtocolLogAt = 0;
37
+ let LastConnectionFailureLogAt = 0;
38
+ const diagnostics = (0, Diagnostics_1.createModuleDiagnostics)('Realtime');
39
+ let Config = {
40
+ Url: Config_1.default.WS_URL,
41
+ Heartbeat: DEFAULT_HEARTBEAT_MS,
42
+ Reconnect: true
43
+ };
44
+ const ConnectionStateHandlers = new Set();
45
+ const safeErrorMessage = (error) => {
46
+ if (error instanceof Error && error.message)
47
+ return error.message;
48
+ return String(error || 'erro desconhecido');
49
+ };
50
+ const logProtocolIssue = (message) => {
51
+ const now = Date.now();
52
+ if (now - LastProtocolLogAt < 15_000)
53
+ return;
54
+ LastProtocolLogAt = now;
55
+ (0, ConsoleLog_1.logWarn)(message, 'WebSocket');
56
+ };
57
+ const summarizeConnectionFailure = (message) => {
58
+ const status = message.match(/\b([45]\d{2})\b/)?.[1];
59
+ if (status)
60
+ return status;
61
+ const normalized = message.replace(/\s+/g, ' ').trim();
62
+ return normalized.length > 60
63
+ ? `${normalized.slice(0, 57)}...`
64
+ : normalized;
65
+ };
66
+ const logConnectionFailure = (message) => {
67
+ const now = Date.now();
68
+ if (now - LastConnectionFailureLogAt < CONNECTION_FAILURE_LOG_INTERVAL_MS)
69
+ return;
70
+ LastConnectionFailureLogAt = now;
71
+ diagnostics.warn(`API offline · retry ativo (${summarizeConnectionFailure(message)})`);
72
+ };
73
+ const normalizeWsUrl = (value) => {
74
+ const raw = typeof value === 'string' ? value.trim() : '';
75
+ if (!raw)
76
+ return Config_1.default.WS_URL;
77
+ if (raw.startsWith('https://'))
78
+ return `wss://${raw.slice('https://'.length)}`;
79
+ if (raw.startsWith('http://'))
80
+ return `ws://${raw.slice('http://'.length)}`;
81
+ return raw;
82
+ };
83
+ const getEnvironment = () => {
84
+ const value = (process.env.BOT_ENV || process.env.NODE_ENV || '').trim().toLowerCase();
85
+ return value === 'production' ? 'production' : 'development';
86
+ };
87
+ const getBotId = () => {
88
+ const clientId = Client_1.Bot.Instance?.user?.id;
89
+ const configuredId = process.env.BOT_ID?.trim() || process.env.CLIENT_ID?.trim();
90
+ const value = clientId || configuredId || 'default_bot';
91
+ return value.slice(0, 100);
92
+ };
93
+ const getBotName = () => {
94
+ const user = Client_1.Bot.Instance?.user;
95
+ return (user?.displayName?.trim() ||
96
+ user?.username?.trim() ||
97
+ process.env.BOT_NAME?.trim() ||
98
+ 'Ninenity Bot').slice(0, 200);
99
+ };
100
+ const getBotAvatar = () => {
101
+ try {
102
+ return (Client_1.Bot.Instance?.user?.displayAvatarURL({
103
+ extension: 'png',
104
+ size: 512
105
+ }) || null);
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ };
111
+ const getBotBanner = () => {
112
+ try {
113
+ const user = Client_1.Bot.Instance?.user;
114
+ return typeof user?.bannerURL === 'function' ? user.bannerURL({ extension: 'png', size: 1024 }) || null : null;
115
+ }
116
+ catch {
117
+ return null;
118
+ }
119
+ };
120
+ const getMemory = () => {
121
+ try {
122
+ return Utils_1.default.memory.usage();
123
+ }
124
+ catch {
125
+ return { heapUsedMB: 0, heapTotalMB: 0, rssMB: 0, externalMB: 0 };
126
+ }
127
+ };
128
+ const notifyConnectionState = (connected) => {
129
+ for (const handler of Array.from(ConnectionStateHandlers)) {
130
+ try {
131
+ handler(connected);
132
+ }
133
+ catch (error) {
134
+ (0, ConsoleLog_1.logWarn)(`Falha em callback de estado do WebSocket: ${safeErrorMessage(error)}`);
135
+ }
136
+ }
137
+ // O ciclo de vida da conexão também é público no EventBus, a forma
138
+ // canônica de reagir a conectividade sem acoplar ao transporte.
139
+ EventBus_1.default.emit(connected ? 'ws:connected' : 'ws:disconnected', {
140
+ at: new Date().toISOString(),
141
+ botId: getBotId()
142
+ });
143
+ };
144
+ const WIRE_TYPE_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9:_.*-]*$/;
145
+ const AUTH_TIMEOUT_MS = 15_000;
146
+ // Autenticação pendente: se o servidor aceitar o handshake mas nunca
147
+ // responder o auth, a conexão ficaria aberta e inútil para sempre.
148
+ let AuthTimeout = null;
149
+ const clearAuthTimeout = () => {
150
+ if (!AuthTimeout)
151
+ return;
152
+ clearTimeout(AuthTimeout);
153
+ AuthTimeout = null;
154
+ };
155
+ const startAuthTimeout = () => {
156
+ clearAuthTimeout();
157
+ AuthTimeout = setTimeout(() => {
158
+ AuthTimeout = null;
159
+ if (Authenticated || !Ws)
160
+ return;
161
+ (0, ConsoleLog_1.logWarn)('Autenticação WebSocket não concluída a tempo — encerrando conexão.', 'WebSocket');
162
+ closeSocket(Ws);
163
+ }, AUTH_TIMEOUT_MS);
164
+ AuthTimeout.unref?.();
165
+ };
166
+ const stopHeartbeat = () => {
167
+ if (!HeartbeatTimer)
168
+ return;
169
+ clearInterval(HeartbeatTimer);
170
+ HeartbeatTimer = null;
171
+ };
172
+ const startHeartbeat = () => {
173
+ stopHeartbeat();
174
+ const interval = Math.max(10_000, Number(Config.Heartbeat) || DEFAULT_HEARTBEAT_MS);
175
+ HeartbeatTimer = setInterval(() => {
176
+ Send('heartbeat', {
177
+ BotId: getBotId(),
178
+ Guilds: Client_1.Bot.Instance?.guilds.cache.size || 0,
179
+ Uptime: process.uptime(),
180
+ Memory: getMemory()
181
+ });
182
+ }, interval);
183
+ HeartbeatTimer.unref?.();
184
+ };
185
+ const closeSocket = (socket, terminateAfterMs = 0) => {
186
+ if (!socket)
187
+ return;
188
+ try {
189
+ if (socket.readyState === ws_1.default.OPEN || socket.readyState === ws_1.default.CONNECTING) {
190
+ socket.close(1000, 'Graceful shutdown');
191
+ }
192
+ }
193
+ catch {
194
+ // O socket pode já ter sido encerrado pelo runtime do ws.
195
+ }
196
+ if (terminateAfterMs > 0) {
197
+ const timer = setTimeout(() => {
198
+ try {
199
+ if (socket.readyState !== ws_1.default.CLOSED)
200
+ socket.terminate();
201
+ }
202
+ catch {
203
+ // Nada a fazer se o socket já estiver fechado.
204
+ }
205
+ }, terminateAfterMs);
206
+ timer.unref?.();
207
+ }
208
+ };
209
+ const clearReconnectTimer = () => {
210
+ if (!ReconnectTimer)
211
+ return;
212
+ clearTimeout(ReconnectTimer);
213
+ ReconnectTimer = null;
214
+ };
215
+ const scheduleReconnect = () => {
216
+ if (!Config.Reconnect || ShuttingDown || ReconnectTimer)
217
+ return;
218
+ const exponent = Math.min(Attempt, 5);
219
+ const delay = Math.min(1_000 * 2 ** exponent + Math.floor(Math.random() * 1_000), MAX_RECONNECT_DELAY_MS);
220
+ Attempt = Math.min(Attempt + 1, 10);
221
+ ReconnectTimer = setTimeout(() => {
222
+ ReconnectTimer = null;
223
+ void connectInternal();
224
+ }, delay);
225
+ ReconnectTimer.unref?.();
226
+ };
227
+ const decodeMessage = (rawData) => {
228
+ const raw = Array.isArray(rawData)
229
+ ? Buffer.concat(rawData).toString('utf8')
230
+ : rawData.toString();
231
+ if (Buffer.byteLength(raw, 'utf8') > MAX_FRAME_BYTES) {
232
+ logProtocolIssue('Mensagem WebSocket descartada por exceder o limite de tamanho.');
233
+ return null;
234
+ }
235
+ try {
236
+ const parsed = JSON.parse(raw);
237
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
238
+ return null;
239
+ const message = parsed;
240
+ if (typeof message.Type !== 'string' || !message.Type.trim())
241
+ return null;
242
+ if (message.Type.length > 100)
243
+ return null;
244
+ // O Type vira nome de evento (`ws:<Type>`) no EventBus — rejeitar cedo
245
+ // valores fora do padrão evita throw dentro do dispatch de mensagens.
246
+ if (!WIRE_TYPE_PATTERN.test(message.Type)) {
247
+ logProtocolIssue('Tipo de mensagem WebSocket com caracteres não permitidos.');
248
+ return null;
249
+ }
250
+ return {
251
+ Type: message.Type,
252
+ Data: message.Data,
253
+ Timestamp: typeof message.Timestamp === 'number' && Number.isFinite(message.Timestamp)
254
+ ? message.Timestamp
255
+ : Date.now()
256
+ };
257
+ }
258
+ catch {
259
+ logProtocolIssue('Mensagem WebSocket inválida recebida da API.');
260
+ return null;
261
+ }
262
+ };
263
+ // Toda mensagem recebida é publicada no EventBus: `ws:message` carrega o
264
+ // envelope completo e `ws:<Type>` carrega apenas o Data. Bots e plugins
265
+ // reagem a qualquer mensagem da API sem depender do transporte.
266
+ const publishToEventBus = (message) => {
267
+ EventBus_1.default.emit('ws:message', message);
268
+ EventBus_1.default.emit(`ws:${message.Type}`, message.Data);
269
+ };
270
+ const handleMessage = (message) => {
271
+ if (ShuttingDown)
272
+ return;
273
+ if (message.Type === 'auth_success') {
274
+ Authenticated = true;
275
+ clearAuthTimeout();
276
+ notifyConnectionState(true);
277
+ (0, ConsoleLog_1.logSuccess)(`Conectado a ${(0, Color_1.default)(normalizeWsUrl(Config.Url), 'cyan', 'bold')}`, 'WebSocket');
278
+ publishToEventBus(message);
279
+ return;
280
+ }
281
+ if (message.Type === 'CONFIG_UPDATED' && Client_1.Bot.Instance) {
282
+ void Client_1.Bot.Instance.hydrate(message.Data).then(() => {
283
+ Send('config_synced', { botId: getBotId() });
284
+ EventBus_1.default.emit('config:synced', { botId: getBotId() });
285
+ }, (error) => {
286
+ (0, ConsoleLog_1.logWarn)(`Falha ao aplicar configurações recebidas: ${safeErrorMessage(error)}`);
287
+ });
288
+ }
289
+ if (message.Type === 'request_bot_resources') {
290
+ void SendResourceSnapshot();
291
+ }
292
+ publishToEventBus(message);
293
+ };
294
+ const connectInternal = () => {
295
+ if (Connected)
296
+ return Promise.resolve();
297
+ if (ConnectionAttempt)
298
+ return ConnectionAttempt;
299
+ let finishAttempt = () => { };
300
+ const attemptPromise = new Promise((resolve) => {
301
+ finishAttempt = resolve;
302
+ });
303
+ ConnectionAttempt = attemptPromise;
304
+ let socket;
305
+ try {
306
+ socket = new ws_1.default(normalizeWsUrl(Config.Url));
307
+ }
308
+ catch (error) {
309
+ const message = safeErrorMessage(error);
310
+ logConnectionFailure(message);
311
+ ConnectionAttempt = null;
312
+ finishAttempt();
313
+ scheduleReconnect();
314
+ return attemptPromise;
315
+ }
316
+ Ws = socket;
317
+ let attemptFinished = false;
318
+ let stabilityTimer = null;
319
+ const finish = () => {
320
+ if (attemptFinished)
321
+ return;
322
+ attemptFinished = true;
323
+ if (ConnectionAttempt === attemptPromise)
324
+ ConnectionAttempt = null;
325
+ finishAttempt();
326
+ };
327
+ const timeout = setTimeout(() => {
328
+ if (!Connected && Ws === socket)
329
+ closeSocket(socket);
330
+ finish();
331
+ }, 5_000);
332
+ timeout.unref?.();
333
+ socket.on('open', async () => {
334
+ if (Ws !== socket || ShuttingDown) {
335
+ closeSocket(socket);
336
+ finish();
337
+ return;
338
+ }
339
+ try {
340
+ const botId = getBotId();
341
+ const environment = getEnvironment();
342
+ const installationId = await (0, LocalBotRegistry_1.ensureLocalInstallationId)(botId, environment);
343
+ // O await acima pode demorar (primeira leitura de disco): o socket pode
344
+ // ter sido substituído ou fechado nesse intervalo (timeout/reconnect).
345
+ if (Ws !== socket || ShuttingDown) {
346
+ closeSocket(socket);
347
+ return;
348
+ }
349
+ // O socket precisa estar marcado como disponível para que Send() envie
350
+ // o primeiro frame do protocolo (auth). S? notificamos consumidores após
351
+ // o handshake ter sido aceito localmente.
352
+ Connected = true;
353
+ Authenticated = false;
354
+ const authSent = Send('auth', {
355
+ apiKey: process.env.API_KEY?.trim() || '',
356
+ apiSecret: process.env.API_SECRET?.trim() || '',
357
+ ...(process.env.WS_SECRET?.trim()
358
+ ? { Secret: process.env.WS_SECRET.trim() }
359
+ : {}),
360
+ BotId: botId,
361
+ Name: getBotName(),
362
+ Avatar: getBotAvatar(),
363
+ Banner: getBotBanner(),
364
+ Guilds: Client_1.Bot.Instance?.guilds.cache.size || Config.Guilds || 0,
365
+ Memory: getMemory(),
366
+ Env: environment,
367
+ ...(installationId ? { InstallationId: installationId } : {})
368
+ });
369
+ if (!authSent)
370
+ throw new Error('não foi possível enviar a autenticação');
371
+ stabilityTimer = setTimeout(() => {
372
+ Attempt = 0;
373
+ LastConnectionFailureLogAt = 0;
374
+ stabilityTimer = null;
375
+ }, CONNECTION_STABILITY_WINDOW_MS);
376
+ stabilityTimer.unref?.();
377
+ startHeartbeat();
378
+ startAuthTimeout();
379
+ if (environment === 'development' && botId !== 'default_bot') {
380
+ void (0, LocalBotRegistry_1.registerLocalBot)({
381
+ BotId: botId,
382
+ Name: getBotName(),
383
+ Avatar: getBotAvatar(),
384
+ Banner: getBotBanner(),
385
+ InstallationId: installationId,
386
+ Path: process.cwd()
387
+ }).catch((error) => {
388
+ (0, ConsoleLog_1.logWarn)(`Falha ao registrar bot local: ${safeErrorMessage(error)}`);
389
+ });
390
+ }
391
+ void SendResourceSnapshot();
392
+ }
393
+ catch (error) {
394
+ Connected = false;
395
+ stopHeartbeat();
396
+ notifyConnectionState(false);
397
+ const message = safeErrorMessage(error);
398
+ logConnectionFailure(`falha no handshake: ${message}`);
399
+ closeSocket(socket);
400
+ }
401
+ finally {
402
+ clearTimeout(timeout);
403
+ finish();
404
+ }
405
+ });
406
+ socket.on('message', (data) => {
407
+ const message = decodeMessage(data);
408
+ if (message)
409
+ handleMessage(message);
410
+ });
411
+ socket.on('close', () => {
412
+ clearTimeout(timeout);
413
+ clearAuthTimeout();
414
+ if (stabilityTimer)
415
+ clearTimeout(stabilityTimer);
416
+ const isCurrent = Ws === socket;
417
+ if (!isCurrent) {
418
+ finish();
419
+ return;
420
+ }
421
+ Ws = null;
422
+ const wasConnected = Authenticated;
423
+ Connected = false;
424
+ Authenticated = false;
425
+ stopHeartbeat();
426
+ if (wasConnected)
427
+ notifyConnectionState(false);
428
+ if (!ShuttingDown && Config.Reconnect)
429
+ scheduleReconnect();
430
+ finish();
431
+ });
432
+ socket.on('error', (error) => {
433
+ const message = safeErrorMessage(error);
434
+ logConnectionFailure(message);
435
+ closeSocket(socket);
436
+ finish();
437
+ });
438
+ return attemptPromise;
439
+ };
440
+ const Connect = (userConfig) => {
441
+ ShuttingDown = false;
442
+ clearReconnectTimer();
443
+ // Chamadas concorrentes (por exemplo, Client + Telemetry) devem reutilizar
444
+ // a tentativa atual sem sobrescrever sua URL/configuração.
445
+ if (!Connected && !ConnectionAttempt) {
446
+ Config = {
447
+ Url: normalizeWsUrl(userConfig?.Url || Config_1.default.WS_URL),
448
+ Heartbeat: DEFAULT_HEARTBEAT_MS,
449
+ Reconnect: true,
450
+ ...userConfig
451
+ };
452
+ Config.Url = normalizeWsUrl(Config.Url);
453
+ }
454
+ else if (userConfig) {
455
+ Config = { ...Config, ...userConfig };
456
+ Config.Url = normalizeWsUrl(Config.Url);
457
+ }
458
+ return connectInternal();
459
+ };
460
+ exports.Connect = Connect;
461
+ const Send = (type, data) => {
462
+ if (!Connected || !Ws || Ws.readyState !== ws_1.default.OPEN)
463
+ return false;
464
+ if (typeof type !== 'string' || !type.trim() || type.length > 100)
465
+ return false;
466
+ let serialized;
467
+ try {
468
+ serialized = JSON.stringify({ Type: type, Data: data, Timestamp: Date.now() });
469
+ }
470
+ catch (error) {
471
+ (0, ConsoleLog_1.logWarn)(`Mensagem WebSocket descartada: ${safeErrorMessage(error)}`, 'WebSocket');
472
+ return false;
473
+ }
474
+ if (Buffer.byteLength(serialized, 'utf8') > MAX_FRAME_BYTES) {
475
+ logProtocolIssue(`Mensagem WebSocket "${type}" descartada por exceder o limite.`);
476
+ return false;
477
+ }
478
+ try {
479
+ Ws.send(serialized, (error) => {
480
+ if (error)
481
+ logProtocolIssue(`Falha ao enviar "${type}": ${safeErrorMessage(error)}`);
482
+ });
483
+ return true;
484
+ }
485
+ catch (error) {
486
+ const message = safeErrorMessage(error);
487
+ diagnostics.warn('Falha ao enviar mensagem WebSocket', { type, message });
488
+ logProtocolIssue(`Falha ao enviar "${type}": ${message}`);
489
+ return false;
490
+ }
491
+ };
492
+ exports.Send = Send;
493
+ const SendResourceSnapshot = async () => {
494
+ const client = Client_1.Bot.Instance;
495
+ if (!client || !Connected)
496
+ return;
497
+ if (ResourceSnapshotPromise)
498
+ return ResourceSnapshotPromise;
499
+ if (Date.now() - LastResourceSyncAt < RESOURCE_SYNC_INTERVAL_MS)
500
+ return;
501
+ ResourceSnapshotPromise = (async () => {
502
+ try {
503
+ const guilds = await client.getGuildResources();
504
+ if (!Connected)
505
+ return;
506
+ const normalizedGuilds = guilds.map((guild) => ({
507
+ ...guild,
508
+ channels: guild.channels.slice(0, 500),
509
+ roles: guild.roles.slice(0, 500)
510
+ }));
511
+ const botId = getBotId();
512
+ const chunks = [];
513
+ let current = [];
514
+ const syncId = `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
515
+ for (const guild of normalizedGuilds) {
516
+ const candidate = [...current, guild];
517
+ const estimate = JSON.stringify({
518
+ Type: 'bot_resources_sync_chunk',
519
+ Data: { botId, syncId, index: 0, total: 1, guilds: candidate }
520
+ });
521
+ if (current.length > 0 &&
522
+ Buffer.byteLength(estimate, 'utf8') > RESOURCE_CHUNK_TARGET_BYTES) {
523
+ chunks.push(current);
524
+ current = [guild];
525
+ }
526
+ else {
527
+ current = candidate;
528
+ }
529
+ }
530
+ if (current.length > 0)
531
+ chunks.push(current);
532
+ if (chunks.length === 0)
533
+ chunks.push([]);
534
+ let sentAll = chunks.length > 0;
535
+ for (let index = 0; index < chunks.length; index++) {
536
+ const sent = Send('bot_resources_sync_chunk', {
537
+ botId,
538
+ syncId,
539
+ index,
540
+ total: chunks.length,
541
+ guilds: chunks[index]
542
+ });
543
+ if (!sent)
544
+ sentAll = false;
545
+ }
546
+ if (sentAll)
547
+ LastResourceSyncAt = Date.now();
548
+ }
549
+ catch (error) {
550
+ (0, ConsoleLog_1.logWarn)(`Falha ao sincronizar recursos das guilds: ${safeErrorMessage(error)}`);
551
+ }
552
+ finally {
553
+ ResourceSnapshotPromise = null;
554
+ }
555
+ })();
556
+ return ResourceSnapshotPromise;
557
+ };
558
+ exports.SendResourceSnapshot = SendResourceSnapshot;
559
+ const Disconnect = () => {
560
+ ShuttingDown = true;
561
+ Config.Reconnect = false;
562
+ clearReconnectTimer();
563
+ clearAuthTimeout();
564
+ stopHeartbeat();
565
+ const socket = Ws;
566
+ if (socket && Connected)
567
+ Send('disconnect', { BotId: getBotId() });
568
+ const wasConnected = Connected;
569
+ Connected = false;
570
+ Ws = null;
571
+ if (wasConnected)
572
+ notifyConnectionState(false);
573
+ closeSocket(socket, 2_000);
574
+ logTransport.stop();
575
+ };
576
+ exports.Disconnect = Disconnect;
577
+ const OnConnectionChange = (handler) => {
578
+ if (typeof handler !== 'function')
579
+ return () => { };
580
+ ConnectionStateHandlers.add(handler);
581
+ return () => ConnectionStateHandlers.delete(handler);
582
+ };
583
+ exports.OnConnectionChange = OnConnectionChange;
584
+ // "Conectado" para consumidores significa autenticado: entre o handshake e o
585
+ // auth_success o servidor pode derrubar frames silenciosamente, e a fila
586
+ // offline da telemetria só pode fazer flush num socket autenticado.
587
+ const IsConnected = () => Connected && Authenticated && Ws?.readyState === ws_1.default.OPEN;
588
+ exports.IsConnected = IsConnected;
589
+ // O transporte de logs compartilha exatamente o socket autenticado do bot.
590
+ // Instanci?-lo uma única vez evita conexões paralelas e mantém a fila ativa
591
+ // durante reconexões transitórias.
592
+ const logTransport = new LogTransport_1.default({
593
+ send: Send,
594
+ isConnected: IsConnected,
595
+ onConnectionChange: OnConnectionChange,
596
+ getBotId,
597
+ getEnvironment
598
+ });
599
+ //# sourceMappingURL=WebSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocket.js","sourceRoot":"","sources":["../../src/Shared/WebSocket.ts"],"names":[],"mappings":"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"}