@fnndsc/porter 0.5.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,50 +259,196 @@ 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) => {
233
- const reason = request.query.reason;
262
+ const query = request.query;
263
+ const reason = typeof query.reason === 'string' && query.reason.length > 0 ? query.reason : null;
234
264
  void reply.type('text/html; charset=utf-8');
235
- return loginPage_render(config.cubeUrl, typeof reason === 'string' && reason.length > 0 ? reason : null);
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
+ app.post('/auth/device', async (request, reply) => {
275
+ const parsed = deviceSchema.safeParse(request.body);
276
+ if (!parsed.success)
277
+ return reply.code(400).send({ error: 'the host chell runs on is required' });
278
+ const issued = codes.issue(parsed.data.host);
279
+ return { code: issued.code, expires: issued.expires, url: `/login?code=${encodeURIComponent(issued.code)}` };
280
+ });
281
+ /** The token a self-service route is called with, checked; or the refusal sent. */
282
+ const bearer_check = async (request, reply) => {
283
+ const bearer = bearer_ofRequest(request);
284
+ if (bearer === null || !token_looksLike(bearer)) {
285
+ await reply.code(401).send({ error: 'a door token is required (Authorization: Bearer …)' });
286
+ return null;
287
+ }
288
+ const checked = tokens.check(bearer);
289
+ if (!checked.ok) {
290
+ 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' });
291
+ return null;
292
+ }
293
+ return checked.record;
294
+ };
295
+ // This identity's tokens, by a token of its own: `chell auth tokens`.
296
+ app.get('/auth/tokens', async (request, reply) => {
297
+ const holder = await bearer_check(request, reply);
298
+ if (holder === null)
299
+ return reply;
300
+ return {
301
+ user: holder.user,
302
+ tokens: tokens.list().filter((token) => token.identity === holder.identity).map((token) => ({ name: token.name, created: token.created, expires: token.expires, lastUsed: token.lastUsed })),
303
+ };
304
+ });
305
+ // The token in hand ends itself: `chell auth logout`.
306
+ app.delete('/auth/token', async (request, reply) => {
307
+ const holder = await bearer_check(request, reply);
308
+ if (holder === null)
309
+ return reply;
310
+ tokens.revoke(holder.user, holder.name);
311
+ options.log?.(`${holder.user} revoked their door token "${holder.name}"`);
312
+ return { revoked: true, name: holder.name };
313
+ });
314
+ app.get('/auth/device/:code', async (request, reply) => {
315
+ const code = request.params.code;
316
+ const taken = codes.take(code);
317
+ if (taken.state === 'unknown')
318
+ return reply.code(404).send({ state: 'unknown' });
319
+ if (taken.state === 'pending')
320
+ return { state: 'pending' };
321
+ return { state: 'authorised', ...taken.grant };
236
322
  });
237
323
  app.post('/login', async (request, reply) => {
238
324
  const wantsJson = request_wantsJson(request);
239
325
  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');
326
+ // A script's way in: a door token minted for a human login earlier.
327
+ // Checked before any body, so a token never travels beside a password.
328
+ const bearer = bearer_ofRequest(request);
329
+ let username;
330
+ let cubeToken;
331
+ let byToken = null;
332
+ let wanted = {};
333
+ if (bearer !== null) {
334
+ if (!token_looksLike(bearer))
335
+ return refuse(401, 'that is not a door token');
336
+ const checked = tokens.check(bearer);
337
+ if (!checked.ok) {
338
+ if (checked.why === 'expired') {
339
+ options.log?.(`refused ${checked.record.user}'s door token "${checked.record.name}": it expired on ${checked.record.expires.slice(0, 10)}`);
340
+ return refuse(401, `the door token "${checked.record.name}" expired on ${checked.record.expires.slice(0, 10)}; run chell auth login`);
341
+ }
342
+ options.log?.('refused a door token nobody holds (revoked, or never minted here)');
343
+ return refuse(401, 'the door does not know that token (revoked, or minted elsewhere); run chell auth login');
344
+ }
345
+ byToken = checked.record;
346
+ tokens.touch(byToken);
347
+ username = byToken.user;
348
+ cubeToken = null;
243
349
  }
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');
350
+ else {
351
+ const parsed = loginSchema.safeParse(request.body);
352
+ if (!parsed.success) {
353
+ return refuse(400, 'a username and a password are required');
354
+ }
355
+ username = parsed.data.username;
356
+ wanted = { ...(parsed.data.tokenName === undefined ? {} : { tokenName: parsed.data.tokenName }), ...(parsed.data.code === undefined ? {} : { code: parsed.data.code }) };
357
+ const minted = await mint(config.cubeUrl, username, parsed.data.password);
358
+ if (minted.token === null) {
359
+ return refuse(401, minted.reason ?? 'refused');
360
+ }
361
+ cubeToken = minted.token;
248
362
  }
249
363
  const identity = identity_normalise(username, config.cubeUrl);
250
- let found = await host.find(identity);
364
+ // A device code: the human came to authorise a chell, not to open a
365
+ // session here. The token is minted, handed to the waiting poll, and
366
+ // the browser is told it can go.
367
+ if (wanted.code !== undefined) {
368
+ const forHost = codes.host_of(wanted.code);
369
+ if (forHost === null)
370
+ return refuse(410, `the code ${wanted.code} is not waiting (ten minutes, once); run chell auth login again`);
371
+ const name = `${username}@${forHost}`;
372
+ const made = tokens.mint(identity, username, name);
373
+ const grant = { token: made.token, user: username, name, expires: made.record.expires };
374
+ codes.authorise(wanted.code, grant);
375
+ options.log?.(`minted a door token "${name}" for ${username} by device code (dies ${made.record.expires.slice(0, 10)})`);
376
+ if (wantsJson)
377
+ return { authorised: true, name, expires: made.record.expires };
378
+ void reply.type('text/html; charset=utf-8');
379
+ return authorisedPage_render(config.cubeUrl, forHost, name, made.record.expires);
380
+ }
381
+ // A password login asking for a token beside its session.
382
+ let granted = null;
383
+ if (wanted.tokenName !== undefined) {
384
+ const made = tokens.mint(identity, username, wanted.tokenName);
385
+ granted = { token: made.token, name: wanted.tokenName, expires: made.record.expires };
386
+ options.log?.(`minted a door token "${wanted.tokenName}" for ${username} (dies ${made.record.expires.slice(0, 10)})`);
387
+ }
388
+ // The answer carries the grant a password login asked for, or, on a
389
+ // token login, whose token it was: a pasted token becomes a whole door file.
390
+ const answer = (body) => {
391
+ if (granted !== null)
392
+ return { ...body, token: granted };
393
+ if (byToken !== null)
394
+ return { ...body, user: byToken.user, tokenName: byToken.name, expires: byToken.expires };
395
+ return body;
396
+ };
397
+ const found = await host.find(identity);
251
398
  const key = registry.key_of(identity);
252
399
  void reply.setCookie(DOOR_COOKIE, key, doorCookie_options(config.cookieHours, request.protocol === 'https'));
400
+ if (byToken !== null)
401
+ options.log?.(`${username} came through by door token "${byToken.name}"`);
402
+ // A boot already under way is joined, never restarted: two scripts
403
+ // arriving together, or a browser and a script, would otherwise take
404
+ // turns killing each other's boot and nobody would ever get in.
405
+ if (found === null) {
406
+ const booting = host.boot_follow(identity, { line: () => undefined, done: () => undefined });
407
+ if (booting !== null) {
408
+ booting.release();
409
+ if (booting.report.state === 'booting') {
410
+ registry.pending_note(identity, username);
411
+ options.log?.(`${username} joins the boot already under way`);
412
+ return wantsJson ? answer({ key, mount: `/s/${key}/`, state: 'starting' }) : reply.redirect(`/greet/${key}`, 303);
413
+ }
414
+ }
415
+ }
253
416
  // A login never lands on a kernel older than the door's: a session whose
254
417
  // daemon runs code this porter no longer ships is ended here and boots
255
418
  // afresh on the way in, its saved state kept.
256
419
  if (found !== null) {
257
420
  const behind = berth_behind(found, installed);
258
421
  if (behind.length > 0) {
422
+ // The restart the RESTART pill takes: the old daemon is told why and
423
+ // waited out before the new one boots, so the mount never reaches a
424
+ // port that is about to close.
259
425
  options.log?.(`restarting ${username}'s session for the new release (${behind.join(', ')})`);
260
- await host.evict(identity, 'restart');
261
- registry.forget(key);
262
- found = null;
426
+ registry.pending_note(identity, username);
427
+ host.restart_begin(identity, username, config.cubeUrl);
428
+ return wantsJson ? answer({ key, mount: `/s/${key}/`, state: 'starting' }) : reply.redirect(`/greet/${key}`, 303);
263
429
  }
264
430
  }
265
431
  if (found !== null) {
266
432
  registry.note(identity, username, found);
267
433
  options.log?.(`attached ${username} to the session up at ${found.url}`);
268
- return wantsJson ? { key, mount: `/s/${key}/`, state: 'attached' } : reply.redirect(`/s/${key}/?door`, 303);
434
+ return wantsJson ? answer({ key, mount: `/s/${key}/`, state: 'attached' }) : reply.redirect(`/s/${key}/?door`, 303);
269
435
  }
270
436
  // The boot is watched, not waited for: the door answers now, and the
271
437
  // greet follows the rows until the berth answers. The berth reaches the
272
438
  // registry when the boot ends, so the mount refuses until then.
273
439
  registry.pending_note(identity, username);
274
- host.spawn_begin(identity, username, config.cubeUrl, minted.token);
275
- options.log?.(`starting a session for ${username}`);
276
- return wantsJson ? { key, mount: `/s/${key}/`, state: 'starting' } : reply.redirect(`/greet/${key}`, 303);
440
+ if (cubeToken === null) {
441
+ // A door token carries no CUBE token: the session boots on the login
442
+ // it saved when a human last came through, as a restart does; a
443
+ // session that never saved one refuses, and says so on the boot.
444
+ host.restart_begin(identity, username, config.cubeUrl);
445
+ options.log?.(`starting a session for ${username} on its saved login`);
446
+ }
447
+ else {
448
+ host.spawn_begin(identity, username, config.cubeUrl, cubeToken);
449
+ options.log?.(`starting a session for ${username}`);
450
+ }
451
+ return wantsJson ? answer({ key, mount: `/s/${key}/`, state: 'starting' }) : reply.redirect(`/greet/${key}`, 303);
277
452
  });
278
453
  app.get('/greet/:key', async (request, reply) => {
279
454
  const key = request.params.key;
@@ -461,6 +636,6 @@ export async function porterApp_build(options) {
461
636
  sweep.unref();
462
637
  app.addHook('onClose', async () => { clearInterval(sweep); });
463
638
  });
464
- return { app, registry, adopt };
639
+ return { app, registry, adopt, tokens };
465
640
  }
466
641
  //# 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,IAAI,KAAK,GAAiB,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,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,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,QAAQ,mCAAmC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7F,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACtC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,KAAK,GAAG,IAAI,CAAC;YACf,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
+ } | 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
  *
package/dist/greeter.js CHANGED
@@ -85,21 +85,51 @@ ${shell.script}
85
85
  * @param reason - Why the last try was refused, when it was.
86
86
  * @returns The page.
87
87
  */
88
- export function loginPage_render(cubeUrl, reason) {
88
+ export function loginPage_render(cubeUrl, reason, authorise = null) {
89
89
  const notice = reason === null ? '' : `<p class="reason" role="alert">${attribute_escape(reason)}</p>`;
90
+ // The device-code variant: the same login, with what it is for said
91
+ // above it and the code carried along, so the door knows which chell to
92
+ // hand the token to.
93
+ const purpose = authorise === null
94
+ ? ''
95
+ : `<p class="purpose">Authorise <b>chell</b> on <b>${attribute_escape(authorise.host)}</b> with code <code>${attribute_escape(authorise.code)}</code></p>`;
96
+ const carried = authorise === null ? '' : `<input type="hidden" name="code" value="${attribute_escape(authorise.code)}" />`;
90
97
  return shell_render({
91
- title: 'ChRIS · login',
98
+ title: authorise === null ? 'ChRIS · login' : 'ChRIS · authorise chell',
92
99
  root: './',
93
100
  body: `<form method="post" action="login">
101
+ ${purpose}
94
102
  ${notice}
103
+ ${carried}
95
104
  <label>Username <input name="username" autocomplete="username" required autofocus /></label>
96
105
  <label>Password <input name="password" type="password" autocomplete="current-password" required /></label>
97
- <button type="submit">LOG IN</button>
106
+ <button type="submit">${authorise === null ? 'LOG IN' : 'AUTHORISE'}</button>
98
107
  </form>`,
99
108
  script: `document.getElementById('cube').textContent = ${JSON.stringify(cubeUrl)};
100
109
  brain_draw(0, true);`,
101
110
  });
102
111
  }
112
+ /**
113
+ * The page after a device code was authorised: chell has its token, the
114
+ * browser was only here to say so.
115
+ *
116
+ * @param cubeUrl - The CUBE the door serves.
117
+ * @param host - Where chell runs.
118
+ * @param name - The token's name.
119
+ * @param expires - ISO time the token dies.
120
+ * @returns The page.
121
+ */
122
+ export function authorisedPage_render(cubeUrl, host, name, expires) {
123
+ return shell_render({
124
+ title: 'ChRIS · chell authorised',
125
+ root: './',
126
+ body: `<p class="purpose"><b>chell</b> on <b>${attribute_escape(host)}</b> is authorised.</p>
127
+ <p>Its door token is named <code>${attribute_escape(name)}</code> and dies on ${attribute_escape(expires.slice(0, 10))}. You can close this tab; chell has already received it.</p>
128
+ <a class="pill" href="login">BACK TO THE DOOR</a>`,
129
+ script: `document.getElementById('cube').textContent = ${JSON.stringify(cubeUrl)};
130
+ brain_draw(0, true);`,
131
+ });
132
+ }
103
133
  /**
104
134
  * The greet: the brain awake, the boot rows arriving, the hand-off.
105
135
  *
@@ -1 +1 @@
1
- {"version":3,"file":"greeter.js","sourceRoot":"","sources":["../src/greeter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAkBH;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACzG,CAAC;AAED,2EAA2E;AAC3E,SAAS,YAAY,CAAC,KAAmB;IACvC,OAAO;;;;;SAKA,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;8CACQ,KAAK,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BpD,KAAK,CAAC,IAAI;;;oCAGsB,KAAK,CAAC,IAAI;+BACf,KAAK,CAAC,IAAI;;;EAGvC,KAAK,CAAC,MAAM;;;;CAIb,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,MAAqB;IACrE,MAAM,MAAM,GAAW,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kCAAkC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;IAC/G,OAAO,YAAY,CAAC;QAClB,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,IAAI;QACV,IAAI,EAAE;MACJ,MAAM;;;;UAIF;QACN,MAAM,EAAE,iDAAiD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;qBAC/D;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,GAAW;IAC3D,OAAO,YAAY,CAAC;QAClB,KAAK,EAAE,+BAA+B;QACtC,IAAI,EAAE,KAAK;QACX,IAAI,EAAE;;yEAE+D;QACrE,MAAM,EAAE,iDAAiD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;;;;;;;+BAQrD,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;gDAsBf,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;;;;;;;kGAOe;KAC/F,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"greeter.js","sourceRoot":"","sources":["../src/greeter.ts"],"names":[],"mappings":"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"}