@layr8/sdk 0.1.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/README.md +582 -0
- package/dist/backoff.d.ts +10 -0
- package/dist/backoff.d.ts.map +1 -0
- package/dist/backoff.js +20 -0
- package/dist/backoff.js.map +1 -0
- package/dist/channel.d.ts +88 -0
- package/dist/channel.d.ts.map +1 -0
- package/dist/channel.js +522 -0
- package/dist/channel.js.map +1 -0
- package/dist/client.d.ts +119 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +509 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +42 -0
- package/dist/config.js.map +1 -0
- package/dist/credentials.d.ts +55 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +5 -0
- package/dist/credentials.js.map +1 -0
- package/dist/errors.d.ts +91 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +132 -0
- package/dist/errors.js.map +1 -0
- package/dist/handler.d.ts +28 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +51 -0
- package/dist/handler.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/message.d.ts +67 -0
- package/dist/message.d.ts.map +1 -0
- package/dist/message.js +77 -0
- package/dist/message.js.map +1 -0
- package/dist/presentations.d.ts +24 -0
- package/dist/presentations.d.ts.map +1 -0
- package/dist/presentations.js +5 -0
- package/dist/presentations.js.map +1 -0
- package/dist/rest.d.ts +33 -0
- package/dist/rest.d.ts.map +1 -0
- package/dist/rest.js +150 -0
- package/dist/rest.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AA0D3C,uDAAuD;AACvD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,cAAc;IAwDvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAxDzB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,cAAc,CAA+C;IACrE;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,CAAc;IACjC;;;;OAIG;IACH,OAAO,CAAC,WAAW,CAA+C;IAClE;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAIvB;IAUL,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAU;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAU;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAU;IAEjD,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;gBAGzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,CAAC,EAAE,OAAO;IAOb,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAKzD,IAAI;YAyDJ,IAAI;IAoElB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IA6C3D,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAaxD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAI5B,WAAW,IAAI,MAAM;IAIrB,sFAAsF;IACtF,aAAa,IAAI,OAAO;IAIxB,KAAK,IAAI,IAAI;IAgCb,OAAO,CAAC,aAAa;IAgDrB,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,cAAc;IAgCtB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,kBAAkB;YAYZ,aAAa;IAmC3B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,QAAQ;CAMjB"}
|
package/dist/channel.js
ADDED
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
import WebSocket from "ws";
|
|
2
|
+
import { Backoff } from "./backoff.js";
|
|
3
|
+
import { DEFAULT_DID_SPEC } from "./config.js";
|
|
4
|
+
import { ConnectionError, NotConnectedError } from "./errors.js";
|
|
5
|
+
function marshalPhoenixMsg(msg) {
|
|
6
|
+
return JSON.stringify([
|
|
7
|
+
msg.joinRef,
|
|
8
|
+
msg.ref,
|
|
9
|
+
msg.topic,
|
|
10
|
+
msg.event,
|
|
11
|
+
msg.payload,
|
|
12
|
+
]);
|
|
13
|
+
}
|
|
14
|
+
function unmarshalPhoenixMsg(data) {
|
|
15
|
+
const arr = JSON.parse(data);
|
|
16
|
+
if (!Array.isArray(arr) || arr.length !== 5) {
|
|
17
|
+
throw new Error(`expected 5-element array, got ${Array.isArray(arr) ? arr.length : typeof arr}`);
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
joinRef: arr[0] ?? null,
|
|
21
|
+
ref: arr[1] ?? null,
|
|
22
|
+
topic: arr[2],
|
|
23
|
+
event: arr[3],
|
|
24
|
+
payload: arr[4],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** Returns true if host is "localhost" or a subdomain of it (RFC 6761). */
|
|
28
|
+
function isLocalhost(host) {
|
|
29
|
+
return host === "localhost" || host.endsWith(".localhost");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Rewrite a WebSocket URL so that *.localhost hostnames resolve to 127.0.0.1.
|
|
33
|
+
* Returns [rewrittenUrl, hostHeader] — hostHeader is set when rewriting occurred.
|
|
34
|
+
*/
|
|
35
|
+
function rewriteLocalhostUrl(wsUrl) {
|
|
36
|
+
const parsed = new URL(wsUrl);
|
|
37
|
+
if (isLocalhost(parsed.hostname)) {
|
|
38
|
+
const hostHeader = parsed.host; // includes port if present
|
|
39
|
+
parsed.hostname = "127.0.0.1";
|
|
40
|
+
return [parsed.toString(), hostHeader];
|
|
41
|
+
}
|
|
42
|
+
return [wsUrl, undefined];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Phoenix Channel transport over WebSocket.
|
|
46
|
+
* Implements the same protocol as the Go SDK's phoenixChannel.
|
|
47
|
+
*/
|
|
48
|
+
export class PhoenixChannel {
|
|
49
|
+
wsUrl;
|
|
50
|
+
apiKey;
|
|
51
|
+
ws = null;
|
|
52
|
+
refCounter = 0;
|
|
53
|
+
joinRef = "";
|
|
54
|
+
topic;
|
|
55
|
+
callbacks;
|
|
56
|
+
pendingJoinResolve = null;
|
|
57
|
+
closed = false;
|
|
58
|
+
reconnecting = false;
|
|
59
|
+
protocols = [];
|
|
60
|
+
heartbeatTimer = null;
|
|
61
|
+
/**
|
|
62
|
+
* Monotonic timestamp (Date.now()) of the most recently observed inbound
|
|
63
|
+
* frame — any message, pong, or phx_reply. Used by the Phoenix-level
|
|
64
|
+
* watchdog in startHeartbeat to detect "TCP healthy but Phoenix Channel
|
|
65
|
+
* GenServer hung" failures: when the heartbeat tick observes no frames
|
|
66
|
+
* for HEARTBEAT_MAX_SILENT_MS, it forces a close that the existing
|
|
67
|
+
* reconnect path picks up.
|
|
68
|
+
*/
|
|
69
|
+
lastFrameAt = Date.now();
|
|
70
|
+
/**
|
|
71
|
+
* Timer that periodically emits a WS-level `{:ping, _}` frame. Independent
|
|
72
|
+
* of the Phoenix heartbeat — covers the TCP / NAT / LB half-dead case
|
|
73
|
+
* where the connection is unilaterally killed without a FIN.
|
|
74
|
+
*/
|
|
75
|
+
wsPingTimer = null;
|
|
76
|
+
/**
|
|
77
|
+
* Timer armed each time we emit a WS ping. Cleared on any inbound frame
|
|
78
|
+
* (pong, message, phx_reply — anything proves liveness). If it fires we
|
|
79
|
+
* force-close the WS so the existing reconnect path takes over.
|
|
80
|
+
*/
|
|
81
|
+
pongWaitTimer = null;
|
|
82
|
+
assignedDIDVal = "";
|
|
83
|
+
pendingRefs = new Map();
|
|
84
|
+
// Liveness detection constants. The Phoenix-level watchdog (HEARTBEAT_*)
|
|
85
|
+
// covers application-layer hangs; the WS-level ping/pong (WS_PING_* /
|
|
86
|
+
// PONG_WAIT_*) covers transport-layer hangs. Independent layers — both
|
|
87
|
+
// are needed because cowboy auto-pongs at the WS layer even when the
|
|
88
|
+
// Phoenix Channel GenServer has stopped processing.
|
|
89
|
+
//
|
|
90
|
+
// 75 000 ms = 2.5× heartbeat interval: tolerates one missed reply, trips
|
|
91
|
+
// on two consecutive misses.
|
|
92
|
+
static HEARTBEAT_INTERVAL_MS = 30_000;
|
|
93
|
+
static HEARTBEAT_MAX_SILENT_MS = 75_000;
|
|
94
|
+
static WS_PING_INTERVAL_MS = 25_000;
|
|
95
|
+
static WS_PONG_WAIT_MS = 35_000;
|
|
96
|
+
replyProtocolEnabled = false;
|
|
97
|
+
didSpec;
|
|
98
|
+
constructor(wsUrl, apiKey, agentDid, callbacks, didSpec) {
|
|
99
|
+
this.wsUrl = wsUrl;
|
|
100
|
+
this.apiKey = apiKey;
|
|
101
|
+
this.topic = `plugins:${agentDid}`;
|
|
102
|
+
this.callbacks = callbacks;
|
|
103
|
+
this.didSpec = { ...DEFAULT_DID_SPEC, ...didSpec, verificationMethods: didSpec?.verificationMethods ?? DEFAULT_DID_SPEC.verificationMethods };
|
|
104
|
+
}
|
|
105
|
+
async connect(protocols, signal) {
|
|
106
|
+
this.protocols = protocols;
|
|
107
|
+
return this.dial(signal);
|
|
108
|
+
}
|
|
109
|
+
async dial(signal) {
|
|
110
|
+
this.refCounter = 0;
|
|
111
|
+
const parsed = new URL(this.wsUrl);
|
|
112
|
+
parsed.searchParams.set("api_key", this.apiKey);
|
|
113
|
+
parsed.searchParams.set("vsn", "2.0.0");
|
|
114
|
+
const [url, hostHeader] = rewriteLocalhostUrl(parsed.toString());
|
|
115
|
+
const wsOpts = {
|
|
116
|
+
handshakeTimeout: 10_000,
|
|
117
|
+
};
|
|
118
|
+
if (hostHeader) {
|
|
119
|
+
wsOpts.headers = { Host: hostHeader };
|
|
120
|
+
}
|
|
121
|
+
return new Promise((resolve, reject) => {
|
|
122
|
+
if (signal?.aborted) {
|
|
123
|
+
reject(signal.reason ?? new Error("aborted"));
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const ws = new WebSocket(url, wsOpts);
|
|
127
|
+
const onAbort = () => {
|
|
128
|
+
ws.close();
|
|
129
|
+
reject(signal.reason ?? new Error("aborted"));
|
|
130
|
+
};
|
|
131
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
132
|
+
ws.on("error", (err) => {
|
|
133
|
+
signal?.removeEventListener("abort", onAbort);
|
|
134
|
+
reject(new ConnectionError(this.wsUrl, err.message));
|
|
135
|
+
});
|
|
136
|
+
ws.on("open", async () => {
|
|
137
|
+
signal?.removeEventListener("abort", onAbort);
|
|
138
|
+
this.ws = ws;
|
|
139
|
+
// Reset the watchdog clock so the first heartbeat tick after
|
|
140
|
+
// (re)connect measures silence from "just now", not from before
|
|
141
|
+
// the disconnect.
|
|
142
|
+
this.lastFrameAt = Date.now();
|
|
143
|
+
this.setupReadLoop();
|
|
144
|
+
this.startHeartbeat();
|
|
145
|
+
this.startWsPingLoop();
|
|
146
|
+
try {
|
|
147
|
+
await this.join(this.protocols, signal);
|
|
148
|
+
resolve();
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
ws.close();
|
|
152
|
+
reject(err);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
async join(protocols, signal) {
|
|
158
|
+
const ref = this.nextRef();
|
|
159
|
+
this.joinRef = ref;
|
|
160
|
+
const spec = this.didSpec;
|
|
161
|
+
const didSpecPayload = {
|
|
162
|
+
mode: spec.mode,
|
|
163
|
+
storage: spec.storage,
|
|
164
|
+
type: spec.type,
|
|
165
|
+
verificationMethods: spec.verificationMethods,
|
|
166
|
+
};
|
|
167
|
+
if (spec.label) {
|
|
168
|
+
didSpecPayload.label = spec.label;
|
|
169
|
+
}
|
|
170
|
+
if (spec.controller) {
|
|
171
|
+
didSpecPayload.controller = spec.controller;
|
|
172
|
+
}
|
|
173
|
+
const joinPayload = {
|
|
174
|
+
payload_types: protocols,
|
|
175
|
+
did_spec: didSpecPayload,
|
|
176
|
+
reply_protocol: true,
|
|
177
|
+
};
|
|
178
|
+
return new Promise((resolve, reject) => {
|
|
179
|
+
if (signal?.aborted) {
|
|
180
|
+
reject(signal.reason ?? new Error("aborted"));
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const onAbort = () => {
|
|
184
|
+
this.pendingJoinResolve = null;
|
|
185
|
+
reject(signal.reason ?? new Error("aborted"));
|
|
186
|
+
};
|
|
187
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
188
|
+
this.pendingJoinResolve = (payload) => {
|
|
189
|
+
signal?.removeEventListener("abort", onAbort);
|
|
190
|
+
const reply = payload;
|
|
191
|
+
if (reply.status !== "ok") {
|
|
192
|
+
const reason = reply.response?.reason ?? `join rejected: ${reply.status}`;
|
|
193
|
+
reject(new ConnectionError(this.wsUrl, reason));
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
if (reply.response?.did) {
|
|
197
|
+
this.assignedDIDVal = reply.response.did;
|
|
198
|
+
}
|
|
199
|
+
const caps = reply.response?.capabilities ?? [];
|
|
200
|
+
this.replyProtocolEnabled = caps.includes("reply_protocol/1");
|
|
201
|
+
resolve();
|
|
202
|
+
};
|
|
203
|
+
this.writeMsg({
|
|
204
|
+
joinRef: ref,
|
|
205
|
+
ref,
|
|
206
|
+
topic: this.topic,
|
|
207
|
+
event: "phx_join",
|
|
208
|
+
payload: joinPayload,
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
send(event, payload) {
|
|
213
|
+
if (this.reconnecting) {
|
|
214
|
+
return Promise.reject(new NotConnectedError());
|
|
215
|
+
}
|
|
216
|
+
const ref = this.nextRef();
|
|
217
|
+
return new Promise((resolve, reject) => {
|
|
218
|
+
const timer = setTimeout(() => {
|
|
219
|
+
const pending = this.pendingRefs.get(ref);
|
|
220
|
+
if (pending) {
|
|
221
|
+
this.pendingRefs.delete(ref);
|
|
222
|
+
reject(new Error("server reply timeout"));
|
|
223
|
+
}
|
|
224
|
+
}, 15_000); // 15 second timeout for server reply
|
|
225
|
+
this.pendingRefs.set(ref, {
|
|
226
|
+
resolve: (reply) => {
|
|
227
|
+
clearTimeout(timer);
|
|
228
|
+
this.pendingRefs.delete(ref);
|
|
229
|
+
resolve(reply);
|
|
230
|
+
},
|
|
231
|
+
reject: (err) => {
|
|
232
|
+
clearTimeout(timer);
|
|
233
|
+
this.pendingRefs.delete(ref);
|
|
234
|
+
reject(err);
|
|
235
|
+
},
|
|
236
|
+
timer,
|
|
237
|
+
});
|
|
238
|
+
try {
|
|
239
|
+
this.writeMsg({
|
|
240
|
+
joinRef: null,
|
|
241
|
+
ref,
|
|
242
|
+
topic: this.topic,
|
|
243
|
+
event,
|
|
244
|
+
payload,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
clearTimeout(timer);
|
|
249
|
+
this.pendingRefs.delete(ref);
|
|
250
|
+
reject(err);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
sendFireAndForget(event, payload) {
|
|
255
|
+
if (this.reconnecting) {
|
|
256
|
+
throw new NotConnectedError();
|
|
257
|
+
}
|
|
258
|
+
this.writeMsg({
|
|
259
|
+
joinRef: null,
|
|
260
|
+
ref: this.nextRef(),
|
|
261
|
+
topic: this.topic,
|
|
262
|
+
event,
|
|
263
|
+
payload,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
sendAck(ids) {
|
|
267
|
+
this.sendFireAndForget("ack", { ids });
|
|
268
|
+
}
|
|
269
|
+
assignedDID() {
|
|
270
|
+
return this.assignedDIDVal;
|
|
271
|
+
}
|
|
272
|
+
/** Whether the server supports the reply protocol (capability negotiated at join). */
|
|
273
|
+
replyProtocol() {
|
|
274
|
+
return this.replyProtocolEnabled;
|
|
275
|
+
}
|
|
276
|
+
close() {
|
|
277
|
+
if (this.closed)
|
|
278
|
+
return;
|
|
279
|
+
this.closed = true;
|
|
280
|
+
this.reconnecting = false;
|
|
281
|
+
this.stopLivenessTimers();
|
|
282
|
+
// Reject all pending refs
|
|
283
|
+
for (const [, pending] of this.pendingRefs) {
|
|
284
|
+
clearTimeout(pending.timer);
|
|
285
|
+
pending.reject(new Error("channel closed"));
|
|
286
|
+
}
|
|
287
|
+
this.pendingRefs.clear();
|
|
288
|
+
if (this.ws) {
|
|
289
|
+
// Send phx_leave before closing
|
|
290
|
+
try {
|
|
291
|
+
this.writeMsg({
|
|
292
|
+
joinRef: null,
|
|
293
|
+
ref: this.nextRef(),
|
|
294
|
+
topic: this.topic,
|
|
295
|
+
event: "phx_leave",
|
|
296
|
+
payload: {},
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
// ignore write errors during close
|
|
301
|
+
}
|
|
302
|
+
this.ws.close();
|
|
303
|
+
this.ws = null;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
setupReadLoop() {
|
|
307
|
+
if (!this.ws)
|
|
308
|
+
return;
|
|
309
|
+
this.ws.on("message", (data) => {
|
|
310
|
+
// Any inbound frame proves the connection is alive end-to-end —
|
|
311
|
+
// disarm both watchdogs before dispatch. Heartbeat ack, message
|
|
312
|
+
// event, phx_reply, phx_error, all count.
|
|
313
|
+
this.lastFrameAt = Date.now();
|
|
314
|
+
this.disarmPongWait();
|
|
315
|
+
try {
|
|
316
|
+
const msg = unmarshalPhoenixMsg(data.toString());
|
|
317
|
+
this.handleInbound(msg);
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
// Phoenix wire format parse failure — not a DIDComm error.
|
|
321
|
+
// Transport-level noise (e.g., truncated frames), matches Go SDK behavior.
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
// WS-level pong arrival in response to our ping (or unsolicited).
|
|
325
|
+
// Either way, the transport is alive — clear pong_wait. We also
|
|
326
|
+
// bump lastFrameAt for the Phoenix-level watchdog, since a pong
|
|
327
|
+
// round-trip proves cowboy + TCP are healthy.
|
|
328
|
+
this.ws.on("pong", () => {
|
|
329
|
+
this.lastFrameAt = Date.now();
|
|
330
|
+
this.disarmPongWait();
|
|
331
|
+
});
|
|
332
|
+
this.ws.on("close", () => {
|
|
333
|
+
if (!this.closed) {
|
|
334
|
+
this.rejectPendingRefs();
|
|
335
|
+
if (this.callbacks.onDisconnect) {
|
|
336
|
+
this.callbacks.onDisconnect(new Error("WebSocket closed"));
|
|
337
|
+
}
|
|
338
|
+
this.reconnectLoop();
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
this.ws.on("error", (err) => {
|
|
342
|
+
if (!this.closed) {
|
|
343
|
+
this.rejectPendingRefs();
|
|
344
|
+
if (this.callbacks.onDisconnect) {
|
|
345
|
+
this.callbacks.onDisconnect(err);
|
|
346
|
+
}
|
|
347
|
+
this.reconnectLoop();
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
handleInbound(msg) {
|
|
352
|
+
switch (msg.event) {
|
|
353
|
+
case "phx_reply":
|
|
354
|
+
// Join reply
|
|
355
|
+
if (this.pendingJoinResolve && msg.ref === this.joinRef) {
|
|
356
|
+
const resolve = this.pendingJoinResolve;
|
|
357
|
+
this.pendingJoinResolve = null;
|
|
358
|
+
resolve(msg.payload);
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
// Message send reply (ref tracking)
|
|
362
|
+
if (msg.ref) {
|
|
363
|
+
const pending = this.pendingRefs.get(msg.ref);
|
|
364
|
+
if (pending) {
|
|
365
|
+
const reply = msg.payload;
|
|
366
|
+
pending.resolve({
|
|
367
|
+
status: reply?.status ?? "",
|
|
368
|
+
reason: reply?.response?.reason ?? "",
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
break;
|
|
373
|
+
case "message":
|
|
374
|
+
this.callbacks.onMessage(msg.payload);
|
|
375
|
+
break;
|
|
376
|
+
case "phx_error":
|
|
377
|
+
case "phx_close":
|
|
378
|
+
if (this.callbacks.onDisconnect) {
|
|
379
|
+
this.callbacks.onDisconnect(new Error(`channel ${msg.event}`));
|
|
380
|
+
}
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
startHeartbeat() {
|
|
385
|
+
this.heartbeatTimer = setInterval(() => {
|
|
386
|
+
if (this.closed || !this.ws)
|
|
387
|
+
return;
|
|
388
|
+
const silentMs = Date.now() - this.lastFrameAt;
|
|
389
|
+
if (silentMs > PhoenixChannel.HEARTBEAT_MAX_SILENT_MS) {
|
|
390
|
+
// Application-layer hang: cloud-node's Phoenix Channel GenServer
|
|
391
|
+
// is no longer responding (we'd have seen heartbeat acks or
|
|
392
|
+
// other frames by now). Terminate the socket and let the
|
|
393
|
+
// existing reconnect path take over.
|
|
394
|
+
try {
|
|
395
|
+
this.ws.terminate();
|
|
396
|
+
}
|
|
397
|
+
catch {
|
|
398
|
+
// ignore
|
|
399
|
+
}
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
try {
|
|
403
|
+
this.writeMsg({
|
|
404
|
+
joinRef: null,
|
|
405
|
+
ref: this.nextRef(),
|
|
406
|
+
topic: "phoenix",
|
|
407
|
+
event: "heartbeat",
|
|
408
|
+
payload: {},
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
catch {
|
|
412
|
+
// heartbeat write failed — connection likely dead
|
|
413
|
+
}
|
|
414
|
+
}, PhoenixChannel.HEARTBEAT_INTERVAL_MS);
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* WS-level ping every WS_PING_INTERVAL_MS. Cowboy (Phoenix's HTTP/WS
|
|
418
|
+
* server) auto-pongs at the protocol layer — even if the application
|
|
419
|
+
* Channel is hung. When the underlying TCP / NAT / LB has silently
|
|
420
|
+
* dropped the connection, ping write may succeed locally but no pong
|
|
421
|
+
* comes back; pongWaitTimer fires and we force-close.
|
|
422
|
+
*/
|
|
423
|
+
startWsPingLoop() {
|
|
424
|
+
this.wsPingTimer = setInterval(() => {
|
|
425
|
+
if (this.closed || !this.ws)
|
|
426
|
+
return;
|
|
427
|
+
try {
|
|
428
|
+
this.ws.ping();
|
|
429
|
+
this.armPongWait();
|
|
430
|
+
}
|
|
431
|
+
catch {
|
|
432
|
+
// ping write failed — connection likely dead; let
|
|
433
|
+
// ws.on("error") path handle it
|
|
434
|
+
}
|
|
435
|
+
}, PhoenixChannel.WS_PING_INTERVAL_MS);
|
|
436
|
+
}
|
|
437
|
+
armPongWait() {
|
|
438
|
+
if (this.pongWaitTimer) {
|
|
439
|
+
clearTimeout(this.pongWaitTimer);
|
|
440
|
+
}
|
|
441
|
+
this.pongWaitTimer = setTimeout(() => {
|
|
442
|
+
this.pongWaitTimer = null;
|
|
443
|
+
if (this.closed || !this.ws)
|
|
444
|
+
return;
|
|
445
|
+
// No pong (or any frame) within WS_PONG_WAIT_MS of the last ping —
|
|
446
|
+
// transport is dead. Terminate; reconnect path takes over.
|
|
447
|
+
try {
|
|
448
|
+
this.ws.terminate();
|
|
449
|
+
}
|
|
450
|
+
catch {
|
|
451
|
+
// ignore
|
|
452
|
+
}
|
|
453
|
+
}, PhoenixChannel.WS_PONG_WAIT_MS);
|
|
454
|
+
}
|
|
455
|
+
disarmPongWait() {
|
|
456
|
+
if (this.pongWaitTimer) {
|
|
457
|
+
clearTimeout(this.pongWaitTimer);
|
|
458
|
+
this.pongWaitTimer = null;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
stopLivenessTimers() {
|
|
462
|
+
if (this.heartbeatTimer) {
|
|
463
|
+
clearInterval(this.heartbeatTimer);
|
|
464
|
+
this.heartbeatTimer = null;
|
|
465
|
+
}
|
|
466
|
+
if (this.wsPingTimer) {
|
|
467
|
+
clearInterval(this.wsPingTimer);
|
|
468
|
+
this.wsPingTimer = null;
|
|
469
|
+
}
|
|
470
|
+
this.disarmPongWait();
|
|
471
|
+
}
|
|
472
|
+
async reconnectLoop() {
|
|
473
|
+
if (this.reconnecting)
|
|
474
|
+
return;
|
|
475
|
+
this.reconnecting = true;
|
|
476
|
+
// Close existing ws
|
|
477
|
+
if (this.ws) {
|
|
478
|
+
this.ws.removeAllListeners();
|
|
479
|
+
this.ws.close();
|
|
480
|
+
this.ws = null;
|
|
481
|
+
}
|
|
482
|
+
// Stop all liveness timers — dial() will re-arm them after the new
|
|
483
|
+
// socket opens.
|
|
484
|
+
this.stopLivenessTimers();
|
|
485
|
+
const bo = new Backoff(1000, 30000);
|
|
486
|
+
while (!this.closed) {
|
|
487
|
+
const delay = bo.next();
|
|
488
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
489
|
+
if (this.closed)
|
|
490
|
+
return;
|
|
491
|
+
try {
|
|
492
|
+
await this.dial();
|
|
493
|
+
this.reconnecting = false;
|
|
494
|
+
if (this.callbacks.onReconnect) {
|
|
495
|
+
this.callbacks.onReconnect();
|
|
496
|
+
}
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
catch {
|
|
500
|
+
// will retry
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
rejectPendingRefs() {
|
|
505
|
+
for (const [, pending] of this.pendingRefs) {
|
|
506
|
+
clearTimeout(pending.timer);
|
|
507
|
+
pending.reject(new Error("disconnected"));
|
|
508
|
+
}
|
|
509
|
+
this.pendingRefs.clear();
|
|
510
|
+
}
|
|
511
|
+
nextRef() {
|
|
512
|
+
this.refCounter++;
|
|
513
|
+
return String(this.refCounter);
|
|
514
|
+
}
|
|
515
|
+
writeMsg(msg) {
|
|
516
|
+
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
|
|
517
|
+
throw new NotConnectedError();
|
|
518
|
+
}
|
|
519
|
+
this.ws.send(marshalPhoenixMsg(msg));
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
//# sourceMappingURL=channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import type { Config } from "./config.js";
|
|
3
|
+
import type { Credential, SignCredentialOptions, VerifiedCredential, VerifyCredentialOptions, StoreCredentialOptions, StoredCredential, ListCredentialsOptions } from "./credentials.js";
|
|
4
|
+
import type { SignPresentationOptions, VerifiedPresentation, VerifyPresentationOptions } from "./presentations.js";
|
|
5
|
+
import type { ErrorHandler } from "./errors.js";
|
|
6
|
+
import type { HandlerFn, HandlerOptions } from "./handler.js";
|
|
7
|
+
import type { Message } from "./message.js";
|
|
8
|
+
/** Options for request(). */
|
|
9
|
+
export interface RequestOptions {
|
|
10
|
+
/** Set pthid for nested thread correlation. */
|
|
11
|
+
parentThread?: string;
|
|
12
|
+
/** AbortSignal for timeout/cancellation control. */
|
|
13
|
+
signal?: AbortSignal;
|
|
14
|
+
}
|
|
15
|
+
/** Options for send(). */
|
|
16
|
+
export interface SendOptions {
|
|
17
|
+
/** Skip waiting for server acknowledgment. */
|
|
18
|
+
fireAndForget?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Layr8Client is the main entry point for interacting with the Layr8 platform.
|
|
22
|
+
*
|
|
23
|
+
* Lifecycle: new Layr8Client → handle (register handlers) → connect → ... → close
|
|
24
|
+
*
|
|
25
|
+
* Extends EventEmitter for "disconnect" and "reconnect" events.
|
|
26
|
+
*/
|
|
27
|
+
export declare class Layr8Client extends EventEmitter {
|
|
28
|
+
private readonly cfg;
|
|
29
|
+
private readonly onError;
|
|
30
|
+
private readonly registry;
|
|
31
|
+
private channel;
|
|
32
|
+
private connected;
|
|
33
|
+
private isClosed;
|
|
34
|
+
private agentDid;
|
|
35
|
+
private readonly rest;
|
|
36
|
+
/** Correlation map for Request/Response pattern: threadId → {resolve, reject} */
|
|
37
|
+
private readonly pending;
|
|
38
|
+
constructor(onError: ErrorHandler, cfg?: Config);
|
|
39
|
+
/** The agent's DID — either provided in Config or assigned by the node on connect(). */
|
|
40
|
+
get did(): string;
|
|
41
|
+
/**
|
|
42
|
+
* Register a handler for a DIDComm message type.
|
|
43
|
+
* Must be called BEFORE connect(). Throws AlreadyConnectedError after.
|
|
44
|
+
*/
|
|
45
|
+
handle(msgType: string, fn: HandlerFn, opts?: HandlerOptions): void;
|
|
46
|
+
/**
|
|
47
|
+
* Register a catch-all handler for any message type not matched by a specific handler.
|
|
48
|
+
* Must be called BEFORE connect(). Throws AlreadyConnectedError after.
|
|
49
|
+
*/
|
|
50
|
+
handleAll(fn: HandlerFn, opts?: HandlerOptions): void;
|
|
51
|
+
/**
|
|
52
|
+
* EventEmitter.emit() is synchronous and propagates listener exceptions.
|
|
53
|
+
* For SDK-internal events that fire on hot paths (inbound dispatch,
|
|
54
|
+
* outbound send), a throwing listener must NOT break the path — otherwise
|
|
55
|
+
* a pending request() can hang indefinitely. Route any throw to onError.
|
|
56
|
+
*/
|
|
57
|
+
private safeEmit;
|
|
58
|
+
/**
|
|
59
|
+
* Establish WebSocket connection and join the Phoenix Channel
|
|
60
|
+
* with protocols derived from registered handlers.
|
|
61
|
+
*/
|
|
62
|
+
connect(signal?: AbortSignal): Promise<void>;
|
|
63
|
+
/** Gracefully shut down the client connection. */
|
|
64
|
+
close(): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Send a message. By default waits for server acknowledgment.
|
|
67
|
+
* Pass `{ fireAndForget: true }` to skip waiting for the server reply.
|
|
68
|
+
*/
|
|
69
|
+
send(msg: Partial<Message>, opts?: SendOptions): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Send a message and wait for a correlated response.
|
|
72
|
+
* Throws on timeout (AbortSignal), ProblemReportError, or NotConnectedError.
|
|
73
|
+
*/
|
|
74
|
+
request(msg: Partial<Message>, opts?: RequestOptions): Promise<Message>;
|
|
75
|
+
/**
|
|
76
|
+
* Sign a W3C Verifiable Credential using the issuer's assertion key.
|
|
77
|
+
* Defaults: issuer = client.did, format = "compact_jwt".
|
|
78
|
+
*/
|
|
79
|
+
signCredential(credential: Credential, options?: SignCredentialOptions): Promise<string>;
|
|
80
|
+
/**
|
|
81
|
+
* Verify a signed credential using the verifier DID's assertion key.
|
|
82
|
+
* Defaults: verifier = client.did.
|
|
83
|
+
*/
|
|
84
|
+
verifyCredential(signedCredential: string, options?: VerifyCredentialOptions): Promise<VerifiedCredential>;
|
|
85
|
+
/**
|
|
86
|
+
* Store a signed credential JWT for a holder.
|
|
87
|
+
* Defaults: holder = client.did.
|
|
88
|
+
*/
|
|
89
|
+
storeCredential(credentialJwt: string, options?: StoreCredentialOptions): Promise<StoredCredential>;
|
|
90
|
+
/**
|
|
91
|
+
* List all stored credentials for a holder.
|
|
92
|
+
* Defaults: holder = client.did.
|
|
93
|
+
*/
|
|
94
|
+
listCredentials(options?: ListCredentialsOptions): Promise<StoredCredential[]>;
|
|
95
|
+
/** Retrieve a stored credential by ID. */
|
|
96
|
+
getCredential(credentialId: string): Promise<StoredCredential>;
|
|
97
|
+
/**
|
|
98
|
+
* Sign a W3C Verifiable Presentation wrapping one or more signed credentials.
|
|
99
|
+
* Uses the holder's authentication key (not assertion key).
|
|
100
|
+
* Defaults: holder = client.did, format = "compact_jwt".
|
|
101
|
+
*/
|
|
102
|
+
signPresentation(credentials: string[], options?: SignPresentationOptions): Promise<string>;
|
|
103
|
+
/**
|
|
104
|
+
* Verify a signed presentation using the verifier DID's authentication key.
|
|
105
|
+
* Defaults: verifier = client.did.
|
|
106
|
+
*/
|
|
107
|
+
verifyPresentation(signedPresentation: string, options?: VerifyPresentationOptions): Promise<VerifiedPresentation>;
|
|
108
|
+
private sendReplyMessage;
|
|
109
|
+
private handleInboundMessage;
|
|
110
|
+
private runHandler;
|
|
111
|
+
private runHandlerWithReply;
|
|
112
|
+
private sendDispatchReply;
|
|
113
|
+
private sendProblemReport;
|
|
114
|
+
private fillMessage;
|
|
115
|
+
private sendMessageAcked;
|
|
116
|
+
private sendMessageFireAndForget;
|
|
117
|
+
private sendMessage;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|