@econ-v1/rpc 6.14.0 → 7.0.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/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/onboarding/onboarding-contract.d.ts +1 -0
- package/dist/onboarding/onboarding-contract.d.ts.map +1 -1
- package/dist/protocol.d.ts +25 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/stage-catalog-contract.d.ts +62 -0
- package/dist/stage-catalog-contract.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/index.js +8 -0
- package/src/onboarding/onboarding-contract.js +1 -1
- package/src/protocol.js +100 -0
- package/src/stage-catalog-contract.js +76 -0
package/dist/index.d.ts
CHANGED
|
@@ -54,6 +54,7 @@ export type ShellVersionReport = import("@econ-v1/ports").ShellVersionReport;
|
|
|
54
54
|
export type InstallEnvironmentPort = import("@econ-v1/ports").InstallEnvironmentPort;
|
|
55
55
|
export type InstallInstructionMode = import("@econ-v1/ports").InstallInstructionMode;
|
|
56
56
|
export type MediaPreferencesPort = import("@econ-v1/ports").MediaPreferencesPort;
|
|
57
|
+
export type StageAvailability = import("@econ-v1/ports").StageAvailability;
|
|
57
58
|
export type StageCatalogEntry = import("@econ-v1/ports").StageCatalogEntry;
|
|
58
59
|
export type StagePerformanceSignal = import("@econ-v1/ports").StagePerformanceSignal;
|
|
59
60
|
export type StagePerformanceViolationKind = import("@econ-v1/ports").StagePerformanceViolationKind;
|
|
@@ -145,9 +146,10 @@ export { NODE_APP_MEMORY_CAPTURE_COMMAND, NODE_APP_MEMORY_DETAIL_QUERY, NODE_APP
|
|
|
145
146
|
export { CLIENT_DEVICE_PAIRING_STATUS_QUERY, CLIENT_DEVICE_WIRE_ERROR_DEVICE_NOT_REGISTERED, CLIENT_DEVICE_WIRE_ERROR_LAST_DEVICE, CLIENT_DEVICE_WIRE_ERROR_LAST_DEVICE_PROTECTED, CLIENT_DEVICE_WIRE_ERROR_NAME_TAKEN } from "./pairing-status-contract.js";
|
|
146
147
|
export { DEVICE_CLEANUP_CANCEL_COMMAND, DEVICE_CLEANUP_QUERY, DEVICE_CLEANUP_REQUEST_COMMAND, DEVICE_CLEANUP_STATUS_COMMAND } from "./device-cleanup-contract.js";
|
|
147
148
|
export { CONNECTIVITY_STATE_QUERY, TRANSPORT_STATE_QUERY, TRANSPORT_STATE_QUERY_V2 } from "./transport-contract.js";
|
|
149
|
+
export { isStageReady, normalizeStageAvailability, STAGE_AVAILABILITY, STAGE_CATALOG_AVAILABILITY_OPT_IN } from "./stage-catalog-contract.js";
|
|
148
150
|
export { DISCOVER_NODE_COMMAND, DISCOVERY_PROBE_COMMAND, DISCOVERY_PROMOTE_COMMAND, DISCOVERY_QUERY, isDiscoverNodePayload, isProbeCandidatesPayload, isPromoteCandidatePayload } from "./onboarding/discovery-contract.js";
|
|
149
151
|
export { isOnboardingCommand, ONBOARDING_COMMAND, ONBOARDING_EVENTS, ONBOARDING_FLOW_QUERY, ONBOARDING_LCD_SCREEN_QUERY, ONBOARDING_STATUS_QUERY, ONBOARDING_STEP_IDS } from "./onboarding/onboarding-contract.js";
|
|
150
152
|
export { TRUST_INSTALL_RESTART_COMMAND, TRUST_SKIP_COMMAND, TRUST_STATUS_QUERY, TRUST_VERIFY_COMMAND, isTrustInstallRestartPayload, isTrustSkipPayload, isTrustVerifyPayload } from "./trust-contract.js";
|
|
151
153
|
export { isOwnerClaimCompletePayload, OWNER_CLAIM_COMPLETE_COMMAND, OWNER_CLAIM_PREPARE_COMMAND } from "./onboarding/owner-claim-contract.js";
|
|
152
|
-
export { deserializeRpcEvent, deserializeRpcRequest, deserializeRpcResponse, serializeRpcEvent, serializeRpcRequest, serializeRpcResponse } from "./protocol.js";
|
|
154
|
+
export { deserializeRpcEvent, deserializeRpcRequest, deserializeRpcResponse, ipPoolHealthChangedEvent, serializeRpcEvent, serializeRpcRequest, serializeRpcResponse } from "./protocol.js";
|
|
153
155
|
//# 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":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"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"}
|
|
@@ -67,6 +67,7 @@ export type OnboardingFlowBase = {
|
|
|
67
67
|
};
|
|
68
68
|
export type OnboardingFlowView = (OnboardingFlowBase & {
|
|
69
69
|
readonly networks: readonly OnboardingNetwork[];
|
|
70
|
+
readonly probing: boolean;
|
|
70
71
|
readonly scanning: boolean;
|
|
71
72
|
readonly stepId: "choose-network";
|
|
72
73
|
}) | (OnboardingFlowBase & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding-contract.d.ts","sourceRoot":"","sources":["../../src/onboarding/onboarding-contract.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"onboarding-contract.d.ts","sourceRoot":"","sources":["../../src/onboarding/onboarding-contract.js"],"names":[],"mappings":"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"}
|
package/dist/protocol.d.ts
CHANGED
|
@@ -28,6 +28,30 @@ export function serializeRpcEvent(event: RpcEvent): string;
|
|
|
28
28
|
* @returns {RpcEvent}
|
|
29
29
|
*/
|
|
30
30
|
export function deserializeRpcEvent(serialized: string): RpcEvent;
|
|
31
|
+
/**
|
|
32
|
+
* Bridge the raw `data` of a node WebSocket frame whose wire `type` is
|
|
33
|
+
* `IP_POOL_HEALTH_CHANGED_FRAME` (`"ip_pool:health_changed"`) into an
|
|
34
|
+
* `ip-pool.health-changed` kernel event. This is the single validated mapping from the
|
|
35
|
+
* node's snake_case frame shape to the kernel's camelCase payload.
|
|
36
|
+
*
|
|
37
|
+
* Defensive decoder: malformed frames return `undefined` (skip the frame) rather than
|
|
38
|
+
* throwing, mirroring `parseWebSocketEventMessage`. Required fields (`ip_entry_id`,
|
|
39
|
+
* `is_healthy`, `consecutive_failures`, and a string `connection_state`) that violate their
|
|
40
|
+
* contract drop the frame. A `connection_state` outside the closed set is NORMALISED to
|
|
41
|
+
* `"unknown"` — the health flag still matters, so the event is still produced.
|
|
42
|
+
* `latency_ms` is optional: `null`/absent (serde `Option::None` serialises as `null`) or an
|
|
43
|
+
* invalid value is omitted from the payload.
|
|
44
|
+
* @param {JsonValue} data
|
|
45
|
+
* @param {string} occurredAt
|
|
46
|
+
* @returns {DomainEvent | undefined}
|
|
47
|
+
*/
|
|
48
|
+
export function ipPoolHealthChangedEvent(data: JsonValue, occurredAt: string): DomainEvent | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* Wire `type` tag of the node WebSocket frame carrying an IP-pool peer health change.
|
|
51
|
+
* Colon form (serde `#[serde(rename = "ip_pool:health_changed")]`), distinct from the
|
|
52
|
+
* dot-namespaced kernel event literal `ip-pool.health-changed` produced from its `data`.
|
|
53
|
+
*/
|
|
54
|
+
export const IP_POOL_HEALTH_CHANGED_FRAME: "ip_pool:health_changed";
|
|
31
55
|
export type DeviceCleanupDomainEvent = {
|
|
32
56
|
readonly occurredAt: string;
|
|
33
57
|
readonly payload: {
|
|
@@ -142,9 +166,9 @@ export type RpcEvent = {
|
|
|
142
166
|
readonly subscriptionId: string;
|
|
143
167
|
readonly type: "kernel.event";
|
|
144
168
|
};
|
|
169
|
+
import type { JsonValue } from '@econ-v1/domain';
|
|
145
170
|
import type { DomainEvent } from '@econ-v1/domain';
|
|
146
171
|
import type { CoreKernelEventType } from '@econ-v1/domain';
|
|
147
|
-
import type { JsonValue } from '@econ-v1/domain';
|
|
148
172
|
import type { QueryName } from '@econ-v1/domain';
|
|
149
173
|
import type { ClientError } from '@econ-v1/domain';
|
|
150
174
|
import type { QueryDiff } from '@econ-v1/domain';
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single place a wire `availability` value becomes something this build may act on.
|
|
3
|
+
*
|
|
4
|
+
* Two DIFFERENT defaults, and the asymmetry is deliberate — do not "simplify" it into one:
|
|
5
|
+
*
|
|
6
|
+
* - **Absent** -> `ready`. A daemon that never sends the field is an older daemon serving
|
|
7
|
+
* exactly today's `Ready`-only population, so every entry it returns genuinely is ready.
|
|
8
|
+
* Fail OPEN: treating those as blocked would empty the nav on every pre-upgrade node.
|
|
9
|
+
* - **Present but unrecognised** -> `blocked`. A value this build does not know is a state it
|
|
10
|
+
* cannot safely act on. A sibling change adds a `Broken` variant, and defaulting that to
|
|
11
|
+
* `ready` would re-enable asset prefetch for a bundle guaranteed to 404 — which writes the
|
|
12
|
+
* durable `failed` readiness row, and the permanent unactionable warning notice, that stage
|
|
13
|
+
* availability exists to remove. Fail CLOSED.
|
|
14
|
+
*
|
|
15
|
+
* Never throws. A single entry that threw would abort the whole catalog refresh and blank the
|
|
16
|
+
* user's nav, so an unusable value degrades to the safe state instead.
|
|
17
|
+
*
|
|
18
|
+
* @param {unknown} value
|
|
19
|
+
* @returns {StageAvailability}
|
|
20
|
+
*/
|
|
21
|
+
export function normalizeStageAvailability(value: unknown): StageAvailability;
|
|
22
|
+
/**
|
|
23
|
+
* Whether a catalog entry is one the node can serve right now.
|
|
24
|
+
*
|
|
25
|
+
* The predicate every "may I fetch this stage's assets / may this stage count towards offline
|
|
26
|
+
* readiness" decision reads, so all of them share one interpretation of the field.
|
|
27
|
+
*
|
|
28
|
+
* @param {{ readonly availability?: unknown }} entry
|
|
29
|
+
* @returns {boolean}
|
|
30
|
+
*/
|
|
31
|
+
export function isStageReady(entry: {
|
|
32
|
+
readonly availability?: unknown;
|
|
33
|
+
}): boolean;
|
|
34
|
+
/** @import { StageAvailability } from "@econ-v1/ports" */
|
|
35
|
+
/**
|
|
36
|
+
* What the node says about a stage it advertises, from the `availability` field the daemon
|
|
37
|
+
* puts on every `GET /api/v2/node-apps/ui-stages` entry.
|
|
38
|
+
*
|
|
39
|
+
* - `ready` — running and servable. The only population an old daemon ever returned.
|
|
40
|
+
* - `dormant` — not running, but startable on demand. Renders normally; opening it wakes it.
|
|
41
|
+
* - `blocked` — cannot be started right now. Renders with an indicator and a reason.
|
|
42
|
+
*
|
|
43
|
+
* It lives here, in `@econ-v1/rpc`, for the reason `CONNECTIVITY_STATE_QUERY` does: both
|
|
44
|
+
* `client/kernel` (the readiness coordinator and the readiness query) and `client/ui` (the
|
|
45
|
+
* nav badge) need the same vocabulary, and `@econ-v1/rpc` is the ONLY package `client/ui`
|
|
46
|
+
* may import (`docs/development/CLIENT_NODE_CONVENTIONS.md` rule B2). The typedef itself is
|
|
47
|
+
* declared in `@econ-v1/ports` because the persisted `StageCatalogEntry` shape carries it and
|
|
48
|
+
* `client/ports` may import nothing; this module owns the runtime half and re-exports the type.
|
|
49
|
+
*
|
|
50
|
+
* @type {Readonly<Record<"BLOCKED" | "DORMANT" | "READY", StageAvailability>>}
|
|
51
|
+
*/
|
|
52
|
+
export const STAGE_AVAILABILITY: Readonly<Record<"BLOCKED" | "DORMANT" | "READY", StageAvailability>>;
|
|
53
|
+
/**
|
|
54
|
+
* The value the client sends on the catalog request to opt into the expanded population.
|
|
55
|
+
*
|
|
56
|
+
* Without it the daemon serves exactly the `Ready`-only set it always has, so a stale cached
|
|
57
|
+
* shell that predates this build is bit-for-bit unaffected. Both shapes carry `availability`
|
|
58
|
+
* on every entry, which is how a new client tells a new daemon from an old one.
|
|
59
|
+
*/
|
|
60
|
+
export const STAGE_CATALOG_AVAILABILITY_OPT_IN: "availability=v1";
|
|
61
|
+
import type { StageAvailability } from "@econ-v1/ports";
|
|
62
|
+
//# sourceMappingURL=stage-catalog-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage-catalog-contract.d.ts","sourceRoot":"","sources":["../src/stage-catalog-contract.js"],"names":[],"mappings":"AAoCA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,kDAHW,OAAO,GACL,iBAAiB,CAQ7B;AAED;;;;;;;;GAQG;AACH,oCAHW;IAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,OAAO,CAInB;AAzED,0DAA0D;AAE1D;;;;;;;;;;;;;;;;GAgBG;AACH,iCAFU,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,GAAG,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAM3E;AAEH;;;;;;GAMG;AACH,gDAAuE,iBAAiB,CAAE;uCAhCnD,gBAAgB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@econ-v1/rpc",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.1",
|
|
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": "
|
|
60
|
-
"@econ-v1/ports": "
|
|
59
|
+
"@econ-v1/domain": "7.0.1",
|
|
60
|
+
"@econ-v1/ports": "7.0.1"
|
|
61
61
|
}
|
|
62
62
|
}
|
package/src/index.js
CHANGED
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
/** @typedef {import("@econ-v1/ports").InstallEnvironmentPort} InstallEnvironmentPort */
|
|
54
54
|
/** @typedef {import("@econ-v1/ports").InstallInstructionMode} InstallInstructionMode */
|
|
55
55
|
/** @typedef {import("@econ-v1/ports").MediaPreferencesPort} MediaPreferencesPort */
|
|
56
|
+
/** @typedef {import("@econ-v1/ports").StageAvailability} StageAvailability */
|
|
56
57
|
/** @typedef {import("@econ-v1/ports").StageCatalogEntry} StageCatalogEntry */
|
|
57
58
|
/** @typedef {import("@econ-v1/ports").StagePerformanceSignal} StagePerformanceSignal */
|
|
58
59
|
/** @typedef {import("@econ-v1/ports").StagePerformanceViolationKind} StagePerformanceViolationKind */
|
|
@@ -171,6 +172,12 @@ export {
|
|
|
171
172
|
} from "./device-cleanup-contract.js";
|
|
172
173
|
export { SYNC_CURSORS_QUERY } from "./sync-cursors-contract.js";
|
|
173
174
|
export { CONNECTIVITY_STATE_QUERY, TRANSPORT_STATE_QUERY, TRANSPORT_STATE_QUERY_V2 } from "./transport-contract.js";
|
|
175
|
+
export {
|
|
176
|
+
isStageReady,
|
|
177
|
+
normalizeStageAvailability,
|
|
178
|
+
STAGE_AVAILABILITY,
|
|
179
|
+
STAGE_CATALOG_AVAILABILITY_OPT_IN,
|
|
180
|
+
} from "./stage-catalog-contract.js";
|
|
174
181
|
export {
|
|
175
182
|
DISCOVER_NODE_COMMAND,
|
|
176
183
|
DISCOVERY_PROBE_COMMAND,
|
|
@@ -195,6 +202,7 @@ export {
|
|
|
195
202
|
deserializeRpcEvent,
|
|
196
203
|
deserializeRpcRequest,
|
|
197
204
|
deserializeRpcResponse,
|
|
205
|
+
ipPoolHealthChangedEvent,
|
|
198
206
|
serializeRpcEvent,
|
|
199
207
|
serializeRpcRequest,
|
|
200
208
|
serializeRpcResponse,
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
*/
|
|
21
21
|
/** @typedef {{ readonly security: OnboardingWifiSecurity; readonly signal: number; readonly ssid: string; }} OnboardingNetwork */
|
|
22
22
|
/** @typedef {{ readonly lcdScreenId: OnboardingLcdScreenId; readonly phase: OnboardingPhase; readonly reasonCode?: OnboardingReasonCode; readonly stepIndex: number; readonly totalSteps: number; }} OnboardingFlowBase */
|
|
23
|
-
/** @typedef {| (OnboardingFlowBase & { readonly networks: readonly OnboardingNetwork[]; readonly scanning: boolean; readonly stepId: "choose-network"; }) | (OnboardingFlowBase & { readonly security: OnboardingWifiSecurity; readonly ssid: string; readonly stepId: "network-password"; }) | (OnboardingFlowBase & { readonly approvalState: OnboardingApprovalState; readonly digits: readonly string[]; readonly remainingSeconds: number; readonly stepId: "match-code"; }) | (OnboardingFlowBase & { readonly stepId: "invitation" }) | (OnboardingFlowBase & { readonly displayName: string; readonly displayNameLocked: boolean; readonly stepId: "identity"; readonly submitting: boolean; }) | (OnboardingFlowBase & { readonly sessionEstablished: boolean; readonly stepId: "trusted"; }) | (OnboardingFlowBase & { readonly ssid: string; readonly stepId: "handoff"; }) | (OnboardingFlowBase & { readonly stepId: Exclude< OnboardingStepId, | "choose-network" | "handoff" | "identity" | "invitation" | "match-code" | "network-password" | "trusted" >; })} OnboardingFlowView */
|
|
23
|
+
/** @typedef {| (OnboardingFlowBase & { readonly networks: readonly OnboardingNetwork[]; readonly probing: boolean; readonly scanning: boolean; readonly stepId: "choose-network"; }) | (OnboardingFlowBase & { readonly security: OnboardingWifiSecurity; readonly ssid: string; readonly stepId: "network-password"; }) | (OnboardingFlowBase & { readonly approvalState: OnboardingApprovalState; readonly digits: readonly string[]; readonly remainingSeconds: number; readonly stepId: "match-code"; }) | (OnboardingFlowBase & { readonly stepId: "invitation" }) | (OnboardingFlowBase & { readonly displayName: string; readonly displayNameLocked: boolean; readonly stepId: "identity"; readonly submitting: boolean; }) | (OnboardingFlowBase & { readonly sessionEstablished: boolean; readonly stepId: "trusted"; }) | (OnboardingFlowBase & { readonly ssid: string; readonly stepId: "handoff"; }) | (OnboardingFlowBase & { readonly stepId: Exclude< OnboardingStepId, | "choose-network" | "handoff" | "identity" | "invitation" | "match-code" | "network-password" | "trusted" >; })} OnboardingFlowView */
|
|
24
24
|
/** @typedef {{ readonly children?: readonly OnboardingLcdScreenTree[]; readonly id: string; readonly type: string; readonly [extra: string]: unknown; }} OnboardingLcdScreenTree */
|
|
25
25
|
/** @typedef {Readonly<Record<string, number | string>>} OnboardingLcdScreenState */
|
|
26
26
|
/** @typedef {"not-registered" | "unreachable"} OnboardingLcdUnavailableReason */
|
package/src/protocol.js
CHANGED
|
@@ -7,6 +7,12 @@
|
|
|
7
7
|
/** @typedef {CoreKernelEventType | "device-cleanup.changed"} ProtocolCoreKernelEventType */
|
|
8
8
|
import { appEventInstance, appEventScope, isCoreKernelEventType, isKernelEventType, isQueryName, } from "@econ-v1/domain";
|
|
9
9
|
import { deserializeClientError, isJsonObject, isSerializableClientError, serializeClientError, } from "./errors.js";
|
|
10
|
+
/**
|
|
11
|
+
* Wire `type` tag of the node WebSocket frame carrying an IP-pool peer health change.
|
|
12
|
+
* Colon form (serde `#[serde(rename = "ip_pool:health_changed")]`), distinct from the
|
|
13
|
+
* dot-namespaced kernel event literal `ip-pool.health-changed` produced from its `data`.
|
|
14
|
+
*/
|
|
15
|
+
export const IP_POOL_HEALTH_CHANGED_FRAME = "ip_pool:health_changed";
|
|
10
16
|
/**
|
|
11
17
|
* @param {RpcRequest} request
|
|
12
18
|
* @returns {string}
|
|
@@ -249,6 +255,8 @@ function domainEventField(value) {
|
|
|
249
255
|
return { occurredAt, payload: roomJobStreamPayload(event), type: coreType };
|
|
250
256
|
case "connectivity.changed":
|
|
251
257
|
return { occurredAt, payload: connectivityChangedPayload(event), type: coreType };
|
|
258
|
+
case "ip-pool.health-changed":
|
|
259
|
+
return { occurredAt, payload: ipPoolHealthChangedPayload(event), type: coreType };
|
|
252
260
|
}
|
|
253
261
|
}
|
|
254
262
|
/**
|
|
@@ -533,6 +541,98 @@ function connectivityChangedPayload(event) {
|
|
|
533
541
|
}
|
|
534
542
|
return { reachability };
|
|
535
543
|
}
|
|
544
|
+
/**
|
|
545
|
+
* Decode an `ip-pool.health-changed` kernel event payload off the kernel↔UI RPC wire.
|
|
546
|
+
*
|
|
547
|
+
* Strict decoder (throws `TypeError` on any malformation): the kernel only ever emits
|
|
548
|
+
* normalised values, so an out-of-set `connectionState` here signals a corrupted wire
|
|
549
|
+
* rather than a peer report and is rejected at the boundary — mirroring
|
|
550
|
+
* `connectivityChangedPayload`. The frame bridge `ipPoolHealthChangedEvent` is the lenient
|
|
551
|
+
* counterpart that normalises raw node frames before they reach this seam.
|
|
552
|
+
* @param {JsonObject} event
|
|
553
|
+
* @returns {KernelEventPayload<"ip-pool.health-changed">}
|
|
554
|
+
*/
|
|
555
|
+
function ipPoolHealthChangedPayload(event) {
|
|
556
|
+
const payload = objectField(event, "payload");
|
|
557
|
+
const ipEntryId = stringField(payload, "ipEntryId");
|
|
558
|
+
if (ipEntryId.length === 0)
|
|
559
|
+
throw new TypeError("Expected ipEntryId to be a non-empty string");
|
|
560
|
+
const connectionState = stringField(payload, "connectionState");
|
|
561
|
+
if (connectionState !== "closed"
|
|
562
|
+
&& connectionState !== "filtered"
|
|
563
|
+
&& connectionState !== "open"
|
|
564
|
+
&& connectionState !== "unknown") {
|
|
565
|
+
throw new TypeError("Expected a known ip-pool connection state");
|
|
566
|
+
}
|
|
567
|
+
const consecutiveFailures = numberField(payload, "consecutiveFailures");
|
|
568
|
+
const isHealthy = payload["isHealthy"];
|
|
569
|
+
if (typeof isHealthy !== "boolean")
|
|
570
|
+
throw new TypeError("Expected isHealthy to be a boolean");
|
|
571
|
+
const latencyMs = payload["latencyMs"];
|
|
572
|
+
if (latencyMs !== undefined && (typeof latencyMs !== "number" || !Number.isFinite(latencyMs)))
|
|
573
|
+
throw new TypeError("Expected latencyMs to be a finite number");
|
|
574
|
+
return {
|
|
575
|
+
connectionState,
|
|
576
|
+
consecutiveFailures,
|
|
577
|
+
ipEntryId,
|
|
578
|
+
isHealthy,
|
|
579
|
+
...(latencyMs === undefined ? {} : { latencyMs }),
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Bridge the raw `data` of a node WebSocket frame whose wire `type` is
|
|
584
|
+
* `IP_POOL_HEALTH_CHANGED_FRAME` (`"ip_pool:health_changed"`) into an
|
|
585
|
+
* `ip-pool.health-changed` kernel event. This is the single validated mapping from the
|
|
586
|
+
* node's snake_case frame shape to the kernel's camelCase payload.
|
|
587
|
+
*
|
|
588
|
+
* Defensive decoder: malformed frames return `undefined` (skip the frame) rather than
|
|
589
|
+
* throwing, mirroring `parseWebSocketEventMessage`. Required fields (`ip_entry_id`,
|
|
590
|
+
* `is_healthy`, `consecutive_failures`, and a string `connection_state`) that violate their
|
|
591
|
+
* contract drop the frame. A `connection_state` outside the closed set is NORMALISED to
|
|
592
|
+
* `"unknown"` — the health flag still matters, so the event is still produced.
|
|
593
|
+
* `latency_ms` is optional: `null`/absent (serde `Option::None` serialises as `null`) or an
|
|
594
|
+
* invalid value is omitted from the payload.
|
|
595
|
+
* @param {JsonValue} data
|
|
596
|
+
* @param {string} occurredAt
|
|
597
|
+
* @returns {DomainEvent | undefined}
|
|
598
|
+
*/
|
|
599
|
+
export function ipPoolHealthChangedEvent(data, occurredAt) {
|
|
600
|
+
if (!isJsonObject(data))
|
|
601
|
+
return undefined;
|
|
602
|
+
const ipEntryId = data["ip_entry_id"];
|
|
603
|
+
if (typeof ipEntryId !== "string" || ipEntryId.length === 0)
|
|
604
|
+
return undefined;
|
|
605
|
+
const isHealthy = data["is_healthy"];
|
|
606
|
+
if (typeof isHealthy !== "boolean")
|
|
607
|
+
return undefined;
|
|
608
|
+
const consecutiveFailures = data["consecutive_failures"];
|
|
609
|
+
if (typeof consecutiveFailures !== "number" || !Number.isFinite(consecutiveFailures))
|
|
610
|
+
return undefined;
|
|
611
|
+
const rawState = data["connection_state"];
|
|
612
|
+
if (typeof rawState !== "string")
|
|
613
|
+
return undefined;
|
|
614
|
+
const connectionState = rawState === "closed"
|
|
615
|
+
|| rawState === "filtered"
|
|
616
|
+
|| rawState === "open"
|
|
617
|
+
|| rawState === "unknown"
|
|
618
|
+
? rawState
|
|
619
|
+
: "unknown";
|
|
620
|
+
const rawLatency = data["latency_ms"];
|
|
621
|
+
const latencyMs = typeof rawLatency === "number" && Number.isFinite(rawLatency) && rawLatency >= 0
|
|
622
|
+
? rawLatency
|
|
623
|
+
: undefined;
|
|
624
|
+
return {
|
|
625
|
+
occurredAt,
|
|
626
|
+
payload: {
|
|
627
|
+
connectionState,
|
|
628
|
+
consecutiveFailures,
|
|
629
|
+
ipEntryId,
|
|
630
|
+
isHealthy,
|
|
631
|
+
...(latencyMs === undefined ? {} : { latencyMs }),
|
|
632
|
+
},
|
|
633
|
+
type: "ip-pool.health-changed",
|
|
634
|
+
};
|
|
635
|
+
}
|
|
536
636
|
/**
|
|
537
637
|
* @param {JsonObject} value
|
|
538
638
|
* @returns {QueryDiff<JsonValue>}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
/** @import { StageAvailability } from "@econ-v1/ports" */
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* What the node says about a stage it advertises, from the `availability` field the daemon
|
|
7
|
+
* puts on every `GET /api/v2/node-apps/ui-stages` entry.
|
|
8
|
+
*
|
|
9
|
+
* - `ready` — running and servable. The only population an old daemon ever returned.
|
|
10
|
+
* - `dormant` — not running, but startable on demand. Renders normally; opening it wakes it.
|
|
11
|
+
* - `blocked` — cannot be started right now. Renders with an indicator and a reason.
|
|
12
|
+
*
|
|
13
|
+
* It lives here, in `@econ-v1/rpc`, for the reason `CONNECTIVITY_STATE_QUERY` does: both
|
|
14
|
+
* `client/kernel` (the readiness coordinator and the readiness query) and `client/ui` (the
|
|
15
|
+
* nav badge) need the same vocabulary, and `@econ-v1/rpc` is the ONLY package `client/ui`
|
|
16
|
+
* may import (`docs/development/CLIENT_NODE_CONVENTIONS.md` rule B2). The typedef itself is
|
|
17
|
+
* declared in `@econ-v1/ports` because the persisted `StageCatalogEntry` shape carries it and
|
|
18
|
+
* `client/ports` may import nothing; this module owns the runtime half and re-exports the type.
|
|
19
|
+
*
|
|
20
|
+
* @type {Readonly<Record<"BLOCKED" | "DORMANT" | "READY", StageAvailability>>}
|
|
21
|
+
*/
|
|
22
|
+
export const STAGE_AVAILABILITY = Object.freeze({
|
|
23
|
+
BLOCKED: /** @type {const} */ ("blocked"),
|
|
24
|
+
DORMANT: /** @type {const} */ ("dormant"),
|
|
25
|
+
READY: /** @type {const} */ ("ready"),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The value the client sends on the catalog request to opt into the expanded population.
|
|
30
|
+
*
|
|
31
|
+
* Without it the daemon serves exactly the `Ready`-only set it always has, so a stale cached
|
|
32
|
+
* shell that predates this build is bit-for-bit unaffected. Both shapes carry `availability`
|
|
33
|
+
* on every entry, which is how a new client tells a new daemon from an old one.
|
|
34
|
+
*/
|
|
35
|
+
export const STAGE_CATALOG_AVAILABILITY_OPT_IN = /** @type {const} */ ("availability=v1");
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The single place a wire `availability` value becomes something this build may act on.
|
|
39
|
+
*
|
|
40
|
+
* Two DIFFERENT defaults, and the asymmetry is deliberate — do not "simplify" it into one:
|
|
41
|
+
*
|
|
42
|
+
* - **Absent** -> `ready`. A daemon that never sends the field is an older daemon serving
|
|
43
|
+
* exactly today's `Ready`-only population, so every entry it returns genuinely is ready.
|
|
44
|
+
* Fail OPEN: treating those as blocked would empty the nav on every pre-upgrade node.
|
|
45
|
+
* - **Present but unrecognised** -> `blocked`. A value this build does not know is a state it
|
|
46
|
+
* cannot safely act on. A sibling change adds a `Broken` variant, and defaulting that to
|
|
47
|
+
* `ready` would re-enable asset prefetch for a bundle guaranteed to 404 — which writes the
|
|
48
|
+
* durable `failed` readiness row, and the permanent unactionable warning notice, that stage
|
|
49
|
+
* availability exists to remove. Fail CLOSED.
|
|
50
|
+
*
|
|
51
|
+
* Never throws. A single entry that threw would abort the whole catalog refresh and blank the
|
|
52
|
+
* user's nav, so an unusable value degrades to the safe state instead.
|
|
53
|
+
*
|
|
54
|
+
* @param {unknown} value
|
|
55
|
+
* @returns {StageAvailability}
|
|
56
|
+
*/
|
|
57
|
+
export function normalizeStageAvailability(value) {
|
|
58
|
+
if (value === undefined || value === null)
|
|
59
|
+
return STAGE_AVAILABILITY.READY;
|
|
60
|
+
if (value === STAGE_AVAILABILITY.READY || value === STAGE_AVAILABILITY.DORMANT || value === STAGE_AVAILABILITY.BLOCKED)
|
|
61
|
+
return /** @type {StageAvailability} */ (value);
|
|
62
|
+
return STAGE_AVAILABILITY.BLOCKED;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Whether a catalog entry is one the node can serve right now.
|
|
67
|
+
*
|
|
68
|
+
* The predicate every "may I fetch this stage's assets / may this stage count towards offline
|
|
69
|
+
* readiness" decision reads, so all of them share one interpretation of the field.
|
|
70
|
+
*
|
|
71
|
+
* @param {{ readonly availability?: unknown }} entry
|
|
72
|
+
* @returns {boolean}
|
|
73
|
+
*/
|
|
74
|
+
export function isStageReady(entry) {
|
|
75
|
+
return normalizeStageAvailability(entry.availability) === STAGE_AVAILABILITY.READY;
|
|
76
|
+
}
|