signalk-p2p-plugin 0.3.0 → 0.4.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.
Files changed (63) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +41 -14
  3. package/deploy/README.md +20 -2
  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 +28 -1
  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 +35 -7
  58. package/docs/plans/peer-node.md +7 -2
  59. package/docs/plans/shared-data.md +4 -3
  60. package/package.json +3 -2
  61. package/policy/default.json +30 -0
  62. package/policy/operator.pub +2 -0
  63. package/public/index.html +268 -68
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.0 — 2026-11-06
4
+
5
+ - Add a signed, versioned network policy for sharding, election windows, public
6
+ publish-rate caps, AIS caps and protocol compatibility. A signed default ships
7
+ with the package; newer signed policies received over the mesh override it and
8
+ are cached. Clients cannot override topology/rate limits locally.
9
+ - Add the network-operator key tooling and a pinned default operator public key;
10
+ the standalone peer can verify and republish a signed policy file.
11
+ - Safer defaults: public network is receive-only, AIS is receive-only/private,
12
+ and new installs must opt in before transmitting.
13
+ - Add a per-data-set sharing matrix in the webapp: Public plus every active group
14
+ as columns, with checkboxes and no manual group IDs.
15
+ - Add group publish-rate caps set by group admins, with per-member rates inside
16
+ the cap (supports 1–2 Hz small groups).
17
+ - Move advanced/sharing/security/topology settings into a plugin-owned
18
+ `advanced.json` so the simplified Signal K config form cannot drop them; the
19
+ form now exposes only relay and received-vessel toggles.
20
+ - Hide identity, claims and mesh details behind an Advanced disclosure in the
21
+ webapp, and hide empty join-request/proposal sections.
22
+
3
23
  ## 0.3.0 — 2026-11-06
4
24
 
5
25
  - 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
 
package/deploy/README.md CHANGED
@@ -50,7 +50,25 @@ journalctl -u signalk-p2p-peer -f
50
50
  The peer prints its identity fingerprint and the topic it joined. The Ed25519
51
51
  identity is created in `/var/lib/signalk-p2p/identity/ed25519.pem` (mode 0600).
52
52
 
53
- ## 4. Firewall
53
+ ## 4. Publish the network policy (optional)
54
+
55
+ A peer can distribute the signed public-network policy. It verifies the
56
+ signature with the pinned operator key and republishes it every five minutes; it
57
+ never needs the operator private key.
58
+
59
+ ```bash
60
+ cp deploy/policy.json /etc/signalk-p2p/policy.json
61
+ # add this key to /etc/signalk-p2p/peer.json:
62
+ # "policyFile": "/etc/signalk-p2p/policy.json"
63
+ systemctl restart signalk-p2p-peer
64
+ journalctl -u signalk-p2p-peer -n 20 | grep policy
65
+ ```
66
+
67
+ Sign a new policy with `scripts/sign-policy.ts` from a checkout, then copy the
68
+ signed file and restart the peer. Clients keep the newest valid policy they have
69
+ seen, so they continue to use it if the publisher is offline.
70
+
71
+ ## 5. Firewall
54
72
 
55
73
  Hyperswarm uses UDP. If you set `"port": 49737`, allow UDP 49737 inbound so other
56
74
  peers can dial it:
@@ -70,7 +88,7 @@ to join and relay a private group. The peer sends a join request from its
70
88
  synthetic selfId; an admin must approve it (a `viewer` role is enough, because a
71
89
  relay does not publish vessel data).
72
90
 
73
- ## 5. Verify
91
+ ## 7. Verify
74
92
 
75
93
  From another machine on a different network:
76
94
 
@@ -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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"}