feat(device-plane): add typed B2 service ping transport

This commit is contained in:
Codex
2026-08-12 22:57:09 +03:00
parent bdb85cb4f7
commit 4b73a15765
24 changed files with 1322 additions and 88 deletions
@@ -44,12 +44,14 @@ test("B2 HEADER2 becomes a persisted masked quarantine discovery before ACK", as
acceptAdapterMessage: async (value) => {
storedMessage = value;
return {
schemaVersion: "nodedc.device-adapter-acceptance.v1",
acceptanceRef: "acceptance:integration-001",
idempotencyKey: value.safeView.idempotencyKey,
status: "accepted",
replayed: false,
acceptedAt: "2026-08-11T12:00:00.000Z",
acceptance: {
schemaVersion: "nodedc.device-adapter-acceptance.v1",
acceptanceRef: "acceptance:integration-001",
idempotencyKey: value.safeView.idempotencyKey,
status: "accepted",
replayed: false,
acceptedAt: "2026-08-11T12:00:00.000Z",
},
};
},
},
@@ -73,6 +75,7 @@ test("B2 HEADER2 becomes a persisted masked quarantine discovery before ACK", as
now: () => new Date(0x52db95de * 1000),
onDiscovery: observe.observeDiscovery,
onMessage: observe.acceptMessage,
onCommandStatus: async () => undefined,
});
const addresses = await gateway.start();
try {
@@ -115,6 +118,7 @@ function listen(server) {
function close(server) {
return new Promise((resolve, reject) => {
server.close((error) => (error ? reject(error) : resolve()));
server.closeAllConnections?.();
});
}
@@ -134,5 +138,12 @@ function exchange(port, payload, expectedBytes) {
}
});
socket.on("error", reject);
socket.on("close", () => {
if (byteLength < expectedBytes) {
reject(new Error(
`device_gateway_test_socket_closed_early:${byteLength}/${expectedBytes}`,
));
}
});
});
}