@ninenity/neutrun 1.2.0 → 1.9.2

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 (73) hide show
  1. package/README.md +2 -2
  2. package/dist/CLI/Localize.d.ts +6 -0
  3. package/dist/CLI/Localize.d.ts.map +1 -1
  4. package/dist/CLI/Localize.js +63 -14
  5. package/dist/CLI/Localize.js.map +1 -1
  6. package/dist/Shared/Client.d.ts +1 -0
  7. package/dist/Shared/Client.d.ts.map +1 -1
  8. package/dist/Shared/Client.js +69 -2
  9. package/dist/Shared/Client.js.map +1 -1
  10. package/dist/Shared/ComponentRuntime.d.ts.map +1 -1
  11. package/dist/Shared/ComponentRuntime.js +2 -0
  12. package/dist/Shared/ComponentRuntime.js.map +1 -1
  13. package/dist/Shared/Config.js +2 -2
  14. package/dist/Shared/Config.js.map +1 -1
  15. package/dist/Shared/Definer.d.ts.map +1 -1
  16. package/dist/Shared/Definer.js +2 -0
  17. package/dist/Shared/Definer.js.map +1 -1
  18. package/dist/Shared/Environment.d.ts +10 -0
  19. package/dist/Shared/Environment.d.ts.map +1 -0
  20. package/dist/Shared/Environment.js +18 -0
  21. package/dist/Shared/Environment.js.map +1 -0
  22. package/dist/Shared/ExpressApi.d.ts +60 -1
  23. package/dist/Shared/ExpressApi.d.ts.map +1 -1
  24. package/dist/Shared/ExpressApi.js +393 -29
  25. package/dist/Shared/ExpressApi.js.map +1 -1
  26. package/dist/Shared/InteractionResponse.d.ts +12 -0
  27. package/dist/Shared/InteractionResponse.d.ts.map +1 -0
  28. package/dist/Shared/InteractionResponse.js +72 -0
  29. package/dist/Shared/InteractionResponse.js.map +1 -0
  30. package/dist/Shared/Neutrun.d.ts +1 -0
  31. package/dist/Shared/Neutrun.d.ts.map +1 -1
  32. package/dist/Shared/Neutrun.js +13 -5
  33. package/dist/Shared/Neutrun.js.map +1 -1
  34. package/dist/Shared/NinenityApi.d.ts +54 -1
  35. package/dist/Shared/NinenityApi.d.ts.map +1 -1
  36. package/dist/Shared/NinenityApi.js +421 -18
  37. package/dist/Shared/NinenityApi.js.map +1 -1
  38. package/dist/Shared/Observability.d.ts +59 -0
  39. package/dist/Shared/Observability.d.ts.map +1 -0
  40. package/dist/Shared/Observability.js +184 -0
  41. package/dist/Shared/Observability.js.map +1 -0
  42. package/dist/Shared/ProcessManager.d.ts +1 -0
  43. package/dist/Shared/ProcessManager.d.ts.map +1 -1
  44. package/dist/Shared/ProcessManager.js +21 -6
  45. package/dist/Shared/ProcessManager.js.map +1 -1
  46. package/dist/Shared/ServerMetricsService.d.ts +85 -0
  47. package/dist/Shared/ServerMetricsService.d.ts.map +1 -0
  48. package/dist/Shared/ServerMetricsService.js +284 -0
  49. package/dist/Shared/ServerMetricsService.js.map +1 -0
  50. package/dist/Shared/TelemetryPacket.d.ts +28 -0
  51. package/dist/Shared/TelemetryPacket.d.ts.map +1 -0
  52. package/dist/Shared/TelemetryPacket.js +22 -0
  53. package/dist/Shared/TelemetryPacket.js.map +1 -0
  54. package/dist/Shared/TelemetryService.d.ts +34 -0
  55. package/dist/Shared/TelemetryService.d.ts.map +1 -1
  56. package/dist/Shared/TelemetryService.js +235 -19
  57. package/dist/Shared/TelemetryService.js.map +1 -1
  58. package/dist/Shared/WebSocket.d.ts.map +1 -1
  59. package/dist/Shared/WebSocket.js +39 -9
  60. package/dist/Shared/WebSocket.js.map +1 -1
  61. package/dist/api.d.ts +2 -2
  62. package/dist/api.d.ts.map +1 -1
  63. package/dist/api.js +4 -1
  64. package/dist/api.js.map +1 -1
  65. package/dist/express.d.ts +2 -0
  66. package/dist/express.d.ts.map +1 -1
  67. package/dist/express.js +4 -1
  68. package/dist/express.js.map +1 -1
  69. package/dist/index.d.ts +12 -4
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +18 -2
  72. package/dist/index.js.map +1 -1
  73. package/package.json +10 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerMetricsService.js","sourceRoot":"","sources":["../../src/Shared/ServerMetricsService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export declare const TELEMETRY_SCHEMA_VERSION: 2;
2
+ export declare const TELEMETRY_PACKET_VERSION: 1;
3
+ export type TelemetryPacketName = 'telemetry_bulk' | 'live_metrics_response' | 'server_metrics_daily';
4
+ export type TelemetryLifecycle = 'always' | 'idle' | 'suspend-resources';
5
+ export interface TelemetryApiStatus {
6
+ configured: boolean;
7
+ enabled: boolean;
8
+ running: boolean;
9
+ suspended: boolean;
10
+ hibernating: boolean;
11
+ lifecycle: TelemetryLifecycle;
12
+ }
13
+ export interface TelemetryPacketMetadata {
14
+ name: TelemetryPacketName;
15
+ version: typeof TELEMETRY_PACKET_VERSION;
16
+ id: string;
17
+ generatedAt: string;
18
+ }
19
+ export type StructuredTelemetryPacket<T extends Record<string, unknown>> = T & {
20
+ schema: typeof TELEMETRY_SCHEMA_VERSION;
21
+ packet: TelemetryPacketMetadata;
22
+ };
23
+ /**
24
+ * Centraliza a estrutura dos pacotes de métricas sem remover os campos de
25
+ * primeiro nível já consumidos pela API central.
26
+ */
27
+ export declare const structureTelemetryPacket: <T extends Record<string, unknown>>(name: TelemetryPacketName, payload: T) => StructuredTelemetryPacket<T>;
28
+ //# sourceMappingURL=TelemetryPacket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryPacket.d.ts","sourceRoot":"","sources":["../../src/Shared/TelemetryPacket.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAA;AAClD,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAA;AAElD,MAAM,MAAM,mBAAmB,GAC3B,gBAAgB,GAChB,uBAAuB,GACvB,sBAAsB,CAAA;AAE1B,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAExE,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,kBAAkB,CAAA;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAA;IACzB,OAAO,EAAE,OAAO,wBAAwB,CAAA;IACxC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG;IAC7E,MAAM,EAAE,OAAO,wBAAwB,CAAA;IACvC,MAAM,EAAE,uBAAuB,CAAA;CAChC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxE,MAAM,mBAAmB,EACzB,SAAS,CAAC,KACT,yBAAyB,CAAC,CAAC,CAS5B,CAAA"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.structureTelemetryPacket = exports.TELEMETRY_PACKET_VERSION = exports.TELEMETRY_SCHEMA_VERSION = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ exports.TELEMETRY_SCHEMA_VERSION = 2;
6
+ exports.TELEMETRY_PACKET_VERSION = 1;
7
+ /**
8
+ * Centraliza a estrutura dos pacotes de métricas sem remover os campos de
9
+ * primeiro nível já consumidos pela API central.
10
+ */
11
+ const structureTelemetryPacket = (name, payload) => ({
12
+ ...payload,
13
+ schema: exports.TELEMETRY_SCHEMA_VERSION,
14
+ packet: {
15
+ name,
16
+ version: exports.TELEMETRY_PACKET_VERSION,
17
+ id: (0, node_crypto_1.randomUUID)(),
18
+ generatedAt: new Date().toISOString()
19
+ }
20
+ });
21
+ exports.structureTelemetryPacket = structureTelemetryPacket;
22
+ //# sourceMappingURL=TelemetryPacket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryPacket.js","sourceRoot":"","sources":["../../src/Shared/TelemetryPacket.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AAE3B,QAAA,wBAAwB,GAAG,CAAU,CAAA;AACrC,QAAA,wBAAwB,GAAG,CAAU,CAAA;AA8BlD;;;GAGG;AACI,MAAM,wBAAwB,GAAG,CACtC,IAAyB,EACzB,OAAU,EACoB,EAAE,CAAC,CAAC;IAClC,GAAG,OAAO;IACV,MAAM,EAAE,gCAAwB;IAChC,MAAM,EAAE;QACN,IAAI;QACJ,OAAO,EAAE,gCAAwB;QACjC,EAAE,EAAE,IAAA,wBAAU,GAAE;QAChB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC;CACF,CAAC,CAAA;AAZW,QAAA,wBAAwB,4BAYnC"}
@@ -1,4 +1,24 @@
1
1
  import 'dotenv/config';
2
+ import { Bot } from './Client';
3
+ import { type TelemetryApiStatus } from './TelemetryPacket';
4
+ interface CustomTelemetryBucket {
5
+ namespace: string;
6
+ counters: Map<string, number>;
7
+ gauges: Map<string, number>;
8
+ events: Array<{
9
+ name: string;
10
+ data: unknown;
11
+ timestamp: string;
12
+ }>;
13
+ }
14
+ export declare class CustomTelemetry {
15
+ private readonly bucket;
16
+ constructor(bucket: CustomTelemetryBucket);
17
+ increment(name: string, amount?: number): this;
18
+ set(name: string, value: number): this;
19
+ gauge(name: string, value: number): this;
20
+ record(name: string, data?: unknown): this;
21
+ }
2
22
  export declare class TelemetryService {
3
23
  private telemetryTimer;
4
24
  private isConnected;
@@ -10,10 +30,21 @@ export declare class TelemetryService {
10
30
  private readonly actionMap;
11
31
  private readonly eventMap;
12
32
  private readonly counterMap;
33
+ private readonly customMap;
13
34
  private clientReadyAt;
14
35
  private queueWriteChain;
15
36
  private queueFlushPromise;
16
37
  private transportBound;
38
+ private apiStatusProvider;
39
+ private readonly serverMetrics;
40
+ /**
41
+ * Observa somente eventos de engajamento entregues pelo gateway. A coleta
42
+ * diária é independente do intervalo da telemetria operacional.
43
+ */
44
+ bindServerMetrics(client: Bot): void;
45
+ setApiStatusProvider(provider: (() => TelemetryApiStatus) | null): void;
46
+ getApiStatus(): TelemetryApiStatus;
47
+ create(namespace: string): CustomTelemetry;
17
48
  private getTransport;
18
49
  private bindTransport;
19
50
  /**
@@ -51,8 +82,11 @@ export declare class TelemetryService {
51
82
  private calculateCpuUsage;
52
83
  private serializeActions;
53
84
  private serializeEvents;
85
+ private serializeCustom;
54
86
  private fitToFrame;
55
87
  sendTelemetryBulk(): Promise<void>;
88
+ private createServerMetricsPackets;
89
+ private sendServerMetricsDaily;
56
90
  private readQueue;
57
91
  private writeQueue;
58
92
  private queueData;
@@ -1 +1 @@
1
- {"version":3,"file":"TelemetryService.d.ts","sourceRoot":"","sources":["../../src/Shared/TelemetryService.ts"],"names":[],"mappings":"AAGA,OAAO,eAAe,CAAA;AAuMtB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;IACvD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,cAAc,CAAQ;IAE9B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAarB;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B,UAAU,IAAI,IAAI;YAOX,qBAAqB;YAYrB,eAAe;IAW7B,sEAAsE;IAC/D,eAAe,IAAI,IAAI;IAO9B,4EAA4E;IACrE,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,IAAI;IAYxD;;;OAGG;IACI,aAAa,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,IAAI;YAkCO,eAAe;IAiB7B,OAAO,CAAC,oBAAoB;IASrB,cAAc,CACnB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,cAAc,GAAG,OAAO,EAC/F,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,GAAG,EACT,YAAY,CAAC,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI;IAmDP;;;OAGG;IACI,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA6CpD,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,UAAU;IAyCL,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;YAyBjC,SAAS;YAYT,UAAU;YAeV,SAAS;YAmBT,cAAc;CAwB7B;AAED,eAAO,MAAM,SAAS,kBAAyB,CAAA;AAC/C,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"TelemetryService.d.ts","sourceRoot":"","sources":["../../src/Shared/TelemetryService.ts"],"names":[],"mappings":"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"}
@@ -3,24 +3,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Telemetry = exports.TelemetryService = void 0;
6
+ exports.Telemetry = exports.TelemetryService = exports.CustomTelemetry = void 0;
7
7
  const os_1 = __importDefault(require("os"));
8
8
  const promises_1 = __importDefault(require("fs/promises"));
9
9
  const path_1 = __importDefault(require("path"));
10
+ const node_crypto_1 = require("node:crypto");
10
11
  require("dotenv/config");
11
12
  const Client_1 = require("./Client");
12
13
  const ConsoleLog_1 = require("./ConsoleLog");
13
14
  const Logger_1 = __importDefault(require("../Logger"));
14
15
  const EventBus_1 = __importDefault(require("./EventBus"));
16
+ const Observability_1 = __importDefault(require("./Observability"));
17
+ const TelemetryPacket_1 = require("./TelemetryPacket");
18
+ const ServerMetricsService_1 = __importDefault(require("./ServerMetricsService"));
15
19
  const MAX_QUEUE_ITEMS = 100;
16
20
  const MAX_QUEUE_BYTES = 2 * 1024 * 1024;
17
21
  const MAX_ACTION_GROUPS = 500;
18
22
  const MAX_ACTION_ENTRIES = 25;
19
23
  const MAX_EVENT_GROUPS = 200;
20
24
  const MAX_COUNTER_KEYS = 100;
25
+ const MAX_CUSTOM_NAMESPACES = 50;
26
+ const MAX_CUSTOM_METRICS = 100;
27
+ const MAX_CUSTOM_EVENTS = 50;
21
28
  const TELEMETRY_INTERVAL_MS = 60 * 1000;
22
29
  const QUEUE_SEND_INTERVAL_MS = 1_100;
23
30
  const EVENT_LOOP_SAMPLE_MS = 1_000;
31
+ const SERVER_METRICS_PACKET_TARGET_BYTES = 220 * 1024;
24
32
  const queuePath = path_1.default.join(process.cwd(), '.ninenity', 'telemetry_queue.json');
25
33
  const safeErrorMessage = (error) => {
26
34
  if (error instanceof Error && error.message)
@@ -68,6 +76,48 @@ const sanitizeValue = (value, depth = 0, seen = new WeakSet()) => {
68
76
  }
69
77
  return output;
70
78
  };
79
+ const normalizeTelemetryName = (value, maxLength) => {
80
+ const normalized = String(value || 'unknown').trim().replace(/[^a-zA-Z0-9_.:-]/g, '_');
81
+ return normalized.slice(0, maxLength) || 'unknown';
82
+ };
83
+ class CustomTelemetry {
84
+ bucket;
85
+ constructor(bucket) {
86
+ this.bucket = bucket;
87
+ }
88
+ increment(name, amount = 1) {
89
+ const key = normalizeTelemetryName(name, 100);
90
+ if (!this.bucket.counters.has(key) && this.bucket.counters.size >= MAX_CUSTOM_METRICS)
91
+ return this;
92
+ const value = Number(amount);
93
+ if (!Number.isFinite(value))
94
+ return this;
95
+ this.bucket.counters.set(key, clamp((this.bucket.counters.get(key) || 0) + value, -1_000_000_000, 1_000_000_000));
96
+ return this;
97
+ }
98
+ set(name, value) {
99
+ const key = normalizeTelemetryName(name, 100);
100
+ if (!this.bucket.gauges.has(key) && this.bucket.gauges.size >= MAX_CUSTOM_METRICS)
101
+ return this;
102
+ if (Number.isFinite(value))
103
+ this.bucket.gauges.set(key, clamp(value, -1_000_000_000, 1_000_000_000));
104
+ return this;
105
+ }
106
+ gauge(name, value) {
107
+ return this.set(name, value);
108
+ }
109
+ record(name, data) {
110
+ if (this.bucket.events.length >= MAX_CUSTOM_EVENTS)
111
+ this.bucket.events.shift();
112
+ this.bucket.events.push({
113
+ name: normalizeTelemetryName(name, 120),
114
+ data: sanitizeValue(data),
115
+ timestamp: new Date().toISOString()
116
+ });
117
+ return this;
118
+ }
119
+ }
120
+ exports.CustomTelemetry = CustomTelemetry;
71
121
  const getMemoryUsage = () => {
72
122
  try {
73
123
  const memory = process.memoryUsage();
@@ -182,10 +232,62 @@ class TelemetryService {
182
232
  actionMap = new Map();
183
233
  eventMap = new Map();
184
234
  counterMap = new Map();
235
+ customMap = new Map();
185
236
  clientReadyAt = null;
186
237
  queueWriteChain = Promise.resolve();
187
238
  queueFlushPromise = null;
188
239
  transportBound = false;
240
+ apiStatusProvider = null;
241
+ serverMetrics = new ServerMetricsService_1.default();
242
+ /**
243
+ * Observa somente eventos de engajamento entregues pelo gateway. A coleta
244
+ * diária é independente do intervalo da telemetria operacional.
245
+ */
246
+ bindServerMetrics(client) {
247
+ try {
248
+ this.serverMetrics.bind(client, async (snapshot) => {
249
+ await this.sendServerMetricsDaily(snapshot);
250
+ });
251
+ }
252
+ catch (error) {
253
+ (0, ConsoleLog_1.logWarn)(`Falha ao ativar métricas diárias do servidor: ${safeErrorMessage(error)}`, 'Telemetry');
254
+ }
255
+ }
256
+ setApiStatusProvider(provider) {
257
+ this.apiStatusProvider = provider;
258
+ }
259
+ getApiStatus() {
260
+ const fallback = {
261
+ configured: false,
262
+ enabled: false,
263
+ running: false,
264
+ suspended: false,
265
+ hibernating: false,
266
+ lifecycle: 'always'
267
+ };
268
+ if (!this.apiStatusProvider)
269
+ return fallback;
270
+ try {
271
+ return this.apiStatusProvider();
272
+ }
273
+ catch {
274
+ return fallback;
275
+ }
276
+ }
277
+ create(namespace) {
278
+ const safeNamespace = normalizeTelemetryName(namespace, 80);
279
+ let bucket = this.customMap.get(safeNamespace);
280
+ if (!bucket) {
281
+ if (this.customMap.size >= MAX_CUSTOM_NAMESPACES) {
282
+ const oldest = this.customMap.keys().next().value;
283
+ if (oldest)
284
+ this.customMap.delete(oldest);
285
+ }
286
+ bucket = { namespace: safeNamespace, counters: new Map(), gauges: new Map(), events: [] };
287
+ this.customMap.set(safeNamespace, bucket);
288
+ }
289
+ return new CustomTelemetry(bucket);
290
+ }
189
291
  getTransport() {
190
292
  return require('./WebSocket');
191
293
  }
@@ -223,6 +325,7 @@ class TelemetryService {
223
325
  this.started = false;
224
326
  this.isConnected = false;
225
327
  this.stopTelemetryLoop();
328
+ this.serverMetrics.unbind();
226
329
  stopEventLoopSampler();
227
330
  }
228
331
  async handleConnectionState(connected) {
@@ -301,13 +404,16 @@ class TelemetryService {
301
404
  }
302
405
  async sendLiveMetrics() {
303
406
  try {
304
- this.send('live_metrics_response', this.fitToFrame({
407
+ this.send('live_metrics_response', this.fitToFrame((0, TelemetryPacket_1.structureTelemetryPacket)('live_metrics_response', {
305
408
  system: this.buildSystemPayload(),
306
409
  actions: this.serializeActions(),
307
410
  events: this.serializeEvents(),
308
411
  counters: Object.fromEntries(this.counterMap),
309
- runtime: this.getRuntimeSnapshot()
310
- }));
412
+ custom: this.serializeCustom(),
413
+ observability: Observability_1.default.snapshot(false),
414
+ runtime: this.getRuntimeSnapshot(),
415
+ api: this.getApiStatus()
416
+ })));
311
417
  }
312
418
  catch (error) {
313
419
  (0, ConsoleLog_1.logWarn)(`Falha ao responder métricas em tempo real: ${safeErrorMessage(error)}`);
@@ -489,6 +595,16 @@ class TelemetryService {
489
595
  .sort((left, right) => right.count - left.count)
490
596
  .slice(0, MAX_EVENT_GROUPS);
491
597
  }
598
+ serializeCustom() {
599
+ return Object.fromEntries(Array.from(this.customMap.values()).map((bucket) => [
600
+ bucket.namespace,
601
+ {
602
+ counters: Object.fromEntries(bucket.counters),
603
+ gauges: Object.fromEntries(bucket.gauges),
604
+ events: bucket.events.slice(-MAX_CUSTOM_EVENTS)
605
+ }
606
+ ]));
607
+ }
492
608
  // Degradação gradual quando o payload excede o limite de frame do
493
609
  // transporte: primeiro descartamos as amostras individuais (mantendo os
494
610
  // agregados), depois os eventos. Sem isso, um pico de volume derrubaria o
@@ -521,12 +637,31 @@ class TelemetryService {
521
637
  if (!fitsFrame(payload)) {
522
638
  payload = { ...payload, events: [] };
523
639
  }
640
+ if (!fitsFrame(payload)) {
641
+ const observability = payload.observability;
642
+ payload = {
643
+ ...payload,
644
+ observability: observability
645
+ ? {
646
+ generatedAt: observability.generatedAt,
647
+ droppedSeries: observability.droppedSeries,
648
+ counters: [],
649
+ gauges: [],
650
+ histograms: []
651
+ }
652
+ : undefined
653
+ };
654
+ }
524
655
  if (!fitsFrame(payload)) {
525
656
  payload = {
526
657
  schema: 2,
658
+ packet: payload.packet,
527
659
  system: payload.system,
528
660
  counters: payload.counters,
661
+ custom: payload.custom,
662
+ observability: payload.observability,
529
663
  runtime: payload.runtime,
664
+ api: payload.api,
530
665
  actions: [],
531
666
  events: []
532
667
  };
@@ -534,24 +669,84 @@ class TelemetryService {
534
669
  return payload;
535
670
  }
536
671
  async sendTelemetryBulk() {
537
- const payload = this.fitToFrame({
538
- schema: 2,
672
+ const payload = this.fitToFrame((0, TelemetryPacket_1.structureTelemetryPacket)('telemetry_bulk', {
539
673
  system: this.buildSystemPayload(),
540
674
  actions: this.serializeActions(),
541
675
  events: this.serializeEvents(),
542
676
  counters: Object.fromEntries(this.counterMap),
543
- runtime: this.getRuntimeSnapshot()
544
- });
677
+ custom: this.serializeCustom(),
678
+ observability: Observability_1.default.snapshot(true),
679
+ runtime: this.getRuntimeSnapshot(),
680
+ api: this.getApiStatus()
681
+ }));
545
682
  this.actionMap.clear();
546
683
  this.eventMap.clear();
547
684
  this.counterMap.clear();
685
+ this.customMap.clear();
548
686
  if (!this.isConnected || !this.getTransport().IsConnected()) {
549
- await this.queueData(payload);
687
+ await this.queueData('telemetry_bulk', payload);
550
688
  return;
551
689
  }
552
690
  await this.sendQueuedData();
553
691
  if (!this.send('telemetry_bulk', payload)) {
554
- await this.queueData(payload);
692
+ await this.queueData('telemetry_bulk', payload);
693
+ }
694
+ }
695
+ createServerMetricsPackets(snapshot) {
696
+ if (snapshot.guilds.length === 0)
697
+ return [];
698
+ const groups = [];
699
+ let current = [];
700
+ for (const guild of snapshot.guilds) {
701
+ const candidate = [...current, guild];
702
+ const estimatedPayload = {
703
+ period: snapshot.period,
704
+ capabilities: snapshot.capabilities,
705
+ collection: snapshot.collection,
706
+ guilds: candidate
707
+ };
708
+ const estimatedBytes = Buffer.byteLength(JSON.stringify(estimatedPayload), 'utf8');
709
+ if (current.length > 0 && estimatedBytes > SERVER_METRICS_PACKET_TARGET_BYTES) {
710
+ groups.push(current);
711
+ current = [guild];
712
+ }
713
+ else {
714
+ current = candidate;
715
+ }
716
+ }
717
+ if (current.length > 0)
718
+ groups.push(current);
719
+ const batchId = (0, node_crypto_1.randomUUID)();
720
+ return groups.map((guilds, index) => (0, TelemetryPacket_1.structureTelemetryPacket)('server_metrics_daily', {
721
+ period: snapshot.period,
722
+ capabilities: snapshot.capabilities,
723
+ collection: snapshot.collection,
724
+ batch: {
725
+ id: batchId,
726
+ index,
727
+ count: groups.length
728
+ },
729
+ guilds
730
+ }));
731
+ }
732
+ async sendServerMetricsDaily(snapshot) {
733
+ const packets = this.createServerMetricsPackets(snapshot);
734
+ if (packets.length === 0)
735
+ return;
736
+ if (!this.isConnected || !this.getTransport().IsConnected()) {
737
+ for (const packet of packets) {
738
+ await this.queueData('server_metrics_daily', packet);
739
+ }
740
+ return;
741
+ }
742
+ await this.sendQueuedData();
743
+ for (let index = 0; index < packets.length; index += 1) {
744
+ const packet = packets[index];
745
+ if (!this.send('server_metrics_daily', packet)) {
746
+ await this.queueData('server_metrics_daily', packet);
747
+ }
748
+ if (index < packets.length - 1)
749
+ await wait(QUEUE_SEND_INTERVAL_MS);
555
750
  }
556
751
  }
557
752
  async readQueue() {
@@ -561,7 +756,24 @@ class TelemetryService {
561
756
  return [];
562
757
  const raw = await promises_1.default.readFile(queuePath, 'utf8');
563
758
  const parsed = JSON.parse(raw);
564
- return Array.isArray(parsed) ? parsed.slice(-MAX_QUEUE_ITEMS) : [];
759
+ if (!Array.isArray(parsed))
760
+ return [];
761
+ return parsed.slice(-MAX_QUEUE_ITEMS).flatMap((entry) => {
762
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry))
763
+ return [];
764
+ const value = entry;
765
+ if (typeof value.type === 'string' &&
766
+ value.data &&
767
+ typeof value.data === 'object' &&
768
+ !Array.isArray(value.data)) {
769
+ return [{
770
+ type: value.type.slice(0, 100),
771
+ data: value.data
772
+ }];
773
+ }
774
+ // Compatibilidade com a fila local criada antes dos envelopes.
775
+ return [{ type: 'telemetry_bulk', data: value }];
776
+ });
565
777
  }
566
778
  catch {
567
779
  return [];
@@ -570,23 +782,27 @@ class TelemetryService {
570
782
  async writeQueue(queue) {
571
783
  await promises_1.default.mkdir(path_1.default.dirname(queuePath), { recursive: true });
572
784
  const temporaryPath = `${queuePath}.${process.pid}.${Date.now()}.tmp`;
785
+ const boundedQueue = queue.slice(-MAX_QUEUE_ITEMS);
786
+ while (boundedQueue.length > 0 &&
787
+ Buffer.byteLength(JSON.stringify(boundedQueue), 'utf8') > MAX_QUEUE_BYTES) {
788
+ boundedQueue.shift();
789
+ }
573
790
  try {
574
- await promises_1.default.writeFile(temporaryPath, JSON.stringify(queue.slice(-MAX_QUEUE_ITEMS)), 'utf8');
791
+ await promises_1.default.writeFile(temporaryPath, JSON.stringify(boundedQueue), 'utf8');
575
792
  await promises_1.default.rename(temporaryPath, queuePath);
576
793
  }
577
794
  finally {
578
795
  await promises_1.default.unlink(temporaryPath).catch(() => { });
579
796
  }
580
797
  }
581
- async queueData(data) {
582
- // O payloadsai 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.
798
+ async queueData(type, data) {
799
+ // Os produtoreslimitam seus pacotes ao frame do transporte.
800
+ // Re-sanitizar aqui removeria grupos inteiros durante períodos offline.
585
801
  this.queueWriteChain = this.queueWriteChain
586
802
  .catch(() => { })
587
803
  .then(async () => {
588
804
  const queue = await this.readQueue();
589
- queue.push(data);
805
+ queue.push({ type, data });
590
806
  await this.writeQueue(queue);
591
807
  });
592
808
  try {
@@ -604,8 +820,8 @@ class TelemetryService {
604
820
  await this.queueWriteChain;
605
821
  let queue = await this.readQueue();
606
822
  while (queue.length > 0 && this.started && this.getTransport().IsConnected()) {
607
- const data = queue[0];
608
- if (!this.send('telemetry_bulk', data))
823
+ const item = queue[0];
824
+ if (!this.send(item.type, item.data))
609
825
  break;
610
826
  queue = queue.slice(1);
611
827
  await this.writeQueue(queue);