@fnndsc/porter 0.5.5 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { type FastifyInstance } from 'fastify';
1
+ import { type FastifyInstance, type FastifyRequest } from 'fastify';
2
2
  import type { PorterConfig } from './config.js';
3
3
  import type { SessionHost, Berth } from './host/sessionHost.js';
4
4
  import { SessionRegistry } from './registry.js';
5
5
  import { type TokenMint } from './cube/auth.js';
6
+ import { DeviceCodes, TokenStore } from './tokens.js';
6
7
  /** What the routes are built over. */
7
8
  export interface PorterAppOptions {
8
9
  /** What this porter ships (brasa, calypso, chell versions); a test names its own. */
@@ -17,14 +18,22 @@ export interface PorterAppOptions {
17
18
  log?: (line: string) => void;
18
19
  /** How often the idle sweep runs, in ms; a minute by default. */
19
20
  sweepMs?: number;
21
+ /** The door's token store; built from the config's file when not given (a test gives its own). */
22
+ tokens?: TokenStore;
23
+ /** The device codes out; fresh when not given. */
24
+ codes?: DeviceCodes;
20
25
  }
21
26
  /** A porter application: the Fastify instance and the registry behind it. */
22
27
  export interface PorterApp {
23
28
  app: FastifyInstance;
24
29
  registry: SessionRegistry;
30
+ /** The door's token store, for the porter's own CLI (`--tokens`, `--revoke`, `--mint`). */
31
+ tokens: TokenStore;
25
32
  /** Adopts the sessions the state directory holds that still answer; called once the door is bound. */
26
33
  adopt: () => Promise<void>;
27
34
  }
35
+ /** The token a request presents as a bearer, or null. */
36
+ export declare function bearer_ofRequest(request: FastifyRequest): string | null;
28
37
  /**
29
38
  * The upstream base for a berth: its `ws://host:port` as `http://`.
30
39
  *
package/dist/app.js CHANGED
@@ -19,6 +19,17 @@
19
19
  * told why and ended, a fresh one boots on the login it saved, and the
20
20
  * browser follows the boot on the greeter (no password asked again).
21
21
  * - `POST /logout` — the cookie is cleared; the session lives on.
22
+ * - Door tokens (`chell auth`): `POST /login` also takes `Authorization:
23
+ * Bearer <token>`, a token the door minted for a human login earlier,
24
+ * and lets its identity in the same way (a session not up boots on the
25
+ * login it saved); a JSON password login carrying `tokenName` is given
26
+ * a fresh token in its answer; a form login carrying a device `code`
27
+ * authorises the chell that asked for it.
28
+ * - `POST /auth/device` — chell asks for a one-time code to show its
29
+ * human; `GET /login?code=…` is the login page saying what it is for;
30
+ * `GET /auth/device/<code>` is chell's poll: pending, then the token
31
+ * once, then unknown. `GET /auth/tokens` lists the identity's tokens
32
+ * by one of them; `DELETE /auth/token` revokes the token in hand.
22
33
  * - `GET /boot/<key>` — the session's boot as it happens, server-sent, one
23
34
  * event per line the daemon wrote, ending with `ready` or `failed`.
24
35
  * - `/s/<key>/…` — the session itself: the argus page and its assets, the
@@ -49,12 +60,27 @@ import { cubeToken_mint } from './cube/auth.js';
49
60
  import { readFileSync } from 'node:fs';
50
61
  import { fileURLToPath } from 'node:url';
51
62
  import { DOOR_COOKIE, doorCookie_options } from './door.js';
52
- import { loginPage_render, greetPage_render } from './greeter.js';
63
+ import { loginPage_render, greetPage_render, authorisedPage_render } from './greeter.js';
64
+ import { DeviceCodes, TokenStore, token_looksLike } from './tokens.js';
53
65
  import { idleSweep_run } from './sweep.js';
54
66
  const loginSchema = z.object({
55
67
  username: z.string().min(1),
56
68
  password: z.string().min(1),
69
+ /** A JSON caller asking for a door token with this name, beside its session. */
70
+ tokenName: z.string().min(1).max(80).optional(),
71
+ /** A device code the login authorises, carried by the page variant. */
72
+ code: z.string().min(1).max(20).optional(),
57
73
  });
74
+ const deviceSchema = z.object({
75
+ /** Where the chell asking for the code runs, for the page and the token's name. */
76
+ host: z.string().min(1).max(120),
77
+ });
78
+ /** The token a request presents as a bearer, or null. */
79
+ export function bearer_ofRequest(request) {
80
+ const header = String(request.headers.authorization ?? '');
81
+ const match = /^Bearer\s+(\S+)$/i.exec(header);
82
+ return match === null ? null : match[1];
83
+ }
58
84
  /**
59
85
  * The upstream base for a berth: its `ws://host:port` as `http://`.
60
86
  *
@@ -178,6 +204,9 @@ export async function porterApp_build(options) {
178
204
  const installed = options.installed ?? installed_read();
179
205
  const mint = options.mint ?? cubeToken_mint;
180
206
  const registry = new SessionRegistry();
207
+ const tokens = options.tokens ?? new TokenStore(config.tokensFile, config.tokenDays);
208
+ tokens.load();
209
+ const codes = options.codes ?? new DeviceCodes();
181
210
  const app = Fastify({ logger: options.logger ?? false, trustProxy: true });
182
211
  // A porter restarted adopts the sessions its predecessor started: their
183
212
  // berths are in the state directory, and a cookie that names one still
@@ -230,26 +259,183 @@ export async function porterApp_build(options) {
230
259
  await reply.redirect(entry === null ? '/login' : `/s/${entry.key}/?door`, 302);
231
260
  });
232
261
  app.get('/login', async (request, reply) => {
262
+ const query = request.query;
263
+ const reason = typeof query.reason === 'string' && query.reason.length > 0 ? query.reason : null;
264
+ void reply.type('text/html; charset=utf-8');
265
+ if (typeof query.code === 'string' && query.code.length > 0) {
266
+ // The device-code variant: the same door, saying which chell it is for.
267
+ const host = codes.host_of(query.code);
268
+ if (host === null)
269
+ return loginPage_render(config.cubeUrl, `the code ${query.code} is not waiting (ten minutes, once); run chell auth login again`);
270
+ return loginPage_render(config.cubeUrl, reason, { code: query.code, host });
271
+ }
272
+ return loginPage_render(config.cubeUrl, reason);
273
+ });
274
+ // Where a human types the code chell showed: the login page with a code field.
275
+ app.get('/device', async (request, reply) => {
233
276
  const reason = request.query.reason;
234
277
  void reply.type('text/html; charset=utf-8');
235
- return loginPage_render(config.cubeUrl, typeof reason === 'string' && reason.length > 0 ? reason : null);
278
+ return loginPage_render(config.cubeUrl, typeof reason === 'string' && reason.length > 0 ? reason : null, 'ask');
279
+ });
280
+ app.post('/auth/device', async (request, reply) => {
281
+ const parsed = deviceSchema.safeParse(request.body);
282
+ if (!parsed.success)
283
+ return reply.code(400).send({ error: 'the host chell runs on is required' });
284
+ const issued = codes.issue(parsed.data.host);
285
+ return { code: issued.code, expires: issued.expires, url: '/device' };
286
+ });
287
+ /** The token a self-service route is called with, checked; or the refusal sent. */
288
+ const bearer_check = async (request, reply) => {
289
+ const bearer = bearer_ofRequest(request);
290
+ if (bearer === null || !token_looksLike(bearer)) {
291
+ await reply.code(401).send({ error: 'a door token is required (Authorization: Bearer …)' });
292
+ return null;
293
+ }
294
+ const checked = tokens.check(bearer);
295
+ if (!checked.ok) {
296
+ await reply.code(401).send({ error: checked.why === 'expired' ? `the door token "${checked.record.name}" expired on ${checked.record.expires.slice(0, 10)}` : 'the door does not know that token' });
297
+ return null;
298
+ }
299
+ return checked.record;
300
+ };
301
+ // This identity's tokens, by a token of its own: `chell auth tokens`.
302
+ app.get('/auth/tokens', async (request, reply) => {
303
+ const holder = await bearer_check(request, reply);
304
+ if (holder === null)
305
+ return reply;
306
+ return {
307
+ user: holder.user,
308
+ tokens: tokens.list().filter((token) => token.identity === holder.identity).map((token) => ({ name: token.name, created: token.created, expires: token.expires, lastUsed: token.lastUsed })),
309
+ };
310
+ });
311
+ // The token in hand ends itself: `chell auth logout`.
312
+ app.delete('/auth/token', async (request, reply) => {
313
+ const holder = await bearer_check(request, reply);
314
+ if (holder === null)
315
+ return reply;
316
+ tokens.revoke(holder.user, holder.name);
317
+ options.log?.(`${holder.user} revoked their door token "${holder.name}"`);
318
+ return { revoked: true, name: holder.name };
319
+ });
320
+ app.get('/auth/device/:code', async (request, reply) => {
321
+ const code = request.params.code;
322
+ const taken = codes.take(code);
323
+ if (taken.state === 'unknown')
324
+ return reply.code(404).send({ state: 'unknown' });
325
+ if (taken.state === 'pending')
326
+ return { state: 'pending' };
327
+ return { state: 'authorised', ...taken.grant };
236
328
  });
237
329
  app.post('/login', async (request, reply) => {
238
330
  const wantsJson = request_wantsJson(request);
239
- const refuse = async (status, reason) => wantsJson ? reply.code(status).send({ error: reason }) : reply.redirect(`/login?reason=${encodeURIComponent(reason)}`, 303);
240
- const parsed = loginSchema.safeParse(request.body);
241
- if (!parsed.success) {
242
- return refuse(400, 'a username and a password are required');
331
+ // A form that carried a device code goes back to the page with the code
332
+ // field, so a mistyped password or code is tried again where it was typed.
333
+ const fromDevice = typeof request.body?.code === 'string';
334
+ const refuse = async (status, reason) => wantsJson ? reply.code(status).send({ error: reason }) : reply.redirect(`/${fromDevice ? 'device' : 'login'}?reason=${encodeURIComponent(reason)}`, 303);
335
+ // A script's way in: a door token minted for a human login earlier.
336
+ // Checked before any body, so a token never travels beside a password.
337
+ const bearer = bearer_ofRequest(request);
338
+ let username;
339
+ let cubeToken;
340
+ let byToken = null;
341
+ let wanted = {};
342
+ if (bearer !== null) {
343
+ if (!token_looksLike(bearer))
344
+ return refuse(401, 'that is not a door token');
345
+ const checked = tokens.check(bearer);
346
+ if (!checked.ok) {
347
+ if (checked.why === 'expired') {
348
+ options.log?.(`refused ${checked.record.user}'s door token "${checked.record.name}": it expired on ${checked.record.expires.slice(0, 10)}`);
349
+ return refuse(401, `the door token "${checked.record.name}" expired on ${checked.record.expires.slice(0, 10)}; run chell auth login`);
350
+ }
351
+ options.log?.('refused a door token nobody holds (revoked, or never minted here)');
352
+ return refuse(401, 'the door does not know that token (revoked, or minted elsewhere); run chell auth login');
353
+ }
354
+ byToken = checked.record;
355
+ tokens.touch(byToken);
356
+ username = byToken.user;
357
+ cubeToken = null;
243
358
  }
244
- const { username, password } = parsed.data;
245
- const minted = await mint(config.cubeUrl, username, password);
246
- if (minted.token === null) {
247
- return refuse(401, minted.reason ?? 'refused');
359
+ else {
360
+ const parsed = loginSchema.safeParse(request.body);
361
+ if (!parsed.success) {
362
+ return refuse(400, 'a username and a password are required');
363
+ }
364
+ username = parsed.data.username;
365
+ wanted = { ...(parsed.data.tokenName === undefined ? {} : { tokenName: parsed.data.tokenName }), ...(parsed.data.code === undefined ? {} : { code: parsed.data.code }) };
366
+ const minted = await mint(config.cubeUrl, username, parsed.data.password);
367
+ if (minted.token === null) {
368
+ return refuse(401, minted.reason ?? 'refused');
369
+ }
370
+ cubeToken = minted.token;
248
371
  }
249
372
  const identity = identity_normalise(username, config.cubeUrl);
373
+ // A device code: the human came to authorise a chell, not to open a
374
+ // session here. The token is minted, handed to the waiting poll, and
375
+ // the browser is told it can go.
376
+ if (wanted.code !== undefined) {
377
+ const forHost = codes.host_of(wanted.code);
378
+ if (forHost === null)
379
+ return refuse(410, `the code ${wanted.code} is not waiting (ten minutes, once); run chell auth login again`);
380
+ const name = `${username}@${forHost}`;
381
+ const made = tokens.mint(identity, username, name);
382
+ const grant = { token: made.token, user: username, name, expires: made.record.expires };
383
+ codes.authorise(wanted.code, grant);
384
+ options.log?.(`minted a door token "${name}" for ${username} by device code (dies ${made.record.expires.slice(0, 10)})`);
385
+ // A token boots a session on the login the session saved. A human who
386
+ // never came through before has none, so this login, which holds a
387
+ // fresh CUBE token, starts the session now; chell's first call then
388
+ // finds it up or booting (found live: a first-ever device login left
389
+ // `chell -c` failing with "no token is saved for this identity").
390
+ if (cubeToken !== null && (await host.find(identity)) === null) {
391
+ const booting = host.boot_follow(identity, { line: () => undefined, done: () => undefined });
392
+ booting?.release();
393
+ if (booting === null || booting.report.state !== 'booting') {
394
+ registry.pending_note(identity, username);
395
+ host.spawn_begin(identity, username, config.cubeUrl, cubeToken);
396
+ options.log?.(`starting a session for ${username} beside the device login`);
397
+ }
398
+ }
399
+ if (wantsJson)
400
+ return { authorised: true, name, expires: made.record.expires };
401
+ void reply.type('text/html; charset=utf-8');
402
+ return authorisedPage_render(config.cubeUrl, forHost, name, made.record.expires);
403
+ }
404
+ // A password login asking for a token beside its session.
405
+ let granted = null;
406
+ if (wanted.tokenName !== undefined) {
407
+ const made = tokens.mint(identity, username, wanted.tokenName);
408
+ granted = { token: made.token, name: wanted.tokenName, expires: made.record.expires };
409
+ options.log?.(`minted a door token "${wanted.tokenName}" for ${username} (dies ${made.record.expires.slice(0, 10)})`);
410
+ }
411
+ // The answer carries the grant a password login asked for, or, on a
412
+ // token login, whose token it was: a pasted token becomes a whole door file.
413
+ const answer = (body) => {
414
+ if (granted !== null)
415
+ return { ...body, token: granted };
416
+ if (byToken !== null)
417
+ return { ...body, user: byToken.user, tokenName: byToken.name, expires: byToken.expires };
418
+ return body;
419
+ };
250
420
  const found = await host.find(identity);
251
421
  const key = registry.key_of(identity);
252
422
  void reply.setCookie(DOOR_COOKIE, key, doorCookie_options(config.cookieHours, request.protocol === 'https'));
423
+ if (byToken !== null)
424
+ options.log?.(`${username} came through by door token "${byToken.name}"`);
425
+ // A boot already under way is joined, never restarted: two scripts
426
+ // arriving together, or a browser and a script, would otherwise take
427
+ // turns killing each other's boot and nobody would ever get in.
428
+ if (found === null) {
429
+ const booting = host.boot_follow(identity, { line: () => undefined, done: () => undefined });
430
+ if (booting !== null) {
431
+ booting.release();
432
+ if (booting.report.state === 'booting') {
433
+ registry.pending_note(identity, username);
434
+ options.log?.(`${username} joins the boot already under way`);
435
+ return wantsJson ? answer({ key, mount: `/s/${key}/`, state: 'starting' }) : reply.redirect(`/greet/${key}`, 303);
436
+ }
437
+ }
438
+ }
253
439
  // A login never lands on a kernel older than the door's: a session whose
254
440
  // daemon runs code this porter no longer ships is ended here and boots
255
441
  // afresh on the way in, its saved state kept.
@@ -262,21 +448,30 @@ export async function porterApp_build(options) {
262
448
  options.log?.(`restarting ${username}'s session for the new release (${behind.join(', ')})`);
263
449
  registry.pending_note(identity, username);
264
450
  host.restart_begin(identity, username, config.cubeUrl);
265
- return wantsJson ? { key, mount: `/s/${key}/`, state: 'starting' } : reply.redirect(`/greet/${key}`, 303);
451
+ return wantsJson ? answer({ key, mount: `/s/${key}/`, state: 'starting' }) : reply.redirect(`/greet/${key}`, 303);
266
452
  }
267
453
  }
268
454
  if (found !== null) {
269
455
  registry.note(identity, username, found);
270
456
  options.log?.(`attached ${username} to the session up at ${found.url}`);
271
- return wantsJson ? { key, mount: `/s/${key}/`, state: 'attached' } : reply.redirect(`/s/${key}/?door`, 303);
457
+ return wantsJson ? answer({ key, mount: `/s/${key}/`, state: 'attached' }) : reply.redirect(`/s/${key}/?door`, 303);
272
458
  }
273
459
  // The boot is watched, not waited for: the door answers now, and the
274
460
  // greet follows the rows until the berth answers. The berth reaches the
275
461
  // registry when the boot ends, so the mount refuses until then.
276
462
  registry.pending_note(identity, username);
277
- host.spawn_begin(identity, username, config.cubeUrl, minted.token);
278
- options.log?.(`starting a session for ${username}`);
279
- return wantsJson ? { key, mount: `/s/${key}/`, state: 'starting' } : reply.redirect(`/greet/${key}`, 303);
463
+ if (cubeToken === null) {
464
+ // A door token carries no CUBE token: the session boots on the login
465
+ // it saved when a human last came through, as a restart does; a
466
+ // session that never saved one refuses, and says so on the boot.
467
+ host.restart_begin(identity, username, config.cubeUrl);
468
+ options.log?.(`starting a session for ${username} on its saved login`);
469
+ }
470
+ else {
471
+ host.spawn_begin(identity, username, config.cubeUrl, cubeToken);
472
+ options.log?.(`starting a session for ${username}`);
473
+ }
474
+ return wantsJson ? answer({ key, mount: `/s/${key}/`, state: 'starting' }) : reply.redirect(`/greet/${key}`, 303);
280
475
  });
281
476
  app.get('/greet/:key', async (request, reply) => {
282
477
  const key = request.params.key;
@@ -464,6 +659,6 @@ export async function porterApp_build(options) {
464
659
  sweep.unref();
465
660
  app.addHook('onClose', async () => { clearInterval(sweep); });
466
661
  });
467
- return { app, registry, adopt };
662
+ return { app, registry, adopt, tokens };
468
663
  }
469
664
  //# sourceMappingURL=app.js.map
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,OAAyE,MAAM,SAAS,CAAC;AAChG,OAAO,aAAa,EAAE,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,WAAW,EAAe,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,eAAe,EAAqB,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0B3C,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC5B,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAa;IAC5D,MAAM,IAAI,GAAW,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9D,MAAM,GAAG,GAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,KAAK,GAAoB,IAAI,eAAe,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1F,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAC5C,kEAAkE;QAClE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,IAAI,GAAW,KAAK,CAAC,QAAQ,EAAE,CAAC;IACtC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5D,CAAC;AAED,qEAAqE;AACrE,MAAM,WAAW,GAAqC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;AAEhH;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAwB,EAAE,IAAY;IAC7E,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACpC,6EAA6E;IAC7E,MAAM,IAAI,GAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,KAAK,GAA4B,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/F,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,IAAI,GAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAW,CAAW,EAAE,CAAC;IAC3G,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,KAAK,GAA4B,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAA4B,CAAC;IAC3G,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;AACxD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,YAAgC,EAAE,MAAc;IAC7E,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5C,wEAAwE;IACxE,0EAA0E;IAC1E,IAAI,GAAuB,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,SAAS;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,WAAW;YAAE,SAAS;QACxD,IAAI,CAAC;YACH,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM;IACR,CAAC;IACD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAChH,CAAC;AAED,8EAA8E;AAC9E,SAAS,iBAAiB,CAAC,OAAuB;IAChD,MAAM,WAAW,GAAW,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAW,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC5D,OAAO,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5H,CAAC;AAED,0DAA0D;AAC1D,MAAM,aAAa,GAAW,8CAA8C,CAAC;AAE7E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAyB;IAC7D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,SAAS,GAA2B,OAAO,CAAC,SAAS,IAAI,cAAc,EAAE,CAAC;IAChF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,cAAc,CAAC;IAC5C,MAAM,QAAQ,GAAoB,IAAI,eAAe,EAAE,CAAC;IACxD,MAAM,GAAG,GAAoB,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5F,wEAAwE;IACxE,uEAAuE;IACvE,sEAAsE;IACtE,sEAAsE;IACtE,mDAAmD;IACnD,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,KAAK,MAAM,QAAQ,IAAI,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAAE,SAAS;YAC9B,MAAM,IAAI,GAAW,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAChF,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,IAAI,iBAAiB,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC;IACF,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,MAAM,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACpC,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE9B;;;;;;;;;;;OAWG;IACH,MAAM,aAAa,GAAG,KAAK,EAAE,KAAmB,EAAsC,EAAE;QACtF,MAAM,KAAK,GAAiB,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,iBAAiB,KAAK,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,CAAC;YAClF,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG;YAAE,OAAO,MAAM,CAAC;QACjD,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,yBAAyB,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACvF,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,mDAAmD;IACnD,MAAM,aAAa,GAAG,CAAC,OAAuB,EAAiB,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAExH,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,IAA2D,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE9J,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAiB,EAAE;QACjF,MAAM,GAAG,GAAkB,aAAa,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAwB,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3E,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAmB,EAAE;QACxF,MAAM,MAAM,GAAa,OAAO,CAAC,KAA8B,CAAC,MAAM,CAAC;QACvE,KAAK,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC5C,OAAO,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAoB,EAAE;QAC1F,MAAM,SAAS,GAAY,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,KAAK,EAAE,MAAc,EAAE,MAAc,EAAoB,EAAE,CACxE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9H,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC,GAAG,EAAE,wCAAwC,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QAC3C,MAAM,MAAM,GAAc,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,QAAQ,GAAW,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,KAAK,GAAiB,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,GAAG,GAAW,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,KAAK,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;QAC7G,yEAAyE;QACzE,uEAAuE;QACvE,8CAA8C;QAC9C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,MAAM,GAAa,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACxD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,qEAAqE;gBACrE,oEAAoE;gBACpE,+BAA+B;gBAC/B,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,QAAQ,mCAAmC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7F,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC1C,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACvD,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;YAC5G,CAAC;QACH,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,QAAQ,yBAAyB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YACxE,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9G,CAAC;QACD,qEAAqE;QACrE,wEAAwE;QACxE,gEAAgE;QAChE,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,EAAE,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAoB,EAAE;QAC9F,MAAM,GAAG,GAAY,OAAO,CAAC,MAA0B,CAAC,GAAG,CAAC;QAC5D,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC5C,OAAO,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,cAAc,GAAqD;QACvE,UAAU,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;QAC9I,SAAS,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;QAC7I,oDAAoD;QACpD,aAAa,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE;KAC9D,CAAC;IACF,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAoB,EAAE;QACjG,MAAM,IAAI,GAAY,OAAO,CAAC,MAA2B,CAAC,IAAI,CAAC;QAC/D,MAAM,MAAM,GAAiD,cAAc,CAAC,IAAI,CAAC,CAAC;QAClF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,+CAA+C;IAC/C,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAoB,EAAE;QAC5F,MAAM,SAAS,GAAY,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,GAAG,GAAkB,aAAa,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAwB,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3E,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YACzE,mEAAmE;YACnE,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;QACjH,CAAC;QACD,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACjI,CAAC;QACD,sEAAsE;QACtE,mDAAmD;QACnD,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,KAAK,CAAC,IAAI,sCAAsC,CAAC,CAAC;QAC9E,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IACjH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAoB,EAAE;QAC3F,KAAK,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAiB,EAAE;QAC1F,MAAM,GAAG,GAAY,OAAO,CAAC,MAA0B,CAAC,GAAG,CAAC;QAC5D,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YACnC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAkB,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACvB,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,YAAY;SACzB,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,IAAa,EAAQ,EAAE;YACvD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvE,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC1C,IAAI,EAAE,CAAC,IAAc,EAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC;YACxD,IAAI,EAAE,CAAC,KAAyB,EAAE,MAAe,EAAQ,EAAE;gBACzD,KAAK,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAS,EAAE;oBACnD,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;oBAC9C,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBAClB,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,iEAAiE;YACjE,mEAAmE;YACnE,UAAU,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK;YAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnE,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACtC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YAC9E,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAS,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,iEAAiE;IACjE,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAoB,EAAE;QAC5F,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,KAAK,GAAwB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,0EAA0E;QAC1E,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrH,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACnE,WAAW,EAAE,GAAW,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;YACpD,qEAAqE;YACrE,iEAAiE;YACjE,OAAO,EAAE,CAAC,OAAgB,EAAE,KAAuB,EAAQ,EAAE;gBAC3D,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAkC,EAAQ,EAAE;oBAC1E,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;wBACxB,KAAK,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACxC,CAAC;yBAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;wBAC9B,KAAK,KAAK,CAAC,QAAQ,CAAC,iBAAiB,kBAAkB,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBACjF,CAAC;yBAAM,CAAC;wBACN,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+BAA+B,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC7F,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAiB,EAAE;QACvF,sEAAsE;QACtE,wCAAwC;QACxC,MAAM,GAAG,GAAY,OAAO,CAAC,MAA0B,CAAC,GAAG,CAAC;QAC5D,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,6DAA6D;IAC7D,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAmB,EAAE;QAC/C,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAwB,EAAE,MAAc,EAAE,IAAY,EAAQ,EAAE;YACxF,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;YACjD,MAAM,KAAK,GAAwB,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnF,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC5G,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7C,qEAAqE;YACrE,2CAA2C;YAC3C,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClC,IAAI,OAAO,GAAY,IAAI,CAAC;YAC5B,MAAM,YAAY,GAAG,GAAS,EAAE;gBAC9B,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACrB,OAAO,GAAG,KAAK,CAAC;gBAChB,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAW,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAS,EAAE;gBACpF,MAAM,IAAI,GAAW,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,KAAK,GAAa,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,IAAI,IAAI,WAAW,CAAC,CAAC;gBACxE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5D,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;gBAClF,CAAC;gBACD,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAChD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;oBAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAS,EAAE;gBAC9B,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,iEAAiE;gBACjE,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAS,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,mEAAmE;QACnE,MAAM,MAAM,GAAW,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QACpD,MAAM,KAAK,GAAmB,WAAW,CAAC,GAAS,EAAE;YACnD,KAAK,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,GAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACrF,CAAC,EAAE,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;QAC9B,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAmB,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -18,6 +18,10 @@ export interface PorterConfig {
18
18
  cookieHours: number;
19
19
  /** How long a session may stand with no surface on it before it is ended, in hours. */
20
20
  idleHours: number;
21
+ /** How long a door token lives from its minting, in days; a fixed horizon, never slid. */
22
+ tokenDays: number;
23
+ /** The door's token store: hashes and names, mode 0600, in the porter's own state. */
24
+ tokensFile: string;
21
25
  /**
22
26
  * A folder of sounds served in place of the page's own (`sounds/<name>`),
23
27
  * when the deployment has them: the original LCARS beeps, which may not
@@ -36,9 +40,20 @@ export interface PorterEnv {
36
40
  PORTER_SECRET?: string;
37
41
  PORTER_COOKIE_HOURS?: string;
38
42
  PORTER_IDLE_HOURS?: string;
43
+ PORTER_TOKEN_DAYS?: string;
44
+ PORTER_TOKENS_FILE?: string;
39
45
  PORTER_SOUNDS_DIR?: string;
40
46
  XDG_STATE_HOME?: string;
41
47
  }
48
+ /**
49
+ * Where the door's token store is: `PORTER_TOKENS_FILE`, else beside the
50
+ * session directories (which the adopt scan skips as a file). The CLI's
51
+ * token verbs resolve it the same way the serving porter does.
52
+ *
53
+ * @param env - The environment.
54
+ * @returns The file's path.
55
+ */
56
+ export declare function porterTokensFile_resolve(env: PorterEnv): string;
42
57
  /** The port a porter takes when told none. */
43
58
  export declare const PORTER_DEFAULT_PORT: number;
44
59
  /**
@@ -54,6 +69,8 @@ export declare const PORTER_DEFAULT_COOKIE_HOURS: number;
54
69
  * boots warm from it.
55
70
  */
56
71
  export declare const PORTER_DEFAULT_IDLE_HOURS: number;
72
+ /** How long a door token lives when the operator set nothing: a month, then a human logs in again. */
73
+ export declare const PORTER_DEFAULT_TOKEN_DAYS: number;
57
74
  /**
58
75
  * Finds the chell this porter will start sessions with: the one installed
59
76
  * beside it, by the package's own entry.
package/dist/config.js CHANGED
@@ -13,6 +13,17 @@ import { createRequire } from 'node:module';
13
13
  import { randomBytes } from 'node:crypto';
14
14
  import { homedir } from 'node:os';
15
15
  import { join } from 'node:path';
16
+ /**
17
+ * Where the door's token store is: `PORTER_TOKENS_FILE`, else beside the
18
+ * session directories (which the adopt scan skips as a file). The CLI's
19
+ * token verbs resolve it the same way the serving porter does.
20
+ *
21
+ * @param env - The environment.
22
+ * @returns The file's path.
23
+ */
24
+ export function porterTokensFile_resolve(env) {
25
+ return env.PORTER_TOKENS_FILE !== undefined && env.PORTER_TOKENS_FILE.length > 0 ? env.PORTER_TOKENS_FILE : join(porterStateDir_resolve(env), 'tokens.json');
26
+ }
16
27
  /** The port a porter takes when told none. */
17
28
  export const PORTER_DEFAULT_PORT = 4180;
18
29
  /**
@@ -28,6 +39,8 @@ export const PORTER_DEFAULT_COOKIE_HOURS = 24;
28
39
  * boots warm from it.
29
40
  */
30
41
  export const PORTER_DEFAULT_IDLE_HOURS = 24;
42
+ /** How long a door token lives when the operator set nothing: a month, then a human logs in again. */
43
+ export const PORTER_DEFAULT_TOKEN_DAYS = 30;
31
44
  /**
32
45
  * Finds the chell this porter will start sessions with: the one installed
33
46
  * beside it, by the package's own entry.
@@ -87,6 +100,12 @@ export function porterConfig_resolve(env, locateChell = chellEntry_locate) {
87
100
  if (!Number.isFinite(idleHours) || idleHours <= 0) {
88
101
  throw new Error(`PORTER_IDLE_HOURS is not a span of hours: ${idleText}`);
89
102
  }
103
+ const daysText = env.PORTER_TOKEN_DAYS ?? String(PORTER_DEFAULT_TOKEN_DAYS);
104
+ const tokenDays = Number(daysText);
105
+ if (!Number.isFinite(tokenDays) || tokenDays <= 0) {
106
+ throw new Error(`PORTER_TOKEN_DAYS is not a span of days: ${daysText}`);
107
+ }
108
+ const stateDir = porterStateDir_resolve(env);
90
109
  // A secret nobody set is made up here: the door still works, but every
91
110
  // browser is asked again when this porter restarts. Said out loud at start.
92
111
  const secretGiven = env.PORTER_SECRET !== undefined && env.PORTER_SECRET.length >= 20;
@@ -95,7 +114,7 @@ export function porterConfig_resolve(env, locateChell = chellEntry_locate) {
95
114
  }
96
115
  return {
97
116
  cubeUrl: cubeUrl.endsWith('/') ? cubeUrl : `${cubeUrl}/`,
98
- stateDir: porterStateDir_resolve(env),
117
+ stateDir,
99
118
  host: env.PORTER_HOST ?? '127.0.0.1',
100
119
  port,
101
120
  chellEntry: env.PORTER_CHELL ?? locateChell(),
@@ -103,6 +122,9 @@ export function porterConfig_resolve(env, locateChell = chellEntry_locate) {
103
122
  secretGenerated: !secretGiven,
104
123
  cookieHours,
105
124
  idleHours,
125
+ tokenDays,
126
+ // Beside the session directories, which the adopt scan skips as a file.
127
+ tokensFile: porterTokensFile_resolve(env),
106
128
  soundsDir: env.PORTER_SOUNDS_DIR !== undefined && env.PORTER_SOUNDS_DIR.length > 0 ? env.PORTER_SOUNDS_DIR : null,
107
129
  };
108
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/greeter.d.ts CHANGED
@@ -34,7 +34,21 @@ export declare function attribute_escape(text: string): string;
34
34
  * @param reason - Why the last try was refused, when it was.
35
35
  * @returns The page.
36
36
  */
37
- export declare function loginPage_render(cubeUrl: string, reason: string | null): string;
37
+ export declare function loginPage_render(cubeUrl: string, reason: string | null, authorise?: {
38
+ code: string;
39
+ host: string;
40
+ } | 'ask' | null): string;
41
+ /**
42
+ * The page after a device code was authorised: chell has its token, the
43
+ * browser was only here to say so.
44
+ *
45
+ * @param cubeUrl - The CUBE the door serves.
46
+ * @param host - Where chell runs.
47
+ * @param name - The token's name.
48
+ * @param expires - ISO time the token dies.
49
+ * @returns The page.
50
+ */
51
+ export declare function authorisedPage_render(cubeUrl: string, host: string, name: string, expires: string): string;
38
52
  /**
39
53
  * The greet: the brain awake, the boot rows arriving, the hand-off.
40
54
  *