@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/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
- const keypair = await generateKeypair();
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, a delegate key may exist on-chain without local credentials. Remove unused keys from the dashboard, then run login again.`);
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, onFailure) {
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
- /* caller errors don't break the flow */
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
- await onSuccess(creds);
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((err) => {
443
- log.warn("login.inflight.failed", {
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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"}
@@ -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
@@ -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;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAehE"}
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
- "The unused key from this attempt may already be registered on your account. Remove it",
103
- "from the dashboard if you are not using it. Sign in again and open the new link",
104
- "straight away. A retry only helps once the MCP client is left running through the",
105
- "wallet prompt.",
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
  "",
@@ -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;;;;;;;;;;GAUG;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,uFAAuF;QACvF,iFAAiF;QACjF,mFAAmF;QACnF,gBAAgB;QAChB,EAAE;QACF,KAAK;QACL,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC"}
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"}
@@ -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"}