@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.
- package/dist/center/client.d.ts +75 -1
- package/dist/center/client.d.ts.map +1 -1
- package/dist/center/client.js +361 -3
- package/dist/center/client.js.map +1 -1
- package/dist/edge/client.d.ts +40 -1
- package/dist/edge/client.d.ts.map +1 -1
- package/dist/edge/client.js +189 -4
- package/dist/edge/client.js.map +1 -1
- package/dist/edge/index.d.ts +1 -0
- package/dist/edge/index.d.ts.map +1 -1
- package/dist/edge/index.js +1 -0
- package/dist/edge/index.js.map +1 -1
- package/dist/edge/service-builder.d.ts +102 -0
- package/dist/edge/service-builder.d.ts.map +1 -0
- package/dist/edge/service-builder.js +186 -0
- package/dist/edge/service-builder.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/introspect-utils.d.ts +55 -0
- package/dist/introspect-utils.d.ts.map +1 -0
- package/dist/introspect-utils.js +372 -0
- package/dist/introspect-utils.js.map +1 -0
- package/dist/introspect.d.ts +87 -0
- package/dist/introspect.d.ts.map +1 -0
- package/dist/introspect.js +7 -0
- package/dist/introspect.js.map +1 -0
- package/dist/types.d.ts +45 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/center/client.d.ts
CHANGED
|
@@ -1,17 +1,91 @@
|
|
|
1
|
-
import type { CenterConfig, EdgeInfo, DiscoverOptions, CallOptions, Subscription, ServiceCaller } from '../types.js';
|
|
1
|
+
import type { CenterConfig, EdgeInfo, DiscoverOptions, CallOptions, Subscription, ServiceCaller, ConnectionQuality } from '../types.js';
|
|
2
|
+
import type { ServiceDescriptor, MethodDescriptor } from '../introspect.js';
|
|
2
3
|
export declare class CenterClient implements ServiceCaller {
|
|
3
4
|
private config;
|
|
4
5
|
private nc;
|
|
5
6
|
private appId;
|
|
7
|
+
private connectionState;
|
|
8
|
+
private lastLatencyMs;
|
|
9
|
+
private lastPingAt;
|
|
10
|
+
private latencyHistory;
|
|
11
|
+
private messagesSent;
|
|
12
|
+
private messagesReceived;
|
|
13
|
+
private statsStartedAt;
|
|
14
|
+
private qualityCallbacks;
|
|
15
|
+
private qualityConfig;
|
|
16
|
+
private pingTimer;
|
|
6
17
|
constructor(config: CenterConfig);
|
|
7
18
|
connect(): Promise<void>;
|
|
8
19
|
close(): Promise<void>;
|
|
9
20
|
isConnected(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Get current connection quality metrics.
|
|
23
|
+
*/
|
|
24
|
+
getConnectionQuality(): ConnectionQuality;
|
|
25
|
+
/**
|
|
26
|
+
* Subscribe to connection quality changes.
|
|
27
|
+
* @param callback - Function called with updated quality metrics
|
|
28
|
+
* @returns Unsubscribe function
|
|
29
|
+
*/
|
|
30
|
+
onConnectionQualityChange(callback: (quality: ConnectionQuality) => void): () => void;
|
|
31
|
+
/**
|
|
32
|
+
* Ping the server and return round-trip latency in milliseconds.
|
|
33
|
+
*/
|
|
34
|
+
ping(): Promise<number>;
|
|
35
|
+
private setConnectionState;
|
|
36
|
+
private calculateQualityLevel;
|
|
37
|
+
private calculateAvgLatency;
|
|
38
|
+
private buildQualitySnapshot;
|
|
39
|
+
private emitQualityChange;
|
|
40
|
+
private setupConnectionHandlers;
|
|
41
|
+
private startPingTimer;
|
|
42
|
+
private stopPingTimer;
|
|
10
43
|
discoverEdges(opts?: DiscoverOptions): Promise<EdgeInfo[]>;
|
|
11
44
|
listEdges(): Promise<EdgeInfo[]>;
|
|
12
45
|
call<Req, Resp>(edgeId: string, service: string, method: string, req: Req, opts?: CallOptions): Promise<Resp>;
|
|
13
46
|
subscribe<Req, Resp>(edgeId: string, service: string, method: string, req: Req, handler: (resp: Resp) => void): Promise<Subscription>;
|
|
14
47
|
private delay;
|
|
15
48
|
private getAuthHeaders;
|
|
49
|
+
/**
|
|
50
|
+
* Describe a service by name, returning its ServiceDescriptor.
|
|
51
|
+
* @param serviceName - The name or ID of the service to describe
|
|
52
|
+
* @returns Promise resolving to the ServiceDescriptor
|
|
53
|
+
*/
|
|
54
|
+
describeService(serviceName: string): Promise<ServiceDescriptor>;
|
|
55
|
+
/**
|
|
56
|
+
* Describe a specific method of a service, returning its MethodDescriptor.
|
|
57
|
+
* @param serviceName - The name or ID of the service
|
|
58
|
+
* @param methodName - The name of the method to describe
|
|
59
|
+
* @returns Promise resolving to the MethodDescriptor
|
|
60
|
+
*/
|
|
61
|
+
describeMethod(serviceName: string, methodName: string): Promise<MethodDescriptor>;
|
|
62
|
+
/**
|
|
63
|
+
* Get LLM-friendly context (llm.txt format) for specified services.
|
|
64
|
+
* @param serviceNames - A single service name or array of service names
|
|
65
|
+
* @returns Promise resolving to llm.txt formatted string
|
|
66
|
+
*/
|
|
67
|
+
getLLMContext(serviceNames: string | string[]): Promise<string>;
|
|
68
|
+
/**
|
|
69
|
+
* Get LLM-friendly context (llm.txt format) for all registered services.
|
|
70
|
+
* @returns Promise resolving to llm.txt formatted string
|
|
71
|
+
*/
|
|
72
|
+
getAllLLMContext(): Promise<string>;
|
|
73
|
+
/**
|
|
74
|
+
* List all services with their full ServiceDescriptors.
|
|
75
|
+
* @returns Promise resolving to array of ServiceDescriptors
|
|
76
|
+
*/
|
|
77
|
+
listServicesWithDescriptions(): Promise<ServiceDescriptor[]>;
|
|
78
|
+
/**
|
|
79
|
+
* Internal helper to list services from the API.
|
|
80
|
+
*/
|
|
81
|
+
private listServicesInternal;
|
|
82
|
+
/**
|
|
83
|
+
* Internal helper to get descriptors for a list of services.
|
|
84
|
+
*/
|
|
85
|
+
private getDescriptorsForServices;
|
|
86
|
+
/**
|
|
87
|
+
* Internal helper to format ServiceDescriptors as llm.txt.
|
|
88
|
+
*/
|
|
89
|
+
private formatAsLLMTxt;
|
|
16
90
|
}
|
|
17
91
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/center/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/center/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAoE,MAAM,aAAa,CAAC;AAC1M,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAW5E,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,EAAE,CAA+B;IACzC,OAAO,CAAC,KAAK,CAAS;IAGtB,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,gBAAgB,CAAmD;IAC3E,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAA+C;gBAEpD,MAAM,EAAE,YAAY;IAW1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,oBAAoB,IAAI,iBAAiB;IAIzC;;;;OAIG;IACH,yBAAyB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI;IASrF;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAsB7B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,aAAa;IAOf,aAAa,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA0C9D,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IA2BhC,IAAI,CAAC,GAAG,EAAE,IAAI,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,IAAI,CAAC;IAoDV,SAAS,CAAC,GAAG,EAAE,IAAI,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAC5B,OAAO,CAAC,YAAY,CAAC;IAyDxB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,cAAc;IAatB;;;;OAIG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4BtE;;;;;OAKG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+BxF;;;;OAIG;IACG,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBrE;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAUzC;;;OAGG;IACG,4BAA4B,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IASlE;;OAEG;YACW,oBAAoB;IAoBlC;;OAEG;YACW,yBAAyB;IAsBvC;;OAEG;IACH,OAAO,CAAC,cAAc;CAgEvB"}
|
package/dist/center/client.js
CHANGED
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
import { connect, StringCodec, createInbox, headers } from 'nats';
|
|
2
2
|
const sc = StringCodec();
|
|
3
|
+
// Default quality thresholds
|
|
4
|
+
const DEFAULT_PING_INTERVAL_MS = 30000;
|
|
5
|
+
const DEFAULT_EXCELLENT_LATENCY_MS = 50;
|
|
6
|
+
const DEFAULT_GOOD_LATENCY_MS = 150;
|
|
7
|
+
const DEFAULT_FAIR_LATENCY_MS = 300;
|
|
8
|
+
const MAX_LATENCY_HISTORY = 10;
|
|
3
9
|
export class CenterClient {
|
|
4
10
|
config;
|
|
5
11
|
nc = null;
|
|
6
12
|
appId;
|
|
13
|
+
// Connection quality tracking
|
|
14
|
+
connectionState = 'disconnected';
|
|
15
|
+
lastLatencyMs = null;
|
|
16
|
+
lastPingAt = null;
|
|
17
|
+
latencyHistory = [];
|
|
18
|
+
messagesSent = 0;
|
|
19
|
+
messagesReceived = 0;
|
|
20
|
+
statsStartedAt = Date.now();
|
|
21
|
+
qualityCallbacks = new Set();
|
|
22
|
+
qualityConfig;
|
|
23
|
+
pingTimer = null;
|
|
7
24
|
constructor(config) {
|
|
8
25
|
this.config = {
|
|
9
26
|
timeout: 30000,
|
|
@@ -12,8 +29,10 @@ export class CenterClient {
|
|
|
12
29
|
...config,
|
|
13
30
|
};
|
|
14
31
|
this.appId = config.appId || 'platform';
|
|
32
|
+
this.qualityConfig = config.qualityConfig ?? {};
|
|
15
33
|
}
|
|
16
34
|
async connect() {
|
|
35
|
+
this.setConnectionState('connecting');
|
|
17
36
|
const opts = {
|
|
18
37
|
servers: this.config.serverUrl,
|
|
19
38
|
name: 'center-sdk',
|
|
@@ -23,17 +42,158 @@ export class CenterClient {
|
|
|
23
42
|
if (this.config.apiKey) {
|
|
24
43
|
opts.token = this.config.apiKey;
|
|
25
44
|
}
|
|
26
|
-
|
|
45
|
+
try {
|
|
46
|
+
this.nc = await connect(opts);
|
|
47
|
+
this.setupConnectionHandlers();
|
|
48
|
+
this.startPingTimer();
|
|
49
|
+
this.setConnectionState('connected');
|
|
50
|
+
this.statsStartedAt = Date.now();
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
this.setConnectionState('disconnected');
|
|
54
|
+
throw err;
|
|
55
|
+
}
|
|
27
56
|
}
|
|
28
57
|
async close() {
|
|
58
|
+
this.stopPingTimer();
|
|
29
59
|
if (this.nc) {
|
|
30
60
|
await this.nc.drain();
|
|
31
61
|
this.nc = null;
|
|
32
62
|
}
|
|
63
|
+
this.setConnectionState('disconnected');
|
|
33
64
|
}
|
|
34
65
|
isConnected() {
|
|
35
66
|
return this.nc !== null && !this.nc.isClosed();
|
|
36
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Get current connection quality metrics.
|
|
70
|
+
*/
|
|
71
|
+
getConnectionQuality() {
|
|
72
|
+
return this.buildQualitySnapshot();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Subscribe to connection quality changes.
|
|
76
|
+
* @param callback - Function called with updated quality metrics
|
|
77
|
+
* @returns Unsubscribe function
|
|
78
|
+
*/
|
|
79
|
+
onConnectionQualityChange(callback) {
|
|
80
|
+
this.qualityCallbacks.add(callback);
|
|
81
|
+
// Emit current quality immediately
|
|
82
|
+
callback(this.buildQualitySnapshot());
|
|
83
|
+
return () => {
|
|
84
|
+
this.qualityCallbacks.delete(callback);
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Ping the server and return round-trip latency in milliseconds.
|
|
89
|
+
*/
|
|
90
|
+
async ping() {
|
|
91
|
+
if (!this.nc || !this.isConnected()) {
|
|
92
|
+
throw new Error('Not connected');
|
|
93
|
+
}
|
|
94
|
+
const start = performance.now();
|
|
95
|
+
await this.nc.flush();
|
|
96
|
+
const latency = performance.now() - start;
|
|
97
|
+
this.lastLatencyMs = latency;
|
|
98
|
+
this.lastPingAt = Date.now();
|
|
99
|
+
// Add to history
|
|
100
|
+
this.latencyHistory.push(latency);
|
|
101
|
+
if (this.latencyHistory.length > MAX_LATENCY_HISTORY) {
|
|
102
|
+
this.latencyHistory.shift();
|
|
103
|
+
}
|
|
104
|
+
this.emitQualityChange();
|
|
105
|
+
return latency;
|
|
106
|
+
}
|
|
107
|
+
setConnectionState(state) {
|
|
108
|
+
if (this.connectionState !== state) {
|
|
109
|
+
this.connectionState = state;
|
|
110
|
+
this.emitQualityChange();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
calculateQualityLevel() {
|
|
114
|
+
if (this.connectionState !== 'connected') {
|
|
115
|
+
return 'unknown';
|
|
116
|
+
}
|
|
117
|
+
if (this.lastLatencyMs === null) {
|
|
118
|
+
return 'unknown';
|
|
119
|
+
}
|
|
120
|
+
const excellent = this.qualityConfig.excellentLatencyMs ?? DEFAULT_EXCELLENT_LATENCY_MS;
|
|
121
|
+
const good = this.qualityConfig.goodLatencyMs ?? DEFAULT_GOOD_LATENCY_MS;
|
|
122
|
+
const fair = this.qualityConfig.fairLatencyMs ?? DEFAULT_FAIR_LATENCY_MS;
|
|
123
|
+
if (this.lastLatencyMs <= excellent)
|
|
124
|
+
return 'excellent';
|
|
125
|
+
if (this.lastLatencyMs <= good)
|
|
126
|
+
return 'good';
|
|
127
|
+
if (this.lastLatencyMs <= fair)
|
|
128
|
+
return 'fair';
|
|
129
|
+
return 'poor';
|
|
130
|
+
}
|
|
131
|
+
calculateAvgLatency() {
|
|
132
|
+
if (this.latencyHistory.length === 0)
|
|
133
|
+
return null;
|
|
134
|
+
const sum = this.latencyHistory.reduce((a, b) => a + b, 0);
|
|
135
|
+
return sum / this.latencyHistory.length;
|
|
136
|
+
}
|
|
137
|
+
buildQualitySnapshot() {
|
|
138
|
+
const elapsedSeconds = (Date.now() - this.statsStartedAt) / 1000;
|
|
139
|
+
return {
|
|
140
|
+
state: this.connectionState,
|
|
141
|
+
latencyMs: this.lastLatencyMs,
|
|
142
|
+
avgLatencyMs: this.calculateAvgLatency(),
|
|
143
|
+
messagesSentPerSecond: elapsedSeconds > 0 ? this.messagesSent / elapsedSeconds : 0,
|
|
144
|
+
messagesReceivedPerSecond: elapsedSeconds > 0 ? this.messagesReceived / elapsedSeconds : 0,
|
|
145
|
+
totalMessagesSent: this.messagesSent,
|
|
146
|
+
totalMessagesReceived: this.messagesReceived,
|
|
147
|
+
lastPingAt: this.lastPingAt,
|
|
148
|
+
qualityLevel: this.calculateQualityLevel(),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
emitQualityChange() {
|
|
152
|
+
const quality = this.buildQualitySnapshot();
|
|
153
|
+
for (const callback of this.qualityCallbacks) {
|
|
154
|
+
callback(quality);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
setupConnectionHandlers() {
|
|
158
|
+
if (!this.nc)
|
|
159
|
+
return;
|
|
160
|
+
// Handle connection status changes
|
|
161
|
+
(async () => {
|
|
162
|
+
for await (const status of this.nc.status()) {
|
|
163
|
+
switch (status.type) {
|
|
164
|
+
case 'disconnect':
|
|
165
|
+
this.setConnectionState('reconnecting');
|
|
166
|
+
break;
|
|
167
|
+
case 'reconnect':
|
|
168
|
+
this.setConnectionState('connected');
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
})().catch(() => {
|
|
173
|
+
// Status iterator ended
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
startPingTimer() {
|
|
177
|
+
const interval = this.qualityConfig.pingIntervalMs ?? DEFAULT_PING_INTERVAL_MS;
|
|
178
|
+
if (this.pingTimer || interval <= 0)
|
|
179
|
+
return;
|
|
180
|
+
this.pingTimer = setInterval(async () => {
|
|
181
|
+
if (this.isConnected()) {
|
|
182
|
+
try {
|
|
183
|
+
await this.ping();
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// Ignore ping errors
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}, interval);
|
|
190
|
+
}
|
|
191
|
+
stopPingTimer() {
|
|
192
|
+
if (this.pingTimer) {
|
|
193
|
+
clearInterval(this.pingTimer);
|
|
194
|
+
this.pingTimer = null;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
37
197
|
async discoverEdges(opts = {}) {
|
|
38
198
|
if (!this.nc) {
|
|
39
199
|
throw new Error('Not connected');
|
|
@@ -84,8 +244,20 @@ export class CenterClient {
|
|
|
84
244
|
await this.delay(retryDelay);
|
|
85
245
|
}
|
|
86
246
|
try {
|
|
247
|
+
this.messagesSent++;
|
|
87
248
|
const msg = await this.nc.request(subject, sc.encode(JSON.stringify(req)), { timeout, headers: this.getAuthHeaders() });
|
|
88
|
-
|
|
249
|
+
this.messagesReceived++;
|
|
250
|
+
const rawResp = JSON.parse(sc.decode(msg.data));
|
|
251
|
+
// Check for error response from edge
|
|
252
|
+
if (rawResp.success === false && rawResp.error) {
|
|
253
|
+
throw new Error(`${rawResp.error.code}: ${rawResp.error.message}`);
|
|
254
|
+
}
|
|
255
|
+
// Unwrap the result field (edge wraps responses in { result: ... })
|
|
256
|
+
if (rawResp.result !== undefined) {
|
|
257
|
+
return rawResp.result;
|
|
258
|
+
}
|
|
259
|
+
// Fallback for responses that don't use the wrapper format
|
|
260
|
+
return rawResp;
|
|
89
261
|
}
|
|
90
262
|
catch (e) {
|
|
91
263
|
lastError = e instanceof Error ? e : new Error(String(e));
|
|
@@ -113,7 +285,14 @@ export class CenterClient {
|
|
|
113
285
|
if (err || unsubscribed)
|
|
114
286
|
return;
|
|
115
287
|
try {
|
|
116
|
-
const
|
|
288
|
+
const rawResp = JSON.parse(sc.decode(msg.data));
|
|
289
|
+
// Check for error response from edge
|
|
290
|
+
if (rawResp.success === false && rawResp.error) {
|
|
291
|
+
unsubscribe();
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
// Unwrap the result field (edge wraps responses in { result: ... })
|
|
295
|
+
const resp = rawResp.result !== undefined ? rawResp.result : rawResp;
|
|
117
296
|
handler(resp);
|
|
118
297
|
}
|
|
119
298
|
catch {
|
|
@@ -143,5 +322,184 @@ export class CenterClient {
|
|
|
143
322
|
h.set('Authorization', `Bearer ${this.config.apiKey}`);
|
|
144
323
|
return h;
|
|
145
324
|
}
|
|
325
|
+
// ========================================
|
|
326
|
+
// Introspection Methods
|
|
327
|
+
// ========================================
|
|
328
|
+
/**
|
|
329
|
+
* Describe a service by name, returning its ServiceDescriptor.
|
|
330
|
+
* @param serviceName - The name or ID of the service to describe
|
|
331
|
+
* @returns Promise resolving to the ServiceDescriptor
|
|
332
|
+
*/
|
|
333
|
+
async describeService(serviceName) {
|
|
334
|
+
if (!this.nc) {
|
|
335
|
+
throw new Error('Not connected');
|
|
336
|
+
}
|
|
337
|
+
if (!serviceName) {
|
|
338
|
+
throw new Error('service name is required');
|
|
339
|
+
}
|
|
340
|
+
const req = { service_id: serviceName };
|
|
341
|
+
const msg = await this.nc.request('$API.SERVICES.DESCRIBE', sc.encode(JSON.stringify(req)), { timeout: this.config.timeout ?? 30000, headers: this.getAuthHeaders() });
|
|
342
|
+
const resp = JSON.parse(sc.decode(msg.data));
|
|
343
|
+
if (!resp.success && resp.error) {
|
|
344
|
+
throw new Error(`${resp.error.code}: ${resp.error.message}`);
|
|
345
|
+
}
|
|
346
|
+
return resp.data;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Describe a specific method of a service, returning its MethodDescriptor.
|
|
350
|
+
* @param serviceName - The name or ID of the service
|
|
351
|
+
* @param methodName - The name of the method to describe
|
|
352
|
+
* @returns Promise resolving to the MethodDescriptor
|
|
353
|
+
*/
|
|
354
|
+
async describeMethod(serviceName, methodName) {
|
|
355
|
+
if (!this.nc) {
|
|
356
|
+
throw new Error('Not connected');
|
|
357
|
+
}
|
|
358
|
+
if (!serviceName) {
|
|
359
|
+
throw new Error('service name is required');
|
|
360
|
+
}
|
|
361
|
+
if (!methodName) {
|
|
362
|
+
throw new Error('method name is required');
|
|
363
|
+
}
|
|
364
|
+
const req = { service_id: serviceName, method_name: methodName };
|
|
365
|
+
const msg = await this.nc.request('$API.SERVICES.DESCRIBE_METHOD', sc.encode(JSON.stringify(req)), { timeout: this.config.timeout ?? 30000, headers: this.getAuthHeaders() });
|
|
366
|
+
const resp = JSON.parse(sc.decode(msg.data));
|
|
367
|
+
if (!resp.success && resp.error) {
|
|
368
|
+
throw new Error(`${resp.error.code}: ${resp.error.message}`);
|
|
369
|
+
}
|
|
370
|
+
return resp.data;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Get LLM-friendly context (llm.txt format) for specified services.
|
|
374
|
+
* @param serviceNames - A single service name or array of service names
|
|
375
|
+
* @returns Promise resolving to llm.txt formatted string
|
|
376
|
+
*/
|
|
377
|
+
async getLLMContext(serviceNames) {
|
|
378
|
+
if (!this.nc) {
|
|
379
|
+
throw new Error('Not connected');
|
|
380
|
+
}
|
|
381
|
+
const names = Array.isArray(serviceNames) ? serviceNames : [serviceNames];
|
|
382
|
+
const services = await this.listServicesInternal();
|
|
383
|
+
// Filter services by name
|
|
384
|
+
const serviceNameSet = new Set(names);
|
|
385
|
+
const filteredServices = services.filter((svc) => serviceNameSet.has(svc.name) || serviceNameSet.has(svc.id));
|
|
386
|
+
// Get descriptors and format as LLM text
|
|
387
|
+
const descriptors = await this.getDescriptorsForServices(filteredServices);
|
|
388
|
+
return this.formatAsLLMTxt(descriptors);
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Get LLM-friendly context (llm.txt format) for all registered services.
|
|
392
|
+
* @returns Promise resolving to llm.txt formatted string
|
|
393
|
+
*/
|
|
394
|
+
async getAllLLMContext() {
|
|
395
|
+
if (!this.nc) {
|
|
396
|
+
throw new Error('Not connected');
|
|
397
|
+
}
|
|
398
|
+
const services = await this.listServicesInternal();
|
|
399
|
+
const descriptors = await this.getDescriptorsForServices(services);
|
|
400
|
+
return this.formatAsLLMTxt(descriptors);
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* List all services with their full ServiceDescriptors.
|
|
404
|
+
* @returns Promise resolving to array of ServiceDescriptors
|
|
405
|
+
*/
|
|
406
|
+
async listServicesWithDescriptions() {
|
|
407
|
+
if (!this.nc) {
|
|
408
|
+
throw new Error('Not connected');
|
|
409
|
+
}
|
|
410
|
+
const services = await this.listServicesInternal();
|
|
411
|
+
return this.getDescriptorsForServices(services);
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Internal helper to list services from the API.
|
|
415
|
+
*/
|
|
416
|
+
async listServicesInternal() {
|
|
417
|
+
const msg = await this.nc.request('$API.SERVICES.LIST', new Uint8Array(), { timeout: this.config.timeout ?? 30000, headers: this.getAuthHeaders() });
|
|
418
|
+
const resp = JSON.parse(sc.decode(msg.data));
|
|
419
|
+
if (!resp.success && resp.error) {
|
|
420
|
+
throw new Error(`${resp.error.code}: ${resp.error.message}`);
|
|
421
|
+
}
|
|
422
|
+
return resp.data || [];
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Internal helper to get descriptors for a list of services.
|
|
426
|
+
*/
|
|
427
|
+
async getDescriptorsForServices(services) {
|
|
428
|
+
const descriptors = [];
|
|
429
|
+
for (const svc of services) {
|
|
430
|
+
try {
|
|
431
|
+
const desc = await this.describeService(svc.id);
|
|
432
|
+
descriptors.push(desc);
|
|
433
|
+
}
|
|
434
|
+
catch {
|
|
435
|
+
// If we can't get descriptor, build basic one from service info
|
|
436
|
+
descriptors.push({
|
|
437
|
+
name: svc.name,
|
|
438
|
+
version: svc.version,
|
|
439
|
+
description: svc.description,
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
return descriptors;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Internal helper to format ServiceDescriptors as llm.txt.
|
|
447
|
+
*/
|
|
448
|
+
formatAsLLMTxt(descriptors) {
|
|
449
|
+
const parts = [];
|
|
450
|
+
for (const desc of descriptors) {
|
|
451
|
+
const lines = [];
|
|
452
|
+
lines.push(`# ${desc.name} v${desc.version}`);
|
|
453
|
+
lines.push('');
|
|
454
|
+
if (desc.description) {
|
|
455
|
+
lines.push(desc.description);
|
|
456
|
+
lines.push('');
|
|
457
|
+
}
|
|
458
|
+
if (desc.ai_context?.overview) {
|
|
459
|
+
lines.push('## Overview');
|
|
460
|
+
lines.push('');
|
|
461
|
+
lines.push(desc.ai_context.overview);
|
|
462
|
+
lines.push('');
|
|
463
|
+
}
|
|
464
|
+
if (desc.ai_context?.capabilities && desc.ai_context.capabilities.length > 0) {
|
|
465
|
+
lines.push('## Capabilities');
|
|
466
|
+
lines.push('');
|
|
467
|
+
for (const cap of desc.ai_context.capabilities) {
|
|
468
|
+
lines.push(`- ${cap}`);
|
|
469
|
+
}
|
|
470
|
+
lines.push('');
|
|
471
|
+
}
|
|
472
|
+
if (desc.ai_context?.limitations && desc.ai_context.limitations.length > 0) {
|
|
473
|
+
lines.push('## Limitations');
|
|
474
|
+
lines.push('');
|
|
475
|
+
for (const lim of desc.ai_context.limitations) {
|
|
476
|
+
lines.push(`- ${lim}`);
|
|
477
|
+
}
|
|
478
|
+
lines.push('');
|
|
479
|
+
}
|
|
480
|
+
if (desc.methods && desc.methods.length > 0) {
|
|
481
|
+
lines.push('## Methods');
|
|
482
|
+
lines.push('');
|
|
483
|
+
for (const method of desc.methods) {
|
|
484
|
+
lines.push(`### ${method.name}`);
|
|
485
|
+
lines.push('');
|
|
486
|
+
if (method.description) {
|
|
487
|
+
lines.push(method.description);
|
|
488
|
+
lines.push('');
|
|
489
|
+
}
|
|
490
|
+
if (method.ai_context?.when_to_use) {
|
|
491
|
+
lines.push(`**When to use:** ${method.ai_context.when_to_use}`);
|
|
492
|
+
lines.push('');
|
|
493
|
+
}
|
|
494
|
+
if (method.ai_context?.how_to_use) {
|
|
495
|
+
lines.push(`**How to use:** ${method.ai_context.how_to_use}`);
|
|
496
|
+
lines.push('');
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
parts.push(lines.join('\n'));
|
|
501
|
+
}
|
|
502
|
+
return parts.join('\n---\n\n');
|
|
503
|
+
}
|
|
146
504
|
}
|
|
147
505
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/center/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/center/client.ts"],"names":[],"mappings":"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"}
|
package/dist/edge/client.d.ts
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
|
-
import type { EdgeConfig, ServiceHandler } from '../types.js';
|
|
1
|
+
import type { EdgeConfig, ServiceHandler, ConnectionQuality } from '../types.js';
|
|
2
|
+
import type { ServiceDescriptor } from '../introspect.js';
|
|
2
3
|
export declare class EdgeClient {
|
|
3
4
|
private config;
|
|
4
5
|
private nc;
|
|
5
6
|
private services;
|
|
6
7
|
private heartbeatTimer;
|
|
8
|
+
private pingTimer;
|
|
7
9
|
private appId;
|
|
8
10
|
private edgeId;
|
|
11
|
+
private connectionState;
|
|
12
|
+
private lastLatencyMs;
|
|
13
|
+
private lastPingAt;
|
|
14
|
+
private latencyHistory;
|
|
15
|
+
private messagesSent;
|
|
16
|
+
private messagesReceived;
|
|
17
|
+
private statsStartedAt;
|
|
18
|
+
private qualityCallbacks;
|
|
19
|
+
private qualityConfig;
|
|
9
20
|
constructor(config: EdgeConfig);
|
|
10
21
|
connect(): Promise<void>;
|
|
11
22
|
disconnect(): Promise<void>;
|
|
@@ -17,6 +28,34 @@ export declare class EdgeClient {
|
|
|
17
28
|
getEdgeId(): string;
|
|
18
29
|
/** Returns the app ID (extracted from the API key) */
|
|
19
30
|
getAppId(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Get the ServiceDescriptor for an exposed service.
|
|
33
|
+
* Returns null if the service is not found.
|
|
34
|
+
* @param serviceName - The name of the service to describe
|
|
35
|
+
*/
|
|
36
|
+
getServiceDescriptor(serviceName: string): ServiceDescriptor | null;
|
|
37
|
+
/**
|
|
38
|
+
* Get current connection quality metrics.
|
|
39
|
+
*/
|
|
40
|
+
getConnectionQuality(): ConnectionQuality;
|
|
41
|
+
/**
|
|
42
|
+
* Subscribe to connection quality changes.
|
|
43
|
+
* @param callback - Function called with updated quality metrics
|
|
44
|
+
* @returns Unsubscribe function
|
|
45
|
+
*/
|
|
46
|
+
onConnectionQualityChange(callback: (quality: ConnectionQuality) => void): () => void;
|
|
47
|
+
/**
|
|
48
|
+
* Ping the server and return round-trip latency in milliseconds.
|
|
49
|
+
*/
|
|
50
|
+
ping(): Promise<number>;
|
|
51
|
+
private setConnectionState;
|
|
52
|
+
private calculateQualityLevel;
|
|
53
|
+
private calculateAvgLatency;
|
|
54
|
+
private buildQualitySnapshot;
|
|
55
|
+
private emitQualityChange;
|
|
56
|
+
private setupConnectionHandlers;
|
|
57
|
+
private startPingTimer;
|
|
58
|
+
private stopPingTimer;
|
|
20
59
|
private extractMethod;
|
|
21
60
|
private registerPresence;
|
|
22
61
|
private deregisterPresence;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/edge/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/edge/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAqB,iBAAiB,EAAoE,MAAM,aAAa,CAAC;AACtK,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,kBAAkB,CAAC;AA2C5E,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,EAAE,CAA+B;IACzC,OAAO,CAAC,QAAQ,CAAqG;IACrH,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,gBAAgB,CAAmD;IAC3E,OAAO,CAAC,aAAa,CAA0B;gBAEnC,MAAM,EAAE,UAAU;IAoBxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;YAwD7C,mBAAmB;IAsC3B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlD,WAAW,IAAI,OAAO;IAItB,uDAAuD;IACvD,SAAS,IAAI,MAAM;IAInB,sDAAsD;IACtD,QAAQ,IAAI,MAAM;IAIlB;;;;OAIG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAsBnE;;OAEG;IACH,oBAAoB,IAAI,iBAAiB;IAIzC;;;;OAIG;IACH,yBAAyB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI;IASrF;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAsB7B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;YAQP,gBAAgB;YAehB,kBAAkB;YAOlB,eAAe;YAaf,iBAAiB;IAS/B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;CAKvB"}
|