@private.me/xbind 3.0.2 → 3.0.4

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.
Files changed (222) hide show
  1. package/README.md +2366 -204
  2. package/dist-standalone/_deps/mldsa-wasm/dist/mldsa.js +1 -1920
  3. package/dist-standalone/_deps/shared/cjs/errors.js +1 -729
  4. package/dist-standalone/_deps/shared/cjs/index.js +1 -463
  5. package/dist-standalone/_deps/shared/cjs/types.js +1 -315
  6. package/dist-standalone/_deps/shared/errors.js +1 -244
  7. package/dist-standalone/_deps/shared/index.js +1 -72
  8. package/dist-standalone/_deps/shared/types.js +1 -86
  9. package/dist-standalone/_deps/ux-helpers/cjs/errors.js +1 -1
  10. package/dist-standalone/_deps/ux-helpers/cjs/index.js +1 -1
  11. package/dist-standalone/_deps/ux-helpers/cjs/pagination.js +1 -1
  12. package/dist-standalone/_deps/ux-helpers/cjs/progress.js +1 -1
  13. package/dist-standalone/_deps/ux-helpers/cjs/search.js +1 -1
  14. package/dist-standalone/_deps/ux-helpers/cjs/types.js +1 -1
  15. package/dist-standalone/_deps/ux-helpers/errors.js +1 -1
  16. package/dist-standalone/_deps/ux-helpers/index.js +1 -1
  17. package/dist-standalone/_deps/ux-helpers/pagination.js +1 -1
  18. package/dist-standalone/_deps/ux-helpers/progress.js +1 -1
  19. package/dist-standalone/_deps/ux-helpers/search.js +1 -1
  20. package/dist-standalone/_deps/xchange/auto-accept.js +1 -1
  21. package/dist-standalone/_deps/xchange/cjs/auto-accept.js +1 -1
  22. package/dist-standalone/_deps/xchange/cjs/errors.js +1 -1
  23. package/dist-standalone/_deps/xchange/cjs/index.js +1 -1
  24. package/dist-standalone/_deps/xchange/cjs/invite-client.js +1 -1
  25. package/dist-standalone/_deps/xchange/cjs/lazy-init.js +1 -1
  26. package/dist-standalone/_deps/xchange/cjs/trust-integration.js +1 -1
  27. package/dist-standalone/_deps/xchange/cjs/xchange.js +1 -1
  28. package/dist-standalone/_deps/xchange/errors.js +1 -1
  29. package/dist-standalone/_deps/xchange/index.js +1 -1
  30. package/dist-standalone/_deps/xchange/invite-client.js +1 -1
  31. package/dist-standalone/_deps/xchange/lazy-init.js +1 -1
  32. package/dist-standalone/_deps/xchange/trust-integration.js +1 -1
  33. package/dist-standalone/_deps/xchange/xchange.js +1 -1
  34. package/dist-standalone/_deps/xregistry/cjs/discovery.js +1 -1
  35. package/dist-standalone/_deps/xregistry/cjs/errors.js +1 -1
  36. package/dist-standalone/_deps/xregistry/cjs/index.js +1 -1
  37. package/dist-standalone/_deps/xregistry/cjs/registry.js +1 -1
  38. package/dist-standalone/_deps/xregistry/cjs/schema.js +1 -1
  39. package/dist-standalone/_deps/xregistry/cjs/types.js +1 -1
  40. package/dist-standalone/_deps/xregistry/discovery.js +1 -1
  41. package/dist-standalone/_deps/xregistry/errors.js +1 -1
  42. package/dist-standalone/_deps/xregistry/index.js +1 -1
  43. package/dist-standalone/_deps/xregistry/registry.js +1 -1
  44. package/dist-standalone/_deps/xregistry/schema.js +1 -1
  45. package/dist-standalone/_deps/xregistry/types.js +1 -1
  46. package/dist-standalone/agent-call.d.ts +2 -2
  47. package/dist-standalone/agent-call.js +1 -659
  48. package/dist-standalone/agent-sdk.js +1 -328
  49. package/dist-standalone/agent.d.ts +2 -0
  50. package/dist-standalone/agent.js +1 -1800
  51. package/dist-standalone/approval.js +1 -193
  52. package/dist-standalone/async-iterators.d.ts +3 -3
  53. package/dist-standalone/async-iterators.js +1 -382
  54. package/dist-standalone/auth.js +1 -219
  55. package/dist-standalone/auto-accept.js +1 -229
  56. package/dist-standalone/backup-config.js +1 -201
  57. package/dist-standalone/backup.js +1 -326
  58. package/dist-standalone/batch-operations.js +1 -388
  59. package/dist-standalone/cancellation.js +1 -477
  60. package/dist-standalone/checkpoint.js +1 -186
  61. package/dist-standalone/circuit-breaker.js +1 -468
  62. package/dist-standalone/cjs/agent-call.js +1 -701
  63. package/dist-standalone/cjs/agent-sdk.js +1 -332
  64. package/dist-standalone/cjs/agent.js +1 -1837
  65. package/dist-standalone/cjs/approval.js +1 -199
  66. package/dist-standalone/cjs/async-iterators.js +1 -392
  67. package/dist-standalone/cjs/auth.js +1 -225
  68. package/dist-standalone/cjs/auto-accept.js +1 -233
  69. package/dist-standalone/cjs/backup-config.js +1 -207
  70. package/dist-standalone/cjs/backup.js +1 -330
  71. package/dist-standalone/cjs/batch-operations.js +1 -397
  72. package/dist-standalone/cjs/cancellation.js +1 -490
  73. package/dist-standalone/cjs/checkpoint.js +1 -193
  74. package/dist-standalone/cjs/circuit-breaker.js +1 -476
  75. package/dist-standalone/cjs/cli/init.js +1 -492
  76. package/dist-standalone/cjs/config-validation.js +1 -522
  77. package/dist-standalone/cjs/connect.js +1 -312
  78. package/dist-standalone/cjs/connection-pool.js +1 -506
  79. package/dist-standalone/cjs/correlation-id.js +1 -339
  80. package/dist-standalone/cjs/crypto-utils.js +1 -176
  81. package/dist-standalone/cjs/debug-mode.js +1 -534
  82. package/dist-standalone/cjs/did-document.js +1 -101
  83. package/dist-standalone/cjs/did-privateme.js +1 -130
  84. package/dist-standalone/cjs/did-web.js +1 -201
  85. package/dist-standalone/cjs/discovery.js +1 -462
  86. package/dist-standalone/cjs/dual-mode.js +1 -251
  87. package/dist-standalone/cjs/email-templates.js +1 -313
  88. package/dist-standalone/cjs/email-transport.js +1 -239
  89. package/dist-standalone/cjs/envelope.js +1 -538
  90. package/dist-standalone/cjs/errors.js +1 -913
  91. package/dist-standalone/cjs/event-emitter.js +1 -461
  92. package/dist-standalone/cjs/gateway-state.js +1 -55
  93. package/dist-standalone/cjs/gateway-transport.js +1 -120
  94. package/dist-standalone/cjs/graceful-degradation.js +1 -403
  95. package/dist-standalone/cjs/guardrails.js +1 -223
  96. package/dist-standalone/cjs/health-check.js +1 -336
  97. package/dist-standalone/cjs/http-compat.js +1 -272
  98. package/dist-standalone/cjs/http-status-map.js +1 -571
  99. package/dist-standalone/cjs/identity.js +1 -645
  100. package/dist-standalone/cjs/index.js +1 -406
  101. package/dist-standalone/cjs/invitation.js +1 -421
  102. package/dist-standalone/cjs/invite.js +1 -328
  103. package/dist-standalone/cjs/key-agreement.js +1 -335
  104. package/dist-standalone/cjs/lazy-init.js +1 -300
  105. package/dist-standalone/cjs/logger.js +1 -291
  106. package/dist-standalone/cjs/loopback-transport.js +1 -0
  107. package/dist-standalone/cjs/mdns-discovery.js +1 -202
  108. package/dist-standalone/cjs/nonce-store.js +1 -80
  109. package/dist-standalone/cjs/pairing-manager.js +1 -223
  110. package/dist-standalone/cjs/plugin-system.js +1 -264
  111. package/dist-standalone/cjs/plugins/logging.js +1 -168
  112. package/dist-standalone/cjs/plugins/metrics.js +1 -181
  113. package/dist-standalone/cjs/plugins/validation.js +1 -302
  114. package/dist-standalone/cjs/policy.js +1 -320
  115. package/dist-standalone/cjs/progress-callbacks.js +1 -583
  116. package/dist-standalone/cjs/redis-nonce-store.js +1 -76
  117. package/dist-standalone/cjs/registry-middleware.js +1 -50
  118. package/dist-standalone/cjs/retry-strategies.js +1 -544
  119. package/dist-standalone/cjs/retry-transport.js +1 -102
  120. package/dist-standalone/cjs/runtime/browser.js +1 -533
  121. package/dist-standalone/cjs/runtime/edge.js +1 -526
  122. package/dist-standalone/cjs/runtime/react-native.js +1 -394
  123. package/dist-standalone/cjs/security-policy.js +1 -245
  124. package/dist-standalone/cjs/serialization.js +1 -1040
  125. package/dist-standalone/cjs/split-channel.js +1 -225
  126. package/dist-standalone/cjs/subscription-proof.js +1 -230
  127. package/dist-standalone/cjs/succession.js +1 -148
  128. package/dist-standalone/cjs/timeouts.js +1 -412
  129. package/dist-standalone/cjs/trace-context.js +1 -424
  130. package/dist-standalone/cjs/trace-spans.js +1 -495
  131. package/dist-standalone/cjs/transport.js +1 -63
  132. package/dist-standalone/cjs/trust-registry.js +1 -991
  133. package/dist-standalone/cjs/types/error-response.js +1 -56
  134. package/dist-standalone/cjs/vault-auth.js +1 -178
  135. package/dist-standalone/cjs/vault-store-loader.js +1 -194
  136. package/dist-standalone/cjs/verify.js +1 -25
  137. package/dist-standalone/cjs/version-info.js +1 -543
  138. package/dist-standalone/cjs/xfetch.js +1 -340
  139. package/dist-standalone/cli/init.js +1 -455
  140. package/dist-standalone/cli/setup.js +1 -514
  141. package/dist-standalone/cli/types.js +1 -27
  142. package/dist-standalone/cli/xbind.js +1 -148
  143. package/dist-standalone/config-validation.js +1 -513
  144. package/dist-standalone/connect.js +1 -274
  145. package/dist-standalone/connection-pool.js +1 -500
  146. package/dist-standalone/correlation-id.js +1 -326
  147. package/dist-standalone/crypto-utils.d.ts +2 -7
  148. package/dist-standalone/crypto-utils.js +1 -157
  149. package/dist-standalone/debug-mode.js +1 -510
  150. package/dist-standalone/did-document.js +1 -96
  151. package/dist-standalone/did-privateme.js +1 -121
  152. package/dist-standalone/did-web.js +1 -196
  153. package/dist-standalone/discovery.js +1 -458
  154. package/dist-standalone/dual-mode.js +1 -247
  155. package/dist-standalone/email-templates.js +1 -309
  156. package/dist-standalone/email-transport.d.ts +2 -2
  157. package/dist-standalone/email-transport.js +1 -232
  158. package/dist-standalone/envelope.js +1 -525
  159. package/dist-standalone/errors.d.ts +13 -3
  160. package/dist-standalone/errors.js +1 -896
  161. package/dist-standalone/event-emitter.js +1 -456
  162. package/dist-standalone/gateway-state.d.ts +1 -1
  163. package/dist-standalone/gateway-state.js +1 -51
  164. package/dist-standalone/gateway-transport.js +1 -116
  165. package/dist-standalone/graceful-degradation.js +1 -396
  166. package/dist-standalone/guardrails.js +1 -216
  167. package/dist-standalone/health-check.d.ts +5 -1
  168. package/dist-standalone/health-check.js +1 -332
  169. package/dist-standalone/http-compat.d.ts +1 -1
  170. package/dist-standalone/http-compat.js +1 -267
  171. package/dist-standalone/http-status-map.js +1 -561
  172. package/dist-standalone/identity.js +1 -619
  173. package/dist-standalone/index.d.ts +15 -4
  174. package/dist-standalone/index.js +1 -78
  175. package/dist-standalone/invitation.js +1 -415
  176. package/dist-standalone/invite.js +1 -324
  177. package/dist-standalone/key-agreement.js +1 -325
  178. package/dist-standalone/lazy-init.d.ts +11 -6
  179. package/dist-standalone/lazy-init.js +1 -295
  180. package/dist-standalone/logger.js +1 -285
  181. package/dist-standalone/loopback-transport.d.ts +87 -0
  182. package/dist-standalone/loopback-transport.js +1 -0
  183. package/dist-standalone/mdns-discovery.js +1 -195
  184. package/dist-standalone/nonce-store.js +1 -76
  185. package/dist-standalone/pairing-manager.js +1 -219
  186. package/dist-standalone/plugin-system.js +1 -257
  187. package/dist-standalone/plugins/logging.js +1 -163
  188. package/dist-standalone/plugins/metrics.d.ts +4 -4
  189. package/dist-standalone/plugins/metrics.js +1 -176
  190. package/dist-standalone/plugins/validation.js +1 -297
  191. package/dist-standalone/policy.js +1 -315
  192. package/dist-standalone/progress-callbacks.js +1 -576
  193. package/dist-standalone/redis-nonce-store.js +1 -72
  194. package/dist-standalone/registry-middleware.js +1 -47
  195. package/dist-standalone/retry-strategies.js +1 -534
  196. package/dist-standalone/retry-transport.js +1 -98
  197. package/dist-standalone/runtime/browser.js +1 -516
  198. package/dist-standalone/runtime/edge.js +1 -511
  199. package/dist-standalone/runtime/react-native.d.ts +1 -1
  200. package/dist-standalone/runtime/react-native.js +1 -383
  201. package/dist-standalone/security-policy.js +1 -239
  202. package/dist-standalone/serialization.js +1 -1031
  203. package/dist-standalone/split-channel.d.ts +1 -1
  204. package/dist-standalone/split-channel.js +1 -219
  205. package/dist-standalone/subscription-proof.js +1 -224
  206. package/dist-standalone/succession.js +1 -142
  207. package/dist-standalone/timeouts.js +1 -398
  208. package/dist-standalone/trace-context.js +1 -414
  209. package/dist-standalone/trace-spans.js +1 -488
  210. package/dist-standalone/transport.d.ts +1 -1
  211. package/dist-standalone/transport.js +1 -59
  212. package/dist-standalone/trust-registry.d.ts +3 -3
  213. package/dist-standalone/trust-registry.js +1 -950
  214. package/dist-standalone/types/error-response.js +1 -52
  215. package/dist-standalone/vault-auth.js +1 -174
  216. package/dist-standalone/vault-store-loader.d.ts +9 -0
  217. package/dist-standalone/vault-store-loader.js +1 -187
  218. package/dist-standalone/verify.js +1 -16
  219. package/dist-standalone/version-info.js +1 -530
  220. package/dist-standalone/xfetch.js +1 -335
  221. package/package.json +1 -1
  222. package/share1.dat +0 -0
@@ -1,424 +1 @@
1
- "use strict";
2
- /**
3
- * @module trace-context
4
- * W3C Trace Context implementation for distributed tracing
5
- *
6
- * Implements the W3C Trace Context specification for distributed tracing across
7
- * xBind agent operations, enabling correlation of requests across service boundaries.
8
- *
9
- * Standard: https://www.w3.org/TR/trace-context/
10
- *
11
- * Headers:
12
- * - `traceparent`: Required header with version, trace-id, parent-id, and trace-flags
13
- * - `tracestate`: Optional vendor-specific state
14
- *
15
- * Format: `{version}-{trace-id}-{parent-id}-{trace-flags}`
16
- * Example: `00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01`
17
- *
18
- * Usage:
19
- * ```typescript
20
- * import { TraceContext } from '@private.me/xbind';
21
- *
22
- * // Create a new trace context
23
- * const ctx = TraceContext.create();
24
- *
25
- * // Attach to request headers
26
- * const headers = new Headers();
27
- * ctx.inject(headers);
28
- *
29
- * // Extract from incoming headers
30
- * const incomingCtx = TraceContext.extract(headers);
31
- *
32
- * // Create child span
33
- * const childCtx = incomingCtx.createChild();
34
- * ```
35
- */
36
- Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.TraceContext = exports.TraceFlags = exports.TRACE_VERSION = exports.TRACESTATE_HEADER = exports.TRACEPARENT_HEADER = void 0;
38
- exports.generateTraceId = generateTraceId;
39
- exports.generateSpanId = generateSpanId;
40
- exports.validateTraceId = validateTraceId;
41
- exports.validateSpanId = validateSpanId;
42
- exports.parseTraceparent = parseTraceparent;
43
- exports.parseTracestate = parseTracestate;
44
- /**
45
- * W3C Trace Context specification constants
46
- */
47
- exports.TRACEPARENT_HEADER = 'traceparent';
48
- exports.TRACESTATE_HEADER = 'tracestate';
49
- /**
50
- * Trace context version (currently only 00 is supported)
51
- */
52
- exports.TRACE_VERSION = '00';
53
- /**
54
- * Trace flags
55
- */
56
- var TraceFlags;
57
- (function (TraceFlags) {
58
- /** Not sampled */
59
- TraceFlags[TraceFlags["NONE"] = 0] = "NONE";
60
- /** Sampled */
61
- TraceFlags[TraceFlags["SAMPLED"] = 1] = "SAMPLED";
62
- })(TraceFlags || (exports.TraceFlags = TraceFlags = {}));
63
- /**
64
- * W3C Trace Context implementation
65
- *
66
- * Represents a single point in a distributed trace with parent-child relationships.
67
- */
68
- class TraceContext {
69
- /** W3C version (always '00' for now) */
70
- version;
71
- /** Trace ID (32 hex characters, 16 bytes) */
72
- traceId;
73
- /** Parent span ID (16 hex characters, 8 bytes) */
74
- parentId;
75
- /** Trace flags (8-bit field) */
76
- traceFlags;
77
- /** Vendor-specific trace state */
78
- traceState;
79
- /**
80
- * Create a trace context
81
- *
82
- * @param traceId - 32-character hex trace ID
83
- * @param parentId - 16-character hex parent span ID
84
- * @param traceFlags - 8-bit trace flags
85
- * @param traceState - Optional vendor-specific state
86
- */
87
- constructor(traceId, parentId, traceFlags = TraceFlags.SAMPLED, traceState = []) {
88
- if (!validateTraceId(traceId)) {
89
- throw new Error(`Invalid trace ID: ${traceId}. Must be 32 hex characters.`);
90
- }
91
- if (!validateSpanId(parentId)) {
92
- throw new Error(`Invalid parent ID: ${parentId}. Must be 16 hex characters.`);
93
- }
94
- if (traceFlags < 0 || traceFlags > 255) {
95
- throw new Error(`Invalid trace flags: ${traceFlags}. Must be 0-255.`);
96
- }
97
- this.version = exports.TRACE_VERSION;
98
- this.traceId = traceId;
99
- this.parentId = parentId;
100
- this.traceFlags = traceFlags;
101
- this.traceState = traceState;
102
- }
103
- /**
104
- * Create a new root trace context
105
- *
106
- * Generates a new trace ID and parent ID for a new trace.
107
- *
108
- * @param sampled - Whether this trace should be sampled
109
- * @returns New trace context
110
- *
111
- * @example
112
- * ```typescript
113
- * const ctx = TraceContext.create();
114
- * console.log(ctx.traceId); // => "4bf92f3577b34da6a3ce929d0e0e4736"
115
- * ```
116
- */
117
- static create(sampled = true) {
118
- const traceId = generateTraceId();
119
- const parentId = generateSpanId();
120
- const flags = sampled ? TraceFlags.SAMPLED : TraceFlags.NONE;
121
- return new TraceContext(traceId, parentId, flags);
122
- }
123
- /**
124
- * Extract trace context from headers
125
- *
126
- * Parses the traceparent and tracestate headers according to W3C spec.
127
- *
128
- * @param headers - Headers object or plain object
129
- * @returns Trace context if found, null otherwise
130
- *
131
- * @example
132
- * ```typescript
133
- * const headers = new Headers({
134
- * traceparent: '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
135
- * });
136
- * const ctx = TraceContext.extract(headers);
137
- * ```
138
- */
139
- static extract(headers) {
140
- const traceparent = headers instanceof Headers
141
- ? headers.get(exports.TRACEPARENT_HEADER)
142
- : headers[exports.TRACEPARENT_HEADER];
143
- if (!traceparent)
144
- return null;
145
- const spec = parseTraceparent(traceparent);
146
- if (!spec)
147
- return null;
148
- // Extract tracestate
149
- const tracestateValue = headers instanceof Headers
150
- ? headers.get(exports.TRACESTATE_HEADER)
151
- : headers[exports.TRACESTATE_HEADER];
152
- const traceState = tracestateValue ? parseTracestate(tracestateValue) : [];
153
- return new TraceContext(spec.traceId, spec.parentId, spec.traceFlags, traceState);
154
- }
155
- /**
156
- * Inject trace context into headers
157
- *
158
- * Adds traceparent and tracestate headers to the provided headers object.
159
- *
160
- * @param headers - Headers to modify
161
- * @returns Modified headers
162
- *
163
- * @example
164
- * ```typescript
165
- * const ctx = TraceContext.create();
166
- * const headers = new Headers();
167
- * ctx.inject(headers);
168
- * ```
169
- */
170
- inject(headers) {
171
- const traceparent = this.toTraceparent();
172
- if (headers instanceof Headers) {
173
- headers.set(exports.TRACEPARENT_HEADER, traceparent);
174
- if (this.traceState.length > 0) {
175
- headers.set(exports.TRACESTATE_HEADER, this.toTracestate());
176
- }
177
- }
178
- else {
179
- headers[exports.TRACEPARENT_HEADER] = traceparent;
180
- if (this.traceState.length > 0) {
181
- headers[exports.TRACESTATE_HEADER] = this.toTracestate();
182
- }
183
- }
184
- return headers;
185
- }
186
- /**
187
- * Create a child trace context
188
- *
189
- * Generates a new parent ID (span ID) while keeping the same trace ID.
190
- * This represents a new span in the same trace.
191
- *
192
- * @param sampled - Override sampling decision (defaults to parent's decision)
193
- * @returns New child trace context
194
- *
195
- * @example
196
- * ```typescript
197
- * const parent = TraceContext.create();
198
- * const child = parent.createChild();
199
- * console.log(parent.traceId === child.traceId); // => true
200
- * console.log(parent.parentId === child.parentId); // => false
201
- * ```
202
- */
203
- createChild(sampled) {
204
- const newParentId = generateSpanId();
205
- const flags = sampled !== undefined
206
- ? (sampled ? TraceFlags.SAMPLED : TraceFlags.NONE)
207
- : this.traceFlags;
208
- return new TraceContext(this.traceId, newParentId, flags, this.traceState);
209
- }
210
- /**
211
- * Format as traceparent header value
212
- *
213
- * @returns traceparent string
214
- */
215
- toTraceparent() {
216
- const flags = this.traceFlags.toString(16).padStart(2, '0');
217
- return `${this.version}-${this.traceId}-${this.parentId}-${flags}`;
218
- }
219
- /**
220
- * Format as tracestate header value
221
- *
222
- * @returns tracestate string
223
- */
224
- toTracestate() {
225
- return this.traceState
226
- .map(({ key, value }) => `${key}=${value}`)
227
- .join(',');
228
- }
229
- /**
230
- * Check if this trace is sampled
231
- *
232
- * @returns True if sampled
233
- */
234
- isSampled() {
235
- return (this.traceFlags & TraceFlags.SAMPLED) === TraceFlags.SAMPLED;
236
- }
237
- /**
238
- * Add or update tracestate entry
239
- *
240
- * @param key - Vendor key (format: vendor[@system])
241
- * @param value - State value
242
- * @returns New trace context with updated state
243
- *
244
- * @example
245
- * ```typescript
246
- * const ctx = TraceContext.create();
247
- * const updated = ctx.withTracestate('private.me', 'did:key:z6Mk...');
248
- * ```
249
- */
250
- withTracestate(key, value) {
251
- const newState = this.traceState.filter((e) => e.key !== key);
252
- newState.unshift({ key, value });
253
- return new TraceContext(this.traceId, this.parentId, this.traceFlags, newState);
254
- }
255
- /**
256
- * Get tracestate value by key
257
- *
258
- * @param key - Vendor key
259
- * @returns State value or undefined
260
- */
261
- getTracestate(key) {
262
- const entry = this.traceState.find((e) => e.key === key);
263
- return entry?.value;
264
- }
265
- /**
266
- * Convert to plain object
267
- *
268
- * @returns Plain object representation
269
- */
270
- toObject() {
271
- return {
272
- version: this.version,
273
- traceId: this.traceId,
274
- parentId: this.parentId,
275
- traceFlags: this.traceFlags,
276
- traceState: [...this.traceState],
277
- sampled: this.isSampled(),
278
- };
279
- }
280
- }
281
- exports.TraceContext = TraceContext;
282
- /**
283
- * Generate a random trace ID (32 hex characters)
284
- *
285
- * @returns 32-character hex string
286
- */
287
- function generateTraceId() {
288
- return generateRandomHex(32);
289
- }
290
- /**
291
- * Generate a random span ID (16 hex characters)
292
- *
293
- * @returns 16-character hex string
294
- */
295
- function generateSpanId() {
296
- return generateRandomHex(16);
297
- }
298
- /**
299
- * Validate trace ID format
300
- *
301
- * @param traceId - Trace ID to validate
302
- * @returns True if valid
303
- */
304
- function validateTraceId(traceId) {
305
- if (typeof traceId !== 'string')
306
- return false;
307
- if (traceId.length !== 32)
308
- return false;
309
- if (!/^[a-f0-9]{32}$/.test(traceId))
310
- return false;
311
- // Trace ID must not be all zeros
312
- if (traceId === '00000000000000000000000000000000')
313
- return false;
314
- return true;
315
- }
316
- /**
317
- * Validate span ID format
318
- *
319
- * @param spanId - Span ID to validate
320
- * @returns True if valid
321
- */
322
- function validateSpanId(spanId) {
323
- if (typeof spanId !== 'string')
324
- return false;
325
- if (spanId.length !== 16)
326
- return false;
327
- if (!/^[a-f0-9]{16}$/.test(spanId))
328
- return false;
329
- // Span ID must not be all zeros
330
- if (spanId === '0000000000000000')
331
- return false;
332
- return true;
333
- }
334
- /**
335
- * Parse traceparent header value
336
- *
337
- * @param traceparent - Header value
338
- * @returns Parsed components or null if invalid
339
- */
340
- function parseTraceparent(traceparent) {
341
- if (typeof traceparent !== 'string')
342
- return null;
343
- const parts = traceparent.split('-');
344
- if (parts.length !== 4)
345
- return null;
346
- const [version, traceId, parentId, flagsStr] = parts;
347
- // Version validation
348
- if (version !== '00')
349
- return null;
350
- // Trace ID validation
351
- if (!validateTraceId(traceId ?? ''))
352
- return null;
353
- // Parent ID validation
354
- if (!validateSpanId(parentId ?? ''))
355
- return null;
356
- // Flags validation
357
- if (!flagsStr || flagsStr.length !== 2)
358
- return null;
359
- if (!/^[a-f0-9]{2}$/.test(flagsStr))
360
- return null;
361
- const traceFlags = parseInt(flagsStr, 16);
362
- return {
363
- version: version ?? '00',
364
- traceId: traceId ?? '',
365
- parentId: parentId ?? '',
366
- traceFlags,
367
- };
368
- }
369
- /**
370
- * Parse tracestate header value
371
- *
372
- * @param tracestate - Header value
373
- * @returns Array of key-value pairs
374
- */
375
- function parseTracestate(tracestate) {
376
- if (!tracestate)
377
- return [];
378
- const entries = [];
379
- const parts = tracestate.split(',');
380
- for (const part of parts) {
381
- const trimmed = part.trim();
382
- const eqIndex = trimmed.indexOf('=');
383
- if (eqIndex === -1)
384
- continue;
385
- const key = trimmed.substring(0, eqIndex).trim();
386
- const value = trimmed.substring(eqIndex + 1).trim();
387
- if (key && value) {
388
- entries.push({ key, value });
389
- }
390
- }
391
- return entries;
392
- }
393
- /**
394
- * Generate random hex string
395
- *
396
- * Uses Web Crypto API in browser, Node.js crypto in Node.
397
- *
398
- * @param length - Number of hex characters to generate
399
- * @returns Random hex string
400
- *
401
- * @internal
402
- */
403
- function generateRandomHex(length) {
404
- const bytes = Math.ceil(length / 2);
405
- // Try Web Crypto API (browser)
406
- if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
407
- const buffer = new Uint8Array(bytes);
408
- crypto.getRandomValues(buffer);
409
- return Array.from(buffer)
410
- .map((b) => b.toString(16).padStart(2, '0'))
411
- .join('')
412
- .substring(0, length);
413
- }
414
- // Try Node.js crypto
415
- try {
416
- const nodeCrypto = require('node:crypto');
417
- return nodeCrypto.randomBytes(bytes).toString('hex').substring(0, length);
418
- }
419
- catch {
420
- // SECURITY: Never fall back to Math.random() in production (OWASP violation)
421
- throw new Error('Cryptographic random generation unavailable. ' +
422
- 'Install crypto polyfill or use environment with crypto support.');
423
- }
424
- }
1
+ "use strict";var TraceFlags;Object.defineProperty(exports,"__esModule",{value:!0}),exports.TraceContext=exports.TraceFlags=exports.TRACE_VERSION=exports.TRACESTATE_HEADER=exports.TRACEPARENT_HEADER=void 0,exports.generateTraceId=generateTraceId,exports.generateSpanId=generateSpanId,exports.validateTraceId=validateTraceId,exports.validateSpanId=validateSpanId,exports.parseTraceparent=parseTraceparent,exports.parseTracestate=parseTracestate,exports.TRACEPARENT_HEADER="traceparent",exports.TRACESTATE_HEADER="tracestate",exports.TRACE_VERSION="00",function(t){t[t.NONE=0]="NONE",t[t.SAMPLED=1]="SAMPLED"}(TraceFlags||(exports.TraceFlags=TraceFlags={}));class TraceContext{version;traceId;parentId;traceFlags;traceState;constructor(t,e,r=TraceFlags.SAMPLED,a=[]){if(!validateTraceId(t))throw new Error(`Invalid trace ID: ${t}. Must be 32 hex characters.`);if(!validateSpanId(e))throw new Error(`Invalid parent ID: ${e}. Must be 16 hex characters.`);if(r<0||r>255)throw new Error(`Invalid trace flags: ${r}. Must be 0-255.`);this.version=exports.TRACE_VERSION,this.traceId=t,this.parentId=e,this.traceFlags=r,this.traceState=a}static create(t=!0){const e=generateTraceId(),r=generateSpanId(),a=t?TraceFlags.SAMPLED:TraceFlags.NONE;return new TraceContext(e,r,a)}static extract(t){const e=t instanceof Headers?t.get(exports.TRACEPARENT_HEADER):t[exports.TRACEPARENT_HEADER];if(!e)return null;const r=parseTraceparent(e);if(!r)return null;const a=t instanceof Headers?t.get(exports.TRACESTATE_HEADER):t[exports.TRACESTATE_HEADER],n=a?parseTracestate(a):[];return new TraceContext(r.traceId,r.parentId,r.traceFlags,n)}inject(t){const e=this.toTraceparent();return t instanceof Headers?(t.set(exports.TRACEPARENT_HEADER,e),this.traceState.length>0&&t.set(exports.TRACESTATE_HEADER,this.toTracestate())):(t[exports.TRACEPARENT_HEADER]=e,this.traceState.length>0&&(t[exports.TRACESTATE_HEADER]=this.toTracestate())),t}createChild(t){const e=generateSpanId(),r=void 0!==t?t?TraceFlags.SAMPLED:TraceFlags.NONE:this.traceFlags;return new TraceContext(this.traceId,e,r,this.traceState)}toTraceparent(){const t=this.traceFlags.toString(16).padStart(2,"0");return`${this.version}-${this.traceId}-${this.parentId}-${t}`}toTracestate(){return this.traceState.map(({key:t,value:e})=>`${t}=${e}`).join(",")}isSampled(){return(this.traceFlags&TraceFlags.SAMPLED)===TraceFlags.SAMPLED}withTracestate(t,e){const r=this.traceState.filter(e=>e.key!==t);return r.unshift({key:t,value:e}),new TraceContext(this.traceId,this.parentId,this.traceFlags,r)}getTracestate(t){const e=this.traceState.find(e=>e.key===t);return e?.value}toObject(){return{version:this.version,traceId:this.traceId,parentId:this.parentId,traceFlags:this.traceFlags,traceState:[...this.traceState],sampled:this.isSampled()}}}function generateTraceId(){return generateRandomHex(32)}function generateSpanId(){return generateRandomHex(16)}function validateTraceId(t){return"string"==typeof t&&(32===t.length&&(!!/^[a-f0-9]{32}$/.test(t)&&"00000000000000000000000000000000"!==t))}function validateSpanId(t){return"string"==typeof t&&(16===t.length&&(!!/^[a-f0-9]{16}$/.test(t)&&"0000000000000000"!==t))}function parseTraceparent(t){if("string"!=typeof t)return null;const e=t.split("-");if(4!==e.length)return null;const[r,a,n,s]=e;if("00"!==r)return null;if(!validateTraceId(a??""))return null;if(!validateSpanId(n??""))return null;if(!s||2!==s.length)return null;if(!/^[a-f0-9]{2}$/.test(s))return null;return{version:r??"00",traceId:a??"",parentId:n??"",traceFlags:parseInt(s,16)}}function parseTracestate(t){if(!t)return[];const e=[],r=t.split(",");for(const t of r){const r=t.trim(),a=r.indexOf("=");if(-1===a)continue;const n=r.substring(0,a).trim(),s=r.substring(a+1).trim();n&&s&&e.push({key:n,value:s})}return e}function generateRandomHex(t){const e=Math.ceil(t/2);if("undefined"!=typeof crypto&&crypto.getRandomValues){const r=new Uint8Array(e);return crypto.getRandomValues(r),Array.from(r).map(t=>t.toString(16).padStart(2,"0")).join("").substring(0,t)}try{return require("node:crypto").randomBytes(e).toString("hex").substring(0,t)}catch{throw new Error("Cryptographic random generation unavailable. Install crypto polyfill or use environment with crypto support.")}}exports.TraceContext=TraceContext;