@mongrov/core 0.5.1 → 0.6.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/dist/context/logging-provider.d.ts.map +1 -1
- package/dist/context/logging-provider.js +27 -6
- package/dist/context/logging-provider.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -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 +228 -28
- 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/transports/file.d.ts +22 -2
- package/dist/transports/file.d.ts.map +1 -1
- package/dist/transports/file.js +101 -20
- 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/package.json +1 -1
|
@@ -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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mongrov/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.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": {
|