@mongrov/core 0.5.1 → 0.7.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.
- package/README.md +10 -3
- package/dist/context/logging-provider.d.ts.map +1 -1
- package/dist/context/logging-provider.js +42 -6
- package/dist/context/logging-provider.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/internal-log.d.ts +31 -0
- package/dist/internal-log.d.ts.map +1 -0
- package/dist/internal-log.js +50 -0
- package/dist/internal-log.js.map +1 -0
- package/dist/logger.d.ts +15 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +256 -30
- package/dist/logger.js.map +1 -1
- package/dist/network-state.d.ts +6 -0
- package/dist/network-state.d.ts.map +1 -1
- package/dist/network-state.js +43 -5
- package/dist/network-state.js.map +1 -1
- package/dist/offline-queue.d.ts +6 -0
- package/dist/offline-queue.d.ts.map +1 -1
- package/dist/offline-queue.js +50 -9
- package/dist/offline-queue.js.map +1 -1
- package/dist/redact.d.ts +13 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +43 -0
- package/dist/redact.js.map +1 -0
- package/dist/transports/file.d.ts +49 -2
- package/dist/transports/file.d.ts.map +1 -1
- package/dist/transports/file.js +228 -55
- package/dist/transports/file.js.map +1 -1
- package/dist/transports/webhook.d.ts +11 -1
- package/dist/transports/webhook.d.ts.map +1 -1
- package/dist/transports/webhook.js +44 -8
- package/dist/transports/webhook.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/transports/file.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { devConsoleLogger, FailureGate } from '../internal-log';
|
|
1
2
|
let FileSystemModule = null;
|
|
2
3
|
function getFileSystem() {
|
|
3
4
|
if (!FileSystemModule) {
|
|
@@ -17,70 +18,216 @@ function getFileSystem() {
|
|
|
17
18
|
}
|
|
18
19
|
return FileSystemModule;
|
|
19
20
|
}
|
|
21
|
+
let AppendFileClass;
|
|
22
|
+
// Hermes provides it; core's tsconfig has no DOM lib to declare it.
|
|
23
|
+
function currentEncoder() {
|
|
24
|
+
return globalThis.TextEncoder;
|
|
25
|
+
}
|
|
26
|
+
/** `null` on expo-file-system before v19 (no `File` / `Paths`), or without a TextEncoder. */
|
|
27
|
+
function getAppendFile() {
|
|
28
|
+
if (AppendFileClass === undefined) {
|
|
29
|
+
try {
|
|
30
|
+
const mod = require('expo-file-system');
|
|
31
|
+
AppendFileClass = typeof mod.File === 'function' && mod.Paths !== undefined && currentEncoder() ? mod.File : null;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
AppendFileClass = null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return AppendFileClass;
|
|
38
|
+
}
|
|
39
|
+
/** Test seam: forget the probed API so the next write probes again. */
|
|
40
|
+
export function resetFileApiForTests() {
|
|
41
|
+
AppendFileClass = undefined;
|
|
42
|
+
}
|
|
43
|
+
// UTC, the same clock as every entry's `timestamp`, so a file's name and the
|
|
44
|
+
// lines inside it agree on which hour they belong to.
|
|
20
45
|
function formatDate(date) {
|
|
21
|
-
const y = date.
|
|
22
|
-
const m = String(date.
|
|
23
|
-
const d = String(date.
|
|
46
|
+
const y = date.getUTCFullYear();
|
|
47
|
+
const m = String(date.getUTCMonth() + 1).padStart(2, '0');
|
|
48
|
+
const d = String(date.getUTCDate()).padStart(2, '0');
|
|
24
49
|
return `${y}-${m}-${d}`;
|
|
25
50
|
}
|
|
51
|
+
function formatHour(date) {
|
|
52
|
+
return `${formatDate(date)}T${String(date.getUTCHours()).padStart(2, '0')}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* `logs-YYYY-MM-DDTHH-NNN.txt`: a new file every UTC hour, and a new `NNN`
|
|
56
|
+
* when the current one passes `maxFileSizeKB`. Names sort chronologically,
|
|
57
|
+
* and a pre-0.7 day file (`logs-YYYY-MM-DD.txt`) sorts before the same day's
|
|
58
|
+
* hourly files (`.` < `T`), so legacy and new files read in one order.
|
|
59
|
+
*/
|
|
60
|
+
function rotatedName(hour, seq) {
|
|
61
|
+
return `logs-${hour}-${String(seq).padStart(3, '0')}.txt`;
|
|
62
|
+
}
|
|
63
|
+
const ROTATED_RE = /^logs-(\d{4}-\d{2}-\d{2}T\d{2})-(\d{3,})\.txt$/;
|
|
64
|
+
const DATE_RE = /^logs-(\d{4}-\d{2}-\d{2})/;
|
|
65
|
+
function isLogFile(name) {
|
|
66
|
+
return name.startsWith('logs-') && name.endsWith('.txt');
|
|
67
|
+
}
|
|
68
|
+
/** The UTC day a log file belongs to, legacy or hourly; `null` if neither. */
|
|
69
|
+
function fileDay(name) {
|
|
70
|
+
return DATE_RE.exec(name)?.[1] ?? null;
|
|
71
|
+
}
|
|
26
72
|
export class FileTransport {
|
|
27
|
-
|
|
73
|
+
/**
|
|
74
|
+
* `logger` receives this transport's own failures. `createLogger` passes
|
|
75
|
+
* one that skips this transport; standalone use falls back to the dev
|
|
76
|
+
* console.
|
|
77
|
+
*/
|
|
78
|
+
constructor(config, logger) {
|
|
28
79
|
this.name = 'file';
|
|
80
|
+
this.writeFailures = new FailureGate();
|
|
29
81
|
this.initialized = false;
|
|
30
|
-
|
|
31
|
-
this.
|
|
82
|
+
this.fallbackReported = false;
|
|
83
|
+
this.current = null;
|
|
84
|
+
// Entries waiting for the next write, and the callers waiting on them.
|
|
85
|
+
// Lines that arrive while a write is in flight are coalesced into the next
|
|
86
|
+
// one: one open (or one read+rewrite, on the fallback) per batch, not per
|
|
87
|
+
// line.
|
|
88
|
+
this.pending = [];
|
|
89
|
+
this.pendingWaiters = [];
|
|
90
|
+
this.writing = null;
|
|
32
91
|
// Throttle cleanup to once per minute
|
|
33
92
|
this.lastCleanup = 0;
|
|
34
93
|
this.cleanupIntervalMs = 60000;
|
|
94
|
+
this.log = logger ?? devConsoleLogger();
|
|
35
95
|
const fs = getFileSystem();
|
|
36
96
|
this.directory
|
|
37
97
|
= config?.directory ?? `${fs.documentDirectory ?? ''}logs/`;
|
|
38
98
|
this.maxSizeMB = config?.maxSizeMB ?? 5;
|
|
99
|
+
this.maxFileBytes = (config?.maxFileSizeKB ?? 1024) * 1024;
|
|
39
100
|
this.retentionDays = config?.retentionDays ?? 7;
|
|
40
101
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
102
|
+
/** Resolves once these entries are on disk (or the write failed). */
|
|
103
|
+
send(entries) {
|
|
104
|
+
this.pending.push(...entries);
|
|
105
|
+
const done = new Promise(resolve => this.pendingWaiters.push(resolve));
|
|
106
|
+
if (!this.writing)
|
|
107
|
+
this.writing = this.drain();
|
|
108
|
+
return done;
|
|
109
|
+
}
|
|
110
|
+
/** Resolves once everything sent so far has been written. */
|
|
111
|
+
async flush() {
|
|
112
|
+
while (this.writing)
|
|
113
|
+
await this.writing;
|
|
114
|
+
}
|
|
115
|
+
async drain() {
|
|
116
|
+
while (this.pending.length > 0) {
|
|
117
|
+
const batch = this.pending;
|
|
118
|
+
const waiters = this.pendingWaiters;
|
|
119
|
+
this.pending = [];
|
|
120
|
+
this.pendingWaiters = [];
|
|
121
|
+
await this.doWrite(batch);
|
|
122
|
+
for (const resolve of waiters)
|
|
123
|
+
resolve();
|
|
124
|
+
}
|
|
125
|
+
this.writing = null;
|
|
46
126
|
}
|
|
47
127
|
async doWrite(entries) {
|
|
48
128
|
try {
|
|
49
129
|
await this.ensureDirectory();
|
|
130
|
+
const target = await this.targetFile(new Date());
|
|
50
131
|
const now = Date.now();
|
|
51
132
|
if (now - this.lastCleanup >= this.cleanupIntervalMs) {
|
|
52
|
-
await this.cleanupIfNeeded();
|
|
133
|
+
await this.cleanupIfNeeded(target.name);
|
|
53
134
|
this.lastCleanup = now;
|
|
54
135
|
}
|
|
55
136
|
const lines = `${entries.map(e => JSON.stringify(e)).join('\n')}\n`;
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
137
|
+
target.size += await this.append(`${this.directory}${target.name}`, lines);
|
|
138
|
+
const failed = this.writeFailures.recover();
|
|
139
|
+
if (failed > 0)
|
|
140
|
+
this.log.info('[FileTransport] writes recovered', { failedWrites: failed });
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
// Logging must never crash the app. The lines are lost from the file
|
|
144
|
+
// (the ring buffer still has them); report once per run of failures.
|
|
145
|
+
if (this.writeFailures.fail()) {
|
|
146
|
+
this.log.error('[FileTransport] write failed; file log is missing lines', {
|
|
147
|
+
error: String(error),
|
|
148
|
+
lost: entries.length,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* The file this batch goes to. A new UTC hour starts a new file; so does a
|
|
155
|
+
* current file at or past `maxFileSizeKB`. On the first write of an hour
|
|
156
|
+
* (a relaunch, say) it continues the newest file already on disk for that
|
|
157
|
+
* hour, so a restart does not leave a run of near-empty files.
|
|
158
|
+
*/
|
|
159
|
+
async targetFile(at) {
|
|
160
|
+
const hour = formatHour(at);
|
|
161
|
+
if (this.current?.hour !== hour)
|
|
162
|
+
this.current = await this.resumeHour(hour);
|
|
163
|
+
if (this.current.size >= this.maxFileBytes) {
|
|
164
|
+
const seq = this.current.seq + 1;
|
|
165
|
+
this.current = { hour, seq, name: rotatedName(hour, seq), size: 0 };
|
|
166
|
+
}
|
|
167
|
+
return this.current;
|
|
168
|
+
}
|
|
169
|
+
async resumeHour(hour) {
|
|
170
|
+
const fs = getFileSystem();
|
|
171
|
+
const latest = (await fs.readDirectoryAsync(this.directory))
|
|
172
|
+
.map(name => ROTATED_RE.exec(name))
|
|
173
|
+
.filter((m) => m !== null && m[1] === hour)
|
|
174
|
+
.map(m => Number(m[2]))
|
|
175
|
+
.sort((a, b) => a - b)
|
|
176
|
+
.pop();
|
|
177
|
+
if (latest === undefined)
|
|
178
|
+
return { hour, seq: 0, name: rotatedName(hour, 0), size: 0 };
|
|
179
|
+
const name = rotatedName(hour, latest);
|
|
180
|
+
const info = await fs.getInfoAsync(`${this.directory}${name}`);
|
|
181
|
+
return { hour, seq: latest, name, size: info.size ?? 0 };
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Appends at the end of the file and returns the bytes written. Never reads
|
|
185
|
+
* the file on the append path: a kill mid-write can at worst cut the last
|
|
186
|
+
* line, not the lines already on disk.
|
|
187
|
+
*/
|
|
188
|
+
async append(filePath, lines) {
|
|
189
|
+
const AppendFileCtor = getAppendFile();
|
|
190
|
+
if (AppendFileCtor) {
|
|
191
|
+
const bytes = new (currentEncoder())().encode(lines);
|
|
192
|
+
const file = new AppendFileCtor(filePath);
|
|
193
|
+
if (!file.exists)
|
|
194
|
+
file.create();
|
|
195
|
+
const handle = file.open();
|
|
196
|
+
try {
|
|
197
|
+
handle.offset = handle.size ?? 0;
|
|
198
|
+
handle.writeBytes(bytes);
|
|
64
199
|
}
|
|
65
|
-
|
|
66
|
-
|
|
200
|
+
finally {
|
|
201
|
+
handle.close();
|
|
67
202
|
}
|
|
203
|
+
return bytes.length;
|
|
68
204
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
205
|
+
if (!this.fallbackReported) {
|
|
206
|
+
this.fallbackReported = true;
|
|
207
|
+
this.log.info('[FileTransport] append API unavailable; rewriting the file per batch', {
|
|
208
|
+
reason: 'expo-file-system < 19 (no File / Paths) or no TextEncoder',
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
const fs = getFileSystem();
|
|
212
|
+
const info = await fs.getInfoAsync(filePath);
|
|
213
|
+
if (info.exists) {
|
|
214
|
+
const existing = await fs.readAsStringAsync(filePath);
|
|
215
|
+
await fs.writeAsStringAsync(filePath, existing + lines);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
await fs.writeAsStringAsync(filePath, lines);
|
|
72
219
|
}
|
|
220
|
+
return lines.length;
|
|
73
221
|
}
|
|
222
|
+
/** Newest first. */
|
|
74
223
|
async getLogFiles() {
|
|
75
224
|
try {
|
|
76
225
|
const fs = getFileSystem();
|
|
77
226
|
const files = await fs.readDirectoryAsync(this.directory);
|
|
78
|
-
return files
|
|
79
|
-
.filter(f => f.startsWith('logs-') && f.endsWith('.txt'))
|
|
80
|
-
.sort()
|
|
81
|
-
.reverse();
|
|
227
|
+
return files.filter(isLogFile).sort().reverse();
|
|
82
228
|
}
|
|
83
229
|
catch {
|
|
230
|
+
// expected: no directory yet means no files have been written.
|
|
84
231
|
return [];
|
|
85
232
|
}
|
|
86
233
|
}
|
|
@@ -88,6 +235,26 @@ export class FileTransport {
|
|
|
88
235
|
const fs = getFileSystem();
|
|
89
236
|
return fs.readAsStringAsync(`${this.directory}${filename}`);
|
|
90
237
|
}
|
|
238
|
+
/**
|
|
239
|
+
* Every retained file, legacy day files and hourly files together, oldest
|
|
240
|
+
* first: one JSON entry per line, oldest line first. Unlike the ring buffer
|
|
241
|
+
* this survives an app restart or crash. Waits for pending writes first, so
|
|
242
|
+
* the result includes everything sent.
|
|
243
|
+
*/
|
|
244
|
+
async readAll() {
|
|
245
|
+
await this.flush();
|
|
246
|
+
const files = (await this.getLogFiles()).reverse();
|
|
247
|
+
let out = '';
|
|
248
|
+
for (const file of files) {
|
|
249
|
+
try {
|
|
250
|
+
out += await this.readFile(file);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// A file removed by cleanup mid-read is simply skipped.
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return out;
|
|
257
|
+
}
|
|
91
258
|
async ensureDirectory() {
|
|
92
259
|
if (this.initialized)
|
|
93
260
|
return;
|
|
@@ -98,44 +265,50 @@ export class FileTransport {
|
|
|
98
265
|
}
|
|
99
266
|
this.initialized = true;
|
|
100
267
|
}
|
|
101
|
-
|
|
268
|
+
/**
|
|
269
|
+
* Deletes whole files only, never `current` (the file being written):
|
|
270
|
+
* first those older than `retentionDays`, then the oldest until the
|
|
271
|
+
* directory is under `maxSizeMB`. No file is ever cut, so every line left
|
|
272
|
+
* on disk is a line as it was written.
|
|
273
|
+
*/
|
|
274
|
+
async cleanupIfNeeded(current) {
|
|
102
275
|
try {
|
|
103
276
|
const fs = getFileSystem();
|
|
104
|
-
const files = await fs.readDirectoryAsync(this.directory)
|
|
105
|
-
|
|
106
|
-
.filter(f => f.startsWith('logs-') && f.endsWith('.txt'))
|
|
277
|
+
const files = (await fs.readDirectoryAsync(this.directory))
|
|
278
|
+
.filter(isLogFile)
|
|
107
279
|
.sort();
|
|
108
|
-
// Delete files older than retentionDays
|
|
109
280
|
const cutoffDate = new Date();
|
|
110
|
-
cutoffDate.
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
281
|
+
cutoffDate.setUTCDate(cutoffDate.getUTCDate() - this.retentionDays);
|
|
282
|
+
const cutoff = formatDate(cutoffDate);
|
|
283
|
+
const kept = [];
|
|
284
|
+
for (const file of files) {
|
|
285
|
+
const day = fileDay(file);
|
|
286
|
+
if (file !== current && day !== null && day < cutoff)
|
|
115
287
|
await fs.deleteAsync(`${this.directory}${file}`, { idempotent: true });
|
|
116
|
-
|
|
288
|
+
else
|
|
289
|
+
kept.push(file);
|
|
117
290
|
}
|
|
118
|
-
|
|
291
|
+
const sizes = new Map();
|
|
119
292
|
let totalSize = 0;
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
.
|
|
123
|
-
|
|
124
|
-
const info = await fs.getInfoAsync(`${this.directory}${file}`);
|
|
125
|
-
totalSize += info.size ?? 0;
|
|
293
|
+
for (const file of kept) {
|
|
294
|
+
const size = (await fs.getInfoAsync(`${this.directory}${file}`)).size ?? 0;
|
|
295
|
+
sizes.set(file, size);
|
|
296
|
+
totalSize += size;
|
|
126
297
|
}
|
|
127
298
|
const maxSizeBytes = this.maxSizeMB * 1024 * 1024;
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
299
|
+
for (const file of kept) {
|
|
300
|
+
if (totalSize <= maxSizeBytes)
|
|
301
|
+
break;
|
|
302
|
+
if (file === current)
|
|
303
|
+
continue;
|
|
132
304
|
await fs.deleteAsync(`${this.directory}${file}`, { idempotent: true });
|
|
133
|
-
totalSize -=
|
|
134
|
-
i++;
|
|
305
|
+
totalSize -= sizes.get(file) ?? 0;
|
|
135
306
|
}
|
|
136
307
|
}
|
|
137
|
-
catch {
|
|
138
|
-
//
|
|
308
|
+
catch (error) {
|
|
309
|
+
// Non-critical: the next cleanup (a minute on) tries again, but a
|
|
310
|
+
// cleanup that keeps failing lets the log directory grow unbounded.
|
|
311
|
+
this.log.warn('[FileTransport] cleanup failed', { error: String(error) });
|
|
139
312
|
}
|
|
140
313
|
}
|
|
141
314
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/transports/file.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/transports/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { InternalLogger } from '../internal-log';
|
|
1
2
|
import type { LogEntry, LogTransport, WebhookConfig } from '../types';
|
|
2
3
|
export declare class WebhookTransport implements LogTransport {
|
|
3
4
|
readonly name = "webhook";
|
|
@@ -6,7 +7,16 @@ export declare class WebhookTransport implements LogTransport {
|
|
|
6
7
|
private timer;
|
|
7
8
|
private offlineQueue;
|
|
8
9
|
private flushing;
|
|
9
|
-
|
|
10
|
+
private readonly log;
|
|
11
|
+
private readonly rejections;
|
|
12
|
+
private droppedEntries;
|
|
13
|
+
private readonly postFailures;
|
|
14
|
+
/**
|
|
15
|
+
* `logger` receives this transport's own failures. `createLogger` passes
|
|
16
|
+
* one that skips this transport (a report about a failing webhook must not
|
|
17
|
+
* be posted to that webhook); standalone use falls back to the dev console.
|
|
18
|
+
*/
|
|
19
|
+
constructor(config: WebhookConfig, logger?: InternalLogger);
|
|
10
20
|
send(entries: LogEntry[]): Promise<void>;
|
|
11
21
|
flush(): Promise<void>;
|
|
12
22
|
destroy(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/transports/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/transports/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAIrE,qBAAa,gBAAiB,YAAW,YAAY;IACnD,QAAQ,CAAC,IAAI,aAAY;IAEzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAG2B;IAElD,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IAGpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IAEjD;;;;OAIG;gBACS,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,cAAc;IAmBpD,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,SAAS;YAOH,UAAU;YA8BV,WAAW;CAwC1B"}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
|
+
import { devConsoleLogger, FailureGate } from '../internal-log';
|
|
1
2
|
import { OfflineQueue } from '../offline-queue';
|
|
2
3
|
export class WebhookTransport {
|
|
3
|
-
|
|
4
|
+
/**
|
|
5
|
+
* `logger` receives this transport's own failures. `createLogger` passes
|
|
6
|
+
* one that skips this transport (a report about a failing webhook must not
|
|
7
|
+
* be posted to that webhook); standalone use falls back to the dev console.
|
|
8
|
+
*/
|
|
9
|
+
constructor(config, logger) {
|
|
4
10
|
this.name = 'webhook';
|
|
5
11
|
this.batch = [];
|
|
6
12
|
this.timer = null;
|
|
7
13
|
this.flushing = false;
|
|
14
|
+
// A 4xx usually means bad auth or a bad URL: every batch drops until it
|
|
15
|
+
// is fixed. Reported once per run, with the total dropped at its end.
|
|
16
|
+
this.rejections = new FailureGate();
|
|
17
|
+
this.droppedEntries = 0;
|
|
18
|
+
this.postFailures = new FailureGate();
|
|
19
|
+
this.log = logger ?? devConsoleLogger();
|
|
8
20
|
this.config = {
|
|
9
21
|
url: config.url,
|
|
10
22
|
batchSize: config.batchSize ?? 10,
|
|
@@ -13,7 +25,7 @@ export class WebhookTransport {
|
|
|
13
25
|
headers: config.headers,
|
|
14
26
|
formatPayload: config.formatPayload,
|
|
15
27
|
};
|
|
16
|
-
this.offlineQueue = new OfflineQueue(entries => this.postEntries(entries), { maxRetries: this.config.maxRetries });
|
|
28
|
+
this.offlineQueue = new OfflineQueue(entries => this.postEntries(entries), { maxRetries: this.config.maxRetries, logger: this.log });
|
|
17
29
|
this.startTimer();
|
|
18
30
|
}
|
|
19
31
|
async send(entries) {
|
|
@@ -35,7 +47,9 @@ export class WebhookTransport {
|
|
|
35
47
|
startTimer() {
|
|
36
48
|
this.timer = setInterval(() => {
|
|
37
49
|
if (this.batch.length > 0) {
|
|
38
|
-
this.flushBatch().catch(() => {
|
|
50
|
+
this.flushBatch().catch((error) => {
|
|
51
|
+
this.log.error('[WebhookTransport] timed flush threw', { error: String(error) });
|
|
52
|
+
});
|
|
39
53
|
}
|
|
40
54
|
}, this.config.batchIntervalMs);
|
|
41
55
|
}
|
|
@@ -53,11 +67,19 @@ export class WebhookTransport {
|
|
|
53
67
|
this.batch = [];
|
|
54
68
|
try {
|
|
55
69
|
await this.postEntries(entries);
|
|
70
|
+
const failed = this.postFailures.recover();
|
|
71
|
+
if (failed > 0)
|
|
72
|
+
this.log.info('[WebhookTransport] posts recovered', { failedPosts: failed });
|
|
56
73
|
}
|
|
57
|
-
catch {
|
|
58
|
-
// Delegate to offline queue for retry
|
|
59
|
-
//
|
|
60
|
-
|
|
74
|
+
catch (error) {
|
|
75
|
+
// Delegate to offline queue for retry — every failure mode here has the
|
|
76
|
+
// same remedy, and the queue is what carries the entries forward.
|
|
77
|
+
if (this.postFailures.fail()) {
|
|
78
|
+
this.log.warn('[WebhookTransport] post failed; queued for retry', {
|
|
79
|
+
error: String(error),
|
|
80
|
+
entries: entries.length,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
61
83
|
this.offlineQueue.enqueue(entries);
|
|
62
84
|
}
|
|
63
85
|
finally {
|
|
@@ -78,13 +100,27 @@ export class WebhookTransport {
|
|
|
78
100
|
});
|
|
79
101
|
if (response.status >= 400 && response.status < 500) {
|
|
80
102
|
// Client error — drop entries, retrying won't help
|
|
81
|
-
|
|
103
|
+
this.droppedEntries += entries.length;
|
|
104
|
+
if (this.rejections.fail()) {
|
|
105
|
+
this.log.error('[WebhookTransport] rejected by server; dropping entries', {
|
|
106
|
+
status: response.status,
|
|
107
|
+
entries: entries.length,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
82
110
|
return;
|
|
83
111
|
}
|
|
84
112
|
if (!response.ok) {
|
|
85
113
|
// 5xx — throw to trigger offline queue retry
|
|
86
114
|
throw new Error(`HTTP ${response.status}`);
|
|
87
115
|
}
|
|
116
|
+
const rejected = this.rejections.recover();
|
|
117
|
+
if (rejected > 0) {
|
|
118
|
+
this.log.warn('[WebhookTransport] accepted again after rejections', {
|
|
119
|
+
rejectedBatches: rejected,
|
|
120
|
+
droppedEntries: this.droppedEntries,
|
|
121
|
+
});
|
|
122
|
+
this.droppedEntries = 0;
|
|
123
|
+
}
|
|
88
124
|
}
|
|
89
125
|
}
|
|
90
126
|
//# sourceMappingURL=webhook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/transports/webhook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/transports/webhook.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -30,7 +30,10 @@ export interface RingBufferConfig {
|
|
|
30
30
|
maxSize?: number;
|
|
31
31
|
}
|
|
32
32
|
export interface FileConfig {
|
|
33
|
+
/** Total size of the log directory; the oldest whole files go first. Default 5. */
|
|
33
34
|
maxSizeMB?: number;
|
|
35
|
+
/** A file past this starts the next one in the same hour. Default 1024. */
|
|
36
|
+
maxFileSizeKB?: number;
|
|
34
37
|
retentionDays?: number;
|
|
35
38
|
directory?: string;
|
|
36
39
|
}
|
|
@@ -51,5 +54,11 @@ export interface LoggerConfig {
|
|
|
51
54
|
appVersion: string;
|
|
52
55
|
updateId?: string;
|
|
53
56
|
onException?: (error: Error, context?: Record<string, unknown>) => void;
|
|
57
|
+
/**
|
|
58
|
+
* Rewrites every entry before any transport sees it. Defaults to
|
|
59
|
+
* `defaultRedact` (secret-looking keys and emails masked); compose with it
|
|
60
|
+
* to add app rules, or pass `false` to log verbatim.
|
|
61
|
+
*/
|
|
62
|
+
redact?: ((entry: LogEntry) => LogEntry) | false;
|
|
54
63
|
}
|
|
55
64
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAA;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAA;IACvC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,KAAK,GAAG,SAAS,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAA;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAA;IACvC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACvE;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC,GAAG,KAAK,CAAA;CACjD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mongrov/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Structured logging for React Native / Expo — ring buffer, file, and webhook transports with offline queue. Includes dev-tools UI components.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|