nterminal 1.3.13 → 1.3.15

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 (79) hide show
  1. package/README.md +1 -1
  2. package/dist/client/assets/MarkdownPreview-DiD5zTx6.js +1 -0
  3. package/dist/client/assets/{TranscriptMarkdownBody-BAkL6ovK.js → TranscriptMarkdownBody-CcknjOWW.js} +1 -1
  4. package/dist/client/assets/{index-DLFQwECZ.js → index-B4ZOdvVw.js} +1 -1
  5. package/dist/client/assets/index-BiIblEKQ.js +59 -0
  6. package/dist/client/index.html +1 -1
  7. package/dist/scripts/onboarding.js +321 -135
  8. package/dist/scripts/onboarding.js.map +1 -1
  9. package/dist/server/accounts/accountService.d.ts +4 -0
  10. package/dist/server/accounts/accountService.js +102 -9
  11. package/dist/server/accounts/accountService.js.map +1 -1
  12. package/dist/server/agent/agentProxy.js +4 -1
  13. package/dist/server/agent/agentProxy.js.map +1 -1
  14. package/dist/server/agent/agentRoutes.js +5 -0
  15. package/dist/server/agent/agentRoutes.js.map +1 -1
  16. package/dist/server/agent/agentTransport.d.ts +11 -0
  17. package/dist/server/agent/agentTransport.js +117 -0
  18. package/dist/server/agent/agentTransport.js.map +1 -0
  19. package/dist/server/agent/agentWebSocketProxy.js +3 -0
  20. package/dist/server/agent/agentWebSocketProxy.js.map +1 -1
  21. package/dist/server/agent/directTlsIdentity.d.ts +39 -0
  22. package/dist/server/agent/directTlsIdentity.js +534 -0
  23. package/dist/server/agent/directTlsIdentity.js.map +1 -0
  24. package/dist/server/agent/directTlsMigration.d.ts +25 -0
  25. package/dist/server/agent/directTlsMigration.js +322 -0
  26. package/dist/server/agent/directTlsMigration.js.map +1 -0
  27. package/dist/server/agent/directTlsProtocol.d.ts +10 -0
  28. package/dist/server/agent/directTlsProtocol.js +32 -0
  29. package/dist/server/agent/directTlsProtocol.js.map +1 -0
  30. package/dist/server/agent/directTlsServer.d.ts +7 -0
  31. package/dist/server/agent/directTlsServer.js +72 -0
  32. package/dist/server/agent/directTlsServer.js.map +1 -0
  33. package/dist/server/agent/outboundAgentRegistry.js +2 -1
  34. package/dist/server/agent/outboundAgentRegistry.js.map +1 -1
  35. package/dist/server/agent/secondaryDirectTls.d.ts +20 -0
  36. package/dist/server/agent/secondaryDirectTls.js +143 -0
  37. package/dist/server/agent/secondaryDirectTls.js.map +1 -0
  38. package/dist/server/config.d.ts +1 -0
  39. package/dist/server/config.js +1 -0
  40. package/dist/server/config.js.map +1 -1
  41. package/dist/server/hooks/hookInstallation.d.ts +2 -0
  42. package/dist/server/hooks/hookInstallation.js +42 -17
  43. package/dist/server/hooks/hookInstallation.js.map +1 -1
  44. package/dist/server/hooks/verifiedLock.js +96 -2
  45. package/dist/server/hooks/verifiedLock.js.map +1 -1
  46. package/dist/server/http.d.ts +2 -0
  47. package/dist/server/http.js +9 -1
  48. package/dist/server/http.js.map +1 -1
  49. package/dist/server/index.js +26 -1
  50. package/dist/server/index.js.map +1 -1
  51. package/dist/server/notifications/agentCompletionMonitor.js +4 -2
  52. package/dist/server/notifications/agentCompletionMonitor.js.map +1 -1
  53. package/dist/server/routes/agentManagementRoutes.js +73 -7
  54. package/dist/server/routes/agentManagementRoutes.js.map +1 -1
  55. package/dist/server/routes/terminalWebSocket.js +6 -0
  56. package/dist/server/routes/terminalWebSocket.js.map +1 -1
  57. package/dist/server/storage/fileStore.d.ts +12 -1
  58. package/dist/server/storage/fileStore.js +30 -6
  59. package/dist/server/storage/fileStore.js.map +1 -1
  60. package/dist/server/terminal/PtyAdapter.d.ts +1 -0
  61. package/dist/server/terminal/PtyAdapter.js.map +1 -1
  62. package/dist/server/terminal/TerminalManager.d.ts +2 -0
  63. package/dist/server/terminal/TerminalManager.js +32 -0
  64. package/dist/server/terminal/TerminalManager.js.map +1 -1
  65. package/dist/server/terminal/TmuxPtyAdapter.js +32 -1
  66. package/dist/server/terminal/TmuxPtyAdapter.js.map +1 -1
  67. package/dist/server/update/packageUpdate.d.ts +1 -0
  68. package/dist/server/update/packageUpdate.js +54 -3
  69. package/dist/server/update/packageUpdate.js.map +1 -1
  70. package/dist/shared/protocol.d.ts +7 -0
  71. package/dist/shared/protocol.js +3 -0
  72. package/dist/shared/protocol.js.map +1 -1
  73. package/dist/shared/types.d.ts +1 -0
  74. package/docs/onboarding.md +58 -5
  75. package/docs/provider-hooks.md +24 -3
  76. package/package.json +5 -4
  77. package/scripts/nterminalctl +30 -3
  78. package/dist/client/assets/MarkdownPreview-8vEkrQtk.js +0 -1
  79. package/dist/client/assets/index-WSS03d_S.js +0 -59
@@ -0,0 +1,322 @@
1
+ import { randomBytes, X509Certificate } from 'node:crypto';
2
+ import { requireAgentToken, extractBearerHeader } from './agentAuth.js';
3
+ import { safeTokenEqual } from './outboundAgentRegistry.js';
4
+ import { agentFetch } from './agentTransport.js';
5
+ import { DIRECT_TLS_RENEW_BEFORE_MS, validateAgentCertificate } from './directTlsIdentity.js';
6
+ import { bootstrapMac, httpsOrigin } from './directTlsProtocol.js';
7
+ import { samePublicKey } from './secondaryDirectTls.js';
8
+ import { authenticateTerminalRequest } from '../routes/terminalRoutes.js';
9
+ export async function probeDirectTls(agent) {
10
+ if (!agent.url || !agent.tls)
11
+ return false;
12
+ try {
13
+ const response = await agentFetch({ ...agent, url: agent.url }, `${agent.url}/api/agent/direct-tls/probe`, {
14
+ headers: { authorization: `Bearer ${agent.token}` }, signal: AbortSignal.timeout(5000)
15
+ });
16
+ if (response.status !== 200) {
17
+ await response.body?.cancel();
18
+ return false;
19
+ }
20
+ const body = await smallJson(response);
21
+ return body.ok === true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ async function smallJson(response) {
28
+ const reader = response.body?.getReader();
29
+ if (!reader)
30
+ throw new Error('tls_empty_response');
31
+ const buffers = [];
32
+ let size = 0;
33
+ try {
34
+ for (;;) {
35
+ const result = await reader.read();
36
+ if (result.done)
37
+ break;
38
+ size += result.value.byteLength;
39
+ if (size > 32 * 1024)
40
+ throw new Error('tls_response_too_large');
41
+ buffers.push(result.value);
42
+ }
43
+ const body = JSON.parse(Buffer.concat(buffers).toString('utf8'));
44
+ if (!body || typeof body !== 'object' || Array.isArray(body))
45
+ throw new Error('tls_invalid_response');
46
+ return body;
47
+ }
48
+ finally {
49
+ await reader.cancel().catch(() => { });
50
+ }
51
+ }
52
+ export function registerDirectTlsRoutes(app, config, store, auth, secondary) {
53
+ if (config.role === 'main') {
54
+ app.get('/api/direct-tls/capabilities', async (request, reply) => {
55
+ if (!await authenticateTerminalRequest(auth, request, reply))
56
+ return reply;
57
+ return { version: 1 };
58
+ });
59
+ app.post('/api/agent-tls/register', { bodyLimit: 32 * 1024 }, async (request, reply) => {
60
+ if (config.previewMode)
61
+ return reply.code(403).send({ error: 'preview_read_only' });
62
+ const body = request.body;
63
+ if (!body || typeof body.agentId !== 'string')
64
+ return reply.code(400).send({ error: 'invalid_registration' });
65
+ const agent = (await store.read()).agents.find(item => item.id === body.agentId);
66
+ if (!agent || agent.transport !== 'direct' || !safeTokenEqual(extractBearerHeader(request), agent.token)) {
67
+ return reply.code(401).send({ error: 'unauthorized' });
68
+ }
69
+ const pending = agent.tlsBootstrap;
70
+ if (!pending || pending.expiresAt <= Date.now() || pending.nonce !== body.nonce
71
+ || pending.url !== body.url || pending.mainUrl !== body.mainUrl || pending.expiresAt !== body.expiresAt) {
72
+ return reply.code(409).send({ error: 'tls_bootstrap_expired' });
73
+ }
74
+ let certificate;
75
+ try {
76
+ certificate = validateAgentCertificate(body.certificate);
77
+ }
78
+ catch {
79
+ return reply.code(400).send({ error: 'invalid_tls_certificate' });
80
+ }
81
+ const candidate = { ...agent, url: pending.url, tls: { certificate, confirmed: false } };
82
+ if (!await probeDirectTls(candidate))
83
+ return reply.code(502).send({ error: 'tls_probe_failed' });
84
+ let committed = false;
85
+ await store.update(state => ({ ...state, agents: state.agents.map(current => {
86
+ if (current.id !== agent.id || current.token !== agent.token || current.url !== agent.url
87
+ || current.transport !== 'direct' || current.tlsBootstrap?.nonce !== pending.nonce
88
+ || current.tlsBootstrap.expiresAt <= Date.now() || current.tlsBootstrap.url !== pending.url
89
+ || current.tlsBootstrap.mainUrl !== pending.mainUrl)
90
+ return current;
91
+ committed = true;
92
+ const { tlsBootstrap: _pending, ...rest } = current;
93
+ return { ...rest, url: candidate.url, tls: candidate.tls };
94
+ }) }), { flush: 'durable' });
95
+ return committed ? { ok: true } : reply.code(409).send({ error: 'tls_registration_changed' });
96
+ });
97
+ }
98
+ if (!secondary)
99
+ return;
100
+ const guard = { preHandler: requireAgentToken(config), bodyLimit: 32 * 1024 };
101
+ app.get('/api/agent/direct-tls/probe', guard, async (request, reply) => {
102
+ if (!request.raw.socket.encrypted)
103
+ return reply.code(400).send({ error: 'tls_required' });
104
+ return { ok: true };
105
+ });
106
+ // The signed body authenticates bootstrap without exposing its HMAC key over HTTP.
107
+ app.post('/api/agent/direct-tls/prepare', { bodyLimit: 4096 }, async (request, reply) => {
108
+ if (config.previewMode)
109
+ return reply.code(403).send({ error: 'preview_read_only' });
110
+ try {
111
+ await secondary.prepare(request.body);
112
+ return { ok: true };
113
+ }
114
+ catch {
115
+ return reply.code(409).send({ error: 'tls_registration_pending' });
116
+ }
117
+ });
118
+ app.post('/api/agent/direct-tls/commit', guard, async (request, reply) => {
119
+ if (config.previewMode)
120
+ return reply.code(403).send({ error: 'preview_read_only' });
121
+ if (!request.raw.socket.encrypted)
122
+ return reply.code(400).send({ error: 'tls_required' });
123
+ await secondary.commit();
124
+ app.server.emit('direct-tls-committed');
125
+ return { ok: true };
126
+ });
127
+ app.post('/api/agent/direct-tls/renew', guard, async (request, reply) => {
128
+ if (config.previewMode)
129
+ return reply.code(403).send({ error: 'preview_read_only' });
130
+ if (!request.raw.socket.encrypted)
131
+ return reply.code(400).send({ error: 'tls_required' });
132
+ return { certificate: await secondary.stageRenewal() };
133
+ });
134
+ app.post('/api/agent/direct-tls/activate', guard, async (request, reply) => {
135
+ if (config.previewMode)
136
+ return reply.code(403).send({ error: 'preview_read_only' });
137
+ if (!request.raw.socket.encrypted)
138
+ return reply.code(400).send({ error: 'tls_required' });
139
+ const result = await secondary.activateRenewal(request.body?.certificate, identity => {
140
+ // The registered TLS listener applies synchronously and propagates failures.
141
+ if (!app.server.emit('direct-tls-renewed', identity))
142
+ throw new Error('tls_listener_unavailable');
143
+ });
144
+ if (result.cleanupWarning)
145
+ request.log.warn({ code: result.cleanupWarning }, 'Direct TLS renewal cleanup deferred');
146
+ return { ok: true };
147
+ });
148
+ }
149
+ /** Runs on main, independent of Update all/browser lifetime. At most two peers at a time. */
150
+ export class DirectTlsMigration {
151
+ config;
152
+ store;
153
+ warn;
154
+ stopped = true;
155
+ timer;
156
+ controller = new AbortController();
157
+ retryAfter = new Map();
158
+ constructor(config, store, warn) {
159
+ this.config = config;
160
+ this.store = store;
161
+ this.warn = warn;
162
+ }
163
+ start() {
164
+ if (!this.stopped || this.config.previewMode || this.config.role !== 'main')
165
+ return;
166
+ this.stopped = false;
167
+ this.schedule(2000);
168
+ }
169
+ dispose() { this.stopped = true; clearTimeout(this.timer); this.controller.abort(); }
170
+ schedule(ms) {
171
+ if (this.stopped)
172
+ return;
173
+ this.timer = setTimeout(() => void this.run(), ms);
174
+ this.timer.unref();
175
+ }
176
+ async run() {
177
+ try {
178
+ const mainUrl = this.config.allowedOrigins.find(origin => { try {
179
+ return httpsOrigin(origin) === origin;
180
+ }
181
+ catch {
182
+ return false;
183
+ } });
184
+ if (!mainUrl)
185
+ return;
186
+ const all = (await this.store.read()).agents;
187
+ for (const id of this.retryAfter.keys())
188
+ if (!all.some(agent => agent.id === id))
189
+ this.retryAfter.delete(id);
190
+ const agents = all.filter(agent => agent.transport === 'direct' && agent.url
191
+ && (this.retryAfter.get(agent.id) ?? 0) <= Date.now()
192
+ && (agent.tls ? !agent.tls.confirmed || agent.tls.nextCertificate || this.needsRenewal(agent)
193
+ : agent.url.startsWith('http://')));
194
+ let index = 0;
195
+ const worker = async () => {
196
+ while (!this.stopped && index < agents.length) {
197
+ const agent = agents[index++];
198
+ this.retryAfter.delete(agent.id);
199
+ try {
200
+ if (agent.tls?.confirmed)
201
+ await this.renew(agent);
202
+ else
203
+ await this.migrate(agent, mainUrl);
204
+ }
205
+ catch {
206
+ this.retryAfter.set(agent.id, Date.now() + 5 * 60_000);
207
+ if (!this.stopped)
208
+ this.warn(agent.id, 'direct_tls_pending');
209
+ }
210
+ }
211
+ };
212
+ await Promise.all([worker(), worker()]);
213
+ }
214
+ catch {
215
+ if (!this.stopped)
216
+ this.warn('main', 'direct_tls_scan_failed');
217
+ }
218
+ finally {
219
+ this.schedule(60_000);
220
+ }
221
+ }
222
+ needsRenewal(agent) {
223
+ try {
224
+ return Date.parse(new X509Certificate(agent.tls.certificate).validTo) - Date.now() < DIRECT_TLS_RENEW_BEFORE_MS;
225
+ }
226
+ catch {
227
+ return true;
228
+ }
229
+ }
230
+ async renew(agent) {
231
+ if (!agent.url || !agent.tls?.confirmed)
232
+ return;
233
+ let current = agent;
234
+ if (!agent.tls.nextCertificate) {
235
+ const response = await agentFetch(agent, `${agent.url}/api/agent/direct-tls/renew`, {
236
+ method: 'POST', headers: { authorization: `Bearer ${agent.token}` },
237
+ signal: AbortSignal.any([this.controller.signal, AbortSignal.timeout(30_000)])
238
+ });
239
+ if (!response.ok) {
240
+ await response.body?.cancel();
241
+ throw new Error('tls_renewal_pending');
242
+ }
243
+ const certificate = validateAgentCertificate((await smallJson(response)).certificate);
244
+ if (!samePublicKey(agent.tls.certificate, certificate))
245
+ throw new Error('tls_renewal_key_changed');
246
+ let staged = false;
247
+ await this.store.update(state => ({ ...state, agents: state.agents.map(item => {
248
+ if (item.id !== agent.id || item.token !== agent.token || item.url !== agent.url || item.transport !== 'direct'
249
+ || item.tls?.certificate !== agent.tls.certificate || item.tls.nextCertificate)
250
+ return item;
251
+ staged = true;
252
+ return { ...item, tls: { ...item.tls, nextCertificate: certificate } };
253
+ }) }), { flush: 'durable' });
254
+ if (!staged)
255
+ return;
256
+ current = { ...agent, tls: { ...agent.tls, nextCertificate: certificate } };
257
+ }
258
+ const certificate = current.tls.nextCertificate;
259
+ const response = await agentFetch(current, `${current.url}/api/agent/direct-tls/activate`, {
260
+ method: 'POST', headers: { authorization: `Bearer ${current.token}`, 'content-type': 'application/json' },
261
+ body: JSON.stringify({ certificate }),
262
+ signal: AbortSignal.any([this.controller.signal, AbortSignal.timeout(10_000)])
263
+ });
264
+ await response.body?.cancel();
265
+ if (!response.ok)
266
+ throw new Error('tls_activation_pending');
267
+ const next = { ...current, tls: { certificate, confirmed: true } };
268
+ if (!await probeDirectTls(next))
269
+ throw new Error('tls_renewed_probe_failed');
270
+ await this.store.update(state => ({ ...state, agents: state.agents.map(item => item.id === current.id && item.token === current.token && item.url === current.url && item.transport === 'direct'
271
+ && item.tls?.certificate === current.tls.certificate && item.tls.nextCertificate === certificate
272
+ ? { ...item, tls: next.tls } : item) }), { flush: 'durable' });
273
+ }
274
+ async migrate(agent, mainUrl) {
275
+ if (!agent.url)
276
+ return;
277
+ if (!agent.tls) {
278
+ const url = new URL(agent.url);
279
+ const port = url.port || '80';
280
+ url.protocol = 'https:';
281
+ url.port = port;
282
+ const bootstrap = { mainUrl: httpsOrigin(mainUrl), url: url.origin,
283
+ nonce: randomBytes(32).toString('hex'), expiresAt: Date.now() + 5 * 60_000 };
284
+ let current = false;
285
+ await this.store.update(state => ({ ...state, agents: state.agents.map(item => {
286
+ if (item.id !== agent.id || item.token !== agent.token || item.url !== agent.url || item.tls || item.transport !== 'direct')
287
+ return item;
288
+ current = true;
289
+ return { ...item, tlsBootstrap: bootstrap };
290
+ }) }), { flush: 'durable' });
291
+ if (!current || this.stopped && this.controller.signal.aborted)
292
+ return;
293
+ const signed = { ...bootstrap, agentId: agent.id };
294
+ const response = await agentFetch({ ...agent, url: agent.url }, `${agent.url}/api/agent/direct-tls/prepare`, {
295
+ method: 'POST', headers: { 'content-type': 'application/json' },
296
+ body: JSON.stringify({ ...signed, mac: bootstrapMac(signed, agent.token) }),
297
+ signal: AbortSignal.any([this.controller.signal, AbortSignal.timeout(30_000)])
298
+ });
299
+ await response.body?.cancel();
300
+ if (response.status === 404) {
301
+ this.retryAfter.set(agent.id, Date.now() + 5 * 60_000);
302
+ return; // Old secondary: defer without rewriting a challenge on every scan.
303
+ }
304
+ if (!response.ok)
305
+ throw new Error('tls_bootstrap_pending');
306
+ }
307
+ const latest = (await this.store.read()).agents.find(item => item.id === agent.id);
308
+ if (!latest?.tls || !latest.url || latest.token !== agent.token || latest.transport !== 'direct')
309
+ return;
310
+ const response = await agentFetch({ ...latest, url: latest.url }, `${latest.url}/api/agent/direct-tls/commit`, {
311
+ method: 'POST', headers: { authorization: `Bearer ${latest.token}` },
312
+ signal: AbortSignal.any([this.controller.signal, AbortSignal.timeout(5000)])
313
+ });
314
+ await response.body?.cancel();
315
+ if (!response.ok)
316
+ throw new Error('tls_commit_pending');
317
+ await this.store.update(state => ({ ...state, agents: state.agents.map(item => item.id === latest.id && item.token === latest.token && item.url === latest.url
318
+ && item.tls?.certificate === latest.tls.certificate
319
+ ? { ...item, tls: { ...item.tls, confirmed: true } } : item) }), { flush: 'durable' });
320
+ }
321
+ }
322
+ //# sourceMappingURL=directTlsMigration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directTlsMigration.js","sourceRoot":"","sources":["../../../src/server/agent/directTlsMigration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface DirectTlsBootstrap {
2
+ agentId: string;
3
+ mainUrl: string;
4
+ url: string;
5
+ nonce: string;
6
+ expiresAt: number;
7
+ }
8
+ export declare function httpsOrigin(value: unknown): string;
9
+ export declare function bootstrapMac(value: DirectTlsBootstrap, token: string): string;
10
+ export declare function validateBootstrap(value: unknown, token: string, now?: number): DirectTlsBootstrap;
@@ -0,0 +1,32 @@
1
+ import { createHmac, timingSafeEqual } from 'node:crypto';
2
+ export function httpsOrigin(value) {
3
+ if (typeof value !== 'string' || value.length > 2048)
4
+ throw new Error('invalid_https_origin');
5
+ const url = new URL(value);
6
+ if (url.protocol !== 'https:' || url.username || url.password || url.search || url.hash
7
+ || url.pathname !== '/')
8
+ throw new Error('invalid_https_origin');
9
+ return url.origin;
10
+ }
11
+ export function bootstrapMac(value, token) {
12
+ return createHmac('sha256', token).update(JSON.stringify([
13
+ 'nterminal-direct-tls-v1', value.agentId, value.mainUrl, value.url, value.nonce, value.expiresAt
14
+ ])).digest('hex');
15
+ }
16
+ export function validateBootstrap(value, token, now = Date.now()) {
17
+ if (!value || typeof value !== 'object')
18
+ throw new Error('invalid_bootstrap');
19
+ const data = value;
20
+ if (typeof data.agentId !== 'string' || !/^[a-zA-Z0-9-]{1,80}$/.test(data.agentId)
21
+ || typeof data.nonce !== 'string' || !/^[a-f0-9]{64}$/.test(data.nonce)
22
+ || !Number.isSafeInteger(data.expiresAt) || data.expiresAt <= now || data.expiresAt > now + 10 * 60_000
23
+ || typeof data.mac !== 'string' || !/^[a-f0-9]{64}$/.test(data.mac))
24
+ throw new Error('invalid_bootstrap');
25
+ const result = { agentId: data.agentId, mainUrl: httpsOrigin(data.mainUrl), url: httpsOrigin(data.url),
26
+ nonce: data.nonce, expiresAt: data.expiresAt };
27
+ if (!timingSafeEqual(Buffer.from(data.mac, 'hex'), Buffer.from(bootstrapMac(result, token), 'hex'))) {
28
+ throw new Error('invalid_bootstrap_signature');
29
+ }
30
+ return result;
31
+ }
32
+ //# sourceMappingURL=directTlsProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directTlsProtocol.js","sourceRoot":"","sources":["../../../src/server/agent/directTlsProtocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAU1D,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC9F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI;WAClF,GAAG,CAAC,QAAQ,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACnE,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAyB,EAAE,KAAa;IACnE,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QACvD,yBAAyB,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS;KACjG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,KAAa,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC/E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,KAA+C,CAAC;IAC7D,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;WAC7E,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;WACpE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,GAAG,MAAM;WACpG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC5G,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QACpG,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACjD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QACpG,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import http from 'node:http';
2
+ import type { DirectTlsIdentity } from './directTlsIdentity.js';
3
+ import type { FastifyInstance } from 'fastify';
4
+ export declare function isLoopback(address: string | undefined): boolean;
5
+ export declare function restrictPlaintextAgentRequests(app: FastifyInstance, tlsRequired: () => boolean): void;
6
+ /** A single-port migration listener. HTTP is retained only until durable commit. */
7
+ export declare function directTlsServer(handler: http.RequestListener, identity: DirectTlsIdentity, tlsRequired: () => boolean): http.Server;
@@ -0,0 +1,72 @@
1
+ import http from 'node:http';
2
+ import tls from 'node:tls';
3
+ export function isLoopback(address) {
4
+ return address === '::1' || address === '127.0.0.1' || address === '::ffff:127.0.0.1';
5
+ }
6
+ export function restrictPlaintextAgentRequests(app, tlsRequired) {
7
+ app.addHook('onRequest', async (request, reply) => {
8
+ if (!tlsRequired() || request.raw.socket.encrypted)
9
+ return;
10
+ const health = request.method === 'GET' && request.url === '/api/auth/session' && isLoopback(request.raw.socket.remoteAddress);
11
+ if (!health)
12
+ return reply.code(426).send({ error: 'tls_required' });
13
+ });
14
+ }
15
+ /** A single-port migration listener. HTTP is retained only until durable commit. */
16
+ export function directTlsServer(handler, identity, tlsRequired) {
17
+ const server = http.createServer(handler);
18
+ const httpConnections = server.listeners('connection');
19
+ server.removeAllListeners('connection');
20
+ const pending = new Set();
21
+ const plain = new Set();
22
+ const encrypted = tls.createServer({ key: identity.privateKey, cert: identity.certificate,
23
+ minVersion: 'TLSv1.2', handshakeTimeout: 10_000 }, socket => {
24
+ for (const listener of httpConnections)
25
+ listener.call(server, socket);
26
+ });
27
+ encrypted.on('tlsClientError', (_error, socket) => socket.destroy());
28
+ server.on('direct-tls-renewed', (next) => {
29
+ encrypted.setSecureContext({ key: next.privateKey, cert: next.certificate, minVersion: 'TLSv1.2' });
30
+ });
31
+ server.on('connection', socket => {
32
+ if (pending.size >= 128) {
33
+ socket.destroy();
34
+ return;
35
+ }
36
+ pending.add(socket);
37
+ const timer = setTimeout(() => socket.destroy(), 5000);
38
+ timer.unref();
39
+ const cleanup = () => { clearTimeout(timer); pending.delete(socket); };
40
+ socket.once('close', cleanup);
41
+ socket.once('error', () => socket.destroy());
42
+ socket.once('readable', () => {
43
+ const first = socket.read(1);
44
+ if (!first) {
45
+ socket.destroy();
46
+ return;
47
+ }
48
+ cleanup();
49
+ socket.unshift(first);
50
+ if (first[0] === 22) {
51
+ encrypted.emit('connection', socket);
52
+ }
53
+ else if (!tlsRequired() || isLoopback(socket.remoteAddress)) {
54
+ plain.add(socket);
55
+ socket.once('close', () => plain.delete(socket));
56
+ for (const listener of httpConnections)
57
+ listener.call(server, socket);
58
+ }
59
+ else
60
+ socket.destroy();
61
+ });
62
+ });
63
+ // Existing plaintext WebSockets cannot remain open beyond the cutover.
64
+ server.on('direct-tls-committed', () => {
65
+ for (const socket of plain)
66
+ socket.destroy();
67
+ });
68
+ server.on('close', () => { for (const socket of pending)
69
+ socket.destroy(); });
70
+ return server;
71
+ }
72
+ //# sourceMappingURL=directTlsServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directTlsServer.js","sourceRoot":"","sources":["../../../src/server/agent/directTlsServer.ts"],"names":[],"mappings":"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"}
@@ -69,7 +69,8 @@ export class OutboundAgentRegistry {
69
69
  return agent.url ? { ...agent, url: agent.url } : null;
70
70
  }
71
71
  const connection = this.connections.get(agent.id);
72
- return connection && !connection.closed ? { ...agent, url: connection.endpoint } : null;
72
+ const { tls: _tls, tlsBootstrap: _bootstrap, ...outbound } = agent;
73
+ return connection && !connection.closed ? { ...outbound, url: connection.endpoint } : null;
73
74
  }
74
75
  status(agentId) {
75
76
  const connection = this.connections.get(agentId);
@@ -1 +1 @@
1
- {"version":3,"file":"outboundAgentRegistry.js","sourceRoot":"","sources":["../../../src/server/agent/outboundAgentRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,GAAiC,MAAM,UAAU,CAAC;AACzD,OAAO,SAAS,MAAM,IAAI,CAAC;AAG3B,OAAO,EAAE,uBAAuB,EAA6B,MAAM,2BAA2B,CAAC;AAgC/F,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,MAAM,OAAO,qBAAqB;IACf,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEnE,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,MAAiB,EAAE,cAAsB;QAC5E,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,UAAU,GAAqB;YACnC,OAAO;YACP,YAAY,EAAE,UAAU,EAAE;YAC1B,OAAO,EAAE,MAAM;YACf,QAAQ;YACR,QAAQ;YACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,cAAc;YACd,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,MAAM,EAAE,IAAI,GAAG,EAAE;YACjB,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QACrF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC,CAAC;QAEzF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1C,IAAI,QAAQ;YAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC;QAC/E,OAAO,UAAU,CAAC,YAAY,CAAC;IACjC,CAAC;IAED,aAAa,CAAC,OAAe,EAAE,YAAoB;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,YAAY,KAAK,YAAY;YAAE,OAAO;QACpE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;IAChE,CAAC;IAED,UAAU,CAAC,OAAe,EAAE,YAAoB,EAAE,QAAgB;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,YAAY,KAAK,YAAY;YAAE,OAAO;QACpE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,wBAAwB,CAAC,OAAe,EAAE,QAAgB,EAAE,MAAqB;QAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,UAAU,IAAI,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,gBAAgB,CAAC,OAAe,EAAE,QAAgB,EAAE,MAAc,EAAE,SAAoB;QACtF,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAErF,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACjE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,KAAkB;QACxB,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACzD,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,OAAO,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM;YACrC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,cAAc,EAAE,UAAU,CAAC,cAAc,EAAE;YACrG,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IACpE,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,UAAU;YAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IACpE,CAAC;IAED,OAAO;QACL,KAAK,MAAM,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,UAA4B,EAAE,WAAmB;QAClE,2EAA2E;QAC3E,6EAA6E;QAC7E,8DAA8D;QAC9D,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;YACjF,WAAW,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QACD,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,kBAAkB,EAAE,CAAC;YAClD,WAAW,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpC,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3E,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YAC7B,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,OAAO,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;gBACpC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACpC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAA+B,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACtF,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC7F,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,UAA4B,EAAE,MAAc;QAClE,IAAI,UAAU,CAAC,MAAM;YAAE,OAAO;QAC9B,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;QACzB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;YAC5D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC5B,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAClD,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM;YAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACvD,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,OAAO;YAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1D,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;YAC/G,IAAI,CAAC;gBACH,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;gBACxE,OAAO;YACT,CAAC;YACD,OAAO,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAmB,EAAE,KAAa;IAC/D,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC9F,CAAC"}
1
+ {"version":3,"file":"outboundAgentRegistry.js","sourceRoot":"","sources":["../../../src/server/agent/outboundAgentRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AppConfig } from '../config.js';
2
+ import { type DirectTlsIdentity } from './directTlsIdentity.js';
3
+ export declare class SecondaryDirectTls {
4
+ private readonly config;
5
+ private link;
6
+ private readonly filename;
7
+ identity: DirectTlsIdentity;
8
+ private busy;
9
+ private constructor();
10
+ static create(config: AppConfig): Promise<SecondaryDirectTls>;
11
+ get required(): boolean;
12
+ prepare(input: unknown): Promise<void>;
13
+ commit(): Promise<void>;
14
+ stageRenewal(): Promise<string>;
15
+ activateRenewal(certificate: unknown, apply: (identity: DirectTlsIdentity) => void | Promise<void>): Promise<{
16
+ cleanupWarning?: 'tls_renewal_cleanup_failed';
17
+ }>;
18
+ private save;
19
+ }
20
+ export declare function samePublicKey(a: string, b: string): boolean;