@serfab/cadre-core 1.9.0 → 1.11.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 (119) hide show
  1. package/dist/cadre-node.d.ts +148 -44
  2. package/dist/cadre-node.js +363 -139
  3. package/dist/cadre-node.js.map +1 -1
  4. package/dist/control-authorization.d.ts +2 -2
  5. package/dist/control-authorization.js +1 -0
  6. package/dist/control-authorization.js.map +1 -1
  7. package/dist/control-cohort.d.ts +1 -1
  8. package/dist/control-cohort.js +1 -1
  9. package/dist/control-database.d.ts +105 -14
  10. package/dist/control-database.js +242 -73
  11. package/dist/control-database.js.map +1 -1
  12. package/dist/control-formation-recorder.d.ts +6 -6
  13. package/dist/control-formation-recorder.js +7 -8
  14. package/dist/control-formation-recorder.js.map +1 -1
  15. package/dist/control-schema.d.ts +1 -1
  16. package/dist/control-schema.js +1066 -979
  17. package/dist/control-schema.js.map +1 -1
  18. package/dist/control-write-retry.d.ts +21 -15
  19. package/dist/control-write-retry.js +21 -15
  20. package/dist/control-write-retry.js.map +1 -1
  21. package/dist/diagnostics/connection-path.d.ts +1 -18
  22. package/dist/diagnostics/connection-path.js +1 -20
  23. package/dist/diagnostics/connection-path.js.map +1 -1
  24. package/dist/identity-key.d.ts +0 -30
  25. package/dist/identity-key.js +7 -40
  26. package/dist/identity-key.js.map +1 -1
  27. package/dist/index.d.ts +8 -5
  28. package/dist/index.js +12 -6
  29. package/dist/index.js.map +1 -1
  30. package/dist/invitation-bootstrap.d.ts +32 -0
  31. package/dist/invitation-bootstrap.js +30 -0
  32. package/dist/invitation-bootstrap.js.map +1 -0
  33. package/dist/link-budget.d.ts +204 -119
  34. package/dist/link-budget.js +208 -120
  35. package/dist/link-budget.js.map +1 -1
  36. package/dist/membership-connection-gater.d.ts +3 -3
  37. package/dist/membership-connection-gater.js +3 -3
  38. package/dist/peer-dial.d.ts +18 -14
  39. package/dist/peer-dial.js +18 -14
  40. package/dist/peer-dial.js.map +1 -1
  41. package/dist/peer-join-backfill.d.ts +3 -3
  42. package/dist/pending-join-runner.d.ts +186 -0
  43. package/dist/pending-join-runner.js +649 -0
  44. package/dist/pending-join-runner.js.map +1 -0
  45. package/dist/push-fanout.d.ts +1 -1
  46. package/dist/push-fanout.js +1 -1
  47. package/dist/relay-stun.d.ts +24 -0
  48. package/dist/relay-stun.js +51 -0
  49. package/dist/relay-stun.js.map +1 -0
  50. package/dist/seed-bootstrap.d.ts +2 -2
  51. package/dist/seed-bootstrap.js +5 -5
  52. package/dist/strand-addr-protocol.js +2 -2
  53. package/dist/strand-formation-deadlines.d.ts +5 -5
  54. package/dist/strand-formation-deadlines.js +5 -5
  55. package/dist/strand-formation-manager.d.ts +18 -4
  56. package/dist/strand-formation-manager.js +48 -33
  57. package/dist/strand-formation-manager.js.map +1 -1
  58. package/dist/strand-formation-protocol.d.ts +71 -14
  59. package/dist/strand-formation-protocol.js +222 -47
  60. package/dist/strand-formation-protocol.js.map +1 -1
  61. package/dist/strand-formation-rejection.d.ts +94 -0
  62. package/dist/strand-formation-rejection.js +77 -0
  63. package/dist/strand-formation-rejection.js.map +1 -0
  64. package/dist/strand-instance-manager.js +4 -1
  65. package/dist/strand-instance-manager.js.map +1 -1
  66. package/dist/strand-membership-writer.js +32 -32
  67. package/dist/strand-solicitation.d.ts +11 -3
  68. package/dist/strand-solicitation.js +9 -0
  69. package/dist/strand-solicitation.js.map +1 -1
  70. package/dist/types.d.ts +103 -17
  71. package/dist/types.js +5 -9
  72. package/dist/types.js.map +1 -1
  73. package/package.json +22 -22
  74. package/src/cadre-node.ts +8654 -8400
  75. package/src/control-authorization.ts +2 -1
  76. package/src/control-cohort.ts +128 -128
  77. package/src/control-database.ts +303 -82
  78. package/src/control-formation-recorder.ts +353 -354
  79. package/src/control-read-retry.ts +216 -216
  80. package/src/control-schema.ts +1078 -991
  81. package/src/control-write-retry.ts +567 -561
  82. package/src/diagnostics/connection-path.ts +1 -29
  83. package/src/formation-approval.ts +610 -610
  84. package/src/hibernation-manager.ts +638 -638
  85. package/src/identity-key.ts +7 -62
  86. package/src/index.ts +644 -627
  87. package/src/invitation-bootstrap.ts +40 -0
  88. package/src/joined-strand-store.ts +498 -498
  89. package/src/link-budget.ts +684 -583
  90. package/src/membership-connection-gater.ts +570 -570
  91. package/src/node-local-snapshot.ts +298 -298
  92. package/src/peer-dial.ts +315 -311
  93. package/src/peer-join-backfill.ts +710 -710
  94. package/src/pending-join-runner.ts +735 -0
  95. package/src/push-fanout.ts +1 -1
  96. package/src/relay-reservation.ts +1121 -1121
  97. package/src/relay-server.ts +98 -98
  98. package/src/relay-stun.ts +58 -0
  99. package/src/seed-bootstrap.ts +1448 -1448
  100. package/src/strand-addr-protocol.ts +547 -547
  101. package/src/strand-database.ts +287 -287
  102. package/src/strand-first-sync-gate.ts +391 -391
  103. package/src/strand-formation-deadlines.ts +227 -227
  104. package/src/strand-formation-manager.ts +725 -700
  105. package/src/strand-formation-protocol.ts +1036 -802
  106. package/src/strand-formation-rejection.ts +129 -0
  107. package/src/strand-fret-addrs.ts +145 -145
  108. package/src/strand-instance-manager.ts +1789 -1786
  109. package/src/strand-membership-writer.ts +1974 -1974
  110. package/src/strand-network-state-file.ts +40 -40
  111. package/src/strand-network-state.ts +243 -243
  112. package/src/strand-revocation-enforcer.ts +654 -654
  113. package/src/strand-solicitation.ts +532 -519
  114. package/src/strand-wake-protocol.ts +401 -401
  115. package/src/types.ts +2222 -2140
  116. package/dist/diagnostics/webrtc-turn-tracker.d.ts +0 -50
  117. package/dist/diagnostics/webrtc-turn-tracker.js +0 -196
  118. package/dist/diagnostics/webrtc-turn-tracker.js.map +0 -1
  119. package/src/diagnostics/webrtc-turn-tracker.ts +0 -222
@@ -13,7 +13,6 @@ export type ConnectionPathKind = 'relayed' | 'direct';
13
13
  export type ConnectionTransport =
14
14
  | 'circuit-relay'
15
15
  | 'webrtc'
16
- | 'webrtc-turn' // WebRTC session whose ICE selected a TURN relay candidate
17
16
  | 'webrtc-direct'
18
17
  | 'websocket'
19
18
  | 'tcp'
@@ -56,13 +55,6 @@ export interface ConnectionLike {
56
55
  remoteAddr?: { toString(): string };
57
56
  direction?: 'inbound' | 'outbound';
58
57
  timeline?: { open?: number };
59
- /**
60
- * Set externally (by {@link CadreNode}, from a {@link TurnRelayTracker}
61
- * observation) when ICE selected a TURN relay candidate for this `/webrtc`
62
- * session. `undefined` = unknown (the multiaddr alone cannot reveal it). Only
63
- * honoured for the `webrtc` transport — see {@link classifyConnectionPath}.
64
- */
65
- turnRelayed?: boolean;
66
58
  }
67
59
 
68
60
  export const DEFAULT_SETTLE_WINDOW_MS = 10_000;
@@ -70,7 +62,6 @@ export const DEFAULT_SETTLE_WINDOW_MS = 10_000;
70
62
  const ALL_TRANSPORTS: readonly ConnectionTransport[] = [
71
63
  'circuit-relay',
72
64
  'webrtc',
73
- 'webrtc-turn',
74
65
  'webrtc-direct',
75
66
  'websocket',
76
67
  'tcp',
@@ -122,23 +113,6 @@ function addrString(conn: ConnectionLike): string {
122
113
  }
123
114
  }
124
115
 
125
- /**
126
- * Per-connection classifier. Starts from the pure multiaddr classification, then
127
- * applies the TURN override: a `/webrtc` session whose ICE selected a TURN relay
128
- * candidate (`conn.turnRelayed === true`, set externally — the multiaddr alone
129
- * cannot reveal it) is reclassified `relayed`/`webrtc-turn`. The
130
- * `transport === 'webrtc'` guard means a `webrtc-direct` connection is never
131
- * promoted (it uses no ICE and so can never be TURN-relayed), and `undefined`
132
- * (unknown) degrades safely to the multiaddr result — not relayed.
133
- */
134
- export function classifyConnectionPath(conn: ConnectionLike): TransportClass {
135
- const { kind, transport } = classifyTransport(addrString(conn));
136
- if (transport === 'webrtc' && conn.turnRelayed === true) {
137
- return { kind: 'relayed', transport: 'webrtc-turn' };
138
- }
139
- return { kind, transport };
140
- }
141
-
142
116
  /**
143
117
  * Best-effort per-connection byte counter. The stock libp2p `Connection`
144
118
  * interface carries no byte counter, so unless a metrics implementation is
@@ -200,9 +174,7 @@ export function summarizeConnectionPaths(
200
174
  // least one direct connection.
201
175
  const classified = list.map((conn) => {
202
176
  const remoteAddr = addrString(conn);
203
- // classifyConnectionPath (not classifyTransport) so the externally-set
204
- // turnRelayed hint promotes webrtc → webrtc-turn (relayed).
205
- const { kind, transport } = classifyConnectionPath(conn);
177
+ const { kind, transport } = classifyTransport(remoteAddr);
206
178
  const openedAtMs = typeof conn.timeline?.open === 'number' ? conn.timeline.open : null;
207
179
  const ageMs = openedAtMs != null ? Math.max(0, now - openedAtMs) : null;
208
180
  const peerId = safePeerId(conn);