@orqenix/mesh-observability 0.6.0-phase-6
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/LICENSE +19 -0
- package/dist/adapters.d.ts +44 -0
- package/dist/adapters.d.ts.map +1 -0
- package/dist/adapters.js +85 -0
- package/dist/adapters.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +46 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +75 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.d.ts +50 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +109 -0
- package/dist/metrics.js.map +1 -0
- package/dist/redaction.d.ts +18 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +57 -0
- package/dist/redaction.js.map +1 -0
- package/dist/schema.d.ts +20 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +62 -0
- package/dist/schema.js.map +1 -0
- package/dist/trace.d.ts +15 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +36 -0
- package/dist/trace.js.map +1 -0
- package/package.json +45 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
Copyright 2026 Milo Nguyen and Orqenix contributors
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
|
18
|
+
|
|
19
|
+
[Full Apache 2.0 text: include verbatim from https://www.apache.org/licenses/LICENSE-2.0.txt]
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { MeshLogger } from './logger.js';
|
|
2
|
+
import { MeshMetrics } from './metrics.js';
|
|
3
|
+
import type { MeshRequest, MeshResponse, ScopeId } from '@orqenix/mesh-transport-core';
|
|
4
|
+
export interface ObservabilityHooks {
|
|
5
|
+
logger: MeshLogger;
|
|
6
|
+
metrics: MeshMetrics;
|
|
7
|
+
}
|
|
8
|
+
export interface CommonCtx {
|
|
9
|
+
scopeId: ScopeId;
|
|
10
|
+
transport: string;
|
|
11
|
+
peerId?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function onTransportStart(h: ObservabilityHooks, ctx: CommonCtx): void;
|
|
14
|
+
export declare function onTransportStop(h: ObservabilityHooks, ctx: CommonCtx): void;
|
|
15
|
+
export declare function onPeerConnect(h: ObservabilityHooks, ctx: CommonCtx & {
|
|
16
|
+
peerCount: number;
|
|
17
|
+
}): void;
|
|
18
|
+
export declare function onPeerDisconnect(h: ObservabilityHooks, ctx: CommonCtx & {
|
|
19
|
+
peerCount: number;
|
|
20
|
+
}): void;
|
|
21
|
+
export declare function onRpcIn(h: ObservabilityHooks, ctx: CommonCtx, req: MeshRequest): void;
|
|
22
|
+
export declare function onRpcOut(h: ObservabilityHooks, ctx: CommonCtx, req: MeshRequest, resp: MeshResponse, durationMs: number): void;
|
|
23
|
+
export declare function onRpcDenied(h: ObservabilityHooks, ctx: CommonCtx, req: Pick<MeshRequest, 'id' | 'method'>, errorCode: string): void;
|
|
24
|
+
export declare function onDiscoveryFound(h: ObservabilityHooks, ctx: CommonCtx): void;
|
|
25
|
+
export declare function onDiscoveryLost(h: ObservabilityHooks, ctx: CommonCtx): void;
|
|
26
|
+
export declare function onFailover(h: ObservabilityHooks, ctx: {
|
|
27
|
+
scopeId: ScopeId;
|
|
28
|
+
from: string;
|
|
29
|
+
to: string;
|
|
30
|
+
}): void;
|
|
31
|
+
export declare function onCircuitOpen(h: ObservabilityHooks, ctx: {
|
|
32
|
+
scopeId: ScopeId;
|
|
33
|
+
transport: string;
|
|
34
|
+
}): void;
|
|
35
|
+
export declare function onCircuitHalfOpen(h: ObservabilityHooks, ctx: {
|
|
36
|
+
scopeId: ScopeId;
|
|
37
|
+
transport: string;
|
|
38
|
+
}): void;
|
|
39
|
+
export declare function onCircuitClose(h: ObservabilityHooks, ctx: {
|
|
40
|
+
scopeId: ScopeId;
|
|
41
|
+
transport: string;
|
|
42
|
+
}): void;
|
|
43
|
+
export declare function rpcTraceId(req: MeshRequest): string | undefined;
|
|
44
|
+
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAgB,WAAW,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAEvF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAE5E;AACD,wBAAgB,eAAe,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAE3E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGjG;AACD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGpG;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAUrF;AAED,wBAAgB,QAAQ,CACtB,CAAC,EAAE,kBAAkB,EACrB,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,MAAM,GACjB,IAAI,CAgBN;AAED,wBAAgB,WAAW,CACzB,CAAC,EAAE,kBAAkB,EACrB,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,QAAQ,CAAC,EACvC,SAAS,EAAE,MAAM,GAChB,IAAI,CAaN;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAE5E;AACD,wBAAgB,eAAe,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAE3E;AAED,wBAAgB,UAAU,CACxB,CAAC,EAAE,kBAAkB,EACrB,GAAG,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClD,IAAI,CAGN;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGvG;AACD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAG3G;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGxG;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAE/D"}
|
package/dist/adapters.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { METRIC_NAMES } from './metrics.js';
|
|
2
|
+
import { summarizePayload } from './redaction.js';
|
|
3
|
+
import { traceIdOf } from './trace.js';
|
|
4
|
+
export function onTransportStart(h, ctx) {
|
|
5
|
+
h.logger.emit({ level: 'info', event: 'transport.start', ...ctx });
|
|
6
|
+
}
|
|
7
|
+
export function onTransportStop(h, ctx) {
|
|
8
|
+
h.logger.emit({ level: 'info', event: 'transport.stop', ...ctx });
|
|
9
|
+
}
|
|
10
|
+
export function onPeerConnect(h, ctx) {
|
|
11
|
+
h.logger.emit({ level: 'info', event: 'peer.connect', scopeId: ctx.scopeId, transport: ctx.transport, peerId: ctx.peerId });
|
|
12
|
+
h.metrics.setGauge(METRIC_NAMES.PEERS, ctx.peerCount, { transport: ctx.transport });
|
|
13
|
+
}
|
|
14
|
+
export function onPeerDisconnect(h, ctx) {
|
|
15
|
+
h.logger.emit({ level: 'info', event: 'peer.disconnect', scopeId: ctx.scopeId, transport: ctx.transport, peerId: ctx.peerId });
|
|
16
|
+
h.metrics.setGauge(METRIC_NAMES.PEERS, ctx.peerCount, { transport: ctx.transport });
|
|
17
|
+
}
|
|
18
|
+
export function onRpcIn(h, ctx, req) {
|
|
19
|
+
h.logger.emit({
|
|
20
|
+
level: 'info',
|
|
21
|
+
event: 'rpc.in',
|
|
22
|
+
scopeId: ctx.scopeId,
|
|
23
|
+
transport: ctx.transport,
|
|
24
|
+
peerId: ctx.peerId,
|
|
25
|
+
requestId: req.id,
|
|
26
|
+
method: req.method,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export function onRpcOut(h, ctx, req, resp, durationMs) {
|
|
30
|
+
h.logger.emit({
|
|
31
|
+
level: 'info',
|
|
32
|
+
event: 'rpc.out',
|
|
33
|
+
scopeId: ctx.scopeId,
|
|
34
|
+
transport: ctx.transport,
|
|
35
|
+
peerId: ctx.peerId,
|
|
36
|
+
requestId: req.id,
|
|
37
|
+
method: req.method,
|
|
38
|
+
durationMs,
|
|
39
|
+
status: resp.status,
|
|
40
|
+
errorCode: resp.error?.code,
|
|
41
|
+
});
|
|
42
|
+
h.metrics.incCounter(METRIC_NAMES.RPC_TOTAL, 1, { transport: ctx.transport, status: resp.status });
|
|
43
|
+
h.metrics.observeHistogram(METRIC_NAMES.RPC_DURATION_MS, durationMs, { transport: ctx.transport });
|
|
44
|
+
void summarizePayload(resp.payload);
|
|
45
|
+
}
|
|
46
|
+
export function onRpcDenied(h, ctx, req, errorCode) {
|
|
47
|
+
h.logger.emit({
|
|
48
|
+
level: 'warn',
|
|
49
|
+
event: 'rpc.denied',
|
|
50
|
+
scopeId: ctx.scopeId,
|
|
51
|
+
transport: ctx.transport,
|
|
52
|
+
peerId: ctx.peerId,
|
|
53
|
+
requestId: req.id,
|
|
54
|
+
method: req.method,
|
|
55
|
+
status: 'denied',
|
|
56
|
+
errorCode,
|
|
57
|
+
});
|
|
58
|
+
h.metrics.incCounter(METRIC_NAMES.RPC_TOTAL, 1, { transport: ctx.transport, status: 'denied' });
|
|
59
|
+
}
|
|
60
|
+
export function onDiscoveryFound(h, ctx) {
|
|
61
|
+
h.logger.emit({ level: 'info', event: 'discovery.found', scopeId: ctx.scopeId, transport: ctx.transport, peerId: ctx.peerId });
|
|
62
|
+
}
|
|
63
|
+
export function onDiscoveryLost(h, ctx) {
|
|
64
|
+
h.logger.emit({ level: 'info', event: 'discovery.lost', scopeId: ctx.scopeId, transport: ctx.transport, peerId: ctx.peerId });
|
|
65
|
+
}
|
|
66
|
+
export function onFailover(h, ctx) {
|
|
67
|
+
h.logger.emit({ level: 'warn', event: 'failover', scopeId: ctx.scopeId, transport: ctx.from });
|
|
68
|
+
h.metrics.incCounter(METRIC_NAMES.FAILOVER_TOTAL, 1, { from: ctx.from, to: ctx.to });
|
|
69
|
+
}
|
|
70
|
+
export function onCircuitOpen(h, ctx) {
|
|
71
|
+
h.logger.emit({ level: 'warn', event: 'circuit.open', scopeId: ctx.scopeId, transport: ctx.transport });
|
|
72
|
+
h.metrics.setGauge(METRIC_NAMES.CIRCUIT_STATE, 2, { transport: ctx.transport });
|
|
73
|
+
}
|
|
74
|
+
export function onCircuitHalfOpen(h, ctx) {
|
|
75
|
+
h.logger.emit({ level: 'info', event: 'circuit.halfopen', scopeId: ctx.scopeId, transport: ctx.transport });
|
|
76
|
+
h.metrics.setGauge(METRIC_NAMES.CIRCUIT_STATE, 1, { transport: ctx.transport });
|
|
77
|
+
}
|
|
78
|
+
export function onCircuitClose(h, ctx) {
|
|
79
|
+
h.logger.emit({ level: 'info', event: 'circuit.close', scopeId: ctx.scopeId, transport: ctx.transport });
|
|
80
|
+
h.metrics.setGauge(METRIC_NAMES.CIRCUIT_STATE, 0, { transport: ctx.transport });
|
|
81
|
+
}
|
|
82
|
+
export function rpcTraceId(req) {
|
|
83
|
+
return traceIdOf(req.trace.traceparent);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type MeshLogEvent, type MeshLogLevel, type MeshStatus } from './schema.js';
|
|
2
|
+
import type { ScopeId } from '@orqenix/mesh-transport-core';
|
|
3
|
+
export type LogSink = (event: MeshLogEvent, serialized: string) => void;
|
|
4
|
+
export interface MeshLoggerOptions {
|
|
5
|
+
sink?: LogSink;
|
|
6
|
+
level?: MeshLogLevel;
|
|
7
|
+
now?: () => Date;
|
|
8
|
+
strict?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class MeshLogger {
|
|
11
|
+
private readonly sink;
|
|
12
|
+
private readonly level;
|
|
13
|
+
private readonly now;
|
|
14
|
+
private readonly strict;
|
|
15
|
+
constructor(opts?: MeshLoggerOptions);
|
|
16
|
+
emit(partial: Omit<MeshLogEvent, 'ts'> & {
|
|
17
|
+
ts?: string;
|
|
18
|
+
}): void;
|
|
19
|
+
rpcIn(args: {
|
|
20
|
+
scopeId: ScopeId;
|
|
21
|
+
transport: string;
|
|
22
|
+
requestId: string;
|
|
23
|
+
method: string;
|
|
24
|
+
}): void;
|
|
25
|
+
rpcOut(args: {
|
|
26
|
+
scopeId: ScopeId;
|
|
27
|
+
transport: string;
|
|
28
|
+
requestId: string;
|
|
29
|
+
method: string;
|
|
30
|
+
durationMs: number;
|
|
31
|
+
status: MeshStatus;
|
|
32
|
+
}): void;
|
|
33
|
+
rpcDenied(args: {
|
|
34
|
+
scopeId: ScopeId;
|
|
35
|
+
transport: string;
|
|
36
|
+
requestId: string;
|
|
37
|
+
method?: string;
|
|
38
|
+
errorCode: string;
|
|
39
|
+
}): void;
|
|
40
|
+
}
|
|
41
|
+
export declare function bufferSink(): {
|
|
42
|
+
events: MeshLogEvent[];
|
|
43
|
+
lines: string[];
|
|
44
|
+
sink: LogSink;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5I,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAErB,IAAI,GAAE,iBAAsB;IAOxC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAwC/D,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAG7F,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI;IAGtI,SAAS,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAGtH;AAMD,wBAAgB,UAAU,IAAI;IAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAOvF"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { validateLogEvent } from './schema.js';
|
|
2
|
+
import { containsLeak } from './redaction.js';
|
|
3
|
+
const LEVEL_RANK = { debug: 0, info: 1, warn: 2, error: 3 };
|
|
4
|
+
export class MeshLogger {
|
|
5
|
+
sink;
|
|
6
|
+
level;
|
|
7
|
+
now;
|
|
8
|
+
strict;
|
|
9
|
+
constructor(opts = {}) {
|
|
10
|
+
this.sink = opts.sink ?? defaultSink;
|
|
11
|
+
this.level = opts.level ?? 'info';
|
|
12
|
+
this.now = opts.now ?? (() => new Date());
|
|
13
|
+
this.strict = opts.strict ?? false;
|
|
14
|
+
}
|
|
15
|
+
emit(partial) {
|
|
16
|
+
if (LEVEL_RANK[partial.level] < LEVEL_RANK[this.level])
|
|
17
|
+
return;
|
|
18
|
+
const event = {
|
|
19
|
+
...partial,
|
|
20
|
+
ts: partial.ts ?? this.now().toISOString(),
|
|
21
|
+
};
|
|
22
|
+
const errs = validateLogEvent(event);
|
|
23
|
+
if (errs) {
|
|
24
|
+
if (this.strict)
|
|
25
|
+
throw new Error(`MeshLogger schema violation: ${errs.join('; ')}`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
let serialized;
|
|
29
|
+
try {
|
|
30
|
+
serialized = JSON.stringify(event);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (containsLeak(serialized)) {
|
|
36
|
+
try {
|
|
37
|
+
this.sink({
|
|
38
|
+
ts: this.now().toISOString(),
|
|
39
|
+
level: 'warn',
|
|
40
|
+
event: 'rpc.denied',
|
|
41
|
+
scopeId: event.scopeId,
|
|
42
|
+
transport: event.transport,
|
|
43
|
+
errorCode: 'E_LOG_REDACTION',
|
|
44
|
+
}, '{"event":"rpc.denied","errorCode":"E_LOG_REDACTION"}');
|
|
45
|
+
}
|
|
46
|
+
catch { /* ignore */ }
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
this.sink(event, serialized);
|
|
51
|
+
}
|
|
52
|
+
catch { /* ignore */ }
|
|
53
|
+
}
|
|
54
|
+
rpcIn(args) {
|
|
55
|
+
this.emit({ level: 'info', event: 'rpc.in', ...args });
|
|
56
|
+
}
|
|
57
|
+
rpcOut(args) {
|
|
58
|
+
this.emit({ level: 'info', event: 'rpc.out', ...args });
|
|
59
|
+
}
|
|
60
|
+
rpcDenied(args) {
|
|
61
|
+
this.emit({ level: 'warn', event: 'rpc.denied', status: 'denied', ...args });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function defaultSink(_evt, serialized) {
|
|
65
|
+
console.log(serialized);
|
|
66
|
+
}
|
|
67
|
+
export function bufferSink() {
|
|
68
|
+
const events = [];
|
|
69
|
+
const lines = [];
|
|
70
|
+
return {
|
|
71
|
+
events, lines,
|
|
72
|
+
sink: (e, s) => { events.push(e); lines.push(s); },
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,gBAAgB,EAA6E,MAAM,aAAa,CAAC;AAC5I,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAY9C,MAAM,UAAU,GAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAE1F,MAAM,OAAO,UAAU;IACJ,IAAI,CAAU;IACd,KAAK,CAAe;IACpB,GAAG,CAAa;IAChB,MAAM,CAAU;IAEjC,YAAY,OAA0B,EAAE;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;QAClC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,OAAmD;QACtD,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO;QAC/D,MAAM,KAAK,GAAiB;YAC1B,GAAG,OAAO;YACV,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;SAC3C,CAAC;QAEF,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;QAED,IAAI,UAAkB,CAAC;QACvB,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CACP;oBACE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;oBAC5B,KAAK,EAAE,MAAM;oBACb,KAAK,EAAE,YAA6B;oBACpC,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,SAAS,EAAE,iBAAiB;iBAC7B,EACD,sDAAsD,CACvD,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,IAAgF;QACpF,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,CAAC,IAAwH;QAC7H,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,SAAS,CAAC,IAAoG;QAC5G,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;CACF;AAED,SAAS,WAAW,CAAC,IAAkB,EAAE,UAAkB;IACzD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACnD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export type MetricKind = 'counter' | 'gauge' | 'histogram';
|
|
2
|
+
export declare const METRIC_NAMES: {
|
|
3
|
+
readonly RPC_TOTAL: "orqenix_mesh_rpc_total";
|
|
4
|
+
readonly RPC_DURATION_MS: "orqenix_mesh_rpc_duration_ms";
|
|
5
|
+
readonly PEERS: "orqenix_mesh_peers";
|
|
6
|
+
readonly CAPABILITY_VERIFY_MS: "orqenix_mesh_capability_verify_ms";
|
|
7
|
+
readonly FAILOVER_TOTAL: "orqenix_mesh_failover_total";
|
|
8
|
+
readonly CIRCUIT_STATE: "orqenix_mesh_circuit_state";
|
|
9
|
+
};
|
|
10
|
+
export interface HistogramSummary {
|
|
11
|
+
count: number;
|
|
12
|
+
p50: number;
|
|
13
|
+
p95: number;
|
|
14
|
+
p99: number;
|
|
15
|
+
max: number;
|
|
16
|
+
}
|
|
17
|
+
export interface MetricSnapshot {
|
|
18
|
+
counters: Array<{
|
|
19
|
+
name: string;
|
|
20
|
+
labels: string;
|
|
21
|
+
value: number;
|
|
22
|
+
}>;
|
|
23
|
+
gauges: Array<{
|
|
24
|
+
name: string;
|
|
25
|
+
labels: string;
|
|
26
|
+
value: number;
|
|
27
|
+
}>;
|
|
28
|
+
histograms: Array<{
|
|
29
|
+
name: string;
|
|
30
|
+
labels: string;
|
|
31
|
+
summary: HistogramSummary;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export interface MeshMetricsOptions {
|
|
35
|
+
histogramCapacity?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare class MeshMetrics {
|
|
38
|
+
private readonly metrics;
|
|
39
|
+
private readonly histogramCapacity;
|
|
40
|
+
constructor(opts?: MeshMetricsOptions);
|
|
41
|
+
incCounter(name: string, by: number, labels?: Record<string, string>): void;
|
|
42
|
+
setGauge(name: string, value: number, labels?: Record<string, string>): void;
|
|
43
|
+
observeHistogram(name: string, sample: number, labels?: Record<string, string>): void;
|
|
44
|
+
snapshot(): MetricSnapshot;
|
|
45
|
+
registeredNames(): string[];
|
|
46
|
+
private ensureCounter;
|
|
47
|
+
private ensureGauge;
|
|
48
|
+
private ensureHistogram;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AA2B3D,eAAO,MAAM,YAAY;;;;;;;CAOf,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAE/B,IAAI,GAAE,kBAAuB;IAUzC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAM3E,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK5E,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAYrF,QAAQ,IAAI,cAAc;IAiB1B,eAAe,IAAI,MAAM,EAAE;IAI3B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,eAAe;CASxB"}
|
package/dist/metrics.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
function labelKey(labels) {
|
|
2
|
+
if (!labels)
|
|
3
|
+
return '';
|
|
4
|
+
const keys = Object.keys(labels).sort();
|
|
5
|
+
return keys.map((k) => `${k}=${labels[k]}`).join(',');
|
|
6
|
+
}
|
|
7
|
+
export const METRIC_NAMES = {
|
|
8
|
+
RPC_TOTAL: 'orqenix_mesh_rpc_total',
|
|
9
|
+
RPC_DURATION_MS: 'orqenix_mesh_rpc_duration_ms',
|
|
10
|
+
PEERS: 'orqenix_mesh_peers',
|
|
11
|
+
CAPABILITY_VERIFY_MS: 'orqenix_mesh_capability_verify_ms',
|
|
12
|
+
FAILOVER_TOTAL: 'orqenix_mesh_failover_total',
|
|
13
|
+
CIRCUIT_STATE: 'orqenix_mesh_circuit_state',
|
|
14
|
+
};
|
|
15
|
+
export class MeshMetrics {
|
|
16
|
+
metrics = new Map();
|
|
17
|
+
histogramCapacity;
|
|
18
|
+
constructor(opts = {}) {
|
|
19
|
+
this.histogramCapacity = opts.histogramCapacity ?? 1024;
|
|
20
|
+
this.ensureCounter(METRIC_NAMES.RPC_TOTAL);
|
|
21
|
+
this.ensureHistogram(METRIC_NAMES.RPC_DURATION_MS);
|
|
22
|
+
this.ensureGauge(METRIC_NAMES.PEERS);
|
|
23
|
+
this.ensureHistogram(METRIC_NAMES.CAPABILITY_VERIFY_MS);
|
|
24
|
+
this.ensureCounter(METRIC_NAMES.FAILOVER_TOTAL);
|
|
25
|
+
this.ensureGauge(METRIC_NAMES.CIRCUIT_STATE);
|
|
26
|
+
}
|
|
27
|
+
incCounter(name, by, labels) {
|
|
28
|
+
const m = this.ensureCounter(name);
|
|
29
|
+
const k = labelKey(labels);
|
|
30
|
+
m.values.set(k, (m.values.get(k) ?? 0) + by);
|
|
31
|
+
}
|
|
32
|
+
setGauge(name, value, labels) {
|
|
33
|
+
const m = this.ensureGauge(name);
|
|
34
|
+
m.values.set(labelKey(labels), value);
|
|
35
|
+
}
|
|
36
|
+
observeHistogram(name, sample, labels) {
|
|
37
|
+
const m = this.ensureHistogram(name);
|
|
38
|
+
const k = labelKey(labels);
|
|
39
|
+
let buf = m.ring.get(k);
|
|
40
|
+
if (!buf) {
|
|
41
|
+
buf = [];
|
|
42
|
+
m.ring.set(k, buf);
|
|
43
|
+
}
|
|
44
|
+
buf.push(sample);
|
|
45
|
+
if (buf.length > m.capacity)
|
|
46
|
+
buf.shift();
|
|
47
|
+
}
|
|
48
|
+
snapshot() {
|
|
49
|
+
const counters = [];
|
|
50
|
+
const gauges = [];
|
|
51
|
+
const histograms = [];
|
|
52
|
+
for (const m of this.metrics.values()) {
|
|
53
|
+
if (m.kind === 'counter') {
|
|
54
|
+
for (const [labels, value] of m.values)
|
|
55
|
+
counters.push({ name: m.name, labels, value });
|
|
56
|
+
}
|
|
57
|
+
else if (m.kind === 'gauge') {
|
|
58
|
+
for (const [labels, value] of m.values)
|
|
59
|
+
gauges.push({ name: m.name, labels, value });
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
for (const [labels, buf] of m.ring)
|
|
63
|
+
histograms.push({ name: m.name, labels, summary: summarize(buf) });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { counters, gauges, histograms };
|
|
67
|
+
}
|
|
68
|
+
registeredNames() {
|
|
69
|
+
return [...this.metrics.keys()].sort();
|
|
70
|
+
}
|
|
71
|
+
ensureCounter(name) {
|
|
72
|
+
let m = this.metrics.get(name);
|
|
73
|
+
if (!m) {
|
|
74
|
+
m = { kind: 'counter', name, values: new Map() };
|
|
75
|
+
this.metrics.set(name, m);
|
|
76
|
+
}
|
|
77
|
+
if (m.kind !== 'counter')
|
|
78
|
+
throw new Error(`metric ${name} already registered with kind ${m.kind}`);
|
|
79
|
+
return m;
|
|
80
|
+
}
|
|
81
|
+
ensureGauge(name) {
|
|
82
|
+
let m = this.metrics.get(name);
|
|
83
|
+
if (!m) {
|
|
84
|
+
m = { kind: 'gauge', name, values: new Map() };
|
|
85
|
+
this.metrics.set(name, m);
|
|
86
|
+
}
|
|
87
|
+
if (m.kind !== 'gauge')
|
|
88
|
+
throw new Error(`metric ${name} already registered with kind ${m.kind}`);
|
|
89
|
+
return m;
|
|
90
|
+
}
|
|
91
|
+
ensureHistogram(name) {
|
|
92
|
+
let m = this.metrics.get(name);
|
|
93
|
+
if (!m) {
|
|
94
|
+
m = { kind: 'histogram', name, ring: new Map(), capacity: this.histogramCapacity };
|
|
95
|
+
this.metrics.set(name, m);
|
|
96
|
+
}
|
|
97
|
+
if (m.kind !== 'histogram')
|
|
98
|
+
throw new Error(`metric ${name} already registered with kind ${m.kind}`);
|
|
99
|
+
return m;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function summarize(samples) {
|
|
103
|
+
if (samples.length === 0)
|
|
104
|
+
return { count: 0, p50: 0, p95: 0, p99: 0, max: 0 };
|
|
105
|
+
const sorted = samples.slice().sort((a, b) => a - b);
|
|
106
|
+
const at = (q) => sorted[Math.min(sorted.length - 1, Math.floor(sorted.length * q))];
|
|
107
|
+
return { count: sorted.length, p50: at(0.5), p95: at(0.95), p99: at(0.99), max: sorted[sorted.length - 1] };
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { MeshRequest } from '@orqenix/mesh-transport-core';
|
|
2
|
+
export interface PayloadSummary {
|
|
3
|
+
payloadSize: number;
|
|
4
|
+
payloadHash: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CapabilitySummary {
|
|
7
|
+
jti?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function summarizePayload(bytes: Uint8Array | undefined): PayloadSummary | undefined;
|
|
10
|
+
export declare function summarizeCapability(_token: unknown): CapabilitySummary | undefined;
|
|
11
|
+
export declare function summarizeRequest(req: Pick<MeshRequest, 'id' | 'method' | 'payload'>): {
|
|
12
|
+
requestId: string;
|
|
13
|
+
method: string;
|
|
14
|
+
payload?: PayloadSummary;
|
|
15
|
+
};
|
|
16
|
+
export declare function redact(input: unknown, depth?: number): unknown;
|
|
17
|
+
export declare function containsLeak(serialized: string): boolean;
|
|
18
|
+
//# sourceMappingURL=redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAQD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAO1F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAElF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG;IACrF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAMA;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAiBzD;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAQxD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { hash as blake3Hash } from 'blake3-wasm';
|
|
2
|
+
const FORBIDDEN_FIELD_NAMES = new Set([
|
|
3
|
+
'capability', 'cap', 'token', 'signature', 'sig', 'secret',
|
|
4
|
+
'privateKey', 'private_key', 'seed', 'scopeSeed',
|
|
5
|
+
'payload', 'payloadBytes',
|
|
6
|
+
]);
|
|
7
|
+
export function summarizePayload(bytes) {
|
|
8
|
+
if (!bytes)
|
|
9
|
+
return undefined;
|
|
10
|
+
const digest = blake3Hash(bytes);
|
|
11
|
+
return {
|
|
12
|
+
payloadSize: bytes.length,
|
|
13
|
+
payloadHash: Buffer.from(digest).toString('hex'),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function summarizeCapability(_token) {
|
|
17
|
+
return { jti: undefined };
|
|
18
|
+
}
|
|
19
|
+
export function summarizeRequest(req) {
|
|
20
|
+
return {
|
|
21
|
+
requestId: req.id,
|
|
22
|
+
method: req.method,
|
|
23
|
+
payload: summarizePayload(req.payload),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function redact(input, depth = 0) {
|
|
27
|
+
if (depth > 4)
|
|
28
|
+
return '[depth-limited]';
|
|
29
|
+
if (input == null)
|
|
30
|
+
return input;
|
|
31
|
+
if (input instanceof Uint8Array)
|
|
32
|
+
return summarizePayload(input);
|
|
33
|
+
if (Array.isArray(input))
|
|
34
|
+
return input.map((v) => redact(v, depth + 1));
|
|
35
|
+
if (typeof input === 'object') {
|
|
36
|
+
const out = {};
|
|
37
|
+
for (const [k, v] of Object.entries(input)) {
|
|
38
|
+
if (FORBIDDEN_FIELD_NAMES.has(k)) {
|
|
39
|
+
out[k] = '[redacted]';
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
out[k] = redact(v, depth + 1);
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
return input;
|
|
47
|
+
}
|
|
48
|
+
export function containsLeak(serialized) {
|
|
49
|
+
if (/"(capability|token|sig|signature|secret|privateKey|seed)"\s*:\s*"(?!\[redacted\])/.test(serialized)) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
if (/"[A-Za-z0-9_-]{120,}"/.test(serialized)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAYjD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ;IAC1D,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW;IAChD,SAAS,EAAE,cAAc;CAC1B,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,KAA6B;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAmD;IAKlF,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,EAAE;QACjB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;IAC9C,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACxC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YACtE,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,IAAI,mFAAmF,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACzG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ScopeId } from '@orqenix/mesh-transport-core';
|
|
2
|
+
export type MeshLogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
3
|
+
export type MeshEventName = 'transport.start' | 'transport.stop' | 'peer.connect' | 'peer.disconnect' | 'rpc.in' | 'rpc.out' | 'rpc.denied' | 'discovery.found' | 'discovery.lost' | 'failover' | 'circuit.open' | 'circuit.halfopen' | 'circuit.close';
|
|
4
|
+
export type MeshStatus = 'ok' | 'denied' | 'error' | 'timeout';
|
|
5
|
+
export declare const CANONICAL_EVENTS: ReadonlySet<MeshEventName>;
|
|
6
|
+
export interface MeshLogEvent {
|
|
7
|
+
ts: string;
|
|
8
|
+
level: MeshLogLevel;
|
|
9
|
+
event: MeshEventName;
|
|
10
|
+
scopeId: ScopeId;
|
|
11
|
+
peerId?: string;
|
|
12
|
+
requestId?: string;
|
|
13
|
+
transport: 'http' | 'libp2p' | 'loopback' | string;
|
|
14
|
+
method?: string;
|
|
15
|
+
durationMs?: number;
|
|
16
|
+
status?: MeshStatus;
|
|
17
|
+
errorCode?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function validateLogEvent(value: unknown): string[] | null;
|
|
20
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/D,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,gBAAgB,GAChB,cAAc,GACd,iBAAiB,GACjB,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,iBAAiB,GACjB,gBAAgB,GAChB,UAAU,GACV,cAAc,GACd,kBAAkB,GAClB,eAAe,CAAC;AAEpB,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,aAAa,CActD,CAAC;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,CA0ChE"}
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export const CANONICAL_EVENTS = new Set([
|
|
2
|
+
'transport.start',
|
|
3
|
+
'transport.stop',
|
|
4
|
+
'peer.connect',
|
|
5
|
+
'peer.disconnect',
|
|
6
|
+
'rpc.in',
|
|
7
|
+
'rpc.out',
|
|
8
|
+
'rpc.denied',
|
|
9
|
+
'discovery.found',
|
|
10
|
+
'discovery.lost',
|
|
11
|
+
'failover',
|
|
12
|
+
'circuit.open',
|
|
13
|
+
'circuit.halfopen',
|
|
14
|
+
'circuit.close',
|
|
15
|
+
]);
|
|
16
|
+
export function validateLogEvent(value) {
|
|
17
|
+
const errs = [];
|
|
18
|
+
if (!value || typeof value !== 'object') {
|
|
19
|
+
return ['event is not an object'];
|
|
20
|
+
}
|
|
21
|
+
const v = value;
|
|
22
|
+
const allowed = new Set([
|
|
23
|
+
'ts', 'level', 'event', 'scopeId', 'peerId', 'requestId',
|
|
24
|
+
'transport', 'method', 'durationMs', 'status', 'errorCode',
|
|
25
|
+
]);
|
|
26
|
+
for (const k of Object.keys(v)) {
|
|
27
|
+
if (!allowed.has(k))
|
|
28
|
+
errs.push(`unknown field: ${k}`);
|
|
29
|
+
}
|
|
30
|
+
if (typeof v.ts !== 'string' || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(v.ts)) {
|
|
31
|
+
errs.push('ts must be ISO-8601 with ms precision and Z suffix');
|
|
32
|
+
}
|
|
33
|
+
if (!['debug', 'info', 'warn', 'error'].includes(v.level)) {
|
|
34
|
+
errs.push('level must be one of debug|info|warn|error');
|
|
35
|
+
}
|
|
36
|
+
if (typeof v.event !== 'string' || !CANONICAL_EVENTS.has(v.event)) {
|
|
37
|
+
errs.push('event must be one of the canonical event names');
|
|
38
|
+
}
|
|
39
|
+
if (typeof v.scopeId !== 'string' || v.scopeId.length === 0) {
|
|
40
|
+
errs.push('scopeId required');
|
|
41
|
+
}
|
|
42
|
+
if (typeof v.transport !== 'string' || v.transport.length === 0) {
|
|
43
|
+
errs.push('transport required');
|
|
44
|
+
}
|
|
45
|
+
if (v.peerId !== undefined && typeof v.peerId !== 'string')
|
|
46
|
+
errs.push('peerId must be string when present');
|
|
47
|
+
if (v.requestId !== undefined && typeof v.requestId !== 'string')
|
|
48
|
+
errs.push('requestId must be string when present');
|
|
49
|
+
if (v.method !== undefined && typeof v.method !== 'string')
|
|
50
|
+
errs.push('method must be string when present');
|
|
51
|
+
if (v.durationMs !== undefined && (typeof v.durationMs !== 'number' || v.durationMs < 0)) {
|
|
52
|
+
errs.push('durationMs must be a non-negative number when present');
|
|
53
|
+
}
|
|
54
|
+
if (v.status !== undefined && !['ok', 'denied', 'error', 'timeout'].includes(v.status)) {
|
|
55
|
+
errs.push('status must be one of ok|denied|error|timeout when present');
|
|
56
|
+
}
|
|
57
|
+
if (v.errorCode !== undefined && typeof v.errorCode !== 'string') {
|
|
58
|
+
errs.push('errorCode must be string when present');
|
|
59
|
+
}
|
|
60
|
+
return errs.length === 0 ? null : errs;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/trace.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TraceContext } from '@orqenix/mesh-transport-core';
|
|
2
|
+
export interface ParsedTraceparent {
|
|
3
|
+
version: '00';
|
|
4
|
+
traceId: string;
|
|
5
|
+
spanId: string;
|
|
6
|
+
flags: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function parseTraceparent(tp: string): ParsedTraceparent | null;
|
|
9
|
+
export declare function validateTraceparent(tp: string): boolean;
|
|
10
|
+
export declare function formatTraceparent(p: ParsedTraceparent): string;
|
|
11
|
+
export declare function newTraceparent(): string;
|
|
12
|
+
export declare function deriveChildSpan(parent: string): string;
|
|
13
|
+
export declare function buildOutgoingTraceContext(parent?: string): TraceContext;
|
|
14
|
+
export declare function traceIdOf(traceparent: string): string | undefined;
|
|
15
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAIjE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAIrE;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAE9D;AAQD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAGvE;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE"}
|
package/dist/trace.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { webcrypto } from 'node:crypto';
|
|
2
|
+
const TRACEPARENT_RE = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/;
|
|
3
|
+
export function parseTraceparent(tp) {
|
|
4
|
+
const m = TRACEPARENT_RE.exec(tp);
|
|
5
|
+
if (!m)
|
|
6
|
+
return null;
|
|
7
|
+
return { version: '00', traceId: m[1], spanId: m[2], flags: m[3] };
|
|
8
|
+
}
|
|
9
|
+
export function validateTraceparent(tp) {
|
|
10
|
+
return parseTraceparent(tp) !== null;
|
|
11
|
+
}
|
|
12
|
+
export function formatTraceparent(p) {
|
|
13
|
+
return `00-${p.traceId}-${p.spanId}-${p.flags}`;
|
|
14
|
+
}
|
|
15
|
+
function randHex(bytes) {
|
|
16
|
+
const buf = new Uint8Array(bytes);
|
|
17
|
+
webcrypto.getRandomValues(buf);
|
|
18
|
+
return Buffer.from(buf).toString('hex');
|
|
19
|
+
}
|
|
20
|
+
export function newTraceparent() {
|
|
21
|
+
return formatTraceparent({ version: '00', traceId: randHex(16), spanId: randHex(8), flags: '01' });
|
|
22
|
+
}
|
|
23
|
+
export function deriveChildSpan(parent) {
|
|
24
|
+
const p = parseTraceparent(parent);
|
|
25
|
+
if (!p)
|
|
26
|
+
return newTraceparent();
|
|
27
|
+
return formatTraceparent({ ...p, spanId: randHex(8) });
|
|
28
|
+
}
|
|
29
|
+
export function buildOutgoingTraceContext(parent) {
|
|
30
|
+
const traceparent = parent ? deriveChildSpan(parent) : newTraceparent();
|
|
31
|
+
return { traceparent };
|
|
32
|
+
}
|
|
33
|
+
export function traceIdOf(traceparent) {
|
|
34
|
+
return parseTraceparent(traceparent)?.traceId;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,cAAc,GAAG,kDAAkD,CAAC;AAS1E,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,OAAO,gBAAgB,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAoB;IACpD,OAAO,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC;QAAE,OAAO,cAAc,EAAE,CAAC;IAChC,OAAO,iBAAiB,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAe;IACvD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IACxE,OAAO,EAAE,WAAW,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC3C,OAAO,gBAAgB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;AAChD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@orqenix/mesh-observability",
|
|
3
|
+
"version": "0.6.0-phase-6",
|
|
4
|
+
"description": "Structured logs, OpenTelemetry-compatible metrics, W3C traceparent propagation, and strict redaction for the Orqenix mesh.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"CHANGELOG.md"
|
|
21
|
+
],
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"blake3-wasm": "^2.0.0",
|
|
24
|
+
"@orqenix/mesh-transport-core": "0.6.0-phase-6"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/node": "^22.7.0",
|
|
28
|
+
"@vitest/coverage-v8": "^2.1.0",
|
|
29
|
+
"tsx": "^4.19.0",
|
|
30
|
+
"typescript": "^5.6.0",
|
|
31
|
+
"vitest": "^2.1.0"
|
|
32
|
+
},
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public",
|
|
35
|
+
"provenance": false
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=22.0.0"
|
|
39
|
+
},
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsc -p tsconfig.json",
|
|
42
|
+
"test": "vitest run --coverage",
|
|
43
|
+
"gate:G42": "vitest run test/G42-gate-wrapper.test.ts --reporter verbose"
|
|
44
|
+
}
|
|
45
|
+
}
|