@nodii/telemetry 0.0.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +223 -1
- package/dist/active-span.d.ts +12 -0
- package/dist/active-span.d.ts.map +1 -0
- package/dist/active-span.js +20 -0
- package/dist/active-span.js.map +1 -0
- package/dist/agent-invocable.d.ts +24 -0
- package/dist/agent-invocable.d.ts.map +1 -0
- package/dist/agent-invocable.js +64 -0
- package/dist/agent-invocable.js.map +1 -0
- package/dist/audit-types.d.ts +15 -0
- package/dist/audit-types.d.ts.map +1 -0
- package/dist/audit-types.js +39 -0
- package/dist/audit-types.js.map +1 -0
- package/dist/audit.d.ts +226 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +255 -0
- package/dist/audit.js.map +1 -0
- package/dist/configure.d.ts +34 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +23 -0
- package/dist/configure.js.map +1 -0
- package/dist/context.d.ts +40 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +70 -0
- package/dist/context.js.map +1 -0
- package/dist/drizzle/audit-schema.d.ts +884 -0
- package/dist/drizzle/audit-schema.d.ts.map +1 -0
- package/dist/drizzle/audit-schema.js +268 -0
- package/dist/drizzle/audit-schema.js.map +1 -0
- package/dist/drizzle/index.d.ts +3 -0
- package/dist/drizzle/index.d.ts.map +1 -0
- package/dist/drizzle/index.js +5 -0
- package/dist/drizzle/index.js.map +1 -0
- package/dist/index.d.ts +21 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -5
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +39 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +114 -0
- package/dist/init.js.map +1 -0
- package/dist/intent.d.ts +21 -0
- package/dist/intent.d.ts.map +1 -0
- package/dist/intent.js +123 -0
- package/dist/intent.js.map +1 -0
- package/dist/logger.d.ts +19 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +99 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.d.ts +53 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +152 -0
- package/dist/metrics.js.map +1 -0
- package/dist/otlp-adapter.d.ts +44 -0
- package/dist/otlp-adapter.d.ts.map +1 -0
- package/dist/otlp-adapter.js +351 -0
- package/dist/otlp-adapter.js.map +1 -0
- package/dist/outbox-emit.d.ts +34 -0
- package/dist/outbox-emit.d.ts.map +1 -0
- package/dist/outbox-emit.js +58 -0
- package/dist/outbox-emit.js.map +1 -0
- package/dist/redaction.d.ts +51 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +173 -0
- package/dist/redaction.js.map +1 -0
- package/dist/sdk-counters.d.ts +14 -0
- package/dist/sdk-counters.d.ts.map +1 -0
- package/dist/sdk-counters.js +42 -0
- package/dist/sdk-counters.js.map +1 -0
- package/dist/tracer.d.ts +63 -0
- package/dist/tracer.d.ts.map +1 -0
- package/dist/tracer.js +214 -0
- package/dist/tracer.js.map +1 -0
- package/dist/types.d.ts +230 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +66 -0
- package/dist/types.js.map +1 -0
- package/dist/uuid.d.ts +5 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +34 -0
- package/dist/uuid.js.map +1 -0
- package/package.json +44 -7
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D41 lock: the per-request context written ONCE on request entry by an
|
|
3
|
+
* SDK middleware adapter (§ 5.9), never mutated within a request. Read
|
|
4
|
+
* via `getContext()`; child scopes created via `withContext({...}, fn)`.
|
|
5
|
+
*/
|
|
6
|
+
export interface NodiiContext {
|
|
7
|
+
/** UUID. Bare label `tenant_id` per D20 — same key across signals. */
|
|
8
|
+
tenant_id: string;
|
|
9
|
+
/** null when `actor_type !== 'user'`. */
|
|
10
|
+
user_id: string | null;
|
|
11
|
+
actor_type: ActorType;
|
|
12
|
+
/** Set when `actor_type === 'agent'`. */
|
|
13
|
+
on_behalf_of: string | null;
|
|
14
|
+
role: string;
|
|
15
|
+
request_id: string;
|
|
16
|
+
/** Set when an intent is active (D46/D155). */
|
|
17
|
+
intent_id: string | null;
|
|
18
|
+
}
|
|
19
|
+
/** D41 + D45/D46 (E5 reframe). Locked enum. */
|
|
20
|
+
export type ActorType = "user" | "agent" | "system" | "service";
|
|
21
|
+
/**
|
|
22
|
+
* D18 lock: six metric families. SDK rejects metric registrations whose
|
|
23
|
+
* declared family is outside this enum.
|
|
24
|
+
*/
|
|
25
|
+
export type MetricFamily = "request_handler" | "saga" | "async_worker" | "outbox" | "pool" | "intent";
|
|
26
|
+
export declare const METRIC_FAMILIES: readonly MetricFamily[];
|
|
27
|
+
/**
|
|
28
|
+
* D156 lock (operator-confirmed: 7 fields despite prose saying "8"):
|
|
29
|
+
* `@agentInvocable` runtime metadata. Build-time codegen emits these to
|
|
30
|
+
* `agent-methods.generated.json` per service; runtime is a no-op at
|
|
31
|
+
* v0.1.0.
|
|
32
|
+
*/
|
|
33
|
+
export interface AgentInvocableConfig {
|
|
34
|
+
mode: AgentInvocableMode;
|
|
35
|
+
authTier: AgentInvocableAuthTier;
|
|
36
|
+
sideEffects: readonly AgentInvocableSideEffect[];
|
|
37
|
+
/** Required when `mode === 'strict-only'`. */
|
|
38
|
+
allowedPipelines?: readonly string[];
|
|
39
|
+
idempotency: AgentInvocableIdempotency;
|
|
40
|
+
rateLimit?: AgentInvocableRateLimit;
|
|
41
|
+
description: string;
|
|
42
|
+
}
|
|
43
|
+
export type AgentInvocableMode = "composable" | "strict-only" | "human-only";
|
|
44
|
+
export type AgentInvocableAuthTier = "autonomous" | "confirmation-required" | "never";
|
|
45
|
+
/** D156 bounded vocab. SDK validates against this list at registration. */
|
|
46
|
+
export type AgentInvocableSideEffect = "db.write" | "db.delete" | "email.send" | "sms.send" | "slack.post" | "payment.charge" | "payment.refund" | "external-api" | "file.write" | "notification.send";
|
|
47
|
+
export declare const AGENT_INVOCABLE_SIDE_EFFECTS: readonly AgentInvocableSideEffect[];
|
|
48
|
+
export type AgentInvocableIdempotency = "keyed-by-request-id" | "natural-key" | "none";
|
|
49
|
+
export interface AgentInvocableRateLimit {
|
|
50
|
+
perMinute?: number;
|
|
51
|
+
perHour?: number;
|
|
52
|
+
perDay?: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* D155 lock: intent_types registry shared with E5 gateway classifier
|
|
56
|
+
* via `intent-rules.json`. Loaded by `initTelemetry()` at start; SDK
|
|
57
|
+
* validates `intent.begin(typeName)` against this on every call (HARD
|
|
58
|
+
* from v0.1.0).
|
|
59
|
+
*/
|
|
60
|
+
export interface IntentTypeDefinition {
|
|
61
|
+
typeName: string;
|
|
62
|
+
server_mintable: boolean;
|
|
63
|
+
client_mintable: boolean;
|
|
64
|
+
/** D155: per-type timeout. */
|
|
65
|
+
timeout_seconds: number;
|
|
66
|
+
}
|
|
67
|
+
export type IntentTypeRegistry = Record<string, IntentTypeDefinition>;
|
|
68
|
+
/**
|
|
69
|
+
* D16/D63/D64/D65/D66 lock — full shape ships at v0.1.0 with defaults
|
|
70
|
+
* matching OFF-at-launch. Flipping sampling on is a config change, NOT
|
|
71
|
+
* an API change. SDK reads `samplingConfig` from `initTelemetry()` but
|
|
72
|
+
* applies it only when D78 trigger fires.
|
|
73
|
+
*/
|
|
74
|
+
export interface SamplingConfig {
|
|
75
|
+
/** D16: default false (off at launch). */
|
|
76
|
+
enabled: boolean;
|
|
77
|
+
keepRules: {
|
|
78
|
+
/** D65 default 1.0 (100%). */
|
|
79
|
+
errors: number;
|
|
80
|
+
/** D65 default 1.0. */
|
|
81
|
+
sagas: number;
|
|
82
|
+
/** D65 default 1.0. */
|
|
83
|
+
agentAttributed: number;
|
|
84
|
+
/** D65 default 1.0. */
|
|
85
|
+
intent: number;
|
|
86
|
+
/** D64: latency keep-rule family-tiered. */
|
|
87
|
+
slowPerFamily: Record<MetricFamily, number>;
|
|
88
|
+
/** D65: per-family baseline probabilistic. */
|
|
89
|
+
baseline: Record<MetricFamily, number>;
|
|
90
|
+
};
|
|
91
|
+
cascade: {
|
|
92
|
+
/** D66: default true. */
|
|
93
|
+
keptTraceForcesKeptSpans: boolean;
|
|
94
|
+
/** D66: default true. */
|
|
95
|
+
keptTraceForcesKeptLogs: boolean;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** Defaults exposed for callers who want to override only a slice. */
|
|
99
|
+
export declare const DEFAULT_SAMPLING_CONFIG: SamplingConfig;
|
|
100
|
+
/** D154 lock. */
|
|
101
|
+
export interface AutoInstrumentationConfig {
|
|
102
|
+
httpServer?: boolean;
|
|
103
|
+
httpClient?: boolean;
|
|
104
|
+
grpcServer?: boolean;
|
|
105
|
+
grpcClient?: boolean;
|
|
106
|
+
/** TS only per D149. */
|
|
107
|
+
bullmqProducer?: boolean;
|
|
108
|
+
/** TS only per D149. */
|
|
109
|
+
bullmqConsumer?: boolean;
|
|
110
|
+
/** D67 default on; runtime override per-service. */
|
|
111
|
+
pgQuerySpans?: boolean;
|
|
112
|
+
hostMetrics?: boolean;
|
|
113
|
+
logAutoStamping?: boolean;
|
|
114
|
+
resourceAttributes?: boolean;
|
|
115
|
+
/** D15: SDK-side canonical, fail-closed. */
|
|
116
|
+
piiRedaction?: boolean;
|
|
117
|
+
redisSpans?: boolean;
|
|
118
|
+
dnsLookups?: boolean;
|
|
119
|
+
fileSystem?: boolean;
|
|
120
|
+
pgDetailedStatement?: boolean;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* D153 lock: backpressure + drop policy. SDK queue → memory_limiter →
|
|
124
|
+
* exporter queue. No persistent buffer at v1. Drop is the policy; the
|
|
125
|
+
* counter is the observability.
|
|
126
|
+
*/
|
|
127
|
+
export interface ErrorHandlingConfig {
|
|
128
|
+
/** D153 default: 5000. */
|
|
129
|
+
otlpSendingQueueSize: number;
|
|
130
|
+
/** Drop on queue full; counter increments. Always true at v0.1.0. */
|
|
131
|
+
dropOnFull: true;
|
|
132
|
+
}
|
|
133
|
+
/** Reasons recorded by `telemetry.sdk.export_failures_total`. */
|
|
134
|
+
export type ExportFailureReason = "queue_full" | "network_error" | "server_5xx" | "timeout";
|
|
135
|
+
/**
|
|
136
|
+
* D60 resource attributes. `serviceName` + `env` are required;
|
|
137
|
+
* everything else is optional and surfaces as OTel Resource attributes.
|
|
138
|
+
*/
|
|
139
|
+
export interface ResourceAttributes {
|
|
140
|
+
serviceName: string;
|
|
141
|
+
/** 'dev' | 'uat' | 'prod' typical; locked at service deploy time. */
|
|
142
|
+
env: string;
|
|
143
|
+
serviceVersion?: string;
|
|
144
|
+
deploymentRegion?: string;
|
|
145
|
+
/** Free-form additional attributes. */
|
|
146
|
+
extra?: Record<string, string | number | boolean>;
|
|
147
|
+
}
|
|
148
|
+
/** The full `initTelemetry()` argument shape. */
|
|
149
|
+
export interface InitTelemetryConfig {
|
|
150
|
+
/** D60 resource attributes. `serviceName` + `env` required. */
|
|
151
|
+
serviceName: string;
|
|
152
|
+
env: string;
|
|
153
|
+
serviceVersion?: string;
|
|
154
|
+
deploymentRegion?: string;
|
|
155
|
+
/** OTLP gRPC endpoint, e.g. `https://otel.dev.nucleus-cloud.in`. */
|
|
156
|
+
otlpEndpoint?: string;
|
|
157
|
+
/** D24 metric vocabulary registry. Loaded from disk via `vocabularyRegistry` arg. */
|
|
158
|
+
vocabularyRegistry?: MetricVocabularyRegistry;
|
|
159
|
+
/** D155 intent_types registry. */
|
|
160
|
+
intentTypes?: IntentTypeRegistry;
|
|
161
|
+
/** D154 toggles; missing = use D154 defaults. */
|
|
162
|
+
autoInstrumentation?: AutoInstrumentationConfig;
|
|
163
|
+
/** D16 sampling stub; defaults to OFF. */
|
|
164
|
+
samplingConfig?: SamplingConfig;
|
|
165
|
+
/** D153 backpressure + drop. */
|
|
166
|
+
errorHandling?: Partial<ErrorHandlingConfig>;
|
|
167
|
+
/** Free-form extra resource attributes (D60). */
|
|
168
|
+
resourceAttributes?: Record<string, string | number | boolean>;
|
|
169
|
+
/**
|
|
170
|
+
* When true, the real OTLP gRPC exporters are NOT installed at init —
|
|
171
|
+
* tracer/logger/metrics keep their no-op backends. Used by unit tests
|
|
172
|
+
* that want to assert SDK semantics without a live collector.
|
|
173
|
+
* Default: false (real OTLP exporters wired when `otlpEndpoint` is set).
|
|
174
|
+
*/
|
|
175
|
+
disableOtlp?: boolean;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* D24 lock: every metric name must be in this registry, with a family
|
|
179
|
+
* + description + the D-number that ADR-gates its inclusion. Registry
|
|
180
|
+
* file shipped as JSON at `vocabulary.json` (D24 § 5.4), loaded into
|
|
181
|
+
* this shape by `initTelemetry()`.
|
|
182
|
+
*/
|
|
183
|
+
export interface MetricVocabularyEntry {
|
|
184
|
+
family: MetricFamily;
|
|
185
|
+
description: string;
|
|
186
|
+
/** D-number reference, e.g. `D23`. */
|
|
187
|
+
decision: string;
|
|
188
|
+
}
|
|
189
|
+
export type MetricVocabularyRegistry = Record<string, MetricVocabularyEntry>;
|
|
190
|
+
/**
|
|
191
|
+
* Locked log envelope per D13. All 11 fields are SDK-injected from
|
|
192
|
+
* `NodiiContext` + the initTelemetry config + active OTel context.
|
|
193
|
+
* Callers pass only `msg` + custom fields.
|
|
194
|
+
*/
|
|
195
|
+
export interface LogEnvelope {
|
|
196
|
+
level: LogLevel;
|
|
197
|
+
/** ISO-8601 timestamp. */
|
|
198
|
+
ts: string;
|
|
199
|
+
msg: string;
|
|
200
|
+
/** From `initTelemetry({ serviceName })`. */
|
|
201
|
+
service: string;
|
|
202
|
+
/** From `initTelemetry({ env })`. */
|
|
203
|
+
env: string;
|
|
204
|
+
/** From `NodiiContext.tenant_id`. */
|
|
205
|
+
tenant_id: string;
|
|
206
|
+
/** From `NodiiContext.user_id`. May be null. */
|
|
207
|
+
user_id: string | null;
|
|
208
|
+
/** Set when `actor_type === 'agent'`; mirrors `NodiiContext.on_behalf_of`. */
|
|
209
|
+
on_behalf_of?: string | null;
|
|
210
|
+
/** D41 actor_type. */
|
|
211
|
+
actor_type?: ActorType;
|
|
212
|
+
/** From `NodiiContext.request_id`. */
|
|
213
|
+
request_id: string;
|
|
214
|
+
/** From active OTel context. Null when no span is active. */
|
|
215
|
+
trace_id: string | null;
|
|
216
|
+
/** From active OTel context. Null when no span is active. */
|
|
217
|
+
span_id: string | null;
|
|
218
|
+
/** From `NodiiContext.intent_id`. */
|
|
219
|
+
intent_id: string | null;
|
|
220
|
+
}
|
|
221
|
+
/** D14 levels. `info` default in prod; `debug` runtime-toggleable per-tenant. */
|
|
222
|
+
export type LogLevel = "debug" | "info" | "warn" | "error";
|
|
223
|
+
/**
|
|
224
|
+
* SDK error thrown when any public API is called before
|
|
225
|
+
* `initTelemetry()` has run. Caller catches → fix init order.
|
|
226
|
+
*/
|
|
227
|
+
export declare class TelemetryNotInitialized extends Error {
|
|
228
|
+
constructor();
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Core type surface for @nodii/telemetry v0.1.0.
|
|
2
|
+
//
|
|
3
|
+
// Locked by feature_doc `nodii-libs/telemetry` v3 (D13, D18, D20–D22,
|
|
4
|
+
// D26, D40–D43, D60, D151–D156). Every other module in this package
|
|
5
|
+
// imports from here.
|
|
6
|
+
export const METRIC_FAMILIES = [
|
|
7
|
+
"request_handler",
|
|
8
|
+
"saga",
|
|
9
|
+
"async_worker",
|
|
10
|
+
"outbox",
|
|
11
|
+
"pool",
|
|
12
|
+
"intent",
|
|
13
|
+
];
|
|
14
|
+
export const AGENT_INVOCABLE_SIDE_EFFECTS = [
|
|
15
|
+
"db.write",
|
|
16
|
+
"db.delete",
|
|
17
|
+
"email.send",
|
|
18
|
+
"sms.send",
|
|
19
|
+
"slack.post",
|
|
20
|
+
"payment.charge",
|
|
21
|
+
"payment.refund",
|
|
22
|
+
"external-api",
|
|
23
|
+
"file.write",
|
|
24
|
+
"notification.send",
|
|
25
|
+
];
|
|
26
|
+
/** Defaults exposed for callers who want to override only a slice. */
|
|
27
|
+
export const DEFAULT_SAMPLING_CONFIG = {
|
|
28
|
+
enabled: false,
|
|
29
|
+
keepRules: {
|
|
30
|
+
errors: 1.0,
|
|
31
|
+
sagas: 1.0,
|
|
32
|
+
agentAttributed: 1.0,
|
|
33
|
+
intent: 1.0,
|
|
34
|
+
slowPerFamily: {
|
|
35
|
+
request_handler: 1.0,
|
|
36
|
+
saga: 1.0,
|
|
37
|
+
async_worker: 1.0,
|
|
38
|
+
outbox: 1.0,
|
|
39
|
+
pool: 1.0,
|
|
40
|
+
intent: 1.0,
|
|
41
|
+
},
|
|
42
|
+
baseline: {
|
|
43
|
+
request_handler: 0.1,
|
|
44
|
+
saga: 0.1,
|
|
45
|
+
async_worker: 0.1,
|
|
46
|
+
outbox: 0.1,
|
|
47
|
+
pool: 0.1,
|
|
48
|
+
intent: 0.1,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
cascade: {
|
|
52
|
+
keptTraceForcesKeptSpans: true,
|
|
53
|
+
keptTraceForcesKeptLogs: true,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* SDK error thrown when any public API is called before
|
|
58
|
+
* `initTelemetry()` has run. Caller catches → fix init order.
|
|
59
|
+
*/
|
|
60
|
+
export class TelemetryNotInitialized extends Error {
|
|
61
|
+
constructor() {
|
|
62
|
+
super("`@nodii/telemetry` was not initialized before use. Call `initTelemetry(...)` once at process start.");
|
|
63
|
+
this.name = "TelemetryNotInitialized";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,qBAAqB;AAoCrB,MAAM,CAAC,MAAM,eAAe,GAA4B;IACtD,iBAAiB;IACjB,MAAM;IACN,cAAc;IACd,QAAQ;IACR,MAAM;IACN,QAAQ;CACA,CAAC;AAsCX,MAAM,CAAC,MAAM,4BAA4B,GACvC;IACE,UAAU;IACV,WAAW;IACX,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,mBAAmB;CACX,CAAC;AA4Db,sEAAsE;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,OAAO,EAAE,KAAK;IACd,SAAS,EAAE;QACT,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,GAAG;QACV,eAAe,EAAE,GAAG;QACpB,MAAM,EAAE,GAAG;QACX,aAAa,EAAE;YACb,eAAe,EAAE,GAAG;YACpB,IAAI,EAAE,GAAG;YACT,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,GAAG;SACZ;QACD,QAAQ,EAAE;YACR,eAAe,EAAE,GAAG;YACpB,IAAI,EAAE,GAAG;YACT,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,GAAG;SACZ;KACF;IACD,OAAO,EAAE;QACP,wBAAwB,EAAE,IAAI;QAC9B,uBAAuB,EAAE,IAAI;KAC9B;CACF,CAAC;AA4IF;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD;QACE,KAAK,CACH,qGAAqG,CACtG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF"}
|
package/dist/uuid.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../src/uuid.ts"],"names":[],"mappings":"AAUA,mDAAmD;AACnD,wBAAgB,MAAM,IAAI,MAAM,CAyB/B;AAED,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI3C"}
|
package/dist/uuid.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// UUIDv7 mint. Used by:
|
|
2
|
+
// - `intent.begin()` to generate the intent_id sync (D155).
|
|
3
|
+
// - Middleware adapters minting `request_id` when the inbound request
|
|
4
|
+
// lacks one (§ 5.9 — fallback only).
|
|
5
|
+
//
|
|
6
|
+
// UUIDv7 layout (RFC 9562 §5.7):
|
|
7
|
+
// 48-bit Unix ts ms | 4-bit version (=7) | 12-bit rand | 2-bit variant (=10) | 62-bit rand
|
|
8
|
+
import { randomBytes } from "node:crypto";
|
|
9
|
+
/** Generate a UUIDv7. Time-ordered, k-sortable. */
|
|
10
|
+
export function uuidv7() {
|
|
11
|
+
const ts = BigInt(Date.now());
|
|
12
|
+
const rand = randomBytes(10); // 80 bits of randomness; we use 74 (12 + 62)
|
|
13
|
+
// 6 bytes of timestamp.
|
|
14
|
+
const tsHex = ts.toString(16).padStart(12, "0");
|
|
15
|
+
// 2 bytes for: 4-bit version (=7) + 12-bit random
|
|
16
|
+
const r12 = ((rand[0] ?? 0) << 4) | ((rand[1] ?? 0) >> 4); // 12 bits
|
|
17
|
+
const verAndRand = (0x7000 | (r12 & 0x0fff)).toString(16).padStart(4, "0");
|
|
18
|
+
// 2 bytes for: 2-bit variant (=10) + 14-bit random
|
|
19
|
+
const r14 = (((rand[1] ?? 0) & 0x0f) << 10) |
|
|
20
|
+
((rand[2] ?? 0) << 2) |
|
|
21
|
+
((rand[3] ?? 0) >> 6); // 14 bits
|
|
22
|
+
const variantAndRand = (0x8000 | (r14 & 0x3fff))
|
|
23
|
+
.toString(16)
|
|
24
|
+
.padStart(4, "0");
|
|
25
|
+
// 6 bytes (48 bits) of remaining random.
|
|
26
|
+
const tailBytes = rand.subarray(3, 9);
|
|
27
|
+
const tailHex = Buffer.from(tailBytes).toString("hex");
|
|
28
|
+
return `${tsHex.slice(0, 8)}-${tsHex.slice(8, 12)}-${verAndRand}-${variantAndRand}-${tailHex}`;
|
|
29
|
+
}
|
|
30
|
+
/** Validate UUIDv7 surface shape (8-4-4-4-12 hex, version nibble = 7). */
|
|
31
|
+
export function isUuidv7(s) {
|
|
32
|
+
return /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(s);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=uuid.js.map
|
package/dist/uuid.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid.js","sourceRoot":"","sources":["../src/uuid.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,8DAA8D;AAC9D,wEAAwE;AACxE,yCAAyC;AACzC,EAAE;AACF,iCAAiC;AACjC,6FAA6F;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,mDAAmD;AACnD,MAAM,UAAU,MAAM;IACpB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,6CAA6C;IAE3E,wBAAwB;IACxB,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAEhD,kDAAkD;IAClD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU;IACrE,MAAM,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE3E,mDAAmD;IACnD,MAAM,GAAG,GACP,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU;IACnC,MAAM,cAAc,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;SAC7C,QAAQ,CAAC,EAAE,CAAC;SACZ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEpB,yCAAyC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEvD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,IAAI,cAAc,IAAI,OAAO,EAAE,CAAC;AACjG,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,QAAQ,CAAC,CAAS;IAChC,OAAO,wEAAwE,CAAC,IAAI,CAClF,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nodii/telemetry",
|
|
3
|
-
"version": "0.0
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Substrate observability library for the Nodii microservice stack — OTel wrapper, log envelope, intent lifecycle, audit signal, agent registry, context propagation. Spec: planning hub docKey=telemetry.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -10,24 +10,61 @@
|
|
|
10
10
|
".": {
|
|
11
11
|
"types": "./dist/index.d.ts",
|
|
12
12
|
"default": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./drizzle": {
|
|
15
|
+
"types": "./dist/drizzle/index.d.ts",
|
|
16
|
+
"default": "./dist/drizzle/index.js"
|
|
13
17
|
}
|
|
14
18
|
},
|
|
15
|
-
"files": [
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
16
22
|
"publishConfig": {
|
|
17
|
-
"access": "public"
|
|
18
|
-
"provenance": true
|
|
23
|
+
"access": "public"
|
|
19
24
|
},
|
|
20
25
|
"scripts": {
|
|
21
26
|
"build": "tsc",
|
|
22
27
|
"typecheck": "tsc --noEmit",
|
|
23
|
-
"test": "
|
|
28
|
+
"test": "bun test"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@grpc/grpc-js": "^1.12.2",
|
|
32
|
+
"@opentelemetry/api": "^1.9.0",
|
|
33
|
+
"@opentelemetry/api-logs": "^0.57.2",
|
|
34
|
+
"@opentelemetry/exporter-logs-otlp-grpc": "^0.57.2",
|
|
35
|
+
"@opentelemetry/exporter-metrics-otlp-grpc": "^0.57.2",
|
|
36
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "^0.57.2",
|
|
37
|
+
"@opentelemetry/resources": "^1.30.1",
|
|
38
|
+
"@opentelemetry/sdk-logs": "^0.57.2",
|
|
39
|
+
"@opentelemetry/sdk-metrics": "^1.30.1",
|
|
40
|
+
"@opentelemetry/sdk-node": "^0.57.2",
|
|
41
|
+
"@opentelemetry/sdk-trace-base": "^1.30.1",
|
|
42
|
+
"@opentelemetry/sdk-trace-node": "^1.30.1",
|
|
43
|
+
"@opentelemetry/semantic-conventions": "^1.28.0"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"@opentelemetry/api": "^1.9.0",
|
|
47
|
+
"@opentelemetry/api-logs": "^0.57.2",
|
|
48
|
+
"drizzle-orm": "^0.36.0"
|
|
49
|
+
},
|
|
50
|
+
"peerDependenciesMeta": {
|
|
51
|
+
"@opentelemetry/api": {
|
|
52
|
+
"optional": true
|
|
53
|
+
},
|
|
54
|
+
"@opentelemetry/api-logs": {
|
|
55
|
+
"optional": true
|
|
56
|
+
},
|
|
57
|
+
"drizzle-orm": {
|
|
58
|
+
"optional": true
|
|
59
|
+
}
|
|
24
60
|
},
|
|
25
61
|
"devDependencies": {
|
|
62
|
+
"drizzle-orm": "^0.36.0",
|
|
26
63
|
"typescript": "^5.9.3"
|
|
27
64
|
},
|
|
28
65
|
"repository": {
|
|
29
66
|
"type": "git",
|
|
30
|
-
"url": "https://github.com/cognion-nucleus/nodii-libs.git",
|
|
67
|
+
"url": "git+https://github.com/cognion-nucleus/nodii-libs.git",
|
|
31
68
|
"directory": "ts/telemetry"
|
|
32
69
|
}
|
|
33
70
|
}
|