@tracewayapp/opamp 0.0.0-stage → 2.0.0-beta.1

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/dist/index.js ADDED
@@ -0,0 +1,618 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ AgentCapabilities: () => AgentCapabilities,
24
+ AgentToServerFlags: () => AgentToServerFlags,
25
+ OpampHttpClient: () => OpampHttpClient,
26
+ RemoteConfigStatus: () => RemoteConfigStatus,
27
+ ServerErrorType: () => ServerErrorType,
28
+ ServerToAgentFlags: () => ServerToAgentFlags,
29
+ decodeServerToAgent: () => decodeServerToAgent,
30
+ encodeAgentToServer: () => encodeAgentToServer,
31
+ encodeServerToAgent: () => encodeServerToAgent,
32
+ uuidString: () => uuidString
33
+ });
34
+ module.exports = __toCommonJS(index_exports);
35
+
36
+ // src/wire.ts
37
+ var WIRE_VARINT = 0;
38
+ var WIRE_FIXED64 = 1;
39
+ var WIRE_LENGTH = 2;
40
+ var WIRE_FIXED32 = 5;
41
+ var encoder = new TextEncoder();
42
+ var decoder = new TextDecoder();
43
+ var Writer = class _Writer {
44
+ chunks = [];
45
+ varint(value) {
46
+ let v = Math.max(0, Math.floor(value));
47
+ while (v >= 128) {
48
+ this.chunks.push(v % 128 | 128);
49
+ v = Math.floor(v / 128);
50
+ }
51
+ this.chunks.push(v);
52
+ return this;
53
+ }
54
+ tag(field, wireType) {
55
+ return this.varint(field * 8 + wireType);
56
+ }
57
+ uint(field, value) {
58
+ if (value === 0) return this;
59
+ return this.tag(field, WIRE_VARINT).varint(value);
60
+ }
61
+ bool(field, value) {
62
+ return value ? this.tag(field, WIRE_VARINT).varint(1) : this;
63
+ }
64
+ bytes(field, value) {
65
+ if (value.length === 0) return this;
66
+ this.tag(field, WIRE_LENGTH).varint(value.length);
67
+ for (const b of value) this.chunks.push(b);
68
+ return this;
69
+ }
70
+ string(field, value) {
71
+ return this.bytes(field, encoder.encode(value));
72
+ }
73
+ double(field, value) {
74
+ if (value === 0) return this;
75
+ const buf = new DataView(new ArrayBuffer(8));
76
+ buf.setFloat64(0, value, true);
77
+ this.tag(field, WIRE_FIXED64);
78
+ for (let i = 0; i < 8; i++) this.chunks.push(buf.getUint8(i));
79
+ return this;
80
+ }
81
+ /** Writes a nested message. An empty message is still written when `always` is set (presence matters). */
82
+ message(field, build, always = false) {
83
+ const inner = new _Writer();
84
+ build(inner);
85
+ const bytes = inner.finish();
86
+ if (bytes.length === 0 && !always) return this;
87
+ this.tag(field, WIRE_LENGTH).varint(bytes.length);
88
+ for (const b of bytes) this.chunks.push(b);
89
+ return this;
90
+ }
91
+ finish() {
92
+ return Uint8Array.from(this.chunks);
93
+ }
94
+ };
95
+ var Reader = class {
96
+ constructor(buf) {
97
+ this.buf = buf;
98
+ }
99
+ buf;
100
+ pos = 0;
101
+ done() {
102
+ return this.pos >= this.buf.length;
103
+ }
104
+ varint() {
105
+ let result = 0;
106
+ let multiplier = 1;
107
+ for (; ; ) {
108
+ if (this.pos >= this.buf.length) throw new Error("truncated varint");
109
+ const byte = this.buf[this.pos++];
110
+ result += (byte & 127) * multiplier;
111
+ if (byte < 128) return result;
112
+ multiplier *= 128;
113
+ if (multiplier > 2 ** 70) throw new Error("varint too long");
114
+ }
115
+ }
116
+ tag() {
117
+ const tag = this.varint();
118
+ return { field: Math.floor(tag / 8), wireType: tag % 8 };
119
+ }
120
+ bytes() {
121
+ const length = this.varint();
122
+ if (this.pos + length > this.buf.length) throw new Error("truncated field");
123
+ const out = this.buf.subarray(this.pos, this.pos + length);
124
+ this.pos += length;
125
+ return out;
126
+ }
127
+ string() {
128
+ return decoder.decode(this.bytes());
129
+ }
130
+ double() {
131
+ if (this.pos + 8 > this.buf.length) throw new Error("truncated double");
132
+ const view = new DataView(this.buf.buffer, this.buf.byteOffset + this.pos, 8);
133
+ this.pos += 8;
134
+ return view.getFloat64(0, true);
135
+ }
136
+ skip(wireType) {
137
+ switch (wireType) {
138
+ case WIRE_VARINT:
139
+ this.varint();
140
+ return;
141
+ case WIRE_FIXED64:
142
+ this.pos += 8;
143
+ return;
144
+ case WIRE_LENGTH:
145
+ this.bytes();
146
+ return;
147
+ case WIRE_FIXED32:
148
+ this.pos += 4;
149
+ return;
150
+ }
151
+ throw new Error(`unsupported wire type ${wireType}`);
152
+ }
153
+ };
154
+
155
+ // src/messages.ts
156
+ var AgentCapabilities = {
157
+ ReportsStatus: 1,
158
+ AcceptsRemoteConfig: 2,
159
+ ReportsEffectiveConfig: 4,
160
+ ReportsHealth: 2048,
161
+ ReportsRemoteConfig: 4096,
162
+ ReportsHeartbeat: 8192
163
+ };
164
+ var AgentToServerFlags = { RequestInstanceUid: 1 };
165
+ var ServerToAgentFlags = { ReportFullState: 1 };
166
+ var RemoteConfigStatus = /* @__PURE__ */ ((RemoteConfigStatus2) => {
167
+ RemoteConfigStatus2[RemoteConfigStatus2["Unset"] = 0] = "Unset";
168
+ RemoteConfigStatus2[RemoteConfigStatus2["Applied"] = 1] = "Applied";
169
+ RemoteConfigStatus2[RemoteConfigStatus2["Applying"] = 2] = "Applying";
170
+ RemoteConfigStatus2[RemoteConfigStatus2["Failed"] = 3] = "Failed";
171
+ return RemoteConfigStatus2;
172
+ })(RemoteConfigStatus || {});
173
+ var ServerErrorType = /* @__PURE__ */ ((ServerErrorType2) => {
174
+ ServerErrorType2[ServerErrorType2["Unknown"] = 0] = "Unknown";
175
+ ServerErrorType2[ServerErrorType2["BadRequest"] = 1] = "BadRequest";
176
+ ServerErrorType2[ServerErrorType2["Unavailable"] = 2] = "Unavailable";
177
+ return ServerErrorType2;
178
+ })(ServerErrorType || {});
179
+ function writeAnyValue(w, value) {
180
+ if (typeof value === "string") {
181
+ w.string(1, value);
182
+ } else if (typeof value === "boolean") {
183
+ w.bool(2, value);
184
+ } else if (typeof value === "number") {
185
+ if (Number.isInteger(value) && value >= 0) {
186
+ if (value !== 0) w.tag(3, WIRE_VARINT).varint(value);
187
+ } else {
188
+ w.double(4, value);
189
+ }
190
+ } else {
191
+ w.message(5, (array) => {
192
+ for (const item of value) array.message(1, (v) => v.string(1, item), true);
193
+ });
194
+ }
195
+ }
196
+ function writeAttributes(w, field, attrs) {
197
+ for (const [key, value] of Object.entries(attrs)) {
198
+ w.message(field, (kv) => {
199
+ kv.string(1, key);
200
+ kv.message(2, (v) => writeAnyValue(v, value), true);
201
+ });
202
+ }
203
+ }
204
+ function encodeAgentToServer(msg) {
205
+ const w = new Writer();
206
+ w.bytes(1, msg.instanceUid);
207
+ w.uint(2, msg.sequenceNum);
208
+ if (msg.agentDescription) {
209
+ const description = msg.agentDescription;
210
+ w.message(3, (d) => {
211
+ writeAttributes(d, 1, description.identifying);
212
+ writeAttributes(d, 2, description.nonIdentifying);
213
+ });
214
+ }
215
+ w.uint(4, msg.capabilities);
216
+ if (msg.remoteConfigStatus) {
217
+ const status = msg.remoteConfigStatus;
218
+ w.message(7, (s) => {
219
+ s.bytes(1, status.lastRemoteConfigHash);
220
+ s.uint(2, status.status);
221
+ if (status.errorMessage) s.string(3, status.errorMessage);
222
+ });
223
+ }
224
+ if (msg.agentDisconnect) w.message(9, () => {
225
+ }, true);
226
+ w.uint(10, msg.flags ?? 0);
227
+ if (msg.customCapabilities?.length) {
228
+ const capabilities = msg.customCapabilities;
229
+ w.message(12, (c) => {
230
+ for (const capability of capabilities) c.string(1, capability);
231
+ });
232
+ }
233
+ return w.finish();
234
+ }
235
+ function each(buf, handle) {
236
+ const r = new Reader(buf);
237
+ while (!r.done()) {
238
+ const { field, wireType } = r.tag();
239
+ if (!handle(field, wireType, r)) r.skip(wireType);
240
+ }
241
+ }
242
+ function decodeConfigObject(buf) {
243
+ const object = { body: new Uint8Array(), contentType: "" };
244
+ each(buf, (field, wireType, r) => {
245
+ if (wireType !== WIRE_LENGTH) return false;
246
+ if (field === 1) object.body = r.bytes().slice();
247
+ else if (field === 2) object.contentType = r.string();
248
+ else return false;
249
+ return true;
250
+ });
251
+ return object;
252
+ }
253
+ function decodeRemoteConfig(buf) {
254
+ const config = { configMap: {}, configHash: new Uint8Array() };
255
+ each(buf, (field, wireType, r) => {
256
+ if (wireType !== WIRE_LENGTH) return false;
257
+ if (field === 2) {
258
+ config.configHash = r.bytes().slice();
259
+ return true;
260
+ }
261
+ if (field !== 1) return false;
262
+ each(r.bytes(), (mapField, mapWire, mapReader) => {
263
+ if (mapField !== 1 || mapWire !== WIRE_LENGTH) return false;
264
+ let key = "";
265
+ let value = { body: new Uint8Array(), contentType: "" };
266
+ each(mapReader.bytes(), (entryField, entryWire, entryReader) => {
267
+ if (entryWire !== WIRE_LENGTH) return false;
268
+ if (entryField === 1) key = entryReader.string();
269
+ else if (entryField === 2) value = decodeConfigObject(entryReader.bytes());
270
+ else return false;
271
+ return true;
272
+ });
273
+ config.configMap[key] = value;
274
+ return true;
275
+ });
276
+ return true;
277
+ });
278
+ return config;
279
+ }
280
+ function decodeServerToAgent(buf) {
281
+ const msg = { flags: 0, capabilities: 0 };
282
+ each(buf, (field, wireType, r) => {
283
+ switch (field) {
284
+ case 1:
285
+ if (wireType !== WIRE_LENGTH) return false;
286
+ msg.instanceUid = r.bytes().slice();
287
+ return true;
288
+ case 2: {
289
+ if (wireType !== WIRE_LENGTH) return false;
290
+ const error = { type: 0 /* Unknown */, message: "" };
291
+ each(r.bytes(), (f, w, er) => {
292
+ if (f === 1 && w === WIRE_VARINT) error.type = er.varint();
293
+ else if (f === 2 && w === WIRE_LENGTH) error.message = er.string();
294
+ else if (f === 3 && w === WIRE_LENGTH) {
295
+ each(er.bytes(), (rf, rw, rr) => {
296
+ if (rf !== 1 || rw !== WIRE_VARINT) return false;
297
+ error.retryAfterMs = rr.varint() / 1e6;
298
+ return true;
299
+ });
300
+ } else return false;
301
+ return true;
302
+ });
303
+ msg.errorResponse = error;
304
+ return true;
305
+ }
306
+ case 3:
307
+ if (wireType !== WIRE_LENGTH) return false;
308
+ msg.remoteConfig = decodeRemoteConfig(r.bytes());
309
+ return true;
310
+ case 4:
311
+ if (wireType !== WIRE_LENGTH) return false;
312
+ each(r.bytes(), (f, w, cr) => {
313
+ if (f !== 2 || w !== WIRE_LENGTH) return false;
314
+ each(cr.bytes(), (of, ow, or) => {
315
+ if (of !== 4 || ow !== WIRE_VARINT) return false;
316
+ msg.heartbeatIntervalSeconds = or.varint();
317
+ return true;
318
+ });
319
+ return true;
320
+ });
321
+ return true;
322
+ case 6:
323
+ if (wireType !== WIRE_VARINT) return false;
324
+ msg.flags = r.varint();
325
+ return true;
326
+ case 7:
327
+ if (wireType !== WIRE_VARINT) return false;
328
+ msg.capabilities = r.varint();
329
+ return true;
330
+ case 8:
331
+ if (wireType !== WIRE_LENGTH) return false;
332
+ each(r.bytes(), (f, w, ir) => {
333
+ if (f !== 1 || w !== WIRE_LENGTH) return false;
334
+ msg.newInstanceUid = ir.bytes().slice();
335
+ return true;
336
+ });
337
+ return true;
338
+ case 11: {
339
+ if (wireType !== WIRE_LENGTH) return false;
340
+ const custom = { capability: "", type: "", data: new Uint8Array() };
341
+ each(r.bytes(), (f, w, cr) => {
342
+ if (w !== WIRE_LENGTH) return false;
343
+ if (f === 1) custom.capability = cr.string();
344
+ else if (f === 2) custom.type = cr.string();
345
+ else if (f === 3) custom.data = cr.bytes().slice();
346
+ else return false;
347
+ return true;
348
+ });
349
+ msg.customMessage = custom;
350
+ return true;
351
+ }
352
+ }
353
+ return false;
354
+ });
355
+ return msg;
356
+ }
357
+ function encodeServerToAgent(msg) {
358
+ const w = new Writer();
359
+ if (msg.instanceUid) w.bytes(1, msg.instanceUid);
360
+ if (msg.remoteConfig) {
361
+ const config = msg.remoteConfig;
362
+ w.message(3, (rc) => {
363
+ rc.message(1, (map) => {
364
+ for (const [key, object] of Object.entries(config.configMap)) {
365
+ map.message(1, (entry) => {
366
+ entry.string(1, key);
367
+ entry.message(2, (o) => o.bytes(1, object.body).string(2, object.contentType), true);
368
+ });
369
+ }
370
+ });
371
+ rc.bytes(2, config.configHash);
372
+ });
373
+ }
374
+ if (msg.heartbeatIntervalSeconds) {
375
+ const seconds = msg.heartbeatIntervalSeconds;
376
+ w.message(4, (cs) => cs.message(2, (o) => o.uint(4, seconds)));
377
+ }
378
+ w.uint(6, msg.flags);
379
+ w.uint(7, msg.capabilities);
380
+ if (msg.newInstanceUid) w.message(8, (id) => id.bytes(1, msg.newInstanceUid));
381
+ return w.finish();
382
+ }
383
+
384
+ // src/client.ts
385
+ var MIN_POLL_INTERVAL_MS = 3e4;
386
+ var MAX_BACKOFF_MS = 30 * 6e4;
387
+ var FIRST_BACKOFF_MS = 3e4;
388
+ function uuidString(bytes) {
389
+ const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join(
390
+ ""
391
+ );
392
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
393
+ }
394
+ function sameBytes(a, b) {
395
+ if (!a || !b || a.length !== b.length) return false;
396
+ return a.every((v, i) => v === b[i]);
397
+ }
398
+ var OpampHttpClient = class {
399
+ constructor(options) {
400
+ this.options = options;
401
+ this.uid = options.instanceUid;
402
+ this.intervalMs = Math.max(
403
+ options.defaultPollIntervalMs ?? 3e5,
404
+ MIN_POLL_INTERVAL_MS
405
+ );
406
+ this.fetchImpl = options.fetchImpl ?? ((...args) => fetch(...args));
407
+ if (options.appliedConfigHash?.length) {
408
+ this.status = {
409
+ lastRemoteConfigHash: options.appliedConfigHash,
410
+ status: 1 /* Applied */
411
+ };
412
+ }
413
+ }
414
+ options;
415
+ uid;
416
+ sequenceNum = 0;
417
+ status;
418
+ intervalMs;
419
+ backoffMs = 0;
420
+ timer = null;
421
+ inFlight = null;
422
+ stopped = true;
423
+ lastPollAt = 0;
424
+ fetchImpl;
425
+ start() {
426
+ if (!this.stopped) return;
427
+ this.stopped = false;
428
+ void this.poll();
429
+ }
430
+ stop() {
431
+ this.stopped = true;
432
+ if (this.timer !== null) {
433
+ clearTimeout(this.timer);
434
+ this.timer = null;
435
+ }
436
+ }
437
+ pollIntervalMs() {
438
+ return this.intervalMs;
439
+ }
440
+ millisSinceLastPoll() {
441
+ return this.lastPollAt === 0 ? Infinity : Date.now() - this.lastPollAt;
442
+ }
443
+ /** Polls now unless a poll is running or the client is backing off after an error. */
444
+ poll() {
445
+ if (this.stopped) return Promise.resolve();
446
+ if (this.inFlight) return this.inFlight;
447
+ if (this.backoffMs > 0 && this.timer !== null) return Promise.resolve();
448
+ if (this.timer !== null) {
449
+ clearTimeout(this.timer);
450
+ this.timer = null;
451
+ }
452
+ this.inFlight = this.exchange().finally(() => {
453
+ this.inFlight = null;
454
+ });
455
+ return this.inFlight;
456
+ }
457
+ /** Polls with the current description even if a poll is under way, e.g. right after a targeting attribute changed. */
458
+ async refresh() {
459
+ if (this.inFlight) await this.inFlight;
460
+ await this.poll();
461
+ }
462
+ schedule(delayMs) {
463
+ if (this.stopped) return;
464
+ if (this.timer !== null) clearTimeout(this.timer);
465
+ this.timer = setTimeout(() => {
466
+ this.timer = null;
467
+ void this.poll();
468
+ }, delayMs);
469
+ }
470
+ async exchange() {
471
+ const controller = new AbortController();
472
+ const timer = setTimeout(
473
+ () => controller.abort(),
474
+ this.options.requestTimeoutMs ?? 1e4
475
+ );
476
+ try {
477
+ await this.exchangeWithSignal(controller.signal);
478
+ } finally {
479
+ clearTimeout(timer);
480
+ }
481
+ }
482
+ async exchangeWithSignal(signal) {
483
+ this.lastPollAt = Date.now();
484
+ let response;
485
+ try {
486
+ response = await this.send(
487
+ {
488
+ instanceUid: this.uid,
489
+ sequenceNum: this.sequenceNum++,
490
+ agentDescription: this.options.describe(),
491
+ capabilities: this.options.capabilities,
492
+ remoteConfigStatus: this.status,
493
+ customCapabilities: this.options.customCapabilities
494
+ },
495
+ signal
496
+ );
497
+ } catch {
498
+ this.options.onUnavailable?.();
499
+ this.backOff(null);
500
+ return;
501
+ }
502
+ if (response.status === 404 || response.status === 405 || response.status === 501) {
503
+ this.stop();
504
+ this.options.onUnsupported?.();
505
+ return;
506
+ }
507
+ if (response.status === 401 || response.status === 403) {
508
+ this.stop();
509
+ this.options.onUnauthorized?.();
510
+ return;
511
+ }
512
+ if (response.status === 413) {
513
+ this.backoffMs = 0;
514
+ this.schedule(this.intervalMs);
515
+ return;
516
+ }
517
+ let message = null;
518
+ try {
519
+ message = decodeServerToAgent(
520
+ new Uint8Array(await response.arrayBuffer())
521
+ );
522
+ } catch {
523
+ message = null;
524
+ }
525
+ if (response.status === 429 || response.status >= 500 || message?.errorResponse?.type === 2 /* Unavailable */) {
526
+ const header = Number(response.headers.get("Retry-After"));
527
+ const retryAfter = Number.isFinite(header) && header > 0 ? header * 1e3 : message?.errorResponse?.retryAfterMs ?? null;
528
+ this.backOff(retryAfter);
529
+ return;
530
+ }
531
+ if (!response.ok || !message) {
532
+ this.backOff(null);
533
+ return;
534
+ }
535
+ if (this.stopped) return;
536
+ this.backoffMs = 0;
537
+ this.options.onConnected?.();
538
+ this.handle(message);
539
+ }
540
+ handle(message) {
541
+ if (message.newInstanceUid?.length === 16) {
542
+ this.uid = message.newInstanceUid;
543
+ this.options.onInstanceUidChange?.(this.uid);
544
+ }
545
+ if (message.heartbeatIntervalSeconds) {
546
+ const next = Math.max(
547
+ message.heartbeatIntervalSeconds * 1e3,
548
+ MIN_POLL_INTERVAL_MS
549
+ );
550
+ if (next !== this.intervalMs) {
551
+ this.intervalMs = next;
552
+ this.options.onHeartbeatChange?.(message.heartbeatIntervalSeconds);
553
+ }
554
+ }
555
+ let reportNow = false;
556
+ if (message.remoteConfig && !sameBytes(
557
+ message.remoteConfig.configHash,
558
+ this.status?.lastRemoteConfigHash
559
+ )) {
560
+ let result;
561
+ try {
562
+ result = this.options.onRemoteConfig(message.remoteConfig);
563
+ } catch (err) {
564
+ result = {
565
+ applied: false,
566
+ errorMessage: err instanceof Error ? err.message : String(err)
567
+ };
568
+ }
569
+ this.status = result.applied ? {
570
+ lastRemoteConfigHash: message.remoteConfig.configHash,
571
+ status: 1 /* Applied */
572
+ } : {
573
+ lastRemoteConfigHash: message.remoteConfig.configHash,
574
+ status: 3 /* Failed */,
575
+ errorMessage: result.errorMessage
576
+ };
577
+ reportNow = true;
578
+ }
579
+ if (reportNow || (message.flags & ServerToAgentFlags.ReportFullState) !== 0) {
580
+ this.schedule(0);
581
+ return;
582
+ }
583
+ this.schedule(this.intervalMs);
584
+ }
585
+ backOff(retryAfterMs) {
586
+ this.backoffMs = retryAfterMs ?? Math.min(
587
+ this.backoffMs > 0 ? this.backoffMs * 2 : FIRST_BACKOFF_MS,
588
+ MAX_BACKOFF_MS
589
+ );
590
+ this.schedule(Math.max(this.backoffMs, 1e3));
591
+ }
592
+ send(message, signal) {
593
+ return this.fetchImpl(this.options.endpoint, {
594
+ method: "POST",
595
+ signal,
596
+ headers: {
597
+ ...this.options.headers,
598
+ "Content-Type": "application/x-protobuf",
599
+ "OpAMP-Instance-UID": uuidString(this.uid)
600
+ },
601
+ body: encodeAgentToServer(message)
602
+ });
603
+ }
604
+ };
605
+ // Annotate the CommonJS export names for ESM import in node:
606
+ 0 && (module.exports = {
607
+ AgentCapabilities,
608
+ AgentToServerFlags,
609
+ OpampHttpClient,
610
+ RemoteConfigStatus,
611
+ ServerErrorType,
612
+ ServerToAgentFlags,
613
+ decodeServerToAgent,
614
+ encodeAgentToServer,
615
+ encodeServerToAgent,
616
+ uuidString
617
+ });
618
+ //# sourceMappingURL=index.js.map