@aria-cli/tools 1.0.9 → 1.0.11

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 (241) hide show
  1. package/package.json +9 -5
  2. package/src/__tests__/web-fetch-download.test.ts +0 -433
  3. package/src/__tests__/web-tools.test.ts +0 -619
  4. package/src/ask-user-interaction.ts +0 -33
  5. package/src/cache/web-cache.ts +0 -110
  6. package/src/definitions/arion.ts +0 -118
  7. package/src/definitions/browser/browser.ts +0 -502
  8. package/src/definitions/browser/index.ts +0 -5
  9. package/src/definitions/browser/pw-downloads.ts +0 -142
  10. package/src/definitions/browser/pw-interactions.ts +0 -282
  11. package/src/definitions/browser/pw-responses.ts +0 -98
  12. package/src/definitions/browser/pw-session.ts +0 -405
  13. package/src/definitions/browser/pw-shared.ts +0 -85
  14. package/src/definitions/browser/pw-snapshot.ts +0 -383
  15. package/src/definitions/browser/pw-state.ts +0 -101
  16. package/src/definitions/browser/types.ts +0 -203
  17. package/src/definitions/code-intelligence.ts +0 -526
  18. package/src/definitions/core.ts +0 -118
  19. package/src/definitions/delegation.ts +0 -567
  20. package/src/definitions/deploy.ts +0 -73
  21. package/src/definitions/filesystem.ts +0 -217
  22. package/src/definitions/frg.ts +0 -67
  23. package/src/definitions/index.ts +0 -28
  24. package/src/definitions/memory.ts +0 -150
  25. package/src/definitions/messaging.ts +0 -734
  26. package/src/definitions/meta.ts +0 -392
  27. package/src/definitions/network.ts +0 -179
  28. package/src/definitions/outlook.ts +0 -318
  29. package/src/definitions/patch/apply-patch.ts +0 -235
  30. package/src/definitions/patch/fuzzy-match.ts +0 -217
  31. package/src/definitions/patch/index.ts +0 -1
  32. package/src/definitions/patch/patch-parser.ts +0 -297
  33. package/src/definitions/patch/sandbox-paths.ts +0 -129
  34. package/src/definitions/process/index.ts +0 -5
  35. package/src/definitions/process/process-registry.ts +0 -303
  36. package/src/definitions/process/process.ts +0 -456
  37. package/src/definitions/process/pty-keys.ts +0 -298
  38. package/src/definitions/process/session-slug.ts +0 -147
  39. package/src/definitions/quip.ts +0 -225
  40. package/src/definitions/search.ts +0 -67
  41. package/src/definitions/session-history.ts +0 -79
  42. package/src/definitions/shell.ts +0 -202
  43. package/src/definitions/slack.ts +0 -211
  44. package/src/definitions/web.ts +0 -119
  45. package/src/executors/apply-patch.ts +0 -1035
  46. package/src/executors/arion.ts +0 -199
  47. package/src/executors/code-intelligence.ts +0 -1179
  48. package/src/executors/deploy.ts +0 -1066
  49. package/src/executors/filesystem.ts +0 -1428
  50. package/src/executors/frg-freshness.ts +0 -743
  51. package/src/executors/frg.ts +0 -394
  52. package/src/executors/index.ts +0 -280
  53. package/src/executors/learning-meta.ts +0 -1367
  54. package/src/executors/lsp-client.ts +0 -355
  55. package/src/executors/memory.ts +0 -978
  56. package/src/executors/meta.ts +0 -293
  57. package/src/executors/process-registry.ts +0 -570
  58. package/src/executors/pty-session-store.ts +0 -43
  59. package/src/executors/pty.ts +0 -342
  60. package/src/executors/restart.ts +0 -133
  61. package/src/executors/search-freshness.ts +0 -249
  62. package/src/executors/search-types.ts +0 -98
  63. package/src/executors/search.ts +0 -89
  64. package/src/executors/self-diagnose.ts +0 -552
  65. package/src/executors/session-history.ts +0 -435
  66. package/src/executors/shell-safety.ts +0 -519
  67. package/src/executors/shell.ts +0 -1243
  68. package/src/executors/utils.ts +0 -40
  69. package/src/executors/web.ts +0 -786
  70. package/src/extraction/content-extraction.ts +0 -281
  71. package/src/extraction/index.ts +0 -5
  72. package/src/headless-control-contract.ts +0 -1149
  73. package/src/index.ts +0 -788
  74. package/src/local-control-http-auth.ts +0 -2
  75. package/src/mcp/client.ts +0 -218
  76. package/src/mcp/connection.ts +0 -568
  77. package/src/mcp/index.ts +0 -11
  78. package/src/mcp/jsonrpc.ts +0 -195
  79. package/src/mcp/types.ts +0 -199
  80. package/src/network-control-adapter.ts +0 -88
  81. package/src/network-runtime/address-types.ts +0 -218
  82. package/src/network-runtime/db-owner-fencing.ts +0 -91
  83. package/src/network-runtime/delivery-receipts.ts +0 -372
  84. package/src/network-runtime/direct-endpoint-authority.ts +0 -35
  85. package/src/network-runtime/index.ts +0 -316
  86. package/src/network-runtime/local-control-contract.ts +0 -784
  87. package/src/network-runtime/node-store-contract.ts +0 -46
  88. package/src/network-runtime/pair-route-contract.ts +0 -97
  89. package/src/network-runtime/peer-capabilities.ts +0 -48
  90. package/src/network-runtime/peer-principal-ref.ts +0 -20
  91. package/src/network-runtime/peer-state-machine.ts +0 -160
  92. package/src/network-runtime/protocol-schemas.ts +0 -265
  93. package/src/network-runtime/runtime-bootstrap-contract.ts +0 -83
  94. package/src/outlook/desktop-session.ts +0 -409
  95. package/src/policy.ts +0 -171
  96. package/src/providers/brave.ts +0 -80
  97. package/src/providers/duckduckgo.ts +0 -199
  98. package/src/providers/exa.ts +0 -85
  99. package/src/providers/firecrawl.ts +0 -77
  100. package/src/providers/index.ts +0 -8
  101. package/src/providers/jina.ts +0 -70
  102. package/src/providers/router.ts +0 -121
  103. package/src/providers/search-provider.ts +0 -74
  104. package/src/providers/tavily.ts +0 -74
  105. package/src/quip/desktop-session.ts +0 -435
  106. package/src/registry/index.ts +0 -1
  107. package/src/registry/registry.ts +0 -905
  108. package/src/runtime-socket-local-control-client.ts +0 -632
  109. package/src/security/dns-normalization.ts +0 -34
  110. package/src/security/dns-pinning.ts +0 -138
  111. package/src/security/external-content.ts +0 -129
  112. package/src/security/ssrf.ts +0 -207
  113. package/src/slack/desktop-session.ts +0 -493
  114. package/src/tool-factory.ts +0 -91
  115. package/src/types.ts +0 -1341
  116. package/src/utils/retry.ts +0 -163
  117. package/src/utils/safe-parse-json.ts +0 -176
  118. package/src/utils/url.ts +0 -20
  119. package/tests/benchmarks/registry.bench.ts +0 -57
  120. package/tests/cache/web-cache.test.ts +0 -147
  121. package/tests/critical-integration.test.ts +0 -1465
  122. package/tests/definitions/apply-patch.test.ts +0 -586
  123. package/tests/definitions/browser.test.ts +0 -495
  124. package/tests/definitions/delegation-pause-resume.test.ts +0 -758
  125. package/tests/definitions/execution.test.ts +0 -671
  126. package/tests/definitions/messaging-inbox-scope.test.ts +0 -229
  127. package/tests/definitions/messaging.test.ts +0 -1468
  128. package/tests/definitions/outlook.test.ts +0 -30
  129. package/tests/definitions/process.test.ts +0 -469
  130. package/tests/definitions/slack.test.ts +0 -28
  131. package/tests/definitions/tool-inventory.test.ts +0 -218
  132. package/tests/e2e/delegation-quest-orchestration.e2e.test.ts +0 -433
  133. package/tests/e2e/memory-tool-discovery-contract.e2e.test.ts +0 -81
  134. package/tests/executors/apply-patch.test.ts +0 -538
  135. package/tests/executors/arion.test.ts +0 -309
  136. package/tests/executors/conversation-primitives.test.ts +0 -250
  137. package/tests/executors/deploy.test.ts +0 -746
  138. package/tests/executors/filesystem-tools.test.ts +0 -357
  139. package/tests/executors/filesystem.test.ts +0 -959
  140. package/tests/executors/frg-freshness.test.ts +0 -136
  141. package/tests/executors/frg-merge.test.ts +0 -70
  142. package/tests/executors/frg-session-content.test.ts +0 -40
  143. package/tests/executors/frg.test.ts +0 -56
  144. package/tests/executors/memory-bugfixes.test.ts +0 -257
  145. package/tests/executors/memory-real-memoria.integration.test.ts +0 -316
  146. package/tests/executors/memory.test.ts +0 -853
  147. package/tests/executors/meta-tools.test.ts +0 -411
  148. package/tests/executors/meta.test.ts +0 -683
  149. package/tests/executors/path-containment.test.ts +0 -51
  150. package/tests/executors/process-registry.test.ts +0 -505
  151. package/tests/executors/pty.test.ts +0 -664
  152. package/tests/executors/quest-security.test.ts +0 -249
  153. package/tests/executors/read-file-media.test.ts +0 -230
  154. package/tests/executors/recall-knowledge-schema.test.ts +0 -209
  155. package/tests/executors/recall-tags.test.ts +0 -278
  156. package/tests/executors/remember-null-safety.contract.test.ts +0 -41
  157. package/tests/executors/restart.test.ts +0 -67
  158. package/tests/executors/search-unified.test.ts +0 -381
  159. package/tests/executors/session-history.test.ts +0 -340
  160. package/tests/executors/session-transcript.test.ts +0 -561
  161. package/tests/executors/shell-abort.test.ts +0 -416
  162. package/tests/executors/shell-env-blocklist.test.ts +0 -648
  163. package/tests/executors/shell-env-process.test.ts +0 -245
  164. package/tests/executors/shell-process-registry.test.ts +0 -334
  165. package/tests/executors/shell-tools.test.ts +0 -393
  166. package/tests/executors/shell.test.ts +0 -690
  167. package/tests/executors/web-abort-vs-timeout.test.ts +0 -213
  168. package/tests/executors/web-integration.test.ts +0 -633
  169. package/tests/executors/web-symlink.test.ts +0 -18
  170. package/tests/executors/web.test.ts +0 -1400
  171. package/tests/executors/write-stdin.test.ts +0 -145
  172. package/tests/extraction/content-extraction.test.ts +0 -153
  173. package/tests/guards/tools-default-test-lane.integration.test.ts +0 -21
  174. package/tests/guards/tools-package-test-commands.e2e.test.ts +0 -43
  175. package/tests/guards/tools-test-lane-manifest.contract.test.ts +0 -76
  176. package/tests/guards/tools-vitest-workspace-alias.contract.test.ts +0 -63
  177. package/tests/helpers/async-waits.ts +0 -53
  178. package/tests/integration/headless-control-contract.integration.test.ts +0 -153
  179. package/tests/integration/memory-tool-schema-parity.integration.test.ts +0 -67
  180. package/tests/integration/meta-tools-round-trip.integration.test.ts +0 -506
  181. package/tests/integration/quest-round-trip.test.ts +0 -303
  182. package/tests/integration/registry-executor-flow.test.ts +0 -85
  183. package/tests/integration.test.ts +0 -177
  184. package/tests/loading-tier.test.ts +0 -126
  185. package/tests/mcp/client-reconnect.test.ts +0 -267
  186. package/tests/mcp/connection.test.ts +0 -846
  187. package/tests/mcp/injectable-logger.test.ts +0 -83
  188. package/tests/mcp/jsonrpc.test.ts +0 -109
  189. package/tests/mcp/lifecycle.test.ts +0 -879
  190. package/tests/network-runtime/address-types.contract.test.ts +0 -143
  191. package/tests/network-runtime/continuity-bind-schema.contract.test.ts +0 -203
  192. package/tests/network-runtime/local-control-contract.test.ts +0 -869
  193. package/tests/network-runtime/local-control-invite-token.contract.test.ts +0 -146
  194. package/tests/network-runtime/node-store-contract.test.ts +0 -11
  195. package/tests/network-runtime/pair-protocol-nodeid.contract.test.ts +0 -15
  196. package/tests/network-runtime/peer-state-machine.contract.test.ts +0 -148
  197. package/tests/network-runtime/protocol-schemas.contract.test.ts +0 -512
  198. package/tests/network-runtime/relay-pending-nodeid.contract.test.ts +0 -62
  199. package/tests/network-runtime/runtime-bootstrap-contract.test.ts +0 -227
  200. package/tests/network-runtime/runtime-socket-local-control-client.test.ts +0 -621
  201. package/tests/network-runtime/wait-for-message-script.test.ts +0 -288
  202. package/tests/parallel.test.ts +0 -71
  203. package/tests/policy.test.ts +0 -184
  204. package/tests/print-default-test-lane.ts +0 -14
  205. package/tests/print-test-lane-manifest.ts +0 -22
  206. package/tests/providers/brave.test.ts +0 -159
  207. package/tests/providers/duckduckgo.test.ts +0 -207
  208. package/tests/providers/exa.test.ts +0 -175
  209. package/tests/providers/firecrawl.test.ts +0 -168
  210. package/tests/providers/jina.test.ts +0 -144
  211. package/tests/providers/router.test.ts +0 -328
  212. package/tests/providers/tavily.test.ts +0 -165
  213. package/tests/registry/discovery.test.ts +0 -154
  214. package/tests/registry/injectable-logger.test.ts +0 -230
  215. package/tests/registry/input-validation.test.ts +0 -361
  216. package/tests/registry/interface-completeness.test.ts +0 -85
  217. package/tests/registry/mcp-integration.test.ts +0 -103
  218. package/tests/registry/mcp-read-only-hint.test.ts +0 -60
  219. package/tests/registry/memoria-discovery.test.ts +0 -390
  220. package/tests/registry/nested-validation.test.ts +0 -283
  221. package/tests/registry/pseudo-tool-filtering.test.ts +0 -258
  222. package/tests/registry/registration-lifecycle.test.ts +0 -133
  223. package/tests/registry-validation.test.ts +0 -424
  224. package/tests/registry.test.ts +0 -460
  225. package/tests/security/dns-pinning.test.ts +0 -162
  226. package/tests/security/external-content.test.ts +0 -144
  227. package/tests/security/ssrf.test.ts +0 -118
  228. package/tests/shell-safety-integration.test.ts +0 -32
  229. package/tests/shell-safety.test.ts +0 -365
  230. package/tests/slack/desktop-session.test.ts +0 -50
  231. package/tests/test-lane-manifest.ts +0 -440
  232. package/tests/test-utils.ts +0 -27
  233. package/tests/tool-factory.test.ts +0 -188
  234. package/tests/utils/retry.test.ts +0 -231
  235. package/tests/utils/url.test.ts +0 -63
  236. package/tsconfig.cjs.json +0 -24
  237. package/tsconfig.json +0 -12
  238. package/vitest.config.ts +0 -55
  239. package/vitest.e2e.config.ts +0 -24
  240. package/vitest.integration.config.ts +0 -24
  241. package/vitest.native.config.ts +0 -24
@@ -1,512 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import * as runtimeContracts from "../../src/index.js";
3
- import {
4
- NETWORK_RUNTIME_PROTOCOL_VERSION,
5
- DeliveryAckSchema,
6
- MutationEnvelopeSchema,
7
- PairProposalSchema,
8
- PrincipalFingerprintSchema,
9
- TransportInviteTokenSchema,
10
- RuntimeIngressEnvelopeSchema,
11
- RuntimeNodeAdvertisementSchema,
12
- RuntimeRegisterRequestSchema,
13
- SignedContinuityBindSchema,
14
- TlsCaFingerprintSchema,
15
- assertSupportedNetworkRuntimeProtocolVersion,
16
- } from "../../src/index.js";
17
- import { AcceptInviteRequestSchema } from "../../src/network-runtime/pair-route-contract.js";
18
-
19
- const nodeAPrincipalFingerprint = PrincipalFingerprintSchema.parse("a".repeat(64));
20
- const nodeBPrincipalFingerprint = PrincipalFingerprintSchema.parse("b".repeat(64));
21
- const pinnedTlsCaFingerprint = TlsCaFingerprintSchema.parse("c".repeat(64));
22
-
23
- describe("network runtime protocol schemas", () => {
24
- it("exports canonical shared schemas plus a fail-closed version gate", () => {
25
- expect(
26
- assertSupportedNetworkRuntimeProtocolVersion(NETWORK_RUNTIME_PROTOCOL_VERSION, "join"),
27
- ).toBe(NETWORK_RUNTIME_PROTOCOL_VERSION);
28
- expect(() => assertSupportedNetworkRuntimeProtocolVersion(0, "join")).toThrow(
29
- /Unsupported join protocol version 0/i,
30
- );
31
- expect(() => assertSupportedNetworkRuntimeProtocolVersion(2, "join")).toThrow(/Supported: 1/i);
32
- });
33
-
34
- it("parses canonical runtime protocol shapes and rejects ambiguous legacy fields", () => {
35
- const joinRequestSchema = (
36
- runtimeContracts as { JoinRequestSchema?: { parse: Function; safeParse: Function } }
37
- ).JoinRequestSchema;
38
- expect(joinRequestSchema).toBeDefined();
39
-
40
- const deliveryAck = DeliveryAckSchema.parse({
41
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
42
- messageId: "msg-1",
43
- senderNodeId: "node-a",
44
- recipientNodeId: "node-b",
45
- storedAt: 123,
46
- });
47
-
48
- expect(
49
- DeliveryAckSchema.safeParse({
50
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
51
- messageId: "msg-legacy",
52
- senderNodeId: "node-a",
53
- recipientName: "runtime-b",
54
- storedAt: 123,
55
- }).success,
56
- ).toBe(false);
57
-
58
- expect(
59
- RuntimeIngressEnvelopeSchema.parse({
60
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
61
- deliveryAck,
62
- }),
63
- ).toEqual({
64
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
65
- deliveryAck,
66
- });
67
-
68
- expect(
69
- RuntimeNodeAdvertisementSchema.parse({
70
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
71
- publicationRevision: 7,
72
- nodeId: "node-a",
73
- principalFingerprint: nodeAPrincipalFingerprint,
74
- signingPublicKey: "signing-a",
75
- transportPublicKey: "transport-a",
76
- transportEndpoint: {
77
- host: "127.0.0.1",
78
- port: 51820,
79
- },
80
- controlEndpoint: {
81
- host: "127.0.0.1",
82
- port: 58291,
83
- tlsCaFingerprint: pinnedTlsCaFingerprint,
84
- tlsServerIdentity: nodeAPrincipalFingerprint,
85
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
86
- },
87
- }),
88
- ).toMatchObject({
89
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
90
- publicationRevision: 7,
91
- nodeId: "node-a",
92
- principalFingerprint: nodeAPrincipalFingerprint,
93
- signingPublicKey: "signing-a",
94
- transportPublicKey: "transport-a",
95
- });
96
- expect(
97
- RuntimeNodeAdvertisementSchema.safeParse({
98
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
99
- publicationRevision: 7,
100
- nodeId: "node-a",
101
- principalFingerprint: nodeAPrincipalFingerprint,
102
- transportPublicKey: "transport-a",
103
- controlEndpoint: {
104
- host: "127.0.0.1",
105
- port: 58291,
106
- tlsCaFingerprint: pinnedTlsCaFingerprint,
107
- tlsServerIdentity: nodeAPrincipalFingerprint,
108
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
109
- },
110
- }).success,
111
- ).toBe(false);
112
-
113
- const transportInvite = TransportInviteTokenSchema.parse({
114
- nodeId: "node-a",
115
- audienceNodeId: "node-b",
116
- publicKey: "transport-a",
117
- host: "127.0.0.1",
118
- port: 51820,
119
- controlEndpoint: {
120
- host: "127.0.0.1",
121
- port: 58291,
122
- tlsCaFingerprint: pinnedTlsCaFingerprint,
123
- tlsServerIdentity: nodeAPrincipalFingerprint,
124
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
125
- },
126
- psk: "psk-a",
127
- displayNameSnapshot: "Alpha",
128
- signingPublicKey: "principal-a",
129
- createdAt: 123,
130
- expiresAt: 456,
131
- tokenNonce: "nonce-a",
132
- });
133
-
134
- expect(transportInvite).toMatchObject({
135
- nodeId: "node-a",
136
- audienceNodeId: "node-b",
137
- publicKey: "transport-a",
138
- });
139
- expect(
140
- TransportInviteTokenSchema.safeParse({
141
- nodeId: "node-a",
142
- peerId: "node-a",
143
- publicKey: "transport-a",
144
- host: "127.0.0.1",
145
- port: 51820,
146
- psk: "psk-a",
147
- displayNameSnapshot: "Alpha",
148
- createdAt: 123,
149
- expiresAt: 456,
150
- tokenNonce: "nonce-a",
151
- }).success,
152
- ).toBe(false);
153
-
154
- const joinRequest = joinRequestSchema!.parse({
155
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
156
- nodeId: "node-a",
157
- principalFingerprint: nodeAPrincipalFingerprint,
158
- peerPublicKey: "transport-a",
159
- signingPublicKey: "principal-a",
160
- transportEndpoint: {
161
- host: "127.0.0.1",
162
- port: 51820,
163
- },
164
- controlEndpoint: {
165
- host: "127.0.0.1",
166
- port: 58291,
167
- tlsCaFingerprint: pinnedTlsCaFingerprint,
168
- tlsServerIdentity: nodeAPrincipalFingerprint,
169
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
170
- },
171
- displayNameSnapshot: "Alpha",
172
- inviteTokenNonce: "nonce-a",
173
- });
174
-
175
- expect(
176
- RuntimeIngressEnvelopeSchema.parse({
177
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
178
- joinRequest,
179
- }),
180
- ).toEqual({
181
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
182
- joinRequest,
183
- });
184
-
185
- expect(
186
- joinRequestSchema!.safeParse({
187
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
188
- nodeId: "node-a",
189
- peerPublicKey: "transport-a",
190
- principalFingerprint: nodeAPrincipalFingerprint,
191
- signingPublicKey: "principal-a",
192
- transportEndpoint: {
193
- host: "127.0.0.1",
194
- port: 51820,
195
- },
196
- displayNameSnapshot: "Alpha",
197
- inviteTokenNonce: "nonce-a",
198
- }).success,
199
- ).toBe(true);
200
-
201
- expect(
202
- joinRequestSchema!.safeParse({
203
- protocolVersion: 2,
204
- nodeId: "node-a",
205
- principalFingerprint: nodeAPrincipalFingerprint,
206
- peerPublicKey: "transport-a",
207
- signingPublicKey: "principal-a",
208
- transportEndpoint: {
209
- host: "127.0.0.1",
210
- port: 51820,
211
- },
212
- displayNameSnapshot: "Alpha",
213
- inviteTokenNonce: "nonce-a",
214
- }).success,
215
- ).toBe(false);
216
-
217
- expect(
218
- joinRequestSchema!.safeParse({
219
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
220
- peerId: "node-a",
221
- principalFingerprint: nodeAPrincipalFingerprint,
222
- peerPublicKey: "transport-a",
223
- signingPublicKey: "principal-a",
224
- transportEndpoint: {
225
- host: "127.0.0.1",
226
- port: 51820,
227
- },
228
- displayNameSnapshot: "Alpha",
229
- inviteTokenNonce: "nonce-a",
230
- }).success,
231
- ).toBe(false);
232
-
233
- expect(
234
- joinRequestSchema!.safeParse({
235
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
236
- nodeId: "node-a",
237
- peerPublicKey: "transport-a",
238
- signingPublicKey: "principal-a",
239
- transportEndpoint: {
240
- host: "127.0.0.1",
241
- port: 51820,
242
- },
243
- displayNameSnapshot: "Alpha",
244
- inviteTokenNonce: "nonce-a",
245
- }).success,
246
- ).toBe(false);
247
-
248
- expect(
249
- TransportInviteTokenSchema.safeParse({
250
- nodeId: "node-a",
251
- publicKey: "transport-a",
252
- host: "127.0.0.1",
253
- port: 51820,
254
- psk: "psk-a",
255
- displayNameSnapshot: "Alpha",
256
- createdAt: 1,
257
- expiresAt: 2,
258
- tokenNonce: "nonce-a",
259
- }).success,
260
- ).toBe(true);
261
- expect(
262
- TransportInviteTokenSchema.safeParse({
263
- nodeId: "node-a",
264
- peerId: "node-a",
265
- publicKey: "transport-a",
266
- host: "127.0.0.1",
267
- port: 51820,
268
- psk: "psk-a",
269
- displayNameSnapshot: "Alpha",
270
- createdAt: 1,
271
- expiresAt: 2,
272
- tokenNonce: "nonce-a",
273
- }).success,
274
- ).toBe(false);
275
-
276
- expect(
277
- RuntimeRegisterRequestSchema.parse({
278
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
279
- nodeId: "node-a",
280
- transportPublicKey: "transport-a",
281
- principalFingerprint: nodeAPrincipalFingerprint,
282
- endpointRevision: 4,
283
- controlEndpoint: {
284
- host: "127.0.0.1",
285
- port: 58291,
286
- tlsCaFingerprint: pinnedTlsCaFingerprint,
287
- tlsServerIdentity: nodeAPrincipalFingerprint,
288
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
289
- },
290
- }),
291
- ).toMatchObject({
292
- nodeId: "node-a",
293
- endpointRevision: 4,
294
- });
295
- expect(
296
- RuntimeRegisterRequestSchema.safeParse({
297
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
298
- peerId: "node-a",
299
- transportPublicKey: "transport-a",
300
- principalFingerprint: nodeAPrincipalFingerprint,
301
- endpointRevision: 4,
302
- }).success,
303
- ).toBe(false);
304
-
305
- expect(
306
- PairProposalSchema.parse({
307
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
308
- nodeId: "node-a",
309
- principalFingerprint: nodeAPrincipalFingerprint,
310
- transportPublicKey: "transport-a",
311
- presharedKey: "psk-a",
312
- controlEndpoint: {
313
- host: "127.0.0.1",
314
- port: 58291,
315
- tlsCaFingerprint: pinnedTlsCaFingerprint,
316
- tlsServerIdentity: nodeAPrincipalFingerprint,
317
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
318
- },
319
- }),
320
- ).toMatchObject({
321
- nodeId: "node-a",
322
- });
323
-
324
- expect(
325
- PairProposalSchema.safeParse({
326
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
327
- nodeId: "node-a",
328
- principalFingerprint: nodeAPrincipalFingerprint,
329
- transportPublicKey: "transport-a",
330
- presharedKey: "psk-a",
331
- ["message" + "Port"]: 58291,
332
- }).success,
333
- ).toBe(false);
334
- expect(
335
- PairProposalSchema.safeParse({
336
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
337
- peerId: "node-a",
338
- principalFingerprint: nodeAPrincipalFingerprint,
339
- transportPublicKey: "transport-a",
340
- presharedKey: "psk-a",
341
- }).success,
342
- ).toBe(false);
343
-
344
- expect(
345
- SignedContinuityBindSchema.parse({
346
- statement: {
347
- nodeId: "node-a",
348
- previousPrincipalFingerprint: nodeAPrincipalFingerprint,
349
- newPrincipalFingerprint: nodeBPrincipalFingerprint,
350
- newTransportPublicKey: "transport-b",
351
- bindingGeneration: 3,
352
- revocationGeneration: 1,
353
- createdAt: "2026-03-11T00:00:00Z",
354
- },
355
- delegationSignature: "sig-a",
356
- acceptanceSignature: "sig-b",
357
- previousPublicKey: "old-public-key",
358
- newPublicKey: "new-public-key",
359
- }),
360
- ).toMatchObject({
361
- statement: {
362
- nodeId: "node-a",
363
- bindingGeneration: 3,
364
- },
365
- });
366
- expect(
367
- SignedContinuityBindSchema.safeParse({
368
- statement: {
369
- peerId: "node-a",
370
- previousPrincipalFingerprint: nodeAPrincipalFingerprint,
371
- newPrincipalFingerprint: nodeBPrincipalFingerprint,
372
- newTransportPublicKey: "transport-b",
373
- bindingGeneration: 3,
374
- revocationGeneration: 1,
375
- createdAt: "2026-03-11T00:00:00Z",
376
- },
377
- delegationSignature: "sig-a",
378
- acceptanceSignature: "sig-b",
379
- previousPublicKey: "old-public-key",
380
- newPublicKey: "new-public-key",
381
- }).success,
382
- ).toBe(false);
383
-
384
- expect(
385
- MutationEnvelopeSchema.parse({
386
- version: NETWORK_RUNTIME_PROTOCOL_VERSION,
387
- id: "env-1",
388
- operation: "network.register",
389
- principal: {
390
- nodeId: "node-a",
391
- principalFingerprint: nodeAPrincipalFingerprint,
392
- transportPublicKey: "transport-a",
393
- bindingGeneration: 1,
394
- displayNameSnapshot: "Alpha",
395
- },
396
- target: {
397
- nodeId: "node-b",
398
- principalFingerprint: nodeBPrincipalFingerprint,
399
- transportPublicKey: "transport-b",
400
- bindingGeneration: 2,
401
- displayNameSnapshot: "Bravo",
402
- },
403
- namespace: "mesh",
404
- policyEpoch: 1,
405
- nonce: "node-a#1",
406
- timestamp: 123,
407
- ttl: 1000,
408
- contextHash: "ctx",
409
- payload: { ok: true },
410
- signature: "sig",
411
- }),
412
- ).toMatchObject({
413
- version: NETWORK_RUNTIME_PROTOCOL_VERSION,
414
- operation: "network.register",
415
- });
416
- });
417
-
418
- it("preserves signed transport invite PEM payloads verbatim", () => {
419
- const caCert = "-----BEGIN CERTIFICATE-----\nalpha-bootstrap-ca\n-----END CERTIFICATE-----\n";
420
-
421
- const parsed = TransportInviteTokenSchema.parse({
422
- nodeId: "node-a",
423
- audienceNodeId: "node-b",
424
- publicKey: "leader-public-key",
425
- host: "127.0.0.1",
426
- port: 51820,
427
- controlEndpoint: {
428
- host: "127.0.0.1",
429
- port: 58291,
430
- tlsCaFingerprint: pinnedTlsCaFingerprint,
431
- tlsServerIdentity: nodeAPrincipalFingerprint,
432
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
433
- },
434
- psk: "preshared-key",
435
- displayNameSnapshot: "Alpha",
436
- signingPublicKey: "signing-public-key",
437
- caCert,
438
- createdAt: 123,
439
- expiresAt: 456,
440
- tokenNonce: "nonce-a",
441
- coordinationUrl: "https://coordination.example.test",
442
- });
443
-
444
- expect(parsed.caCert).toBe(caCert);
445
- expect("peerId" in parsed).toBe(false);
446
- });
447
-
448
- it("hard-cuts accept-invite continuity to dual-signed binds instead of operatorApproved proofChain proposals", () => {
449
- const transportEndpoint = {
450
- host: "127.0.0.1",
451
- port: 51820,
452
- };
453
- const controlEndpoint = {
454
- host: "127.0.0.1",
455
- port: 58291,
456
- tlsCaFingerprint: pinnedTlsCaFingerprint,
457
- tlsServerIdentity: nodeAPrincipalFingerprint,
458
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
459
- };
460
-
461
- expect(
462
- AcceptInviteRequestSchema.safeParse({
463
- inviteToken: "invite-token",
464
- nodeId: "node-a",
465
- transportEndpoint,
466
- controlEndpoint,
467
- continuity: {
468
- statement: {
469
- nodeId: "node-a",
470
- previousPrincipalFingerprint: nodeAPrincipalFingerprint,
471
- newPrincipalFingerprint: nodeBPrincipalFingerprint,
472
- newTransportPublicKey: "transport-b",
473
- bindingGeneration: 3,
474
- revocationGeneration: 1,
475
- createdAt: "2026-03-11T00:00:00Z",
476
- },
477
- delegationSignature: "sig:delegation-base64",
478
- acceptanceSignature: "sig:acceptance-base64",
479
- previousPublicKey: "ed25519:old-public-key",
480
- newPublicKey: "ed25519:new-public-key",
481
- },
482
- }).success,
483
- ).toBe(true);
484
-
485
- expect(
486
- AcceptInviteRequestSchema.safeParse({
487
- inviteToken: "invite-token",
488
- nodeId: "node-a",
489
- transportEndpoint,
490
- controlEndpoint,
491
- continuity: {
492
- protocolVersion: NETWORK_RUNTIME_PROTOCOL_VERSION,
493
- nodeId: "node-a",
494
- newPrincipalFingerprint: nodeBPrincipalFingerprint,
495
- newTransportPublicKey: "transport-b",
496
- bindingGeneration: 3,
497
- revocationGeneration: 1,
498
- operatorApproved: true,
499
- proofChain: [
500
- {
501
- kind: "continuity_bind",
502
- principalFingerprint: nodeAPrincipalFingerprint,
503
- transportPublicKey: "transport-a",
504
- signedAt: 123,
505
- signature: "sig-a",
506
- },
507
- ],
508
- },
509
- }).success,
510
- ).toBe(false);
511
- });
512
- });
@@ -1,62 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import {
3
- RelayPendingRequestSchema,
4
- RelayPendingResponseSchema,
5
- } from "../../src/network-runtime/pair-route-contract.js";
6
-
7
- describe("relay-pending nodeId contract", () => {
8
- it("uses nodeId as the only remote actor identity in relayed pair requests", () => {
9
- const request = RelayPendingRequestSchema.parse({
10
- id: "relay-req-1",
11
- nodeId: "node-initiator",
12
- displayNameSnapshot: "Initiator",
13
- principalFingerprint: "c".repeat(64),
14
- signingPublicKey: "c2lnbmluZy1wdWJrZXk=",
15
- port: 58291,
16
- ingressHost: "198.51.100.44",
17
- responderControlHostHint: "198.51.100.45",
18
- ephemeralPublicKey: "ZWZlbWVyYWwtcHVibGljLWtleQ==",
19
- ephemeralKeySignature: "ZWZlbWVyYWwtc2ln",
20
- caCert: "-----BEGIN CERTIFICATE-----\nPAIR-RELAY\n-----END CERTIFICATE-----\n",
21
- expiresAt: Date.now() + 60_000,
22
- });
23
-
24
- expect(request.nodeId).toBe("node-initiator");
25
- expect(() =>
26
- RelayPendingRequestSchema.parse({
27
- ...request,
28
- peerId: "peer-legacy",
29
- }),
30
- ).toThrow();
31
- });
32
-
33
- it("uses the canonical response envelope for relay-pending payloads", () => {
34
- const response = RelayPendingResponseSchema.parse({
35
- requests: [
36
- {
37
- id: "relay-req-1",
38
- nodeId: "node-initiator",
39
- displayNameSnapshot: "Initiator",
40
- principalFingerprint: "c".repeat(64),
41
- signingPublicKey: "c2lnbmluZy1wdWJrZXk=",
42
- port: 58291,
43
- ingressHost: "198.51.100.44",
44
- expiresAt: Date.now() + 60_000,
45
- },
46
- ],
47
- });
48
-
49
- expect(response.requests).toHaveLength(1);
50
- expect(response.requests[0]?.nodeId).toBe("node-initiator");
51
- expect(() =>
52
- RelayPendingResponseSchema.parse({
53
- requests: [
54
- {
55
- ...response.requests[0],
56
- peerId: "peer-legacy",
57
- },
58
- ],
59
- }),
60
- ).toThrow();
61
- });
62
- });