@econ-v1/rpc 7.6.112 → 7.6.114
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/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/transport-route-contract.d.ts +7 -0
- package/dist/transport-route-contract.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/index.js +5 -0
- package/src/protocol.js +133 -4
- package/src/transport-route-contract.js +26 -0
package/dist/index.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export type KernelEventByType<T extends KernelEventType> = import("@econ-v1/doma
|
|
|
28
28
|
export type KernelEventPayload<T extends KernelEventType> = import("@econ-v1/domain").KernelEventPayload<T>;
|
|
29
29
|
export type KernelEventType = import("@econ-v1/domain").KernelEventType;
|
|
30
30
|
export type OutboxIntent = import("@econ-v1/domain").OutboxIntent;
|
|
31
|
+
export type RouteSpeedTier = import("@econ-v1/domain").RouteSpeedTier;
|
|
31
32
|
export type QueryDiff<T> = import("@econ-v1/domain").QueryDiff<T>;
|
|
32
33
|
export type QueryName = import("@econ-v1/domain").QueryName;
|
|
33
34
|
export type SerializableClientError = import("@econ-v1/domain").SerializableClientError;
|
|
@@ -225,7 +226,7 @@ export type NodeSystemInfo = import("@econ-v1/domain").NodeSystemInfo;
|
|
|
225
226
|
export type NodeResources = import("@econ-v1/domain").NodeResources;
|
|
226
227
|
export type PushSubscriptionPort = import("@econ-v1/ports").PushSubscriptionPort;
|
|
227
228
|
export type PushSubscriptionJson = import("@econ-v1/ports").PushSubscriptionJson;
|
|
228
|
-
export { DOMAIN_ERROR_CODES, DomainError, SYNC_ERROR_CODES, SyncError, TRANSPORT_ERROR_CODES, TransportError } from "@econ-v1/domain";
|
|
229
|
+
export { DOMAIN_ERROR_CODES, DomainError, ROUTE_SPEED_TIERS, SYNC_ERROR_CODES, SyncError, TRANSPORT_ERROR_CODES, TransportError, speedTier } from "@econ-v1/domain";
|
|
229
230
|
export { deserializeClientError, isJsonValue, isSerializableClientError, serializeClientError } from "./errors.js";
|
|
230
231
|
export { DEFAULT_REQUEST_TIMEOUT_MS, KernelRpcTimeoutError, MessagePortKernelRpcClient } from "./message-port-client.js";
|
|
231
232
|
export { NODE_APP_LIFECYCLE_COMMAND, NODE_APP_MEMORY_CAPTURE_COMMAND, NODE_APP_MEMORY_DETAIL_QUERY, NODE_APP_MEMORY_DOWNLOAD_COMMAND, NODE_APP_MEMORY_LIST_QUERY, NODE_APP_MEMORY_OVERVIEW_QUERY, NODE_APP_MEMORY_STATUS_COMMAND } from "./node-app-memory-contract.js";
|
|
@@ -253,4 +254,5 @@ export { createResponsivenessTracker, EMA_HOLD_MS } from "./node-responsiveness.
|
|
|
253
254
|
export { validatePageUnderstanding, contextUtf8Bytes, PAGE_UNDERSTANDING_MAX_BYTES } from "./page-understanding-contract.js";
|
|
254
255
|
export { STAGE_DIAGNOSTICS_MAX_BYTES, validateStageDiagnostics } from "./stage-diagnostics-contract.js";
|
|
255
256
|
export { CLIENT_DEVICE_AGENT_ACCESS_SET_COMMAND, CLIENT_DEVICE_AGENT_ACCESS_SET_CAPABILITY, CLIENT_DEVICE_AGENT_ACCESS_STATES } from "./client-device-agent-access-contract.js";
|
|
257
|
+
export { TRANSPORT_PROBE_COMMAND, TRANSPORT_ROUTE_CHOOSE_COMMAND, parseTransportProbePayload, parseTransportRouteChoosePayload } from "./transport-route-contract.js";
|
|
256
258
|
//# 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.js"],"names":[],"mappings":";;;;;;;;;;;;8BAEc,OAAO,aAAa,EAAE,eAAe;mCACrC,OAAO,4BAA4B,EAAE,oBAAoB;4BACzD,OAAO,wBAAwB,EAAE,aAAa;kCAC9C,OAAO,0BAA0B,EAAE,mBAAmB;oCACtD,OAAO,0BAA0B,EAAE,qBAAqB;4BACxD,OAAO,aAAa,EAAE,aAAa;8BACnC,OAAO,aAAa,EAAE,eAAe;0BACrC,OAAO,aAAa,EAAE,WAAW;oCACjC,OAAO,aAAa,EAAE,qBAAqB;gCAC3C,OAAO,aAAa,EAAE,iBAAiB;gCACvC,OAAO,aAAa,EAAE,iBAAiB;0BACvC,OAAO,iBAAiB,EAAE,WAAW;0BACrC,OAAO,iBAAiB,EAAE,WAAW;8BACrC,OAAO,iBAAiB,EAAE,eAAe;8BACvB,CAAC,SAAlB,eAAgB,IAAa,OAAO,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;+BAC1D,CAAC,SAAlB,eAAgB,IAAa,OAAO,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC;8BAC7E,OAAO,iBAAiB,EAAE,eAAe;2BACzC,OAAO,iBAAiB,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"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"}
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.js"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,6CAHW,UAAU,GACR,MAAM,CA2ClB;AACD;;;GAGG;AACH,kDAHW,MAAM,GACJ,UAAU,CAoCtB;AAYD;;;GAGG;AACH,+CAHW,WAAW,GACT,MAAM,CAMlB;AACD;;;GAGG;AACH,mDAHW,MAAM,GACJ,WAAW,CAUvB;AACD;;;GAGG;AACH,yCAHW,QAAQ,GACN,MAAM,CAclB;AACD;;;GAGG;AACH,gDAHW,MAAM,GACJ,QAAQ,CAwBpB;AA8cD;;;;;;;;;;;;;;;;GAgBG;AACH,+CAJW,SAAS,cACT,MAAM,GACJ,WAAW,GAAG,SAAS,CAsCnC;AA1qBD;;;;GAIG;AACH,2CAA4C,wBAAwB,CAAC;uCAVvD;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAA;CAAE;kCACvH,WAAW,GAAG,wBAAwB;0CACtC,mBAAmB,GAAG,wBAAwB;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** @param {unknown} value @returns {import("@econ-v1/ports").TransportRungName} */
|
|
2
|
+
export function parseTransportProbePayload(value: unknown): import("@econ-v1/ports").TransportRungName;
|
|
3
|
+
/** @param {unknown} value @returns {import("@econ-v1/ports").TransportRungName | "auto"} */
|
|
4
|
+
export function parseTransportRouteChoosePayload(value: unknown): import("@econ-v1/ports").TransportRungName | "auto";
|
|
5
|
+
export const TRANSPORT_PROBE_COMMAND: "transport.probe.v1";
|
|
6
|
+
export const TRANSPORT_ROUTE_CHOOSE_COMMAND: "transport.route.choose.v1";
|
|
7
|
+
//# sourceMappingURL=transport-route-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport-route-contract.d.ts","sourceRoot":"","sources":["../src/transport-route-contract.js"],"names":[],"mappings":"AAMA,mFAAmF;AACnF,kDADY,OAAO,GAAkB,OAAO,gBAAgB,EAAE,iBAAiB,CAI9E;AACD,4FAA4F;AAC5F,wDADY,OAAO,GAAkB,OAAO,gBAAgB,EAAE,iBAAiB,GAAG,MAAM,CAGvF;AAXD,sCAA6D,oBAAoB,CAAE;AACnF,6CAAoE,2BAA2B,CAAE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@econ-v1/rpc",
|
|
3
|
-
"version": "7.6.
|
|
3
|
+
"version": "7.6.114",
|
|
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.6.
|
|
60
|
-
"@econ-v1/ports": "7.6.
|
|
59
|
+
"@econ-v1/domain": "7.6.114",
|
|
60
|
+
"@econ-v1/ports": "7.6.114"
|
|
61
61
|
}
|
|
62
62
|
}
|
package/src/index.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
/** @template {KernelEventType} T @typedef {import("@econ-v1/domain").KernelEventPayload<T>} KernelEventPayload */
|
|
19
19
|
/** @typedef {import("@econ-v1/domain").KernelEventType} KernelEventType */
|
|
20
20
|
/** @typedef {import("@econ-v1/domain").OutboxIntent} OutboxIntent */
|
|
21
|
+
/** @typedef {import("@econ-v1/domain").RouteSpeedTier} RouteSpeedTier */
|
|
21
22
|
/** @template T @typedef {import("@econ-v1/domain").QueryDiff<T>} QueryDiff */
|
|
22
23
|
/** @typedef {import("@econ-v1/domain").QueryName} QueryName */
|
|
23
24
|
/** @typedef {import("@econ-v1/domain").SerializableClientError} SerializableClientError */
|
|
@@ -193,10 +194,12 @@
|
|
|
193
194
|
export {
|
|
194
195
|
DOMAIN_ERROR_CODES,
|
|
195
196
|
DomainError,
|
|
197
|
+
ROUTE_SPEED_TIERS,
|
|
196
198
|
SYNC_ERROR_CODES,
|
|
197
199
|
SyncError,
|
|
198
200
|
TRANSPORT_ERROR_CODES,
|
|
199
201
|
TransportError,
|
|
202
|
+
speedTier,
|
|
200
203
|
} from "@econ-v1/domain";
|
|
201
204
|
export {
|
|
202
205
|
deserializeClientError,
|
|
@@ -335,3 +338,5 @@ export { NODE_RESOURCES_QUERY } from "./node-resources-contract.js";
|
|
|
335
338
|
|
|
336
339
|
/** @typedef {import("@econ-v1/ports").PushSubscriptionPort} PushSubscriptionPort */
|
|
337
340
|
/** @typedef {import("@econ-v1/ports").PushSubscriptionJson} PushSubscriptionJson */
|
|
341
|
+
|
|
342
|
+
export { TRANSPORT_PROBE_COMMAND, TRANSPORT_ROUTE_CHOOSE_COMMAND, parseTransportProbePayload, parseTransportRouteChoosePayload } from "./transport-route-contract.js";
|
package/src/protocol.js
CHANGED
|
@@ -795,6 +795,59 @@ function timestampField(value, field) {
|
|
|
795
795
|
}
|
|
796
796
|
return candidate;
|
|
797
797
|
}
|
|
798
|
+
/** @param {JsonObject} value @param {readonly string[]} fields */
|
|
799
|
+
function segmentFields(value, fields) {
|
|
800
|
+
if (Object.keys(value).some(key => !fields.includes(key))) throw new TypeError("Unexpected transport segment field");
|
|
801
|
+
}
|
|
802
|
+
/** @param {JsonObject} value @param {string} field */
|
|
803
|
+
function segmentMs(value, field) {
|
|
804
|
+
const ms = numberField(value, field);
|
|
805
|
+
if (!Number.isFinite(ms) || ms < 0) throw new TypeError("Expected nonnegative finite segment milliseconds");
|
|
806
|
+
return ms;
|
|
807
|
+
}
|
|
808
|
+
/** @param {JsonObject} value @returns {true | undefined} */
|
|
809
|
+
function segmentBroken(value) {
|
|
810
|
+
if (value.broken === undefined) return undefined;
|
|
811
|
+
if (value.broken !== true) throw new TypeError("Expected broken to be true");
|
|
812
|
+
return true;
|
|
813
|
+
}
|
|
814
|
+
/** @param {JsonObject} value @returns {import('@econ-v1/ports').TransportSegments} */
|
|
815
|
+
function transportSegments(value) {
|
|
816
|
+
segmentFields(value, ["kind", "network", "relay", "node", "measuredAt"]);
|
|
817
|
+
const kind = stringField(value, "kind");
|
|
818
|
+
if (kind !== "direct" && kind !== "punch" && kind !== "relay") throw new TypeError("Invalid segment kind");
|
|
819
|
+
const measuredAt = timestampField(value, "measuredAt");
|
|
820
|
+
/** @type {import('@econ-v1/ports').TransportSegments['network']} */
|
|
821
|
+
let network;
|
|
822
|
+
/** @type {import('@econ-v1/ports').TransportSegments['relay']} */
|
|
823
|
+
let relay;
|
|
824
|
+
/** @type {import('@econ-v1/ports').TransportSegments['node']} */
|
|
825
|
+
let node;
|
|
826
|
+
if (value.network !== undefined) {
|
|
827
|
+
if (kind === "relay") throw new TypeError("Relay segments cannot contain network");
|
|
828
|
+
const leg = objectField(value, "network");
|
|
829
|
+
segmentFields(leg, ["ms", "broken"]);
|
|
830
|
+
const broken = segmentBroken(leg);
|
|
831
|
+
network = { ms: segmentMs(leg, "ms"), ...(broken === undefined ? {} : { broken }) };
|
|
832
|
+
}
|
|
833
|
+
if (value.relay !== undefined) {
|
|
834
|
+
if (kind !== "relay") throw new TypeError("Only relay segments contain relay");
|
|
835
|
+
const leg = objectField(value, "relay");
|
|
836
|
+
segmentFields(leg, ["browserRelayMs", "relayNodeMs", "broken"]);
|
|
837
|
+
const broken = segmentBroken(leg);
|
|
838
|
+
relay = {
|
|
839
|
+
...(leg.browserRelayMs === undefined ? {} : { browserRelayMs: segmentMs(leg, "browserRelayMs") }),
|
|
840
|
+
...(leg.relayNodeMs === undefined ? {} : { relayNodeMs: segmentMs(leg, "relayNodeMs") }),
|
|
841
|
+
...(broken === undefined ? {} : { broken }),
|
|
842
|
+
};
|
|
843
|
+
}
|
|
844
|
+
if (value.node !== undefined) {
|
|
845
|
+
const leg = objectField(value, "node");
|
|
846
|
+
segmentFields(leg, ["ms"]);
|
|
847
|
+
node = { ms: segmentMs(leg, "ms") };
|
|
848
|
+
}
|
|
849
|
+
return { kind, measuredAt, ...(network === undefined ? {} : { network }), ...(relay === undefined ? {} : { relay }), ...(node === undefined ? {} : { node }) };
|
|
850
|
+
}
|
|
798
851
|
/**
|
|
799
852
|
* @param {JsonObject} event
|
|
800
853
|
* @returns {KernelEventPayload<"transport.state-changed">}
|
|
@@ -805,6 +858,7 @@ function transportStateChangedPayload(event) {
|
|
|
805
858
|
const changedAt = timestampField(state, "changedAt");
|
|
806
859
|
const path = stringField(state, "path");
|
|
807
860
|
const status = stringField(state, "status");
|
|
861
|
+
if (status !== "connected" && state.segments !== undefined) throw new TypeError("Only connected states contain segments");
|
|
808
862
|
if (status === "connected" && isConnectedTransportPath(path)) {
|
|
809
863
|
/** @type {Extract<import("@econ-v1/ports").TransportState, { status: "connected" }>["relayMember"]} */
|
|
810
864
|
let relayMember;
|
|
@@ -821,27 +875,47 @@ function transportStateChangedPayload(event) {
|
|
|
821
875
|
if (checking !== undefined && typeof checking !== "boolean")
|
|
822
876
|
throw new TypeError("Expected transport checking to be a boolean");
|
|
823
877
|
const rttMs = state.rttMs === undefined ? undefined : numberField(state, "rttMs");
|
|
878
|
+
const segments = state.segments === undefined ? undefined : transportSegments(objectField(state, "segments"));
|
|
879
|
+
const origin = state.origin === undefined ? undefined : transportOrigin(state.origin);
|
|
880
|
+
const check = state.check === undefined ? undefined : transportCheck(objectField(state, "check"));
|
|
881
|
+
const choice = state.choice === undefined ? undefined : transportChoice(objectField(state, "choice"));
|
|
882
|
+
const choiceLost = state.choiceLost === undefined ? undefined : transportChoiceLost(objectField(state, "choiceLost"));
|
|
824
883
|
return { state: { changedAt, path, status,
|
|
825
884
|
...(checking === undefined ? {} : { checking }),
|
|
826
885
|
...(relayMember === undefined ? {} : { relayMember }),
|
|
827
886
|
...(punchDetails === undefined ? {} : { punch: punchDetails }),
|
|
828
887
|
...(rttMs === undefined ? {} : { rttMs }),
|
|
888
|
+
...(segments === undefined ? {} : { segments }),
|
|
889
|
+
...(origin === undefined ? {} : { origin }),
|
|
890
|
+
...(check === undefined ? {} : { check }),
|
|
891
|
+
...(choice === undefined ? {} : { choice }),
|
|
892
|
+
...(choiceLost === undefined ? {} : { choiceLost }),
|
|
829
893
|
...transportRouteEvidence(state),
|
|
830
894
|
} };
|
|
831
895
|
}
|
|
832
896
|
if (path === "offline") {
|
|
833
897
|
const relay = { ...transportRouteEvidence(state), ...(state.relay === undefined ? {} : { relay: transportRelayDetail(objectField(state, "relay")) }) };
|
|
898
|
+
const origin = state.origin === undefined ? undefined : transportOrigin(state.origin);
|
|
899
|
+
const check = state.check === undefined ? undefined : transportCheck(objectField(state, "check"));
|
|
900
|
+
const choice = state.choice === undefined ? undefined : transportChoice(objectField(state, "choice"));
|
|
901
|
+
const choiceLost = state.choiceLost === undefined ? undefined : transportChoiceLost(objectField(state, "choiceLost"));
|
|
902
|
+
const additive = {
|
|
903
|
+
...(origin === undefined ? {} : { origin }),
|
|
904
|
+
...(check === undefined ? {} : { check }),
|
|
905
|
+
...(choice === undefined ? {} : { choice }),
|
|
906
|
+
...(choiceLost === undefined ? {} : { choiceLost }),
|
|
907
|
+
};
|
|
834
908
|
if (status === "connecting")
|
|
835
|
-
return { state: { attempt: integerField(state, "attempt"), changedAt, path, status, ...relay } };
|
|
909
|
+
return { state: { attempt: integerField(state, "attempt"), changedAt, path, status, ...relay, ...additive } };
|
|
836
910
|
if (status === "reconnecting") {
|
|
837
911
|
return { state: { attempt: integerField(state, "attempt"), changedAt,
|
|
838
|
-
nextRetryAt: timestampField(state, "nextRetryAt"), path, status, ...relay } };
|
|
912
|
+
nextRetryAt: timestampField(state, "nextRetryAt"), path, status, ...relay, ...additive } };
|
|
839
913
|
}
|
|
840
914
|
if (status === "offline") {
|
|
841
915
|
const reason = optionalStringField(state, "reason");
|
|
842
916
|
if (reason !== undefined && !isTransportOfflineReason(reason))
|
|
843
917
|
throw new TypeError("Expected a valid transport offline reason");
|
|
844
|
-
return { state: { changedAt, path, status, ...relay, ...(reason === undefined ? {} : { reason }) } };
|
|
918
|
+
return { state: { changedAt, path, status, ...relay, ...additive, ...(reason === undefined ? {} : { reason }) } };
|
|
845
919
|
}
|
|
846
920
|
}
|
|
847
921
|
throw new TypeError("Expected a valid transport state");
|
|
@@ -857,12 +931,16 @@ function transportRouteEvidence(state) {
|
|
|
857
931
|
const rung = key => {
|
|
858
932
|
const value = objectField(ladder, key);
|
|
859
933
|
const status = stringField(value, "status");
|
|
860
|
-
if (status !== "active" && status !== "standby" && status !== "failed" && status !== "trying" && status !== "skipped" && status !== "untried")
|
|
934
|
+
if (status !== "active" && status !== "standby" && status !== "failed" && status !== "trying" && status !== "skipped" && status !== "untried" && status !== "ok" && status !== "not-needed")
|
|
861
935
|
throw new TypeError("Expected route rung status");
|
|
936
|
+
const rttMs = value.rttMs === undefined ? undefined : numberField(value, "rttMs");
|
|
862
937
|
return { status,
|
|
863
938
|
...(value.at === undefined ? {} : { at: timestampField(value, "at") }),
|
|
864
939
|
...(value.nextAt === undefined ? {} : { nextAt: timestampField(value, "nextAt") }),
|
|
865
940
|
...(value.reason === undefined ? {} : { reason: stringField(value, "reason") }),
|
|
941
|
+
...(rttMs === undefined ? {} : { rttMs }),
|
|
942
|
+
...(value.checkedAt === undefined ? {} : { checkedAt: timestampField(value, "checkedAt") }),
|
|
943
|
+
...(value.expiresAt === undefined ? {} : { expiresAt: timestampField(value, "expiresAt") }),
|
|
866
944
|
};
|
|
867
945
|
};
|
|
868
946
|
result.ladder = { lan: rung("lan"), wan: rung("wan"), punch: rung("punch"), relay: rung("relay") };
|
|
@@ -877,6 +955,57 @@ function transportRouteEvidence(state) {
|
|
|
877
955
|
}
|
|
878
956
|
return result;
|
|
879
957
|
}
|
|
958
|
+
/** Validate a TransportOrigin string.
|
|
959
|
+
* @param {unknown} value
|
|
960
|
+
* @returns {import('@econ-v1/ports').TransportOrigin}
|
|
961
|
+
*/
|
|
962
|
+
function transportOrigin(value) {
|
|
963
|
+
if (value !== "lan" && value !== "public") throw new TypeError("Expected transport origin");
|
|
964
|
+
return value;
|
|
965
|
+
}
|
|
966
|
+
/** Validate a TransportRungName string.
|
|
967
|
+
* @param {unknown} value
|
|
968
|
+
* @returns {import('@econ-v1/ports').TransportRungName}
|
|
969
|
+
*/
|
|
970
|
+
function transportRungName(value) {
|
|
971
|
+
if (value !== "lan" && value !== "wan" && value !== "punch" && value !== "relay") throw new TypeError("Expected transport rung name");
|
|
972
|
+
return value;
|
|
973
|
+
}
|
|
974
|
+
/** Validate and parse a TransportCheck object.
|
|
975
|
+
* @param {JsonObject} value
|
|
976
|
+
* @returns {import('@econ-v1/ports').TransportCheck}
|
|
977
|
+
*/
|
|
978
|
+
function transportCheck(value) {
|
|
979
|
+
const running = typeof value.running === "boolean" ? value.running : (() => { throw new TypeError("Expected transport check running flag"); })();
|
|
980
|
+
const step = integerField(value, "step");
|
|
981
|
+
const total = integerField(value, "total");
|
|
982
|
+
const startedAt = timestampField(value, "startedAt");
|
|
983
|
+
if (step < 1 || total < 1) throw new TypeError("Expected positive step/total counts");
|
|
984
|
+
return { running, step, total, startedAt };
|
|
985
|
+
}
|
|
986
|
+
/** Validate and parse a TransportChoice object.
|
|
987
|
+
* @param {JsonObject} value
|
|
988
|
+
* @returns {import('@econ-v1/ports').TransportChoice}
|
|
989
|
+
*/
|
|
990
|
+
function transportChoice(value) {
|
|
991
|
+
return {
|
|
992
|
+
rung: transportRungName(stringField(value, "rung")),
|
|
993
|
+
since: timestampField(value, "since"),
|
|
994
|
+
};
|
|
995
|
+
}
|
|
996
|
+
/** Validate and parse a TransportChoiceLost object.
|
|
997
|
+
* @param {JsonObject} value
|
|
998
|
+
* @returns {import('@econ-v1/ports').TransportChoiceLost}
|
|
999
|
+
*/
|
|
1000
|
+
function transportChoiceLost(value) {
|
|
1001
|
+
const reason = stringField(value, "reason");
|
|
1002
|
+
if (reason.length > 200) throw new TypeError("Expected choice-lost reason too long");
|
|
1003
|
+
return {
|
|
1004
|
+
rung: transportRungName(stringField(value, "rung")),
|
|
1005
|
+
at: timestampField(value, "at"),
|
|
1006
|
+
reason,
|
|
1007
|
+
};
|
|
1008
|
+
}
|
|
880
1009
|
/** @param {JsonObject} detail @returns {import('@econ-v1/ports').TransportRelayDetail} */
|
|
881
1010
|
function transportRelayDetail(detail) {
|
|
882
1011
|
if (typeof detail.inFlight !== 'boolean' || !Array.isArray(detail.attempts) || detail.attempts.length > 16)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { DomainError } from "@econ-v1/domain";
|
|
3
|
+
|
|
4
|
+
export const TRANSPORT_PROBE_COMMAND = /** @type {const} */ ("transport.probe.v1");
|
|
5
|
+
export const TRANSPORT_ROUTE_CHOOSE_COMMAND = /** @type {const} */ ("transport.route.choose.v1");
|
|
6
|
+
|
|
7
|
+
/** @param {unknown} value @returns {import("@econ-v1/ports").TransportRungName} */
|
|
8
|
+
export function parseTransportProbePayload(value) {
|
|
9
|
+
const rung = parseRoute(value, false);
|
|
10
|
+
return /** @type {import("@econ-v1/ports").TransportRungName} */ (rung);
|
|
11
|
+
}
|
|
12
|
+
/** @param {unknown} value @returns {import("@econ-v1/ports").TransportRungName | "auto"} */
|
|
13
|
+
export function parseTransportRouteChoosePayload(value) {
|
|
14
|
+
return parseRoute(value, true);
|
|
15
|
+
}
|
|
16
|
+
/** @param {unknown} value @param {boolean} allowAuto
|
|
17
|
+
* @returns {import("@econ-v1/ports").TransportRungName | "auto"} */
|
|
18
|
+
function parseRoute(value, allowAuto) {
|
|
19
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value) &&
|
|
20
|
+
Object.keys(value).length === 1 && Object.hasOwn(value, "rung")) {
|
|
21
|
+
const { rung } = /** @type {{ rung: unknown }} */ (value);
|
|
22
|
+
if (rung === "lan" || rung === "wan" || rung === "punch" || rung === "relay" || (allowAuto && rung === "auto"))
|
|
23
|
+
return rung;
|
|
24
|
+
}
|
|
25
|
+
throw new DomainError({ code: "invalid_request", message: "Expected exactly one known route rung" });
|
|
26
|
+
}
|