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/dist/plugin.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { AisTargetStore } from "./ais/store.js";
4
+ import { loadAdvancedConfig, mergeSimpleConfig, saveAdvancedConfig, } from "./advanced-config.js";
4
5
  import { buildAisRecords } from "./ais/publish.js";
5
6
  import { registerRoutes, } from "./api.js";
6
7
  import { decodeAisSnapshot, decodeAisStatic } from "./data/ais.js";
@@ -18,6 +19,8 @@ import { LiveClient } from "./live/client.js";
18
19
  import { PeerDirectory } from "./live/directory.js";
19
20
  import { SelfPublisher } from "./live/publisher.js";
20
21
  import { ALL_VESSELS_TOPIC, networkTopic } from "./live/topic.js";
22
+ import { decodePolicy, defaultPolicy, verifyPolicy, } from "./policy/policy.js";
23
+ import { effectivePolicy, operatorKeysFromConfig, saveCachedPolicy, } from "./policy/operator.js";
21
24
  import { decodeClaim, encodeClaim } from "./security/claim.js";
22
25
  import { createClaimControl } from "./security/control.js";
23
26
  import { ClaimRegistry } from "./security/registry.js";
@@ -117,6 +120,8 @@ export default function createPlugin(app) {
117
120
  let startedAt = 0;
118
121
  let running = false;
119
122
  let error;
123
+ let policy = defaultPolicy();
124
+ let operatorKeys = [];
120
125
  let injected = 0;
121
126
  let unsubscribes = [];
122
127
  let tickTimer;
@@ -125,9 +130,9 @@ export default function createPlugin(app) {
125
130
  let lastStaticAt = 0;
126
131
  let lastClaimAt = 0;
127
132
  let lastCapabilityAt = 0;
128
- let lastGroupSnapshotAt = 0;
129
- let lastGroupValuesAt = 0;
130
- let lastGroupStaticAt = 0;
133
+ const groupSnapshotAt = new Map();
134
+ const groupValuesAt = new Map();
135
+ const groupStaticAt = new Map();
131
136
  let aisStore;
132
137
  let selfMmsi;
133
138
  let lastAisAt = 0;
@@ -140,8 +145,8 @@ export default function createPlugin(app) {
140
145
  const now = Math.floor(Date.now() / 1000);
141
146
  const election = {
142
147
  now,
143
- epochSeconds: Math.max(1, config.election.epochMinutes) * 60,
144
- minUptimeSeconds: Math.max(0, config.election.minUptimeMinutes) * 60,
148
+ epochSeconds: Math.max(1, policy.election.epochMinutes) * 60,
149
+ minUptimeSeconds: Math.max(0, policy.election.minUptimeMinutes) * 60,
145
150
  };
146
151
  const eligible = directory?.eligible(election) ?? [];
147
152
  const elected = directory && config.election.enabled
@@ -150,6 +155,11 @@ export default function createPlugin(app) {
150
155
  return {
151
156
  started: running,
152
157
  version: PLUGIN_VERSION,
158
+ policy: {
159
+ version: policy.version,
160
+ issuedAt: policy.issuedAt,
161
+ operator: operatorKeys[0],
162
+ },
153
163
  identity: identity
154
164
  ? {
155
165
  fingerprint: identity.fingerprint,
@@ -316,19 +326,19 @@ export default function createPlugin(app) {
316
326
  return share.groups === "all" || share.groups.includes(groupId);
317
327
  };
318
328
  }
319
- function publishGroups(now, interval, valuesChanged) {
329
+ function publishGroups(now, valuesChanged) {
320
330
  const manager = groups;
321
331
  if (!manager)
322
332
  return;
323
333
  const sharing = config.sharing;
324
334
  const timestamp = Math.floor(now / 1000);
325
- const snapshotDue = now - lastGroupSnapshotAt >= interval;
326
- const valuesDue = valuesChanged || now - lastGroupValuesAt >= VALUES_INTERVAL_MS;
327
- const staticDue = now - lastGroupStaticAt >= STATIC_INTERVAL_MS;
328
335
  for (const info of manager.list()) {
329
336
  if (info.removed || !manager.canPublish(info.id))
330
337
  continue;
331
- if (snapshotDue) {
338
+ const rate = Math.min(info.publishRateHz, info.rateCapHz);
339
+ const interval = 1000 / Math.max(rate, 0.001);
340
+ const lastSnapshot = groupSnapshotAt.get(info.id) ?? 0;
341
+ if (now - lastSnapshot >= interval) {
332
342
  const includePosition = sharesWith(sharing.position.groups, info.id);
333
343
  const includeNavigation = sharesWith(sharing.navigation.groups, info.id);
334
344
  if (includePosition || includeNavigation) {
@@ -338,28 +348,29 @@ export default function createPlugin(app) {
338
348
  });
339
349
  if (snapshot) {
340
350
  manager.enqueueData(info.id, encodeEnvelope("snapshot", encodeSnapshot(snapshot)));
351
+ groupSnapshotAt.set(info.id, now);
341
352
  }
342
353
  }
343
354
  }
344
- if (valuesDue) {
355
+ const lastValues = groupValuesAt.get(info.id) ?? 0;
356
+ if ((valuesChanged && now - lastValues >= interval) ||
357
+ now - lastValues >= VALUES_INTERVAL_MS) {
345
358
  const values = publisher?.buildValues(valuesFilter(info.id));
346
359
  if (values) {
347
360
  manager.enqueueData(info.id, encodeEnvelope("values", encodeValues(values)));
361
+ groupValuesAt.set(info.id, now);
348
362
  }
349
363
  }
350
- if (staticDue && sharesWith(sharing.identity.groups, info.id)) {
364
+ const lastStatic = groupStaticAt.get(info.id) ?? 0;
365
+ if (now - lastStatic >= STATIC_INTERVAL_MS &&
366
+ sharesWith(sharing.identity.groups, info.id)) {
351
367
  const staticInfo = publisher?.buildStatic();
352
368
  if (staticInfo) {
353
369
  manager.enqueueData(info.id, encodeEnvelope("static", encodeStatic(staticInfo)));
370
+ groupStaticAt.set(info.id, now);
354
371
  }
355
372
  }
356
373
  }
357
- if (snapshotDue)
358
- lastGroupSnapshotAt = now;
359
- if (valuesDue)
360
- lastGroupValuesAt = now;
361
- if (staticDue)
362
- lastGroupStaticAt = now;
363
374
  }
364
375
  function canPublishAis() {
365
376
  return config.ais.mode === "both" || config.ais.mode === "publish";
@@ -370,10 +381,11 @@ export default function createPlugin(app) {
370
381
  function publishAis(now) {
371
382
  if (!aisStore || !publisher || !canPublishAis())
372
383
  return;
373
- const rate = Math.max(config.ais.rateHz ?? 0.02, 0.001);
384
+ const rate = Math.max(Math.min(config.ais.rateHz ?? 0.02, policy.ais.maxRateHz), 0.001);
374
385
  if (now - lastAisAt < 1000 / rate)
375
386
  return;
376
- const targets = aisStore.nearest(publisher.currentPosition, Math.max(0, Math.round(config.ais.maxTargets ?? 100)), Math.floor(now / 1000), AIS_MAX_AGE_SECONDS);
387
+ const maxTargets = Math.max(0, Math.round(Math.min(config.ais.maxTargets ?? 100, policy.ais.maxTargets)));
388
+ const targets = aisStore.nearest(publisher.currentPosition, maxTargets, Math.floor(now / 1000), AIS_MAX_AGE_SECONDS);
377
389
  const records = buildAisRecords(targets, sentAisStatic);
378
390
  if (records.length > 0) {
379
391
  if (config.ais.public && client) {
@@ -403,16 +415,20 @@ export default function createPlugin(app) {
403
415
  const now = Date.now();
404
416
  const nowSeconds = Math.floor(now / 1000);
405
417
  const sharing = config.sharing;
406
- const rate = publisher.underway
407
- ? (network?.rateHzUnderway ?? 0.05)
408
- : (network?.rateHzMoored ?? 0.01);
418
+ const maxRate = publisher.underway
419
+ ? policy.rates.maxSnapshotHzUnderway
420
+ : policy.rates.maxSnapshotHzMoored;
421
+ const localRate = publisher.underway
422
+ ? network?.rateHzUnderway
423
+ : network?.rateHzMoored;
424
+ const rate = Math.min(localRate ?? maxRate, maxRate);
409
425
  const interval = 1000 / Math.max(rate, 0.001);
410
426
  if (client) {
411
427
  const elected = config.election.enabled
412
428
  ? directory?.elected({
413
429
  now: nowSeconds,
414
- epochSeconds: Math.max(1, config.election.epochMinutes) * 60,
415
- minUptimeSeconds: Math.max(0, config.election.minUptimeMinutes) * 60,
430
+ epochSeconds: Math.max(1, policy.election.epochMinutes) * 60,
431
+ minUptimeSeconds: Math.max(0, policy.election.minUptimeMinutes) * 60,
416
432
  })
417
433
  : undefined;
418
434
  const ownKey = identity?.publicKeyRaw.toString("hex");
@@ -453,7 +469,7 @@ export default function createPlugin(app) {
453
469
  publishStatic();
454
470
  }
455
471
  }
456
- publishGroups(now, interval, valuesChanged);
472
+ publishGroups(now, valuesChanged);
457
473
  if (now - lastClaimAt >= STATIC_INTERVAL_MS)
458
474
  publishClaim();
459
475
  if (now - lastCapabilityAt >= CAPABILITY_INTERVAL_MS)
@@ -484,40 +500,92 @@ export default function createPlugin(app) {
484
500
  title: set.title,
485
501
  description: set.description,
486
502
  public: config.sharing[set.id].public,
503
+ groups: config.sharing[set.id].groups,
487
504
  })),
488
505
  };
489
506
  }
490
- async function setPublicSharing(dataSet, publicValue) {
507
+ async function setSharing(dataSet, update) {
491
508
  const set = DATA_SETS.find((entry) => entry.id === dataSet);
492
509
  if (!set)
493
510
  return { ok: false, error: "unknown data set" };
511
+ if (update.groups !== undefined && update.groups !== "all") {
512
+ const active = new Set((groups?.list() ?? [])
513
+ .filter((info) => !info.removed)
514
+ .map((info) => info.id));
515
+ const unknown = update.groups.find((id) => !active.has(id));
516
+ if (unknown)
517
+ return { ok: false, error: `unknown group ${unknown}` };
518
+ }
519
+ const previous = { ...config.sharing[set.id] };
494
520
  const audience = config.sharing[set.id];
495
- const previous = audience.public;
496
- audience.public = publicValue;
497
- return new Promise((resolve) => {
498
- app.savePluginOptions(config, (err) => {
499
- if (err) {
500
- audience.public = previous;
501
- resolve({ ok: false, error: `save failed: ${err.message}` });
502
- }
503
- else {
504
- resolve({ ok: true });
505
- }
506
- });
507
- });
521
+ if (update.public !== undefined)
522
+ audience.public = update.public;
523
+ if (update.groups !== undefined)
524
+ audience.groups = update.groups;
525
+ try {
526
+ saveAdvancedConfig(app.getDataDirPath(), config);
527
+ return { ok: true };
528
+ }
529
+ catch (saveError) {
530
+ config.sharing[set.id] = previous;
531
+ return {
532
+ ok: false,
533
+ error: `save failed: ${String(saveError)}`,
534
+ };
535
+ }
536
+ }
537
+ async function setConsent(consent) {
538
+ const modes = [
539
+ "receive-only",
540
+ "underway-gated",
541
+ "opt-out",
542
+ "coarse-position",
543
+ ];
544
+ if (!modes.includes(consent)) {
545
+ return { ok: false, error: "invalid consent mode" };
546
+ }
547
+ const network = publicNetwork();
548
+ if (!network)
549
+ return { ok: false, error: "no public network" };
550
+ const previous = network.consent;
551
+ network.consent = consent;
552
+ try {
553
+ saveAdvancedConfig(app.getDataDirPath(), config);
554
+ return { ok: true };
555
+ }
556
+ catch (saveError) {
557
+ network.consent = previous;
558
+ return {
559
+ ok: false,
560
+ error: `save failed: ${String(saveError)}`,
561
+ };
562
+ }
508
563
  }
509
564
  const control = {
510
565
  status,
511
566
  sharing: sharingInfo,
512
- setPublicSharing,
567
+ setSharing,
568
+ setConsent,
513
569
  ...claimControl,
514
570
  ...groupControl,
515
571
  };
516
- function handleMessage(message) {
517
- if (!config.inject.enabled)
572
+ function applyIncomingPolicy(signed) {
573
+ if (signed.policy.version <= policy.version)
518
574
  return;
519
- if (message.selfId === selfId)
575
+ if (!verifyPolicy(signed, operatorKeys, ALL_VESSELS_TOPIC)) {
576
+ app.debug("P2P ignored unsigned or invalid network policy");
520
577
  return;
578
+ }
579
+ policy = signed.policy;
580
+ try {
581
+ saveCachedPolicy(app.getDataDirPath(), signed);
582
+ }
583
+ catch (saveError) {
584
+ app.debug(`P2P could not cache network policy: ${String(saveError)}`);
585
+ }
586
+ app.setPluginStatus(`P2P network policy v${policy.version} applied`);
587
+ }
588
+ function handleMessage(message) {
521
589
  for (const record of message.records) {
522
590
  let envelope;
523
591
  try {
@@ -527,6 +595,17 @@ export default function createPlugin(app) {
527
595
  app.debug(`P2P dropped malformed envelope: ${String(decodeError)}`);
528
596
  continue;
529
597
  }
598
+ if (envelope.type === "policy") {
599
+ try {
600
+ applyIncomingPolicy(decodePolicy(envelope.payload));
601
+ }
602
+ catch (policyError) {
603
+ app.debug(`P2P dropped malformed policy: ${String(policyError)}`);
604
+ }
605
+ continue;
606
+ }
607
+ if (!config.inject.enabled || message.selfId === selfId)
608
+ continue;
530
609
  if (envelope.type === "capability") {
531
610
  try {
532
611
  const capability = decodeCapability(envelope.payload);
@@ -697,17 +776,28 @@ export default function createPlugin(app) {
697
776
  return schema();
698
777
  },
699
778
  async start(startConfig) {
700
- config = resolveConfig(startConfig);
779
+ const dataDir = app.getDataDirPath();
780
+ const advanced = loadAdvancedConfig(dataDir, startConfig ?? {});
781
+ config = resolveConfig(mergeSimpleConfig(advanced, startConfig ?? {}));
782
+ try {
783
+ saveAdvancedConfig(dataDir, config);
784
+ }
785
+ catch (saveError) {
786
+ app.debug(`P2P could not save advanced config: ${String(saveError)}`);
787
+ }
701
788
  selfId = app.selfId;
702
789
  selfMmsi = selfMmsiFromId(selfId);
703
790
  try {
704
- identity = await loadOrCreateIdentity(app.getDataDirPath());
791
+ identity = await loadOrCreateIdentity(dataDir);
705
792
  }
706
793
  catch (cause) {
707
794
  error = cause instanceof Error ? cause.message : String(cause);
708
795
  app.setPluginError(`P2P failed to start: ${error}`);
709
796
  throw cause;
710
797
  }
798
+ operatorKeys = operatorKeysFromConfig(config.policy?.operatorKeys);
799
+ policy = effectivePolicy(dataDir, operatorKeys);
800
+ app.debug(`P2P network policy v${policy.version}`);
711
801
  registry = new ClaimRegistry({
712
802
  path: join(app.getDataDirPath(), "claims.json"),
713
803
  attestors: config.security.publicAttestors,
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type NetworkPolicy, type SignedPolicy } from "./policy.js";
2
+ /** Public key of the all-vessels network operator. */
3
+ export declare const DEFAULT_OPERATOR_PUBLIC_KEY = "b393c24608f23cdb389cfb0cbc8c9de619345fa110cdddcb14ab6afdb494db09";
4
+ export declare const DEFAULT_OPERATOR_FINGERPRINT = "254375e336e45f93bb5691e49fdb4e758fefed7981940d98dc9773b8b23390bf";
5
+ export declare function defaultOperatorKeys(): string[];
6
+ export declare function operatorKeysFromConfig(keys?: string[]): string[];
7
+ /** The signed policy shipped in the package, if present and valid. */
8
+ export declare function loadShippedPolicy(operatorKeys?: string[]): SignedPolicy | undefined;
9
+ /** The newest valid policy from the package or this instance's cache. */
10
+ export declare function effectivePolicy(dataDir: string, operatorKeys?: string[]): NetworkPolicy;
11
+ export declare function loadCachedPolicy(dataDir: string, operatorKeys?: string[]): SignedPolicy | undefined;
12
+ export declare function saveCachedPolicy(dataDir: string, signed: SignedPolicy): void;
13
+ //# sourceMappingURL=operator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator.d.ts","sourceRoot":"","sources":["../../src/policy/operator.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAErB,sDAAsD;AACtD,eAAO,MAAM,2BAA2B,qEAC4B,CAAC;AAErE,eAAO,MAAM,4BAA4B,qEAC2B,CAAC;AAErE,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEhE;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAC/B,YAAY,GAAE,MAAM,EAA0B,GAC7C,YAAY,GAAG,SAAS,CAY1B;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,MAAM,EAA0B,GAC7C,aAAa,CAOf;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,MAAM,EAA0B,GAC7C,YAAY,GAAG,SAAS,CAU1B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAI5E"}
@@ -0,0 +1,53 @@
1
+ import { readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { ALL_VESSELS_TOPIC } from "../live/topic.js";
4
+ import { defaultPolicy, decodePolicy, verifyPolicy, } from "./policy.js";
5
+ /** Public key of the all-vessels network operator. */
6
+ export const DEFAULT_OPERATOR_PUBLIC_KEY = "b393c24608f23cdb389cfb0cbc8c9de619345fa110cdddcb14ab6afdb494db09";
7
+ export const DEFAULT_OPERATOR_FINGERPRINT = "254375e336e45f93bb5691e49fdb4e758fefed7981940d98dc9773b8b23390bf";
8
+ export function defaultOperatorKeys() {
9
+ return [DEFAULT_OPERATOR_PUBLIC_KEY];
10
+ }
11
+ export function operatorKeysFromConfig(keys) {
12
+ return keys && keys.length > 0 ? keys : defaultOperatorKeys();
13
+ }
14
+ /** The signed policy shipped in the package, if present and valid. */
15
+ export function loadShippedPolicy(operatorKeys = defaultOperatorKeys()) {
16
+ try {
17
+ const data = readFileSync(new URL("../../policy/default.json", import.meta.url));
18
+ const signed = decodePolicy(data);
19
+ return verifyPolicy(signed, operatorKeys, ALL_VESSELS_TOPIC)
20
+ ? signed
21
+ : undefined;
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ /** The newest valid policy from the package or this instance's cache. */
28
+ export function effectivePolicy(dataDir, operatorKeys = defaultOperatorKeys()) {
29
+ const shipped = loadShippedPolicy(operatorKeys)?.policy ?? defaultPolicy();
30
+ const cached = loadCachedPolicy(dataDir, operatorKeys);
31
+ if (cached && cached.policy.version > shipped.version) {
32
+ return cached.policy;
33
+ }
34
+ return shipped;
35
+ }
36
+ export function loadCachedPolicy(dataDir, operatorKeys = defaultOperatorKeys()) {
37
+ try {
38
+ const data = readFileSync(join(dataDir, "policy.json"));
39
+ const signed = decodePolicy(data);
40
+ return verifyPolicy(signed, operatorKeys, ALL_VESSELS_TOPIC)
41
+ ? signed
42
+ : undefined;
43
+ }
44
+ catch {
45
+ return undefined;
46
+ }
47
+ }
48
+ export function saveCachedPolicy(dataDir, signed) {
49
+ writeFileSync(join(dataDir, "policy.json"), JSON.stringify(signed) + "\n", {
50
+ mode: 0o600,
51
+ });
52
+ }
53
+ //# sourceMappingURL=operator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator.js","sourceRoot":"","sources":["../../src/policy/operator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,GAGb,MAAM,aAAa,CAAC;AAErB,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GACtC,kEAAkE,CAAC;AAErE,MAAM,CAAC,MAAM,4BAA4B,GACvC,kEAAkE,CAAC;AAErE,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,2BAA2B,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAe;IACpD,OAAO,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC;AAChE,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,iBAAiB,CAC/B,YAAY,GAAa,mBAAmB,EAAE;IAE9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CACvB,IAAI,GAAG,CAAC,2BAA2B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CACtD,CAAC;QACF,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC;YAC1D,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,YAAY,GAAa,mBAAmB,EAAE;IAE9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,aAAa,EAAE,CAAC;IAC3E,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACvD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,YAAY,GAAa,mBAAmB,EAAE;IAE9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC;YAC1D,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,MAAoB;IACpE,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE;QACzE,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { type Identity } from "../identity.js";
2
+ export interface PolicySharding {
3
+ maxVesselsPerShard: number;
4
+ maxVesselsPerInstance: number;
5
+ lookAheadKm: number;
6
+ splitSettleMinutes: number;
7
+ mergeSettleMinutes: number;
8
+ mergeBelowRatio: number;
9
+ boundaryHysteresisMeters: number;
10
+ }
11
+ export interface PolicyElection {
12
+ epochMinutes: number;
13
+ minUptimeMinutes: number;
14
+ }
15
+ export interface PolicyRates {
16
+ maxSnapshotHzUnderway: number;
17
+ maxSnapshotHzMoored: number;
18
+ }
19
+ export interface PolicyAis {
20
+ maxTargets: number;
21
+ maxRateHz: number;
22
+ }
23
+ export interface NetworkPolicy {
24
+ version: number;
25
+ topic: string;
26
+ protocol: number;
27
+ issuedAt: number;
28
+ notBefore?: number;
29
+ notAfter?: number;
30
+ sharding: PolicySharding;
31
+ election: PolicyElection;
32
+ rates: PolicyRates;
33
+ ais: PolicyAis;
34
+ }
35
+ export interface SignedPolicy {
36
+ policy: NetworkPolicy;
37
+ /** Base64 Ed25519 signature over canonicalJson(policy). */
38
+ signature: string;
39
+ }
40
+ export declare const DEFAULT_POLICY_VERSION = 1;
41
+ export declare const MAX_POLICY_RATE_HZ = 10;
42
+ export declare function defaultPolicy(version?: number, issuedAt?: number): NetworkPolicy;
43
+ export declare function policyBytes(policy: NetworkPolicy): Buffer;
44
+ export declare function signPolicy(policy: NetworkPolicy, identity: Identity): SignedPolicy;
45
+ export declare function verifyPolicy(signed: SignedPolicy, operatorKeys: string[], expectedTopic: string, now?: number): boolean;
46
+ export declare function validPolicy(policy: NetworkPolicy, expectedTopic: string, now?: number): boolean;
47
+ export declare function encodePolicy(signed: SignedPolicy): Buffer;
48
+ export declare function decodePolicy(data: Buffer): SignedPolicy;
49
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/policy/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/D,MAAM,WAAW,cAAc;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,SAAS,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,wBAAgB,aAAa,CAC3B,OAAO,SAAyB,EAChC,QAAQ,SAAgC,GACvC,aAAa,CA4Bf;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAEzD;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,GACjB,YAAY,CAKd;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,EAAE,EACtB,aAAa,EAAE,MAAM,EACrB,GAAG,SAAgC,GAClC,OAAO,CAST;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,MAAM,EACrB,GAAG,SAAgC,GAClC,OAAO,CA8CT;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAEzD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAcvD"}