@mysten-incubation/memwal-mcp 0.0.13 → 0.0.14-dev.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/auth-required.d.ts +330 -0
- package/dist/auth-required.d.ts.map +1 -1
- package/dist/auth-required.js +83 -5
- package/dist/auth-required.js.map +1 -1
- package/dist/auth.d.ts +60 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +135 -0
- package/dist/auth.js.map +1 -1
- package/dist/bridge.d.ts +4 -0
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +195 -22
- package/dist/bridge.js.map +1 -1
- package/dist/crypto.d.ts +9 -0
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +13 -1
- package/dist/crypto.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -1
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +4 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +12 -1
- package/dist/instructions.js.map +1 -1
- package/dist/login.d.ts +5 -1
- package/dist/login.d.ts.map +1 -1
- package/dist/login.js +78 -11
- package/dist/login.js.map +1 -1
- package/dist/messages.d.ts +5 -0
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +11 -4
- package/dist/messages.js.map +1 -1
- package/dist/recovery.d.ts +61 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +227 -0
- package/dist/recovery.js.map +1 -0
- package/dist/streamable.d.ts +48 -0
- package/dist/streamable.d.ts.map +1 -0
- package/dist/streamable.js +136 -0
- package/dist/streamable.js.map +1 -0
- package/package.json +1 -1
package/dist/login.js
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
import { createServer } from "node:http";
|
|
20
20
|
import { randomBytes, timingSafeEqual } from "node:crypto";
|
|
21
21
|
import open from "open";
|
|
22
|
-
import { saveCreds, formatReplacementNotice, formatPendingSignInWarning } from "./auth.js";
|
|
22
|
+
import { saveCreds, formatReplacementNotice, formatPendingSignInWarning, savePendingLogin, clearPendingLogin, reusablePendingLogin, } from "./auth.js";
|
|
23
23
|
import { generateKeypair } from "./crypto.js";
|
|
24
24
|
import { log, note } from "./logger.js";
|
|
25
25
|
const DEFAULTS = {
|
|
@@ -156,7 +156,45 @@ export async function loginFlow(opts = {}) {
|
|
|
156
156
|
...opts,
|
|
157
157
|
timeoutMs: opts.timeoutMs ?? resolveLoginTimeoutMs(),
|
|
158
158
|
};
|
|
159
|
-
|
|
159
|
+
// Adopt a still-valid record for this relayer rather than minting over it.
|
|
160
|
+
// Recovery only runs at process start and is skipped for `--login`, so a
|
|
161
|
+
// timed-out login followed by `memwal_login` in the same process would
|
|
162
|
+
// otherwise replace the only copy of a key the browser may already have
|
|
163
|
+
// paid to register.
|
|
164
|
+
const reusable = reusablePendingLogin(cfg.relayerUrl);
|
|
165
|
+
if (reusable) {
|
|
166
|
+
log.info("login.pending.reused", {
|
|
167
|
+
publicKey: reusable.delegatePublicKeyHex,
|
|
168
|
+
createdAt: reusable.createdAt,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
const keypair = reusable
|
|
172
|
+
? {
|
|
173
|
+
privateKeyHex: reusable.delegatePrivateKey,
|
|
174
|
+
publicKeyHex: reusable.delegatePublicKeyHex,
|
|
175
|
+
suiAddress: reusable.delegateAddress,
|
|
176
|
+
}
|
|
177
|
+
: await generateKeypair();
|
|
178
|
+
// Write-ahead (WALM-332). From the moment anything can hand this public key
|
|
179
|
+
// to a browser, the private half has to survive losing this process — the
|
|
180
|
+
// browser's on-chain `add_delegate_key` costs gas and cannot be undone, and
|
|
181
|
+
// it happens strictly before the callback that would otherwise be our only
|
|
182
|
+
// chance to save the key. Persisting here, ahead of the URL, is what makes
|
|
183
|
+
// an interrupted flow recoverable instead of an orphaned paid registration.
|
|
184
|
+
//
|
|
185
|
+
// A reused record is written back unchanged, `createdAt` included: the TTL
|
|
186
|
+
// has to keep measuring from the attempt that may have registered the key,
|
|
187
|
+
// and `recoverPendingLogin` compares it against `credentials.createdAt` to
|
|
188
|
+
// decide which of the two is newer.
|
|
189
|
+
savePendingLogin(reusable ?? {
|
|
190
|
+
delegatePrivateKey: keypair.privateKeyHex,
|
|
191
|
+
delegatePublicKeyHex: keypair.publicKeyHex,
|
|
192
|
+
delegateAddress: keypair.suiAddress,
|
|
193
|
+
relayerUrl: cfg.relayerUrl,
|
|
194
|
+
label: cfg.label,
|
|
195
|
+
createdAt: new Date().toISOString(),
|
|
196
|
+
version: 1,
|
|
197
|
+
});
|
|
160
198
|
// Cryptographic single-use state token. Round-trip through the browser:
|
|
161
199
|
// we put it in `connectUrl`, the page echoes it back in the callback
|
|
162
200
|
// payload, and we constant-time-compare on receipt. Defeats cross-origin
|
|
@@ -219,7 +257,7 @@ export async function loginFlow(opts = {}) {
|
|
|
219
257
|
const done = new Promise((resolve) => {
|
|
220
258
|
const timer = setTimeout(() => {
|
|
221
259
|
if (!creds) {
|
|
222
|
-
error = new Error(`Login timed out after ${cfg.timeoutMs}ms. If you already approved the wallet transaction,
|
|
260
|
+
error = new Error(`Login timed out after ${cfg.timeoutMs}ms. If you already approved the wallet transaction, that delegate key is saved on disk: the next start reclaims it, and running login again cannot register it a second time. Only remove it from the dashboard if you mean to abandon it.`);
|
|
223
261
|
server.close();
|
|
224
262
|
resolve();
|
|
225
263
|
}
|
|
@@ -354,6 +392,9 @@ export async function loginFlow(opts = {}) {
|
|
|
354
392
|
version: 1,
|
|
355
393
|
};
|
|
356
394
|
const saved = saveCreds(creds);
|
|
395
|
+
// The key is durable in credentials.json now, so the
|
|
396
|
+
// write-ahead record has done its job.
|
|
397
|
+
clearPendingLogin();
|
|
357
398
|
const replacement = formatReplacementNotice(saved, creds.accountId);
|
|
358
399
|
if (replacement)
|
|
359
400
|
note(replacement);
|
|
@@ -403,7 +444,11 @@ let inflightLogin = null;
|
|
|
403
444
|
* `onSuccess` and `onFailure` are attached only when this call starts the
|
|
404
445
|
* flow, so a join cannot emit a second timeout warning.
|
|
405
446
|
*/
|
|
406
|
-
export function startOrReuseLoginFlow(opts = {}, onSuccess,
|
|
447
|
+
export function startOrReuseLoginFlow(opts = {}, onSuccess,
|
|
448
|
+
/** Called when the flow fails after the caller has already been handed the
|
|
449
|
+
* URL and returned. Without this the failure is unobservable — see the
|
|
450
|
+
* catch below. */
|
|
451
|
+
onFailure) {
|
|
407
452
|
if (inflightLogin)
|
|
408
453
|
return inflightLogin;
|
|
409
454
|
let resolveUrl;
|
|
@@ -425,24 +470,46 @@ export function startOrReuseLoginFlow(opts = {}, onSuccess, onFailure) {
|
|
|
425
470
|
}
|
|
426
471
|
},
|
|
427
472
|
});
|
|
473
|
+
// The one place a failed flow is reported. It has to be this catch rather
|
|
474
|
+
// than the `onSuccess` chain below: a caller that only passes `onFailure`
|
|
475
|
+
// still needs to hear about it, and reporting from both would emit the
|
|
476
|
+
// failure twice for one flow.
|
|
428
477
|
result.catch((err) => {
|
|
429
478
|
rejectUrl(err);
|
|
479
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
480
|
+
// This used to be a `warn` and nothing else, which made a background
|
|
481
|
+
// login failure invisible: `handleLocalLogin` has already returned the
|
|
482
|
+
// URL and told the client it succeeded, so without a signal here the
|
|
483
|
+
// agent waits forever on a flow that is already dead (WALM-332). Error
|
|
484
|
+
// level so it surfaces in client log views, `note` so it reads as a
|
|
485
|
+
// sentence on stderr, and `onFailure` so the caller can put it in
|
|
486
|
+
// front of the agent in-band. The pending write-ahead record is
|
|
487
|
+
// deliberately left in place — the next start reports the stranded key.
|
|
488
|
+
log.error("login.inflight.failed", { msg });
|
|
489
|
+
note(`Walrus Memory sign-in failed: ${msg}`);
|
|
430
490
|
try {
|
|
431
491
|
onFailure?.(err);
|
|
432
492
|
}
|
|
433
493
|
catch {
|
|
434
|
-
/*
|
|
494
|
+
/* a reporting failure must not mask the original one */
|
|
435
495
|
}
|
|
436
496
|
});
|
|
437
497
|
if (onSuccess) {
|
|
438
|
-
result
|
|
498
|
+
void result
|
|
439
499
|
.then(async (creds) => {
|
|
440
|
-
|
|
500
|
+
try {
|
|
501
|
+
await onSuccess(creds);
|
|
502
|
+
}
|
|
503
|
+
catch (err) {
|
|
504
|
+
// A credential handoff that throws is its own failure, and
|
|
505
|
+
// distinct from the flow failing — the sign-in did work.
|
|
506
|
+
log.error("login.on_success_failed", {
|
|
507
|
+
msg: err instanceof Error ? err.message : String(err),
|
|
508
|
+
});
|
|
509
|
+
}
|
|
441
510
|
})
|
|
442
|
-
.catch((
|
|
443
|
-
|
|
444
|
-
msg: err instanceof Error ? err.message : String(err),
|
|
445
|
-
});
|
|
511
|
+
.catch(() => {
|
|
512
|
+
/* the flow's own rejection is reported in the catch above */
|
|
446
513
|
});
|
|
447
514
|
}
|
|
448
515
|
const session = { url, result };
|
package/dist/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
|
package/dist/messages.d.ts
CHANGED
|
@@ -60,6 +60,11 @@ export declare function loginSuccessNotification(info: LoginSuccessInfo): string
|
|
|
60
60
|
*
|
|
61
61
|
* `reason` null — no attempt on record — yields the empty string, so callers
|
|
62
62
|
* can prefix unconditionally.
|
|
63
|
+
*
|
|
64
|
+
* The advice splits on whether the user approved the wallet step. If they did,
|
|
65
|
+
* the key is on-chain and in the write-ahead record (WALM-332), so a restart
|
|
66
|
+
* reclaims it. Signing in again would reuse that same key, and the dashboard's
|
|
67
|
+
* `add_delegate_key` aborts on a key that is already registered.
|
|
63
68
|
*/
|
|
64
69
|
export declare function loginFailureNotice(reason: string | null): string;
|
|
65
70
|
//# sourceMappingURL=messages.d.ts.map
|
package/dist/messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB;;6EAEyE;IACzE,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC5B,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA4BzD;AAOD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAajE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAKvE;AAED
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB;;6EAEyE;IACzE,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC5B,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA4BzD;AAOD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAajE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAKvE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAiBhE"}
|
package/dist/messages.js
CHANGED
|
@@ -90,6 +90,11 @@ export function loginSuccessNotification(info) {
|
|
|
90
90
|
*
|
|
91
91
|
* `reason` null — no attempt on record — yields the empty string, so callers
|
|
92
92
|
* can prefix unconditionally.
|
|
93
|
+
*
|
|
94
|
+
* The advice splits on whether the user approved the wallet step. If they did,
|
|
95
|
+
* the key is on-chain and in the write-ahead record (WALM-332), so a restart
|
|
96
|
+
* reclaims it. Signing in again would reuse that same key, and the dashboard's
|
|
97
|
+
* `add_delegate_key` aborts on a key that is already registered.
|
|
93
98
|
*/
|
|
94
99
|
export function loginFailureNotice(reason) {
|
|
95
100
|
if (!reason)
|
|
@@ -99,10 +104,12 @@ export function loginFailureNotice(reason) {
|
|
|
99
104
|
"",
|
|
100
105
|
`Reason: ${reason}`,
|
|
101
106
|
"",
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"
|
|
105
|
-
"
|
|
107
|
+
"If you approved the wallet step, that key is registered and saved on this machine.",
|
|
108
|
+
"Restart the MCP client within 24 hours and it is reclaimed. Signing in again cannot",
|
|
109
|
+
"register the same key twice, and removing it from the dashboard abandons it.",
|
|
110
|
+
"",
|
|
111
|
+
"If you did not approve it, sign in again and open the new link straight away. A",
|
|
112
|
+
"retry only helps once the MCP client is left running through the wallet prompt.",
|
|
106
113
|
"",
|
|
107
114
|
"---",
|
|
108
115
|
"",
|
package/dist/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,IAAqB;IAC7C,OAAO;QACH,4DAA4D;QAC5D,EAAE;QACF,YAAY,IAAI,CAAC,GAAG,EAAE;QACtB,EAAE;QACF,KAAK;QACL,IAAI,CAAC,GAAG;QACR,KAAK;QACL,EAAE;QACF,8CAA8C,IAAI,CAAC,GAAG,GAAG;QACzD,EAAE;QACF,0EAA0E;QAC1E,2EAA2E;QAC3E,wCAAwC;QACxC,EAAE;QACF,2EAA2E;QAC3E,2FAA2F;QAC3F,qIAAqI,IAAI,CAAC,eAAe,IAAI;QAC7J,GAAG,CAAC,IAAI,CAAC,QAAQ;YACb,CAAC,CAAC;gBACI,EAAE;gBACF,8FAA8F,IAAI,CAAC,eAAe,2BAA2B;aAChJ;YACH,CAAC,CAAC,EAAE,CAAC;QACT,EAAE;QACF,4GAA4G;KAC/G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,uEAAuE;AACvE,SAAS,OAAO,CAAC,EAAU;IACvB,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACrD,OAAO;QACH,+BAA+B;QAC/B,EAAE;QACF,aAAa,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACtC,aAAa,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;QAC5C,aAAa,IAAI,CAAC,eAAe,EAAE;QACnC,EAAE;QACF,kEAAkE;QAClE,EAAE;QACF,KAAK;QACL,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAsB;IAC3D,OAAO,CACH,4CAA4C,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;QACvE,wBAAwB,IAAI,CAAC,eAAe,GAAG,CAClD,CAAC;AACN,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,IAAqB;IAC7C,OAAO;QACH,4DAA4D;QAC5D,EAAE;QACF,YAAY,IAAI,CAAC,GAAG,EAAE;QACtB,EAAE;QACF,KAAK;QACL,IAAI,CAAC,GAAG;QACR,KAAK;QACL,EAAE;QACF,8CAA8C,IAAI,CAAC,GAAG,GAAG;QACzD,EAAE;QACF,0EAA0E;QAC1E,2EAA2E;QAC3E,wCAAwC;QACxC,EAAE;QACF,2EAA2E;QAC3E,2FAA2F;QAC3F,qIAAqI,IAAI,CAAC,eAAe,IAAI;QAC7J,GAAG,CAAC,IAAI,CAAC,QAAQ;YACb,CAAC,CAAC;gBACI,EAAE;gBACF,8FAA8F,IAAI,CAAC,eAAe,2BAA2B;aAChJ;YACH,CAAC,CAAC,EAAE,CAAC;QACT,EAAE;QACF,4GAA4G;KAC/G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,uEAAuE;AACvE,SAAS,OAAO,CAAC,EAAU;IACvB,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACrD,OAAO;QACH,+BAA+B;QAC/B,EAAE;QACF,aAAa,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACtC,aAAa,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;QAC5C,aAAa,IAAI,CAAC,eAAe,EAAE;QACnC,EAAE;QACF,kEAAkE;QAClE,EAAE;QACF,KAAK;QACL,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAsB;IAC3D,OAAO,CACH,4CAA4C,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;QACvE,wBAAwB,IAAI,CAAC,eAAe,GAAG,CAClD,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAqB;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO;QACH,kFAAkF;QAClF,EAAE;QACF,WAAW,MAAM,EAAE;QACnB,EAAE;QACF,oFAAoF;QACpF,qFAAqF;QACrF,8EAA8E;QAC9E,EAAE;QACF,iFAAiF;QACjF,iFAAiF;QACjF,EAAE;QACF,KAAK;QACL,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { MemWalCredentials } from "./auth.js";
|
|
2
|
+
export type RecoveryOutcome =
|
|
3
|
+
/** Nothing was pending. The overwhelmingly common case. */
|
|
4
|
+
"no-pending"
|
|
5
|
+
/** Key was registered; `credentials.json` has been rebuilt from it. */
|
|
6
|
+
| "recovered"
|
|
7
|
+
/** A newer sign-in already happened — the pending key is stale. */
|
|
8
|
+
| "superseded"
|
|
9
|
+
/** Relayer would not authenticate the key. Deliberately non-destructive. */
|
|
10
|
+
| "rejected"
|
|
11
|
+
/** Relayer unreachable or erroring. Record kept for a later attempt. */
|
|
12
|
+
| "unavailable";
|
|
13
|
+
export interface RecoveryResult {
|
|
14
|
+
outcome: RecoveryOutcome;
|
|
15
|
+
/** Set when a key may be registered on-chain but is not usable locally. */
|
|
16
|
+
strandedPublicKey?: string;
|
|
17
|
+
credentials?: MemWalCredentials;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build the exact string the relayer will rebuild and verify against.
|
|
21
|
+
*
|
|
22
|
+
* `services/server/src/auth.rs` calls itself the single source of truth for
|
|
23
|
+
* this format, and it is reproduced here rather than imported because the two
|
|
24
|
+
* live in different languages. That duplication is the risk: get it subtly
|
|
25
|
+
* wrong — a trimmed trailing separator, a missing empty field — and every
|
|
26
|
+
* recovery attempt fails with an opaque 401 that no type checker would have
|
|
27
|
+
* caught. Exported so a test can pin it against the identical literal asserted
|
|
28
|
+
* in `routes::accounts::tests::whoami_recovery_request_canonical_message_is_stable`.
|
|
29
|
+
*
|
|
30
|
+
* `accountId` is empty for recovery: not knowing it is the reason we are here,
|
|
31
|
+
* and the server defaults its hint to `""` when the header is absent.
|
|
32
|
+
*/
|
|
33
|
+
export declare function canonicalRequestMessage(parts: {
|
|
34
|
+
timestamp: string;
|
|
35
|
+
method: string;
|
|
36
|
+
path: string;
|
|
37
|
+
bodyHash: string;
|
|
38
|
+
nonce: string;
|
|
39
|
+
accountId?: string;
|
|
40
|
+
}): string;
|
|
41
|
+
/** sha256 of an empty body. A GET sends none; the server hashes it anyway. */
|
|
42
|
+
export declare const EMPTY_BODY_SHA256: string;
|
|
43
|
+
/**
|
|
44
|
+
* Attempt to turn a stranded pending login into usable credentials.
|
|
45
|
+
*
|
|
46
|
+
* Never throws, and never deletes a record that might still be recoverable —
|
|
47
|
+
* a stranded key is the user's paid-for property, and the cost of keeping it
|
|
48
|
+
* around until its TTL is a file that grants nothing.
|
|
49
|
+
*/
|
|
50
|
+
export declare function recoverPendingLogin(): Promise<RecoveryResult>;
|
|
51
|
+
/**
|
|
52
|
+
* The line to show the user when a stranded key could not be reclaimed.
|
|
53
|
+
*
|
|
54
|
+
* Names the key so the user can find the registration they paid for in the
|
|
55
|
+
* dashboard. Signing in again reuses this key, and the dashboard's
|
|
56
|
+
* `add_delegate_key` aborts on one that is already registered, so a key the
|
|
57
|
+
* user approved has to be removed there before a new sign-in can finish. A
|
|
58
|
+
* user told only "login failed" can do neither.
|
|
59
|
+
*/
|
|
60
|
+
export declare function formatStrandedLoginNotice(result: RecoveryResult): string | null;
|
|
61
|
+
//# sourceMappingURL=recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAKnD,MAAM,MAAM,eAAe;AACvB,2DAA2D;AACzD,YAAY;AACd,uEAAuE;GACrE,WAAW;AACb,mEAAmE;GACjE,YAAY;AACd,4EAA4E;GAC1E,UAAU;AACZ,wEAAwE;GACtE,aAAa,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACnC;AA2BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAGT;AAED,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,QAAgD,CAAC;AAkE/E;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC,CAkFnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAgC/E"}
|
package/dist/recovery.js
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recovery for a login that was interrupted after the browser registered our
|
|
3
|
+
* delegate key on-chain but before the callback could save it (WALM-332).
|
|
4
|
+
*
|
|
5
|
+
* `loginFlow` write-aheads the keypair to `login-pending.json` before the
|
|
6
|
+
* browser can act, so the key itself survives losing the process. What does
|
|
7
|
+
* not survive is the metadata the callback would have carried — `accountId`,
|
|
8
|
+
* `walletAddress`, `packageId` — and `credentials.json` is not loadable
|
|
9
|
+
* without them. `GET /api/whoami` closes that gap: the relayer resolves the
|
|
10
|
+
* account from the delegate key during authentication anyway, so it can hand
|
|
11
|
+
* back the identity the key already proves.
|
|
12
|
+
*/
|
|
13
|
+
import { randomUUID, createHash } from "node:crypto";
|
|
14
|
+
import { loadCreds, saveCreds, loadPendingLogin, clearPendingLogin } from "./auth.js";
|
|
15
|
+
import { signMessage } from "./crypto.js";
|
|
16
|
+
import { log } from "./logger.js";
|
|
17
|
+
/** Same wall-clock budget as a normal cold-start probe: recovery must never
|
|
18
|
+
* be the reason a client hangs at startup. */
|
|
19
|
+
const WHOAMI_TIMEOUT_MS = 10_000;
|
|
20
|
+
/** `x-auth-error` value the relayer sets when it could not reach Sui to check
|
|
21
|
+
* the key at all. Named in `services/server/src/auth.rs`. */
|
|
22
|
+
const AUTH_UPSTREAM_UNAVAILABLE = "AUTH_UPSTREAM_UNAVAILABLE";
|
|
23
|
+
function isWhoami(o) {
|
|
24
|
+
if (!o || typeof o !== "object")
|
|
25
|
+
return false;
|
|
26
|
+
const w = o;
|
|
27
|
+
return (typeof w.account_id === "string" &&
|
|
28
|
+
/^0x[0-9a-fA-F]{64}$/.test(w.account_id) &&
|
|
29
|
+
typeof w.owner === "string" &&
|
|
30
|
+
typeof w.package_id === "string");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build the exact string the relayer will rebuild and verify against.
|
|
34
|
+
*
|
|
35
|
+
* `services/server/src/auth.rs` calls itself the single source of truth for
|
|
36
|
+
* this format, and it is reproduced here rather than imported because the two
|
|
37
|
+
* live in different languages. That duplication is the risk: get it subtly
|
|
38
|
+
* wrong — a trimmed trailing separator, a missing empty field — and every
|
|
39
|
+
* recovery attempt fails with an opaque 401 that no type checker would have
|
|
40
|
+
* caught. Exported so a test can pin it against the identical literal asserted
|
|
41
|
+
* in `routes::accounts::tests::whoami_recovery_request_canonical_message_is_stable`.
|
|
42
|
+
*
|
|
43
|
+
* `accountId` is empty for recovery: not knowing it is the reason we are here,
|
|
44
|
+
* and the server defaults its hint to `""` when the header is absent.
|
|
45
|
+
*/
|
|
46
|
+
export function canonicalRequestMessage(parts) {
|
|
47
|
+
const { timestamp, method, path, bodyHash, nonce, accountId = "" } = parts;
|
|
48
|
+
return `${timestamp}.${method}.${path}.${bodyHash}.${nonce}.${accountId}`;
|
|
49
|
+
}
|
|
50
|
+
/** sha256 of an empty body. A GET sends none; the server hashes it anyway. */
|
|
51
|
+
export const EMPTY_BODY_SHA256 = createHash("sha256").update("").digest("hex");
|
|
52
|
+
/**
|
|
53
|
+
* Ask the relayer who this delegate key belongs to.
|
|
54
|
+
*
|
|
55
|
+
* The account id is signed as an empty string and its header omitted, because
|
|
56
|
+
* not knowing it is the entire reason we are here. The server defaults the
|
|
57
|
+
* hint to `""` when the header is absent, so both sides build the same
|
|
58
|
+
* canonical message.
|
|
59
|
+
*
|
|
60
|
+
* Returns null only when the request never produced a response at all.
|
|
61
|
+
*/
|
|
62
|
+
async function whoami(relayerUrl, privateKeyHex, publicKeyHex) {
|
|
63
|
+
const path = "/api/whoami";
|
|
64
|
+
// SECONDS. `services/server/src/auth.rs` freshness-checks `x-timestamp`
|
|
65
|
+
// against `chrono::Utc::now().timestamp()` within a drift window of a few
|
|
66
|
+
// minutes, so a millisecond value (~10^12) is always outside it and every
|
|
67
|
+
// request 401s with ERR_TIMESTAMP_OUT_OF_BOUNDS.
|
|
68
|
+
const timestamp = Math.floor(Date.now() / 1000).toString();
|
|
69
|
+
const nonce = randomUUID();
|
|
70
|
+
const message = canonicalRequestMessage({
|
|
71
|
+
timestamp,
|
|
72
|
+
method: "GET",
|
|
73
|
+
path,
|
|
74
|
+
bodyHash: EMPTY_BODY_SHA256,
|
|
75
|
+
nonce,
|
|
76
|
+
});
|
|
77
|
+
const signature = await signMessage(privateKeyHex, message);
|
|
78
|
+
const controller = new AbortController();
|
|
79
|
+
const timer = setTimeout(() => controller.abort(), WHOAMI_TIMEOUT_MS);
|
|
80
|
+
timer.unref?.();
|
|
81
|
+
try {
|
|
82
|
+
const resp = await fetch(`${relayerUrl.replace(/\/+$/, "")}${path}`, {
|
|
83
|
+
method: "GET",
|
|
84
|
+
headers: {
|
|
85
|
+
"x-public-key": publicKeyHex,
|
|
86
|
+
"x-signature": signature,
|
|
87
|
+
"x-timestamp": timestamp,
|
|
88
|
+
"x-nonce": nonce,
|
|
89
|
+
},
|
|
90
|
+
signal: controller.signal,
|
|
91
|
+
});
|
|
92
|
+
const text = await resp.text();
|
|
93
|
+
let body = null;
|
|
94
|
+
try {
|
|
95
|
+
body = JSON.parse(text);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
/* non-JSON error page — status is what matters */
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
status: resp.status,
|
|
102
|
+
body,
|
|
103
|
+
authError: resp.headers.get("x-auth-error"),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
clearTimeout(timer);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Attempt to turn a stranded pending login into usable credentials.
|
|
115
|
+
*
|
|
116
|
+
* Never throws, and never deletes a record that might still be recoverable —
|
|
117
|
+
* a stranded key is the user's paid-for property, and the cost of keeping it
|
|
118
|
+
* around until its TTL is a file that grants nothing.
|
|
119
|
+
*/
|
|
120
|
+
export async function recoverPendingLogin() {
|
|
121
|
+
const pending = loadPendingLogin();
|
|
122
|
+
if (!pending)
|
|
123
|
+
return { outcome: "no-pending" };
|
|
124
|
+
// Ordering guard. If a later sign-in already succeeded, its credentials
|
|
125
|
+
// are the user's current intent and must not be rolled back to an older
|
|
126
|
+
// stranded key. Note this compares against the *pending* record's start
|
|
127
|
+
// time, so a login begun after the last successful one still wins.
|
|
128
|
+
const existing = loadCreds();
|
|
129
|
+
if (existing && Date.parse(existing.createdAt) >= Date.parse(pending.createdAt)) {
|
|
130
|
+
log.warn("login.pending.superseded", {
|
|
131
|
+
publicKey: pending.delegatePublicKeyHex,
|
|
132
|
+
});
|
|
133
|
+
clearPendingLogin();
|
|
134
|
+
return { outcome: "superseded", strandedPublicKey: pending.delegatePublicKeyHex };
|
|
135
|
+
}
|
|
136
|
+
const res = await whoami(pending.relayerUrl, pending.delegatePrivateKey, pending.delegatePublicKeyHex);
|
|
137
|
+
if (res === null) {
|
|
138
|
+
log.warn("login.pending.relayer_unreachable", {
|
|
139
|
+
publicKey: pending.delegatePublicKeyHex,
|
|
140
|
+
});
|
|
141
|
+
return { outcome: "unavailable", strandedPublicKey: pending.delegatePublicKeyHex };
|
|
142
|
+
}
|
|
143
|
+
if (res.status !== 200 || !isWhoami(res.body)) {
|
|
144
|
+
// `rejected` is reserved for the relayer actually denying this
|
|
145
|
+
// identity, because that is the only outcome whose advice — sign in
|
|
146
|
+
// again, after removing the key from the dashboard if it was already
|
|
147
|
+
// registered — is worth giving. During a transient upstream
|
|
148
|
+
// failure that advice is worse than silence: the key is still good, and
|
|
149
|
+
// `unavailable` correctly says the next start retries it with no action
|
|
150
|
+
// from the user.
|
|
151
|
+
//
|
|
152
|
+
// So only 401/403 is a denial. A 503 carrying
|
|
153
|
+
// `x-auth-error: AUTH_UPSTREAM_UNAVAILABLE` is Sui RPC being down, and
|
|
154
|
+
// 429 / 5xx / a 404 from a relayer too old to serve this route are all
|
|
155
|
+
// "ask again later" — as is a 200 whose body is not a whoami, which
|
|
156
|
+
// means we are not talking to the endpoint we think we are.
|
|
157
|
+
const denied = (res.status === 401 || res.status === 403) &&
|
|
158
|
+
res.authError !== AUTH_UPSTREAM_UNAVAILABLE;
|
|
159
|
+
const outcome = denied ? "rejected" : "unavailable";
|
|
160
|
+
// Non-destructive either way. A 401 is ambiguous even when it IS a
|
|
161
|
+
// denial: on testnet the registry scan is disabled outright and a
|
|
162
|
+
// genuinely registered key is refused for want of an x-account-id hint
|
|
163
|
+
// (services/server/src/auth.rs — "x-account-id is required for
|
|
164
|
+
// delegate-key authentication on testnet"). Clearing here would destroy
|
|
165
|
+
// a recoverable key in exactly that environment, so the record is
|
|
166
|
+
// always left for its TTL to retire.
|
|
167
|
+
log.warn(`login.pending.${outcome}`, {
|
|
168
|
+
publicKey: pending.delegatePublicKeyHex,
|
|
169
|
+
status: res.status,
|
|
170
|
+
authError: res.authError,
|
|
171
|
+
});
|
|
172
|
+
return { outcome, strandedPublicKey: pending.delegatePublicKeyHex };
|
|
173
|
+
}
|
|
174
|
+
const creds = {
|
|
175
|
+
delegatePrivateKey: pending.delegatePrivateKey,
|
|
176
|
+
delegatePublicKeyHex: pending.delegatePublicKeyHex,
|
|
177
|
+
delegateAddress: pending.delegateAddress,
|
|
178
|
+
walletAddress: res.body.owner,
|
|
179
|
+
accountId: res.body.account_id,
|
|
180
|
+
packageId: res.body.package_id,
|
|
181
|
+
relayerUrl: pending.relayerUrl,
|
|
182
|
+
label: pending.label,
|
|
183
|
+
createdAt: new Date().toISOString(),
|
|
184
|
+
version: 1,
|
|
185
|
+
};
|
|
186
|
+
saveCreds(creds);
|
|
187
|
+
clearPendingLogin();
|
|
188
|
+
log.info("login.pending.recovered", {
|
|
189
|
+
accountId: creds.accountId,
|
|
190
|
+
delegateAddress: creds.delegateAddress,
|
|
191
|
+
});
|
|
192
|
+
return { outcome: "recovered", credentials: creds };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The line to show the user when a stranded key could not be reclaimed.
|
|
196
|
+
*
|
|
197
|
+
* Names the key so the user can find the registration they paid for in the
|
|
198
|
+
* dashboard. Signing in again reuses this key, and the dashboard's
|
|
199
|
+
* `add_delegate_key` aborts on one that is already registered, so a key the
|
|
200
|
+
* user approved has to be removed there before a new sign-in can finish. A
|
|
201
|
+
* user told only "login failed" can do neither.
|
|
202
|
+
*/
|
|
203
|
+
export function formatStrandedLoginNotice(result) {
|
|
204
|
+
if (!result.strandedPublicKey)
|
|
205
|
+
return null;
|
|
206
|
+
if (result.outcome === "recovered" || result.outcome === "no-pending")
|
|
207
|
+
return null;
|
|
208
|
+
const key = result.strandedPublicKey;
|
|
209
|
+
const lines = [
|
|
210
|
+
`⚠️ Your last Walrus Memory sign-in did not finish.`,
|
|
211
|
+
``,
|
|
212
|
+
`A delegate key may have been registered on-chain without being saved locally:`,
|
|
213
|
+
` ${key}`,
|
|
214
|
+
``,
|
|
215
|
+
];
|
|
216
|
+
if (result.outcome === "superseded") {
|
|
217
|
+
lines.push(`You have since signed in again, so your current credentials are fine.`, `Revoke the key above from the dashboard if you don't recognise it.`);
|
|
218
|
+
}
|
|
219
|
+
else if (result.outcome === "unavailable") {
|
|
220
|
+
lines.push(`The relayer could not be reached to check. This will be retried on the`, `next start — no action needed yet.`);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
lines.push(`The relayer did not accept it. If you never approved the wallet step, run`, `\`memwal_login\`: it reuses this key. If you did, remove the key above from`, `the dashboard first and then run \`memwal_login\`, because the wallet step`, `cannot register a key that is already there. This is expected on Testnet,`, `where the relayer cannot confirm a registered key at start.`);
|
|
224
|
+
}
|
|
225
|
+
return lines.join("\n");
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { JSONRPCMessage } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import type { MemWalCredentials } from "./auth.js";
|
|
3
|
+
/** Which relayer transport the bridge dials. */
|
|
4
|
+
export type TransportKind = "sse" | "http";
|
|
5
|
+
/**
|
|
6
|
+
* Resolve the transport from `MEMWAL_MCP_TRANSPORT`.
|
|
7
|
+
*
|
|
8
|
+
* Defaults to `sse`, the transport every released bridge has used. Streamable
|
|
9
|
+
* HTTP is opt-in until it has production mileage: this runs on users' machines
|
|
10
|
+
* against their real memories, so the new path proves itself before it becomes
|
|
11
|
+
* the one that runs by default.
|
|
12
|
+
*
|
|
13
|
+
* An unrecognised value falls back rather than throwing — a typo in a user's
|
|
14
|
+
* MCP config must not stop their memory from working.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveTransport(raw: string | undefined): TransportKind;
|
|
17
|
+
/**
|
|
18
|
+
* The Streamable HTTP endpoint for a relayer base URL.
|
|
19
|
+
*
|
|
20
|
+
* `/api/mcp` — the same base the SSE transport hangs `/api/mcp/sse` and
|
|
21
|
+
* `/api/mcp/messages` off, minus the split.
|
|
22
|
+
*/
|
|
23
|
+
export declare function streamableUrl(relayerUrl: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* A live relayer session. Deliberately the same shape the SSE handshake
|
|
26
|
+
* returns, so `runBridge` can hold either without branching on transport
|
|
27
|
+
* everywhere it forwards a message.
|
|
28
|
+
*/
|
|
29
|
+
export interface RelaySession {
|
|
30
|
+
/** Endpoint this session talks to. Logging only. */
|
|
31
|
+
postUrl: string;
|
|
32
|
+
/**
|
|
33
|
+
* Forward one JSON-RPC message. Resolves with an HTTP-ish status the
|
|
34
|
+
* caller can act on: 200 for accepted, 404 when the relayer says the
|
|
35
|
+
* session does not exist (the message provably did not run, so the
|
|
36
|
+
* caller may retry it without risking a duplicate write).
|
|
37
|
+
*/
|
|
38
|
+
send(msg: JSONRPCMessage,
|
|
39
|
+
/** Unused here — headers are bound when the session opens. Present so
|
|
40
|
+
* this matches the SSE handshake's `send`, which signs per POST. */
|
|
41
|
+
creds?: MemWalCredentials, extra?: Record<string, string>): Promise<number>;
|
|
42
|
+
/** Incoming messages from the relayer. */
|
|
43
|
+
iter: AsyncIterator<JSONRPCMessage>;
|
|
44
|
+
/** Tear the session down. */
|
|
45
|
+
abort: () => void;
|
|
46
|
+
}
|
|
47
|
+
export declare function openStreamableSession(relayerUrl: string, creds: MemWalCredentials, extraHeaders?: Record<string, string>): Promise<RelaySession>;
|
|
48
|
+
//# sourceMappingURL=streamable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamable.d.ts","sourceRoot":"","sources":["../src/streamable.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGnD,gDAAgD;AAChD,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CASvE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,IAAI,CACA,GAAG,EAAE,cAAc;IACnB;wEACoE;IACpE,KAAK,CAAC,EAAE,iBAAiB,EACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,0CAA0C;IAC1C,IAAI,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACpC,6BAA6B;IAC7B,KAAK,EAAE,MAAM,IAAI,CAAC;CACrB;AAQD,wBAAsB,qBAAqB,CACvC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,EACxB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC1C,OAAO,CAAC,YAAY,CAAC,CA+EvB"}
|