@fatagnus/dink-sdk 2.0.3 → 2.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.
@@ -31,13 +31,30 @@ function extractEdgeKeyInfo(key) {
31
31
  edgeId: parts[4],
32
32
  };
33
33
  }
34
+ // Default quality thresholds
35
+ const DEFAULT_PING_INTERVAL_MS = 30000;
36
+ const DEFAULT_EXCELLENT_LATENCY_MS = 50;
37
+ const DEFAULT_GOOD_LATENCY_MS = 150;
38
+ const DEFAULT_FAIR_LATENCY_MS = 300;
39
+ const MAX_LATENCY_HISTORY = 10;
34
40
  export class EdgeClient {
35
41
  config;
36
42
  nc = null;
37
43
  services = new Map();
38
44
  heartbeatTimer = null;
45
+ pingTimer = null;
39
46
  appId;
40
47
  edgeId;
48
+ // Connection quality tracking
49
+ connectionState = 'disconnected';
50
+ lastLatencyMs = null;
51
+ lastPingAt = null;
52
+ latencyHistory = [];
53
+ messagesSent = 0;
54
+ messagesReceived = 0;
55
+ statsStartedAt = Date.now();
56
+ qualityCallbacks = new Set();
57
+ qualityConfig;
41
58
  constructor(config) {
42
59
  // Edge API key is required and must contain embedded app_id and edge_id
43
60
  if (!config.apiKey) {
@@ -53,8 +70,10 @@ export class EdgeClient {
53
70
  hostname: getHostname(),
54
71
  ...config,
55
72
  };
73
+ this.qualityConfig = config.qualityConfig ?? {};
56
74
  }
57
75
  async connect() {
76
+ this.setConnectionState('connecting');
58
77
  const opts = {
59
78
  servers: this.config.serverUrl,
60
79
  name: `edge-${this.edgeId}`,
@@ -64,12 +83,23 @@ export class EdgeClient {
64
83
  if (this.config.apiKey) {
65
84
  opts.token = this.config.apiKey;
66
85
  }
67
- this.nc = await connect(opts);
68
- await this.registerPresence();
69
- this.startHeartbeat();
86
+ try {
87
+ this.nc = await connect(opts);
88
+ this.setupConnectionHandlers();
89
+ await this.registerPresence();
90
+ this.startHeartbeat();
91
+ this.startPingTimer();
92
+ this.setConnectionState('connected');
93
+ this.statsStartedAt = Date.now();
94
+ }
95
+ catch (err) {
96
+ this.setConnectionState('disconnected');
97
+ throw err;
98
+ }
70
99
  }
71
100
  async disconnect() {
72
101
  this.stopHeartbeat();
102
+ this.stopPingTimer();
73
103
  for (const [name, svc] of this.services) {
74
104
  svc.sub.unsubscribe();
75
105
  await this.deregisterService(name);
@@ -80,6 +110,7 @@ export class EdgeClient {
80
110
  await this.nc.drain();
81
111
  this.nc = null;
82
112
  }
113
+ this.setConnectionState('disconnected');
83
114
  }
84
115
  async exposeService(handler) {
85
116
  if (!this.nc) {
@@ -126,7 +157,9 @@ export class EdgeClient {
126
157
  }
127
158
  },
128
159
  });
129
- this.services.set(def.name, { handler, sub });
160
+ // Extract descriptor if handler was created with ServiceBuilder
161
+ const descriptor = handler._descriptor;
162
+ this.services.set(def.name, { handler, sub, descriptor });
130
163
  await this.registerService(def);
131
164
  }
132
165
  async handleStreamRequest(handler, method, msg) {
@@ -182,6 +215,158 @@ export class EdgeClient {
182
215
  getAppId() {
183
216
  return this.appId;
184
217
  }
218
+ /**
219
+ * Get the ServiceDescriptor for an exposed service.
220
+ * Returns null if the service is not found.
221
+ * @param serviceName - The name of the service to describe
222
+ */
223
+ getServiceDescriptor(serviceName) {
224
+ const svc = this.services.get(serviceName);
225
+ if (!svc) {
226
+ return null;
227
+ }
228
+ // If we have a descriptor from ServiceBuilder, return it
229
+ if (svc.descriptor) {
230
+ return svc.descriptor;
231
+ }
232
+ // Otherwise, build a basic descriptor from the handler's definition
233
+ const def = svc.handler.definition();
234
+ const methods = def.methods.map((name) => ({ name }));
235
+ return {
236
+ name: def.name,
237
+ version: def.version,
238
+ methods,
239
+ };
240
+ }
241
+ /**
242
+ * Get current connection quality metrics.
243
+ */
244
+ getConnectionQuality() {
245
+ return this.buildQualitySnapshot();
246
+ }
247
+ /**
248
+ * Subscribe to connection quality changes.
249
+ * @param callback - Function called with updated quality metrics
250
+ * @returns Unsubscribe function
251
+ */
252
+ onConnectionQualityChange(callback) {
253
+ this.qualityCallbacks.add(callback);
254
+ // Emit current quality immediately
255
+ callback(this.buildQualitySnapshot());
256
+ return () => {
257
+ this.qualityCallbacks.delete(callback);
258
+ };
259
+ }
260
+ /**
261
+ * Ping the server and return round-trip latency in milliseconds.
262
+ */
263
+ async ping() {
264
+ if (!this.nc || !this.isConnected()) {
265
+ throw new Error('Not connected');
266
+ }
267
+ const start = performance.now();
268
+ await this.nc.flush();
269
+ const latency = performance.now() - start;
270
+ this.lastLatencyMs = latency;
271
+ this.lastPingAt = Date.now();
272
+ // Add to history
273
+ this.latencyHistory.push(latency);
274
+ if (this.latencyHistory.length > MAX_LATENCY_HISTORY) {
275
+ this.latencyHistory.shift();
276
+ }
277
+ this.emitQualityChange();
278
+ return latency;
279
+ }
280
+ setConnectionState(state) {
281
+ if (this.connectionState !== state) {
282
+ this.connectionState = state;
283
+ this.emitQualityChange();
284
+ }
285
+ }
286
+ calculateQualityLevel() {
287
+ if (this.connectionState !== 'connected') {
288
+ return 'unknown';
289
+ }
290
+ if (this.lastLatencyMs === null) {
291
+ return 'unknown';
292
+ }
293
+ const excellent = this.qualityConfig.excellentLatencyMs ?? DEFAULT_EXCELLENT_LATENCY_MS;
294
+ const good = this.qualityConfig.goodLatencyMs ?? DEFAULT_GOOD_LATENCY_MS;
295
+ const fair = this.qualityConfig.fairLatencyMs ?? DEFAULT_FAIR_LATENCY_MS;
296
+ if (this.lastLatencyMs <= excellent)
297
+ return 'excellent';
298
+ if (this.lastLatencyMs <= good)
299
+ return 'good';
300
+ if (this.lastLatencyMs <= fair)
301
+ return 'fair';
302
+ return 'poor';
303
+ }
304
+ calculateAvgLatency() {
305
+ if (this.latencyHistory.length === 0)
306
+ return null;
307
+ const sum = this.latencyHistory.reduce((a, b) => a + b, 0);
308
+ return sum / this.latencyHistory.length;
309
+ }
310
+ buildQualitySnapshot() {
311
+ const elapsedSeconds = (Date.now() - this.statsStartedAt) / 1000;
312
+ return {
313
+ state: this.connectionState,
314
+ latencyMs: this.lastLatencyMs,
315
+ avgLatencyMs: this.calculateAvgLatency(),
316
+ messagesSentPerSecond: elapsedSeconds > 0 ? this.messagesSent / elapsedSeconds : 0,
317
+ messagesReceivedPerSecond: elapsedSeconds > 0 ? this.messagesReceived / elapsedSeconds : 0,
318
+ totalMessagesSent: this.messagesSent,
319
+ totalMessagesReceived: this.messagesReceived,
320
+ lastPingAt: this.lastPingAt,
321
+ qualityLevel: this.calculateQualityLevel(),
322
+ };
323
+ }
324
+ emitQualityChange() {
325
+ const quality = this.buildQualitySnapshot();
326
+ for (const callback of this.qualityCallbacks) {
327
+ callback(quality);
328
+ }
329
+ }
330
+ setupConnectionHandlers() {
331
+ if (!this.nc)
332
+ return;
333
+ // Handle connection status changes
334
+ (async () => {
335
+ for await (const status of this.nc.status()) {
336
+ switch (status.type) {
337
+ case 'disconnect':
338
+ this.setConnectionState('reconnecting');
339
+ break;
340
+ case 'reconnect':
341
+ this.setConnectionState('connected');
342
+ break;
343
+ }
344
+ }
345
+ })().catch(() => {
346
+ // Status iterator ended
347
+ });
348
+ }
349
+ startPingTimer() {
350
+ const interval = this.qualityConfig.pingIntervalMs ?? DEFAULT_PING_INTERVAL_MS;
351
+ if (this.pingTimer || interval <= 0)
352
+ return;
353
+ this.pingTimer = setInterval(async () => {
354
+ if (this.isConnected()) {
355
+ try {
356
+ await this.ping();
357
+ }
358
+ catch {
359
+ // Ignore ping errors
360
+ }
361
+ }
362
+ }, interval);
363
+ }
364
+ stopPingTimer() {
365
+ if (this.pingTimer) {
366
+ clearInterval(this.pingTimer);
367
+ this.pingTimer = null;
368
+ }
369
+ }
185
370
  extractMethod(subject, serviceName) {
186
371
  const prefix = `edge.${this.appId}.${this.edgeId}.services.${serviceName}.`;
187
372
  if (subject.startsWith(prefix)) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/edge/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/edge/client.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export { EdgeClient } from './client.js';
2
+ export { ServiceBuilder } from './service-builder.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/edge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/edge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { EdgeClient } from './client.js';
2
+ export { ServiceBuilder } from './service-builder.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/edge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/edge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,102 @@
1
+ import type { ServiceDescriptor, MethodDescriptor, ServiceAIContext, MethodAIContext } from '../introspect.js';
2
+ import type { ServiceHandler } from '../types.js';
3
+ /**
4
+ * Method builder for fluent API to add AI context and examples to methods.
5
+ */
6
+ declare class MethodBuilder {
7
+ private methodDescriptor;
8
+ private parent;
9
+ constructor(parent: ServiceBuilder, name: string, description?: string);
10
+ /**
11
+ * Add AI context to this method.
12
+ */
13
+ withAI(aiContext: MethodAIContext): MethodBuilder;
14
+ /**
15
+ * Add a code example to this method.
16
+ */
17
+ withExample(language: string, code: string, description?: string): MethodBuilder;
18
+ /**
19
+ * Add another method to the service (returns to service builder context).
20
+ */
21
+ method(name: string, description?: string): MethodBuilder;
22
+ /**
23
+ * Build the final ServiceDescriptor.
24
+ */
25
+ build(): ServiceDescriptor;
26
+ /**
27
+ * Create a ServiceHandler from the builder with the given implementation.
28
+ */
29
+ toHandler(impl: Record<string, (data: unknown) => Promise<unknown>>): ServiceHandler & {
30
+ _descriptor: ServiceDescriptor;
31
+ };
32
+ /**
33
+ * Internal: Get the method descriptor.
34
+ */
35
+ _getDescriptor(): MethodDescriptor;
36
+ }
37
+ /**
38
+ * ServiceBuilder provides a fluent API for building ServiceDescriptor with AI context.
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const builder = new ServiceBuilder('SensorService', '1.0.0')
43
+ * .description('Manages sensor data')
44
+ * .withAI({
45
+ * overview: 'Service for reading and managing sensor data',
46
+ * capabilities: ['read temperature', 'set thresholds'],
47
+ * })
48
+ * .method('ReadTemperature', 'Reads current temperature')
49
+ * .withAI({ when_to_use: 'When you need current sensor readings' })
50
+ * .withExample('typescript', 'await sensor.readTemperature()', 'Basic usage')
51
+ * .method('SetThreshold')
52
+ * .withAI({ when_to_use: 'When you need to configure alerts' });
53
+ *
54
+ * const handler = builder.toHandler({
55
+ * ReadTemperature: async () => ({ value: 23.5 }),
56
+ * SetThreshold: async (data) => ({ success: true }),
57
+ * });
58
+ *
59
+ * await edge.exposeService(handler);
60
+ * ```
61
+ */
62
+ export declare class ServiceBuilder {
63
+ private descriptor;
64
+ private methodBuilders;
65
+ private currentMethodBuilder;
66
+ constructor(name: string, version: string);
67
+ /**
68
+ * Set the service description.
69
+ */
70
+ description(desc: string): ServiceBuilder;
71
+ /**
72
+ * Add AI context to the service.
73
+ */
74
+ withAI(aiContext: ServiceAIContext): ServiceBuilder;
75
+ /**
76
+ * Add a code example to the service.
77
+ */
78
+ withExample(language: string, code: string, description?: string): ServiceBuilder;
79
+ /**
80
+ * Add a related service.
81
+ */
82
+ relatedService(serviceName: string): ServiceBuilder;
83
+ /**
84
+ * Add a method to the service. Returns a MethodBuilder for fluent chaining.
85
+ */
86
+ method(name: string, description?: string): MethodBuilder;
87
+ /**
88
+ * Build the final ServiceDescriptor.
89
+ */
90
+ build(): ServiceDescriptor;
91
+ /**
92
+ * Create a ServiceHandler from the builder with the given implementation.
93
+ *
94
+ * @param impl - Object mapping method names to handler functions
95
+ * @returns A ServiceHandler that can be passed to EdgeClient.exposeService()
96
+ */
97
+ toHandler(impl: Record<string, (data: unknown) => Promise<unknown>>): ServiceHandler & {
98
+ _descriptor: ServiceDescriptor;
99
+ };
100
+ }
101
+ export {};
102
+ //# sourceMappingURL=service-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-builder.d.ts","sourceRoot":"","sources":["../../src/edge/service-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAErE;;GAEG;AACH,cAAM,aAAa;IACjB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAQtE;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,aAAa;IAKjD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa;IAQhF;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa;IAIzD;;OAEG;IACH,KAAK,IAAI,iBAAiB;IAI1B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,cAAc,GAAG;QAAE,WAAW,EAAE,iBAAiB,CAAA;KAAE;IAIzH;;OAEG;IACH,cAAc,IAAI,gBAAgB;CAGnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,oBAAoB,CAA8B;gBAE9C,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAOzC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAKzC;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,gBAAgB,GAAG,cAAc;IAKnD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,cAAc;IAQjF;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc;IAQnD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa;IASzD;;OAEG;IACH,KAAK,IAAI,iBAAiB;IAa1B;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,cAAc,GAAG;QAAE,WAAW,EAAE,iBAAiB,CAAA;KAAE;CAmC1H"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Method builder for fluent API to add AI context and examples to methods.
3
+ */
4
+ class MethodBuilder {
5
+ methodDescriptor;
6
+ parent;
7
+ constructor(parent, name, description) {
8
+ this.parent = parent;
9
+ this.methodDescriptor = {
10
+ name,
11
+ description,
12
+ };
13
+ }
14
+ /**
15
+ * Add AI context to this method.
16
+ */
17
+ withAI(aiContext) {
18
+ this.methodDescriptor.ai_context = aiContext;
19
+ return this;
20
+ }
21
+ /**
22
+ * Add a code example to this method.
23
+ */
24
+ withExample(language, code, description) {
25
+ if (!this.methodDescriptor.code_examples) {
26
+ this.methodDescriptor.code_examples = [];
27
+ }
28
+ this.methodDescriptor.code_examples.push({ language, code, description });
29
+ return this;
30
+ }
31
+ /**
32
+ * Add another method to the service (returns to service builder context).
33
+ */
34
+ method(name, description) {
35
+ return this.parent.method(name, description);
36
+ }
37
+ /**
38
+ * Build the final ServiceDescriptor.
39
+ */
40
+ build() {
41
+ return this.parent.build();
42
+ }
43
+ /**
44
+ * Create a ServiceHandler from the builder with the given implementation.
45
+ */
46
+ toHandler(impl) {
47
+ return this.parent.toHandler(impl);
48
+ }
49
+ /**
50
+ * Internal: Get the method descriptor.
51
+ */
52
+ _getDescriptor() {
53
+ return this.methodDescriptor;
54
+ }
55
+ }
56
+ /**
57
+ * ServiceBuilder provides a fluent API for building ServiceDescriptor with AI context.
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const builder = new ServiceBuilder('SensorService', '1.0.0')
62
+ * .description('Manages sensor data')
63
+ * .withAI({
64
+ * overview: 'Service for reading and managing sensor data',
65
+ * capabilities: ['read temperature', 'set thresholds'],
66
+ * })
67
+ * .method('ReadTemperature', 'Reads current temperature')
68
+ * .withAI({ when_to_use: 'When you need current sensor readings' })
69
+ * .withExample('typescript', 'await sensor.readTemperature()', 'Basic usage')
70
+ * .method('SetThreshold')
71
+ * .withAI({ when_to_use: 'When you need to configure alerts' });
72
+ *
73
+ * const handler = builder.toHandler({
74
+ * ReadTemperature: async () => ({ value: 23.5 }),
75
+ * SetThreshold: async (data) => ({ success: true }),
76
+ * });
77
+ *
78
+ * await edge.exposeService(handler);
79
+ * ```
80
+ */
81
+ export class ServiceBuilder {
82
+ descriptor;
83
+ methodBuilders = [];
84
+ currentMethodBuilder = null;
85
+ constructor(name, version) {
86
+ this.descriptor = {
87
+ name,
88
+ version,
89
+ };
90
+ }
91
+ /**
92
+ * Set the service description.
93
+ */
94
+ description(desc) {
95
+ this.descriptor.description = desc;
96
+ return this;
97
+ }
98
+ /**
99
+ * Add AI context to the service.
100
+ */
101
+ withAI(aiContext) {
102
+ this.descriptor.ai_context = aiContext;
103
+ return this;
104
+ }
105
+ /**
106
+ * Add a code example to the service.
107
+ */
108
+ withExample(language, code, description) {
109
+ if (!this.descriptor.code_examples) {
110
+ this.descriptor.code_examples = [];
111
+ }
112
+ this.descriptor.code_examples.push({ language, code, description });
113
+ return this;
114
+ }
115
+ /**
116
+ * Add a related service.
117
+ */
118
+ relatedService(serviceName) {
119
+ if (!this.descriptor.related_services) {
120
+ this.descriptor.related_services = [];
121
+ }
122
+ this.descriptor.related_services.push(serviceName);
123
+ return this;
124
+ }
125
+ /**
126
+ * Add a method to the service. Returns a MethodBuilder for fluent chaining.
127
+ */
128
+ method(name, description) {
129
+ // Finalize previous method builder if any
130
+ if (this.currentMethodBuilder) {
131
+ this.methodBuilders.push(this.currentMethodBuilder);
132
+ }
133
+ this.currentMethodBuilder = new MethodBuilder(this, name, description);
134
+ return this.currentMethodBuilder;
135
+ }
136
+ /**
137
+ * Build the final ServiceDescriptor.
138
+ */
139
+ build() {
140
+ // Finalize current method builder
141
+ if (this.currentMethodBuilder) {
142
+ this.methodBuilders.push(this.currentMethodBuilder);
143
+ this.currentMethodBuilder = null;
144
+ }
145
+ // Build methods array from method builders
146
+ this.descriptor.methods = this.methodBuilders.map((mb) => mb._getDescriptor());
147
+ return { ...this.descriptor };
148
+ }
149
+ /**
150
+ * Create a ServiceHandler from the builder with the given implementation.
151
+ *
152
+ * @param impl - Object mapping method names to handler functions
153
+ * @returns A ServiceHandler that can be passed to EdgeClient.exposeService()
154
+ */
155
+ toHandler(impl) {
156
+ const descriptor = this.build();
157
+ const methodNames = descriptor.methods?.map((m) => m.name) || [];
158
+ const definition = {
159
+ name: descriptor.name,
160
+ version: descriptor.version,
161
+ methods: methodNames,
162
+ };
163
+ return {
164
+ _descriptor: descriptor,
165
+ definition() {
166
+ return definition;
167
+ },
168
+ async handleRequest(method, data) {
169
+ const handler = impl[method];
170
+ if (!handler) {
171
+ throw new Error(`Method ${method} not implemented`);
172
+ }
173
+ let input;
174
+ try {
175
+ input = JSON.parse(new TextDecoder().decode(data));
176
+ }
177
+ catch {
178
+ input = {};
179
+ }
180
+ const result = await handler(input);
181
+ return new TextEncoder().encode(JSON.stringify(result));
182
+ },
183
+ };
184
+ }
185
+ }
186
+ //# sourceMappingURL=service-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-builder.js","sourceRoot":"","sources":["../../src/edge/service-builder.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,aAAa;IACT,gBAAgB,CAAmB;IACnC,MAAM,CAAiB;IAE/B,YAAY,MAAsB,EAAE,IAAY,EAAE,WAAoB;QACpE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG;YACtB,IAAI;YACJ,WAAW;SACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAA0B;QAC/B,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,SAAS,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAgB,EAAE,IAAY,EAAE,WAAoB;QAC9D,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,EAAE,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY,EAAE,WAAoB;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAyD;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,cAAc;IACjB,UAAU,CAAoB;IAC9B,cAAc,GAAoB,EAAE,CAAC;IACrC,oBAAoB,GAAyB,IAAI,CAAC;IAE1D,YAAY,IAAY,EAAE,OAAe;QACvC,IAAI,CAAC,UAAU,GAAG;YAChB,IAAI;YACJ,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY;QACtB,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAA2B;QAChC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAgB,EAAE,IAAY,EAAE,WAAoB;QAC9D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,EAAE,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,WAAmB;QAChC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,EAAE,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY,EAAE,WAAoB;QACvC,0CAA0C;QAC1C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,oBAAoB,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,kCAAkC;QAClC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACpD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACnC,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAE/E,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,IAAyD;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAEjE,MAAM,UAAU,GAAsB;YACpC,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,OAAO,EAAE,WAAW;SACrB,CAAC;QAEF,OAAO;YACL,WAAW,EAAE,UAAU;YAEvB,UAAU;gBACR,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,IAAgB;gBAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,kBAAkB,CAAC,CAAC;gBACtD,CAAC;gBAED,IAAI,KAAc,CAAC;gBACnB,IAAI,CAAC;oBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrD,CAAC;gBAAC,MAAM,CAAC;oBACP,KAAK,GAAG,EAAE,CAAC;gBACb,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1D,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  export * from './types.js';
2
+ export * from './introspect.js';
3
+ export * from './introspect-utils.js';
2
4
  export { EdgeClient } from './edge/client.js';
3
5
  export { CenterClient } from './center/client.js';
6
+ export type { ConnectionQuality, ConnectionQualityLevel, ConnectionQualityConfig, ConnectionState, } from './types.js';
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,GAChB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  export * from './types.js';
2
+ export * from './introspect.js';
3
+ export * from './introspect-utils.js';
2
4
  export { EdgeClient } from './edge/client.js';
3
5
  export { CenterClient } from './center/client.js';
4
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}