@ductape/sdk 0.1.98 → 0.1.100

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.
@@ -7,6 +7,9 @@ export interface ILogsService {
7
7
  publish(): Promise<void>;
8
8
  }
9
9
  export default class LogsService {
10
+ private static readonly DEFAULT_BATCH_BYTES;
11
+ private static readonly DEFAULT_ENTRY_DATA_BYTES;
12
+ private static readonly DEFAULT_MAX_RETRIES;
10
13
  private eventLogs;
11
14
  private user_id;
12
15
  private workspace_id;
@@ -23,6 +26,15 @@ export default class LogsService {
23
26
  constructor({ workspace_id, public_key, user_id, token, product_id, env_type, app_id, workspace_private_key, ip_address, language }: ILoggerInit);
24
27
  add(item: ILogData): void;
25
28
  fetchLogs(): ILogData[];
29
+ private configuredByteLimit;
30
+ private byteLength;
31
+ private truncateUtf8;
32
+ private delay;
33
+ private deliverBatch;
34
+ /**
35
+ * Flush telemetry without making application availability depend on the
36
+ * Logs API. Failed and unsent entries remain queued for a later flush.
37
+ */
26
38
  publish(): Promise<void>;
27
39
  fetch(params: LogQueryParams): Promise<any>;
28
40
  private getUserAccess;
@@ -30,23 +30,36 @@ class LogsService {
30
30
  fetchLogs() {
31
31
  return this.eventLogs;
32
32
  }
33
- async publish() {
34
- var _a, _b;
33
+ configuredByteLimit(name, fallback) {
34
+ const value = typeof process !== 'undefined' ? Number(process.env[name]) : NaN;
35
+ return Number.isFinite(value) && value > 0 ? value : fallback;
36
+ }
37
+ byteLength(value) {
38
+ return new TextEncoder().encode(JSON.stringify(value)).byteLength;
39
+ }
40
+ truncateUtf8(value, maxBytes) {
41
+ if (new TextEncoder().encode(value).byteLength <= maxBytes)
42
+ return value;
43
+ const suffix = '...[truncated by Ductape Logs]';
44
+ const contentBudget = Math.max(0, maxBytes - new TextEncoder().encode(suffix).byteLength);
45
+ let low = 0;
46
+ let high = value.length;
47
+ while (low < high) {
48
+ const mid = Math.ceil((low + high) / 2);
49
+ if (new TextEncoder().encode(value.slice(0, mid)).byteLength <= contentBudget)
50
+ low = mid;
51
+ else
52
+ high = mid - 1;
53
+ }
54
+ return `${value.slice(0, low)}${suffix}`;
55
+ }
56
+ async delay(ms) {
57
+ await new Promise((resolve) => setTimeout(resolve, ms));
58
+ }
59
+ async deliverBatch(batch, attempt = 0) {
60
+ var _a, _b, _c, _d, _e;
35
61
  try {
36
- const payload = this.workspace_private_key
37
- ? this.eventLogs.map((item) => {
38
- var _a;
39
- const dataStr = typeof item.data === 'string' ? item.data : JSON.stringify((_a = item.data) !== null && _a !== void 0 ? _a : {});
40
- try {
41
- const encrypted = (0, processor_utils_1.encrypt)(dataStr, this.workspace_private_key);
42
- return Object.assign(Object.assign({}, item), { data: encrypted, data_encrypted: true });
43
- }
44
- catch (_b) {
45
- return Object.assign(Object.assign({}, item), { data_encrypted: false });
46
- }
47
- })
48
- : this.eventLogs;
49
- await this.logsApi.logData(payload, {
62
+ await this.logsApi.logData(batch, {
50
63
  user_id: this.user_id,
51
64
  token: this.token,
52
65
  workspace_id: this.workspace_id,
@@ -54,10 +67,81 @@ class LogsService {
54
67
  ip_address: (_a = this.ip_address) !== null && _a !== void 0 ? _a : undefined,
55
68
  language: (_b = this.language) !== null && _b !== void 0 ? _b : undefined,
56
69
  });
57
- this.eventLogs = [];
58
70
  }
59
- catch (e) {
60
- throw e;
71
+ catch (error) {
72
+ const status = Number((_c = error === null || error === void 0 ? void 0 : error.response) === null || _c === void 0 ? void 0 : _c.status);
73
+ if (status === 413 && batch.length > 1) {
74
+ const midpoint = Math.ceil(batch.length / 2);
75
+ await this.deliverBatch(batch.slice(0, midpoint), attempt);
76
+ await this.deliverBatch(batch.slice(midpoint), attempt);
77
+ return;
78
+ }
79
+ const maxRetries = this.configuredByteLimit('DUCTAPE_LOG_MAX_RETRIES', LogsService.DEFAULT_MAX_RETRIES);
80
+ const transient = !status || status === 408 || status === 425 || status === 429 || status >= 500;
81
+ if (transient && attempt < maxRetries) {
82
+ const retryAfterSeconds = Number((_e = (_d = error === null || error === void 0 ? void 0 : error.response) === null || _d === void 0 ? void 0 : _d.headers) === null || _e === void 0 ? void 0 : _e['retry-after']);
83
+ const exponentialMs = Math.min(30000, 250 * (2 ** attempt));
84
+ const jitterMs = Math.floor(Math.random() * Math.max(1, exponentialMs / 2));
85
+ const delayMs = Number.isFinite(retryAfterSeconds) && retryAfterSeconds >= 0
86
+ ? retryAfterSeconds * 1000
87
+ : exponentialMs + jitterMs;
88
+ await this.delay(delayMs);
89
+ await this.deliverBatch(batch, attempt + 1);
90
+ return;
91
+ }
92
+ throw error;
93
+ }
94
+ }
95
+ /**
96
+ * Flush telemetry without making application availability depend on the
97
+ * Logs API. Failed and unsent entries remain queued for a later flush.
98
+ */
99
+ async publish() {
100
+ if (!this.eventLogs.length)
101
+ return;
102
+ const pending = this.eventLogs.splice(0, this.eventLogs.length);
103
+ const maxBatchBytes = this.configuredByteLimit('DUCTAPE_LOG_MAX_BATCH_BYTES', LogsService.DEFAULT_BATCH_BYTES);
104
+ const maxEntryDataBytes = this.configuredByteLimit('DUCTAPE_LOG_MAX_ENTRY_DATA_BYTES', LogsService.DEFAULT_ENTRY_DATA_BYTES);
105
+ const payload = pending.map((item) => {
106
+ var _a;
107
+ const rawData = typeof item.data === 'string' ? item.data : JSON.stringify((_a = item.data) !== null && _a !== void 0 ? _a : {});
108
+ const dataStr = this.truncateUtf8(rawData, maxEntryDataBytes);
109
+ if (!this.workspace_private_key)
110
+ return Object.assign(Object.assign({}, item), { data: dataStr });
111
+ try {
112
+ return Object.assign(Object.assign({}, item), { data: (0, processor_utils_1.encrypt)(dataStr, this.workspace_private_key), data_encrypted: true });
113
+ }
114
+ catch (_b) {
115
+ // Never fall back to sending plaintext when encryption was requested.
116
+ return Object.assign(Object.assign({}, item), { data: '[log encryption failed]', data_encrypted: false });
117
+ }
118
+ });
119
+ const batches = [];
120
+ let batch = [];
121
+ let batchBytes = 0;
122
+ for (const item of payload) {
123
+ const itemBytes = this.byteLength(item);
124
+ if (batch.length && batchBytes + itemBytes > maxBatchBytes) {
125
+ batches.push(batch);
126
+ batch = [];
127
+ batchBytes = 0;
128
+ }
129
+ batch.push(item);
130
+ batchBytes += itemBytes;
131
+ }
132
+ if (batch.length)
133
+ batches.push(batch);
134
+ for (let index = 0; index < batches.length; index += 1) {
135
+ try {
136
+ await this.deliverBatch(batches[index]);
137
+ }
138
+ catch (error) {
139
+ const unsent = batches.slice(index).flat();
140
+ this.eventLogs.unshift(...unsent);
141
+ console.warn(`[Ductape Logs] Flush failed; ${unsent.length} log entries retained for retry. ` +
142
+ 'Request details were suppressed.');
143
+ return;
144
+ }
61
145
  }
62
146
  }
63
147
  async fetch(params) {
@@ -92,5 +176,8 @@ class LogsService {
92
176
  };
93
177
  }
94
178
  }
179
+ LogsService.DEFAULT_BATCH_BYTES = 128 * 1024;
180
+ LogsService.DEFAULT_ENTRY_DATA_BYTES = 64 * 1024;
181
+ LogsService.DEFAULT_MAX_RETRIES = 4;
95
182
  exports.default = LogsService;
96
183
  //# sourceMappingURL=logs.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs.service.js","sourceRoot":"","sources":["../../src/logs/logs.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logs.service.js","sourceRoot":"","sources":["../../src/logs/logs.service.ts"],"names":[],"mappings":"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"}