@serve.zone/interfaces 32.4.0 → 32.6.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/changelog.md +80 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/data/cluster.d.ts +4 -5
- package/dist_ts/data/cluster.js +6 -14
- package/dist_ts/data/clusteringress.js +9 -8
- package/dist_ts/data/clusternode.d.ts +6 -1
- package/dist_ts/data/clusternode.js +32 -5
- package/dist_ts/data/clustervpn.d.ts +11 -0
- package/dist_ts/data/clustervpn.js +19 -8
- package/dist_ts/data/isolatedrestore.js +12 -4
- package/dist_ts/data/networkaddressplan.d.ts +21 -15
- package/dist_ts/data/networkaddressplan.js +27 -20
- package/dist_ts/data/networkauthority.js +9 -3
- package/dist_ts/data/networkcredential.d.ts +0 -7
- package/dist_ts/data/networkcredential.js +5 -22
- package/dist_ts/data/networklease.js +3 -3
- package/dist_ts/data/networknode.js +3 -3
- package/dist_ts/data/networkprojection.js +8 -3
- package/dist_ts/data/nodeenrollment.js +4 -2
- package/dist_ts/data/noderetirement.js +3 -3
- package/dist_ts/data/runtimeassignment.d.ts +12 -0
- package/dist_ts/data/runtimeassignment.js +29 -4
- package/dist_ts/data/runtimesession.js +3 -2
- package/dist_ts/data/serviceruntime.js +6 -5
- package/dist_ts/data/sparknodereport.js +6 -3
- package/dist_ts/private/networkcontract.d.ts +2 -0
- package/dist_ts/private/networkcontract.js +8 -2
- package/dist_ts/private/nodeidentifier.d.ts +22 -0
- package/dist_ts/private/nodeidentifier.js +23 -0
- package/dist_ts/requests/corestore.js +4 -4
- package/dist_ts/runtime.js +7 -4
- package/package.json +1 -1
- package/readme.md +60 -24
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/cluster.ts +9 -21
- package/ts/data/clusteringress.ts +8 -7
- package/ts/data/clusternode.ts +32 -4
- package/ts/data/clustervpn.ts +28 -9
- package/ts/data/isolatedrestore.ts +12 -3
- package/ts/data/networkaddressplan.ts +32 -25
- package/ts/data/networkauthority.ts +8 -2
- package/ts/data/networkcredential.ts +4 -29
- package/ts/data/networklease.ts +2 -2
- package/ts/data/networknode.ts +2 -2
- package/ts/data/networkprojection.ts +6 -2
- package/ts/data/nodeenrollment.ts +4 -2
- package/ts/data/noderetirement.ts +2 -2
- package/ts/data/runtimeassignment.ts +26 -3
- package/ts/data/runtimesession.ts +3 -2
- package/ts/data/serviceruntime.ts +6 -5
- package/ts/data/sparknodereport.ts +7 -2
- package/ts/private/networkcontract.ts +6 -1
- package/ts/private/nodeidentifier.ts +25 -0
- package/ts/requests/corestore.ts +3 -3
- package/ts/runtime.ts +6 -3
package/dist_ts/runtime.js
CHANGED
|
@@ -3,6 +3,7 @@ import { createResolvedSecretMaterialEnvelopeContext, createSecretRecipientEnrol
|
|
|
3
3
|
import { isClusterRuntimeTargetSetFresh, validateClusterRuntimeTargetSet, } from './data/clusternode.js';
|
|
4
4
|
import { isCoreflowRuntimeCapabilityList, isSha256Digest } from './data/immutableimage.js';
|
|
5
5
|
import { hasExactKeys } from './private/dataproperties.js';
|
|
6
|
+
import { isClusterNodeId } from './private/nodeidentifier.js';
|
|
6
7
|
import { validateWorkloadInitActiveApprovalAuthority, validateWorkloadInitApprovalAuthorityReference, } from './runtime.workloadinit.js';
|
|
7
8
|
export * from './runtime.workloadinit.js';
|
|
8
9
|
export * from './runtime.networkprojection.js';
|
|
@@ -459,8 +460,10 @@ const validateRuntimeTargets = (targetsArg, pathArg) => {
|
|
|
459
460
|
errors.push(`${pathArg}[${index}] must use its exact schema`);
|
|
460
461
|
continue;
|
|
461
462
|
}
|
|
462
|
-
if (!
|
|
463
|
-
|
|
463
|
+
if (!isClusterNodeId(targetArg.cloudlyNodeId)) {
|
|
464
|
+
errors.push(`${pathArg}[${index}].cloudlyNodeId must be a node id`);
|
|
465
|
+
}
|
|
466
|
+
if (!isRuntimeIdentifier(targetArg.swarmClusterId)
|
|
464
467
|
|| !isRuntimeIdentifier(targetArg.swarmNodeId)
|
|
465
468
|
|| !isRuntimeIdentifier(targetArg.nodeName)) {
|
|
466
469
|
errors.push(`${pathArg}[${index}] node identity must be canonical`);
|
|
@@ -468,7 +471,7 @@ const validateRuntimeTargets = (targetsArg, pathArg) => {
|
|
|
468
471
|
if (!runtimePlatforms.has(targetArg.platform)) {
|
|
469
472
|
errors.push(`${pathArg}[${index}].platform must be supported`);
|
|
470
473
|
}
|
|
471
|
-
if (
|
|
474
|
+
if (isClusterNodeId(targetArg.cloudlyNodeId)
|
|
472
475
|
&& isRuntimeIdentifier(targetArg.swarmClusterId)
|
|
473
476
|
&& isRuntimeIdentifier(targetArg.swarmNodeId)
|
|
474
477
|
&& isRuntimeIdentifier(targetArg.nodeName)
|
|
@@ -847,4 +850,4 @@ export const validateSecretDeploymentReportRequest = async (requestArg, expected
|
|
|
847
850
|
return ['secret deployment report request must be safely inspectable'];
|
|
848
851
|
}
|
|
849
852
|
};
|
|
850
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3J1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFjeEMsT0FBTyxFQUNMLDJDQUEyQyxFQUMzQywrQ0FBK0MsRUFDL0MscUNBQXFDLEVBQ3JDLDhCQUE4QixFQUM5Qix1Q0FBdUMsRUFDdkMsK0JBQStCLEVBQy9CLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0Isa0NBQWtDLEdBQ25DLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLDhCQUE4QixFQUM5QiwrQkFBK0IsR0FDaEMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsK0JBQStCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBTTNELE9BQU8sRUFDTCwyQ0FBMkMsRUFDM0MsOENBQThDLEdBQy9DLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLDhCQUE4QixDQUFDO0FBa0M3Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsS0FBSyxFQUNyRCxXQUFvQixFQUNwQixXQUF1QyxFQUNyQixFQUFFO0lBQ3BCLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDaEcsTUFBTSxRQUFRLEdBQUcsV0FBcUQsQ0FBQztJQUN2RSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMs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
|
|
853
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3J1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFjeEMsT0FBTyxFQUNMLDJDQUEyQyxFQUMzQywrQ0FBK0MsRUFDL0MscUNBQXFDLEVBQ3JDLDhCQUE4QixFQUM5Qix1Q0FBdUMsRUFDdkMsK0JBQStCLEVBQy9CLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0Isa0NBQWtDLEdBQ25DLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLDhCQUE4QixFQUM5QiwrQkFBK0IsR0FDaEMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsK0JBQStCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQU05RCxPQUFPLEVBQ0wsMkNBQTJDLEVBQzNDLDhDQUE4QyxHQUMvQyxNQUFNLDJCQUEyQixDQUFDO0FBRW5DLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw4QkFBOEIsQ0FBQztBQWtDN0M7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLEtBQUssRUFDckQsV0FBb0IsRUFDcEIsV0FBdUMsRUFDckIsRUFBRTtJQUNwQixJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hHLE1BQU0sUUFBUSxHQUFHLFdBQXFELENBQUM7SUFDdkUsSUFBSSxJQUFJLENB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
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -31,6 +31,34 @@ import { appstore, data, platform, platformservice, protocol, requests } from '@
|
|
|
31
31
|
|
|
32
32
|
This package intentionally has no service implementation logic. It is a stable vocabulary for services that need to agree on payload shape, method names, and response types.
|
|
33
33
|
|
|
34
|
+
### Identifier Vocabularies
|
|
35
|
+
|
|
36
|
+
Two vocabularies name things in these contracts, and which one a member uses is part of the
|
|
37
|
+
contract.
|
|
38
|
+
|
|
39
|
+
| Vocabulary | Rule | Members |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
| Canonical identifier | `^[A-Za-z0-9][A-Za-z0-9:._-]{0,199}$` — first character alphanumeric, up to 200 characters | organizations, clusters, services, namespaces, sessions, assignments, attempts, authorities, pools, endpoints and every content id derived from them |
|
|
42
|
+
| Node id | `^[A-Za-z0-9_-]{1,128}$` — the URL alphabet, a leading `-` or `_` included, up to 128 characters | every member that names a node of a cluster |
|
|
43
|
+
|
|
44
|
+
A node may be named `-abc` or `_abc`: enrollment, the runtime session registration and the Spark
|
|
45
|
+
wire admit a node id that begins with a separator, so every member that names the same node admits
|
|
46
|
+
one too. `data.isClusterNodeId(value)` is that rule, and it is the rule at every node-bearing member:
|
|
47
|
+
`nodeId` on a session binding, a registration, an enrollment, a Spark heartbeat, a relay block, an
|
|
48
|
+
assignment, a workload lease, a handoff lease, a DNS-lease renewal run, a protection receipt, an
|
|
49
|
+
egress authority, a cluster VPN node, an ingress registration, a traffic bucket, a Corestore
|
|
50
|
+
inventory and an isolated-restore node control; `id` on a router incarnation and on a node
|
|
51
|
+
retirement; `cloudlyNodeId` on a cluster runtime target and on a secret runtime target; and
|
|
52
|
+
`placement.nodeIds` on a service runtime spec. A service that stores or forwards a node id
|
|
53
|
+
should judge it with the same reader rather than with the canonical one, which would refuse a node
|
|
54
|
+
these contracts themselves enrolled and registered.
|
|
55
|
+
|
|
56
|
+
A replica id is the one composed name: a producer names a replica slot `<node id>.<index>`, counted
|
|
57
|
+
from zero. `data.isRuntimeReplicaId(value)` reads it by decomposition — the part before the last dot
|
|
58
|
+
in the node vocabulary, the index on its own and never zero-padded — and reads a name that carries
|
|
59
|
+
no such index, a zero-padded `node-a.01` among them, as an opaque slot name in the canonical
|
|
60
|
+
identifier vocabulary.
|
|
61
|
+
|
|
34
62
|
WorkloadInit release verifiers should use the dedicated Node-compatible subpath:
|
|
35
63
|
|
|
36
64
|
```typescript
|
|
@@ -491,11 +519,10 @@ uses `IGetRuntimeManagedVpnCredentialRequest` and
|
|
|
491
519
|
`IGetRuntimeManagedVpnCredentialResponse`. Its request carries the exact current
|
|
492
520
|
session and signed projection reference. The secret response repeats those
|
|
493
521
|
bindings and supplies the `hub` tuple the node dials, the `transport` it dials it
|
|
494
|
-
over (`quic
|
|
495
|
-
key, the client keypair and the expiry in Unix
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
`quic`, which is dialled on the address alone. The hub is the node's own cluster's
|
|
522
|
+
over (`quic`, the one transport a managed hub serves), the managed authority ID,
|
|
523
|
+
the Noise server public key, the client keypair and the expiry in Unix
|
|
524
|
+
milliseconds. The response states no TLS name: QUIC is dialled on the address
|
|
525
|
+
alone. The hub is the node's own cluster's
|
|
499
526
|
relay (see [Cluster VPN Hub And Network](#cluster-vpn-hub-and-network)). Keep the
|
|
500
527
|
response process-local; never persist, hash, log or embed it in a signed projection.
|
|
501
528
|
|
|
@@ -506,7 +533,7 @@ validates the complete projection digest and binds node, controller, namespace,
|
|
|
506
533
|
physical-session identity and projection reference. The response binder takes
|
|
507
534
|
`(response, request, projection, trustedSession, now, renewal = null)` and additionally requires the
|
|
508
535
|
hub's exact tuple to be selected in `router.platformEndpointIds`, carrying the protocol of the
|
|
509
|
-
credential's transport — `udp` for `quic
|
|
536
|
+
credential's transport — `udp` for `quic`, as
|
|
510
537
|
`runtimeNetworkAddressPlanContract.hubTransports` states. A relay therefore cannot name itself: the
|
|
511
538
|
endpoint has to be one the node's **signed** projection already selected.
|
|
512
539
|
Expiry must be after the caller-qualified time and no later than the referenced
|
|
@@ -674,12 +701,15 @@ other — control addresses live inside the tunnel, hub endpoints on the underla
|
|
|
674
701
|
additionally a private prefix no longer than /30
|
|
675
702
|
(`runtimeNetworkAddressPlanContract.maximumControlPrefixLength`); no minimum length is stated,
|
|
676
703
|
because the private-range rule already keeps it at /8 or longer.
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
`
|
|
681
|
-
|
|
682
|
-
`
|
|
704
|
+
`data.runtimeNetworkVpnControlPrefix(value)` is that reader on its own, exported because a
|
|
705
|
+
cluster's VPN network repeats the prefix its hub binds and has to read it exactly as the plan does.
|
|
706
|
+
|
|
707
|
+
`data.IRuntimeNetworkVpnHub { clusterId, address, quicPort }` is one cluster's hub as its relay
|
|
708
|
+
bound it. `runtimeNetworkVpnHubEndpoints(hub)` is the one derivation of what it contributes:
|
|
709
|
+
`<clusterId>:quic` on `udp`, one endpoint per row of
|
|
710
|
+
`runtimeNetworkAddressPlanContract.hubTransports`. That table has one row, because a managed hub
|
|
711
|
+
terminates TLS on its QUIC listener alone and no other transport of it can be dialled over a
|
|
712
|
+
protected connection. Every reader calls the derivation — the composition
|
|
683
713
|
that seals the authority and the router selection that names which endpoint a node may dial — so
|
|
684
714
|
two readers can never derive two ids for one hub.
|
|
685
715
|
`composeRuntimeNetworkProtectedAuthority(plan, frame, hubs)` is the composition itself: the producer
|
|
@@ -688,7 +718,7 @@ previous reference and egress authorities) and the hubs of the clusters that reg
|
|
|
688
718
|
receives the complete authority with its digest, so the validator and the protection producer can
|
|
689
719
|
never compose differently. Each hub's address must sit inside `vpn.hubPrefix` and one cluster is
|
|
690
720
|
named once; an empty `hubs` composes the authority of a runtime network whose clusters have no hub
|
|
691
|
-
yet. One hub costs
|
|
721
|
+
yet. One hub costs one of the authority's 64 platform endpoints, so 64 clusters fit one
|
|
692
722
|
authority.
|
|
693
723
|
|
|
694
724
|
`admitRuntimeNetworkAddressPlanChange(previous | null, next)` is the pure decision for a plan write at
|
|
@@ -1709,27 +1739,33 @@ Cloudly keeps every authority — it compiles the network and issues each node's
|
|
|
1709
1739
|
carries no packet.
|
|
1710
1740
|
|
|
1711
1741
|
A relay that bound a hub says so in its registration, in `relay.vpnHub`:
|
|
1712
|
-
`data.IClusterRelayVpnHub { publicKey, address, quicPort
|
|
1742
|
+
`data.IClusterRelayVpnHub { publicKey, address, quicPort }`. It reports what it
|
|
1713
1743
|
bound, exactly like `listenAddress` and `listenPort`: `address` is an IPv4 literal inside the
|
|
1714
|
-
address plan's `vpn.hubPrefix
|
|
1715
|
-
|
|
1744
|
+
address plan's `vpn.hubPrefix` and `quicPort` is the port it bound for the one transport a managed
|
|
1745
|
+
hub serves. `publicKey` is the hub's Noise public key in the one canonical 32-byte base64 encoding
|
|
1716
1746
|
every Noise key of this contract is read with — this advertisement, the managed VPN credential's
|
|
1717
|
-
keys and a cluster network's nodes all pass the same reader. A relay names no endpoint id
|
|
1718
|
-
|
|
1719
|
-
[Runtime Network Address Plan](#runtime-network-address-plan))
|
|
1720
|
-
origin it published for that relay. The member is optional — a relay that serves no hub registers
|
|
1747
|
+
keys and a cluster network's nodes all pass the same reader. A relay names no endpoint id of its
|
|
1748
|
+
own: Cloudly composes the endpoints with `runtimeNetworkVpnHubEndpoints` (see
|
|
1749
|
+
[Runtime Network Address Plan](#runtime-network-address-plan)). The member is optional — a relay that serves no hub registers
|
|
1721
1750
|
exactly as before, and Cloudly selects no hub for that cluster, stating `relay-vpn-hub-absent`.
|
|
1722
1751
|
`validateClusterRelayVpnHub(value, path?)` returns one named reason per violation.
|
|
1723
1752
|
|
|
1724
|
-
`data.IClusterVpnNetwork { authorityId, revision, nodes, grants }` is the whole
|
|
1725
|
-
cluster. It is never a patch: a node or a grant the network does not carry is
|
|
1726
|
-
membership is presence, so there is no enabled flag.
|
|
1753
|
+
`data.IClusterVpnNetwork { authorityId, controlPrefix, revision, nodes, grants }` is the whole
|
|
1754
|
+
managed VPN of one cluster. It is never a patch: a node or a grant the network does not carry is
|
|
1755
|
+
withdrawn, and membership is presence, so there is no enabled flag. `controlPrefix` is the subnet
|
|
1756
|
+
the cluster's hub serves its control plane on — the address plan's `vpn.controlPrefix`, read by the
|
|
1757
|
+
same `runtimeNetworkVpnControlPrefix` reader. A hub fixes that subnet when it binds and no other
|
|
1758
|
+
carrier hands a relay the address plan, so the network it is pushed states it; the plan contract
|
|
1759
|
+
never lets it change, which is why a network that moves the prefix under the same authority is
|
|
1760
|
+
refused as `vpn-network-authority-foreign` rather than by a name of its own. Each node states `{ nodeId, publicKey,
|
|
1727
1761
|
controlAddress, expiresAt, workloadPrefixes }`, where `expiresAt` is that node's credential expiry
|
|
1728
1762
|
in Unix milliseconds and each prefix is `{ cidr, policyDomain }`. Each grant is one directed
|
|
1729
1763
|
`{ sourceDomain, destinationDomain }` pair. `clusterVpnControlPolicyDomain(address)` and
|
|
1730
1764
|
`clusterVpnWorkloadPolicyDomain(leaseDigest)` state the domain names once for both sides.
|
|
1731
1765
|
|
|
1732
|
-
`snapshotClusterVpnNetwork` requires sorted, unique members, prefixes and grants,
|
|
1766
|
+
`snapshotClusterVpnNetwork` requires sorted, unique members, prefixes and grants, requires every
|
|
1767
|
+
control address to lie inside `controlPrefix` and every workload prefix to stay clear of it — the
|
|
1768
|
+
two rules the hub enforces against the subnet it bound — and requires
|
|
1733
1769
|
every grant to join two workload domains the network itself carries, on two different nodes. That
|
|
1734
1770
|
is what a per-cluster hub means: a grant whose other end sits on another cluster's hub cannot be
|
|
1735
1771
|
expressed at all, which is why Cloudly refuses it while it compiles, by name, with
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/data/cluster.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { IClusterNode } from './clusternode.js';
|
|
|
5
5
|
import { isPlausibleUnicastIpv4 } from '../private/ipv4.js';
|
|
6
6
|
import { validateProtocolOfferOn, type IProtocolOffer } from '../protocol.js';
|
|
7
7
|
import { hasExactKeys } from '../private/dataproperties.js';
|
|
8
|
+
import { isClusterNodeId } from '../private/nodeidentifier.js';
|
|
8
9
|
import { networkNoiseKey } from '../private/networkcontract.js';
|
|
9
10
|
|
|
10
11
|
export interface ICluster {
|
|
@@ -69,17 +70,16 @@ export interface IClusterRelay {
|
|
|
69
70
|
* The relay is its cluster's packet relay: every node of the cluster dials this hub and no
|
|
70
71
|
* inter-node packet leaves the cluster. It reports what it bound, exactly like `listenAddress` and
|
|
71
72
|
* `listenPort`, and Cloudly composes the platform endpoints from it — a relay names no endpoint id
|
|
72
|
-
*
|
|
73
|
+
* of its own. `publicKey` is the hub's Noise public key in the one canonical
|
|
73
74
|
* 32-byte base64 encoding every Noise key of this contract is read with; it is public material and
|
|
74
|
-
* authenticates nothing by itself.
|
|
75
|
-
*
|
|
75
|
+
* authenticates nothing by itself. `quicPort` is the port it bound for the one transport a managed
|
|
76
|
+
* hub serves, so a relay that advertises a hub advertises a reachable one.
|
|
76
77
|
*/
|
|
77
78
|
export interface IClusterRelayVpnHub {
|
|
78
79
|
publicKey: string;
|
|
79
80
|
/** The address the hub bound, as an IPv4 literal inside the address plan's `vpn.hubPrefix`. */
|
|
80
81
|
address: string;
|
|
81
|
-
quicPort: number
|
|
82
|
-
websocketPort: number | null;
|
|
82
|
+
quicPort: number;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/**
|
|
@@ -227,7 +227,7 @@ const validateClusterRelayVersion = (valueArg: unknown, pathArg: string): string
|
|
|
227
227
|
|
|
228
228
|
/** The same identifier rule a node's own runtime session registers under. */
|
|
229
229
|
const validateClusterRelayIdentifier = (valueArg: unknown, pathArg: string): string[] => (
|
|
230
|
-
|
|
230
|
+
isClusterNodeId(valueArg)
|
|
231
231
|
? []
|
|
232
232
|
: [`${pathArg} must be 1 to 128 characters of letters, digits, underscore or hyphen`]
|
|
233
233
|
);
|
|
@@ -273,13 +273,6 @@ const validateClusterRelayVpnKey = (valueArg: unknown, pathArg: string): string[
|
|
|
273
273
|
}
|
|
274
274
|
};
|
|
275
275
|
|
|
276
|
-
/** A port the hub bound, or `null` for a transport it did not bind. */
|
|
277
|
-
const validateClusterRelayHubPort = (valueArg: unknown, pathArg: string): string[] => (
|
|
278
|
-
valueArg === null || validateClusterRelayListenPort(valueArg, pathArg).length === 0
|
|
279
|
-
? []
|
|
280
|
-
: [`${pathArg} must be null or an integer from 1 to 65535`]
|
|
281
|
-
);
|
|
282
|
-
|
|
283
276
|
/**
|
|
284
277
|
* Validates one hub advertisement and names every reason it is refused.
|
|
285
278
|
*
|
|
@@ -291,19 +284,14 @@ export const validateClusterRelayVpnHub = (
|
|
|
291
284
|
pathArg = 'cluster relay vpn hub',
|
|
292
285
|
): string[] => {
|
|
293
286
|
if (!isRecord(valueArg)
|
|
294
|
-
|| !hasExactKeys(valueArg, ['publicKey', 'address', 'quicPort'
|
|
287
|
+
|| !hasExactKeys(valueArg, ['publicKey', 'address', 'quicPort'])) {
|
|
295
288
|
return [`${pathArg} must use its exact schema`];
|
|
296
289
|
}
|
|
297
|
-
|
|
290
|
+
return [
|
|
298
291
|
...validateClusterRelayVpnKey(valueArg.publicKey, `${pathArg} publicKey`),
|
|
299
292
|
...validateClusterRelayListenAddress(valueArg.address, `${pathArg} address`),
|
|
300
|
-
...
|
|
301
|
-
...validateClusterRelayHubPort(valueArg.websocketPort, `${pathArg} websocketPort`),
|
|
293
|
+
...validateClusterRelayListenPort(valueArg.quicPort, `${pathArg} quicPort`),
|
|
302
294
|
];
|
|
303
|
-
if (valueArg.quicPort === null && valueArg.websocketPort === null) {
|
|
304
|
-
errors.push(`${pathArg} must bind at least one of quicPort and websocketPort`);
|
|
305
|
-
}
|
|
306
|
-
return errors;
|
|
307
295
|
};
|
|
308
296
|
|
|
309
297
|
const validateClusterRelayEndpoint = (valueArg: unknown, pathArg: string): string[] => {
|
|
@@ -2,6 +2,7 @@ import { isPlausibleUnicastIpv4 } from '../private/ipv4.js';
|
|
|
2
2
|
import { isUtcCalendarDay } from '../private/utccalendarday.js';
|
|
3
3
|
import { validateProtocolOfferOn } from '../protocol.js';
|
|
4
4
|
import { hasExactKeys } from '../private/dataproperties.js';
|
|
5
|
+
import { isClusterNodeId } from '../private/nodeidentifier.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* The cluster ingress contracts.
|
|
@@ -310,11 +311,11 @@ export const validateClusterTrafficStatistics = (
|
|
|
310
311
|
return [`${pathArg} must use its exact schema`];
|
|
311
312
|
}
|
|
312
313
|
const errors: string[] = [];
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
}
|
|
314
|
+
if (typeof valueArg.serviceId !== 'string' || !identifierPattern.test(valueArg.serviceId)) {
|
|
315
|
+
errors.push(`${pathArg} serviceId must be a bounded identifier`);
|
|
316
|
+
}
|
|
317
|
+
if (!isClusterNodeId(valueArg.nodeId)) {
|
|
318
|
+
errors.push(`${pathArg} nodeId must be a node id`);
|
|
318
319
|
}
|
|
319
320
|
if (!isClusterIngressHostName(valueArg.hostName)) {
|
|
320
321
|
errors.push(`${pathArg} hostName must be a lowercase dotted hostname`);
|
|
@@ -409,8 +410,8 @@ export const validateClusterIngressRegistration = (
|
|
|
409
410
|
if (typeof valueArg.version !== 'string' || !identifierPattern.test(valueArg.version)) {
|
|
410
411
|
errors.push(`${pathArg} version must be a bounded identifier`);
|
|
411
412
|
}
|
|
412
|
-
if (
|
|
413
|
-
errors.push(`${pathArg} nodeId must be a
|
|
413
|
+
if (!isClusterNodeId(valueArg.nodeId)) {
|
|
414
|
+
errors.push(`${pathArg} nodeId must be a node id`);
|
|
414
415
|
}
|
|
415
416
|
if (valueArg.capabilities !== undefined
|
|
416
417
|
&& (!Array.isArray(valueArg.capabilities)
|
package/ts/data/clusternode.ts
CHANGED
|
@@ -11,6 +11,13 @@ import {
|
|
|
11
11
|
readDataElements,
|
|
12
12
|
readDataProperties,
|
|
13
13
|
} from '../private/dataproperties.js';
|
|
14
|
+
import { isClusterNodeId } from '../private/nodeidentifier.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The vocabulary every node id in this package is read in, published here beside `IClusterNode`
|
|
18
|
+
* so a service that stores or forwards a node id judges it exactly as these contracts do.
|
|
19
|
+
*/
|
|
20
|
+
export { isClusterNodeId };
|
|
14
21
|
|
|
15
22
|
export interface IClusterNodeMetrics {
|
|
16
23
|
cpuUsagePercent: number;
|
|
@@ -625,8 +632,8 @@ const validateSparkReporterIdentity = (
|
|
|
625
632
|
labelArg: string,
|
|
626
633
|
): string[] => {
|
|
627
634
|
const errors: string[] = [];
|
|
628
|
-
if (!
|
|
629
|
-
errors.push(`${labelArg} nodeId must be
|
|
635
|
+
if (!isClusterNodeId(requestArg.nodeId)) {
|
|
636
|
+
errors.push(`${labelArg} nodeId must be a node id`);
|
|
630
637
|
}
|
|
631
638
|
if (typeof requestArg.nodeToken !== 'string'
|
|
632
639
|
|| requestArg.nodeToken.length < 1
|
|
@@ -922,6 +929,11 @@ const createSparkFieldErrors = (
|
|
|
922
929
|
errors.push(`${labelArg} ${keyArg} must be canonical`);
|
|
923
930
|
}
|
|
924
931
|
},
|
|
932
|
+
nodeIdentifier: (keyArg: string): void => {
|
|
933
|
+
if (!isClusterNodeId(recordArg[keyArg])) {
|
|
934
|
+
errors.push(`${labelArg} ${keyArg} must be a node id`);
|
|
935
|
+
}
|
|
936
|
+
},
|
|
925
937
|
boolean: (keyArg: string): void => {
|
|
926
938
|
if (typeof recordArg[keyArg] !== 'boolean') {
|
|
927
939
|
errors.push(`${labelArg} ${keyArg} must be a boolean`);
|
|
@@ -1054,7 +1066,7 @@ const validateSparkNodeRuntimeInfo = (valueArg: unknown, labelArg: string): stri
|
|
|
1054
1066
|
if (runtimeInfo.runtime !== 'spark') {
|
|
1055
1067
|
field.errors.push(`${labelArg} runtime must be spark`);
|
|
1056
1068
|
}
|
|
1057
|
-
field.
|
|
1069
|
+
field.nodeIdentifier('nodeId');
|
|
1058
1070
|
field.text('platform');
|
|
1059
1071
|
field.text('arch');
|
|
1060
1072
|
field.text('sparkVersion');
|
|
@@ -1118,6 +1130,17 @@ export const validateSparkSwarmNodeHeartbeatRequest = async (
|
|
|
1118
1130
|
envelope.record.runtimeInfo,
|
|
1119
1131
|
`${label} runtimeInfo`,
|
|
1120
1132
|
));
|
|
1133
|
+
// One body, one node. The bearer authenticates the sender named by `nodeId`, so a runtime info
|
|
1134
|
+
// that names another node would report that node's Docker, Cloudly connection and services
|
|
1135
|
+
// under a credential it never held. Only the pair is checked here: an unreadable member of
|
|
1136
|
+
// either has already named itself above.
|
|
1137
|
+
const runtimeInfo = envelope.record.runtimeInfo;
|
|
1138
|
+
if (isClusterNodeId(envelope.record.nodeId)
|
|
1139
|
+
&& isRuntimeRecord(runtimeInfo)
|
|
1140
|
+
&& isClusterNodeId(runtimeInfo.nodeId)
|
|
1141
|
+
&& runtimeInfo.nodeId !== envelope.record.nodeId) {
|
|
1142
|
+
envelope.errors.push(`${label} runtimeInfo nodeId must name the request nodeId`);
|
|
1143
|
+
}
|
|
1121
1144
|
return envelope.errors;
|
|
1122
1145
|
} catch {
|
|
1123
1146
|
return [`${label} must be safely inspectable`];
|
|
@@ -1290,7 +1313,6 @@ export const validateClusterRuntimeTargetSet = async (
|
|
|
1290
1313
|
'nodeName',
|
|
1291
1314
|
'platform',
|
|
1292
1315
|
])
|
|
1293
|
-
|| !isRuntimeIdentifier(targetArg.cloudlyNodeId)
|
|
1294
1316
|
|| !isRuntimeIdentifier(targetArg.swarmClusterId)
|
|
1295
1317
|
|| !isRuntimeIdentifier(targetArg.swarmNodeId)
|
|
1296
1318
|
|| !isRuntimeIdentifier(targetArg.nodeName)
|
|
@@ -1299,6 +1321,12 @@ export const validateClusterRuntimeTargetSet = async (
|
|
|
1299
1321
|
errors.push(`cluster runtime target set targets[${index}] must be canonical`);
|
|
1300
1322
|
continue;
|
|
1301
1323
|
}
|
|
1324
|
+
// The node this target names is judged in the node vocabulary, so it states that and not
|
|
1325
|
+
// the canonical rule the Swarm identities beside it are held to.
|
|
1326
|
+
if (!isClusterNodeId(targetArg.cloudlyNodeId)) {
|
|
1327
|
+
errors.push(`cluster runtime target set targets[${index}].cloudlyNodeId must be a node id`);
|
|
1328
|
+
continue;
|
|
1329
|
+
}
|
|
1302
1330
|
const sortKey = `${targetArg.cloudlyNodeId}\0${targetArg.swarmClusterId}\0${
|
|
1303
1331
|
targetArg.swarmNodeId
|
|
1304
1332
|
}\0${targetArg.nodeName}\0${targetArg.platform}`;
|