@fatagnus/dink-web 0.1.0 → 2.22.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/client.d.ts +33 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +174 -16
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/react.d.ts +72 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +113 -0
- package/dist/react.js.map +1 -0
- package/dist/types.d.ts +26 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +84 -66
package/dist/client.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import type { DinkWebConfig, ServiceCaller,
|
|
1
|
+
import type { DinkWebConfig, ServiceCaller, StreamSubscription, StreamOptions, ConnectionStatus, ConnectionStats, EdgeInfo } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* DinkWebClient connects to dinkd via NATS WebSocket from the browser.
|
|
4
4
|
* Implements ServiceCaller so generated client code works unchanged.
|
|
5
5
|
*
|
|
6
6
|
* Features:
|
|
7
|
+
* - Correct inbox-based streaming protocol (matches Node.js SDK)
|
|
7
8
|
* - Auto token refresh before expiry (requires tokenRefresher config)
|
|
8
9
|
* - Connection quality monitoring (RTT, reconnect count)
|
|
9
10
|
* - Automatic reconnection (built into nats.ws)
|
|
10
11
|
* - Center and edge service calls
|
|
12
|
+
* - Raw binary subscription mode for high-throughput streams
|
|
13
|
+
* - Edge discovery from the browser
|
|
11
14
|
*/
|
|
12
15
|
export declare class DinkWebClient implements ServiceCaller {
|
|
13
16
|
private nc;
|
|
@@ -35,10 +38,36 @@ export declare class DinkWebClient implements ServiceCaller {
|
|
|
35
38
|
*/
|
|
36
39
|
callCenter<Req, Resp>(service: string, method: string, req: Req): Promise<Resp>;
|
|
37
40
|
/**
|
|
38
|
-
* Subscribe to a streaming edge service.
|
|
39
|
-
*
|
|
41
|
+
* Subscribe to a streaming edge service using the correct inbox-based protocol.
|
|
42
|
+
*
|
|
43
|
+
* Protocol:
|
|
44
|
+
* 1. Create a unique inbox subject
|
|
45
|
+
* 2. Subscribe to inbox (data) and inbox.done (completion)
|
|
46
|
+
* 3. Send { reply_subject, data } envelope via request to the .stream subject
|
|
47
|
+
* 4. Edge acks with { status, cancelSubject }
|
|
48
|
+
* 5. Edge publishes stream data to the inbox, then inbox.done when finished
|
|
49
|
+
* 6. On cancel/unsubscribe, publish to cancelSubject to abort the stream
|
|
40
50
|
*/
|
|
41
|
-
subscribe<Req, Resp>(edgeId: string, service: string, method: string, req: Req, handler: (resp: Resp) => void): Promise<
|
|
51
|
+
subscribe<Req, Resp>(edgeId: string, service: string, method: string, req: Req, handler: (resp: Resp) => void, options?: StreamOptions): Promise<StreamSubscription>;
|
|
52
|
+
/**
|
|
53
|
+
* Subscribe to a streaming edge service in raw binary mode.
|
|
54
|
+
* Skips JSON encode/decode — handler receives raw Uint8Array payloads.
|
|
55
|
+
* Ideal for high-throughput binary streams (PTY output, file transfers).
|
|
56
|
+
*
|
|
57
|
+
* Uses the same inbox-based streaming protocol as subscribe().
|
|
58
|
+
*/
|
|
59
|
+
subscribeRaw(edgeId: string, service: string, method: string, req: unknown, handler: (data: Uint8Array) => void, options?: StreamOptions): Promise<StreamSubscription>;
|
|
60
|
+
/**
|
|
61
|
+
* Discover edges in the current app.
|
|
62
|
+
* Subject: center.{appId}.edges.discover
|
|
63
|
+
*
|
|
64
|
+
* This is a convenience for browser apps that need to find edges
|
|
65
|
+
* without a Convex backend intermediary.
|
|
66
|
+
*/
|
|
67
|
+
discoverEdges(filter?: {
|
|
68
|
+
labels?: Record<string, string>;
|
|
69
|
+
service?: string;
|
|
70
|
+
}): Promise<EdgeInfo[]>;
|
|
42
71
|
/**
|
|
43
72
|
* Create a typed service client for an edge.
|
|
44
73
|
* Usage: const svc = client.service('edge-1', MyServiceClient);
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,aAAa,EACb,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,eAAe,EAEf,QAAQ,EACR,MAAM,YAAY,CAAC;AAKpB;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAc,YAAW,aAAa;IAClD,OAAO,CAAC,EAAE,CAA+B;IACzC,OAAO,CAAC,MAAM,CAA2E;IACzF,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,YAAY,CAA+C;gBAEvD,MAAM,EAAE,aAAa;IAQjC,IAAI,MAAM,IAAI,gBAAgB,CAE7B;IAED,oCAAoC;IACpC,IAAI,KAAK,IAAI,eAAe,CAO3B;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;OAGG;IACG,IAAI,CAAC,GAAG,EAAE,IAAI,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,GACN,OAAO,CAAC,IAAI,CAAC;IAUhB;;;OAGG;IACG,UAAU,CAAC,GAAG,EAAE,IAAI,EACzB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,GACN,OAAO,CAAC,IAAI,CAAC;IAUhB;;;;;;;;;;OAUG;IACG,SAAS,CAAC,GAAG,EAAE,IAAI,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAC7B,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAgG9B;;;;;;OAMG;IACG,YAAY,CACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,EACnC,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC;IA0E9B;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,CAAC,EAAE;QAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAUvB;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,KAAK,CAAC,GAAG,CAAC;IAMxF,OAAO,CAAC,oBAAoB;YAiBd,YAAY;IAwC1B,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;CAGd"}
|
package/dist/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { connect } from 'nats.ws';
|
|
1
|
+
import { connect, createInbox } from 'nats.ws';
|
|
2
2
|
const DEFAULT_TIMEOUT = 30_000;
|
|
3
3
|
const DEFAULT_REFRESH_BEFORE_EXPIRY_MS = 60_000; // 1 minute before expiry
|
|
4
4
|
/**
|
|
@@ -6,10 +6,13 @@ const DEFAULT_REFRESH_BEFORE_EXPIRY_MS = 60_000; // 1 minute before expiry
|
|
|
6
6
|
* Implements ServiceCaller so generated client code works unchanged.
|
|
7
7
|
*
|
|
8
8
|
* Features:
|
|
9
|
+
* - Correct inbox-based streaming protocol (matches Node.js SDK)
|
|
9
10
|
* - Auto token refresh before expiry (requires tokenRefresher config)
|
|
10
11
|
* - Connection quality monitoring (RTT, reconnect count)
|
|
11
12
|
* - Automatic reconnection (built into nats.ws)
|
|
12
13
|
* - Center and edge service calls
|
|
14
|
+
* - Raw binary subscription mode for high-throughput streams
|
|
15
|
+
* - Edge discovery from the browser
|
|
13
16
|
*/
|
|
14
17
|
export class DinkWebClient {
|
|
15
18
|
nc = null;
|
|
@@ -93,31 +96,186 @@ export class DinkWebClient {
|
|
|
93
96
|
return this.decode(msg);
|
|
94
97
|
}
|
|
95
98
|
/**
|
|
96
|
-
* Subscribe to a streaming edge service.
|
|
97
|
-
*
|
|
99
|
+
* Subscribe to a streaming edge service using the correct inbox-based protocol.
|
|
100
|
+
*
|
|
101
|
+
* Protocol:
|
|
102
|
+
* 1. Create a unique inbox subject
|
|
103
|
+
* 2. Subscribe to inbox (data) and inbox.done (completion)
|
|
104
|
+
* 3. Send { reply_subject, data } envelope via request to the .stream subject
|
|
105
|
+
* 4. Edge acks with { status, cancelSubject }
|
|
106
|
+
* 5. Edge publishes stream data to the inbox, then inbox.done when finished
|
|
107
|
+
* 6. On cancel/unsubscribe, publish to cancelSubject to abort the stream
|
|
98
108
|
*/
|
|
99
|
-
async subscribe(edgeId, service, method, req, handler) {
|
|
109
|
+
async subscribe(edgeId, service, method, req, handler, options) {
|
|
100
110
|
this.ensureConnected();
|
|
101
|
-
const
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
111
|
+
const nc = this.nc;
|
|
112
|
+
const replySubject = createInbox();
|
|
113
|
+
let dataSub = null;
|
|
114
|
+
let doneSub = null;
|
|
115
|
+
let unsubscribed = false;
|
|
116
|
+
let cancelSubject;
|
|
117
|
+
const cleanup = () => {
|
|
118
|
+
if (unsubscribed)
|
|
119
|
+
return;
|
|
120
|
+
unsubscribed = true;
|
|
121
|
+
dataSub?.unsubscribe();
|
|
122
|
+
doneSub?.unsubscribe();
|
|
123
|
+
};
|
|
124
|
+
const cancel = () => {
|
|
125
|
+
if (cancelSubject && !unsubscribed) {
|
|
107
126
|
try {
|
|
108
|
-
|
|
127
|
+
nc.publish(cancelSubject, this.encode({}));
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
/* connection may be closed */
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
cleanup();
|
|
134
|
+
};
|
|
135
|
+
// Subscribe to data messages on the inbox
|
|
136
|
+
dataSub = nc.subscribe(replySubject, {
|
|
137
|
+
callback: (err, msg) => {
|
|
138
|
+
if (err || unsubscribed)
|
|
139
|
+
return;
|
|
140
|
+
try {
|
|
141
|
+
const rawResp = JSON.parse(new TextDecoder().decode(msg.data));
|
|
142
|
+
// Check for error response from edge
|
|
143
|
+
if (rawResp.success === false && rawResp.error) {
|
|
144
|
+
options?.onError?.(new Error(rawResp.error.message));
|
|
145
|
+
cleanup();
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
// Unwrap the result field (edge wraps responses in { result: ... })
|
|
149
|
+
const resp = rawResp.result !== undefined ? rawResp.result : rawResp;
|
|
109
150
|
handler(resp);
|
|
110
151
|
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
options?.onError?.(e instanceof Error ? e : new Error(String(e)));
|
|
154
|
+
cleanup();
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
// Subscribe to the .done signal
|
|
159
|
+
doneSub = nc.subscribe(`${replySubject}.done`, {
|
|
160
|
+
callback: () => {
|
|
161
|
+
options?.onDone?.();
|
|
162
|
+
cleanup();
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
// Build the stream request envelope (matches Node.js SDK protocol)
|
|
166
|
+
const streamReq = {
|
|
167
|
+
reply_subject: replySubject,
|
|
168
|
+
data: req,
|
|
169
|
+
};
|
|
170
|
+
const subject = `edge.${this.config.appId}.${edgeId}.services.${service}.${method}.stream`;
|
|
171
|
+
try {
|
|
172
|
+
const ackMsg = await nc.request(subject, this.encode(streamReq), {
|
|
173
|
+
timeout: this.config.timeout ?? DEFAULT_TIMEOUT,
|
|
174
|
+
});
|
|
175
|
+
// Extract the cancel subject from the edge's ack response
|
|
176
|
+
try {
|
|
177
|
+
const ack = JSON.parse(new TextDecoder().decode(ackMsg.data));
|
|
178
|
+
cancelSubject = ack.cancelSubject;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
/* backwards compatible — older edges may not send structured ack */
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
// Request failed (timeout, no responders, etc.) — clean up subs
|
|
186
|
+
cleanup();
|
|
187
|
+
throw err;
|
|
188
|
+
}
|
|
189
|
+
return { unsubscribe: cancel, cancel };
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Subscribe to a streaming edge service in raw binary mode.
|
|
193
|
+
* Skips JSON encode/decode — handler receives raw Uint8Array payloads.
|
|
194
|
+
* Ideal for high-throughput binary streams (PTY output, file transfers).
|
|
195
|
+
*
|
|
196
|
+
* Uses the same inbox-based streaming protocol as subscribe().
|
|
197
|
+
*/
|
|
198
|
+
async subscribeRaw(edgeId, service, method, req, handler, options) {
|
|
199
|
+
this.ensureConnected();
|
|
200
|
+
const nc = this.nc;
|
|
201
|
+
const replySubject = createInbox();
|
|
202
|
+
let dataSub = null;
|
|
203
|
+
let doneSub = null;
|
|
204
|
+
let unsubscribed = false;
|
|
205
|
+
let cancelSubject;
|
|
206
|
+
const cleanup = () => {
|
|
207
|
+
if (unsubscribed)
|
|
208
|
+
return;
|
|
209
|
+
unsubscribed = true;
|
|
210
|
+
dataSub?.unsubscribe();
|
|
211
|
+
doneSub?.unsubscribe();
|
|
212
|
+
};
|
|
213
|
+
const cancel = () => {
|
|
214
|
+
if (cancelSubject && !unsubscribed) {
|
|
215
|
+
try {
|
|
216
|
+
nc.publish(cancelSubject, this.encode({}));
|
|
217
|
+
}
|
|
111
218
|
catch {
|
|
112
|
-
|
|
219
|
+
/* connection may be closed */
|
|
113
220
|
}
|
|
114
221
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
222
|
+
cleanup();
|
|
223
|
+
};
|
|
224
|
+
// Subscribe to raw data on the inbox — no JSON parsing
|
|
225
|
+
dataSub = nc.subscribe(replySubject, {
|
|
226
|
+
callback: (err, msg) => {
|
|
227
|
+
if (err || unsubscribed)
|
|
228
|
+
return;
|
|
229
|
+
if (msg.data) {
|
|
230
|
+
handler(msg.data);
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
});
|
|
234
|
+
// Subscribe to the .done signal
|
|
235
|
+
doneSub = nc.subscribe(`${replySubject}.done`, {
|
|
236
|
+
callback: () => {
|
|
237
|
+
options?.onDone?.();
|
|
238
|
+
cleanup();
|
|
119
239
|
},
|
|
240
|
+
});
|
|
241
|
+
const streamReq = {
|
|
242
|
+
reply_subject: replySubject,
|
|
243
|
+
data: req,
|
|
120
244
|
};
|
|
245
|
+
const subject = `edge.${this.config.appId}.${edgeId}.services.${service}.${method}.stream`;
|
|
246
|
+
try {
|
|
247
|
+
const ackMsg = await nc.request(subject, this.encode(streamReq), {
|
|
248
|
+
timeout: this.config.timeout ?? DEFAULT_TIMEOUT,
|
|
249
|
+
});
|
|
250
|
+
try {
|
|
251
|
+
const ack = JSON.parse(new TextDecoder().decode(ackMsg.data));
|
|
252
|
+
cancelSubject = ack.cancelSubject;
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
/* backwards compatible */
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
cleanup();
|
|
260
|
+
throw err;
|
|
261
|
+
}
|
|
262
|
+
return { unsubscribe: cancel, cancel };
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Discover edges in the current app.
|
|
266
|
+
* Subject: center.{appId}.edges.discover
|
|
267
|
+
*
|
|
268
|
+
* This is a convenience for browser apps that need to find edges
|
|
269
|
+
* without a Convex backend intermediary.
|
|
270
|
+
*/
|
|
271
|
+
async discoverEdges(filter) {
|
|
272
|
+
this.ensureConnected();
|
|
273
|
+
const subject = `center.${this.config.appId}.edges.discover`;
|
|
274
|
+
const msg = await this.nc.request(subject, this.encode(filter ?? {}), {
|
|
275
|
+
timeout: this.config.timeout ?? DEFAULT_TIMEOUT,
|
|
276
|
+
});
|
|
277
|
+
const resp = this.decode(msg);
|
|
278
|
+
return resp.edges ?? [];
|
|
121
279
|
}
|
|
122
280
|
/**
|
|
123
281
|
* Create a typed service client for an edge.
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiC,MAAM,SAAS,CAAC;AAUjE,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,gCAAgC,GAAG,MAAM,CAAC,CAAC,yBAAyB;AAE1E;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IACjB,EAAE,GAA0B,IAAI,CAAC;IACjC,MAAM,CAA2E;IACjF,OAAO,GAAqB,YAAY,CAAC;IACzC,eAAe,GAAG,CAAC,CAAC;IACpB,MAAM,GAAkB,IAAI,CAAC;IAC7B,eAAe,GAAgB,IAAI,CAAC;IACpC,aAAa,GAAyC,IAAI,CAAC;IAC3D,YAAY,GAA0C,IAAI,CAAC;IAEnE,YAAY,MAAqB;QAChC,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,eAAe;gBACnB,MAAM,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnF,CAAC;IACF,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,oCAAoC;IACpC,IAAI,KAAK;QACR,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,cAAc,EAAE,IAAI,CAAC,eAAe;YACpC,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,cAAc,EAAE,IAAI,CAAC,eAAe;SACpC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC7B,IAAI,CAAC;YACJ,IAAI,CAAC,EAAE,GAAG,MAAM,OAAO,CAAC;gBACvB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;gBACxB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBACxB,oBAAoB,EAAE,CAAC,CAAC;gBACxB,iBAAiB,EAAE,IAAI;aACvB,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAE5B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACxB,MAAM,GAAG,CAAC;QACX,CAAC;IACF,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CACT,MAAc,EACd,OAAe,EACf,MAAc,EACd,GAAQ;QAER,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,aAAa,OAAO,IAAI,MAAM,EAAE,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE;YACpD,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,eAAe;SAC/C,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAO,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CACf,OAAe,EACf,MAAc,EACd,GAAQ;QAER,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,aAAa,OAAO,IAAI,MAAM,EAAE,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE;YACpD,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,eAAe;SAC/C,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAO,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CACd,MAAc,EACd,OAAe,EACf,MAAc,EACd,GAAQ,EACR,OAA6B;QAE7B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,aAAa,OAAO,IAAI,MAAM,SAAS,CAAC;QAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,EAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEnC,CAAC,KAAK,IAAI,EAAE;YACX,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACJ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAO,GAAG,CAAC,CAAC;oBACpC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACf,CAAC;gBAAC,MAAM,CAAC;oBACR,0BAA0B;gBAC3B,CAAC;YACF,CAAC;QACF,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAErB,OAAO;YACN,WAAW,EAAE,GAAG,EAAE;gBACjB,KAAK,CAAC,WAAW,EAAE,CAAC;YACrB,CAAC;SACD,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,OAAO,CAAI,MAAc,EAAE,OAAyD;QACnF,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,mEAAmE;IAE3D,oBAAoB;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAEjE,MAAM,eAAe,GACpB,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,gCAAgC,CAAC;QACvE,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClE,MAAM,cAAc,GAAG,aAAa,GAAG,eAAe,CAAC;QAEvD,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YACzB,oDAAoD;YACpD,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,cAAc,CAAC,CAAC;IAC5E,CAAC;IAEO,KAAK,CAAC,YAAY;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc;YAAE,OAAO;QAExC,IAAI,CAAC;YACJ,MAAM,IAAI,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAClE,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEjD,2BAA2B;YAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,KAAK,WAAW,CAAC;YAClD,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;YAChB,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC/B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YAC/B,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBAClB,IAAI,CAAC,EAAE,GAAG,MAAM,OAAO,CAAC;oBACvB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;oBACxB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;oBACxB,oBAAoB,EAAE,CAAC,CAAC;oBACxB,iBAAiB,EAAE,IAAI;iBACvB,CAAC,CAAC;gBACH,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,CAAC;YAED,wBAAwB;YACxB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACR,iCAAiC;YACjC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;QACpE,CAAC;IACF,CAAC;IAED,mEAAmE;IAE3D,aAAa;QACpB,kEAAkE;QAClE,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW;gBAAE,OAAO;YACrD,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,CAAC;QACF,CAAC,CAAC;QAEF,gBAAgB;QAChB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,mEAAmE;IAE3D,aAAa;QACpB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QACrB,CAAC,KAAK,IAAI,EAAE;YACX,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,EAAG,CAAC,MAAM,EAAE,EAAE,CAAC;gBACzC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChB,KAAK,cAAc;wBAClB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;wBAC/B,MAAM;oBACP,KAAK,WAAW;wBACf,IAAI,CAAC,eAAe,EAAE,CAAC;wBACvB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;wBAC5B,MAAM;oBACP,KAAK,YAAY,CAAC;oBAClB,KAAK,OAAO;wBACX,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;wBACxB,MAAM;gBACR,CAAC;YACF,CAAC;QACF,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtB,CAAC;IAEO,UAAU;QACjB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC1B,CAAC;IACF,CAAC;IAEO,SAAS,CAAC,MAAwB;QACzC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAEO,eAAe;QACtB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC1E,CAAC;IACF,CAAC;IAEO,MAAM,CAAC,IAAa;QAC3B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAEO,MAAM,CAAI,GAAQ;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAM,CAAC;IAC5D,CAAC;CACD"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { DinkWebClient } from './client.js';
|
|
2
|
-
export type { DinkWebConfig, ServiceCaller, Subscription, ServiceDefinition, ConnectionStatus, ConnectionStats, WebTokenResponse, TokenRefresher, } from './types.js';
|
|
2
|
+
export type { DinkWebConfig, ServiceCaller, Subscription, StreamSubscription, StreamOptions, ServiceDefinition, ConnectionStatus, ConnectionStats, WebTokenResponse, TokenRefresher, EdgeInfo, } from './types.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,QAAQ,GACR,MAAM,YAAY,CAAC"}
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hooks for DinkWebClient.
|
|
3
|
+
*
|
|
4
|
+
* Provides DinkWebProvider for connection lifecycle management,
|
|
5
|
+
* useDinkWeb for accessing client + status, and useDinkService
|
|
6
|
+
* for typed service client access with auto-edge binding.
|
|
7
|
+
*
|
|
8
|
+
* @module @fatagnus/dink-web/react
|
|
9
|
+
*/
|
|
10
|
+
import { type ReactNode } from 'react';
|
|
11
|
+
import { DinkWebClient } from './client.js';
|
|
12
|
+
import type { ConnectionStatus, ConnectionStats, ServiceCaller, TokenRefresher } from './types.js';
|
|
13
|
+
interface DinkWebContextValue {
|
|
14
|
+
client: DinkWebClient | null;
|
|
15
|
+
status: ConnectionStatus;
|
|
16
|
+
stats: ConnectionStats;
|
|
17
|
+
}
|
|
18
|
+
export interface DinkWebProviderProps {
|
|
19
|
+
/** WebSocket URL (e.g., "wss://host:9222") */
|
|
20
|
+
url: string;
|
|
21
|
+
/** Authentication token */
|
|
22
|
+
token: string;
|
|
23
|
+
/** Token expiry (ISO string or Date) */
|
|
24
|
+
expiresAt?: string | Date;
|
|
25
|
+
/** App ID for subject routing */
|
|
26
|
+
appId: string;
|
|
27
|
+
/** Request timeout in ms */
|
|
28
|
+
timeout?: number;
|
|
29
|
+
/** Callback to fetch a fresh token before expiry */
|
|
30
|
+
tokenRefresher?: TokenRefresher;
|
|
31
|
+
/** Ms before expiry to trigger refresh (default: 60000) */
|
|
32
|
+
refreshBeforeExpiryMs?: number;
|
|
33
|
+
children: ReactNode;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Provider that manages DinkWebClient lifecycle.
|
|
37
|
+
* Creates and connects the client on mount, drains on unmount.
|
|
38
|
+
* Reconnects when url/token/appId change.
|
|
39
|
+
*/
|
|
40
|
+
export declare function DinkWebProvider({ url, token, expiresAt, appId, timeout, tokenRefresher, refreshBeforeExpiryMs, children, }: DinkWebProviderProps): import("react").FunctionComponentElement<import("react").ProviderProps<DinkWebContextValue | null>>;
|
|
41
|
+
/**
|
|
42
|
+
* Access the DinkWebClient instance, connection status, and stats.
|
|
43
|
+
*
|
|
44
|
+
* @throws Error if used outside DinkWebProvider
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```tsx
|
|
48
|
+
* function StatusBar() {
|
|
49
|
+
* const { client, status, stats } = useDinkWeb();
|
|
50
|
+
* return <div>Status: {status}, RTT: {stats.rttMs}ms</div>;
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function useDinkWeb(): DinkWebContextValue;
|
|
55
|
+
/**
|
|
56
|
+
* Get a typed service client bound to a specific edge.
|
|
57
|
+
* Memoized — returns the same instance as long as edgeId and client don't change.
|
|
58
|
+
*
|
|
59
|
+
* @param edgeId - Edge to bind the service client to
|
|
60
|
+
* @param factory - Generated service client class (e.g., TerminalServiceClient)
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* function Terminal({ edgeId }: { edgeId: string }) {
|
|
65
|
+
* const svc = useDinkService(edgeId, TerminalServiceClient);
|
|
66
|
+
* // svc.StreamOutput(...), svc.SendInput(...), etc.
|
|
67
|
+
* }
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function useDinkService<T>(edgeId: string, factory: new (edgeId: string, caller: ServiceCaller) => T): T | null;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=react.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAON,KAAK,SAAS,EAEd,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,EACd,MAAM,YAAY,CAAC;AAIpB,UAAU,mBAAmB;IAC5B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;CACvB;AAMD,MAAM,WAAW,oBAAoB;IACpC,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,2DAA2D;IAC3D,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAC/B,GAAG,EACH,KAAK,EACL,SAAS,EACT,KAAK,EACL,OAAO,EACP,cAAc,EACd,qBAAqB,EACrB,QAAQ,GACR,EAAE,oBAAoB,uGA4DtB;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,IAAI,mBAAmB,CAMhD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,KAAK,CAAC,GACvD,CAAC,GAAG,IAAI,CAOV"}
|
package/dist/react.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hooks for DinkWebClient.
|
|
3
|
+
*
|
|
4
|
+
* Provides DinkWebProvider for connection lifecycle management,
|
|
5
|
+
* useDinkWeb for accessing client + status, and useDinkService
|
|
6
|
+
* for typed service client access with auto-edge binding.
|
|
7
|
+
*
|
|
8
|
+
* @module @fatagnus/dink-web/react
|
|
9
|
+
*/
|
|
10
|
+
import { createContext, useContext, useEffect, useRef, useState, useMemo, createElement, } from 'react';
|
|
11
|
+
import { DinkWebClient } from './client.js';
|
|
12
|
+
const DinkWebContext = createContext(null);
|
|
13
|
+
/**
|
|
14
|
+
* Provider that manages DinkWebClient lifecycle.
|
|
15
|
+
* Creates and connects the client on mount, drains on unmount.
|
|
16
|
+
* Reconnects when url/token/appId change.
|
|
17
|
+
*/
|
|
18
|
+
export function DinkWebProvider({ url, token, expiresAt, appId, timeout, tokenRefresher, refreshBeforeExpiryMs, children, }) {
|
|
19
|
+
const [status, setStatus] = useState('connecting');
|
|
20
|
+
const [stats, setStats] = useState({
|
|
21
|
+
status: 'connecting',
|
|
22
|
+
reconnectCount: 0,
|
|
23
|
+
rttMs: null,
|
|
24
|
+
tokenExpiresAt: null,
|
|
25
|
+
});
|
|
26
|
+
const clientRef = useRef(null);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
const client = new DinkWebClient({
|
|
29
|
+
url,
|
|
30
|
+
token,
|
|
31
|
+
expiresAt,
|
|
32
|
+
appId,
|
|
33
|
+
timeout,
|
|
34
|
+
tokenRefresher,
|
|
35
|
+
refreshBeforeExpiryMs,
|
|
36
|
+
onStatusChange: (s) => {
|
|
37
|
+
setStatus(s);
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
clientRef.current = client;
|
|
41
|
+
client
|
|
42
|
+
.connect()
|
|
43
|
+
.then(() => {
|
|
44
|
+
setStatus(client.status);
|
|
45
|
+
setStats(client.stats);
|
|
46
|
+
})
|
|
47
|
+
.catch(() => {
|
|
48
|
+
setStatus('error');
|
|
49
|
+
});
|
|
50
|
+
// Poll stats while connected (RTT updates every 30s anyway)
|
|
51
|
+
const statsInterval = setInterval(() => {
|
|
52
|
+
if (clientRef.current) {
|
|
53
|
+
setStats(clientRef.current.stats);
|
|
54
|
+
}
|
|
55
|
+
}, 5000);
|
|
56
|
+
return () => {
|
|
57
|
+
clearInterval(statsInterval);
|
|
58
|
+
clientRef.current = null;
|
|
59
|
+
client.close().catch(() => { });
|
|
60
|
+
};
|
|
61
|
+
}, [url, token, appId]); // Reconnect on identity change
|
|
62
|
+
const value = useMemo(() => ({
|
|
63
|
+
client: clientRef.current,
|
|
64
|
+
status,
|
|
65
|
+
stats,
|
|
66
|
+
}), [status, stats]);
|
|
67
|
+
return createElement(DinkWebContext.Provider, { value }, children);
|
|
68
|
+
}
|
|
69
|
+
// ── Hooks ───────────────────────────────────────────────────────────
|
|
70
|
+
/**
|
|
71
|
+
* Access the DinkWebClient instance, connection status, and stats.
|
|
72
|
+
*
|
|
73
|
+
* @throws Error if used outside DinkWebProvider
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```tsx
|
|
77
|
+
* function StatusBar() {
|
|
78
|
+
* const { client, status, stats } = useDinkWeb();
|
|
79
|
+
* return <div>Status: {status}, RTT: {stats.rttMs}ms</div>;
|
|
80
|
+
* }
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export function useDinkWeb() {
|
|
84
|
+
const ctx = useContext(DinkWebContext);
|
|
85
|
+
if (!ctx) {
|
|
86
|
+
throw new Error('useDinkWeb must be used within a <DinkWebProvider>');
|
|
87
|
+
}
|
|
88
|
+
return ctx;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get a typed service client bound to a specific edge.
|
|
92
|
+
* Memoized — returns the same instance as long as edgeId and client don't change.
|
|
93
|
+
*
|
|
94
|
+
* @param edgeId - Edge to bind the service client to
|
|
95
|
+
* @param factory - Generated service client class (e.g., TerminalServiceClient)
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```tsx
|
|
99
|
+
* function Terminal({ edgeId }: { edgeId: string }) {
|
|
100
|
+
* const svc = useDinkService(edgeId, TerminalServiceClient);
|
|
101
|
+
* // svc.StreamOutput(...), svc.SendInput(...), etc.
|
|
102
|
+
* }
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export function useDinkService(edgeId, factory) {
|
|
106
|
+
const { client } = useDinkWeb();
|
|
107
|
+
return useMemo(() => {
|
|
108
|
+
if (!client)
|
|
109
|
+
return null;
|
|
110
|
+
return client.service(edgeId, factory);
|
|
111
|
+
}, [client, edgeId, factory]);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
export interface ServiceCaller {
|
|
2
2
|
call<Req, Resp>(edgeId: string, service: string, method: string, req: Req): Promise<Resp>;
|
|
3
3
|
callCenter<Req, Resp>(service: string, method: string, req: Req): Promise<Resp>;
|
|
4
|
-
subscribe<Req, Resp>(edgeId: string, service: string, method: string, req: Req, handler: (resp: Resp) => void): Promise<
|
|
4
|
+
subscribe<Req, Resp>(edgeId: string, service: string, method: string, req: Req, handler: (resp: Resp) => void, options?: StreamOptions): Promise<StreamSubscription>;
|
|
5
5
|
}
|
|
6
6
|
export interface Subscription {
|
|
7
7
|
unsubscribe(): void;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Extended subscription handle for streaming RPCs.
|
|
11
|
+
* Supports cancellation and lifecycle callbacks.
|
|
12
|
+
*/
|
|
13
|
+
export interface StreamSubscription extends Subscription {
|
|
14
|
+
/** Send a cancel signal to the edge to abort the stream. */
|
|
15
|
+
cancel(): void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Options for streaming RPC subscriptions.
|
|
19
|
+
*/
|
|
20
|
+
export interface StreamOptions {
|
|
21
|
+
/** Called when the stream completes normally. */
|
|
22
|
+
onDone?: () => void;
|
|
23
|
+
/** Called when the stream encounters an error. */
|
|
24
|
+
onError?: (err: Error) => void;
|
|
25
|
+
}
|
|
9
26
|
export interface ServiceDefinition {
|
|
10
27
|
name: string;
|
|
11
28
|
version: string;
|
|
@@ -57,4 +74,12 @@ export interface ConnectionStats {
|
|
|
57
74
|
tokenExpiresAt: Date | null;
|
|
58
75
|
}
|
|
59
76
|
export type ConnectionStatus = 'connecting' | 'connected' | 'reconnecting' | 'closed' | 'error';
|
|
77
|
+
/** Discovered edge information */
|
|
78
|
+
export interface EdgeInfo {
|
|
79
|
+
edgeId: string;
|
|
80
|
+
name?: string;
|
|
81
|
+
labels?: Record<string, string>;
|
|
82
|
+
services?: string[];
|
|
83
|
+
status?: string;
|
|
84
|
+
}
|
|
60
85
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,SAAS,CAAC,GAAG,EAAE,IAAI,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,SAAS,CAAC,GAAG,EAAE,IAAI,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAC7B,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC5B,WAAW,IAAI,IAAI,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACvD,4DAA4D;IAC5D,MAAM,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC7B,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,sGAAsG;IACtG,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACpD;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC/B,gCAAgC;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yDAAyD;IACzD,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhG,kCAAkC;AAClC,MAAM,WAAW,QAAQ;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
package/package.json
CHANGED
|
@@ -1,68 +1,86 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
2
|
+
"name": "@fatagnus/dink-web",
|
|
3
|
+
"version": "2.22.1",
|
|
4
|
+
"description": "Browser SDK for Dink edge mesh platform via NATS WebSocket",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./react": {
|
|
14
|
+
"types": "./dist/react.d.ts",
|
|
15
|
+
"import": "./dist/react.js"
|
|
16
|
+
},
|
|
17
|
+
"./types": {
|
|
18
|
+
"types": "./dist/types.d.ts",
|
|
19
|
+
"import": "./dist/types.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"typesVersions": {
|
|
23
|
+
"*": {
|
|
24
|
+
"react": [
|
|
25
|
+
"dist/react.d.ts"
|
|
26
|
+
],
|
|
27
|
+
"types": [
|
|
28
|
+
"dist/types.d.ts"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsc",
|
|
34
|
+
"clean": "rm -rf dist",
|
|
35
|
+
"prebuild": "npm run clean",
|
|
36
|
+
"prepublishOnly": "npm run build",
|
|
37
|
+
"typecheck": "tsc --noEmit"
|
|
38
|
+
},
|
|
39
|
+
"keywords": [
|
|
40
|
+
"dink",
|
|
41
|
+
"nats",
|
|
42
|
+
"websocket",
|
|
43
|
+
"edge",
|
|
44
|
+
"browser",
|
|
45
|
+
"real-time"
|
|
46
|
+
],
|
|
47
|
+
"author": "Ozan Turksever",
|
|
48
|
+
"license": "Apache-2.0",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "git+https://github.com/ozanturksever/dink.git",
|
|
52
|
+
"directory": "sdk/web"
|
|
53
|
+
},
|
|
54
|
+
"homepage": "https://github.com/ozanturksever/dink#readme",
|
|
55
|
+
"bugs": {
|
|
56
|
+
"url": "https://github.com/ozanturksever/dink/issues"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"react": ">=18.0.0"
|
|
60
|
+
},
|
|
61
|
+
"peerDependenciesMeta": {
|
|
62
|
+
"react": {
|
|
63
|
+
"optional": true
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"publishConfig": {
|
|
67
|
+
"access": "public"
|
|
68
|
+
},
|
|
69
|
+
"sideEffects": false,
|
|
70
|
+
"dependencies": {
|
|
71
|
+
"nats.ws": "^1.29.2"
|
|
72
|
+
},
|
|
73
|
+
"devDependencies": {
|
|
74
|
+
"@types/node": "^20.10.0",
|
|
75
|
+
"@types/react": "^19.2.14",
|
|
76
|
+
"typescript": "^5.3.0"
|
|
77
|
+
},
|
|
78
|
+
"engines": {
|
|
79
|
+
"node": ">=18.0.0"
|
|
80
|
+
},
|
|
81
|
+
"files": [
|
|
82
|
+
"dist",
|
|
83
|
+
"README.md",
|
|
84
|
+
"LICENSE"
|
|
85
|
+
]
|
|
68
86
|
}
|