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.
- package/README.md +1 -1
- package/dist/client/assets/MarkdownPreview-DiD5zTx6.js +1 -0
- package/dist/client/assets/{TranscriptMarkdownBody-BAkL6ovK.js → TranscriptMarkdownBody-CcknjOWW.js} +1 -1
- package/dist/client/assets/{index-DLFQwECZ.js → index-B4ZOdvVw.js} +1 -1
- package/dist/client/assets/index-BiIblEKQ.js +59 -0
- package/dist/client/index.html +1 -1
- package/dist/scripts/onboarding.js +321 -135
- package/dist/scripts/onboarding.js.map +1 -1
- package/dist/server/accounts/accountService.d.ts +4 -0
- package/dist/server/accounts/accountService.js +102 -9
- package/dist/server/accounts/accountService.js.map +1 -1
- package/dist/server/agent/agentProxy.js +4 -1
- package/dist/server/agent/agentProxy.js.map +1 -1
- package/dist/server/agent/agentRoutes.js +5 -0
- package/dist/server/agent/agentRoutes.js.map +1 -1
- package/dist/server/agent/agentTransport.d.ts +11 -0
- package/dist/server/agent/agentTransport.js +117 -0
- package/dist/server/agent/agentTransport.js.map +1 -0
- package/dist/server/agent/agentWebSocketProxy.js +3 -0
- package/dist/server/agent/agentWebSocketProxy.js.map +1 -1
- package/dist/server/agent/directTlsIdentity.d.ts +39 -0
- package/dist/server/agent/directTlsIdentity.js +534 -0
- package/dist/server/agent/directTlsIdentity.js.map +1 -0
- package/dist/server/agent/directTlsMigration.d.ts +25 -0
- package/dist/server/agent/directTlsMigration.js +322 -0
- package/dist/server/agent/directTlsMigration.js.map +1 -0
- package/dist/server/agent/directTlsProtocol.d.ts +10 -0
- package/dist/server/agent/directTlsProtocol.js +32 -0
- package/dist/server/agent/directTlsProtocol.js.map +1 -0
- package/dist/server/agent/directTlsServer.d.ts +7 -0
- package/dist/server/agent/directTlsServer.js +72 -0
- package/dist/server/agent/directTlsServer.js.map +1 -0
- package/dist/server/agent/outboundAgentRegistry.js +2 -1
- package/dist/server/agent/outboundAgentRegistry.js.map +1 -1
- package/dist/server/agent/secondaryDirectTls.d.ts +20 -0
- package/dist/server/agent/secondaryDirectTls.js +143 -0
- package/dist/server/agent/secondaryDirectTls.js.map +1 -0
- package/dist/server/config.d.ts +1 -0
- package/dist/server/config.js +1 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/hooks/hookInstallation.d.ts +2 -0
- package/dist/server/hooks/hookInstallation.js +42 -17
- package/dist/server/hooks/hookInstallation.js.map +1 -1
- package/dist/server/hooks/verifiedLock.js +96 -2
- package/dist/server/hooks/verifiedLock.js.map +1 -1
- package/dist/server/http.d.ts +2 -0
- package/dist/server/http.js +9 -1
- package/dist/server/http.js.map +1 -1
- package/dist/server/index.js +26 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/notifications/agentCompletionMonitor.js +4 -2
- package/dist/server/notifications/agentCompletionMonitor.js.map +1 -1
- package/dist/server/routes/agentManagementRoutes.js +73 -7
- package/dist/server/routes/agentManagementRoutes.js.map +1 -1
- package/dist/server/routes/terminalWebSocket.js +6 -0
- package/dist/server/routes/terminalWebSocket.js.map +1 -1
- package/dist/server/storage/fileStore.d.ts +12 -1
- package/dist/server/storage/fileStore.js +30 -6
- package/dist/server/storage/fileStore.js.map +1 -1
- package/dist/server/terminal/PtyAdapter.d.ts +1 -0
- package/dist/server/terminal/PtyAdapter.js.map +1 -1
- package/dist/server/terminal/TerminalManager.d.ts +2 -0
- package/dist/server/terminal/TerminalManager.js +32 -0
- package/dist/server/terminal/TerminalManager.js.map +1 -1
- package/dist/server/terminal/TmuxPtyAdapter.js +32 -1
- package/dist/server/terminal/TmuxPtyAdapter.js.map +1 -1
- package/dist/server/update/packageUpdate.d.ts +1 -0
- package/dist/server/update/packageUpdate.js +54 -3
- package/dist/server/update/packageUpdate.js.map +1 -1
- package/dist/shared/protocol.d.ts +7 -0
- package/dist/shared/protocol.js +3 -0
- package/dist/shared/protocol.js.map +1 -1
- package/dist/shared/types.d.ts +1 -0
- package/docs/onboarding.md +58 -5
- package/docs/provider-hooks.md +24 -3
- package/package.json +5 -4
- package/scripts/nterminalctl +30 -3
- package/dist/client/assets/MarkdownPreview-8vEkrQtk.js +0 -1
- 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
|
-
|
|
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":"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
|
|
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,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC;QACnE,OAAO,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,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"}
|
|
@@ -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;
|