@econ-v1/rpc 7.0.3 → 7.0.5
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-port-client.d.ts","sourceRoot":"","sources":["../src/message-port-client.js"],"names":[],"mappings":"AA+CA;;;GAGG;AACH;IAQE;;;;OAIG;IACH,yBAJW,MAAM,iBACN,MAAM,aACN,MAAM,EAQhB;IAlBD,+BAA+B;IAC/B,sBADqB,MAAM,CACf;IACZ,+BAA+B;IAC/B,wBADqB,MAAM,CACb;IACd,+BAA+B;IAC/B,oBADqB,MAAM,CACjB;CAcX;
|
|
1
|
+
{"version":3,"file":"message-port-client.d.ts","sourceRoot":"","sources":["../src/message-port-client.js"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@econ-v1/rpc",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.5",
|
|
4
4
|
"description": "Typed runtime and contracts for Node client stage-to-kernel RPC",
|
|
5
5
|
"license": "MIT OR Apache-2.0",
|
|
6
6
|
"author": "Node contributors",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"access": "public"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@econ-v1/domain": "7.0.
|
|
60
|
-
"@econ-v1/ports": "7.0.
|
|
59
|
+
"@econ-v1/domain": "7.0.5",
|
|
60
|
+
"@econ-v1/ports": "7.0.5"
|
|
61
61
|
}
|
|
62
62
|
}
|
|
@@ -75,6 +75,43 @@ export class KernelRpcTimeoutError extends Error {
|
|
|
75
75
|
// Thirty seconds bounds dropped fire-and-forget messages without penalizing slow devices.
|
|
76
76
|
const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
|
|
77
77
|
|
|
78
|
+
// The ceiling for a deadline a STAGE declares on a capability invoke — the same
|
|
79
|
+
// 300s the host validates (InvokeCapabilityRequest, 100..300000) and the kernel
|
|
80
|
+
// dispatcher hoists (10b80d48c). This port is the remaining hop on that path:
|
|
81
|
+
// the dispatcher fix carried a declared timeout kernel→host, but every request
|
|
82
|
+
// still died HERE at the flat 30s first — invisible on a fast machine where the
|
|
83
|
+
// ack beats the clock, and the whole story on a Pi Zero, where "Turn failed …
|
|
84
|
+
// timed out after 30000ms" fired while the host was mid-turn honoring the five
|
|
85
|
+
// minutes the stage had asked for.
|
|
86
|
+
const MAX_DECLARED_TIMEOUT_MS = 300_000;
|
|
87
|
+
// Grace on top of a declared deadline: the host times the provider, this port
|
|
88
|
+
// times host + transport — an equal deadline would race the host's own verdict
|
|
89
|
+
// and report the loss as a port timeout instead of the host's clearer error.
|
|
90
|
+
const DECLARED_TIMEOUT_GRACE_MS = 5_000;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The deadline for one request. Only a stage capability invoke may stretch the
|
|
94
|
+
* port's clock, and only by the same `timeout_ms` field the kernel dispatcher
|
|
95
|
+
* reads out of the payload — one declaration, honored on every hop. Everything
|
|
96
|
+
* else keeps the flat default that #1751 introduced to stop hung requests.
|
|
97
|
+
* @param {RpcRequestWithoutId} request
|
|
98
|
+
* @param {number} defaultMs
|
|
99
|
+
* @returns {number}
|
|
100
|
+
*/
|
|
101
|
+
function requestTimeoutMs(request, defaultMs) {
|
|
102
|
+
if (request.type !== "stage.capability.invoke") return defaultMs;
|
|
103
|
+
const payload = request.payload;
|
|
104
|
+
const declared = typeof payload === "object" && payload !== null && !Array.isArray(payload)
|
|
105
|
+
? (/** @type {Record<string, unknown>} */ (payload)).timeout_ms
|
|
106
|
+
: undefined;
|
|
107
|
+
if (typeof declared !== "number" || !Number.isFinite(declared)) return defaultMs;
|
|
108
|
+
const clamped = Math.min(MAX_DECLARED_TIMEOUT_MS, Math.max(100, Math.trunc(declared)));
|
|
109
|
+
// A declaration matters only when it asks for MORE than the port would
|
|
110
|
+
// already wait — it may extend the clock, never shorten it, and a tiny
|
|
111
|
+
// declared value must not start failing ordinary invokes early.
|
|
112
|
+
return clamped > defaultMs ? clamped + DECLARED_TIMEOUT_GRACE_MS : defaultMs;
|
|
113
|
+
}
|
|
114
|
+
|
|
78
115
|
/** @implements {KernelRpcClient} */
|
|
79
116
|
export class MessagePortKernelRpcClient {
|
|
80
117
|
/** @type {Map<string, EventGroup>} */
|
|
@@ -403,9 +440,10 @@ export class MessagePortKernelRpcClient {
|
|
|
403
440
|
const commandName = "name" in request
|
|
404
441
|
? request.name
|
|
405
442
|
: "capability" in request ? request.capability : request.type;
|
|
443
|
+
const timeoutMs = requestTimeoutMs(request, this.#requestTimeoutMs);
|
|
406
444
|
const timeoutId = globalThis.setTimeout(() => {
|
|
407
|
-
this.#takePending(id)?.reject(new KernelRpcTimeoutError(commandName, id,
|
|
408
|
-
},
|
|
445
|
+
this.#takePending(id)?.reject(new KernelRpcTimeoutError(commandName, id, timeoutMs));
|
|
446
|
+
}, timeoutMs);
|
|
409
447
|
this.#pending.set(id, { reject, resolve, sessionId, timeoutId });
|
|
410
448
|
try {
|
|
411
449
|
this.#transport.send(serializeRpcRequest(/** @type {RpcRequest} */ ({ ...request, id })));
|