@serve.zone/interfaces 31.8.0 → 32.0.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/.smartconfig.json +1 -0
- package/changelog.md +512 -0
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/appstore/types.d.ts +4 -6
- package/dist_ts/appstore/types.js +5 -5
- package/dist_ts/data/backup.d.ts +3 -26
- package/dist_ts/data/cluster.d.ts +36 -11
- package/dist_ts/data/cluster.js +33 -22
- package/dist_ts/data/clusteringress.d.ts +8 -0
- package/dist_ts/data/clusteringress.js +13 -8
- package/dist_ts/data/clusternode.d.ts +121 -74
- package/dist_ts/data/clusternode.js +109 -132
- package/dist_ts/data/clusterruntime.d.ts +39 -0
- package/dist_ts/data/clusterruntime.js +11 -0
- package/dist_ts/data/coremail.d.ts +3 -7
- package/dist_ts/data/coremail.js +2 -2
- package/dist_ts/data/coremail.runtime.d.ts +0 -1
- package/dist_ts/data/coremail.runtime.js +5 -22
- package/dist_ts/data/deploymentadoption.d.ts +0 -2
- package/dist_ts/data/deploymentadoption.js +40 -6
- package/dist_ts/data/deploymentoperation.js +16 -3
- package/dist_ts/data/deploymentpreflight.d.ts +0 -2
- package/dist_ts/data/deploymentpreflight.js +1 -1
- package/dist_ts/data/immutableimage.d.ts +38 -21
- package/dist_ts/data/immutableimage.js +45 -5
- package/dist_ts/data/index.d.ts +5 -1
- package/dist_ts/data/index.js +5 -1
- package/dist_ts/data/isolatedrestore.d.ts +139 -21
- package/dist_ts/data/isolatedrestore.golden.d.ts +0 -1
- package/dist_ts/data/isolatedrestore.golden.js +6 -9
- package/dist_ts/data/isolatedrestore.js +176 -40
- package/dist_ts/data/mail.d.ts +1 -1
- package/dist_ts/data/networkaddressplan.d.ts +78 -0
- package/dist_ts/data/networkaddressplan.js +114 -0
- package/dist_ts/data/networkauthority.d.ts +20 -22
- package/dist_ts/data/networkauthority.js +29 -43
- package/dist_ts/data/networkcredential.d.ts +10 -10
- package/dist_ts/data/networkcredential.js +16 -16
- package/dist_ts/data/networkdelivery.d.ts +18 -18
- package/dist_ts/data/networkdelivery.js +16 -16
- package/dist_ts/data/networklease.d.ts +18 -7
- package/dist_ts/data/networklease.js +29 -7
- package/dist_ts/data/networknode.d.ts +37 -0
- package/dist_ts/data/networknode.js +6 -0
- package/dist_ts/data/networkprojection.d.ts +59 -60
- package/dist_ts/data/networkprojection.js +53 -57
- package/dist_ts/data/networkprotection.d.ts +27 -28
- package/dist_ts/data/networkprotection.js +36 -36
- package/dist_ts/data/networkrouter.d.ts +11 -11
- package/dist_ts/data/networkrouter.js +1 -1
- package/dist_ts/data/networksigning.d.ts +16 -18
- package/dist_ts/data/networksigning.js +20 -21
- package/dist_ts/data/nodecredential.d.ts +4 -6
- package/dist_ts/data/nodeenrollment.d.ts +35 -40
- package/dist_ts/data/nodeenrollment.js +57 -72
- package/dist_ts/data/privatenetwork.d.ts +21 -24
- package/dist_ts/data/privatenetwork.js +39 -54
- package/dist_ts/data/runtimeassignment.d.ts +50 -34
- package/dist_ts/data/runtimeassignment.js +79 -45
- package/dist_ts/data/runtimeconfig.d.ts +21 -22
- package/dist_ts/data/runtimeconfig.js +37 -100
- package/dist_ts/data/runtimesession.d.ts +100 -62
- package/dist_ts/data/runtimesession.js +98 -79
- package/dist_ts/data/runtimeterminalreceipt.d.ts +28 -29
- package/dist_ts/data/runtimeterminalreceipt.js +42 -42
- package/dist_ts/data/secret.d.ts +18 -25
- package/dist_ts/data/secret.js +12 -52
- package/dist_ts/data/servicecredential.d.ts +14 -16
- package/dist_ts/data/servicecredential.js +17 -28
- package/dist_ts/data/serviceruntime.d.ts +128 -0
- package/dist_ts/data/serviceruntime.js +92 -0
- package/dist_ts/data/sparknodereport.d.ts +27 -14
- package/dist_ts/data/sparknodereport.js +35 -28
- package/dist_ts/data/webpush.d.ts +0 -1
- package/dist_ts/index.d.ts +2 -1
- package/dist_ts/index.js +3 -2
- package/dist_ts/platform/objectstorageretention.d.ts +21 -24
- package/dist_ts/platform/objectstorageretention.js +6 -18
- package/dist_ts/platform/storage.d.ts +1 -3
- package/dist_ts/platform/storagemigration.d.ts +0 -7
- package/dist_ts/platform/storagemigration.golden.d.ts +0 -1
- package/dist_ts/platform/storagemigration.golden.js +8 -12
- package/dist_ts/platform/storagemigration.js +6 -51
- package/dist_ts/platform/types.d.ts +2 -2
- package/dist_ts/private/canonicaljson.d.ts +9 -1
- package/dist_ts/private/canonicaljson.js +14 -2
- package/dist_ts/private/dataproperties.d.ts +62 -0
- package/dist_ts/private/dataproperties.js +117 -0
- package/dist_ts/private/networkcontract.d.ts +14 -10
- package/dist_ts/private/networkcontract.js +15 -1
- package/dist_ts/private/producercontract.d.ts +11 -0
- package/dist_ts/private/producercontract.js +21 -0
- package/dist_ts/private/releaseversion.d.ts +37 -0
- package/dist_ts/private/releaseversion.js +48 -0
- package/dist_ts/private/runtimepolicy.d.ts +31 -0
- package/dist_ts/private/runtimepolicy.js +90 -0
- package/dist_ts/private/tokenlist.d.ts +9 -0
- package/dist_ts/private/tokenlist.js +23 -0
- package/dist_ts/protocol.d.ts +137 -0
- package/dist_ts/protocol.js +255 -0
- package/dist_ts/requests/admin.d.ts +8 -8
- package/dist_ts/requests/backup.d.ts +102 -112
- package/dist_ts/requests/cluster.d.ts +47 -10
- package/dist_ts/requests/cluster.js +1 -1
- package/dist_ts/requests/clusteringress.d.ts +9 -0
- package/dist_ts/requests/clusteringress.js +1 -1
- package/dist_ts/requests/config.d.ts +3 -3
- package/dist_ts/requests/corestore.d.ts +0 -3
- package/dist_ts/requests/corestore.js +5 -9
- package/dist_ts/requests/network.d.ts +87 -31
- package/dist_ts/requests/node.d.ts +15 -28
- package/dist_ts/requests/pallet.d.ts +13 -13
- package/dist_ts/requests/runtimesession.d.ts +53 -41
- package/dist_ts/requests/secret.d.ts +4 -5
- package/dist_ts/requests/secret.js +1 -5
- package/dist_ts/requests/service.d.ts +60 -0
- package/dist_ts/runtime.corestore.d.ts +56 -74
- package/dist_ts/runtime.corestore.databaseexportpackage.d.ts +30 -36
- package/dist_ts/runtime.corestore.databaseexportpackage.golden.d.ts +11 -12
- package/dist_ts/runtime.corestore.databaseexportpackage.golden.js +54 -71
- package/dist_ts/runtime.corestore.databaseexportpackage.js +9 -25
- package/dist_ts/runtime.corestore.js +35 -135
- package/dist_ts/runtime.corestore.relay.js +2 -7
- package/dist_ts/runtime.d.ts +38 -48
- package/dist_ts/runtime.js +20 -77
- package/dist_ts/runtime.networkprojection.d.ts +4 -4
- package/dist_ts/runtime.networkprojection.js +18 -18
- package/dist_ts/runtime.workloadinit.d.ts +23 -24
- package/dist_ts/runtime.workloadinit.js +6 -13
- package/package.json +2 -2
- package/readme.md +540 -269
- package/ts/00_commitinfo_data.ts +3 -3
- package/ts/appstore/types.ts +4 -6
- package/ts/data/backup.ts +3 -38
- package/ts/data/cluster.ts +51 -34
- package/ts/data/clusteringress.ts +12 -12
- package/ts/data/clusternode.ts +204 -232
- package/ts/data/clusterruntime.ts +45 -0
- package/ts/data/coremail.runtime.ts +4 -21
- package/ts/data/coremail.ts +3 -7
- package/ts/data/deploymentadoption.ts +46 -4
- package/ts/data/deploymentoperation.ts +16 -1
- package/ts/data/deploymentpreflight.ts +0 -2
- package/ts/data/immutableimage.ts +71 -24
- package/ts/data/index.ts +5 -1
- package/ts/data/isolatedrestore.golden.ts +5 -9
- package/ts/data/isolatedrestore.ts +339 -54
- package/ts/data/mail.ts +1 -1
- package/ts/data/networkaddressplan.ts +175 -0
- package/ts/data/networkauthority.ts +45 -61
- package/ts/data/networkcredential.ts +24 -24
- package/ts/data/networkdelivery.ts +27 -27
- package/ts/data/networklease.ts +40 -13
- package/ts/data/networknode.ts +37 -0
- package/ts/data/networkprojection.ts +119 -124
- package/ts/data/networkprotection.ts +54 -55
- package/ts/data/networkrouter.ts +14 -14
- package/ts/data/networksigning.ts +29 -32
- package/ts/data/nodecredential.ts +4 -6
- package/ts/data/nodeenrollment.ts +96 -114
- package/ts/data/privatenetwork.ts +58 -74
- package/ts/data/runtimeassignment.ts +143 -94
- package/ts/data/runtimeconfig.ts +62 -122
- package/ts/data/runtimesession.ts +185 -138
- package/ts/data/runtimeterminalreceipt.ts +72 -73
- package/ts/data/secret.ts +28 -76
- package/ts/data/servicecredential.ts +33 -43
- package/ts/data/serviceruntime.ts +208 -0
- package/ts/data/sparknodereport.ts +48 -36
- package/ts/data/webpush.ts +0 -1
- package/ts/index.ts +2 -0
- package/ts/platform/objectstorageretention.ts +36 -55
- package/ts/platform/storage.ts +1 -3
- package/ts/platform/storagemigration.golden.ts +7 -11
- package/ts/platform/storagemigration.ts +5 -55
- package/ts/platform/types.ts +2 -2
- package/ts/private/canonicaljson.ts +13 -1
- package/ts/private/dataproperties.ts +139 -0
- package/ts/private/networkcontract.ts +23 -9
- package/ts/private/producercontract.ts +19 -0
- package/ts/private/releaseversion.ts +70 -0
- package/ts/private/runtimepolicy.ts +105 -0
- package/ts/private/tokenlist.ts +30 -0
- package/ts/protocol.ts +364 -0
- package/ts/requests/admin.ts +11 -11
- package/ts/requests/backup.ts +112 -117
- package/ts/requests/cluster.ts +58 -13
- package/ts/requests/clusteringress.ts +9 -0
- package/ts/requests/config.ts +3 -3
- package/ts/requests/corestore.ts +4 -16
- package/ts/requests/network.ts +90 -41
- package/ts/requests/node.ts +21 -38
- package/ts/requests/pallet.ts +17 -17
- package/ts/requests/runtimesession.ts +63 -51
- package/ts/requests/secret.ts +5 -10
- package/ts/requests/service.ts +81 -0
- package/ts/runtime.corestore.databaseexportpackage.golden.ts +77 -95
- package/ts/runtime.corestore.databaseexportpackage.ts +51 -73
- package/ts/runtime.corestore.relay.ts +1 -10
- package/ts/runtime.corestore.ts +118 -268
- package/ts/runtime.networkprojection.ts +30 -30
- package/ts/runtime.ts +83 -158
- package/ts/runtime.workloadinit.ts +36 -48
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.d.ts +0 -902
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.golden.d.ts +0 -35
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.golden.js +0 -315
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.js +0 -3315
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.d.ts +0 -291
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.d.ts +0 -30
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.js +0 -408
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.js +0 -1126
- package/ts/runtime.cloudlylegacydeploymentsettlement.golden.ts +0 -421
- package/ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.ts +0 -510
- package/ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.ts +0 -2470
- package/ts/runtime.cloudlylegacydeploymentsettlement.ts +0 -6630
package/ts/data/networklease.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TSha256Digest } from './immutableimage.js';
|
|
2
|
-
import type {
|
|
3
|
-
import type { IRuntimeNetworkDnsWindow,
|
|
4
|
-
import {
|
|
2
|
+
import type { IRuntimeAuthorityReference } from './runtimeassignment.js';
|
|
3
|
+
import type { IRuntimeNetworkDnsWindow, IRuntimeNetworkNodeScope } from './networkprojection.js';
|
|
4
|
+
import { snapshotRuntimeNetworkNodeScope, snapshotRuntimeNetworkProjection, validateRuntimeNetworkProjection } from './networkprojection.js';
|
|
5
5
|
import { captureNetwork, failNetwork, networkCounter, networkDigest, networkDnsWindow, networkEffectiveDnsWindow, networkEqual,
|
|
6
6
|
networkHash, networkId, networkList, networkMaximumDnsLeaseMs, networkRecord, networkReference, networkReferenceOf,
|
|
7
7
|
networkRenewsProjection, networkSafe, networkSameScope, networkScope, networkSignature, requireNetwork } from '../private/networkcontract.js';
|
|
@@ -15,8 +15,8 @@ import { captureNetwork, failNetwork, networkCounter, networkDigest, networkDnsW
|
|
|
15
15
|
* projection by exact reference, so it never joins the projection chain and stops being
|
|
16
16
|
* admissible the moment a successor projection is admitted.
|
|
17
17
|
*/
|
|
18
|
-
export interface IRuntimeNetworkDnsLeaseRenewal extends
|
|
19
|
-
projection:
|
|
18
|
+
export interface IRuntimeNetworkDnsLeaseRenewal extends IRuntimeNetworkNodeScope {
|
|
19
|
+
projection: IRuntimeAuthorityReference;
|
|
20
20
|
/** Orders the renewals of one projection. A receiver may skip sequences, never go back. */
|
|
21
21
|
sequence: number;
|
|
22
22
|
/**
|
|
@@ -29,14 +29,14 @@ export interface IRuntimeNetworkDnsLeaseRenewal extends IRuntimeNetworkNodeScope
|
|
|
29
29
|
|
|
30
30
|
/** Names one renewal without its window: what a receiver records and what an ACK repeats. */
|
|
31
31
|
export interface IRuntimeNetworkDnsLeaseRenewalReference {
|
|
32
|
-
projection:
|
|
32
|
+
projection: IRuntimeAuthorityReference;
|
|
33
33
|
sequence: number;
|
|
34
34
|
digest: TSha256Digest;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export interface ISignedRuntimeNetworkDnsLeaseRenewal {
|
|
38
38
|
/** The signing authority revision that also signs this controller's projections. */
|
|
39
|
-
authority:
|
|
39
|
+
authority: IRuntimeAuthorityReference;
|
|
40
40
|
renewal: IRuntimeNetworkDnsLeaseRenewal;
|
|
41
41
|
/** Ed25519 signature of the complete domain-separated envelope, lowercase hex. */
|
|
42
42
|
signature: string;
|
|
@@ -51,7 +51,7 @@ export interface ISignedRuntimeNetworkDnsLeaseRenewal {
|
|
|
51
51
|
export interface IHoldRuntimeNetworkDnsLeaseRenewalsRequest {
|
|
52
52
|
/** The relay's own socket names the cluster; one relay carries every node of it, so the node is named here. */
|
|
53
53
|
nodeId: string;
|
|
54
|
-
projection:
|
|
54
|
+
projection: IRuntimeAuthorityReference;
|
|
55
55
|
/** Ascending by sequence. Empty holds nothing for this node. */
|
|
56
56
|
renewals: ISignedRuntimeNetworkDnsLeaseRenewal[];
|
|
57
57
|
}
|
|
@@ -75,6 +75,33 @@ export const runtimeNetworkDnsLeaseRenewalContract = Object.freeze({
|
|
|
75
75
|
revocationLatency: 'a-detached-cluster-keeps-dns-authority-until-its-last-held-window-ends',
|
|
76
76
|
} as const);
|
|
77
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Every reason a relay refuses to hold a run, in the words the refusal leads with.
|
|
80
|
+
*
|
|
81
|
+
* A hold is the one call whose outcome a controller cannot read back from its own records: the
|
|
82
|
+
* run lives in the relay's memory, so the refusal is the only statement about whether that node's
|
|
83
|
+
* windows are carried. The relay writes `<name>: <reason>` and the controller matches the name,
|
|
84
|
+
* which is why the names are stated here instead of being spelled out on both sides.
|
|
85
|
+
*/
|
|
86
|
+
export const holdRuntimeNetworkDnsLeaseRenewalsRefusals = Object.freeze([
|
|
87
|
+
/** The run itself is not a valid one, so nothing of it was held. */
|
|
88
|
+
'escrow-run-invalid',
|
|
89
|
+
/** This relay carries no session for that node; its renewals were not held. */
|
|
90
|
+
'escrow-node-not-carried',
|
|
91
|
+
/** The node's session changed while the run waited, so the run is for a session that is gone. */
|
|
92
|
+
'escrow-run-foreign-session',
|
|
93
|
+
/** The relay already holds a run that is provably newer for the same projection. */
|
|
94
|
+
'escrow-run-stale',
|
|
95
|
+
/** The run renews a projection that cannot be ordered against the held one. */
|
|
96
|
+
'escrow-run-unordered',
|
|
97
|
+
/** A node reached this method: a run is held only for the controller, over the relay's session. */
|
|
98
|
+
'escrow-cloudly-only',
|
|
99
|
+
] as const);
|
|
100
|
+
|
|
101
|
+
/** One of the reasons a relay answers instead of holding a run. */
|
|
102
|
+
export type THoldRuntimeNetworkDnsLeaseRenewalsRefusal =
|
|
103
|
+
typeof holdRuntimeNetworkDnsLeaseRenewalsRefusals[number];
|
|
104
|
+
|
|
78
105
|
export const snapshotRuntimeNetworkDnsLeaseRenewal = (value: unknown): IRuntimeNetworkDnsLeaseRenewal => networkSafe(() => {
|
|
79
106
|
const item = networkRecord(captureNetwork(value), ['controller', 'nodeId', 'runtimeNamespace', 'projection', 'sequence', 'dns', 'digest']);
|
|
80
107
|
return { ...networkScope(item), projection: networkReference(item.projection), sequence: networkCounter(item.sequence),
|
|
@@ -130,9 +157,9 @@ export const getRuntimeNetworkEffectiveDnsWindow = async (
|
|
|
130
157
|
projectionValue: unknown, renewalValue: unknown | null,
|
|
131
158
|
): Promise<IRuntimeNetworkDnsWindow> => {
|
|
132
159
|
try {
|
|
133
|
-
const projectionInput =
|
|
160
|
+
const projectionInput = snapshotRuntimeNetworkProjection(projectionValue);
|
|
134
161
|
const renewalInput = renewalValue === null ? null : snapshotRuntimeNetworkDnsLeaseRenewal(renewalValue);
|
|
135
|
-
const projection = await
|
|
162
|
+
const projection = await validateRuntimeNetworkProjection(projectionInput);
|
|
136
163
|
const renewal = renewalInput === null ? null : await validateRuntimeNetworkDnsLeaseRenewal(renewalInput);
|
|
137
164
|
return networkEffectiveDnsWindow(projection, renewal);
|
|
138
165
|
} catch { return failNetwork(); }
|
|
@@ -158,12 +185,12 @@ export const admitRuntimeNetworkDnsLeaseRenewal = async (
|
|
|
158
185
|
try {
|
|
159
186
|
// Snapshot ALL caller-owned inputs before the first asynchronous operation.
|
|
160
187
|
const incoming = snapshotRuntimeNetworkDnsLeaseRenewal(value);
|
|
161
|
-
const projectionInput =
|
|
188
|
+
const projectionInput = snapshotRuntimeNetworkProjection(currentProjectionValue);
|
|
162
189
|
const previousInput = previousValue === null ? null : snapshotRuntimeNetworkDnsLeaseRenewal(previousValue);
|
|
163
|
-
const trusted =
|
|
190
|
+
const trusted = snapshotRuntimeNetworkNodeScope(trustedScopeValue);
|
|
164
191
|
const now = networkCounter(nowValue);
|
|
165
192
|
const renewal = await validateRuntimeNetworkDnsLeaseRenewal(incoming);
|
|
166
|
-
const projection = await
|
|
193
|
+
const projection = await validateRuntimeNetworkProjection(projectionInput);
|
|
167
194
|
requireNetwork(networkSameScope(projection, trusted) && networkRenewsProjection(renewal, projection));
|
|
168
195
|
const previous = previousInput === null ? null : await validateRuntimeNetworkDnsLeaseRenewal(previousInput);
|
|
169
196
|
if (previous !== null) {
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { IRuntimeNetworkProtectedAuthority } from './networkauthority.js';
|
|
2
|
+
import { captureNetwork, networkCounter, networkId, networkRecord, networkSafe } from '../private/networkcontract.js';
|
|
3
|
+
|
|
4
|
+
type TEgressOwner = IRuntimeNetworkProtectedAuthority['egressAuthorities'][number];
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* One unmet condition of a node's runtime network readiness, in the order the node producer meets
|
|
8
|
+
* them: the node joins the protected authority's egress, every egress owner reports current
|
|
9
|
+
* protection, a handoff is reserved, the router selection carries it, the node's acknowledged
|
|
10
|
+
* projection carries it, and the node is a managed VPN member. `protection-receipts-pending` names
|
|
11
|
+
* the egress owners whose current receipts are still missing.
|
|
12
|
+
*/
|
|
13
|
+
export type TRuntimeNetworkNodeReadinessGap =
|
|
14
|
+
| { condition: 'egress-pending' | 'handoff-pending' | 'selection-pending' | 'projection-pending' | 'vpn-member-pending' }
|
|
15
|
+
| { condition: 'protection-receipts-pending'; owners: [TEgressOwner, ...TEgressOwner[]] };
|
|
16
|
+
|
|
17
|
+
/** A node is ready exactly when nothing is missing. */
|
|
18
|
+
export type IRuntimeNetworkNodeReadiness = { nodeId: string } & (
|
|
19
|
+
| { ready: true; missing: [] }
|
|
20
|
+
| { ready: false; missing: [TRuntimeNetworkNodeReadinessGap, ...TRuntimeNetworkNodeReadinessGap[]] }
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The router incarnation of one node. A handoff's id and router incarnation id derive from it, so
|
|
25
|
+
* advancing it is the only way to give a node's router a fresh handoff.
|
|
26
|
+
*/
|
|
27
|
+
export interface IRuntimeRouterIncarnation {
|
|
28
|
+
/** The node id. */
|
|
29
|
+
id: string;
|
|
30
|
+
/** Starts at 1 with the node's first handoff; every reincarnation advances it by one. */
|
|
31
|
+
incarnation: number;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const snapshotRuntimeRouterIncarnation = (value: unknown): IRuntimeRouterIncarnation => networkSafe(() => {
|
|
35
|
+
const item = networkRecord(captureNetwork(value), ['id', 'incarnation']);
|
|
36
|
+
return { id: networkId(item.id), incarnation: networkCounter(item.incarnation) };
|
|
37
|
+
});
|