aismemory 0.3.0 → 0.5.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.
@@ -0,0 +1,131 @@
1
+ /**
2
+ * `aismemory enable-key-auth` — one-shot enrollment for DID-based auth.
3
+ *
4
+ * Generates an Ed25519 keypair on the user's device, registers the public
5
+ * key with AIS, and writes the private key to `~/.aismemory/keys/`. After
6
+ * this runs once per device, every subsequent aismemory session authenticates
7
+ * silently with the key — no browser, no activation URL.
8
+ *
9
+ * Bootstrap requirements: the user needs a working bearer token from the
10
+ * existing device-flow credentials file (`~/.aismemory/credentials.json`).
11
+ * If absent, we tell them to run a normal aismemory session once first.
12
+ *
13
+ * Usage:
14
+ * npx aismemory enable-key-auth
15
+ * AIS_URL=https://other.example.com npx aismemory enable-key-auth
16
+ *
17
+ * Exit codes:
18
+ * 0 — key registered + saved
19
+ * 1 — bootstrap credentials missing or registration failed
20
+ */
21
+ import { readFileSync, existsSync } from 'node:fs';
22
+ import { join } from 'node:path';
23
+ import { homedir } from 'node:os';
24
+ import { generateAndSaveKeypair } from '../key-auth.js';
25
+ const PREFIX = '[aismemory enable-key-auth]';
26
+ function loadBootstrapCreds() {
27
+ const path = join(homedir(), '.aismemory', 'credentials.json');
28
+ if (!existsSync(path))
29
+ return null;
30
+ try {
31
+ return JSON.parse(readFileSync(path, 'utf-8'));
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ /**
38
+ * Decode a JWT payload WITHOUT verifying the signature. We trust the token
39
+ * because it came from our own credentials file — we just need its claims
40
+ * to know who we are.
41
+ */
42
+ function decodeJwtPayload(token) {
43
+ const parts = token.split('.');
44
+ if (parts.length !== 3)
45
+ throw new Error('Malformed JWT');
46
+ const json = Buffer.from(parts[1], 'base64url').toString('utf-8');
47
+ return JSON.parse(json);
48
+ }
49
+ function log(msg) {
50
+ process.stderr.write(`${PREFIX} ${msg}\n`);
51
+ }
52
+ async function main() {
53
+ const aisUrl = process.env['AIS_URL'] ?? 'https://ais.agentsandswarms.ai';
54
+ // 1. Find a bootstrap bearer token.
55
+ const creds = loadBootstrapCreds();
56
+ if (!creds) {
57
+ log('No bootstrap credentials found at ~/.aismemory/credentials.json');
58
+ log('Run `npx aismemory` first (and complete the bond URL) to get an initial token,');
59
+ log('then re-run this command.');
60
+ process.exit(1);
61
+ }
62
+ if (new Date(creds.expiresAt) <= new Date()) {
63
+ log('Bootstrap credentials at ~/.aismemory/credentials.json have expired.');
64
+ log('Run `npx aismemory` once to refresh them, then re-run this command.');
65
+ process.exit(1);
66
+ }
67
+ // 2. Extract userId from the JWT.
68
+ let payload;
69
+ try {
70
+ payload = decodeJwtPayload(creds.token);
71
+ }
72
+ catch (err) {
73
+ log(`Failed to decode bootstrap JWT: ${err.message}`);
74
+ process.exit(1);
75
+ }
76
+ const userId = payload.user_id ?? payload.sub;
77
+ if (!userId) {
78
+ log('Bootstrap JWT does not carry a user_id claim. This token may be agent-only —');
79
+ log('claim your agent to a user account first, then re-run.');
80
+ process.exit(1);
81
+ }
82
+ // Derive the userDid. The domain is the host portion of AIS_URL — strip
83
+ // the protocol so the resulting DID matches what AIS computes server-side.
84
+ const aisHost = new URL(aisUrl).host;
85
+ const userDid = `did:web:${aisHost}:users:${userId}`;
86
+ log(`AIS URL : ${aisUrl}`);
87
+ log(`userId : ${userId}`);
88
+ log(`userDid : ${userDid}`);
89
+ // 3. Generate keypair + write to disk.
90
+ const label = `${process.env['USER'] ?? 'user'}-${process.platform}`;
91
+ log('Generating Ed25519 keypair…');
92
+ const keyFile = await generateAndSaveKeypair({ userId, userDid });
93
+ // 4. POST public key to AIS.
94
+ log('Registering public key with AIS…');
95
+ const res = await fetch(`${aisUrl}/v1/users/me/keys`, {
96
+ method: 'POST',
97
+ headers: {
98
+ 'Content-Type': 'application/json',
99
+ Authorization: `Bearer ${creds.token}`,
100
+ },
101
+ body: JSON.stringify({
102
+ publicKey: keyFile.publicKeyJwk,
103
+ label,
104
+ }),
105
+ });
106
+ const body = (await res.json().catch(() => ({})));
107
+ if (!res.ok || !body.success) {
108
+ // Special-case: 409 = key already registered. Treat as success since we
109
+ // still wrote the file locally and the server already knows about us.
110
+ if (res.status === 409) {
111
+ log('Public key was already registered (server says 409 — duplicate).');
112
+ log('Local key file is up to date; no further action needed.');
113
+ process.exit(0);
114
+ }
115
+ log(`Failed to register key: HTTP ${res.status} ${body.error?.code ?? ''} ${body.error?.message ?? ''}`);
116
+ process.exit(1);
117
+ }
118
+ log('✓ Public key registered with AIS');
119
+ log(` key id : ${body.data?.id ?? '<unknown>'}`);
120
+ log(` label : ${label}`);
121
+ log('');
122
+ log('Done. Future aismemory sessions will authenticate silently with this key.');
123
+ log(`Private key lives at ~/.aismemory/keys/${userDid}.json (mode 0600).`);
124
+ log('Treat it like an SSH private key — back it up, do not share.');
125
+ process.exit(0);
126
+ }
127
+ main().catch((err) => {
128
+ log(`Fatal: ${err instanceof Error ? err.message : String(err)}`);
129
+ process.exit(1);
130
+ });
131
+ //# sourceMappingURL=enable-key-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable-key-auth.js","sourceRoot":"","sources":["../../src/cli/enable-key-auth.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
11
11
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
12
+ import { tryKeyAuth } from './key-auth.js';
12
13
  import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
13
14
  import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
14
15
  import { join } from 'path';
@@ -134,11 +135,30 @@ async function resolveAgent(token, fallbackAgentId, fallbackTenantId) {
134
135
  return { agentId: fallbackAgentId, tenantId: fallbackTenantId };
135
136
  }
136
137
  }
137
- async function authenticate() {
138
+ /**
139
+ * Bond URL/code surfaced when a tool is called before the user has approved
140
+ * the device flow. Caller catches this and returns a friendly error to the MCP
141
+ * client so the agent can show the URL inline in chat.
142
+ */
143
+ class BondPendingError extends Error {
144
+ verificationUri;
145
+ userCode;
146
+ bondPending = true;
147
+ constructor(verificationUri, userCode) {
148
+ super(`Memory bond required.\n\n` +
149
+ `Visit: ${verificationUri}\n` +
150
+ `Code: ${userCode}\n\n` +
151
+ `Enter your email and tap Approve, then retry this tool. Takes about 30 seconds.`);
152
+ this.verificationUri = verificationUri;
153
+ this.userCode = userCode;
154
+ this.name = 'BondPendingError';
155
+ }
156
+ }
157
+ async function startDeviceFlow() {
138
158
  stderr('Starting authentication...');
139
- const authRes = await aisPost('/v1/oauth/device/authorize', {
159
+ const authRes = (await aisPost('/v1/oauth/device/authorize', {
140
160
  name: `agent-${homedir().split('/').pop() ?? 'user'}`,
141
- });
161
+ }));
142
162
  if (!authRes.success || !authRes.data) {
143
163
  throw new Error(`Authentication failed: ${authRes.error?.message ?? 'Unknown error'}`);
144
164
  }
@@ -147,30 +167,37 @@ async function authenticate() {
147
167
  stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
148
168
  stderr(' aismemory — memory bond required');
149
169
  stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
150
- stderr('');
151
170
  stderr(` Bond URL : ${verification_uri_complete}`);
152
171
  stderr(` Code : ${user_code}`);
153
- stderr('');
154
172
  stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
155
- stderr('');
156
- stderr('[ AGENT INSTRUCTION ]');
157
- stderr('Share the bond URL with the user in the chat — do NOT ask');
158
- stderr('them to look in their terminal or config files.');
159
- stderr('');
160
- stderr('Suggested message to send the user:');
161
- stderr(` "To connect your memory, please click: ${verification_uri_complete}"`);
162
- stderr(' "It takes about 30 seconds — enter your email and tap Approve."');
163
- stderr('');
164
- stderr('Waiting for user approval...');
165
- // Poll for token
173
+ const poll = pollForToken(device_code, interval, agent_id, provisional_tenant_id);
174
+ const flow = {
175
+ device_code,
176
+ user_code,
177
+ verification_uri_complete,
178
+ agent_id,
179
+ provisional_tenant_id,
180
+ poll,
181
+ dead: false,
182
+ };
183
+ // Mark the flow dead as soon as its poll rejects so the next
184
+ // `ensureCredentials` call starts a fresh flow. The `.catch` here is purely
185
+ // for state-tracking — the original rejection is still observed by callers
186
+ // racing `flow.poll`. We swallow on this branch to suppress unhandled
187
+ // rejection warnings between rejection and the next ensureCredentials call.
188
+ poll.catch(() => {
189
+ flow.dead = true;
190
+ });
191
+ return flow;
192
+ }
193
+ async function pollForToken(device_code, interval, agent_id, provisional_tenant_id) {
166
194
  const pollInterval = Math.max(interval, 5) * 1000;
167
195
  const deadline = Date.now() + 30 * 60 * 1000; // 30 min
168
196
  while (Date.now() < deadline) {
169
197
  await new Promise((r) => setTimeout(r, pollInterval));
170
- const pollRes = await aisPost('/v1/oauth/token', { device_code });
198
+ const pollRes = (await aisPost('/v1/oauth/token', { device_code }));
171
199
  if (pollRes.access_token) {
172
200
  const expiresAt = new Date(Date.now() + (pollRes.expires_in ?? 604800) * 1000).toISOString();
173
- // Resolve to an existing agent if available
174
201
  const { agentId, tenantId } = await resolveAgent(pollRes.access_token, agent_id, provisional_tenant_id);
175
202
  const creds = {
176
203
  token: pollRes.access_token,
@@ -268,27 +295,137 @@ const tools = [
268
295
  },
269
296
  ];
270
297
  // ── MCP Server ──────────────────────────────────────────
271
- async function main() {
272
- // Authenticate
273
- let creds = loadCredentials();
274
- if (!creds) {
275
- creds = await authenticate();
298
+ /**
299
+ * Decode the user_id + tenant_id claims from a (presumed valid) JWT without
300
+ * verifying the signature. Used to derive bootstrap context after a successful
301
+ * key-auth handshake — we trust the token because the server just minted it.
302
+ */
303
+ function decodeJwtClaims(token) {
304
+ const parts = token.split('.');
305
+ if (parts.length !== 3)
306
+ return {};
307
+ try {
308
+ const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf-8'));
309
+ return { userId: payload.user_id ?? payload.sub, tenantId: payload.tenant_id };
276
310
  }
277
- else {
278
- stderr(`Authenticated as agent ${creds.agentId}`);
311
+ catch {
312
+ return {};
279
313
  }
280
- const { token } = creds;
281
- // Mutable so `agent_load` can switch the session to a different agent.
282
- let agentId = creds.agentId;
283
- agentContext = await hydrateIdentity(AIS_URL, agentId, token);
284
- if (agentContext) {
285
- stderr(`Agent loaded: ${agentContext.identity.name} (${agentContext.recentMemories.length} memories, ${agentContext.goals.length} goals)`);
314
+ }
315
+ async function main() {
316
+ // Subcommand dispatch — `aismemory enable-key-auth` runs the enrollment
317
+ // CLI and exits, never touching the MCP server. Other subcommands TBD.
318
+ if (process.argv[2] === 'enable-key-auth') {
319
+ await import('./cli/enable-key-auth.js');
320
+ return; // CLI calls process.exit() itself
286
321
  }
287
- else {
288
- stderr('Agent identity not loaded tools work, but no identity prompt');
322
+ // Lazy-auth state. We connect the MCP transport before the user has approved
323
+ // the device flow so Claude Code's 30s connection timeout is not blocked on
324
+ // human approval. The first tool call surfaces the bond URL via its result.
325
+ let creds = loadCredentials();
326
+ let activeFlow = null;
327
+ let postAuthDone = false;
328
+ // Created here so `agent_load` and post-auth setup can reference it via closure.
329
+ const server = new Server({ name: 'aismemory', version: '0.5.0' }, { capabilities: { tools: {}, prompts: {} } });
330
+ /**
331
+ * Wait briefly for the in-flight device-flow poll to complete. If the user
332
+ * has already approved, this returns the fresh credentials. If not, throws
333
+ * BondPendingError so the calling tool returns the bond URL to the agent.
334
+ *
335
+ * Recovery: if the previous flow's poll rejected (expired_token,
336
+ * access_denied, 30-min deadline, etc.), the dead flow is discarded and a
337
+ * new device flow is started inline — the user gets a fresh bond URL on
338
+ * the next tool call without having to restart the MCP process.
339
+ */
340
+ async function ensureCredentials(softTimeoutMs = 7000) {
341
+ if (creds)
342
+ return creds;
343
+ // ── Key auth (Phase 1 DID auth) ───────────────────────────────────────
344
+ // If the user has enrolled a private key for this device, sign a
345
+ // server-issued challenge and skip the device-flow ceremony entirely.
346
+ // tryKeyAuth() returns null if no key file is present (clean fallback
347
+ // to device flow) and throws only on real failures (e.g. server says
348
+ // INVALID_SIGNATURE). On throw we log and continue to device flow —
349
+ // device flow is the recovery path for "user wiped their key file".
350
+ try {
351
+ const keyResult = await tryKeyAuth({ aisUrl: AIS_URL });
352
+ if (keyResult) {
353
+ const claims = decodeJwtClaims(keyResult.token);
354
+ const tenantId = claims.tenantId ?? '';
355
+ const resolved = await resolveAgent(keyResult.token, '', tenantId);
356
+ creds = {
357
+ token: keyResult.token,
358
+ agentId: resolved.agentId,
359
+ tenantId: resolved.tenantId || tenantId,
360
+ expiresAt: keyResult.expiresAt,
361
+ };
362
+ saveCredentials(creds);
363
+ stderr('Authenticated via DID key auth (no browser required)');
364
+ if (!postAuthDone) {
365
+ postAuthDone = true;
366
+ void runPostAuth(creds);
367
+ }
368
+ return creds;
369
+ }
370
+ }
371
+ catch (err) {
372
+ stderr(`Key auth failed: ${err instanceof Error ? err.message : String(err)}. Falling back to device flow.`);
373
+ }
374
+ if (!activeFlow || activeFlow.dead) {
375
+ activeFlow = await startDeviceFlow();
376
+ }
377
+ const sentinel = Symbol('bond-pending');
378
+ let got;
379
+ try {
380
+ got = await Promise.race([
381
+ activeFlow.poll,
382
+ new Promise((r) => setTimeout(() => r(sentinel), softTimeoutMs)),
383
+ ]);
384
+ }
385
+ catch {
386
+ // Poll rejected (deadline / expired / denied). Start a fresh flow
387
+ // immediately and surface its new bond URL — no restart required.
388
+ activeFlow = await startDeviceFlow();
389
+ throw new BondPendingError(activeFlow.verification_uri_complete, activeFlow.user_code);
390
+ }
391
+ if (got === sentinel) {
392
+ throw new BondPendingError(activeFlow.verification_uri_complete, activeFlow.user_code);
393
+ }
394
+ creds = got;
395
+ activeFlow = null;
396
+ if (!postAuthDone) {
397
+ postAuthDone = true;
398
+ void runPostAuth(creds);
399
+ }
400
+ return creds;
401
+ }
402
+ /** Identity hydration, prompt refresh, and auto-handoff — all post-auth. */
403
+ async function runPostAuth(c) {
404
+ try {
405
+ agentContext = await hydrateIdentity(AIS_URL, c.agentId, c.token);
406
+ if (agentContext) {
407
+ stderr(`Agent loaded: ${agentContext.identity.name} (${agentContext.recentMemories.length} memories, ${agentContext.goals.length} goals)`);
408
+ server.notification({ method: 'notifications/prompts/list_changed' });
409
+ }
410
+ else {
411
+ stderr('Agent identity not loaded — tools work, but no identity prompt');
412
+ }
413
+ startRefreshTimer(AIS_URL, c.agentId, c.token, (memories) => {
414
+ if (agentContext) {
415
+ agentContext.recentMemories = memories;
416
+ }
417
+ server.notification({ method: 'notifications/prompts/list_changed' });
418
+ stderr(`Memory refresh: ${memories.length} memories`);
419
+ });
420
+ setupAutoHandoff(AIS_URL, c.agentId, c.token, activityTracker, () => {
421
+ stopRefreshTimer();
422
+ stderr('Session handoff saved');
423
+ });
424
+ }
425
+ catch (e) {
426
+ stderr(`Post-auth setup failed: ${e instanceof Error ? e.message : String(e)}`);
427
+ }
289
428
  }
290
- // Create MCP server
291
- const server = new Server({ name: 'aismemory', version: '0.2.0' }, { capabilities: { tools: {}, prompts: {} } });
292
429
  server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
293
430
  server.setRequestHandler(ListPromptsRequestSchema, async () => ({
294
431
  prompts: agentContext
@@ -306,6 +443,10 @@ async function main() {
306
443
  const a = (args ?? {});
307
444
  activityTracker.recordToolUse(name);
308
445
  try {
446
+ const c = await ensureCredentials();
447
+ const token = c.token;
448
+ // agentId is mutable across `agent_load` calls within this session.
449
+ let agentId = c.agentId;
309
450
  let result;
310
451
  switch (name) {
311
452
  case 'remember':
@@ -349,6 +490,10 @@ async function main() {
349
490
  }
350
491
  const target = await resolveAgentForLoad(token, query);
351
492
  agentId = target.id;
493
+ // Persist the switch so subsequent tool calls use the new agent.
494
+ if (creds) {
495
+ creds = { ...creds, agentId };
496
+ }
352
497
  agentContext = await hydrateIdentity(AIS_URL, agentId, token);
353
498
  server.notification({ method: 'notifications/prompts/list_changed' });
354
499
  stderr(`agent_load: switched to "${target.name}" (${target.id})`);
@@ -374,26 +519,33 @@ async function main() {
374
519
  };
375
520
  }
376
521
  catch (error) {
522
+ const message = error instanceof Error ? error.message : 'Unknown error';
523
+ // BondPendingError carries human-readable text that the agent should
524
+ // render verbatim — return as plain text rather than JSON.
525
+ if (error instanceof BondPendingError) {
526
+ return {
527
+ content: [{ type: 'text', text: message }],
528
+ isError: true,
529
+ };
530
+ }
377
531
  return {
378
- content: [{ type: 'text', text: JSON.stringify({ error: error instanceof Error ? error.message : 'Unknown error' }) }],
532
+ content: [{ type: 'text', text: JSON.stringify({ error: message }) }],
379
533
  isError: true,
380
534
  };
381
535
  }
382
536
  });
537
+ // Connect the transport BEFORE any auth so MCP `initialize` returns in <1s.
383
538
  const transport = new StdioServerTransport();
384
539
  await server.connect(transport);
385
- startRefreshTimer(AIS_URL, agentId, token, (memories) => {
386
- if (agentContext) {
387
- agentContext.recentMemories = memories;
388
- }
389
- server.notification({ method: 'notifications/prompts/list_changed' });
390
- stderr(`Memory refresh: ${memories.length} memories`);
391
- });
392
- setupAutoHandoff(AIS_URL, agentId, token, activityTracker, () => {
393
- stopRefreshTimer();
394
- stderr('Session handoff saved');
395
- });
396
540
  stderr(`MCP server running. Tools: ${tools.map((t) => t.name).join(', ')}`);
541
+ if (creds) {
542
+ stderr(`Authenticated as agent ${creds.agentId}`);
543
+ postAuthDone = true;
544
+ void runPostAuth(creds);
545
+ }
546
+ else {
547
+ stderr('No saved credentials. Bond URL will be surfaced on first tool call.');
548
+ }
397
549
  }
398
550
  main().catch((error) => {
399
551
  stderr(`Fatal: ${error instanceof Error ? error.message : String(error)}`);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GAEvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGtE,2DAA2D;AAE3D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,gCAAgC,CAAC;AAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAChD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AASvD,2DAA2D;AAE3D,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAgB,CAAC;QAC1E,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,iDAAiD,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB;IACzC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,2DAA2D;AAE3D,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,IAAa,EAAE,KAAc;IAChE,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAC/E,IAAI,KAAK;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,KAAa;IAC/C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;QAC3C,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,KAAK,EAAE,EAAE;KAChD,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AA2CD,KAAK,UAAU,mBAAmB,CAAC,KAAa,EAAE,KAAa;IAC7D,MAAM,UAAU,GAAG,CAAC,MAAM,MAAM,CAAC,qBAAqB,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAyB,CAAC;IACnH,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpE,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,IAAI,sCAAsC,KAAK,WAAW,GAAG,qCAAqC,CAAC,CAAC;IAC7I,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,IAAI,+BAA+B,KAAK,gCAAgC,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC1I,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAsB,CAAC;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAC3B,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,KAAK,CACzE,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,gCAAgC,SAAS,IAAI,QAAQ,EAAE,CAC5F,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,sCAAsC,KAAK,WAAW,OAAO;aAC1D,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC,qCAAqC,CACnD,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,eAAuB,EAAE,gBAAwB;IAC1F,wCAAwC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC/C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAC;QACvD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,KAAK,CAAsB,CAAC;QACnE,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE5E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,8CAA8C,eAAe,EAAE,CAAC,CAAC;YACxE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAClE,CAAC;QAED,0CAA0C;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACjF,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,gBAAgB,KAAK,CAAC,IAAI,4BAA4B,CAAC,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;YAC3D,CAAC;YACD,MAAM,CAAC,4BAA4B,OAAO,2BAA2B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;QAED,+BAA+B;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QAC1B,MAAM,CAAC,gCAAgC,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,YAAY,MAAM,CAAC,MAAM,wDAAwD,CAAC,CAAC;YAC1F,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,2CAA2C,eAAe,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAErC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,4BAA4B,EAAE;QAC1D,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE;KACtD,CAAuB,CAAC;IAEzB,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtH,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,wDAAwD,CAAC,CAAC;IACjE,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC7C,MAAM,CAAC,wDAAwD,CAAC,CAAC;IACjE,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,gBAAgB,yBAAyB,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,wDAAwD,CAAC,CAAC;IACjE,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAChC,MAAM,CAAC,2DAA2D,CAAC,CAAC;IACpE,MAAM,CAAC,iDAAiD,CAAC,CAAC;IAC1D,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,qCAAqC,CAAC,CAAC;IAC9C,MAAM,CAAC,4CAA4C,yBAAyB,GAAG,CAAC,CAAC;IACjF,MAAM,CAAC,mEAAmE,CAAC,CAAC;IAC5E,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAEvC,iBAAiB;IACjB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;IAEvD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QAEtD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,iBAAiB,EAAE,EAAE,WAAW,EAAE,CAAsB,CAAC;QAEvF,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAE7F,4CAA4C;YAC5C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;YAExG,MAAM,KAAK,GAAgB;gBACzB,KAAK,EAAE,OAAO,CAAC,YAAY;gBAC3B,OAAO;gBACP,QAAQ;gBACR,SAAS;aACV,CAAC;YACF,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,KAAK,uBAAuB;YAAE,SAAS;QACxD,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACvF,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACrG,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC9C,CAAC;AAED,IAAI,YAAY,GAAwB,IAAI,CAAC;AAC7C,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAE9C,2DAA2D;AAE3D,MAAM,KAAK,GAAW;IACpB;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,kEAAkE;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;gBACvE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE;gBAClH,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE;aACrG;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;gBAClE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE;aACtH;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kEAAkE;QAC/E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,8FAA8F;QAC3G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;IACD;QACE,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,iGAAiG;QAC9G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gFAAgF;QAC7F,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;gBACzF,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE;aAC1G;SACF;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,wKAAwK;YACxK,iMAAiM;QACnM,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kEAAkE;iBAChF;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;CACF,CAAC;AAEF,2DAA2D;AAE3D,KAAK,UAAU,IAAI;IACjB,eAAe;IACf,IAAI,KAAK,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,MAAM,YAAY,EAAE,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,uEAAuE;IACvE,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9D,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,iBAAiB,YAAY,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,cAAc,CAAC,MAAM,cAAc,YAAY,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;IAC7I,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,gEAAgE,CAAC,CAAC;IAC3E,CAAC;IAED,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EACvC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAC7C,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAE1E,MAAM,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC9D,OAAO,EAAE,YAAY;YACnB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,qDAAqD,EAAE,CAAC;YAClG,CAAC,CAAC,EAAE;KACP,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,cAAc,CAAC,YAAY,CAAC,EAAE;aACvE,CAAC;KACH,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QAClD,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC;YACH,IAAI,MAAe,CAAC;YAEpB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,UAAU;oBACb,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,OAAO,SAAS,EAAE;wBACrD,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC;wBACrB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,SAAS;wBAC5B,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG;qBACnC,EAAE,KAAK,CAAC,CAAC;oBACV,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC/D,MAAM;gBAER,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;oBACrC,IAAI,CAAC,CAAC,OAAO,CAAC;wBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACxD,IAAI,CAAC,CAAC,OAAO,CAAC;wBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACxD,IAAI,CAAC,CAAC,MAAM,CAAC;wBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACtD,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,OAAO,WAAW,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;oBACvE,MAAM;gBACR,CAAC;gBAED,KAAK,QAAQ;oBACX,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;oBACtD,MAAM;gBAER,KAAK,cAAc;oBACjB,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,OAAO,eAAe,EAAE,KAAK,CAAC,CAAC;oBACnE,MAAM;gBAER,KAAK,OAAO;oBACV,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,OAAO,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBACjE,MAAM;gBAER,KAAK,SAAS;oBACZ,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,OAAO,UAAU,EAAE;wBACtD,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,eAAe;wBACxC,YAAY,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE;qBACtC,EAAE,KAAK,CAAC,CAAC;oBACV,MAAM;gBAER,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;oBACnD,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACvD,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;oBACpB,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;oBAC9D,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC,CAAC;oBACtE,MAAM,CAAC,4BAA4B,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;oBAClE,MAAM,GAAG;wBACP,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,MAAM,CAAC,EAAE;wBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,GAAG,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAG,IAAI,IAAI;wBACvC,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,cAAc,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM,IAAI,CAAC;wBACxD,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC;qBAC7C,CAAC;oBACF,MAAM;gBACR,CAAC;gBAED;oBACE,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;wBACrF,OAAO,EAAE,IAAI;qBACd,CAAC;YACN,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC;gBACtH,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,QAAuB,EAAE,EAAE;QACrE,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,CAAC,cAAc,GAAG,QAAQ,CAAC;QACzC,CAAC;QACD,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,mBAAmB,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE;QAC9D,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,8BAA8B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /** Public key in JWK form. */
2
+ export interface Ed25519PublicJwk {
3
+ kty: 'OKP';
4
+ crv: 'Ed25519';
5
+ x: string;
6
+ }
7
+ /** Private key file shape persisted at `~/.aismemory/keys/<userDid>.json`. */
8
+ export interface KeyFile {
9
+ /** Schema version. Bump for breaking changes; readers should refuse unknown versions. */
10
+ version: 1;
11
+ userId: string;
12
+ userDid: string;
13
+ keyType: 'Ed25519';
14
+ /** base64url(raw 32-byte private key seed) */
15
+ privateKey: string;
16
+ /** base64url(raw 32-byte public key) */
17
+ publicKey: string;
18
+ /** Public key in JWK form — kept alongside `publicKey` for convenience. */
19
+ publicKeyJwk: Ed25519PublicJwk;
20
+ createdAt: string;
21
+ }
22
+ /** Credentials handed back to the caller after a successful key-auth. */
23
+ export interface KeyAuthCredentials {
24
+ userId: string;
25
+ userDid: string;
26
+ /** Bearer JWT to use in `Authorization: Bearer ...` headers. */
27
+ token: string;
28
+ /** ISO timestamp at which `token` will be rejected. */
29
+ expiresAt: string;
30
+ tokenType: 'owner';
31
+ }
32
+ /** Read a key file. Returns null if the file is absent. Throws on malformed JSON. */
33
+ export declare function readKeyFile(opts: {
34
+ userDid: string;
35
+ keysDir?: string;
36
+ }): KeyFile | null;
37
+ /**
38
+ * Generate a fresh Ed25519 keypair, write it to disk, and return the result.
39
+ * The directory is created with mode 0700 and the key file with mode 0600.
40
+ *
41
+ * This is called once per device by the `enable-key-auth` CLI bootstrap.
42
+ */
43
+ export declare function generateAndSaveKeypair(opts: {
44
+ userId: string;
45
+ userDid: string;
46
+ keysDir?: string;
47
+ }): Promise<KeyFile>;
48
+ export interface TryKeyAuthOpts {
49
+ /** AIS base URL, e.g. `https://ais.agentsandswarms.ai` */
50
+ aisUrl: string;
51
+ /** Override the default keys directory (for tests). */
52
+ keysDir?: string;
53
+ /**
54
+ * If supplied, load the key for this specific userDid. Otherwise the
55
+ * helper auto-discovers a single key file in `keysDir`.
56
+ */
57
+ userDid?: string;
58
+ /** Override fetch (for tests). */
59
+ fetchImpl?: typeof globalThis.fetch;
60
+ }
61
+ /**
62
+ * Attempt key-based authentication against AIS. Returns null if no usable
63
+ * key file exists (caller should fall back to device flow). Throws on any
64
+ * fatal error (bad signature, network failure, server rejection).
65
+ */
66
+ export declare function tryKeyAuth(opts: TryKeyAuthOpts): Promise<KeyAuthCredentials | null>;