@noego/wood 0.4.6 → 0.4.8
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/bin/wood.js +6 -1
- package/dist/client/app_env.cjs +39 -0
- package/dist/client/app_env.cjs.map +1 -0
- package/dist/client/app_env.d.cts +7 -0
- package/dist/client/app_env.d.ts +7 -0
- package/dist/client/app_env.js +14 -0
- package/dist/client/app_env.js.map +1 -0
- package/dist/client/index.cjs +33 -9
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.cts +5 -1
- package/dist/client/index.d.ts +5 -1
- package/dist/client/index.js +32 -9
- package/dist/client/index.js.map +1 -1
- package/dist/codegen/channel_map_generator.cjs +102 -0
- package/dist/codegen/channel_map_generator.cjs.map +1 -0
- package/dist/codegen/channel_map_generator.d.cts +6 -0
- package/dist/codegen/channel_map_generator.d.ts +6 -0
- package/dist/codegen/channel_map_generator.js +78 -0
- package/dist/codegen/channel_map_generator.js.map +1 -0
- package/dist/codegen/controller_registration_generator.cjs +6 -1
- package/dist/codegen/controller_registration_generator.cjs.map +1 -1
- package/dist/codegen/controller_registration_generator.js +6 -1
- package/dist/codegen/controller_registration_generator.js.map +1 -1
- package/dist/codegen/generated_file_notice.cjs +40 -0
- package/dist/codegen/generated_file_notice.cjs.map +1 -0
- package/dist/codegen/generated_file_notice.d.cts +3 -0
- package/dist/codegen/generated_file_notice.d.ts +3 -0
- package/dist/codegen/generated_file_notice.js +16 -0
- package/dist/codegen/generated_file_notice.js.map +1 -0
- package/dist/codegen/index.cjs +3 -0
- package/dist/codegen/index.cjs.map +1 -1
- package/dist/codegen/index.d.cts +1 -0
- package/dist/codegen/index.d.ts +1 -0
- package/dist/codegen/index.js +2 -0
- package/dist/codegen/index.js.map +1 -1
- package/dist/codegen/preload_generator.cjs +97 -1
- package/dist/codegen/preload_generator.cjs.map +1 -1
- package/dist/codegen/preload_generator.js +97 -1
- package/dist/codegen/preload_generator.js.map +1 -1
- package/dist/codegen/renderer_app_generator.cjs +6 -1
- package/dist/codegen/renderer_app_generator.cjs.map +1 -1
- package/dist/codegen/renderer_app_generator.js +6 -1
- package/dist/codegen/renderer_app_generator.js.map +1 -1
- package/dist/codegen/renderer_controller_registration_generator.cjs +6 -1
- package/dist/codegen/renderer_controller_registration_generator.cjs.map +1 -1
- package/dist/codegen/renderer_controller_registration_generator.js +6 -1
- package/dist/codegen/renderer_controller_registration_generator.js.map +1 -1
- package/dist/codegen/renderer_view_manifest_generator.cjs +6 -1
- package/dist/codegen/renderer_view_manifest_generator.cjs.map +1 -1
- package/dist/codegen/renderer_view_manifest_generator.js +6 -1
- package/dist/codegen/renderer_view_manifest_generator.js.map +1 -1
- package/dist/codegen/runtime_generator.cjs +6 -1
- package/dist/codegen/runtime_generator.cjs.map +1 -1
- package/dist/codegen/runtime_generator.js +6 -1
- package/dist/codegen/runtime_generator.js.map +1 -1
- package/dist/codegen/test_mock_generator.cjs +5 -1
- package/dist/codegen/test_mock_generator.cjs.map +1 -1
- package/dist/codegen/test_mock_generator.js +5 -1
- package/dist/codegen/test_mock_generator.js.map +1 -1
- package/dist/codegen/type_generator.cjs +6 -1
- package/dist/codegen/type_generator.cjs.map +1 -1
- package/dist/codegen/type_generator.js +6 -1
- package/dist/codegen/type_generator.js.map +1 -1
- package/dist/index.cjs +19 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/main/index.cjs +133 -55
- package/dist/main/index.cjs.map +1 -1
- package/dist/main/index.d.cts +30 -2
- package/dist/main/index.d.ts +30 -2
- package/dist/main/index.js +134 -55
- package/dist/main/index.js.map +1 -1
- package/dist/main/renderer_trace_drain_coordinator.cjs +127 -0
- package/dist/main/renderer_trace_drain_coordinator.cjs.map +1 -0
- package/dist/main/renderer_trace_drain_coordinator.d.cts +46 -0
- package/dist/main/renderer_trace_drain_coordinator.d.ts +46 -0
- package/dist/main/renderer_trace_drain_coordinator.js +101 -0
- package/dist/main/renderer_trace_drain_coordinator.js.map +1 -0
- package/dist/router/wood_router.cjs +9 -1
- package/dist/router/wood_router.cjs.map +1 -1
- package/dist/router/wood_router.d.cts +1 -1
- package/dist/router/wood_router.d.ts +1 -1
- package/dist/router/wood_router.js +9 -1
- package/dist/router/wood_router.js.map +1 -1
- package/dist/runtime/app_env.cjs +52 -0
- package/dist/runtime/app_env.cjs.map +1 -0
- package/dist/runtime/app_env.d.cts +10 -0
- package/dist/runtime/app_env.d.ts +10 -0
- package/dist/runtime/app_env.js +18 -0
- package/dist/runtime/app_env.js.map +1 -0
- package/dist/runtime/index.cjs +9 -2
- package/dist/runtime/index.cjs.map +1 -1
- package/dist/runtime/index.d.cts +5 -1
- package/dist/runtime/index.d.ts +5 -1
- package/dist/runtime/index.js +9 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/renderer_log_dispatcher.cjs.map +1 -1
- package/dist/runtime/renderer_log_dispatcher.d.cts +1 -1
- package/dist/runtime/renderer_log_dispatcher.d.ts +1 -1
- package/dist/runtime/renderer_log_dispatcher.js.map +1 -1
- package/dist/runtime/renderer_trace_batch_receiver_registry.cjs +50 -0
- package/dist/runtime/renderer_trace_batch_receiver_registry.cjs.map +1 -0
- package/dist/runtime/renderer_trace_batch_receiver_registry.d.cts +10 -0
- package/dist/runtime/renderer_trace_batch_receiver_registry.d.ts +10 -0
- package/dist/runtime/renderer_trace_batch_receiver_registry.js +24 -0
- package/dist/runtime/renderer_trace_batch_receiver_registry.js.map +1 -0
- package/dist/runtime/runtime.cjs +75 -57
- package/dist/runtime/runtime.cjs.map +1 -1
- package/dist/runtime/runtime.d.cts +8 -1
- package/dist/runtime/runtime.d.ts +8 -1
- package/dist/runtime/runtime.js +80 -58
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/testing/browser.cjs +540 -11
- package/dist/testing/browser.cjs.map +1 -1
- package/dist/testing/browser.d.cts +219 -3
- package/dist/testing/browser.d.ts +219 -3
- package/dist/testing/browser.js +540 -11
- package/dist/testing/browser.js.map +1 -1
- package/dist/testing/create_controller_harness.d.cts +1 -1
- package/dist/testing/create_controller_harness.d.ts +1 -1
- package/dist/testing/index.cjs +13 -0
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +7 -2
- package/dist/testing/index.d.ts +7 -2
- package/dist/testing/index.js +14 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/trace-testing/index.d.cts +1 -1
- package/dist/trace-testing/index.d.ts +1 -1
- package/dist/trace-testing/trace_recorder.d.cts +1 -1
- package/dist/trace-testing/trace_recorder.d.ts +1 -1
- package/dist/trace-transport/index.cjs +32 -0
- package/dist/trace-transport/index.cjs.map +1 -0
- package/dist/trace-transport/index.d.cts +6 -0
- package/dist/trace-transport/index.d.ts +6 -0
- package/dist/trace-transport/index.js +7 -0
- package/dist/trace-transport/index.js.map +1 -0
- package/dist/trace_hub-Cob54qRx.d.cts +56 -0
- package/dist/trace_hub-Cob54qRx.d.ts +56 -0
- package/dist/tracing/index.cjs +14 -0
- package/dist/tracing/index.cjs.map +1 -1
- package/dist/tracing/index.d.cts +7 -1
- package/dist/tracing/index.d.ts +7 -1
- package/dist/tracing/index.js +12 -0
- package/dist/tracing/index.js.map +1 -1
- package/dist/tracing/renderer_trace_batch_host.cjs +80 -0
- package/dist/tracing/renderer_trace_batch_host.cjs.map +1 -0
- package/dist/tracing/renderer_trace_batch_host.d.cts +16 -0
- package/dist/tracing/renderer_trace_batch_host.d.ts +16 -0
- package/dist/tracing/renderer_trace_batch_host.js +56 -0
- package/dist/tracing/renderer_trace_batch_host.js.map +1 -0
- package/dist/tracing/renderer_trace_batch_transport.cjs +313 -0
- package/dist/tracing/renderer_trace_batch_transport.cjs.map +1 -0
- package/dist/tracing/renderer_trace_batch_transport.d.cts +53 -0
- package/dist/tracing/renderer_trace_batch_transport.d.ts +53 -0
- package/dist/tracing/renderer_trace_batch_transport.js +292 -0
- package/dist/tracing/renderer_trace_batch_transport.js.map +1 -0
- package/dist/tracing/trace_commit_writer.cjs +159 -0
- package/dist/tracing/trace_commit_writer.cjs.map +1 -0
- package/dist/tracing/trace_commit_writer.d.cts +97 -0
- package/dist/tracing/trace_commit_writer.d.ts +97 -0
- package/dist/tracing/trace_commit_writer.js +135 -0
- package/dist/tracing/trace_commit_writer.js.map +1 -0
- package/dist/tracing/trace_hub.cjs +58 -3
- package/dist/tracing/trace_hub.cjs.map +1 -1
- package/dist/tracing/trace_hub.d.cts +2 -46
- package/dist/tracing/trace_hub.d.ts +2 -46
- package/dist/tracing/trace_hub.js +56 -3
- package/dist/tracing/trace_hub.js.map +1 -1
- package/dist/tracing/trace_provider.cjs +42 -12
- package/dist/tracing/trace_provider.cjs.map +1 -1
- package/dist/tracing/trace_provider.d.cts +15 -1
- package/dist/tracing/trace_provider.d.ts +15 -1
- package/dist/tracing/trace_provider.js +43 -12
- package/dist/tracing/trace_provider.js.map +1 -1
- package/dist/tracing/types/wood_trace_batch.types.cjs +17 -0
- package/dist/tracing/types/wood_trace_batch.types.cjs.map +1 -0
- package/dist/tracing/types/wood_trace_batch.types.d.cts +124 -0
- package/dist/tracing/types/wood_trace_batch.types.d.ts +124 -0
- package/dist/tracing/types/wood_trace_batch.types.js +1 -0
- package/dist/tracing/types/wood_trace_batch.types.js.map +1 -0
- package/dist/tracing/types/wood_trace_sink.types.cjs +17 -0
- package/dist/tracing/types/wood_trace_sink.types.cjs.map +1 -0
- package/dist/tracing/types/wood_trace_sink.types.d.cts +2 -0
- package/dist/tracing/types/wood_trace_sink.types.d.ts +2 -0
- package/dist/tracing/types/wood_trace_sink.types.js +1 -0
- package/dist/tracing/types/wood_trace_sink.types.js.map +1 -0
- package/dist/tracing/wood_trace_batch_contract.cjs +229 -0
- package/dist/tracing/wood_trace_batch_contract.cjs.map +1 -0
- package/dist/tracing/wood_trace_batch_contract.d.cts +23 -0
- package/dist/tracing/wood_trace_batch_contract.d.ts +23 -0
- package/dist/tracing/wood_trace_batch_contract.js +205 -0
- package/dist/tracing/wood_trace_batch_contract.js.map +1 -0
- package/dist/transport/build_transport_bridge.cjs +62 -0
- package/dist/transport/build_transport_bridge.cjs.map +1 -0
- package/dist/transport/build_transport_bridge.d.cts +29 -0
- package/dist/transport/build_transport_bridge.d.ts +29 -0
- package/dist/transport/build_transport_bridge.js +38 -0
- package/dist/transport/build_transport_bridge.js.map +1 -0
- package/dist/transport/in_process_router_transport.cjs +41 -0
- package/dist/transport/in_process_router_transport.cjs.map +1 -0
- package/dist/transport/in_process_router_transport.d.cts +31 -0
- package/dist/transport/in_process_router_transport.d.ts +31 -0
- package/dist/transport/in_process_router_transport.js +17 -0
- package/dist/transport/in_process_router_transport.js.map +1 -0
- package/dist/transport/index.cjs +42 -0
- package/dist/transport/index.cjs.map +1 -0
- package/dist/transport/index.d.cts +8 -0
- package/dist/transport/index.d.ts +8 -0
- package/dist/transport/index.js +19 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/loopback_remote_transport.cjs +270 -0
- package/dist/transport/loopback_remote_transport.cjs.map +1 -0
- package/dist/transport/loopback_remote_transport.d.cts +49 -0
- package/dist/transport/loopback_remote_transport.d.ts +49 -0
- package/dist/transport/loopback_remote_transport.js +237 -0
- package/dist/transport/loopback_remote_transport.js.map +1 -0
- package/dist/transport/loopback_serialization.cjs +116 -0
- package/dist/transport/loopback_serialization.cjs.map +1 -0
- package/dist/transport/loopback_serialization.d.cts +28 -0
- package/dist/transport/loopback_serialization.d.ts +28 -0
- package/dist/transport/loopback_serialization.js +91 -0
- package/dist/transport/loopback_serialization.js.map +1 -0
- package/dist/transport/transport_contract_suite.cjs +110 -0
- package/dist/transport/transport_contract_suite.cjs.map +1 -0
- package/dist/transport/transport_contract_suite.d.cts +23 -0
- package/dist/transport/transport_contract_suite.d.ts +23 -0
- package/dist/transport/transport_contract_suite.js +85 -0
- package/dist/transport/transport_contract_suite.js.map +1 -0
- package/dist/transport/wood_rpc_transport.cjs +17 -0
- package/dist/transport/wood_rpc_transport.cjs.map +1 -0
- package/dist/transport/wood_rpc_transport.d.cts +44 -0
- package/dist/transport/wood_rpc_transport.d.ts +44 -0
- package/dist/transport/wood_rpc_transport.js +1 -0
- package/dist/transport/wood_rpc_transport.js.map +1 -0
- package/docs/browser-testing.md +139 -1
- package/package.json +25 -4
- package/src/client/app_env.ts +21 -0
- package/src/components/NavigationShell.browser.test.ts +236 -0
- package/src/components/NavigationShell.svelte +162 -49
- package/src/runtime/app_env.ts +27 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var renderer_trace_batch_transport_exports = {};
|
|
20
|
+
__export(renderer_trace_batch_transport_exports, {
|
|
21
|
+
RendererTraceBatchTransport: () => RendererTraceBatchTransport
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(renderer_trace_batch_transport_exports);
|
|
24
|
+
var import_core = require("@noego/telemetry/core");
|
|
25
|
+
var import_wood_trace_batch_contract = require("./wood_trace_batch_contract.js");
|
|
26
|
+
class RendererTraceBatchTransport {
|
|
27
|
+
constructor(options) {
|
|
28
|
+
this.options = options;
|
|
29
|
+
this.contract = new import_wood_trace_batch_contract.WoodTraceBatchContract();
|
|
30
|
+
this.queue = [];
|
|
31
|
+
this.state = "accepting";
|
|
32
|
+
this.port = null;
|
|
33
|
+
this.unsubscribePort = null;
|
|
34
|
+
this.inFlight = null;
|
|
35
|
+
this.nextSequence = 0;
|
|
36
|
+
this.drainScheduled = false;
|
|
37
|
+
this.droppedCapacity = 0;
|
|
38
|
+
this.droppedClosed = 0;
|
|
39
|
+
this.droppedRejected = 0;
|
|
40
|
+
this.droppedRetryExhausted = 0;
|
|
41
|
+
this.committedBatches = 0;
|
|
42
|
+
this.retryAttempts = 0;
|
|
43
|
+
this.metadataTruncatedValues = 0;
|
|
44
|
+
this.metadataRedactedValues = 0;
|
|
45
|
+
this.metadataSerializationFailures = 0;
|
|
46
|
+
this.validateOptions();
|
|
47
|
+
this.metadataSnapshotter = new import_core.BoundedMetadataSnapshotter(
|
|
48
|
+
options.metadataSnapshotLimits ?? import_core.DEFAULT_METADATA_SNAPSHOT_LIMITS
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
admit(event) {
|
|
52
|
+
const sequence = this.nextSequence;
|
|
53
|
+
this.nextSequence += 1;
|
|
54
|
+
if (this.state !== "accepting") {
|
|
55
|
+
this.droppedClosed += 1;
|
|
56
|
+
return { kind: "dropped", sequence, reason: "closed" };
|
|
57
|
+
}
|
|
58
|
+
const retainedEvents = this.queue.length + (this.inFlight?.batch.events.length ?? 0);
|
|
59
|
+
if (retainedEvents >= this.options.maxQueuedEvents) {
|
|
60
|
+
this.droppedCapacity += 1;
|
|
61
|
+
return { kind: "dropped", sequence, reason: "capacity" };
|
|
62
|
+
}
|
|
63
|
+
this.queue.push(Object.freeze({ sequence, event: this.snapshotEvent(event, sequence) }));
|
|
64
|
+
this.scheduleDrain();
|
|
65
|
+
return { kind: "admitted", sequence };
|
|
66
|
+
}
|
|
67
|
+
attachPort(port) {
|
|
68
|
+
this.detachPort();
|
|
69
|
+
this.port = port;
|
|
70
|
+
this.unsubscribePort = port.subscribe((message) => this.handleAcknowledgement(message));
|
|
71
|
+
if (this.inFlight) {
|
|
72
|
+
this.inFlight.awaitingAcknowledgement = false;
|
|
73
|
+
this.inFlight.retryReady = true;
|
|
74
|
+
this.inFlight.retryGeneration += 1;
|
|
75
|
+
}
|
|
76
|
+
this.scheduleDrain();
|
|
77
|
+
}
|
|
78
|
+
status() {
|
|
79
|
+
return Object.freeze({
|
|
80
|
+
state: this.state,
|
|
81
|
+
producerId: this.options.producerId,
|
|
82
|
+
nextSequence: this.nextSequence,
|
|
83
|
+
queuedEvents: this.queue.length,
|
|
84
|
+
inFlightBatchId: this.inFlight?.batch.batchId ?? null,
|
|
85
|
+
droppedCapacity: this.droppedCapacity,
|
|
86
|
+
droppedClosed: this.droppedClosed,
|
|
87
|
+
droppedRejected: this.droppedRejected,
|
|
88
|
+
droppedRetryExhausted: this.droppedRetryExhausted,
|
|
89
|
+
metadataTruncatedValues: this.metadataTruncatedValues,
|
|
90
|
+
metadataRedactedValues: this.metadataRedactedValues,
|
|
91
|
+
metadataSerializationFailures: this.metadataSerializationFailures,
|
|
92
|
+
committedBatches: this.committedBatches,
|
|
93
|
+
retryAttempts: this.retryAttempts
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
async flush(deadlineMs) {
|
|
97
|
+
this.scheduleDrain();
|
|
98
|
+
while (this.hasPendingEvents() && this.options.now() < deadlineMs) {
|
|
99
|
+
await this.options.delay(1);
|
|
100
|
+
this.scheduleDrain();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async close(deadlineMs) {
|
|
104
|
+
if (this.state === "stopped") {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
this.state = "draining";
|
|
108
|
+
await this.flush(deadlineMs);
|
|
109
|
+
const abandonedEvents = this.queue.length + (this.inFlight?.batch.events.length ?? 0);
|
|
110
|
+
this.droppedClosed += abandonedEvents;
|
|
111
|
+
this.queue.length = 0;
|
|
112
|
+
this.inFlight = null;
|
|
113
|
+
this.detachPort();
|
|
114
|
+
this.state = "stopped";
|
|
115
|
+
}
|
|
116
|
+
abandonRetryExhausted() {
|
|
117
|
+
if (!this.inFlight) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
this.droppedRetryExhausted += this.inFlight.batch.events.length;
|
|
121
|
+
this.inFlight = null;
|
|
122
|
+
this.scheduleDrain();
|
|
123
|
+
}
|
|
124
|
+
createInFlightBatch() {
|
|
125
|
+
if (this.inFlight || this.queue.length === 0 || !this.port) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const entries = this.queue.splice(0, this.options.maxBatchEvents);
|
|
129
|
+
const first = entries[0];
|
|
130
|
+
if (!first) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
this.inFlight = {
|
|
134
|
+
batch: this.contract.create(
|
|
135
|
+
this.options.producerId,
|
|
136
|
+
first.sequence,
|
|
137
|
+
entries.map((entry) => entry.event)
|
|
138
|
+
),
|
|
139
|
+
attempts: 0,
|
|
140
|
+
awaitingAcknowledgement: false,
|
|
141
|
+
retryReady: true,
|
|
142
|
+
retryGeneration: 0
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
detachPort() {
|
|
146
|
+
this.unsubscribePort?.();
|
|
147
|
+
this.unsubscribePort = null;
|
|
148
|
+
this.port?.close();
|
|
149
|
+
this.port = null;
|
|
150
|
+
}
|
|
151
|
+
drain() {
|
|
152
|
+
this.createInFlightBatch();
|
|
153
|
+
this.sendInFlightBatch();
|
|
154
|
+
}
|
|
155
|
+
handleAcknowledgement(message) {
|
|
156
|
+
const parsed = this.contract.parseAcknowledgement(message);
|
|
157
|
+
if (!parsed.ok || !this.inFlight) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const acknowledgement = parsed.acknowledgement;
|
|
161
|
+
if (acknowledgement.batchId !== this.inFlight.batch.batchId) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
this.inFlight.retryGeneration += 1;
|
|
165
|
+
this.inFlight.awaitingAcknowledgement = false;
|
|
166
|
+
if (acknowledgement.kind === "committed") {
|
|
167
|
+
if (acknowledgement.acceptedEvents !== this.inFlight.batch.events.length) {
|
|
168
|
+
this.scheduleRetry(0);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
this.committedBatches += 1;
|
|
172
|
+
this.inFlight = null;
|
|
173
|
+
this.scheduleDrain();
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (acknowledgement.kind === "rejected") {
|
|
177
|
+
this.droppedRejected += this.inFlight.batch.events.length;
|
|
178
|
+
this.inFlight = null;
|
|
179
|
+
this.scheduleDrain();
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
this.scheduleRetry(acknowledgement.retryAfterMs);
|
|
183
|
+
}
|
|
184
|
+
handleAcknowledgementTimeout(batchId, attempt) {
|
|
185
|
+
if (!this.inFlight || this.inFlight.batch.batchId !== batchId || this.inFlight.attempts !== attempt || !this.inFlight.awaitingAcknowledgement) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
this.inFlight.awaitingAcknowledgement = false;
|
|
189
|
+
this.scheduleRetry(this.retryDelay(attempt));
|
|
190
|
+
}
|
|
191
|
+
hasPendingEvents() {
|
|
192
|
+
return this.queue.length > 0 || this.inFlight !== null;
|
|
193
|
+
}
|
|
194
|
+
retryDelay(attempt) {
|
|
195
|
+
return this.options.retryBaseDelayMs * 2 ** Math.max(0, attempt - 1);
|
|
196
|
+
}
|
|
197
|
+
scheduleDrain() {
|
|
198
|
+
if (this.drainScheduled) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
this.drainScheduled = true;
|
|
202
|
+
this.options.schedule(() => {
|
|
203
|
+
this.drainScheduled = false;
|
|
204
|
+
this.drain();
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
scheduleRetry(requestedDelayMs) {
|
|
208
|
+
if (!this.inFlight) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (this.inFlight.attempts > this.options.retryLimit) {
|
|
212
|
+
this.abandonRetryExhausted();
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
this.inFlight.retryReady = false;
|
|
216
|
+
const generation = this.inFlight.retryGeneration + 1;
|
|
217
|
+
this.inFlight.retryGeneration = generation;
|
|
218
|
+
const delayMs = Math.max(requestedDelayMs, this.retryDelay(this.inFlight.attempts));
|
|
219
|
+
void this.options.delay(delayMs).then(() => {
|
|
220
|
+
if (!this.inFlight || this.inFlight.retryGeneration !== generation) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
this.inFlight.retryReady = true;
|
|
224
|
+
this.scheduleDrain();
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
sendInFlightBatch() {
|
|
228
|
+
const current = this.inFlight;
|
|
229
|
+
const port = this.port;
|
|
230
|
+
if (!current || !port || current.awaitingAcknowledgement || !current.retryReady) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
if (current.attempts > this.options.retryLimit) {
|
|
234
|
+
this.abandonRetryExhausted();
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
current.attempts += 1;
|
|
238
|
+
if (current.attempts > 1) {
|
|
239
|
+
this.retryAttempts += 1;
|
|
240
|
+
}
|
|
241
|
+
current.awaitingAcknowledgement = true;
|
|
242
|
+
current.retryReady = false;
|
|
243
|
+
const attempt = current.attempts;
|
|
244
|
+
try {
|
|
245
|
+
port.postMessage(current.batch);
|
|
246
|
+
} catch {
|
|
247
|
+
current.awaitingAcknowledgement = false;
|
|
248
|
+
this.detachPort();
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
void this.options.delay(this.options.acknowledgementTimeoutMs).then(() => {
|
|
252
|
+
this.handleAcknowledgementTimeout(current.batch.batchId, attempt);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
snapshotEvent(event, sequence) {
|
|
256
|
+
const snapshot = this.metadataSnapshotter.snapshot(event);
|
|
257
|
+
this.metadataTruncatedValues += snapshot.stats.truncatedValues;
|
|
258
|
+
this.metadataRedactedValues += snapshot.stats.redactedValues;
|
|
259
|
+
this.metadataSerializationFailures += snapshot.stats.serializationFailures;
|
|
260
|
+
const input = snapshot.metadata;
|
|
261
|
+
const occurredAt = new Date(this.options.now());
|
|
262
|
+
const timestamp = Number.isNaN(occurredAt.getTime()) ? (/* @__PURE__ */ new Date(0)).toISOString() : occurredAt.toISOString();
|
|
263
|
+
return Object.freeze({
|
|
264
|
+
source: this.snapshotString(input.source, "unknown"),
|
|
265
|
+
type: this.snapshotString(input.type, "unknown"),
|
|
266
|
+
level: this.snapshotString(input.level, "info"),
|
|
267
|
+
process: "renderer",
|
|
268
|
+
timestamp,
|
|
269
|
+
traceSeq: sequence + 1,
|
|
270
|
+
...this.snapshotOptionalString("message", input.message),
|
|
271
|
+
...this.snapshotConversationId(input.conversationId),
|
|
272
|
+
...this.snapshotPayload(input.payload),
|
|
273
|
+
...this.snapshotOptionalString("windowId", input.windowId),
|
|
274
|
+
...this.snapshotOptionalNumber("webContentsId", input.webContentsId),
|
|
275
|
+
...this.snapshotOptionalString("routeKey", input.routeKey),
|
|
276
|
+
...this.snapshotOptionalString("harnessId", input.harnessId)
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
snapshotConversationId(value) {
|
|
280
|
+
return typeof value === "string" || typeof value === "number" ? { conversationId: value } : {};
|
|
281
|
+
}
|
|
282
|
+
snapshotOptionalNumber(key, value) {
|
|
283
|
+
return typeof value === "number" && Number.isFinite(value) ? { [key]: value } : {};
|
|
284
|
+
}
|
|
285
|
+
snapshotOptionalString(key, value) {
|
|
286
|
+
return typeof value === "string" ? { [key]: value } : {};
|
|
287
|
+
}
|
|
288
|
+
snapshotPayload(value) {
|
|
289
|
+
if (value === void 0) {
|
|
290
|
+
return {};
|
|
291
|
+
}
|
|
292
|
+
const payload = this.isJsonObject(value) ? value : Object.freeze({ __telemetry: value });
|
|
293
|
+
return { payload };
|
|
294
|
+
}
|
|
295
|
+
snapshotString(value, fallback) {
|
|
296
|
+
return typeof value === "string" && value.trim().length > 0 ? value : fallback;
|
|
297
|
+
}
|
|
298
|
+
isJsonObject(value) {
|
|
299
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
300
|
+
}
|
|
301
|
+
validateOptions() {
|
|
302
|
+
const validCapacity = Number.isSafeInteger(this.options.maxQueuedEvents) && this.options.maxQueuedEvents > 0 && Number.isSafeInteger(this.options.maxBatchEvents) && this.options.maxBatchEvents > 0 && this.options.maxBatchEvents <= this.options.maxQueuedEvents;
|
|
303
|
+
const validRetry = Number.isSafeInteger(this.options.retryLimit) && this.options.retryLimit >= 0 && Number.isFinite(this.options.retryBaseDelayMs) && this.options.retryBaseDelayMs >= 0 && Number.isFinite(this.options.acknowledgementTimeoutMs) && this.options.acknowledgementTimeoutMs > 0;
|
|
304
|
+
if (!this.options.producerId.trim() || !validCapacity || !validRetry) {
|
|
305
|
+
throw new Error("Renderer trace batch transport options are invalid");
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
310
|
+
0 && (module.exports = {
|
|
311
|
+
RendererTraceBatchTransport
|
|
312
|
+
});
|
|
313
|
+
//# sourceMappingURL=renderer_trace_batch_transport.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tracing/renderer_trace_batch_transport.ts"],"sourcesContent":["import {\n BoundedMetadataSnapshotter,\n DEFAULT_METADATA_SNAPSHOT_LIMITS,\n type TelemetryJsonObject,\n type TelemetryJsonValue,\n} from '@noego/telemetry/core';\nimport { WoodTraceBatchContract } from './wood_trace_batch_contract.js';\nimport type {\n WoodRendererTraceEvent,\n WoodRendererTraceInput,\n WoodTraceBatch,\n WoodTraceBatchAdmissionResult,\n WoodTraceBatchPort,\n WoodTraceBatchTransportOptions,\n WoodTraceBatchTransportStatus,\n} from './types/wood_trace_batch.types.js';\n\ntype QueuedTraceEvent = Readonly<{\n sequence: number;\n event: WoodRendererTraceEvent;\n}>;\n\ntype InFlightTraceBatch = {\n batch: WoodTraceBatch;\n attempts: number;\n awaitingAcknowledgement: boolean;\n retryReady: boolean;\n retryGeneration: number;\n};\n\nexport class RendererTraceBatchTransport {\n private readonly contract = new WoodTraceBatchContract();\n private readonly metadataSnapshotter: BoundedMetadataSnapshotter;\n private readonly queue: QueuedTraceEvent[] = [];\n private state: 'accepting' | 'draining' | 'stopped' = 'accepting';\n private port: WoodTraceBatchPort | null = null;\n private unsubscribePort: (() => void) | null = null;\n private inFlight: InFlightTraceBatch | null = null;\n private nextSequence = 0;\n private drainScheduled = false;\n private droppedCapacity = 0;\n private droppedClosed = 0;\n private droppedRejected = 0;\n private droppedRetryExhausted = 0;\n private committedBatches = 0;\n private retryAttempts = 0;\n private metadataTruncatedValues = 0;\n private metadataRedactedValues = 0;\n private metadataSerializationFailures = 0;\n\n constructor(private readonly options: WoodTraceBatchTransportOptions) {\n this.validateOptions();\n this.metadataSnapshotter = new BoundedMetadataSnapshotter(\n options.metadataSnapshotLimits ?? DEFAULT_METADATA_SNAPSHOT_LIMITS,\n );\n }\n\n admit(event: WoodRendererTraceInput): WoodTraceBatchAdmissionResult {\n const sequence = this.nextSequence;\n this.nextSequence += 1;\n if (this.state !== 'accepting') {\n this.droppedClosed += 1;\n return { kind: 'dropped', sequence, reason: 'closed' };\n }\n\n const retainedEvents = this.queue.length + (this.inFlight?.batch.events.length ?? 0);\n if (retainedEvents >= this.options.maxQueuedEvents) {\n this.droppedCapacity += 1;\n return { kind: 'dropped', sequence, reason: 'capacity' };\n }\n\n this.queue.push(Object.freeze({ sequence, event: this.snapshotEvent(event, sequence) }));\n this.scheduleDrain();\n return { kind: 'admitted', sequence };\n }\n\n attachPort(port: WoodTraceBatchPort): void {\n this.detachPort();\n this.port = port;\n this.unsubscribePort = port.subscribe((message) => this.handleAcknowledgement(message));\n if (this.inFlight) {\n this.inFlight.awaitingAcknowledgement = false;\n this.inFlight.retryReady = true;\n this.inFlight.retryGeneration += 1;\n }\n this.scheduleDrain();\n }\n\n status(): WoodTraceBatchTransportStatus {\n return Object.freeze({\n state: this.state,\n producerId: this.options.producerId,\n nextSequence: this.nextSequence,\n queuedEvents: this.queue.length,\n inFlightBatchId: this.inFlight?.batch.batchId ?? null,\n droppedCapacity: this.droppedCapacity,\n droppedClosed: this.droppedClosed,\n droppedRejected: this.droppedRejected,\n droppedRetryExhausted: this.droppedRetryExhausted,\n metadataTruncatedValues: this.metadataTruncatedValues,\n metadataRedactedValues: this.metadataRedactedValues,\n metadataSerializationFailures: this.metadataSerializationFailures,\n committedBatches: this.committedBatches,\n retryAttempts: this.retryAttempts,\n });\n }\n\n async flush(deadlineMs: number): Promise<void> {\n this.scheduleDrain();\n while (this.hasPendingEvents() && this.options.now() < deadlineMs) {\n await this.options.delay(1);\n this.scheduleDrain();\n }\n }\n\n async close(deadlineMs: number): Promise<void> {\n if (this.state === 'stopped') {\n return;\n }\n this.state = 'draining';\n await this.flush(deadlineMs);\n const abandonedEvents = this.queue.length + (this.inFlight?.batch.events.length ?? 0);\n this.droppedClosed += abandonedEvents;\n this.queue.length = 0;\n this.inFlight = null;\n this.detachPort();\n this.state = 'stopped';\n }\n\n private abandonRetryExhausted(): void {\n if (!this.inFlight) {\n return;\n }\n this.droppedRetryExhausted += this.inFlight.batch.events.length;\n this.inFlight = null;\n this.scheduleDrain();\n }\n\n private createInFlightBatch(): void {\n if (this.inFlight || this.queue.length === 0 || !this.port) {\n return;\n }\n const entries = this.queue.splice(0, this.options.maxBatchEvents);\n const first = entries[0];\n if (!first) {\n return;\n }\n this.inFlight = {\n batch: this.contract.create(\n this.options.producerId,\n first.sequence,\n entries.map((entry) => entry.event),\n ),\n attempts: 0,\n awaitingAcknowledgement: false,\n retryReady: true,\n retryGeneration: 0,\n };\n }\n\n private detachPort(): void {\n this.unsubscribePort?.();\n this.unsubscribePort = null;\n this.port?.close();\n this.port = null;\n }\n\n private drain(): void {\n this.createInFlightBatch();\n this.sendInFlightBatch();\n }\n\n private handleAcknowledgement(message: unknown): void {\n const parsed = this.contract.parseAcknowledgement(message);\n if (!parsed.ok || !this.inFlight) {\n return;\n }\n const acknowledgement = parsed.acknowledgement;\n if (acknowledgement.batchId !== this.inFlight.batch.batchId) {\n return;\n }\n\n this.inFlight.retryGeneration += 1;\n this.inFlight.awaitingAcknowledgement = false;\n if (acknowledgement.kind === 'committed') {\n if (acknowledgement.acceptedEvents !== this.inFlight.batch.events.length) {\n this.scheduleRetry(0);\n return;\n }\n this.committedBatches += 1;\n this.inFlight = null;\n this.scheduleDrain();\n return;\n }\n if (acknowledgement.kind === 'rejected') {\n this.droppedRejected += this.inFlight.batch.events.length;\n this.inFlight = null;\n this.scheduleDrain();\n return;\n }\n this.scheduleRetry(acknowledgement.retryAfterMs);\n }\n\n private handleAcknowledgementTimeout(batchId: string, attempt: number): void {\n if (!this.inFlight\n || this.inFlight.batch.batchId !== batchId\n || this.inFlight.attempts !== attempt\n || !this.inFlight.awaitingAcknowledgement) {\n return;\n }\n this.inFlight.awaitingAcknowledgement = false;\n this.scheduleRetry(this.retryDelay(attempt));\n }\n\n private hasPendingEvents(): boolean {\n return this.queue.length > 0 || this.inFlight !== null;\n }\n\n private retryDelay(attempt: number): number {\n return this.options.retryBaseDelayMs * (2 ** Math.max(0, attempt - 1));\n }\n\n private scheduleDrain(): void {\n if (this.drainScheduled) {\n return;\n }\n this.drainScheduled = true;\n this.options.schedule(() => {\n this.drainScheduled = false;\n this.drain();\n });\n }\n\n private scheduleRetry(requestedDelayMs: number): void {\n if (!this.inFlight) {\n return;\n }\n if (this.inFlight.attempts > this.options.retryLimit) {\n this.abandonRetryExhausted();\n return;\n }\n\n this.inFlight.retryReady = false;\n const generation = this.inFlight.retryGeneration + 1;\n this.inFlight.retryGeneration = generation;\n const delayMs = Math.max(requestedDelayMs, this.retryDelay(this.inFlight.attempts));\n void this.options.delay(delayMs).then(() => {\n if (!this.inFlight || this.inFlight.retryGeneration !== generation) {\n return;\n }\n this.inFlight.retryReady = true;\n this.scheduleDrain();\n });\n }\n\n private sendInFlightBatch(): void {\n const current = this.inFlight;\n const port = this.port;\n if (!current || !port || current.awaitingAcknowledgement || !current.retryReady) {\n return;\n }\n if (current.attempts > this.options.retryLimit) {\n this.abandonRetryExhausted();\n return;\n }\n\n current.attempts += 1;\n if (current.attempts > 1) {\n this.retryAttempts += 1;\n }\n current.awaitingAcknowledgement = true;\n current.retryReady = false;\n const attempt = current.attempts;\n try {\n port.postMessage(current.batch);\n } catch {\n current.awaitingAcknowledgement = false;\n this.detachPort();\n return;\n }\n\n void this.options.delay(this.options.acknowledgementTimeoutMs).then(() => {\n this.handleAcknowledgementTimeout(current.batch.batchId, attempt);\n });\n }\n\n private snapshotEvent(\n event: WoodRendererTraceInput,\n sequence: number,\n ): WoodRendererTraceEvent {\n const snapshot = this.metadataSnapshotter.snapshot(event);\n this.metadataTruncatedValues += snapshot.stats.truncatedValues;\n this.metadataRedactedValues += snapshot.stats.redactedValues;\n this.metadataSerializationFailures += snapshot.stats.serializationFailures;\n const input = snapshot.metadata;\n const occurredAt = new Date(this.options.now());\n const timestamp = Number.isNaN(occurredAt.getTime())\n ? new Date(0).toISOString()\n : occurredAt.toISOString();\n return Object.freeze({\n source: this.snapshotString(input.source, 'unknown'),\n type: this.snapshotString(input.type, 'unknown'),\n level: this.snapshotString(input.level, 'info'),\n process: 'renderer',\n timestamp,\n traceSeq: sequence + 1,\n ...this.snapshotOptionalString('message', input.message),\n ...this.snapshotConversationId(input.conversationId),\n ...this.snapshotPayload(input.payload),\n ...this.snapshotOptionalString('windowId', input.windowId),\n ...this.snapshotOptionalNumber('webContentsId', input.webContentsId),\n ...this.snapshotOptionalString('routeKey', input.routeKey),\n ...this.snapshotOptionalString('harnessId', input.harnessId),\n });\n }\n\n private snapshotConversationId(\n value: TelemetryJsonValue | undefined,\n ): Pick<WoodRendererTraceEvent, 'conversationId'> | Record<string, never> {\n return typeof value === 'string' || typeof value === 'number'\n ? { conversationId: value }\n : {};\n }\n\n private snapshotOptionalNumber<Key extends 'webContentsId'>(\n key: Key,\n value: TelemetryJsonValue | undefined,\n ): Partial<Pick<WoodRendererTraceEvent, Key>> {\n return typeof value === 'number' && Number.isFinite(value)\n ? { [key]: value } as Pick<WoodRendererTraceEvent, Key>\n : {};\n }\n\n private snapshotOptionalString<Key extends 'message' | 'windowId' | 'routeKey' | 'harnessId'>(\n key: Key,\n value: TelemetryJsonValue | undefined,\n ): Partial<Pick<WoodRendererTraceEvent, Key>> {\n return typeof value === 'string'\n ? { [key]: value } as Pick<WoodRendererTraceEvent, Key>\n : {};\n }\n\n private snapshotPayload(\n value: TelemetryJsonValue | undefined,\n ): Pick<WoodRendererTraceEvent, 'payload'> | Record<string, never> {\n if (value === undefined) {\n return {};\n }\n const payload: TelemetryJsonObject = this.isJsonObject(value)\n ? value\n : Object.freeze({ __telemetry: value });\n return { payload };\n }\n\n private snapshotString(value: TelemetryJsonValue | undefined, fallback: string): string {\n return typeof value === 'string' && value.trim().length > 0 ? value : fallback;\n }\n\n private isJsonObject(value: TelemetryJsonValue): value is TelemetryJsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n private validateOptions(): void {\n const validCapacity = Number.isSafeInteger(this.options.maxQueuedEvents)\n && this.options.maxQueuedEvents > 0\n && Number.isSafeInteger(this.options.maxBatchEvents)\n && this.options.maxBatchEvents > 0\n && this.options.maxBatchEvents <= this.options.maxQueuedEvents;\n const validRetry = Number.isSafeInteger(this.options.retryLimit)\n && this.options.retryLimit >= 0\n && Number.isFinite(this.options.retryBaseDelayMs)\n && this.options.retryBaseDelayMs >= 0\n && Number.isFinite(this.options.acknowledgementTimeoutMs)\n && this.options.acknowledgementTimeoutMs > 0;\n if (!this.options.producerId.trim() || !validCapacity || !validRetry) {\n throw new Error('Renderer trace batch transport options are invalid');\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { WoodTraceBatchTransportOptions, WoodRendererTraceInput, WoodTraceBatchAdmissionResult, WoodTraceBatchPort, WoodTraceBatchTransportStatus } from './types/wood_trace_batch.types.cjs';
|
|
2
|
+
import '@noego/telemetry/core';
|
|
3
|
+
import '../trace_hub-Cob54qRx.cjs';
|
|
4
|
+
import 'rxjs';
|
|
5
|
+
|
|
6
|
+
declare class RendererTraceBatchTransport {
|
|
7
|
+
private readonly options;
|
|
8
|
+
private readonly contract;
|
|
9
|
+
private readonly metadataSnapshotter;
|
|
10
|
+
private readonly queue;
|
|
11
|
+
private state;
|
|
12
|
+
private port;
|
|
13
|
+
private unsubscribePort;
|
|
14
|
+
private inFlight;
|
|
15
|
+
private nextSequence;
|
|
16
|
+
private drainScheduled;
|
|
17
|
+
private droppedCapacity;
|
|
18
|
+
private droppedClosed;
|
|
19
|
+
private droppedRejected;
|
|
20
|
+
private droppedRetryExhausted;
|
|
21
|
+
private committedBatches;
|
|
22
|
+
private retryAttempts;
|
|
23
|
+
private metadataTruncatedValues;
|
|
24
|
+
private metadataRedactedValues;
|
|
25
|
+
private metadataSerializationFailures;
|
|
26
|
+
constructor(options: WoodTraceBatchTransportOptions);
|
|
27
|
+
admit(event: WoodRendererTraceInput): WoodTraceBatchAdmissionResult;
|
|
28
|
+
attachPort(port: WoodTraceBatchPort): void;
|
|
29
|
+
status(): WoodTraceBatchTransportStatus;
|
|
30
|
+
flush(deadlineMs: number): Promise<void>;
|
|
31
|
+
close(deadlineMs: number): Promise<void>;
|
|
32
|
+
private abandonRetryExhausted;
|
|
33
|
+
private createInFlightBatch;
|
|
34
|
+
private detachPort;
|
|
35
|
+
private drain;
|
|
36
|
+
private handleAcknowledgement;
|
|
37
|
+
private handleAcknowledgementTimeout;
|
|
38
|
+
private hasPendingEvents;
|
|
39
|
+
private retryDelay;
|
|
40
|
+
private scheduleDrain;
|
|
41
|
+
private scheduleRetry;
|
|
42
|
+
private sendInFlightBatch;
|
|
43
|
+
private snapshotEvent;
|
|
44
|
+
private snapshotConversationId;
|
|
45
|
+
private snapshotOptionalNumber;
|
|
46
|
+
private snapshotOptionalString;
|
|
47
|
+
private snapshotPayload;
|
|
48
|
+
private snapshotString;
|
|
49
|
+
private isJsonObject;
|
|
50
|
+
private validateOptions;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export { RendererTraceBatchTransport };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { WoodTraceBatchTransportOptions, WoodRendererTraceInput, WoodTraceBatchAdmissionResult, WoodTraceBatchPort, WoodTraceBatchTransportStatus } from './types/wood_trace_batch.types.js';
|
|
2
|
+
import '@noego/telemetry/core';
|
|
3
|
+
import '../trace_hub-Cob54qRx.js';
|
|
4
|
+
import 'rxjs';
|
|
5
|
+
|
|
6
|
+
declare class RendererTraceBatchTransport {
|
|
7
|
+
private readonly options;
|
|
8
|
+
private readonly contract;
|
|
9
|
+
private readonly metadataSnapshotter;
|
|
10
|
+
private readonly queue;
|
|
11
|
+
private state;
|
|
12
|
+
private port;
|
|
13
|
+
private unsubscribePort;
|
|
14
|
+
private inFlight;
|
|
15
|
+
private nextSequence;
|
|
16
|
+
private drainScheduled;
|
|
17
|
+
private droppedCapacity;
|
|
18
|
+
private droppedClosed;
|
|
19
|
+
private droppedRejected;
|
|
20
|
+
private droppedRetryExhausted;
|
|
21
|
+
private committedBatches;
|
|
22
|
+
private retryAttempts;
|
|
23
|
+
private metadataTruncatedValues;
|
|
24
|
+
private metadataRedactedValues;
|
|
25
|
+
private metadataSerializationFailures;
|
|
26
|
+
constructor(options: WoodTraceBatchTransportOptions);
|
|
27
|
+
admit(event: WoodRendererTraceInput): WoodTraceBatchAdmissionResult;
|
|
28
|
+
attachPort(port: WoodTraceBatchPort): void;
|
|
29
|
+
status(): WoodTraceBatchTransportStatus;
|
|
30
|
+
flush(deadlineMs: number): Promise<void>;
|
|
31
|
+
close(deadlineMs: number): Promise<void>;
|
|
32
|
+
private abandonRetryExhausted;
|
|
33
|
+
private createInFlightBatch;
|
|
34
|
+
private detachPort;
|
|
35
|
+
private drain;
|
|
36
|
+
private handleAcknowledgement;
|
|
37
|
+
private handleAcknowledgementTimeout;
|
|
38
|
+
private hasPendingEvents;
|
|
39
|
+
private retryDelay;
|
|
40
|
+
private scheduleDrain;
|
|
41
|
+
private scheduleRetry;
|
|
42
|
+
private sendInFlightBatch;
|
|
43
|
+
private snapshotEvent;
|
|
44
|
+
private snapshotConversationId;
|
|
45
|
+
private snapshotOptionalNumber;
|
|
46
|
+
private snapshotOptionalString;
|
|
47
|
+
private snapshotPayload;
|
|
48
|
+
private snapshotString;
|
|
49
|
+
private isJsonObject;
|
|
50
|
+
private validateOptions;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export { RendererTraceBatchTransport };
|