signalk-p2p-plugin 0.3.0 → 0.4.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/CHANGELOG.md +26 -0
- package/README.md +66 -14
- package/deploy/README.md +24 -11
- package/deploy/policy.json +30 -0
- package/dist/advanced-config.d.ts +11 -0
- package/dist/advanced-config.d.ts.map +1 -0
- package/dist/advanced-config.js +40 -0
- package/dist/advanced-config.js.map +1 -0
- package/dist/api.d.ts +14 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +41 -3
- package/dist/api.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -273
- package/dist/config.js.map +1 -1
- package/dist/data/envelope.d.ts.map +1 -1
- package/dist/data/envelope.js +2 -0
- package/dist/data/envelope.js.map +1 -1
- package/dist/data/types.d.ts +1 -1
- package/dist/data/types.d.ts.map +1 -1
- package/dist/groups/control.d.ts +8 -0
- package/dist/groups/control.d.ts.map +1 -1
- package/dist/groups/control.js +30 -0
- package/dist/groups/control.js.map +1 -1
- package/dist/groups/manager.d.ts +2 -0
- package/dist/groups/manager.d.ts.map +1 -1
- package/dist/groups/manager.js +29 -2
- package/dist/groups/manager.js.map +1 -1
- package/dist/groups/types.d.ts +12 -0
- package/dist/groups/types.d.ts.map +1 -1
- package/dist/groups/types.js +23 -0
- package/dist/groups/types.js.map +1 -1
- package/dist/live/relay.d.ts +3 -0
- package/dist/live/relay.d.ts.map +1 -1
- package/dist/live/relay.js +11 -0
- package/dist/live/relay.js.map +1 -1
- package/dist/peer/cli.js +16 -0
- package/dist/peer/cli.js.map +1 -1
- package/dist/peer/config.d.ts +3 -0
- package/dist/peer/config.d.ts.map +1 -1
- package/dist/peer/config.js +5 -0
- package/dist/peer/config.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +136 -46
- package/dist/plugin.js.map +1 -1
- package/dist/policy/operator.d.ts +13 -0
- package/dist/policy/operator.d.ts.map +1 -0
- package/dist/policy/operator.js +53 -0
- package/dist/policy/operator.js.map +1 -0
- package/dist/policy/policy.d.ts +49 -0
- package/dist/policy/policy.d.ts.map +1 -0
- package/dist/policy/policy.js +147 -0
- package/dist/policy/policy.js.map +1 -0
- package/docs/plans/README.md +2 -2
- package/docs/plans/architecture.md +2 -2
- package/docs/plans/networks.md +36 -8
- package/docs/plans/peer-node.md +7 -2
- package/docs/plans/security.md +1 -1
- package/docs/plans/shared-data.md +4 -3
- package/package.json +3 -2
- package/policy/default.json +30 -0
- package/policy/operator.pub +2 -0
- package/public/index.html +299 -83
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.1 — 2026-11-06
|
|
4
|
+
|
|
5
|
+
- Move **Invite** next to each group and create a member invite token with no
|
|
6
|
+
role/expiry prompts, defaulting to a 24-hour expiry. Join with token no longer asks for an MMSI; publish and
|
|
7
|
+
receive settings are chosen by the member after joining.
|
|
8
|
+
|
|
9
|
+
## 0.4.0 — 2026-11-06
|
|
10
|
+
|
|
11
|
+
- Add a signed, versioned network policy for sharding, election windows, public
|
|
12
|
+
publish-rate caps, AIS caps and protocol compatibility. A signed default ships
|
|
13
|
+
with the package; newer signed policies received over the mesh override it and
|
|
14
|
+
are cached. Clients cannot override topology/rate limits locally.
|
|
15
|
+
- Add the network-operator key tooling and a pinned default operator public key;
|
|
16
|
+
the standalone peer can verify and republish a signed policy file.
|
|
17
|
+
- Safer defaults: public network is receive-only, AIS is receive-only/private,
|
|
18
|
+
and new installs must opt in before transmitting.
|
|
19
|
+
- Add a per-data-set sharing matrix in the webapp: Public plus every active group
|
|
20
|
+
as columns, with checkboxes and no manual group IDs.
|
|
21
|
+
- Add group publish-rate caps set by group admins, with per-member rates inside
|
|
22
|
+
the cap (supports 1–2 Hz small groups).
|
|
23
|
+
- Move advanced/sharing/security/topology settings into a plugin-owned
|
|
24
|
+
`advanced.json` so the simplified Signal K config form cannot drop them; the
|
|
25
|
+
form now exposes only relay and received-vessel toggles.
|
|
26
|
+
- Hide identity, claims and mesh details behind an Advanced disclosure in the
|
|
27
|
+
webapp, and hide empty join-request/proposal sections.
|
|
28
|
+
|
|
3
29
|
## 0.3.0 — 2026-11-06
|
|
4
30
|
|
|
5
31
|
- Add a Public network card to the webapp with status, peers/elected relay and
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
**Peer-to-peer vessel data between Signal K instances.** One global public mesh,
|
|
4
4
|
joined by default, plus any number of private, encrypted groups.
|
|
5
5
|
|
|
6
|
-
> **Status: v0.
|
|
6
|
+
> **Status: v0.4.0.** The core path
|
|
7
7
|
> (publish → relay → inject) and the security, election, group and AIS features
|
|
8
8
|
> are implemented and validated over WAN through a VPS peer. It has not yet been
|
|
9
9
|
> validated on real boats or Starlink links; treat this release as a field-test
|
|
@@ -14,21 +14,23 @@ joined by default, plus any number of private, encrypted groups.
|
|
|
14
14
|
- Share position, navigation (including magnetic course/heading, attitude, rate of
|
|
15
15
|
turn, speed through water and GNSS DOP/satellites), depth, environment, tanks,
|
|
16
16
|
destination, anchor, propulsion and systems, per network.
|
|
17
|
-
- Join the global `all-vessels` network automatically
|
|
18
|
-
|
|
17
|
+
- Join the global `all-vessels` network automatically, but transmit only after
|
|
18
|
+
opting in (receive-only by default; four consent modes).
|
|
19
19
|
- Create private groups with encrypted data, invite links, roles, admin-approved
|
|
20
20
|
MMSIs, member removal and key rotation.
|
|
21
21
|
- Carry other vessels you hear over AIS into a shared map, with four AIS modes and
|
|
22
22
|
nearest-target caps; AIS observations are never re-published.
|
|
23
23
|
- Signed messages, claim/attestation authorization, and one authorized writer per
|
|
24
24
|
vessel context, so a peer can never overwrite another vessel's data.
|
|
25
|
+
- Central, signed **network policy** for sharding, election windows, publish
|
|
26
|
+
rate caps and AIS caps. Individual clients cannot override topology tuning.
|
|
25
27
|
- Relay through elected peers with no fixed relays, plus an optional standalone
|
|
26
28
|
Node.js peer for a VPS bootstrap when most boats are behind CGNAT.
|
|
27
|
-
- An admin webapp
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
`/plugins/signalk-p2p-plugin/admin` (admin login required).
|
|
29
|
+
- An admin webapp with a per-data-set sharing matrix: Public and each active
|
|
30
|
+
group are columns, so there is no typing of group IDs. Group admins set a
|
|
31
|
+
publish-rate cap; members choose their own rate within it.
|
|
32
|
+
- The webapp appears under **Webapps** while the plugin is enabled, and is also
|
|
33
|
+
served at `/plugins/signalk-p2p-plugin/admin` (admin login required).
|
|
32
34
|
|
|
33
35
|
## Install
|
|
34
36
|
|
|
@@ -46,10 +48,12 @@ Requires Node `>=22.5` (a Signal K server on Node 22.5 or newer).
|
|
|
46
48
|
After enabling the plugin, open **Signal K P2P** from the Webapps menu. The UI
|
|
47
49
|
calls the admin-gated API, so you must be signed in as an administrator.
|
|
48
50
|
|
|
49
|
-
Default sharing is conservative:
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
Default sharing is conservative: the public network is **receive-only**, so no
|
|
52
|
+
vessel data is transmitted until you choose a sharing mode in the webapp. AIS is
|
|
53
|
+
receive-only/private by default. Identity, position, navigation and depth are
|
|
54
|
+
pre-selected when you opt in; environment, tanks, destination, anchor,
|
|
55
|
+
propulsion and systems stay off until enabled. See
|
|
56
|
+
[`shared-data.md`](docs/plans/shared-data.md).
|
|
53
57
|
|
|
54
58
|
## Standalone peer
|
|
55
59
|
|
|
@@ -60,8 +64,31 @@ npm install -g signalk-p2p-plugin
|
|
|
60
64
|
signalk-p2p-peer --help
|
|
61
65
|
```
|
|
62
66
|
|
|
63
|
-
See [`deploy/README.md`](deploy/README.md) for the systemd unit
|
|
64
|
-
configuration.
|
|
67
|
+
See [`deploy/README.md`](deploy/README.md) for the systemd unit, an example
|
|
68
|
+
configuration, and how to publish a signed network policy.
|
|
69
|
+
|
|
70
|
+
## Admin and network policy
|
|
71
|
+
|
|
72
|
+
The Signal K plugin config form intentionally exposes only two safe toggles:
|
|
73
|
+
**Help relay nearby vessels** and **Show vessels received from the network**.
|
|
74
|
+
Everything else lives in the plugin-owned `advanced.json` (in the plugin data
|
|
75
|
+
directory), including sharing, consent, AIS, security and topology settings.
|
|
76
|
+
This keeps the form simple and prevents a form save from dropping advanced
|
|
77
|
+
settings.
|
|
78
|
+
|
|
79
|
+
Network-wide settings are not user-editable. A **network policy** is signed by
|
|
80
|
+
the network operator and distributed as:
|
|
81
|
+
|
|
82
|
+
- a signed default policy shipped in the package, and
|
|
83
|
+
- newer signed policies received over the mesh (live wins).
|
|
84
|
+
|
|
85
|
+
The operator key public key is
|
|
86
|
+
`b393c24608f23cdb389cfb0cbc8c9de619345fa110cdddcb14ab6afdb494db09`
|
|
87
|
+
(fingerprint `254375e336e45f93bb5691e49fdb4e758fefed7981940d98dc9773b8b23390bf`).
|
|
88
|
+
The private key is stored outside the repository at
|
|
89
|
+
`~/.config/signalk-p2p/operator/operator.json` (mode 0600); distribute the public
|
|
90
|
+
key and signed policy files, never the private key. Use
|
|
91
|
+
`scripts/sign-policy.ts` to sign a new policy.
|
|
65
92
|
|
|
66
93
|
## Design
|
|
67
94
|
|
|
@@ -76,6 +103,31 @@ configuration.
|
|
|
76
103
|
| [`spike-findings.md`](docs/plans/spike-findings.md) | Measured payload and replication costs |
|
|
77
104
|
| [`peer-node.md`](docs/plans/peer-node.md) | Standalone Node.js peer / VPS relay |
|
|
78
105
|
|
|
106
|
+
## Releasing
|
|
107
|
+
|
|
108
|
+
The repository publishes from git tags. The `Publish to npm` workflow:
|
|
109
|
+
|
|
110
|
+
1. verifies the tag (`vX.Y.Z`) matches `package.json`,
|
|
111
|
+
2. runs format, build, tests and lint,
|
|
112
|
+
3. publishes to npm with provenance, and
|
|
113
|
+
4. creates the matching GitHub release.
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# bump package.json + CHANGELOG first
|
|
117
|
+
git add package.json CHANGELOG.md
|
|
118
|
+
git commit -m "Release X.Y.Z"
|
|
119
|
+
git push
|
|
120
|
+
git tag -a vX.Y.Z -m "vX.Y.Z"
|
|
121
|
+
git push origin vX.Y.Z
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Publishing uses npm **Trusted Publishing** through GitHub OIDC; there is no
|
|
125
|
+
long-lived npm token in the repository. Configure the trusted publisher on npm
|
|
126
|
+
for this repository and `.github/workflows/publish.yml` (and the `npm`
|
|
127
|
+
environment if you use one). For the first publish you can run the workflow
|
|
128
|
+
manually from **Actions → Publish to npm → Run workflow** with the existing tag
|
|
129
|
+
(`v0.4.0`).
|
|
130
|
+
|
|
79
131
|
## Development
|
|
80
132
|
|
|
81
133
|
```bash
|
package/deploy/README.md
CHANGED
|
@@ -17,14 +17,7 @@ node --version
|
|
|
17
17
|
|
|
18
18
|
## 2. Install the package
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
npm pack
|
|
24
|
-
scp signalk-p2p-plugin-*.tgz root@your-host:/tmp/
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
On the host:
|
|
20
|
+
On the host, install the published package from npm:
|
|
28
21
|
|
|
29
22
|
```bash
|
|
30
23
|
id -u signalk-p2p >/dev/null 2>&1 || \
|
|
@@ -33,10 +26,12 @@ install -d -o signalk-p2p -g signalk-p2p /opt/signalk-p2p /var/lib/signalk-p2p
|
|
|
33
26
|
install -d /etc/signalk-p2p
|
|
34
27
|
cd /opt/signalk-p2p
|
|
35
28
|
npm init -y
|
|
36
|
-
npm install --omit=dev
|
|
29
|
+
npm install --omit=dev --save-exact signalk-p2p-plugin@latest
|
|
37
30
|
chown -R signalk-p2p:signalk-p2p /opt/signalk-p2p /var/lib/signalk-p2p
|
|
38
31
|
```
|
|
39
32
|
|
|
33
|
+
Pin a specific version instead of `@latest` if you want reproducible upgrades.
|
|
34
|
+
|
|
40
35
|
## 3. Configure and run
|
|
41
36
|
|
|
42
37
|
```bash
|
|
@@ -50,7 +45,25 @@ journalctl -u signalk-p2p-peer -f
|
|
|
50
45
|
The peer prints its identity fingerprint and the topic it joined. The Ed25519
|
|
51
46
|
identity is created in `/var/lib/signalk-p2p/identity/ed25519.pem` (mode 0600).
|
|
52
47
|
|
|
53
|
-
## 4.
|
|
48
|
+
## 4. Publish the network policy (optional)
|
|
49
|
+
|
|
50
|
+
A peer can distribute the signed public-network policy. It verifies the
|
|
51
|
+
signature with the pinned operator key and republishes it every five minutes; it
|
|
52
|
+
never needs the operator private key.
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
cp deploy/policy.json /etc/signalk-p2p/policy.json
|
|
56
|
+
# add this key to /etc/signalk-p2p/peer.json:
|
|
57
|
+
# "policyFile": "/etc/signalk-p2p/policy.json"
|
|
58
|
+
systemctl restart signalk-p2p-peer
|
|
59
|
+
journalctl -u signalk-p2p-peer -n 20 | grep policy
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Sign a new policy with `scripts/sign-policy.ts` from a checkout, then copy the
|
|
63
|
+
signed file and restart the peer. Clients keep the newest valid policy they have
|
|
64
|
+
seen, so they continue to use it if the publisher is offline.
|
|
65
|
+
|
|
66
|
+
## 5. Firewall
|
|
54
67
|
|
|
55
68
|
Hyperswarm uses UDP. If you set `"port": 49737`, allow UDP 49737 inbound so other
|
|
56
69
|
peers can dial it:
|
|
@@ -70,7 +83,7 @@ to join and relay a private group. The peer sends a join request from its
|
|
|
70
83
|
synthetic selfId; an admin must approve it (a `viewer` role is enough, because a
|
|
71
84
|
relay does not publish vessel data).
|
|
72
85
|
|
|
73
|
-
##
|
|
86
|
+
## 7. Verify
|
|
74
87
|
|
|
75
88
|
From another machine on a different network:
|
|
76
89
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"policy": {
|
|
3
|
+
"version": 2,
|
|
4
|
+
"topic": "signalk-p2p/all-vessels/v1",
|
|
5
|
+
"protocol": 1,
|
|
6
|
+
"issuedAt": 1794023623,
|
|
7
|
+
"sharding": {
|
|
8
|
+
"maxVesselsPerShard": 500,
|
|
9
|
+
"maxVesselsPerInstance": 1000,
|
|
10
|
+
"lookAheadKm": 50,
|
|
11
|
+
"splitSettleMinutes": 10,
|
|
12
|
+
"mergeSettleMinutes": 60,
|
|
13
|
+
"mergeBelowRatio": 0.25,
|
|
14
|
+
"boundaryHysteresisMeters": 1000
|
|
15
|
+
},
|
|
16
|
+
"election": {
|
|
17
|
+
"epochMinutes": 10,
|
|
18
|
+
"minUptimeMinutes": 10
|
|
19
|
+
},
|
|
20
|
+
"rates": {
|
|
21
|
+
"maxSnapshotHzUnderway": 0.05,
|
|
22
|
+
"maxSnapshotHzMoored": 0.01
|
|
23
|
+
},
|
|
24
|
+
"ais": {
|
|
25
|
+
"maxTargets": 100,
|
|
26
|
+
"maxRateHz": 0.02
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"signature": "VKtZkIvKsyt3RwQWwvF1K6GP8Oh/tODyERYMAVWPMjH8UgN0TztN8LOhY/KpGpfBo3OTO0ktQf04zVPZhuUcDw=="
|
|
30
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Config } from "./config.js";
|
|
2
|
+
export declare const ADVANCED_CONFIG_FILE = "advanced.json";
|
|
3
|
+
/**
|
|
4
|
+
* Advanced settings live outside the Signal K plugin configuration form so a
|
|
5
|
+
* form save cannot drop them. The form owns only the simple relay/injection
|
|
6
|
+
* toggles; sharing, network consent, AIS, security and topology stay here.
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadAdvancedConfig(dataDir: string, legacy: Partial<Config>): Partial<Config>;
|
|
9
|
+
export declare function mergeSimpleConfig(advanced: Partial<Config>, simple: Partial<Config>): Partial<Config>;
|
|
10
|
+
export declare function saveAdvancedConfig(dataDir: string, config: Config): void;
|
|
11
|
+
//# sourceMappingURL=advanced-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced-config.d.ts","sourceRoot":"","sources":["../src/advanced-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GACtB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GACtB,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAOxE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
export const ADVANCED_CONFIG_FILE = "advanced.json";
|
|
4
|
+
/**
|
|
5
|
+
* Advanced settings live outside the Signal K plugin configuration form so a
|
|
6
|
+
* form save cannot drop them. The form owns only the simple relay/injection
|
|
7
|
+
* toggles; sharing, network consent, AIS, security and topology stay here.
|
|
8
|
+
*/
|
|
9
|
+
export function loadAdvancedConfig(dataDir, legacy) {
|
|
10
|
+
try {
|
|
11
|
+
const parsed = JSON.parse(readFileSync(join(dataDir, ADVANCED_CONFIG_FILE), "utf8"));
|
|
12
|
+
if (parsed !== null &&
|
|
13
|
+
typeof parsed === "object" &&
|
|
14
|
+
!Array.isArray(parsed)) {
|
|
15
|
+
return parsed;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// No advanced file yet: migrate from the legacy plugin configuration.
|
|
20
|
+
}
|
|
21
|
+
return legacy;
|
|
22
|
+
}
|
|
23
|
+
export function mergeSimpleConfig(advanced, simple) {
|
|
24
|
+
return {
|
|
25
|
+
...advanced,
|
|
26
|
+
election: {
|
|
27
|
+
...(advanced.election ?? {}),
|
|
28
|
+
...(simple.election ?? {}),
|
|
29
|
+
},
|
|
30
|
+
inject: {
|
|
31
|
+
...(advanced.inject ?? {}),
|
|
32
|
+
...(simple.inject ?? {}),
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function saveAdvancedConfig(dataDir, config) {
|
|
37
|
+
mkdirSync(dataDir, { recursive: true, mode: 0o700 });
|
|
38
|
+
writeFileSync(join(dataDir, ADVANCED_CONFIG_FILE), JSON.stringify(config, null, 2) + "\n", { mode: 0o600 });
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=advanced-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced-config.js","sourceRoot":"","sources":["../src/advanced-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,MAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAChC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,CAC1D,CAAC;QACF,IACE,MAAM,KAAK,IAAI;YACf,OAAO,MAAM,KAAK,QAAQ;YAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACtB,CAAC;YACD,OAAO,MAAyB,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAyB,EACzB,MAAuB;IAEvB,OAAO;QACL,GAAG,QAAQ;QACX,QAAQ,EAAE;YACR,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;SACL;QACvB,MAAM,EAAE;YACN,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;SACL;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,MAAc;IAChE,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,EACnC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACtC,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;AACJ,CAAC"}
|
package/dist/api.d.ts
CHANGED
|
@@ -5,6 +5,11 @@ import type { ConsentMode, DataSetId } from "./config.js";
|
|
|
5
5
|
export interface P2PStatus {
|
|
6
6
|
started: boolean;
|
|
7
7
|
version: string;
|
|
8
|
+
policy?: {
|
|
9
|
+
version: number;
|
|
10
|
+
issuedAt: number;
|
|
11
|
+
operator?: string;
|
|
12
|
+
};
|
|
8
13
|
identity?: {
|
|
9
14
|
fingerprint: string;
|
|
10
15
|
publicKey: string;
|
|
@@ -37,12 +42,20 @@ export interface SharingInfo {
|
|
|
37
42
|
title: string;
|
|
38
43
|
description: string;
|
|
39
44
|
public: boolean;
|
|
45
|
+
groups: "all" | string[];
|
|
40
46
|
}>;
|
|
41
47
|
}
|
|
42
48
|
export interface P2PControl extends ClaimControl, GroupControl {
|
|
43
49
|
status(): P2PStatus;
|
|
44
50
|
sharing(): SharingInfo;
|
|
45
|
-
|
|
51
|
+
setSharing(dataSet: string, update: {
|
|
52
|
+
public?: boolean;
|
|
53
|
+
groups?: "all" | string[];
|
|
54
|
+
}): Promise<{
|
|
55
|
+
ok: boolean;
|
|
56
|
+
error?: string;
|
|
57
|
+
}>;
|
|
58
|
+
setConsent(consent: string): Promise<{
|
|
46
59
|
ok: boolean;
|
|
47
60
|
error?: string;
|
|
48
61
|
}>;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,WAAW,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,SAAS,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,WAAW,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,SAAS,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;KAC1B,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,UAAW,SAAQ,YAAY,EAAE,YAAY;IAC5D,MAAM,IAAI,SAAS,CAAC;IACpB,OAAO,IAAI,WAAW,CAAC;IACvB,UAAU,CACR,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAA;KAAE,GACtD,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,UAAU,GAClB,IAAI,CAgKN"}
|
package/dist/api.js
CHANGED
|
@@ -26,16 +26,44 @@ export function registerRoutes(router, control) {
|
|
|
26
26
|
});
|
|
27
27
|
router.post("/sharing", (req, res) => {
|
|
28
28
|
const body = (req.body ?? {});
|
|
29
|
-
|
|
29
|
+
const publicValue = typeof body.public === "boolean" ? body.public : undefined;
|
|
30
|
+
let groups;
|
|
31
|
+
if (body.groups === "all") {
|
|
32
|
+
groups = "all";
|
|
33
|
+
}
|
|
34
|
+
else if (Array.isArray(body.groups)) {
|
|
35
|
+
if (body.groups.some((id) => typeof id !== "string")) {
|
|
36
|
+
res.status(400).json({ ok: false, error: "groups must be strings" });
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
groups = body.groups;
|
|
40
|
+
}
|
|
41
|
+
else if (body.groups !== undefined) {
|
|
30
42
|
res
|
|
31
43
|
.status(400)
|
|
32
|
-
.json({ ok: false, error: "
|
|
44
|
+
.json({ ok: false, error: "groups must be 'all' or an array" });
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (typeof body.dataSet !== "string" ||
|
|
48
|
+
(publicValue === undefined && groups === undefined)) {
|
|
49
|
+
res.status(400).json({
|
|
50
|
+
ok: false,
|
|
51
|
+
error: "dataSet and a sharing change are required",
|
|
52
|
+
});
|
|
33
53
|
return;
|
|
34
54
|
}
|
|
35
55
|
void control
|
|
36
|
-
.
|
|
56
|
+
.setSharing(body.dataSet, { public: publicValue, groups })
|
|
37
57
|
.then((result) => sendGroup(res, result));
|
|
38
58
|
});
|
|
59
|
+
router.post("/network/consent", (req, res) => {
|
|
60
|
+
const consent = (req.body ?? {}).consent;
|
|
61
|
+
if (typeof consent !== "string") {
|
|
62
|
+
res.status(400).json({ ok: false, error: "consent is required" });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
void control.setConsent(consent).then((result) => sendGroup(res, result));
|
|
66
|
+
});
|
|
39
67
|
router.get("/claims", (_req, res) => {
|
|
40
68
|
res.json({ claims: control.claims() });
|
|
41
69
|
});
|
|
@@ -81,6 +109,16 @@ export function registerRoutes(router, control) {
|
|
|
81
109
|
.promoteMember(req.body ?? {})
|
|
82
110
|
.then((result) => sendGroup(res, result));
|
|
83
111
|
});
|
|
112
|
+
router.post("/groups/rate", (req, res) => {
|
|
113
|
+
void control
|
|
114
|
+
.setRate(req.body ?? {})
|
|
115
|
+
.then((result) => sendGroup(res, result));
|
|
116
|
+
});
|
|
117
|
+
router.post("/groups/rate-cap", (req, res) => {
|
|
118
|
+
void control
|
|
119
|
+
.setRateCap(req.body ?? {})
|
|
120
|
+
.then((result) => sendGroup(res, result));
|
|
121
|
+
});
|
|
84
122
|
router.post("/groups/leave", (req, res) => {
|
|
85
123
|
void control
|
|
86
124
|
.leaveGroup(req.body ?? {})
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -141,10 +141,15 @@ export interface InjectConfig {
|
|
|
141
141
|
history: boolean;
|
|
142
142
|
maxAgeSeconds: number;
|
|
143
143
|
}
|
|
144
|
+
export interface PolicyConfig {
|
|
145
|
+
/** Ed25519 public keys allowed to sign the network policy. */
|
|
146
|
+
operatorKeys: string[];
|
|
147
|
+
}
|
|
144
148
|
export interface Config {
|
|
145
149
|
identity: {
|
|
146
150
|
keyFile: string;
|
|
147
151
|
};
|
|
152
|
+
policy: PolicyConfig;
|
|
148
153
|
sharding: ShardingConfig;
|
|
149
154
|
/** Optional always-on peers used to bootstrap or bridge CGNAT. */
|
|
150
155
|
bootstrapPeers: string[];
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|