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.
Files changed (64) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +66 -14
  3. package/deploy/README.md +24 -11
  4. package/deploy/policy.json +30 -0
  5. package/dist/advanced-config.d.ts +11 -0
  6. package/dist/advanced-config.d.ts.map +1 -0
  7. package/dist/advanced-config.js +40 -0
  8. package/dist/advanced-config.js.map +1 -0
  9. package/dist/api.d.ts +14 -1
  10. package/dist/api.d.ts.map +1 -1
  11. package/dist/api.js +41 -3
  12. package/dist/api.js.map +1 -1
  13. package/dist/config.d.ts +5 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +12 -273
  16. package/dist/config.js.map +1 -1
  17. package/dist/data/envelope.d.ts.map +1 -1
  18. package/dist/data/envelope.js +2 -0
  19. package/dist/data/envelope.js.map +1 -1
  20. package/dist/data/types.d.ts +1 -1
  21. package/dist/data/types.d.ts.map +1 -1
  22. package/dist/groups/control.d.ts +8 -0
  23. package/dist/groups/control.d.ts.map +1 -1
  24. package/dist/groups/control.js +30 -0
  25. package/dist/groups/control.js.map +1 -1
  26. package/dist/groups/manager.d.ts +2 -0
  27. package/dist/groups/manager.d.ts.map +1 -1
  28. package/dist/groups/manager.js +29 -2
  29. package/dist/groups/manager.js.map +1 -1
  30. package/dist/groups/types.d.ts +12 -0
  31. package/dist/groups/types.d.ts.map +1 -1
  32. package/dist/groups/types.js +23 -0
  33. package/dist/groups/types.js.map +1 -1
  34. package/dist/live/relay.d.ts +3 -0
  35. package/dist/live/relay.d.ts.map +1 -1
  36. package/dist/live/relay.js +11 -0
  37. package/dist/live/relay.js.map +1 -1
  38. package/dist/peer/cli.js +16 -0
  39. package/dist/peer/cli.js.map +1 -1
  40. package/dist/peer/config.d.ts +3 -0
  41. package/dist/peer/config.d.ts.map +1 -1
  42. package/dist/peer/config.js +5 -0
  43. package/dist/peer/config.js.map +1 -1
  44. package/dist/plugin.d.ts.map +1 -1
  45. package/dist/plugin.js +136 -46
  46. package/dist/plugin.js.map +1 -1
  47. package/dist/policy/operator.d.ts +13 -0
  48. package/dist/policy/operator.d.ts.map +1 -0
  49. package/dist/policy/operator.js +53 -0
  50. package/dist/policy/operator.js.map +1 -0
  51. package/dist/policy/policy.d.ts +49 -0
  52. package/dist/policy/policy.d.ts.map +1 -0
  53. package/dist/policy/policy.js +147 -0
  54. package/dist/policy/policy.js.map +1 -0
  55. package/docs/plans/README.md +2 -2
  56. package/docs/plans/architecture.md +2 -2
  57. package/docs/plans/networks.md +36 -8
  58. package/docs/plans/peer-node.md +7 -2
  59. package/docs/plans/security.md +1 -1
  60. package/docs/plans/shared-data.md +4 -3
  61. package/package.json +3 -2
  62. package/policy/default.json +30 -0
  63. package/policy/operator.pub +2 -0
  64. 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.1.0 — first public release.** The core path
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 (opt-out, with four consent
18
- modes), or only share with selected groups.
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 for claims, groups, join requests and proposals. The Groups
28
- view includes a Public network card with status, peers/elected relay and
29
- per-data-set public sharing toggles. It appears under **Webapps** while the
30
- plugin is enabled, and is also served at
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: position, navigation, depth and AIS are on for
50
- the public mesh; environment, tanks, destination, anchor, propulsion and systems
51
- are off publicly until you enable them. See
52
- [`shared-data.md`](docs/plans/shared-data.md) for the data sets and defaults.
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 and an example
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
- From a checkout, build a tarball and install it into `/opt`:
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 /tmp/signalk-p2p-plugin-*.tgz
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. Firewall
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
- ## 5. Verify
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
- setPublicSharing(dataSet: string, publicValue: boolean): Promise<{
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;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,UAAW,SAAQ,YAAY,EAAE,YAAY;IAC5D,MAAM,IAAI,SAAS,CAAC;IACpB,OAAO,IAAI,WAAW,CAAC;IACvB,gBAAgB,CACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7C;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,UAAU,GAClB,IAAI,CAkHN"}
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
- if (typeof body.dataSet !== "string" || typeof body.public !== "boolean") {
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: "dataSet and public are required" });
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
- .setPublicSharing(body.dataSet, body.public)
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":"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"}
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[];
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}