@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,631 @@
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.Telemetry = exports.TelemetryService = void 0;
7
+ const os_1 = __importDefault(require("os"));
8
+ const promises_1 = __importDefault(require("fs/promises"));
9
+ const path_1 = __importDefault(require("path"));
10
+ require("dotenv/config");
11
+ const Client_1 = require("./Client");
12
+ const ConsoleLog_1 = require("./ConsoleLog");
13
+ const Logger_1 = __importDefault(require("../Logger"));
14
+ const EventBus_1 = __importDefault(require("./EventBus"));
15
+ const MAX_QUEUE_ITEMS = 100;
16
+ const MAX_QUEUE_BYTES = 2 * 1024 * 1024;
17
+ const MAX_ACTION_GROUPS = 500;
18
+ const MAX_ACTION_ENTRIES = 25;
19
+ const MAX_EVENT_GROUPS = 200;
20
+ const MAX_COUNTER_KEYS = 100;
21
+ const TELEMETRY_INTERVAL_MS = 5 * 60 * 1000;
22
+ const QUEUE_SEND_INTERVAL_MS = 1_100;
23
+ const EVENT_LOOP_SAMPLE_MS = 1_000;
24
+ const queuePath = path_1.default.join(process.cwd(), '.ninenity', 'telemetry_queue.json');
25
+ const safeErrorMessage = (error) => {
26
+ if (error instanceof Error && error.message)
27
+ return error.message;
28
+ return String(error || 'erro desconhecido');
29
+ };
30
+ const clamp = (value, minimum, maximum) => {
31
+ if (!Number.isFinite(value))
32
+ return minimum;
33
+ return Math.min(maximum, Math.max(minimum, value));
34
+ };
35
+ const sanitizeValue = (value, depth = 0, seen = new WeakSet()) => {
36
+ if (value === null || value === undefined)
37
+ return value;
38
+ if (typeof value === 'string')
39
+ return value.slice(0, 2_048);
40
+ if (typeof value === 'number')
41
+ return Number.isFinite(value) ? value : 0;
42
+ if (typeof value === 'boolean')
43
+ return value;
44
+ if (typeof value === 'bigint')
45
+ return value.toString();
46
+ if (typeof value !== 'object')
47
+ return String(value).slice(0, 2_048);
48
+ if (depth >= 4)
49
+ return '[object omitted]';
50
+ if (seen.has(value))
51
+ return '[circular]';
52
+ seen.add(value);
53
+ if (value instanceof Date)
54
+ return value.toISOString();
55
+ if (Array.isArray(value)) {
56
+ return value.slice(0, 50).map((entry) => sanitizeValue(entry, depth + 1, seen));
57
+ }
58
+ const output = {};
59
+ for (const key of Object.keys(value).slice(0, 50)) {
60
+ if (key === '__proto__' || key === 'prototype' || key === 'constructor')
61
+ continue;
62
+ try {
63
+ output[key.slice(0, 100)] = sanitizeValue(value[key], depth + 1, seen);
64
+ }
65
+ catch {
66
+ output[key.slice(0, 100)] = '[unavailable]';
67
+ }
68
+ }
69
+ return output;
70
+ };
71
+ const getMemoryUsage = () => {
72
+ try {
73
+ const memory = process.memoryUsage();
74
+ return {
75
+ heapUsedMB: Number((memory.heapUsed / 1024 / 1024).toFixed(2)),
76
+ heapTotalMB: Number((memory.heapTotal / 1024 / 1024).toFixed(2)),
77
+ rssMB: Number((memory.rss / 1024 / 1024).toFixed(2)),
78
+ externalMB: Number((memory.external / 1024 / 1024).toFixed(2))
79
+ };
80
+ }
81
+ catch {
82
+ return { heapUsedMB: 0, heapTotalMB: 0, rssMB: 0, externalMB: 0 };
83
+ }
84
+ };
85
+ const getLoadAverage = () => {
86
+ try {
87
+ const [one, five, fifteen] = os_1.default.loadavg();
88
+ return {
89
+ loadAvg1: clamp(Number(one.toFixed(2)), 0, 1_000),
90
+ loadAvg5: clamp(Number(five.toFixed(2)), 0, 1_000),
91
+ loadAvg15: clamp(Number(fifteen.toFixed(2)), 0, 1_000)
92
+ };
93
+ }
94
+ catch {
95
+ return { loadAvg1: 0, loadAvg5: 0, loadAvg15: 0 };
96
+ }
97
+ };
98
+ // Amostragem de lag do event loop por deriva de timer: quando o loop está
99
+ // congestionado, o setInterval atrasa e a diferença revela o bloqueio.
100
+ let eventLoopLagEmaMs = 0;
101
+ let eventLoopLagMaxMs = 0;
102
+ let eventLoopSampler = null;
103
+ const startEventLoopSampler = () => {
104
+ if (eventLoopSampler)
105
+ return;
106
+ // performance.now() é monotonamente crescente: diferente de Date.now(),
107
+ // não registra "lag" fantasma quando o relógio do sistema é ajustado.
108
+ let expectedAt = performance.now();
109
+ eventLoopSampler = setInterval(() => {
110
+ const now = performance.now();
111
+ const lag = Math.max(0, now - expectedAt - EVENT_LOOP_SAMPLE_MS);
112
+ expectedAt = now;
113
+ eventLoopLagEmaMs = Number((eventLoopLagEmaMs * 0.9 + lag * 0.1).toFixed(2));
114
+ eventLoopLagMaxMs = Math.max(eventLoopLagMaxMs, lag);
115
+ }, EVENT_LOOP_SAMPLE_MS);
116
+ eventLoopSampler.unref?.();
117
+ };
118
+ const stopEventLoopSampler = () => {
119
+ if (!eventLoopSampler)
120
+ return;
121
+ clearInterval(eventLoopSampler);
122
+ eventLoopSampler = null;
123
+ };
124
+ const consumeEventLoopLag = () => {
125
+ const snapshot = { eventLoopLagMs: eventLoopLagEmaMs, eventLoopLagMaxMs: eventLoopLagMaxMs };
126
+ eventLoopLagMaxMs = 0;
127
+ return snapshot;
128
+ };
129
+ const getGuildMetrics = () => {
130
+ const client = Client_1.Bot.Instance;
131
+ try {
132
+ const guilds = client?.guilds.cache;
133
+ let usersCount = 0;
134
+ guilds?.forEach((guild) => {
135
+ usersCount += Number.isFinite(guild?.memberCount) ? guild.memberCount : 0;
136
+ });
137
+ return {
138
+ guildsCount: clamp(guilds?.size || 0, 0, 1_000_000),
139
+ usersCount: clamp(usersCount, 0, 10_000_000)
140
+ };
141
+ }
142
+ catch {
143
+ return { guildsCount: 0, usersCount: 0 };
144
+ }
145
+ };
146
+ const getGatewayMetrics = () => {
147
+ const client = Client_1.Bot.Instance;
148
+ try {
149
+ const shards = client?.ws?.shards;
150
+ let shardPingSum = 0;
151
+ let shardPingCount = 0;
152
+ shards?.forEach?.((shard) => {
153
+ const ping = Number(shard?.ping);
154
+ if (Number.isFinite(ping) && ping >= 0) {
155
+ shardPingSum += ping;
156
+ shardPingCount += 1;
157
+ }
158
+ });
159
+ return {
160
+ shardsCount: clamp(shards?.size || (client ? 1 : 0), 0, 1_000),
161
+ wsPingMs: clamp(shardPingCount > 0 ? shardPingSum / shardPingCount : 0, 0, 120_000)
162
+ };
163
+ }
164
+ catch {
165
+ return { shardsCount: 0, wsPingMs: 0 };
166
+ }
167
+ };
168
+ const wait = async (milliseconds) => {
169
+ await new Promise((resolve) => {
170
+ const timer = setTimeout(resolve, milliseconds);
171
+ timer.unref?.();
172
+ });
173
+ };
174
+ class TelemetryService {
175
+ telemetryTimer = null;
176
+ isConnected = false;
177
+ started = false;
178
+ lastErrorLogTime = 0;
179
+ logCooldownMs = 15 * 60 * 1000;
180
+ lastCpuUsage = null;
181
+ lastCpuTime = 0;
182
+ actionMap = new Map();
183
+ eventMap = new Map();
184
+ counterMap = new Map();
185
+ clientReadyAt = null;
186
+ queueWriteChain = Promise.resolve();
187
+ queueFlushPromise = null;
188
+ transportBound = false;
189
+ getTransport() {
190
+ return require('./WebSocket');
191
+ }
192
+ bindTransport() {
193
+ if (this.transportBound)
194
+ return;
195
+ this.transportBound = true;
196
+ const transport = this.getTransport();
197
+ transport.OnConnectionChange((connected) => {
198
+ void this.handleConnectionState(connected);
199
+ });
200
+ // Mensagens da API chegam pelo EventBus — forma canônica do framework.
201
+ EventBus_1.default.on('ws:request_live_metrics', () => {
202
+ void this.sendLiveMetrics();
203
+ });
204
+ }
205
+ /**
206
+ * Usa o transporte autenticado do Neutrun.
207
+ * O bot passa a ter uma única conexão para auth, config, recursos e métricas.
208
+ */
209
+ async connect() {
210
+ this.started = true;
211
+ this.bindTransport();
212
+ const transport = this.getTransport();
213
+ try {
214
+ await transport.Connect();
215
+ if (transport.IsConnected())
216
+ await this.handleConnected();
217
+ }
218
+ catch (error) {
219
+ this.logConnectionFailure(`Falha ao iniciar telemetria: ${safeErrorMessage(error)}`);
220
+ }
221
+ }
222
+ disconnect() {
223
+ this.started = false;
224
+ this.isConnected = false;
225
+ this.stopTelemetryLoop();
226
+ stopEventLoopSampler();
227
+ }
228
+ async handleConnectionState(connected) {
229
+ if (!this.started)
230
+ return;
231
+ if (!connected) {
232
+ this.isConnected = false;
233
+ this.stopTelemetryLoop();
234
+ stopEventLoopSampler();
235
+ return;
236
+ }
237
+ await this.handleConnected();
238
+ }
239
+ async handleConnected() {
240
+ if (!this.started || !this.getTransport().IsConnected())
241
+ return;
242
+ this.isConnected = true;
243
+ this.lastErrorLogTime = 0;
244
+ this.lastCpuUsage = process.cpuUsage();
245
+ this.lastCpuTime = Date.now();
246
+ startEventLoopSampler();
247
+ this.startTelemetryLoop();
248
+ await this.sendQueuedData();
249
+ }
250
+ /** Marca o instante do ClientReady e publica o evento no EventBus. */
251
+ markClientReady() {
252
+ if ((this.clientReadyAt ?? 0) > 0)
253
+ return;
254
+ this.clientReadyAt = Date.now();
255
+ this.registerEvent('discord:clientReady');
256
+ EventBus_1.default.emit('client:ready', { at: new Date(this.clientReadyAt).toISOString() });
257
+ }
258
+ /** Contador genérico e limitado de ocorrências (rejeições, reconexões…). */
259
+ registerCounter(key, increment = 1) {
260
+ const safeKey = String(key || 'unknown').slice(0, 100);
261
+ this.counterMap.set(safeKey, clamp((this.counterMap.get(safeKey) || 0) + increment, 0, 1_000_000_000));
262
+ if (this.counterMap.size > MAX_COUNTER_KEYS) {
263
+ const oldest = this.counterMap.keys().next().value;
264
+ if (oldest)
265
+ this.counterMap.delete(oldest);
266
+ }
267
+ }
268
+ /**
269
+ * Agrega ocorrências de eventos (gateway Discord ou handlers customizados)
270
+ * com contagem, erros e duração média da última execução.
271
+ */
272
+ registerEvent(name, options = {}) {
273
+ const safeName = String(name || 'unknown').slice(0, 120);
274
+ let group = this.eventMap.get(safeName);
275
+ if (!group) {
276
+ if (this.eventMap.size >= MAX_EVENT_GROUPS) {
277
+ const oldest = this.eventMap.keys().next().value;
278
+ if (oldest)
279
+ this.eventMap.delete(oldest);
280
+ }
281
+ group = {
282
+ name: safeName,
283
+ count: 0,
284
+ errorCount: 0,
285
+ durationMsTotal: 0,
286
+ lastDurationMs: 0,
287
+ lastAt: new Date().toISOString()
288
+ };
289
+ this.eventMap.set(safeName, group);
290
+ }
291
+ group.count = clamp(group.count + 1, 0, 1_000_000_000);
292
+ if (options.error) {
293
+ group.errorCount = clamp(group.errorCount + 1, 0, 1_000_000_000);
294
+ }
295
+ const duration = Number(options.durationMs);
296
+ if (Number.isFinite(duration) && duration >= 0) {
297
+ group.durationMsTotal = clamp(group.durationMsTotal + Math.min(duration, 600_000), 0, 1_000_000_000);
298
+ group.lastDurationMs = clamp(duration, 0, 600_000);
299
+ }
300
+ group.lastAt = new Date().toISOString();
301
+ }
302
+ async sendLiveMetrics() {
303
+ try {
304
+ this.send('live_metrics_response', this.fitToFrame({
305
+ system: this.buildSystemPayload(),
306
+ actions: this.serializeActions(),
307
+ events: this.serializeEvents(),
308
+ counters: Object.fromEntries(this.counterMap),
309
+ runtime: this.getRuntimeSnapshot()
310
+ }));
311
+ }
312
+ catch (error) {
313
+ (0, ConsoleLog_1.logWarn)(`Falha ao responder métricas em tempo real: ${safeErrorMessage(error)}`);
314
+ }
315
+ }
316
+ logConnectionFailure(message) {
317
+ const now = Date.now();
318
+ if (now - this.lastErrorLogTime < this.logCooldownMs)
319
+ return;
320
+ this.lastErrorLogTime = now;
321
+ Logger_1.default.divisor();
322
+ (0, ConsoleLog_1.logWarn)(message, 'Telemetry');
323
+ Logger_1.default.divisor();
324
+ }
325
+ registerAction(type, name, success, data, errorMessage, durationMs) {
326
+ const actionType = String(type).slice(0, 32);
327
+ const actionName = String(name || 'unknown').slice(0, 100);
328
+ const key = `${actionType}:${actionName}`;
329
+ let group = this.actionMap.get(key);
330
+ if (!group) {
331
+ if (this.actionMap.size >= MAX_ACTION_GROUPS) {
332
+ const oldest = this.actionMap.keys().next().value;
333
+ if (oldest)
334
+ this.actionMap.delete(oldest);
335
+ }
336
+ group = {
337
+ actionType,
338
+ actionName,
339
+ successCount: 0,
340
+ errorCount: 0,
341
+ durationMsTotal: 0,
342
+ durationMsMin: Number.MAX_SAFE_INTEGER,
343
+ durationMsMax: 0,
344
+ successes: [],
345
+ errors: []
346
+ };
347
+ this.actionMap.set(key, group);
348
+ }
349
+ const entry = {
350
+ ...sanitizeValue(data),
351
+ timestamp: new Date().toISOString()
352
+ };
353
+ const duration = Number(durationMs);
354
+ if (Number.isFinite(duration) && duration >= 0) {
355
+ const bounded = Math.min(duration, 600_000);
356
+ group.durationMsTotal = clamp(group.durationMsTotal + bounded, 0, 1_000_000_000);
357
+ group.durationMsMin = Math.min(group.durationMsMin, bounded);
358
+ group.durationMsMax = Math.max(group.durationMsMax, bounded);
359
+ entry.durationMs = Math.round(bounded);
360
+ }
361
+ if (success) {
362
+ group.successCount = clamp(group.successCount + 1, 0, 1_000_000_000);
363
+ group.successes.push(entry);
364
+ if (group.successes.length > MAX_ACTION_ENTRIES)
365
+ group.successes.shift();
366
+ }
367
+ else {
368
+ group.errorCount = clamp(group.errorCount + 1, 0, 1_000_000_000);
369
+ entry.errorMessage = String(errorMessage || 'Erro desconhecido').slice(0, 2_048);
370
+ group.errors.push(entry);
371
+ if (group.errors.length > MAX_ACTION_ENTRIES)
372
+ group.errors.shift();
373
+ }
374
+ }
375
+ /**
376
+ * Fotografia do estado vivo do bot: registradores de comandos, filas,
377
+ * cooldowns, gateway e processo. Enviada junto de cada bulk.
378
+ */
379
+ getRuntimeSnapshot() {
380
+ const client = Client_1.Bot.Instance;
381
+ const snapshot = {
382
+ nodeVersion: process.version,
383
+ pid: process.pid,
384
+ processUptimeSeconds: Math.floor(process.uptime()),
385
+ gatewayUptimeSeconds: this.clientReadyAt
386
+ ? Math.floor((Date.now() - this.clientReadyAt) / 1000)
387
+ : 0,
388
+ lastReadyAt: this.clientReadyAt ? new Date(this.clientReadyAt).toISOString() : null
389
+ };
390
+ try {
391
+ snapshot.commands = {
392
+ slash: clamp(client?.slashCommands?.size || 0, 0, 100_000),
393
+ prefix: clamp(client?.prefixCommands?.size || 0, 0, 100_000),
394
+ context: clamp(client?.contextMenuCommands?.size || 0, 0, 100_000),
395
+ modals: clamp(client?.modals?.size || 0, 0, 100_000),
396
+ tasks: clamp(client?.tasks?.size || 0, 0, 100_000)
397
+ };
398
+ snapshot.events = {
399
+ registered: clamp(client?.registeredEvents?.size || 0, 0, 100_000)
400
+ };
401
+ }
402
+ catch {
403
+ // Client ainda não inicializado; segue apenas com dados de processo.
404
+ }
405
+ try {
406
+ const QueueStats = require('./QueueManager').default?.stats?.();
407
+ if (QueueStats)
408
+ snapshot.queue = QueueStats;
409
+ const cooldownActive = require('./CooldownManager').default?.activeCount?.();
410
+ if (typeof cooldownActive === 'number') {
411
+ snapshot.cooldowns = { active: clamp(cooldownActive, 0, 1_000_000) };
412
+ }
413
+ }
414
+ catch {
415
+ // Managers opcionais no runtime atual.
416
+ }
417
+ return snapshot;
418
+ }
419
+ buildSystemPayload() {
420
+ const memory = getMemoryUsage();
421
+ const guildMetrics = getGuildMetrics();
422
+ const gateway = getGatewayMetrics();
423
+ const eventLoop = consumeEventLoopLag();
424
+ return {
425
+ cpuUsagePercent: this.calculateCpuUsage(),
426
+ memoryUsageRssMB: memory.rssMB,
427
+ memoryUsageHeapMB: memory.heapUsedMB,
428
+ memoryUsageHeapTotalMB: memory.heapTotalMB,
429
+ memoryUsageExternalMB: memory.externalMB,
430
+ latencyMs: clamp(Client_1.Bot.Instance?.ws?.ping || 0, 0, 120_000),
431
+ uptimeSeconds: Math.floor(process.uptime()),
432
+ eventLoopLagMs: eventLoop.eventLoopLagMs,
433
+ eventLoopLagMaxMs: eventLoop.eventLoopLagMaxMs,
434
+ ...getLoadAverage(),
435
+ ...gateway,
436
+ ...guildMetrics
437
+ };
438
+ }
439
+ send(type, data) {
440
+ const transport = this.getTransport();
441
+ const sent = transport.Send(type, data);
442
+ if (!sent && this.isConnected)
443
+ this.isConnected = transport.IsConnected();
444
+ return sent;
445
+ }
446
+ startTelemetryLoop() {
447
+ this.stopTelemetryLoop();
448
+ this.telemetryTimer = setInterval(() => {
449
+ void this.sendTelemetryBulk().catch((error) => {
450
+ (0, ConsoleLog_1.logWarn)(`Falha ao enviar telemetria: ${safeErrorMessage(error)}`);
451
+ });
452
+ }, TELEMETRY_INTERVAL_MS);
453
+ this.telemetryTimer.unref?.();
454
+ }
455
+ stopTelemetryLoop() {
456
+ if (!this.telemetryTimer)
457
+ return;
458
+ clearInterval(this.telemetryTimer);
459
+ this.telemetryTimer = null;
460
+ }
461
+ calculateCpuUsage() {
462
+ try {
463
+ if (!this.lastCpuUsage)
464
+ return 0;
465
+ const now = Date.now();
466
+ const cpuUsage = process.cpuUsage(this.lastCpuUsage);
467
+ const elapsedMs = Math.max(1, now - this.lastCpuTime);
468
+ const cpuMs = (cpuUsage.user + cpuUsage.system) / 1_000;
469
+ const cores = Math.max(1, os_1.default.cpus()?.length || 1);
470
+ const percentage = (cpuMs / elapsedMs / cores) * 100;
471
+ this.lastCpuUsage = process.cpuUsage();
472
+ this.lastCpuTime = now;
473
+ return clamp(percentage, 0, 100);
474
+ }
475
+ catch {
476
+ return 0;
477
+ }
478
+ }
479
+ serializeActions() {
480
+ return Array.from(this.actionMap.values()).map((group) => ({
481
+ ...group,
482
+ durationMsMin: group.durationMsMin === Number.MAX_SAFE_INTEGER ? 0 : group.durationMsMin,
483
+ successes: group.successes.slice(-MAX_ACTION_ENTRIES),
484
+ errors: group.errors.slice(-MAX_ACTION_ENTRIES)
485
+ }));
486
+ }
487
+ serializeEvents() {
488
+ return Array.from(this.eventMap.values())
489
+ .sort((left, right) => right.count - left.count)
490
+ .slice(0, MAX_EVENT_GROUPS);
491
+ }
492
+ // Degradação gradual quando o payload excede o limite de frame do
493
+ // transporte: primeiro descartamos as amostras individuais (mantendo os
494
+ // agregados), depois os eventos. Sem isso, um pico de volume derrubaria o
495
+ // envio inteiro — inclusive a resposta de request_live_metrics.
496
+ fitToFrame(payload) {
497
+ const fitsFrame = (value) => {
498
+ try {
499
+ return Buffer.byteLength(JSON.stringify(value), 'utf8') <= 240 * 1024;
500
+ }
501
+ catch {
502
+ return false;
503
+ }
504
+ };
505
+ if (!fitsFrame(payload)) {
506
+ payload = {
507
+ ...payload,
508
+ actions: payload.actions.map((group) => ({
509
+ actionType: group.actionType,
510
+ actionName: group.actionName,
511
+ successCount: group.successCount,
512
+ errorCount: group.errorCount,
513
+ durationMsTotal: group.durationMsTotal,
514
+ durationMsMin: group.durationMsMin,
515
+ durationMsMax: group.durationMsMax,
516
+ successes: [],
517
+ errors: []
518
+ }))
519
+ };
520
+ }
521
+ if (!fitsFrame(payload)) {
522
+ payload = { ...payload, events: [] };
523
+ }
524
+ if (!fitsFrame(payload)) {
525
+ payload = {
526
+ schema: 2,
527
+ system: payload.system,
528
+ counters: payload.counters,
529
+ runtime: payload.runtime,
530
+ actions: [],
531
+ events: []
532
+ };
533
+ }
534
+ return payload;
535
+ }
536
+ async sendTelemetryBulk() {
537
+ const payload = this.fitToFrame({
538
+ schema: 2,
539
+ system: this.buildSystemPayload(),
540
+ actions: this.serializeActions(),
541
+ events: this.serializeEvents(),
542
+ counters: Object.fromEntries(this.counterMap),
543
+ runtime: this.getRuntimeSnapshot()
544
+ });
545
+ this.actionMap.clear();
546
+ this.eventMap.clear();
547
+ this.counterMap.clear();
548
+ if (!this.isConnected || !this.getTransport().IsConnected()) {
549
+ await this.queueData(payload);
550
+ return;
551
+ }
552
+ await this.sendQueuedData();
553
+ if (!this.send('telemetry_bulk', payload)) {
554
+ await this.queueData(payload);
555
+ }
556
+ }
557
+ async readQueue() {
558
+ try {
559
+ const stats = await promises_1.default.stat(queuePath);
560
+ if (!stats.isFile() || stats.size > MAX_QUEUE_BYTES)
561
+ return [];
562
+ const raw = await promises_1.default.readFile(queuePath, 'utf8');
563
+ const parsed = JSON.parse(raw);
564
+ return Array.isArray(parsed) ? parsed.slice(-MAX_QUEUE_ITEMS) : [];
565
+ }
566
+ catch {
567
+ return [];
568
+ }
569
+ }
570
+ async writeQueue(queue) {
571
+ await promises_1.default.mkdir(path_1.default.dirname(queuePath), { recursive: true });
572
+ const temporaryPath = `${queuePath}.${process.pid}.${Date.now()}.tmp`;
573
+ try {
574
+ await promises_1.default.writeFile(temporaryPath, JSON.stringify(queue.slice(-MAX_QUEUE_ITEMS)), 'utf8');
575
+ await promises_1.default.rename(temporaryPath, queuePath);
576
+ }
577
+ finally {
578
+ await promises_1.default.unlink(temporaryPath).catch(() => { });
579
+ }
580
+ }
581
+ async queueData(data) {
582
+ // O payload já sai de fitToFrame() sanitizado e dentro do limite de
583
+ // frame — re-sanitizar aqui truncaria os arrays (limite de 50) e
584
+ // descartaria grupos de ações inteiros durante períodos offline.
585
+ this.queueWriteChain = this.queueWriteChain
586
+ .catch(() => { })
587
+ .then(async () => {
588
+ const queue = await this.readQueue();
589
+ queue.push(data);
590
+ await this.writeQueue(queue);
591
+ });
592
+ try {
593
+ await this.queueWriteChain;
594
+ }
595
+ catch (error) {
596
+ (0, ConsoleLog_1.logWarn)(`Erro ao salvar métricas offline: ${safeErrorMessage(error)}`);
597
+ }
598
+ }
599
+ async sendQueuedData() {
600
+ if (this.queueFlushPromise)
601
+ return this.queueFlushPromise;
602
+ this.queueFlushPromise = (async () => {
603
+ try {
604
+ await this.queueWriteChain;
605
+ let queue = await this.readQueue();
606
+ while (queue.length > 0 && this.started && this.getTransport().IsConnected()) {
607
+ const data = queue[0];
608
+ if (!this.send('telemetry_bulk', data))
609
+ break;
610
+ queue = queue.slice(1);
611
+ await this.writeQueue(queue);
612
+ if (queue.length > 0)
613
+ await wait(QUEUE_SEND_INTERVAL_MS);
614
+ }
615
+ if (queue.length === 0)
616
+ await promises_1.default.unlink(queuePath).catch(() => { });
617
+ }
618
+ catch (error) {
619
+ this.logConnectionFailure(`Falha ao reenviar telemetria offline: ${safeErrorMessage(error)}`);
620
+ }
621
+ finally {
622
+ this.queueFlushPromise = null;
623
+ }
624
+ })();
625
+ return this.queueFlushPromise;
626
+ }
627
+ }
628
+ exports.TelemetryService = TelemetryService;
629
+ exports.Telemetry = new TelemetryService();
630
+ exports.default = exports.Telemetry;
631
+ //# sourceMappingURL=TelemetryService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryService.js","sourceRoot":"","sources":["../../src/Shared/TelemetryService.ts"],"names":[],"mappings":"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"}