@noego/wood 0.4.6 → 0.4.7
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 +22 -3
- package/src/components/NavigationShell.browser.test.ts +236 -0
- package/src/components/NavigationShell.svelte +162 -49
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { MetadataSnapshotLimits } from '@noego/telemetry/core';
|
|
2
|
+
import { a as TraceEvent, b as TraceInput, c as TraceLevel } from '../../trace_hub-Cob54qRx.cjs';
|
|
3
|
+
import 'rxjs';
|
|
4
|
+
|
|
5
|
+
type WoodRendererTraceInput = Readonly<Omit<TraceInput, 'payload'> & {
|
|
6
|
+
readonly level: TraceLevel;
|
|
7
|
+
readonly payload?: Readonly<Record<string, unknown>>;
|
|
8
|
+
}>;
|
|
9
|
+
type WoodRendererTraceEvent = Readonly<Omit<TraceEvent, 'payload'> & {
|
|
10
|
+
readonly payload?: Readonly<Record<string, unknown>>;
|
|
11
|
+
}>;
|
|
12
|
+
type WoodTraceBatch = Readonly<{
|
|
13
|
+
kind: 'wood.trace.batch';
|
|
14
|
+
protocolVersion: 1;
|
|
15
|
+
producerId: string;
|
|
16
|
+
batchId: string;
|
|
17
|
+
sequenceStart: number;
|
|
18
|
+
sequenceEnd: number;
|
|
19
|
+
events: readonly WoodRendererTraceEvent[];
|
|
20
|
+
}>;
|
|
21
|
+
type WoodTraceBatchAcknowledgement =
|
|
22
|
+
/** The injected receiver's durable terminal committed every event. */
|
|
23
|
+
Readonly<{
|
|
24
|
+
kind: 'committed';
|
|
25
|
+
batchId: string;
|
|
26
|
+
committedAtMs: number;
|
|
27
|
+
acceptedEvents: number;
|
|
28
|
+
}> | Readonly<{
|
|
29
|
+
kind: 'retryable';
|
|
30
|
+
batchId: string;
|
|
31
|
+
reason: string;
|
|
32
|
+
retryAfterMs: number;
|
|
33
|
+
}> | Readonly<{
|
|
34
|
+
kind: 'rejected';
|
|
35
|
+
batchId: string;
|
|
36
|
+
reason: string;
|
|
37
|
+
}>;
|
|
38
|
+
type WoodTraceBatchRuntimeContext = Readonly<{
|
|
39
|
+
windowId?: string;
|
|
40
|
+
webContentsId?: number;
|
|
41
|
+
routeKey?: string;
|
|
42
|
+
harnessId?: string;
|
|
43
|
+
}>;
|
|
44
|
+
type WoodTraceBatchReceiver = (batch: WoodTraceBatch, context: WoodTraceBatchRuntimeContext) => Promise<WoodTraceBatchAcknowledgement>;
|
|
45
|
+
type WoodTraceBatchAdmissionResult = Readonly<{
|
|
46
|
+
kind: 'admitted';
|
|
47
|
+
sequence: number;
|
|
48
|
+
}> | Readonly<{
|
|
49
|
+
kind: 'dropped';
|
|
50
|
+
sequence: number;
|
|
51
|
+
reason: 'capacity' | 'closed';
|
|
52
|
+
}>;
|
|
53
|
+
type WoodTraceBatchTransportStatus = Readonly<{
|
|
54
|
+
state: 'accepting' | 'draining' | 'stopped';
|
|
55
|
+
producerId: string;
|
|
56
|
+
nextSequence: number;
|
|
57
|
+
queuedEvents: number;
|
|
58
|
+
inFlightBatchId: string | null;
|
|
59
|
+
droppedCapacity: number;
|
|
60
|
+
droppedClosed: number;
|
|
61
|
+
droppedRejected: number;
|
|
62
|
+
droppedRetryExhausted: number;
|
|
63
|
+
metadataTruncatedValues: number;
|
|
64
|
+
metadataRedactedValues: number;
|
|
65
|
+
metadataSerializationFailures: number;
|
|
66
|
+
committedBatches: number;
|
|
67
|
+
retryAttempts: number;
|
|
68
|
+
}>;
|
|
69
|
+
interface WoodTraceBatchPort {
|
|
70
|
+
postMessage(batch: WoodTraceBatch): void;
|
|
71
|
+
subscribe(listener: (message: unknown) => void): () => void;
|
|
72
|
+
close(): void;
|
|
73
|
+
}
|
|
74
|
+
type WoodTraceBatchTransportOptions = Readonly<{
|
|
75
|
+
producerId: string;
|
|
76
|
+
maxQueuedEvents: number;
|
|
77
|
+
maxBatchEvents: number;
|
|
78
|
+
acknowledgementTimeoutMs: number;
|
|
79
|
+
retryLimit: number;
|
|
80
|
+
retryBaseDelayMs: number;
|
|
81
|
+
now: () => number;
|
|
82
|
+
schedule: (work: () => void) => void;
|
|
83
|
+
delay: (durationMs: number) => Promise<void>;
|
|
84
|
+
metadataSnapshotLimits?: MetadataSnapshotLimits;
|
|
85
|
+
}>;
|
|
86
|
+
type WoodTraceBatchParseResult = Readonly<{
|
|
87
|
+
kind: 'not-batch';
|
|
88
|
+
}> | Readonly<{
|
|
89
|
+
kind: 'invalid';
|
|
90
|
+
batchId: string | null;
|
|
91
|
+
reason: string;
|
|
92
|
+
}> | Readonly<{
|
|
93
|
+
kind: 'valid';
|
|
94
|
+
batch: WoodTraceBatch;
|
|
95
|
+
}>;
|
|
96
|
+
type WoodTraceAcknowledgementParseResult = Readonly<{
|
|
97
|
+
ok: true;
|
|
98
|
+
acknowledgement: WoodTraceBatchAcknowledgement;
|
|
99
|
+
}> | Readonly<{
|
|
100
|
+
ok: false;
|
|
101
|
+
reason: string;
|
|
102
|
+
}>;
|
|
103
|
+
type WoodTraceEventParseResult = Readonly<{
|
|
104
|
+
kind: 'valid';
|
|
105
|
+
event: WoodRendererTraceEvent;
|
|
106
|
+
}> | Readonly<{
|
|
107
|
+
kind: 'invalid';
|
|
108
|
+
reason: string;
|
|
109
|
+
}>;
|
|
110
|
+
type WoodTraceEventsParseResult = Readonly<{
|
|
111
|
+
kind: 'valid';
|
|
112
|
+
events: readonly WoodRendererTraceEvent[];
|
|
113
|
+
}> | Readonly<{
|
|
114
|
+
kind: 'invalid';
|
|
115
|
+
reason: string;
|
|
116
|
+
}>;
|
|
117
|
+
type WoodTraceIdentityValidationResult = Readonly<{
|
|
118
|
+
kind: 'valid';
|
|
119
|
+
}> | Readonly<{
|
|
120
|
+
kind: 'invalid';
|
|
121
|
+
reason: string;
|
|
122
|
+
}>;
|
|
123
|
+
|
|
124
|
+
export type { WoodRendererTraceEvent, WoodRendererTraceInput, WoodTraceAcknowledgementParseResult, WoodTraceBatch, WoodTraceBatchAcknowledgement, WoodTraceBatchAdmissionResult, WoodTraceBatchParseResult, WoodTraceBatchPort, WoodTraceBatchReceiver, WoodTraceBatchRuntimeContext, WoodTraceBatchTransportOptions, WoodTraceBatchTransportStatus, WoodTraceEventParseResult, WoodTraceEventsParseResult, WoodTraceIdentityValidationResult };
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { MetadataSnapshotLimits } from '@noego/telemetry/core';
|
|
2
|
+
import { a as TraceEvent, b as TraceInput, c as TraceLevel } from '../../trace_hub-Cob54qRx.js';
|
|
3
|
+
import 'rxjs';
|
|
4
|
+
|
|
5
|
+
type WoodRendererTraceInput = Readonly<Omit<TraceInput, 'payload'> & {
|
|
6
|
+
readonly level: TraceLevel;
|
|
7
|
+
readonly payload?: Readonly<Record<string, unknown>>;
|
|
8
|
+
}>;
|
|
9
|
+
type WoodRendererTraceEvent = Readonly<Omit<TraceEvent, 'payload'> & {
|
|
10
|
+
readonly payload?: Readonly<Record<string, unknown>>;
|
|
11
|
+
}>;
|
|
12
|
+
type WoodTraceBatch = Readonly<{
|
|
13
|
+
kind: 'wood.trace.batch';
|
|
14
|
+
protocolVersion: 1;
|
|
15
|
+
producerId: string;
|
|
16
|
+
batchId: string;
|
|
17
|
+
sequenceStart: number;
|
|
18
|
+
sequenceEnd: number;
|
|
19
|
+
events: readonly WoodRendererTraceEvent[];
|
|
20
|
+
}>;
|
|
21
|
+
type WoodTraceBatchAcknowledgement =
|
|
22
|
+
/** The injected receiver's durable terminal committed every event. */
|
|
23
|
+
Readonly<{
|
|
24
|
+
kind: 'committed';
|
|
25
|
+
batchId: string;
|
|
26
|
+
committedAtMs: number;
|
|
27
|
+
acceptedEvents: number;
|
|
28
|
+
}> | Readonly<{
|
|
29
|
+
kind: 'retryable';
|
|
30
|
+
batchId: string;
|
|
31
|
+
reason: string;
|
|
32
|
+
retryAfterMs: number;
|
|
33
|
+
}> | Readonly<{
|
|
34
|
+
kind: 'rejected';
|
|
35
|
+
batchId: string;
|
|
36
|
+
reason: string;
|
|
37
|
+
}>;
|
|
38
|
+
type WoodTraceBatchRuntimeContext = Readonly<{
|
|
39
|
+
windowId?: string;
|
|
40
|
+
webContentsId?: number;
|
|
41
|
+
routeKey?: string;
|
|
42
|
+
harnessId?: string;
|
|
43
|
+
}>;
|
|
44
|
+
type WoodTraceBatchReceiver = (batch: WoodTraceBatch, context: WoodTraceBatchRuntimeContext) => Promise<WoodTraceBatchAcknowledgement>;
|
|
45
|
+
type WoodTraceBatchAdmissionResult = Readonly<{
|
|
46
|
+
kind: 'admitted';
|
|
47
|
+
sequence: number;
|
|
48
|
+
}> | Readonly<{
|
|
49
|
+
kind: 'dropped';
|
|
50
|
+
sequence: number;
|
|
51
|
+
reason: 'capacity' | 'closed';
|
|
52
|
+
}>;
|
|
53
|
+
type WoodTraceBatchTransportStatus = Readonly<{
|
|
54
|
+
state: 'accepting' | 'draining' | 'stopped';
|
|
55
|
+
producerId: string;
|
|
56
|
+
nextSequence: number;
|
|
57
|
+
queuedEvents: number;
|
|
58
|
+
inFlightBatchId: string | null;
|
|
59
|
+
droppedCapacity: number;
|
|
60
|
+
droppedClosed: number;
|
|
61
|
+
droppedRejected: number;
|
|
62
|
+
droppedRetryExhausted: number;
|
|
63
|
+
metadataTruncatedValues: number;
|
|
64
|
+
metadataRedactedValues: number;
|
|
65
|
+
metadataSerializationFailures: number;
|
|
66
|
+
committedBatches: number;
|
|
67
|
+
retryAttempts: number;
|
|
68
|
+
}>;
|
|
69
|
+
interface WoodTraceBatchPort {
|
|
70
|
+
postMessage(batch: WoodTraceBatch): void;
|
|
71
|
+
subscribe(listener: (message: unknown) => void): () => void;
|
|
72
|
+
close(): void;
|
|
73
|
+
}
|
|
74
|
+
type WoodTraceBatchTransportOptions = Readonly<{
|
|
75
|
+
producerId: string;
|
|
76
|
+
maxQueuedEvents: number;
|
|
77
|
+
maxBatchEvents: number;
|
|
78
|
+
acknowledgementTimeoutMs: number;
|
|
79
|
+
retryLimit: number;
|
|
80
|
+
retryBaseDelayMs: number;
|
|
81
|
+
now: () => number;
|
|
82
|
+
schedule: (work: () => void) => void;
|
|
83
|
+
delay: (durationMs: number) => Promise<void>;
|
|
84
|
+
metadataSnapshotLimits?: MetadataSnapshotLimits;
|
|
85
|
+
}>;
|
|
86
|
+
type WoodTraceBatchParseResult = Readonly<{
|
|
87
|
+
kind: 'not-batch';
|
|
88
|
+
}> | Readonly<{
|
|
89
|
+
kind: 'invalid';
|
|
90
|
+
batchId: string | null;
|
|
91
|
+
reason: string;
|
|
92
|
+
}> | Readonly<{
|
|
93
|
+
kind: 'valid';
|
|
94
|
+
batch: WoodTraceBatch;
|
|
95
|
+
}>;
|
|
96
|
+
type WoodTraceAcknowledgementParseResult = Readonly<{
|
|
97
|
+
ok: true;
|
|
98
|
+
acknowledgement: WoodTraceBatchAcknowledgement;
|
|
99
|
+
}> | Readonly<{
|
|
100
|
+
ok: false;
|
|
101
|
+
reason: string;
|
|
102
|
+
}>;
|
|
103
|
+
type WoodTraceEventParseResult = Readonly<{
|
|
104
|
+
kind: 'valid';
|
|
105
|
+
event: WoodRendererTraceEvent;
|
|
106
|
+
}> | Readonly<{
|
|
107
|
+
kind: 'invalid';
|
|
108
|
+
reason: string;
|
|
109
|
+
}>;
|
|
110
|
+
type WoodTraceEventsParseResult = Readonly<{
|
|
111
|
+
kind: 'valid';
|
|
112
|
+
events: readonly WoodRendererTraceEvent[];
|
|
113
|
+
}> | Readonly<{
|
|
114
|
+
kind: 'invalid';
|
|
115
|
+
reason: string;
|
|
116
|
+
}>;
|
|
117
|
+
type WoodTraceIdentityValidationResult = Readonly<{
|
|
118
|
+
kind: 'valid';
|
|
119
|
+
}> | Readonly<{
|
|
120
|
+
kind: 'invalid';
|
|
121
|
+
reason: string;
|
|
122
|
+
}>;
|
|
123
|
+
|
|
124
|
+
export type { WoodRendererTraceEvent, WoodRendererTraceInput, WoodTraceAcknowledgementParseResult, WoodTraceBatch, WoodTraceBatchAcknowledgement, WoodTraceBatchAdmissionResult, WoodTraceBatchParseResult, WoodTraceBatchPort, WoodTraceBatchReceiver, WoodTraceBatchRuntimeContext, WoodTraceBatchTransportOptions, WoodTraceBatchTransportStatus, WoodTraceEventParseResult, WoodTraceEventsParseResult, WoodTraceIdentityValidationResult };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=wood_trace_batch.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
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 __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var wood_trace_sink_types_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(wood_trace_sink_types_exports);
|
|
17
|
+
//# sourceMappingURL=wood_trace_sink.types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tracing/types/wood_trace_sink.types.ts"],"sourcesContent":["import type { TraceEvent } from '../trace_hub.js';\n\n/** A caller-independent, shallow immutable Wood trace event. */\nexport type WoodTraceEventSnapshot = Readonly<\n Omit<TraceEvent, 'payload'> & {\n readonly payload?: Readonly<Record<string, unknown>>;\n }\n>;\n\nexport type WoodTraceEventSink = (event: WoodTraceEventSnapshot) => void;\nexport type WoodTraceSinkDisposer = () => void;\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=wood_trace_sink.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,229 @@
|
|
|
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 wood_trace_batch_contract_exports = {};
|
|
20
|
+
__export(wood_trace_batch_contract_exports, {
|
|
21
|
+
WoodTraceBatchContract: () => WoodTraceBatchContract
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(wood_trace_batch_contract_exports);
|
|
24
|
+
const MAX_BATCH_EVENTS = 256;
|
|
25
|
+
class WoodTraceBatchContract {
|
|
26
|
+
create(producerId, sequenceStart, events) {
|
|
27
|
+
const snapshots = events.map((event) => this.snapshotEvent(event));
|
|
28
|
+
const last = snapshots[snapshots.length - 1];
|
|
29
|
+
const sequenceEnd = last ? last.traceSeq - 1 : sequenceStart - 1;
|
|
30
|
+
return Object.freeze({
|
|
31
|
+
kind: "wood.trace.batch",
|
|
32
|
+
protocolVersion: 1,
|
|
33
|
+
producerId,
|
|
34
|
+
batchId: `wtb1:${producerId}:${sequenceStart}-${sequenceEnd}`,
|
|
35
|
+
sequenceStart,
|
|
36
|
+
sequenceEnd,
|
|
37
|
+
events: Object.freeze(snapshots)
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
parse(input) {
|
|
41
|
+
if (!this.isRecord(input) || input.kind !== "wood.trace.batch") {
|
|
42
|
+
return { kind: "not-batch" };
|
|
43
|
+
}
|
|
44
|
+
const batchId = typeof input.batchId === "string" ? input.batchId : null;
|
|
45
|
+
const identity = this.validateIdentity(input);
|
|
46
|
+
if (identity.kind === "invalid") {
|
|
47
|
+
return { kind: "invalid", batchId, reason: identity.reason };
|
|
48
|
+
}
|
|
49
|
+
const producerId = input.producerId;
|
|
50
|
+
if (typeof producerId !== "string") {
|
|
51
|
+
return { kind: "invalid", batchId, reason: "Trace batch producer identity is invalid" };
|
|
52
|
+
}
|
|
53
|
+
const parsedEvents = this.parseEvents(input.events);
|
|
54
|
+
if (parsedEvents.kind === "invalid") {
|
|
55
|
+
return { kind: "invalid", batchId, reason: parsedEvents.reason };
|
|
56
|
+
}
|
|
57
|
+
const events = parsedEvents.events;
|
|
58
|
+
const parsedSequenceRange = this.parseSequenceRange(input, events);
|
|
59
|
+
if (parsedSequenceRange.kind === "invalid") {
|
|
60
|
+
return { kind: "invalid", batchId, reason: parsedSequenceRange.reason };
|
|
61
|
+
}
|
|
62
|
+
const { sequenceStart, sequenceEnd } = parsedSequenceRange;
|
|
63
|
+
const hasTraceSequenceMismatch = events.some((event, index) => {
|
|
64
|
+
const previous = events[index - 1];
|
|
65
|
+
return previous !== void 0 && event.traceSeq <= previous.traceSeq;
|
|
66
|
+
});
|
|
67
|
+
if (hasTraceSequenceMismatch) {
|
|
68
|
+
return { kind: "invalid", batchId, reason: "Trace event sequences are not strictly increasing" };
|
|
69
|
+
}
|
|
70
|
+
const expectedBatchId = `wtb1:${producerId}:${sequenceStart}-${sequenceEnd}`;
|
|
71
|
+
if (input.batchId !== expectedBatchId) {
|
|
72
|
+
return { kind: "invalid", batchId, reason: "Trace batch identity does not match its sequence range" };
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
kind: "valid",
|
|
76
|
+
batch: this.create(producerId, sequenceStart, events)
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
parseAcknowledgement(input) {
|
|
80
|
+
if (!this.isRecord(input) || typeof input.kind !== "string" || typeof input.batchId !== "string") {
|
|
81
|
+
return { ok: false, reason: "Trace batch acknowledgement framing is invalid" };
|
|
82
|
+
}
|
|
83
|
+
if (input.kind === "committed") {
|
|
84
|
+
return this.parseCommittedAcknowledgement(input);
|
|
85
|
+
}
|
|
86
|
+
if (input.kind === "retryable") {
|
|
87
|
+
return this.parseRetryableAcknowledgement(input);
|
|
88
|
+
}
|
|
89
|
+
if (input.kind === "rejected" && typeof input.reason === "string") {
|
|
90
|
+
return {
|
|
91
|
+
ok: true,
|
|
92
|
+
acknowledgement: Object.freeze({
|
|
93
|
+
kind: "rejected",
|
|
94
|
+
batchId: input.batchId,
|
|
95
|
+
reason: input.reason
|
|
96
|
+
})
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return { ok: false, reason: "Trace batch acknowledgement kind is invalid" };
|
|
100
|
+
}
|
|
101
|
+
parseCommittedAcknowledgement(input) {
|
|
102
|
+
const batchId = input.batchId;
|
|
103
|
+
const committedAtMs = input.committedAtMs;
|
|
104
|
+
const acceptedEvents = input.acceptedEvents;
|
|
105
|
+
const validNumbers = typeof batchId === "string" && typeof committedAtMs === "number" && Number.isFinite(committedAtMs) && typeof acceptedEvents === "number" && Number.isSafeInteger(acceptedEvents) && acceptedEvents >= 0;
|
|
106
|
+
if (!validNumbers) {
|
|
107
|
+
return { ok: false, reason: "Committed trace acknowledgement is invalid" };
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
ok: true,
|
|
111
|
+
acknowledgement: Object.freeze({
|
|
112
|
+
kind: "committed",
|
|
113
|
+
batchId,
|
|
114
|
+
committedAtMs,
|
|
115
|
+
acceptedEvents
|
|
116
|
+
})
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
parseRetryableAcknowledgement(input) {
|
|
120
|
+
const batchId = input.batchId;
|
|
121
|
+
const retryAfterMs = input.retryAfterMs;
|
|
122
|
+
if (typeof batchId !== "string" || typeof input.reason !== "string" || typeof retryAfterMs !== "number" || !Number.isFinite(retryAfterMs) || retryAfterMs < 0) {
|
|
123
|
+
return { ok: false, reason: "Retryable trace acknowledgement is invalid" };
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
ok: true,
|
|
127
|
+
acknowledgement: Object.freeze({
|
|
128
|
+
kind: "retryable",
|
|
129
|
+
batchId,
|
|
130
|
+
reason: input.reason,
|
|
131
|
+
retryAfterMs
|
|
132
|
+
})
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
parseEvent(input) {
|
|
136
|
+
if (!this.isRecord(input)) {
|
|
137
|
+
return { kind: "invalid", reason: "Trace event is not an object" };
|
|
138
|
+
}
|
|
139
|
+
const hasValidIdentity = this.hasValidEventIdentity(input);
|
|
140
|
+
const hasValidTiming = this.hasValidEventTiming(input);
|
|
141
|
+
if (!hasValidIdentity || !hasValidTiming) {
|
|
142
|
+
return { kind: "invalid", reason: "Trace event identity or timing is invalid" };
|
|
143
|
+
}
|
|
144
|
+
if (input.payload !== void 0 && !this.isRecord(input.payload)) {
|
|
145
|
+
return { kind: "invalid", reason: "Trace event payload is invalid" };
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
kind: "valid",
|
|
149
|
+
event: this.snapshotEvent({
|
|
150
|
+
source: input.source,
|
|
151
|
+
type: input.type,
|
|
152
|
+
level: input.level,
|
|
153
|
+
process: "renderer",
|
|
154
|
+
timestamp: input.timestamp,
|
|
155
|
+
traceSeq: input.traceSeq,
|
|
156
|
+
...typeof input.message === "string" ? { message: input.message } : {},
|
|
157
|
+
...this.isConversationId(input.conversationId) ? { conversationId: input.conversationId } : {},
|
|
158
|
+
...input.payload ? { payload: input.payload } : {},
|
|
159
|
+
...typeof input.windowId === "string" ? { windowId: input.windowId } : {},
|
|
160
|
+
...typeof input.webContentsId === "number" && Number.isFinite(input.webContentsId) ? { webContentsId: input.webContentsId } : {},
|
|
161
|
+
...typeof input.routeKey === "string" ? { routeKey: input.routeKey } : {},
|
|
162
|
+
...typeof input.harnessId === "string" ? { harnessId: input.harnessId } : {}
|
|
163
|
+
})
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
hasValidEventIdentity(input) {
|
|
167
|
+
return typeof input.source === "string" && input.source.trim().length > 0 && typeof input.type === "string" && input.type.trim().length > 0 && typeof input.level === "string" && input.level.trim().length > 0 && input.process === "renderer";
|
|
168
|
+
}
|
|
169
|
+
hasValidEventTiming(input) {
|
|
170
|
+
return typeof input.timestamp === "string" && Number.isFinite(Date.parse(input.timestamp)) && typeof input.traceSeq === "number" && Number.isSafeInteger(input.traceSeq) && input.traceSeq >= 1;
|
|
171
|
+
}
|
|
172
|
+
parseEvents(input) {
|
|
173
|
+
if (!Array.isArray(input) || input.length === 0 || input.length > MAX_BATCH_EVENTS) {
|
|
174
|
+
return { kind: "invalid", reason: "Trace batch events are invalid" };
|
|
175
|
+
}
|
|
176
|
+
const events = [];
|
|
177
|
+
for (const rawEvent of input) {
|
|
178
|
+
const parsedEvent = this.parseEvent(rawEvent);
|
|
179
|
+
if (parsedEvent.kind === "invalid") {
|
|
180
|
+
return parsedEvent;
|
|
181
|
+
}
|
|
182
|
+
events.push(parsedEvent.event);
|
|
183
|
+
}
|
|
184
|
+
return { kind: "valid", events: Object.freeze(events) };
|
|
185
|
+
}
|
|
186
|
+
parseSequenceRange(input, events) {
|
|
187
|
+
const sequenceStart = input.sequenceStart;
|
|
188
|
+
const sequenceEnd = input.sequenceEnd;
|
|
189
|
+
if (typeof sequenceStart !== "number" || typeof sequenceEnd !== "number") {
|
|
190
|
+
return { kind: "invalid", reason: "Trace batch sequence range is invalid" };
|
|
191
|
+
}
|
|
192
|
+
const firstEvent = events[0];
|
|
193
|
+
const lastEvent = events[events.length - 1];
|
|
194
|
+
const hasInvalidRange = !Number.isSafeInteger(sequenceStart) || sequenceStart < 0 || !Number.isSafeInteger(sequenceEnd) || !firstEvent || !lastEvent || firstEvent.traceSeq !== sequenceStart + 1 || lastEvent.traceSeq !== sequenceEnd + 1;
|
|
195
|
+
if (hasInvalidRange) {
|
|
196
|
+
return { kind: "invalid", reason: "Trace batch sequence range does not match its events" };
|
|
197
|
+
}
|
|
198
|
+
return { kind: "valid", sequenceStart, sequenceEnd };
|
|
199
|
+
}
|
|
200
|
+
snapshotEvent(event) {
|
|
201
|
+
return Object.freeze({
|
|
202
|
+
...event,
|
|
203
|
+
...event.payload ? { payload: Object.freeze({ ...event.payload }) } : {}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
validateIdentity(input) {
|
|
207
|
+
if (input.protocolVersion !== 1) {
|
|
208
|
+
return { kind: "invalid", reason: "Trace batch protocol version is unsupported" };
|
|
209
|
+
}
|
|
210
|
+
if (typeof input.producerId !== "string" || input.producerId.trim().length === 0) {
|
|
211
|
+
return { kind: "invalid", reason: "Trace batch producer identity is invalid" };
|
|
212
|
+
}
|
|
213
|
+
if (typeof input.batchId !== "string" || input.batchId.trim().length === 0) {
|
|
214
|
+
return { kind: "invalid", reason: "Trace batch identity is invalid" };
|
|
215
|
+
}
|
|
216
|
+
return { kind: "valid" };
|
|
217
|
+
}
|
|
218
|
+
isConversationId(value) {
|
|
219
|
+
return typeof value === "string" || typeof value === "number" && Number.isFinite(value);
|
|
220
|
+
}
|
|
221
|
+
isRecord(value) {
|
|
222
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
226
|
+
0 && (module.exports = {
|
|
227
|
+
WoodTraceBatchContract
|
|
228
|
+
});
|
|
229
|
+
//# sourceMappingURL=wood_trace_batch_contract.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tracing/wood_trace_batch_contract.ts"],"sourcesContent":["import type {\n WoodRendererTraceEvent,\n WoodTraceAcknowledgementParseResult,\n WoodTraceBatch,\n WoodTraceBatchAcknowledgement,\n WoodTraceBatchParseResult,\n WoodTraceEventParseResult,\n WoodTraceEventsParseResult,\n WoodTraceIdentityValidationResult,\n} from './types/wood_trace_batch.types.js';\n\nconst MAX_BATCH_EVENTS = 256;\n\nexport class WoodTraceBatchContract {\n create(\n producerId: string,\n sequenceStart: number,\n events: readonly WoodRendererTraceEvent[],\n ): WoodTraceBatch {\n const snapshots = events.map((event) => this.snapshotEvent(event));\n const last = snapshots[snapshots.length - 1];\n const sequenceEnd = last ? last.traceSeq - 1 : sequenceStart - 1;\n return Object.freeze({\n kind: 'wood.trace.batch',\n protocolVersion: 1,\n producerId,\n batchId: `wtb1:${producerId}:${sequenceStart}-${sequenceEnd}`,\n sequenceStart,\n sequenceEnd,\n events: Object.freeze(snapshots),\n });\n }\n\n parse(input: unknown): WoodTraceBatchParseResult {\n if (!this.isRecord(input) || input.kind !== 'wood.trace.batch') {\n return { kind: 'not-batch' };\n }\n\n const batchId = typeof input.batchId === 'string' ? input.batchId : null;\n const identity = this.validateIdentity(input);\n if (identity.kind === 'invalid') {\n return { kind: 'invalid', batchId, reason: identity.reason };\n }\n const producerId = input.producerId;\n if (typeof producerId !== 'string') {\n return { kind: 'invalid', batchId, reason: 'Trace batch producer identity is invalid' };\n }\n\n const parsedEvents = this.parseEvents(input.events);\n if (parsedEvents.kind === 'invalid') {\n return { kind: 'invalid', batchId, reason: parsedEvents.reason };\n }\n const events = parsedEvents.events;\n\n const parsedSequenceRange = this.parseSequenceRange(input, events);\n if (parsedSequenceRange.kind === 'invalid') {\n return { kind: 'invalid', batchId, reason: parsedSequenceRange.reason };\n }\n const { sequenceStart, sequenceEnd } = parsedSequenceRange;\n const hasTraceSequenceMismatch = events.some((event, index) => {\n const previous = events[index - 1];\n return previous !== undefined && event.traceSeq <= previous.traceSeq;\n });\n if (hasTraceSequenceMismatch) {\n return { kind: 'invalid', batchId, reason: 'Trace event sequences are not strictly increasing' };\n }\n const expectedBatchId = `wtb1:${producerId}:${sequenceStart}-${sequenceEnd}`;\n if (input.batchId !== expectedBatchId) {\n return { kind: 'invalid', batchId, reason: 'Trace batch identity does not match its sequence range' };\n }\n\n return {\n kind: 'valid',\n batch: this.create(producerId, sequenceStart, events),\n };\n }\n\n parseAcknowledgement(input: unknown): WoodTraceAcknowledgementParseResult {\n if (!this.isRecord(input) || typeof input.kind !== 'string' || typeof input.batchId !== 'string') {\n return { ok: false, reason: 'Trace batch acknowledgement framing is invalid' };\n }\n\n if (input.kind === 'committed') {\n return this.parseCommittedAcknowledgement(input);\n }\n if (input.kind === 'retryable') {\n return this.parseRetryableAcknowledgement(input);\n }\n if (input.kind === 'rejected' && typeof input.reason === 'string') {\n return {\n ok: true,\n acknowledgement: Object.freeze({\n kind: 'rejected',\n batchId: input.batchId,\n reason: input.reason,\n }),\n };\n }\n return { ok: false, reason: 'Trace batch acknowledgement kind is invalid' };\n }\n\n private parseCommittedAcknowledgement(\n input: Record<string, unknown>,\n ): WoodTraceAcknowledgementParseResult {\n const batchId = input.batchId;\n const committedAtMs = input.committedAtMs;\n const acceptedEvents = input.acceptedEvents;\n const validNumbers = typeof batchId === 'string'\n && typeof committedAtMs === 'number'\n && Number.isFinite(committedAtMs)\n && typeof acceptedEvents === 'number'\n && Number.isSafeInteger(acceptedEvents)\n && acceptedEvents >= 0;\n if (!validNumbers) {\n return { ok: false, reason: 'Committed trace acknowledgement is invalid' };\n }\n return {\n ok: true,\n acknowledgement: Object.freeze({\n kind: 'committed',\n batchId,\n committedAtMs,\n acceptedEvents,\n }),\n };\n }\n\n private parseRetryableAcknowledgement(\n input: Record<string, unknown>,\n ): WoodTraceAcknowledgementParseResult {\n const batchId = input.batchId;\n const retryAfterMs = input.retryAfterMs;\n if (typeof batchId !== 'string'\n || typeof input.reason !== 'string'\n || typeof retryAfterMs !== 'number'\n || !Number.isFinite(retryAfterMs)\n || retryAfterMs < 0) {\n return { ok: false, reason: 'Retryable trace acknowledgement is invalid' };\n }\n return {\n ok: true,\n acknowledgement: Object.freeze({\n kind: 'retryable',\n batchId,\n reason: input.reason,\n retryAfterMs,\n }),\n };\n }\n\n private parseEvent(input: unknown): WoodTraceEventParseResult {\n if (!this.isRecord(input)) {\n return { kind: 'invalid', reason: 'Trace event is not an object' };\n }\n const hasValidIdentity = this.hasValidEventIdentity(input);\n const hasValidTiming = this.hasValidEventTiming(input);\n if (!hasValidIdentity || !hasValidTiming) {\n return { kind: 'invalid', reason: 'Trace event identity or timing is invalid' };\n }\n if (input.payload !== undefined && !this.isRecord(input.payload)) {\n return { kind: 'invalid', reason: 'Trace event payload is invalid' };\n }\n return {\n kind: 'valid',\n event: this.snapshotEvent({\n source: input.source,\n type: input.type,\n level: input.level,\n process: 'renderer',\n timestamp: input.timestamp,\n traceSeq: input.traceSeq,\n ...(typeof input.message === 'string' ? { message: input.message } : {}),\n ...(this.isConversationId(input.conversationId) ? { conversationId: input.conversationId } : {}),\n ...(input.payload ? { payload: input.payload } : {}),\n ...(typeof input.windowId === 'string' ? { windowId: input.windowId } : {}),\n ...(typeof input.webContentsId === 'number' && Number.isFinite(input.webContentsId)\n ? { webContentsId: input.webContentsId }\n : {}),\n ...(typeof input.routeKey === 'string' ? { routeKey: input.routeKey } : {}),\n ...(typeof input.harnessId === 'string' ? { harnessId: input.harnessId } : {}),\n }),\n };\n }\n\n private hasValidEventIdentity(input: Record<string, unknown>): input is Record<string, unknown> & {\n source: string;\n type: string;\n level: string;\n process: 'renderer';\n } {\n return typeof input.source === 'string'\n && input.source.trim().length > 0\n && typeof input.type === 'string'\n && input.type.trim().length > 0\n && typeof input.level === 'string'\n && input.level.trim().length > 0\n && input.process === 'renderer';\n }\n\n private hasValidEventTiming(input: Record<string, unknown>): input is Record<string, unknown> & {\n timestamp: string;\n traceSeq: number;\n } {\n return typeof input.timestamp === 'string'\n && Number.isFinite(Date.parse(input.timestamp))\n && typeof input.traceSeq === 'number'\n && Number.isSafeInteger(input.traceSeq)\n && input.traceSeq >= 1;\n }\n\n private parseEvents(input: unknown): WoodTraceEventsParseResult {\n if (!Array.isArray(input) || input.length === 0 || input.length > MAX_BATCH_EVENTS) {\n return { kind: 'invalid', reason: 'Trace batch events are invalid' };\n }\n const events: WoodRendererTraceEvent[] = [];\n for (const rawEvent of input) {\n const parsedEvent = this.parseEvent(rawEvent);\n if (parsedEvent.kind === 'invalid') {\n return parsedEvent;\n }\n events.push(parsedEvent.event);\n }\n return { kind: 'valid', events: Object.freeze(events) };\n }\n\n private parseSequenceRange(\n input: Record<string, unknown>,\n events: readonly WoodRendererTraceEvent[],\n ): { kind: 'invalid'; reason: string } | { kind: 'valid'; sequenceStart: number; sequenceEnd: number } {\n const sequenceStart = input.sequenceStart;\n const sequenceEnd = input.sequenceEnd;\n if (typeof sequenceStart !== 'number' || typeof sequenceEnd !== 'number') {\n return { kind: 'invalid', reason: 'Trace batch sequence range is invalid' };\n }\n const firstEvent = events[0];\n const lastEvent = events[events.length - 1];\n const hasInvalidRange = !Number.isSafeInteger(sequenceStart)\n || sequenceStart < 0\n || !Number.isSafeInteger(sequenceEnd)\n || !firstEvent\n || !lastEvent\n || firstEvent.traceSeq !== sequenceStart + 1\n || lastEvent.traceSeq !== sequenceEnd + 1;\n if (hasInvalidRange) {\n return { kind: 'invalid', reason: 'Trace batch sequence range does not match its events' };\n }\n return { kind: 'valid', sequenceStart, sequenceEnd };\n }\n\n private snapshotEvent(event: WoodRendererTraceEvent): WoodRendererTraceEvent {\n return Object.freeze({\n ...event,\n ...(event.payload ? { payload: Object.freeze({ ...event.payload }) } : {}),\n });\n }\n\n private validateIdentity(input: Record<string, unknown>): WoodTraceIdentityValidationResult {\n if (input.protocolVersion !== 1) {\n return { kind: 'invalid', reason: 'Trace batch protocol version is unsupported' };\n }\n if (typeof input.producerId !== 'string' || input.producerId.trim().length === 0) {\n return { kind: 'invalid', reason: 'Trace batch producer identity is invalid' };\n }\n if (typeof input.batchId !== 'string' || input.batchId.trim().length === 0) {\n return { kind: 'invalid', reason: 'Trace batch identity is invalid' };\n }\n return { kind: 'valid' };\n }\n\n private isConversationId(value: unknown): value is string | number {\n return typeof value === 'string' || (typeof value === 'number' && Number.isFinite(value));\n }\n\n private isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { WoodRendererTraceEvent, WoodTraceBatch, WoodTraceBatchParseResult, WoodTraceAcknowledgementParseResult } 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 WoodTraceBatchContract {
|
|
7
|
+
create(producerId: string, sequenceStart: number, events: readonly WoodRendererTraceEvent[]): WoodTraceBatch;
|
|
8
|
+
parse(input: unknown): WoodTraceBatchParseResult;
|
|
9
|
+
parseAcknowledgement(input: unknown): WoodTraceAcknowledgementParseResult;
|
|
10
|
+
private parseCommittedAcknowledgement;
|
|
11
|
+
private parseRetryableAcknowledgement;
|
|
12
|
+
private parseEvent;
|
|
13
|
+
private hasValidEventIdentity;
|
|
14
|
+
private hasValidEventTiming;
|
|
15
|
+
private parseEvents;
|
|
16
|
+
private parseSequenceRange;
|
|
17
|
+
private snapshotEvent;
|
|
18
|
+
private validateIdentity;
|
|
19
|
+
private isConversationId;
|
|
20
|
+
private isRecord;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { WoodTraceBatchContract };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { WoodRendererTraceEvent, WoodTraceBatch, WoodTraceBatchParseResult, WoodTraceAcknowledgementParseResult } 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 WoodTraceBatchContract {
|
|
7
|
+
create(producerId: string, sequenceStart: number, events: readonly WoodRendererTraceEvent[]): WoodTraceBatch;
|
|
8
|
+
parse(input: unknown): WoodTraceBatchParseResult;
|
|
9
|
+
parseAcknowledgement(input: unknown): WoodTraceAcknowledgementParseResult;
|
|
10
|
+
private parseCommittedAcknowledgement;
|
|
11
|
+
private parseRetryableAcknowledgement;
|
|
12
|
+
private parseEvent;
|
|
13
|
+
private hasValidEventIdentity;
|
|
14
|
+
private hasValidEventTiming;
|
|
15
|
+
private parseEvents;
|
|
16
|
+
private parseSequenceRange;
|
|
17
|
+
private snapshotEvent;
|
|
18
|
+
private validateIdentity;
|
|
19
|
+
private isConversationId;
|
|
20
|
+
private isRecord;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { WoodTraceBatchContract };
|