agentcash 0.7.7 → 0.8.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.
Files changed (54) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/run-server.cjs +59 -28
  3. package/dist/esm/{chunk-5EMDWOPZ.js → chunk-4R52CY5Q.js} +23 -23
  4. package/dist/esm/chunk-4R52CY5Q.js.map +1 -0
  5. package/dist/esm/{chunk-2XMLNLWS.js → chunk-5ELAEV2M.js} +9 -7
  6. package/dist/esm/{chunk-2XMLNLWS.js.map → chunk-5ELAEV2M.js.map} +1 -1
  7. package/dist/esm/{chunk-SRV57WB2.js → chunk-62B3GENJ.js} +8 -6
  8. package/dist/esm/{chunk-SRV57WB2.js.map → chunk-62B3GENJ.js.map} +1 -1
  9. package/dist/esm/{chunk-TRPO7BKD.js → chunk-6PU3XK6I.js} +8 -228
  10. package/dist/esm/chunk-6PU3XK6I.js.map +1 -0
  11. package/dist/esm/{chunk-FLIDR6EU.js → chunk-7ZEXMJYJ.js} +5 -3
  12. package/dist/esm/{chunk-FLIDR6EU.js.map → chunk-7ZEXMJYJ.js.map} +1 -1
  13. package/dist/esm/{chunk-QPL3AVUK.js → chunk-C36IAW7R.js} +5 -3
  14. package/dist/esm/{chunk-QPL3AVUK.js.map → chunk-C36IAW7R.js.map} +1 -1
  15. package/dist/esm/chunk-FBPC4LGY.js +7 -0
  16. package/dist/esm/{chunk-PWYZN62H.js → chunk-OHA3LLUQ.js} +3 -3
  17. package/dist/esm/{chunk-24E2V3PA.js → chunk-UN3PRLTL.js} +15 -43
  18. package/dist/esm/chunk-UN3PRLTL.js.map +1 -0
  19. package/dist/esm/{chunk-JKCEMNAF.js → chunk-VR5I67WE.js} +2 -2
  20. package/dist/esm/{chunk-XNU6FVCF.js → chunk-W7DAJMFQ.js} +87 -19
  21. package/dist/esm/chunk-W7DAJMFQ.js.map +1 -0
  22. package/dist/esm/chunk-YQFK4U62.js +230 -0
  23. package/dist/esm/chunk-YQFK4U62.js.map +1 -0
  24. package/dist/esm/{chunk-X6KM3YLG.js → chunk-Z2R7VYNM.js} +11 -9
  25. package/dist/esm/{chunk-X6KM3YLG.js.map → chunk-Z2R7VYNM.js.map} +1 -1
  26. package/dist/esm/chunk-ZDDDU5O2.js +41 -0
  27. package/dist/esm/chunk-ZDDDU5O2.js.map +1 -0
  28. package/dist/esm/{chunk-KPEJO3KV.js → chunk-ZOVLXKVL.js} +8 -8
  29. package/dist/esm/chunk-ZOVLXKVL.js.map +1 -0
  30. package/dist/esm/{commands-IFU565JX.js → commands-YSOBBE4N.js} +625 -504
  31. package/dist/esm/commands-YSOBBE4N.js.map +1 -0
  32. package/dist/esm/{fund-N47ZRBRZ.js → fund-PRV53MDA.js} +7 -5
  33. package/dist/esm/{fund-N47ZRBRZ.js.map → fund-PRV53MDA.js.map} +1 -1
  34. package/dist/esm/index.js +65 -23
  35. package/dist/esm/index.js.map +1 -1
  36. package/dist/esm/{install-WJ645IFJ.js → install-QT37XD4R.js} +10 -8
  37. package/dist/esm/{install-WJ645IFJ.js.map → install-QT37XD4R.js.map} +1 -1
  38. package/dist/esm/lib.js +4 -3
  39. package/dist/esm/{server-VU3UAM7K.js → server-QARME5NA.js} +26 -19
  40. package/dist/esm/server-QARME5NA.js.map +1 -0
  41. package/dist/esm/shared/operations/index.js +7 -6
  42. package/dist/esm/shared/operations/index.js.map +1 -1
  43. package/package.json +1 -1
  44. package/dist/esm/chunk-24E2V3PA.js.map +0 -1
  45. package/dist/esm/chunk-5EMDWOPZ.js.map +0 -1
  46. package/dist/esm/chunk-KPEJO3KV.js.map +0 -1
  47. package/dist/esm/chunk-L7FC4RVF.js +0 -7
  48. package/dist/esm/chunk-TRPO7BKD.js.map +0 -1
  49. package/dist/esm/chunk-XNU6FVCF.js.map +0 -1
  50. package/dist/esm/commands-IFU565JX.js.map +0 -1
  51. package/dist/esm/server-VU3UAM7K.js.map +0 -1
  52. /package/dist/esm/{chunk-L7FC4RVF.js.map → chunk-FBPC4LGY.js.map} +0 -0
  53. /package/dist/esm/{chunk-PWYZN62H.js.map → chunk-OHA3LLUQ.js.map} +0 -0
  54. /package/dist/esm/{chunk-JKCEMNAF.js.map → chunk-VR5I67WE.js.map} +0 -0
@@ -1,7 +1,3 @@
1
- import {
2
- isVerbose
3
- } from "./chunk-ISR6DJ53.js";
4
-
5
1
  // ../../../node_modules/.pnpm/neverthrow@8.2.0/node_modules/neverthrow/dist/index.es.js
6
2
  var defaultErrorConfig = {
7
3
  withStackTrace: false
@@ -479,53 +475,31 @@ var Err = class {
479
475
  var fromThrowable = Result.fromThrowable;
480
476
 
481
477
  // ../../internal/neverthrow/dist/index.js
482
- function resultFromPromise(type2, surface, promise, error) {
478
+ function resultFromPromise(type, surface, promise, error) {
483
479
  return ResultAsync.fromPromise(promise, (e) => ({
484
480
  ...error(e),
485
- type: type2,
481
+ type,
486
482
  surface
487
483
  }));
488
484
  }
489
- function resultFromThrowable(type2, surface, fn, error) {
485
+ function resultFromThrowable(type, surface, fn, error) {
490
486
  return Result.fromThrowable(fn, (e) => ({
491
487
  ...error(e),
492
- type: type2,
488
+ type,
493
489
  surface
494
490
  }))();
495
491
  }
496
492
  function ok2(data) {
497
493
  return ok(data);
498
494
  }
499
- function err2(type2, surface, error) {
495
+ function err2(type, surface, error) {
500
496
  return err({
501
497
  ...error,
502
- type: type2,
498
+ type,
503
499
  surface
504
500
  });
505
501
  }
506
502
 
507
- // src/shared/neverthrow/fs/index.ts
508
- import { readFile, writeFile, appendFile, chmod } from "fs/promises";
509
- var errorType = "fs";
510
- var fsErr = (surface, error) => err2(errorType, surface, error);
511
- var fsResultFromPromise = (surface, promise, error) => resultFromPromise(errorType, surface, promise, error);
512
- var safeReadFile = (surface, path) => fsResultFromPromise(surface, readFile(path, "utf-8"), () => ({
513
- cause: "file_not_readable",
514
- message: "Failed to read file"
515
- }));
516
- var safeWriteFile = (surface, path, data) => fsResultFromPromise(surface, writeFile(path, data), () => ({
517
- cause: "file_not_writable",
518
- message: "Failed to write file"
519
- }));
520
- var safeAppendFile = (surface, path, data) => fsResultFromPromise(surface, appendFile(path, data), () => ({
521
- cause: "file_not_writable",
522
- message: "Failed to append file"
523
- }));
524
- var safeChmod = (surface, path, mode) => fsResultFromPromise(surface, chmod(path, mode), () => ({
525
- cause: "file_not_chmodable",
526
- message: "Failed to chmod file"
527
- }));
528
-
529
503
  // src/shared/fs.ts
530
504
  import { join } from "path";
531
505
  import { homedir } from "os";
@@ -576,206 +550,12 @@ var configFile = (name) => {
576
550
  return filePath;
577
551
  };
578
552
 
579
- // src/shared/log.ts
580
- var logFile;
581
- function getLogFile() {
582
- if (logFile === void 0) {
583
- const result = resultFromThrowable(
584
- "log",
585
- "log",
586
- () => configFile("mcp.log"),
587
- (e) => ({
588
- cause: "log_init",
589
- message: e instanceof Error ? e.message : String(e)
590
- })
591
- );
592
- logFile = result.isOk() ? result.value : null;
593
- }
594
- return logFile;
595
- }
596
- function format(args) {
597
- return args.map(
598
- (a) => typeof a === "object" && a !== null ? JSON.stringify(a) : String(a)
599
- ).join(" ");
600
- }
601
- function write(level, msg, args) {
602
- const formatted = args.length ? `${msg} ${format(args)}` : msg;
603
- const line = `[${(/* @__PURE__ */ new Date()).toISOString()}] [${level}] ${formatted}
604
- `;
605
- const file = getLogFile();
606
- if (file) safeAppendFile("log", file, line);
607
- if (isVerbose()) {
608
- console.error(`[agentcash] ${formatted}`);
609
- }
610
- }
611
- var log = {
612
- info: (msg, ...args) => write("INFO", msg, args),
613
- error: (msg, ...args) => write("ERROR", msg, args),
614
- debug: (msg, ...args) => isVerbose() && write("DEBUG", msg, args),
615
- get path() {
616
- return getLogFile();
617
- }
618
- };
619
-
620
- // src/shared/neverthrow/parse/index.ts
621
- import z from "zod";
622
- var type = "json";
623
- var parseErr = (surface, error) => err2(type, surface, error);
624
- var safeParse = (surface, schema, value) => {
625
- const parseResult = schema.safeParse(value);
626
- if (!parseResult.success) {
627
- return parseErr(surface, {
628
- cause: "invalid_data",
629
- message: JSON.stringify(z.treeifyError(parseResult.error), null, 2),
630
- error: parseResult.error
631
- });
632
- }
633
- return ok2(parseResult.data);
634
- };
635
-
636
- // src/shared/neverthrow/fetch/index.ts
637
- import contentType from "content-type";
638
- var DEFAULT_FETCH_TIMEOUT = 1e4;
639
- var DEFAULT_USER_FETCH_TIMEOUT = 3e4;
640
- var IMAGE_TYPES = /* @__PURE__ */ new Set([
641
- "image/png",
642
- "image/jpeg",
643
- "image/gif",
644
- "image/webp",
645
- "image/svg+xml",
646
- "image/tiff",
647
- "image/bmp",
648
- "image/ico"
649
- ]);
650
- var errorType2 = "fetch";
651
- var fetchErr = (surface, error) => err2(errorType2, surface, error);
652
- var fetchOk = (value) => ok2(value);
653
- var fetchHttpErr = (surface, response) => fetchErr(surface, {
654
- cause: "http",
655
- statusCode: response.status,
656
- message: response.statusText,
657
- response
658
- });
659
- var safeFetch = (surface, request, timeout) => {
660
- const signal = timeout ? AbortSignal.timeout(timeout) : void 0;
661
- return resultFromPromise(
662
- errorType2,
663
- surface,
664
- fetch(request, ...signal ? [{ signal }] : []),
665
- (error) => {
666
- if (error instanceof DOMException && (error.name === "TimeoutError" || error.name === "AbortError")) {
667
- return {
668
- cause: "timeout",
669
- message: timeout ? `Request timed out after ${timeout}ms. You can increase the timeout by passing a larger value in the 'timeout' parameter.` : "Request was aborted"
670
- };
671
- }
672
- return {
673
- cause: "network",
674
- message: error instanceof Error ? error.message : "Network error"
675
- };
676
- }
677
- );
678
- };
679
- var safeFetchJson = (surface, request, schema, timeout) => {
680
- return safeFetch(surface, request, timeout).andThen((response) => {
681
- if (!response.ok) {
682
- return fetchHttpErr(surface, response);
683
- }
684
- return resultFromPromise(errorType2, surface, response.json(), () => ({
685
- cause: "parse",
686
- message: "Could not parse JSON from response",
687
- statusCode: response.status,
688
- contentType: response.headers.get("content-type") ?? "Not specified"
689
- }));
690
- }).andThen((data) => safeParse(surface, schema, data));
691
- };
692
- var safeParseResponse = (surface, response) => {
693
- return resultFromPromise(
694
- errorType2,
695
- surface,
696
- (async () => {
697
- const header = response.headers.get("content-type");
698
- const { type: mimeType } = header ? contentType.parse(header) : { type: "application/octet-stream" };
699
- switch (mimeType) {
700
- case "application/json":
701
- return {
702
- type: "json",
703
- data: await response.json()
704
- };
705
- case "application/pdf":
706
- return {
707
- type: "pdf",
708
- mimeType,
709
- data: await response.arrayBuffer()
710
- };
711
- case "application/octet-stream":
712
- return {
713
- type: "octet-stream",
714
- mimeType,
715
- data: await response.arrayBuffer()
716
- };
717
- case "multipart/form-data":
718
- return { type: "formData", data: await response.formData() };
719
- }
720
- if (IMAGE_TYPES.has(mimeType)) {
721
- return {
722
- type: "image",
723
- mimeType,
724
- data: await response.arrayBuffer()
725
- };
726
- }
727
- if (mimeType.startsWith("audio/")) {
728
- return {
729
- type: "audio",
730
- mimeType,
731
- data: await response.arrayBuffer()
732
- };
733
- }
734
- if (mimeType.startsWith("video/")) {
735
- return {
736
- type: "video",
737
- mimeType,
738
- data: await response.arrayBuffer()
739
- };
740
- }
741
- if (mimeType.startsWith("text/")) {
742
- return { type: "text", data: await response.text() };
743
- }
744
- throw new Error(`Unsupported content type: ${header}`);
745
- })(),
746
- (e) => ({
747
- cause: "parse",
748
- message: e instanceof Error ? e.message : "Could not parse response",
749
- statusCode: response.status,
750
- contentType: response.headers.get("content-type") ?? "Not specified"
751
- })
752
- );
753
- };
754
- var isFetchError = (error) => {
755
- return error.type === errorType2;
756
- };
757
-
758
553
  export {
759
554
  resultFromPromise,
760
555
  resultFromThrowable,
761
556
  ok2 as ok,
762
557
  err2 as err,
763
- safeParse,
764
- DEFAULT_FETCH_TIMEOUT,
765
- DEFAULT_USER_FETCH_TIMEOUT,
766
- fetchErr,
767
- fetchOk,
768
- fetchHttpErr,
769
- safeFetch,
770
- safeFetchJson,
771
- safeParseResponse,
772
- isFetchError,
773
- fsErr,
774
- safeReadFile,
775
- safeWriteFile,
776
- safeChmod,
777
558
  LEGACY_DIRECTORY,
778
- configFile,
779
- log
559
+ configFile
780
560
  };
781
- //# sourceMappingURL=chunk-TRPO7BKD.js.map
561
+ //# sourceMappingURL=chunk-6PU3XK6I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../node_modules/.pnpm/neverthrow@8.2.0/node_modules/neverthrow/dist/index.es.js","../../../../internal/neverthrow/src/index.ts","../../src/shared/fs.ts"],"sourcesContent":["const defaultErrorConfig = {\r\n withStackTrace: false,\r\n};\r\n// Custom error object\r\n// Context / discussion: https://github.com/supermacro/neverthrow/pull/215\r\nconst createNeverThrowError = (message, result, config = defaultErrorConfig) => {\r\n const data = result.isOk()\r\n ? { type: 'Ok', value: result.value }\r\n : { type: 'Err', value: result.error };\r\n const maybeStack = config.withStackTrace ? new Error().stack : undefined;\r\n return {\r\n data,\r\n message,\r\n stack: maybeStack,\r\n };\r\n};\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nfunction __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nclass ResultAsync {\r\n constructor(res) {\r\n this._promise = res;\r\n }\r\n static fromSafePromise(promise) {\r\n const newPromise = promise.then((value) => new Ok(value));\r\n return new ResultAsync(newPromise);\r\n }\r\n static fromPromise(promise, errorFn) {\r\n const newPromise = promise\r\n .then((value) => new Ok(value))\r\n .catch((e) => new Err(errorFn(e)));\r\n return new ResultAsync(newPromise);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n static fromThrowable(fn, errorFn) {\r\n return (...args) => {\r\n return new ResultAsync((() => __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n return new Ok(yield fn(...args));\r\n }\r\n catch (error) {\r\n return new Err(errorFn ? errorFn(error) : error);\r\n }\r\n }))());\r\n };\r\n }\r\n static combine(asyncResultList) {\r\n return combineResultAsyncList(asyncResultList);\r\n }\r\n static combineWithAllErrors(asyncResultList) {\r\n return combineResultAsyncListWithAllErrors(asyncResultList);\r\n }\r\n map(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n return new Ok(yield f(res.value));\r\n })));\r\n }\r\n andThrough(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n const newRes = yield f(res.value);\r\n if (newRes.isErr()) {\r\n return new Err(newRes.error);\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n andTee(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n try {\r\n yield f(res.value);\r\n }\r\n catch (e) {\r\n // Tee does not care about the error\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n orTee(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isOk()) {\r\n return new Ok(res.value);\r\n }\r\n try {\r\n yield f(res.error);\r\n }\r\n catch (e) {\r\n // Tee does not care about the error\r\n }\r\n return new Err(res.error);\r\n })));\r\n }\r\n mapErr(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isOk()) {\r\n return new Ok(res.value);\r\n }\r\n return new Err(yield f(res.error));\r\n })));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(f) {\r\n return new ResultAsync(this._promise.then((res) => {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n const newValue = f(res.value);\r\n return newValue instanceof ResultAsync ? newValue._promise : newValue;\r\n }));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return f(res.error);\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n match(ok, _err) {\r\n return this._promise.then((res) => res.match(ok, _err));\r\n }\r\n unwrapOr(t) {\r\n return this._promise.then((res) => res.unwrapOr(t));\r\n }\r\n /**\r\n * @deprecated will be removed in 9.0.0.\r\n *\r\n * You can use `safeTry` without this method.\r\n * @example\r\n * ```typescript\r\n * safeTry(async function* () {\r\n * const okValue = yield* yourResult\r\n * })\r\n * ```\r\n * Emulates Rust's `?` operator in `safeTry`'s body. See also `safeTry`.\r\n */\r\n safeUnwrap() {\r\n return __asyncGenerator(this, arguments, function* safeUnwrap_1() {\r\n return yield __await(yield __await(yield* __asyncDelegator(__asyncValues(yield __await(this._promise.then((res) => res.safeUnwrap()))))));\r\n });\r\n }\r\n // Makes ResultAsync implement PromiseLike<Result>\r\n then(successCallback, failureCallback) {\r\n return this._promise.then(successCallback, failureCallback);\r\n }\r\n [Symbol.asyncIterator]() {\r\n return __asyncGenerator(this, arguments, function* _a() {\r\n const result = yield __await(this._promise);\r\n if (result.isErr()) {\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n yield yield __await(errAsync(result.error));\r\n }\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n return yield __await(result.value);\r\n });\r\n }\r\n}\r\nfunction okAsync(value) {\r\n return new ResultAsync(Promise.resolve(new Ok(value)));\r\n}\r\nfunction errAsync(err) {\r\n return new ResultAsync(Promise.resolve(new Err(err)));\r\n}\r\nconst fromPromise = ResultAsync.fromPromise;\r\nconst fromSafePromise = ResultAsync.fromSafePromise;\r\nconst fromAsyncThrowable = ResultAsync.fromThrowable;\n\n/**\r\n * Short circuits on the FIRST Err value that we find\r\n */\r\nconst combineResultList = (resultList) => {\r\n let acc = ok([]);\r\n for (const result of resultList) {\r\n if (result.isErr()) {\r\n acc = err(result.error);\r\n break;\r\n }\r\n else {\r\n acc.map((list) => list.push(result.value));\r\n }\r\n }\r\n return acc;\r\n};\r\n/* This is the typesafe version of Promise.all\r\n *\r\n * Takes a list of ResultAsync<T, E> and success if all inner results are Ok values\r\n * or fails if one (or more) of the inner results are Err values\r\n */\r\nconst combineResultAsyncList = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultList);\r\n/**\r\n * Give a list of all the errors we find\r\n */\r\nconst combineResultListWithAllErrors = (resultList) => {\r\n let acc = ok([]);\r\n for (const result of resultList) {\r\n if (result.isErr() && acc.isErr()) {\r\n acc.error.push(result.error);\r\n }\r\n else if (result.isErr() && acc.isOk()) {\r\n acc = err([result.error]);\r\n }\r\n else if (result.isOk() && acc.isOk()) {\r\n acc.value.push(result.value);\r\n }\r\n // do nothing when result.isOk() && acc.isErr()\r\n }\r\n return acc;\r\n};\r\nconst combineResultAsyncListWithAllErrors = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultListWithAllErrors);\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\r\nvar Result;\r\n(function (Result) {\r\n /**\r\n * Wraps a function with a try catch, creating a new function with the same\r\n * arguments but returning `Ok` if successful, `Err` if the function throws\r\n *\r\n * @param fn function to wrap with ok on success or err on failure\r\n * @param errorFn when an error is thrown, this will wrap the error result if provided\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n function fromThrowable(fn, errorFn) {\r\n return (...args) => {\r\n try {\r\n const result = fn(...args);\r\n return ok(result);\r\n }\r\n catch (e) {\r\n return err(errorFn ? errorFn(e) : e);\r\n }\r\n };\r\n }\r\n Result.fromThrowable = fromThrowable;\r\n function combine(resultList) {\r\n return combineResultList(resultList);\r\n }\r\n Result.combine = combine;\r\n function combineWithAllErrors(resultList) {\r\n return combineResultListWithAllErrors(resultList);\r\n }\r\n Result.combineWithAllErrors = combineWithAllErrors;\r\n})(Result || (Result = {}));\r\nfunction ok(value) {\r\n return new Ok(value);\r\n}\r\nfunction err(err) {\r\n return new Err(err);\r\n}\r\nfunction safeTry(body) {\r\n const n = body().next();\r\n if (n instanceof Promise) {\r\n return new ResultAsync(n.then((r) => r.value));\r\n }\r\n return n.value;\r\n}\r\nclass Ok {\r\n constructor(value) {\r\n this.value = value;\r\n }\r\n isOk() {\r\n return true;\r\n }\r\n isErr() {\r\n return !this.isOk();\r\n }\r\n map(f) {\r\n return ok(f(this.value));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n mapErr(_f) {\r\n return ok(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(f) {\r\n return f(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThrough(f) {\r\n return f(this.value).map((_value) => this.value);\r\n }\r\n andTee(f) {\r\n try {\r\n f(this.value);\r\n }\r\n catch (e) {\r\n // Tee doesn't care about the error\r\n }\r\n return ok(this.value);\r\n }\r\n orTee(_f) {\r\n return ok(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(_f) {\r\n return ok(this.value);\r\n }\r\n asyncAndThen(f) {\r\n return f(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n asyncAndThrough(f) {\r\n return f(this.value).map(() => this.value);\r\n }\r\n asyncMap(f) {\r\n return ResultAsync.fromSafePromise(f(this.value));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n unwrapOr(_v) {\r\n return this.value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n match(ok, _err) {\r\n return ok(this.value);\r\n }\r\n safeUnwrap() {\r\n const value = this.value;\r\n /* eslint-disable-next-line require-yield */\r\n return (function* () {\r\n return value;\r\n })();\r\n }\r\n _unsafeUnwrap(_) {\r\n return this.value;\r\n }\r\n _unsafeUnwrapErr(config) {\r\n throw createNeverThrowError('Called `_unsafeUnwrapErr` on an Ok', this, config);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias, require-yield\r\n *[Symbol.iterator]() {\r\n return this.value;\r\n }\r\n}\r\nclass Err {\r\n constructor(error) {\r\n this.error = error;\r\n }\r\n isOk() {\r\n return false;\r\n }\r\n isErr() {\r\n return !this.isOk();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n map(_f) {\r\n return err(this.error);\r\n }\r\n mapErr(f) {\r\n return err(f(this.error));\r\n }\r\n andThrough(_f) {\r\n return err(this.error);\r\n }\r\n andTee(_f) {\r\n return err(this.error);\r\n }\r\n orTee(f) {\r\n try {\r\n f(this.error);\r\n }\r\n catch (e) {\r\n // Tee doesn't care about the error\r\n }\r\n return err(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(_f) {\r\n return err(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(f) {\r\n return f(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n asyncAndThen(_f) {\r\n return errAsync(this.error);\r\n }\r\n asyncAndThrough(_f) {\r\n return errAsync(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n asyncMap(_f) {\r\n return errAsync(this.error);\r\n }\r\n unwrapOr(v) {\r\n return v;\r\n }\r\n match(_ok, err) {\r\n return err(this.error);\r\n }\r\n safeUnwrap() {\r\n const error = this.error;\r\n return (function* () {\r\n yield err(error);\r\n throw new Error('Do not use this generator out of `safeTry`');\r\n })();\r\n }\r\n _unsafeUnwrap(config) {\r\n throw createNeverThrowError('Called `_unsafeUnwrap` on an Err', this, config);\r\n }\r\n _unsafeUnwrapErr(_) {\r\n return this.error;\r\n }\r\n *[Symbol.iterator]() {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n yield self;\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n return self;\r\n }\r\n}\r\nconst fromThrowable = Result.fromThrowable;\r\n//#endregion\n\nexport { Err, Ok, Result, ResultAsync, err, errAsync, fromAsyncThrowable, fromPromise, fromSafePromise, fromThrowable, ok, okAsync, safeTry };\n","import {\n ResultAsync as NeverthrowResultAsync,\n Result as NeverthrowResult,\n ok as neverthrowOk,\n err as neverthrowErr,\n okAsync as neverthrowOkAsync,\n errAsync as neverthrowErrAsync,\n} from 'neverthrow';\n\nimport type { ResultAsync, BaseError, Error, Result } from './types';\n\nexport function resultFromPromise<E extends BaseError, T = unknown>(\n type: string,\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => E\n): ResultAsync<T, E> {\n return NeverthrowResultAsync.fromPromise(promise, e => ({\n ...error(e),\n type,\n surface,\n }));\n}\n\nexport function resultFromThrowable<E extends BaseError, T = unknown>(\n type: string,\n surface: string,\n fn: () => T,\n error: (e: unknown) => E\n): Result<T, E> {\n return NeverthrowResult.fromThrowable(fn, e => ({\n ...error(e),\n type,\n surface,\n }))();\n}\n\nexport function resultFromSafePromise<E extends BaseError, T = unknown>(\n promise: Promise<T>\n): ResultAsync<T, E> {\n return NeverthrowResultAsync.fromSafePromise(promise);\n}\n\nexport function ok<T>(data: T) {\n return neverthrowOk(data);\n}\n\nexport function err<BE extends BaseError>(\n type: string,\n surface: string,\n error: BE\n) {\n return neverthrowErr<never, Error<BE>>({\n ...error,\n type,\n surface,\n });\n}\n\nexport function okAsync<T>(data: T): ResultAsync<T, never> {\n return neverthrowOkAsync(data);\n}\n\nexport function errAsync<E extends BaseError>(surface: string, error: E) {\n return neverthrowErrAsync({\n ...error,\n surface,\n });\n}\n","import { join } from 'path';\nimport { homedir } from 'os';\nimport * as fs from 'fs';\n\nimport { resultFromThrowable } from '@agentcash/neverthrow';\n\nconst BASE_DIRECTORY = join(homedir(), '.agentcash');\nexport const LEGACY_DIRECTORY = join(homedir(), '.x402scan-mcp');\n\n/**\n * Auto-migrate files from ~/.x402scan-mcp/ to ~/.agentcash/\n * Copies wallet.json (and any other config) on first run after upgrade.\n * Only copies files that don't already exist in the new location.\n */\nfunction migrateFromLegacy(): void {\n if (!fs.existsSync(LEGACY_DIRECTORY)) return;\n\n const result = resultFromThrowable(\n 'migration',\n 'fs',\n () => {\n const files = fs.readdirSync(LEGACY_DIRECTORY);\n for (const file of files) {\n // Skip logs — not worth migrating\n if (file.endsWith('.log')) continue;\n\n const src = join(LEGACY_DIRECTORY, file);\n const dest = join(BASE_DIRECTORY, file);\n\n if (!fs.existsSync(dest) && fs.statSync(src).isFile()) {\n fs.copyFileSync(src, dest);\n // Preserve original permissions (wallet.json is 0600)\n const { mode } = fs.statSync(src);\n fs.chmodSync(dest, mode);\n }\n }\n },\n e => ({\n cause: 'migration_failed' as const,\n message: `Failed to migrate: ${e instanceof Error ? e.message : String(e)}`,\n })\n );\n\n if (result.isErr()) {\n console.error(\n `[agentcash] Warning: failed to migrate files from ${LEGACY_DIRECTORY} to ${BASE_DIRECTORY}. ` +\n `Your wallet may still be at ${join(LEGACY_DIRECTORY, 'wallet.json')} — copy it manually to ${join(BASE_DIRECTORY, 'wallet.json')}. ` +\n `Error: ${result.error.message}`\n );\n }\n}\n\nlet initialized = false;\n\n/**\n * Ensure the base directory exists and legacy files are migrated.\n * Runs once on first call; safe to call repeatedly.\n * Throws on failure — callers that need the filesystem (wallet, state)\n * should let this propagate. Optional consumers (logging) should\n * catch and degrade on their own.\n */\nexport function ensureBaseDir(): void {\n if (initialized) return;\n\n if (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n }\n\n migrateFromLegacy();\n initialized = true;\n}\n\nexport const configFile = (name: `${string}.${string}`) => {\n ensureBaseDir();\n const filePath = join(BASE_DIRECTORY, name);\n return filePath;\n};\n"],"mappings":";AAAA,IAAM,qBAAqB;AAAA,EACvB,gBAAgB;AACpB;AAGA,IAAM,wBAAwB,CAAC,SAAS,QAAQ,SAAS,uBAAuB;AAC5E,QAAM,OAAO,OAAO,KAAK,IACnB,EAAE,MAAM,MAAM,OAAO,OAAO,MAAM,IAClC,EAAE,MAAM,OAAO,OAAO,OAAO,MAAM;AACzC,QAAM,aAAa,OAAO,iBAAiB,IAAI,MAAM,EAAE,QAAQ;AAC/D,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA,OAAO;AAAA,EACX;AACJ;AAmBA,SAAS,UAAU,SAAS,YAAY,GAAG,WAAW;AAClD,WAAS,MAAM,OAAO;AAAE,WAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,cAAQ,KAAK;AAAA,IAAG,CAAC;AAAA,EAAG;AAC3G,SAAO,KAAK,MAAM,IAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,aAAS,UAAU,OAAO;AAAE,UAAI;AAAE,aAAK,UAAU,KAAK,KAAK,CAAC;AAAA,MAAG,SAAS,GAAG;AAAE,eAAO,CAAC;AAAA,MAAG;AAAA,IAAE;AAC1F,aAAS,SAAS,OAAO;AAAE,UAAI;AAAE,aAAK,UAAU,OAAO,EAAE,KAAK,CAAC;AAAA,MAAG,SAAS,GAAG;AAAE,eAAO,CAAC;AAAA,MAAG;AAAA,IAAE;AAC7F,aAAS,KAAK,QAAQ;AAAE,aAAO,OAAO,QAAQ,OAAO,KAAK,IAAI,MAAM,OAAO,KAAK,EAAE,KAAK,WAAW,QAAQ;AAAA,IAAG;AAC7G,UAAM,YAAY,UAAU,MAAM,SAAS,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC;AAAA,EACxE,CAAC;AACL;AAEA,SAAS,SAAS,GAAG;AACjB,MAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAU,IAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,MAAI,EAAG,QAAO,EAAE,KAAK,CAAC;AACtB,MAAI,KAAK,OAAO,EAAE,WAAW,SAAU,QAAO;AAAA,IAC1C,MAAM,WAAY;AACd,UAAI,KAAK,KAAK,EAAE,OAAQ,KAAI;AAC5B,aAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,IAC1C;AAAA,EACJ;AACA,QAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AACzF;AAEA,SAAS,QAAQ,GAAG;AAChB,SAAO,gBAAgB,WAAW,KAAK,IAAI,GAAG,QAAQ,IAAI,QAAQ,CAAC;AACvE;AAEA,SAAS,iBAAiB,SAAS,YAAY,WAAW;AACtD,MAAI,CAAC,OAAO,cAAe,OAAM,IAAI,UAAU,sCAAsC;AACrF,MAAI,IAAI,UAAU,MAAM,SAAS,cAAc,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;AAC5D,SAAO,IAAI,OAAO,QAAQ,OAAO,kBAAkB,aAAa,gBAAgB,QAAQ,SAAS,GAAG,KAAK,MAAM,GAAG,KAAK,OAAO,GAAG,KAAK,UAAU,WAAW,GAAG,EAAE,OAAO,aAAa,IAAI,WAAY;AAAE,WAAO;AAAA,EAAM,GAAG;AACtN,WAAS,YAAY,GAAG;AAAE,WAAO,SAAU,GAAG;AAAE,aAAO,QAAQ,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM;AAAA,IAAG;AAAA,EAAG;AAC9F,WAAS,KAAK,GAAG,GAAG;AAAE,QAAI,EAAE,CAAC,GAAG;AAAE,QAAE,CAAC,IAAI,SAAU,GAAG;AAAE,eAAO,IAAI,QAAQ,SAAU,GAAG,GAAG;AAAE,YAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,GAAG,CAAC;AAAA,QAAG,CAAC;AAAA,MAAG;AAAG,UAAI,EAAG,GAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAAA,IAAG;AAAA,EAAE;AACvK,WAAS,OAAO,GAAG,GAAG;AAAE,QAAI;AAAE,WAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,IAAG,SAAS,GAAG;AAAE,aAAO,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;AAAA,IAAG;AAAA,EAAE;AACjF,WAAS,KAAK,GAAG;AAAE,MAAE,iBAAiB,UAAU,QAAQ,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,SAAS,MAAM,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;AAAA,EAAG;AACvH,WAAS,QAAQ,OAAO;AAAE,WAAO,QAAQ,KAAK;AAAA,EAAG;AACjD,WAAS,OAAO,OAAO;AAAE,WAAO,SAAS,KAAK;AAAA,EAAG;AACjD,WAAS,OAAO,GAAG,GAAG;AAAE,QAAI,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,OAAQ,QAAO,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,EAAG;AACrF;AAEA,SAAS,iBAAiB,GAAG;AACzB,MAAI,GAAG;AACP,SAAO,IAAI,CAAC,GAAG,KAAK,MAAM,GAAG,KAAK,SAAS,SAAU,GAAG;AAAE,UAAM;AAAA,EAAG,CAAC,GAAG,KAAK,QAAQ,GAAG,EAAE,OAAO,QAAQ,IAAI,WAAY;AAAE,WAAO;AAAA,EAAM,GAAG;AAC1I,WAAS,KAAK,GAAG,GAAG;AAAE,MAAE,CAAC,IAAI,EAAE,CAAC,IAAI,SAAU,GAAG;AAAE,cAAQ,IAAI,CAAC,KAAK,EAAE,OAAO,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC,IAAI;AAAA,IAAG,IAAI;AAAA,EAAG;AACzI;AAEA,SAAS,cAAc,GAAG;AACtB,MAAI,CAAC,OAAO,cAAe,OAAM,IAAI,UAAU,sCAAsC;AACrF,MAAI,IAAI,EAAE,OAAO,aAAa,GAAG;AACjC,SAAO,IAAI,EAAE,KAAK,CAAC,KAAK,IAAI,OAAO,aAAa,aAAa,SAAS,CAAC,IAAI,EAAE,OAAO,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,MAAM,GAAG,KAAK,OAAO,GAAG,KAAK,QAAQ,GAAG,EAAE,OAAO,aAAa,IAAI,WAAY;AAAE,WAAO;AAAA,EAAM,GAAG;AAC9M,WAAS,KAAK,GAAG;AAAE,MAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAU,GAAG;AAAE,aAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,YAAI,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,SAAS,QAAQ,EAAE,MAAM,EAAE,KAAK;AAAA,MAAG,CAAC;AAAA,IAAG;AAAA,EAAG;AAC/J,WAAS,OAAO,SAAS,QAAQ,GAAG,GAAG;AAAE,YAAQ,QAAQ,CAAC,EAAE,KAAK,SAASA,IAAG;AAAE,cAAQ,EAAE,OAAOA,IAAG,MAAM,EAAE,CAAC;AAAA,IAAG,GAAG,MAAM;AAAA,EAAG;AAC/H;AAOA,IAAM,cAAN,MAAM,aAAY;AAAA,EACd,YAAY,KAAK;AACb,SAAK,WAAW;AAAA,EACpB;AAAA,EACA,OAAO,gBAAgB,SAAS;AAC5B,UAAM,aAAa,QAAQ,KAAK,CAAC,UAAU,IAAI,GAAG,KAAK,CAAC;AACxD,WAAO,IAAI,aAAY,UAAU;AAAA,EACrC;AAAA,EACA,OAAO,YAAY,SAAS,SAAS;AACjC,UAAM,aAAa,QACd,KAAK,CAAC,UAAU,IAAI,GAAG,KAAK,CAAC,EAC7B,MAAM,CAAC,MAAM,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC;AACrC,WAAO,IAAI,aAAY,UAAU;AAAA,EACrC;AAAA;AAAA,EAEA,OAAO,cAAc,IAAI,SAAS;AAC9B,WAAO,IAAI,SAAS;AAChB,aAAO,IAAI,cAAa,MAAM,UAAU,MAAM,QAAQ,QAAQ,aAAa;AACvE,YAAI;AACA,iBAAO,IAAI,GAAG,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,QACnC,SACO,OAAO;AACV,iBAAO,IAAI,IAAI,UAAU,QAAQ,KAAK,IAAI,KAAK;AAAA,QACnD;AAAA,MACJ,CAAC,GAAG,CAAC;AAAA,IACT;AAAA,EACJ;AAAA,EACA,OAAO,QAAQ,iBAAiB;AAC5B,WAAO,uBAAuB,eAAe;AAAA,EACjD;AAAA,EACA,OAAO,qBAAqB,iBAAiB;AACzC,WAAO,oCAAoC,eAAe;AAAA,EAC9D;AAAA,EACA,IAAI,GAAG;AACH,WAAO,IAAI,aAAY,KAAK,SAAS,KAAK,CAAC,QAAQ,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAC5F,UAAI,IAAI,MAAM,GAAG;AACb,eAAO,IAAI,IAAI,IAAI,KAAK;AAAA,MAC5B;AACA,aAAO,IAAI,GAAG,MAAM,EAAE,IAAI,KAAK,CAAC;AAAA,IACpC,CAAC,CAAC,CAAC;AAAA,EACP;AAAA,EACA,WAAW,GAAG;AACV,WAAO,IAAI,aAAY,KAAK,SAAS,KAAK,CAAC,QAAQ,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAC5F,UAAI,IAAI,MAAM,GAAG;AACb,eAAO,IAAI,IAAI,IAAI,KAAK;AAAA,MAC5B;AACA,YAAM,SAAS,MAAM,EAAE,IAAI,KAAK;AAChC,UAAI,OAAO,MAAM,GAAG;AAChB,eAAO,IAAI,IAAI,OAAO,KAAK;AAAA,MAC/B;AACA,aAAO,IAAI,GAAG,IAAI,KAAK;AAAA,IAC3B,CAAC,CAAC,CAAC;AAAA,EACP;AAAA,EACA,OAAO,GAAG;AACN,WAAO,IAAI,aAAY,KAAK,SAAS,KAAK,CAAC,QAAQ,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAC5F,UAAI,IAAI,MAAM,GAAG;AACb,eAAO,IAAI,IAAI,IAAI,KAAK;AAAA,MAC5B;AACA,UAAI;AACA,cAAM,EAAE,IAAI,KAAK;AAAA,MACrB,SACO,GAAG;AAAA,MAEV;AACA,aAAO,IAAI,GAAG,IAAI,KAAK;AAAA,IAC3B,CAAC,CAAC,CAAC;AAAA,EACP;AAAA,EACA,MAAM,GAAG;AACL,WAAO,IAAI,aAAY,KAAK,SAAS,KAAK,CAAC,QAAQ,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAC5F,UAAI,IAAI,KAAK,GAAG;AACZ,eAAO,IAAI,GAAG,IAAI,KAAK;AAAA,MAC3B;AACA,UAAI;AACA,cAAM,EAAE,IAAI,KAAK;AAAA,MACrB,SACO,GAAG;AAAA,MAEV;AACA,aAAO,IAAI,IAAI,IAAI,KAAK;AAAA,IAC5B,CAAC,CAAC,CAAC;AAAA,EACP;AAAA,EACA,OAAO,GAAG;AACN,WAAO,IAAI,aAAY,KAAK,SAAS,KAAK,CAAC,QAAQ,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAC5F,UAAI,IAAI,KAAK,GAAG;AACZ,eAAO,IAAI,GAAG,IAAI,KAAK;AAAA,MAC3B;AACA,aAAO,IAAI,IAAI,MAAM,EAAE,IAAI,KAAK,CAAC;AAAA,IACrC,CAAC,CAAC,CAAC;AAAA,EACP;AAAA;AAAA,EAEA,QAAQ,GAAG;AACP,WAAO,IAAI,aAAY,KAAK,SAAS,KAAK,CAAC,QAAQ;AAC/C,UAAI,IAAI,MAAM,GAAG;AACb,eAAO,IAAI,IAAI,IAAI,KAAK;AAAA,MAC5B;AACA,YAAM,WAAW,EAAE,IAAI,KAAK;AAC5B,aAAO,oBAAoB,eAAc,SAAS,WAAW;AAAA,IACjE,CAAC,CAAC;AAAA,EACN;AAAA;AAAA,EAEA,OAAO,GAAG;AACN,WAAO,IAAI,aAAY,KAAK,SAAS,KAAK,CAAC,QAAQ,UAAU,MAAM,QAAQ,QAAQ,aAAa;AAC5F,UAAI,IAAI,MAAM,GAAG;AACb,eAAO,EAAE,IAAI,KAAK;AAAA,MACtB;AACA,aAAO,IAAI,GAAG,IAAI,KAAK;AAAA,IAC3B,CAAC,CAAC,CAAC;AAAA,EACP;AAAA,EACA,MAAMC,KAAI,MAAM;AACZ,WAAO,KAAK,SAAS,KAAK,CAAC,QAAQ,IAAI,MAAMA,KAAI,IAAI,CAAC;AAAA,EAC1D;AAAA,EACA,SAAS,GAAG;AACR,WAAO,KAAK,SAAS,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa;AACT,WAAO,iBAAiB,MAAM,WAAW,UAAU,eAAe;AAC9D,aAAO,MAAM,QAAQ,MAAM,QAAQ,OAAO,iBAAiB,cAAc,MAAM,QAAQ,KAAK,SAAS,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,IAC5I,CAAC;AAAA,EACL;AAAA;AAAA,EAEA,KAAK,iBAAiB,iBAAiB;AACnC,WAAO,KAAK,SAAS,KAAK,iBAAiB,eAAe;AAAA,EAC9D;AAAA,EACA,CAAC,OAAO,aAAa,IAAI;AACrB,WAAO,iBAAiB,MAAM,WAAW,UAAU,KAAK;AACpD,YAAM,SAAS,MAAM,QAAQ,KAAK,QAAQ;AAC1C,UAAI,OAAO,MAAM,GAAG;AAEhB,cAAM,MAAM,QAAQ,SAAS,OAAO,KAAK,CAAC;AAAA,MAC9C;AAEA,aAAO,MAAM,QAAQ,OAAO,KAAK;AAAA,IACrC,CAAC;AAAA,EACL;AACJ;AAIA,SAAS,SAASC,MAAK;AACnB,SAAO,IAAI,YAAY,QAAQ,QAAQ,IAAI,IAAIA,IAAG,CAAC,CAAC;AACxD;AACA,IAAM,cAAc,YAAY;AAChC,IAAM,kBAAkB,YAAY;AACpC,IAAM,qBAAqB,YAAY;AAKvC,IAAM,oBAAoB,CAAC,eAAe;AACtC,MAAI,MAAM,GAAG,CAAC,CAAC;AACf,aAAW,UAAU,YAAY;AAC7B,QAAI,OAAO,MAAM,GAAG;AAChB,YAAM,IAAI,OAAO,KAAK;AACtB;AAAA,IACJ,OACK;AACD,UAAI,IAAI,CAAC,SAAS,KAAK,KAAK,OAAO,KAAK,CAAC;AAAA,IAC7C;AAAA,EACJ;AACA,SAAO;AACX;AAMA,IAAM,yBAAyB,CAAC,oBAAoB,YAAY,gBAAgB,QAAQ,IAAI,eAAe,CAAC,EAAE,QAAQ,iBAAiB;AAIvI,IAAM,iCAAiC,CAAC,eAAe;AACnD,MAAI,MAAM,GAAG,CAAC,CAAC;AACf,aAAW,UAAU,YAAY;AAC7B,QAAI,OAAO,MAAM,KAAK,IAAI,MAAM,GAAG;AAC/B,UAAI,MAAM,KAAK,OAAO,KAAK;AAAA,IAC/B,WACS,OAAO,MAAM,KAAK,IAAI,KAAK,GAAG;AACnC,YAAM,IAAI,CAAC,OAAO,KAAK,CAAC;AAAA,IAC5B,WACS,OAAO,KAAK,KAAK,IAAI,KAAK,GAAG;AAClC,UAAI,MAAM,KAAK,OAAO,KAAK;AAAA,IAC/B;AAAA,EAEJ;AACA,SAAO;AACX;AACA,IAAM,sCAAsC,CAAC,oBAAoB,YAAY,gBAAgB,QAAQ,IAAI,eAAe,CAAC,EAAE,QAAQ,8BAA8B;AAGjK,IAAI;AAAA,CACH,SAAUC,SAAQ;AASf,WAASC,eAAc,IAAI,SAAS;AAChC,WAAO,IAAI,SAAS;AAChB,UAAI;AACA,cAAM,SAAS,GAAG,GAAG,IAAI;AACzB,eAAO,GAAG,MAAM;AAAA,MACpB,SACO,GAAG;AACN,eAAO,IAAI,UAAU,QAAQ,CAAC,IAAI,CAAC;AAAA,MACvC;AAAA,IACJ;AAAA,EACJ;AACA,EAAAD,QAAO,gBAAgBC;AACvB,WAAS,QAAQ,YAAY;AACzB,WAAO,kBAAkB,UAAU;AAAA,EACvC;AACA,EAAAD,QAAO,UAAU;AACjB,WAAS,qBAAqB,YAAY;AACtC,WAAO,+BAA+B,UAAU;AAAA,EACpD;AACA,EAAAA,QAAO,uBAAuB;AAClC,GAAG,WAAW,SAAS,CAAC,EAAE;AAC1B,SAAS,GAAG,OAAO;AACf,SAAO,IAAI,GAAG,KAAK;AACvB;AACA,SAAS,IAAID,MAAK;AACd,SAAO,IAAI,IAAIA,IAAG;AACtB;AAQA,IAAM,KAAN,MAAS;AAAA,EACL,YAAY,OAAO;AACf,SAAK,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO;AACH,WAAO;AAAA,EACX;AAAA,EACA,QAAQ;AACJ,WAAO,CAAC,KAAK,KAAK;AAAA,EACtB;AAAA,EACA,IAAI,GAAG;AACH,WAAO,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA,EAC3B;AAAA;AAAA,EAEA,OAAO,IAAI;AACP,WAAO,GAAG,KAAK,KAAK;AAAA,EACxB;AAAA;AAAA,EAEA,QAAQ,GAAG;AACP,WAAO,EAAE,KAAK,KAAK;AAAA,EACvB;AAAA;AAAA,EAEA,WAAW,GAAG;AACV,WAAO,EAAE,KAAK,KAAK,EAAE,IAAI,CAAC,WAAW,KAAK,KAAK;AAAA,EACnD;AAAA,EACA,OAAO,GAAG;AACN,QAAI;AACA,QAAE,KAAK,KAAK;AAAA,IAChB,SACO,GAAG;AAAA,IAEV;AACA,WAAO,GAAG,KAAK,KAAK;AAAA,EACxB;AAAA,EACA,MAAM,IAAI;AACN,WAAO,GAAG,KAAK,KAAK;AAAA,EACxB;AAAA;AAAA,EAEA,OAAO,IAAI;AACP,WAAO,GAAG,KAAK,KAAK;AAAA,EACxB;AAAA,EACA,aAAa,GAAG;AACZ,WAAO,EAAE,KAAK,KAAK;AAAA,EACvB;AAAA;AAAA,EAEA,gBAAgB,GAAG;AACf,WAAO,EAAE,KAAK,KAAK,EAAE,IAAI,MAAM,KAAK,KAAK;AAAA,EAC7C;AAAA,EACA,SAAS,GAAG;AACR,WAAO,YAAY,gBAAgB,EAAE,KAAK,KAAK,CAAC;AAAA,EACpD;AAAA;AAAA,EAEA,SAAS,IAAI;AACT,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAEA,MAAMG,KAAI,MAAM;AACZ,WAAOA,IAAG,KAAK,KAAK;AAAA,EACxB;AAAA,EACA,aAAa;AACT,UAAM,QAAQ,KAAK;AAEnB,YAAQ,aAAa;AACjB,aAAO;AAAA,IACX,GAAG;AAAA,EACP;AAAA,EACA,cAAc,GAAG;AACb,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,iBAAiB,QAAQ;AACrB,UAAM,sBAAsB,sCAAsC,MAAM,MAAM;AAAA,EAClF;AAAA;AAAA,EAEA,EAAE,OAAO,QAAQ,IAAI;AACjB,WAAO,KAAK;AAAA,EAChB;AACJ;AACA,IAAM,MAAN,MAAU;AAAA,EACN,YAAY,OAAO;AACf,SAAK,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO;AACH,WAAO;AAAA,EACX;AAAA,EACA,QAAQ;AACJ,WAAO,CAAC,KAAK,KAAK;AAAA,EACtB;AAAA;AAAA,EAEA,IAAI,IAAI;AACJ,WAAO,IAAI,KAAK,KAAK;AAAA,EACzB;AAAA,EACA,OAAO,GAAG;AACN,WAAO,IAAI,EAAE,KAAK,KAAK,CAAC;AAAA,EAC5B;AAAA,EACA,WAAW,IAAI;AACX,WAAO,IAAI,KAAK,KAAK;AAAA,EACzB;AAAA,EACA,OAAO,IAAI;AACP,WAAO,IAAI,KAAK,KAAK;AAAA,EACzB;AAAA,EACA,MAAM,GAAG;AACL,QAAI;AACA,QAAE,KAAK,KAAK;AAAA,IAChB,SACO,GAAG;AAAA,IAEV;AACA,WAAO,IAAI,KAAK,KAAK;AAAA,EACzB;AAAA;AAAA,EAEA,QAAQ,IAAI;AACR,WAAO,IAAI,KAAK,KAAK;AAAA,EACzB;AAAA;AAAA,EAEA,OAAO,GAAG;AACN,WAAO,EAAE,KAAK,KAAK;AAAA,EACvB;AAAA;AAAA,EAEA,aAAa,IAAI;AACb,WAAO,SAAS,KAAK,KAAK;AAAA,EAC9B;AAAA,EACA,gBAAgB,IAAI;AAChB,WAAO,SAAS,KAAK,KAAK;AAAA,EAC9B;AAAA;AAAA,EAEA,SAAS,IAAI;AACT,WAAO,SAAS,KAAK,KAAK;AAAA,EAC9B;AAAA,EACA,SAAS,GAAG;AACR,WAAO;AAAA,EACX;AAAA,EACA,MAAM,KAAKC,MAAK;AACZ,WAAOA,KAAI,KAAK,KAAK;AAAA,EACzB;AAAA,EACA,aAAa;AACT,UAAM,QAAQ,KAAK;AACnB,YAAQ,aAAa;AACjB,YAAM,IAAI,KAAK;AACf,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAChE,GAAG;AAAA,EACP;AAAA,EACA,cAAc,QAAQ;AAClB,UAAM,sBAAsB,oCAAoC,MAAM,MAAM;AAAA,EAChF;AAAA,EACA,iBAAiB,GAAG;AAChB,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,EAAE,OAAO,QAAQ,IAAI;AAEjB,UAAM,OAAO;AAEb,UAAM;AAEN,WAAO;AAAA,EACX;AACJ;AACA,IAAM,gBAAgB,OAAO;;;ACletB,SAAS,kBACd,MACA,SACA,SACA,OACmB;AACnB,SAAO,YAAsB,YAAY,SAAS,CAAA,OAAM;IACtD,GAAG,MAAM,CAAC;IACV;IACA;EACF,EAAE;AACJ;AAEO,SAAS,oBACd,MACA,SACA,IACA,OACc;AACd,SAAO,OAAiB,cAAc,IAAI,CAAA,OAAM;IAC9C,GAAG,MAAM,CAAC;IACV;IACA;EACF,EAAE,EAAE;AACN;AAQO,SAASC,IAAM,MAAS;AAC7B,SAAO,GAAa,IAAI;AAC1B;AAEO,SAASC,KACd,MACA,SACA,OACA;AACA,SAAO,IAAgC;IACrC,GAAG;IACH;IACA;EACF,CAAC;AACH;;;ACzDA,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,YAAY,QAAQ;AAIpB,IAAM,iBAAiB,KAAK,QAAQ,GAAG,YAAY;AAC5C,IAAM,mBAAmB,KAAK,QAAQ,GAAG,eAAe;AAO/D,SAAS,oBAA0B;AACjC,MAAI,CAAI,cAAW,gBAAgB,EAAG;AAEtC,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA,MAAM;AACJ,YAAM,QAAW,eAAY,gBAAgB;AAC7C,iBAAW,QAAQ,OAAO;AAExB,YAAI,KAAK,SAAS,MAAM,EAAG;AAE3B,cAAM,MAAM,KAAK,kBAAkB,IAAI;AACvC,cAAM,OAAO,KAAK,gBAAgB,IAAI;AAEtC,YAAI,CAAI,cAAW,IAAI,KAAQ,YAAS,GAAG,EAAE,OAAO,GAAG;AACrD,UAAG,gBAAa,KAAK,IAAI;AAEzB,gBAAM,EAAE,KAAK,IAAO,YAAS,GAAG;AAChC,UAAG,aAAU,MAAM,IAAI;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAM;AAAA,MACJ,OAAO;AAAA,MACP,SAAS,sBAAsB,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AAAA,IAC3E;AAAA,EACF;AAEA,MAAI,OAAO,MAAM,GAAG;AAClB,YAAQ;AAAA,MACN,qDAAqD,gBAAgB,OAAO,cAAc,iCACzD,KAAK,kBAAkB,aAAa,CAAC,+BAA0B,KAAK,gBAAgB,aAAa,CAAC,YACvH,OAAO,MAAM,OAAO;AAAA,IAClC;AAAA,EACF;AACF;AAEA,IAAI,cAAc;AASX,SAAS,gBAAsB;AACpC,MAAI,YAAa;AAEjB,MAAI,CAAI,cAAW,cAAc,GAAG;AAClC,IAAG,aAAU,gBAAgB,EAAE,WAAW,KAAK,CAAC;AAAA,EAClD;AAEA,oBAAkB;AAClB,gBAAc;AAChB;AAEO,IAAM,aAAa,CAAC,SAAgC;AACzD,gBAAc;AACd,QAAM,WAAW,KAAK,gBAAgB,IAAI;AAC1C,SAAO;AACT;","names":["v","ok","err","Result","fromThrowable","ok","err","ok","err"]}
@@ -1,7 +1,9 @@
1
1
  import {
2
- configFile,
3
2
  safeFetchJson
4
- } from "./chunk-TRPO7BKD.js";
3
+ } from "./chunk-YQFK4U62.js";
4
+ import {
5
+ configFile
6
+ } from "./chunk-6PU3XK6I.js";
5
7
 
6
8
  // src/shared/utils.ts
7
9
  import open from "open";
@@ -75,4 +77,4 @@ export {
75
77
  getState,
76
78
  setState
77
79
  };
78
- //# sourceMappingURL=chunk-FLIDR6EU.js.map
80
+ //# sourceMappingURL=chunk-7ZEXMJYJ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shared/utils.ts","../../src/shared/balance.ts","../../src/shared/state.ts"],"sourcesContent":["import open from 'open';\n\nimport type { GlobalFlags } from '@/types';\n\nexport const getBaseUrl = (dev: boolean) => {\n return dev ? 'http://localhost:3000' : 'https://agentcash.dev';\n};\n\nexport const getDepositLink = (address: string, flags: GlobalFlags) => {\n return `${getBaseUrl(flags.dev)}/deposit/${address}`;\n};\n\nexport const openDepositLink = async (address: string, flags: GlobalFlags) => {\n const depositLink = getDepositLink(address, flags);\n await open(depositLink);\n};\n","import z from 'zod';\n\nimport { getBaseUrl } from '@/shared/utils';\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\n\nimport type { Address } from 'viem';\n\ninterface GetBalanceProps {\n address: Address;\n surface: string;\n dev?: boolean;\n}\n\nexport const getBalance = async ({\n address,\n surface,\n dev = false,\n}: GetBalanceProps) => {\n const baseUrl = getBaseUrl(dev);\n const url = `${baseUrl}/api/balance/${address}`;\n\n const res = await safeFetchJson(\n surface,\n new Request(url, {\n method: 'GET',\n headers: {\n accept: 'application/json',\n },\n }),\n z.object({\n chain: z.number(),\n balance: z.coerce.number(),\n })\n );\n\n return res;\n};\n","import z from 'zod';\nimport fs from 'fs';\n\nimport { configFile } from './fs';\n\nconst STATE_FILE = configFile('state.json');\n\nconst stateSchema = z\n .looseObject({\n redeemedCodes: z.array(z.string()),\n })\n .partial();\n\nexport const getState = () => {\n const stateFileExists = fs.existsSync(STATE_FILE);\n if (!stateFileExists) {\n fs.writeFileSync(STATE_FILE, '{}');\n return {};\n }\n\n const stateFileContent = fs.readFileSync(STATE_FILE, 'utf-8');\n const result = stateSchema.safeParse(JSON.parse(stateFileContent));\n if (!result.success) {\n return {};\n }\n return result.data;\n};\n\nexport const setState = (state: z.infer<typeof stateSchema>) => {\n const existing = getState();\n const newState = stateSchema.parse({ ...existing, ...state });\n fs.writeFileSync(STATE_FILE, JSON.stringify(newState, null, 2));\n};\n"],"mappings":";;;;;;AAAA,OAAO,UAAU;AAIV,IAAM,aAAa,CAAC,QAAiB;AAC1C,SAAO,MAAM,0BAA0B;AACzC;AAEO,IAAM,iBAAiB,CAAC,SAAiB,UAAuB;AACrE,SAAO,GAAG,WAAW,MAAM,GAAG,CAAC,YAAY,OAAO;AACpD;AAEO,IAAM,kBAAkB,OAAO,SAAiB,UAAuB;AAC5E,QAAM,cAAc,eAAe,SAAS,KAAK;AACjD,QAAM,KAAK,WAAW;AACxB;;;ACfA,OAAO,OAAO;AAaP,IAAM,aAAa,OAAO;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,MAAM;AACR,MAAuB;AACrB,QAAM,UAAU,WAAW,GAAG;AAC9B,QAAM,MAAM,GAAG,OAAO,gBAAgB,OAAO;AAE7C,QAAM,MAAM,MAAM;AAAA,IAChB;AAAA,IACA,IAAI,QAAQ,KAAK;AAAA,MACf,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,IACD,EAAE,OAAO;AAAA,MACP,OAAO,EAAE,OAAO;AAAA,MAChB,SAAS,EAAE,OAAO,OAAO;AAAA,IAC3B,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;ACpCA,OAAOA,QAAO;AACd,OAAO,QAAQ;AAIf,IAAM,aAAa,WAAW,YAAY;AAE1C,IAAM,cAAcC,GACjB,YAAY;AAAA,EACX,eAAeA,GAAE,MAAMA,GAAE,OAAO,CAAC;AACnC,CAAC,EACA,QAAQ;AAEJ,IAAM,WAAW,MAAM;AAC5B,QAAM,kBAAkB,GAAG,WAAW,UAAU;AAChD,MAAI,CAAC,iBAAiB;AACpB,OAAG,cAAc,YAAY,IAAI;AACjC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,mBAAmB,GAAG,aAAa,YAAY,OAAO;AAC5D,QAAM,SAAS,YAAY,UAAU,KAAK,MAAM,gBAAgB,CAAC;AACjE,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,CAAC;AAAA,EACV;AACA,SAAO,OAAO;AAChB;AAEO,IAAM,WAAW,CAAC,UAAuC;AAC9D,QAAM,WAAW,SAAS;AAC1B,QAAM,WAAW,YAAY,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC;AAC5D,KAAG,cAAc,YAAY,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAChE;","names":["z","z"]}
1
+ {"version":3,"sources":["../../src/shared/utils.ts","../../src/shared/balance.ts","../../src/shared/state.ts"],"sourcesContent":["import open from 'open';\n\nimport type { GlobalFlags } from '@/types';\n\nexport const getBaseUrl = (dev: boolean) => {\n return dev ? 'http://localhost:3000' : 'https://agentcash.dev';\n};\n\nexport const getDepositLink = (address: string, flags: GlobalFlags) => {\n return `${getBaseUrl(flags.dev)}/deposit/${address}`;\n};\n\nexport const openDepositLink = async (address: string, flags: GlobalFlags) => {\n const depositLink = getDepositLink(address, flags);\n await open(depositLink);\n};\n","import z from 'zod';\n\nimport { getBaseUrl } from '@/shared/utils';\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\n\nimport type { Address } from 'viem';\n\ninterface GetBalanceProps {\n address: Address;\n surface: string;\n dev?: boolean;\n}\n\nexport const getBalance = async ({\n address,\n surface,\n dev = false,\n}: GetBalanceProps) => {\n const baseUrl = getBaseUrl(dev);\n const url = `${baseUrl}/api/balance/${address}`;\n\n const res = await safeFetchJson(\n surface,\n new Request(url, {\n method: 'GET',\n headers: {\n accept: 'application/json',\n },\n }),\n z.object({\n chain: z.number(),\n balance: z.coerce.number(),\n })\n );\n\n return res;\n};\n","import z from 'zod';\nimport fs from 'fs';\n\nimport { configFile } from './fs';\n\nconst STATE_FILE = configFile('state.json');\n\nconst stateSchema = z\n .looseObject({\n redeemedCodes: z.array(z.string()),\n })\n .partial();\n\nexport const getState = () => {\n const stateFileExists = fs.existsSync(STATE_FILE);\n if (!stateFileExists) {\n fs.writeFileSync(STATE_FILE, '{}');\n return {};\n }\n\n const stateFileContent = fs.readFileSync(STATE_FILE, 'utf-8');\n const result = stateSchema.safeParse(JSON.parse(stateFileContent));\n if (!result.success) {\n return {};\n }\n return result.data;\n};\n\nexport const setState = (state: z.infer<typeof stateSchema>) => {\n const existing = getState();\n const newState = stateSchema.parse({ ...existing, ...state });\n fs.writeFileSync(STATE_FILE, JSON.stringify(newState, null, 2));\n};\n"],"mappings":";;;;;;;;AAAA,OAAO,UAAU;AAIV,IAAM,aAAa,CAAC,QAAiB;AAC1C,SAAO,MAAM,0BAA0B;AACzC;AAEO,IAAM,iBAAiB,CAAC,SAAiB,UAAuB;AACrE,SAAO,GAAG,WAAW,MAAM,GAAG,CAAC,YAAY,OAAO;AACpD;AAEO,IAAM,kBAAkB,OAAO,SAAiB,UAAuB;AAC5E,QAAM,cAAc,eAAe,SAAS,KAAK;AACjD,QAAM,KAAK,WAAW;AACxB;;;ACfA,OAAO,OAAO;AAaP,IAAM,aAAa,OAAO;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,MAAM;AACR,MAAuB;AACrB,QAAM,UAAU,WAAW,GAAG;AAC9B,QAAM,MAAM,GAAG,OAAO,gBAAgB,OAAO;AAE7C,QAAM,MAAM,MAAM;AAAA,IAChB;AAAA,IACA,IAAI,QAAQ,KAAK;AAAA,MACf,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,IACD,EAAE,OAAO;AAAA,MACP,OAAO,EAAE,OAAO;AAAA,MAChB,SAAS,EAAE,OAAO,OAAO;AAAA,IAC3B,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;ACpCA,OAAOA,QAAO;AACd,OAAO,QAAQ;AAIf,IAAM,aAAa,WAAW,YAAY;AAE1C,IAAM,cAAcC,GACjB,YAAY;AAAA,EACX,eAAeA,GAAE,MAAMA,GAAE,OAAO,CAAC;AACnC,CAAC,EACA,QAAQ;AAEJ,IAAM,WAAW,MAAM;AAC5B,QAAM,kBAAkB,GAAG,WAAW,UAAU;AAChD,MAAI,CAAC,iBAAiB;AACpB,OAAG,cAAc,YAAY,IAAI;AACjC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,mBAAmB,GAAG,aAAa,YAAY,OAAO;AAC5D,QAAM,SAAS,YAAY,UAAU,KAAK,MAAM,gBAAgB,CAAC;AACjE,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,CAAC;AAAA,EACV;AACA,SAAO,OAAO;AAChB;AAEO,IAAM,WAAW,CAAC,UAAuC;AAC9D,QAAM,WAAW,SAAS;AAC1B,QAAM,WAAW,YAAY,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC;AAC5D,KAAG,cAAc,YAAY,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAChE;","names":["z","z"]}
@@ -1,7 +1,9 @@
1
1
  import {
2
- ok,
3
2
  safeFetchJson
4
- } from "./chunk-TRPO7BKD.js";
3
+ } from "./chunk-YQFK4U62.js";
4
+ import {
5
+ ok
6
+ } from "./chunk-6PU3XK6I.js";
5
7
 
6
8
  // src/shared/operations/register.ts
7
9
  import { z } from "zod";
@@ -43,4 +45,4 @@ export {
43
45
  registerOrigin,
44
46
  registerOrigin2
45
47
  };
46
- //# sourceMappingURL=chunk-QPL3AVUK.js.map
48
+ //# sourceMappingURL=chunk-C36IAW7R.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shared/operations/register.ts","../../src/lib.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ok } from '@agentcash/neverthrow';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\n\nconst AGENTCASH_BASE_URL = 'https://agentcash.dev';\nconst AGENTCASH_DEV_URL = 'http://localhost:3000';\n\nconst getRegisterUrl = (dev: boolean) =>\n `${dev ? AGENTCASH_DEV_URL : AGENTCASH_BASE_URL}/api/register`;\n\n/**\n * Input for registering an origin with agentcash.\n */\nexport interface RegisterInput {\n url: string;\n}\n\n/**\n * Result returned from a successful registration.\n */\nexport interface RegisterResult {\n origin: {\n id: string;\n origin: string;\n name: string;\n };\n resourceCount: number;\n}\n\nconst registerResponseSchema = z.object({\n origin: z.object({\n id: z.string(),\n origin: z.string(),\n name: z.string(),\n }),\n resourceCount: z.number(),\n});\n\n/**\n * Register an origin with agentcash by POSTing to agentcash.dev/api/register.\n */\nexport async function registerOrigin(\n surface: string,\n input: RegisterInput,\n dev: boolean\n) {\n const result = await safeFetchJson(\n surface,\n new Request(getRegisterUrl(dev), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ url: input.url }),\n }),\n registerResponseSchema\n );\n\n if (result.isErr()) {\n return result;\n }\n\n return ok<RegisterResult>(result.value);\n}\n","/**\n * Library entry point for programmatic use (e.g. importing into a Next.js app).\n * The CLI entry point is src/index.ts (used by the `bin` field).\n *\n * All exports return plain types (no Result<> from neverthrow) to avoid\n * leaking internal @agentcash/neverthrow/types into published .d.ts files.\n *\n * IMPORTANT: Import directly from the individual operation modules — NOT\n * the operations barrel — so that CLI-only modules (wallet-info, report-error)\n * and their transitive filesystem dependencies are never pulled into the\n * bundle for Next.js / serverless consumers.\n */\nexport { discoverResources } from '@/shared/operations/discover';\nexport type {\n DiscoverOriginSchemaSuccess,\n DiscoverOriginSchemaNotFound,\n L2Route,\n} from '@agentcash/discovery';\n\nexport {\n checkEndpoint,\n type SupportedMethod,\n SUPPORTED_METHODS,\n} from '@/shared/operations/check-endpoint';\nexport type {\n CheckEndpointSuccess,\n CheckEndpointNotFound,\n CheckEndpointResult,\n EndpointMethodAdvisory,\n} from '@agentcash/discovery';\n\nimport { registerOrigin as _registerOrigin } from '@/shared/operations/register';\nexport type {\n RegisterInput,\n RegisterResult,\n} from '@/shared/operations/register';\n\nexport async function registerOrigin(\n surface: string,\n input: { url: string },\n dev: boolean\n) {\n const result = await _registerOrigin(surface, input, dev);\n if (result.isErr()) throw new Error(result.error.message);\n return result.value;\n}\n"],"mappings":";;;;;;AAAA,SAAS,SAAS;AAKlB,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;AAE1B,IAAM,iBAAiB,CAAC,QACtB,GAAG,MAAM,oBAAoB,kBAAkB;AAqBjD,IAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,QAAQ,EAAE,OAAO;AAAA,IACf,IAAI,EAAE,OAAO;AAAA,IACb,QAAQ,EAAE,OAAO;AAAA,IACjB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AAAA,EACD,eAAe,EAAE,OAAO;AAC1B,CAAC;AAKD,eAAsB,eACpB,SACA,OACA,KACA;AACA,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA,IAAI,QAAQ,eAAe,GAAG,GAAG;AAAA,MAC/B,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,IAAI,CAAC;AAAA,IACzC,CAAC;AAAA,IACD;AAAA,EACF;AAEA,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,SAAO,GAAmB,OAAO,KAAK;AACxC;;;ACzBA,eAAsBA,gBACpB,SACA,OACA,KACA;AACA,QAAM,SAAS,MAAM,eAAgB,SAAS,OAAO,GAAG;AACxD,MAAI,OAAO,MAAM,EAAG,OAAM,IAAI,MAAM,OAAO,MAAM,OAAO;AACxD,SAAO,OAAO;AAChB;","names":["registerOrigin"]}
1
+ {"version":3,"sources":["../../src/shared/operations/register.ts","../../src/lib.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ok } from '@agentcash/neverthrow';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\n\nconst AGENTCASH_BASE_URL = 'https://agentcash.dev';\nconst AGENTCASH_DEV_URL = 'http://localhost:3000';\n\nconst getRegisterUrl = (dev: boolean) =>\n `${dev ? AGENTCASH_DEV_URL : AGENTCASH_BASE_URL}/api/register`;\n\n/**\n * Input for registering an origin with agentcash.\n */\nexport interface RegisterInput {\n url: string;\n}\n\n/**\n * Result returned from a successful registration.\n */\nexport interface RegisterResult {\n origin: {\n id: string;\n origin: string;\n name: string;\n };\n resourceCount: number;\n}\n\nconst registerResponseSchema = z.object({\n origin: z.object({\n id: z.string(),\n origin: z.string(),\n name: z.string(),\n }),\n resourceCount: z.number(),\n});\n\n/**\n * Register an origin with agentcash by POSTing to agentcash.dev/api/register.\n */\nexport async function registerOrigin(\n surface: string,\n input: RegisterInput,\n dev: boolean\n) {\n const result = await safeFetchJson(\n surface,\n new Request(getRegisterUrl(dev), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ url: input.url }),\n }),\n registerResponseSchema\n );\n\n if (result.isErr()) {\n return result;\n }\n\n return ok<RegisterResult>(result.value);\n}\n","/**\n * Library entry point for programmatic use (e.g. importing into a Next.js app).\n * The CLI entry point is src/index.ts (used by the `bin` field).\n *\n * All exports return plain types (no Result<> from neverthrow) to avoid\n * leaking internal @agentcash/neverthrow/types into published .d.ts files.\n *\n * IMPORTANT: Import directly from the individual operation modules — NOT\n * the operations barrel — so that CLI-only modules (wallet-info, report-error)\n * and their transitive filesystem dependencies are never pulled into the\n * bundle for Next.js / serverless consumers.\n */\nexport { discoverResources } from '@/shared/operations/discover';\nexport type {\n DiscoverOriginSchemaSuccess,\n DiscoverOriginSchemaNotFound,\n L2Route,\n} from '@agentcash/discovery';\n\nexport {\n checkEndpoint,\n type SupportedMethod,\n SUPPORTED_METHODS,\n} from '@/shared/operations/check-endpoint';\nexport type {\n CheckEndpointSuccess,\n CheckEndpointNotFound,\n CheckEndpointResult,\n EndpointMethodAdvisory,\n} from '@agentcash/discovery';\n\nimport { registerOrigin as _registerOrigin } from '@/shared/operations/register';\nexport type {\n RegisterInput,\n RegisterResult,\n} from '@/shared/operations/register';\n\nexport async function registerOrigin(\n surface: string,\n input: { url: string },\n dev: boolean\n) {\n const result = await _registerOrigin(surface, input, dev);\n if (result.isErr()) throw new Error(result.error.message);\n return result.value;\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,SAAS;AAKlB,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;AAE1B,IAAM,iBAAiB,CAAC,QACtB,GAAG,MAAM,oBAAoB,kBAAkB;AAqBjD,IAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,QAAQ,EAAE,OAAO;AAAA,IACf,IAAI,EAAE,OAAO;AAAA,IACb,QAAQ,EAAE,OAAO;AAAA,IACjB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AAAA,EACD,eAAe,EAAE,OAAO;AAC1B,CAAC;AAKD,eAAsB,eACpB,SACA,OACA,KACA;AACA,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA,IAAI,QAAQ,eAAe,GAAG,GAAG;AAAA,MAC/B,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,IAAI,CAAC;AAAA,IACzC,CAAC;AAAA,IACD;AAAA,EACF;AAEA,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,SAAO,GAAmB,OAAO,KAAK;AACxC;;;ACzBA,eAAsBA,gBACpB,SACA,OACA,KACA;AACA,QAAM,SAAS,MAAM,eAAgB,SAAS,OAAO,GAAG;AACxD,MAAI,OAAO,MAAM,EAAG,OAAM,IAAI,MAAM,OAAO,MAAM,OAAO;AACxD,SAAO,OAAO;AAChB;","names":["registerOrigin"]}
@@ -0,0 +1,7 @@
1
+ // src/shared/mpp-enabled.ts
2
+ var isMppEnabled = () => "0.8.0".includes("-mpp");
3
+
4
+ export {
5
+ isMppEnabled
6
+ };
7
+ //# sourceMappingURL=chunk-FBPC4LGY.js.map
@@ -5,10 +5,10 @@ import {
5
5
  DEFAULT_NETWORK,
6
6
  getChainName,
7
7
  redeemInviteCode
8
- } from "./chunk-24E2V3PA.js";
8
+ } from "./chunk-UN3PRLTL.js";
9
9
  import {
10
10
  getDepositLink
11
- } from "./chunk-FLIDR6EU.js";
11
+ } from "./chunk-7ZEXMJYJ.js";
12
12
 
13
13
  // src/cli/lib/deposit.ts
14
14
  import chalk from "chalk";
@@ -101,4 +101,4 @@ var promptDeposit = async (props) => {
101
101
  export {
102
102
  promptDeposit
103
103
  };
104
- //# sourceMappingURL=chunk-PWYZN62H.js.map
104
+ //# sourceMappingURL=chunk-OHA3LLUQ.js.map
@@ -1,24 +1,30 @@
1
+ import {
2
+ jsonErr,
3
+ safeParseJson
4
+ } from "./chunk-ZDDDU5O2.js";
1
5
  import {
2
6
  getBalance,
3
7
  getBaseUrl,
4
8
  getState,
5
9
  setState
6
- } from "./chunk-FLIDR6EU.js";
10
+ } from "./chunk-7ZEXMJYJ.js";
7
11
  import {
8
- LEGACY_DIRECTORY,
9
- configFile,
10
- err,
11
12
  fsErr,
12
13
  log,
13
- ok,
14
- resultFromPromise,
15
- resultFromThrowable,
16
14
  safeChmod,
17
15
  safeFetchJson,
18
16
  safeParse,
19
17
  safeReadFile,
20
18
  safeWriteFile
21
- } from "./chunk-TRPO7BKD.js";
19
+ } from "./chunk-YQFK4U62.js";
20
+ import {
21
+ LEGACY_DIRECTORY,
22
+ configFile,
23
+ err,
24
+ ok,
25
+ resultFromPromise,
26
+ resultFromThrowable
27
+ } from "./chunk-6PU3XK6I.js";
22
28
 
23
29
  // src/shared/wallet.ts
24
30
  import { existsSync, readFileSync } from "fs";
@@ -26,37 +32,6 @@ import { join } from "path";
26
32
  import { getAddress } from "viem";
27
33
  import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
28
34
  import z from "zod";
29
-
30
- // src/shared/neverthrow/json/index.ts
31
- var type = "json";
32
- var jsonErr = (surface, error) => {
33
- return err(type, surface, error);
34
- };
35
- var safeStringifyJson = (surface, value) => {
36
- return resultFromThrowable(
37
- type,
38
- surface,
39
- () => JSON.stringify(value, null, 2),
40
- () => ({
41
- cause: "stringify",
42
- message: "Could not stringify JSON"
43
- })
44
- );
45
- };
46
- var toJsonObject = (value) => JSON.parse(JSON.stringify(value));
47
- var safeParseJson = (surface, value) => {
48
- return resultFromThrowable(
49
- type,
50
- surface,
51
- () => JSON.parse(value),
52
- (e) => ({
53
- cause: "parse",
54
- message: e instanceof Error ? e.message : "Could not parse JSON"
55
- })
56
- );
57
- };
58
-
59
- // src/shared/wallet.ts
60
35
  var WALLET_FILE = configFile("wallet.json");
61
36
  var storedWalletSchema = z.object({
62
37
  privateKey: z.string().regex(/^0x[a-fA-F0-9]{64}$/, "Invalid Ethereum private key").transform((privateKey) => privateKey),
@@ -348,10 +323,7 @@ function getChainName(network) {
348
323
  export {
349
324
  DEFAULT_NETWORK,
350
325
  getChainName,
351
- safeStringifyJson,
352
- toJsonObject,
353
- safeParseJson,
354
326
  getWallet,
355
327
  redeemInviteCode
356
328
  };
357
- //# sourceMappingURL=chunk-24E2V3PA.js.map
329
+ //# sourceMappingURL=chunk-UN3PRLTL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/wallet.ts","../../src/shared/redeem-invite.ts","../../src/shared/networks.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport { getAddress } from 'viem';\nimport { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';\n\nimport z from 'zod';\n\nimport {\n ok,\n resultFromThrowable,\n resultFromPromise,\n} from '@agentcash/neverthrow';\n\nimport {\n fsErr,\n safeChmod,\n safeReadFile,\n safeWriteFile,\n} from '@/shared/neverthrow/fs';\nimport { jsonErr, safeParseJson } from '@/shared/neverthrow/json';\nimport { safeParse } from '@/shared/neverthrow/parse';\nimport { getBalance } from '@/shared/balance';\n\nimport { log } from './log';\nimport { configFile, LEGACY_DIRECTORY } from './fs';\n\nimport type { Hex } from 'viem';\nimport type { PrivateKeyAccount } from 'viem/accounts';\n\nconst WALLET_FILE = configFile('wallet.json');\n\nconst storedWalletSchema = z.object({\n privateKey: z\n .string()\n .regex(/^0x[a-fA-F0-9]{64}$/, 'Invalid Ethereum private key')\n .transform(privateKey => privateKey as Hex),\n address: z\n .string()\n .regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address')\n .transform(address => getAddress(address)),\n createdAt: z.string(),\n});\n\nconst walletSurface = 'wallet';\n\nconst LEGACY_WALLET = join(LEGACY_DIRECTORY, 'wallet.json');\n\nconst reconcileSurface = 'wallet-reconcile';\n\nasync function reconcileLegacyWallet(\n current: PrivateKeyAccount,\n isNew: boolean\n): Promise<{ account: PrivateKeyAccount; isNew: boolean }> {\n const noChange = { account: current, isNew };\n\n // 1. No legacy wallet → nothing to reconcile\n if (!existsSync(LEGACY_WALLET)) {\n return noChange;\n }\n\n // 2. Read & parse legacy wallet\n const legacyResult = resultFromThrowable(\n 'wallet',\n reconcileSurface,\n () => {\n const raw = readFileSync(LEGACY_WALLET, 'utf-8');\n return storedWalletSchema.parse(JSON.parse(raw));\n },\n () => ({\n cause: 'file_not_readable' as const,\n message: 'Legacy wallet exists but is invalid',\n })\n );\n\n if (legacyResult.isErr()) {\n log.info('Legacy wallet exists but is invalid, skipping reconciliation');\n return noChange;\n }\n\n const legacyKey = legacyResult.value.privateKey;\n\n // 3. Same key → already reconciled\n const legacyAccount = privateKeyToAccount(legacyKey);\n if (legacyAccount.address === current.address) {\n return noChange;\n }\n\n // 4. Keys differ → check balances\n const balancesResult = await resultFromPromise(\n 'wallet',\n reconcileSurface,\n Promise.all([\n getBalance({\n address: legacyAccount.address,\n surface: reconcileSurface,\n }),\n getBalance({\n address: current.address,\n surface: reconcileSurface,\n }),\n ]),\n () => ({\n cause: 'balance_check' as const,\n message: 'Network error during wallet reconciliation',\n })\n );\n\n if (balancesResult.isErr()) {\n log.info('Network error during wallet reconciliation, skipping');\n return noChange;\n }\n\n const [legacyBalanceResult, currentBalanceResult] = balancesResult.value;\n\n if (legacyBalanceResult.isErr() || currentBalanceResult.isErr()) {\n log.info('Could not check balances for wallet reconciliation, skipping');\n return noChange;\n }\n\n const legacyBalance = legacyBalanceResult.value.balance;\n const currentBalance = currentBalanceResult.value.balance;\n\n // 4a. Legacy has balance, current is empty → recover legacy\n if (legacyBalance > 0 && currentBalance === 0) {\n log.info(\n `Recovering funded legacy wallet ${legacyAccount.address} (balance: ${legacyBalance})`\n );\n const stored = {\n privateKey: legacyKey,\n address: legacyAccount.address,\n createdAt: new Date().toISOString(),\n };\n const writeResult = await safeWriteFile(\n reconcileSurface,\n WALLET_FILE,\n JSON.stringify(stored, null, 2)\n ).andThen(() => safeChmod(reconcileSurface, WALLET_FILE, 0o600));\n\n if (writeResult.isErr()) {\n log.error(\n `Failed to write recovered wallet: ${writeResult.error.message}`\n );\n return noChange;\n }\n\n return { account: legacyAccount, isNew: false };\n }\n\n // 4b. Both have balance → manual intervention needed\n if (legacyBalance > 0 && currentBalance > 0) {\n log.info(\n `Both wallets have funds. Current: ${current.address} (${currentBalance}), Legacy: ${legacyAccount.address} (${legacyBalance}). ` +\n `Manually copy ${LEGACY_WALLET} to ${WALLET_FILE} if you want to use the legacy wallet.`\n );\n return noChange;\n }\n\n // 4c. Legacy has no balance → nothing to recover\n return noChange;\n}\n\nexport async function getWallet() {\n if (process.env.X402_PRIVATE_KEY) {\n const account = privateKeyToAccount(process.env.X402_PRIVATE_KEY as Hex);\n log.info(`Using wallet from env: ${account.address}`);\n return ok({ account, isNew: false });\n }\n\n const readFileResult = await safeReadFile(walletSurface, WALLET_FILE);\n\n if (!readFileResult.isOk()) {\n const fileExistsResult = existsSync(WALLET_FILE);\n // file exists but is not readable\n if (fileExistsResult) {\n return fsErr(walletSurface, {\n cause: 'file_not_readable',\n message: `The file exists but is not readable. Fix corrupted state file: ${WALLET_FILE}`,\n });\n }\n }\n\n if (readFileResult.isOk()) {\n const data = readFileResult.value;\n const jsonParseResult = safeParseJson(walletSurface, data);\n\n // file exists but is not valid JSON\n if (jsonParseResult.isErr()) {\n return jsonErr(walletSurface, {\n cause: 'parse',\n message: `The data in ${WALLET_FILE} is not valid JSON`,\n });\n }\n\n const parseResult = safeParse(\n walletSurface,\n storedWalletSchema,\n jsonParseResult.value\n );\n\n // file has valid JSON but is not a valid wallet configuration\n if (parseResult.isErr()) {\n return parseResult;\n }\n\n const account = privateKeyToAccount(parseResult.value.privateKey);\n log.info(`Loaded wallet: ${account.address}`);\n const reconciled = await reconcileLegacyWallet(account, false);\n return ok(reconciled);\n }\n\n // Generate new\n const privateKey = generatePrivateKey();\n const account = privateKeyToAccount(privateKey);\n const stored = {\n privateKey,\n address: account.address,\n createdAt: new Date().toISOString(),\n };\n\n const saveResult = await safeWriteFile(\n walletSurface,\n WALLET_FILE,\n JSON.stringify(stored, null, 2)\n ).andThen(() => safeChmod(walletSurface, WALLET_FILE, 0o600));\n\n if (saveResult.isErr()) {\n return saveResult;\n }\n\n log.info(`Created wallet: ${account.address}`);\n log.info(`Saved to: ${WALLET_FILE}`);\n\n const reconciled = await reconcileLegacyWallet(account, true);\n return ok(reconciled);\n}\n","import z from 'zod';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { err, resultFromPromise } from '@agentcash/neverthrow';\n\nimport { getBaseUrl } from './utils';\nimport { getState, setState } from './state';\n\nimport type { Address } from 'viem';\n\nexport interface RedeemInviteProps {\n code: string;\n address: Address;\n surface: string;\n dev?: boolean;\n}\n\nexport const redeemInviteCode = async ({\n code,\n address,\n surface,\n dev = false,\n}: RedeemInviteProps) => {\n const state = getState();\n\n if (state.redeemedCodes?.includes(code)) {\n return err('user', surface, {\n cause: 'conflict',\n message: 'This invite code has already been redeemed',\n });\n }\n\n const result = await safeFetchJson(\n surface,\n new Request(`${getBaseUrl(dev)}/api/redeem`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n code,\n recipientAddr: address,\n }),\n }),\n z.object({\n redemptionId: z.string(),\n txHash: z.string(),\n amount: z.coerce.number(),\n })\n );\n\n if (result.isOk()) {\n setState({\n redeemedCodes: [...(state.redeemedCodes ?? []), code],\n });\n return result;\n }\n\n // Extract error message from response body when available\n const error = result.error;\n if (error.cause === 'http' && error.response) {\n const bodyResult = await resultFromPromise(\n 'user',\n surface,\n error.response.json() as Promise<{ error?: string }>,\n () => ({\n cause: 'parse' as const,\n message: 'Could not parse error response',\n })\n );\n\n if (bodyResult.isOk() && bodyResult.value.error) {\n return err('user', surface, {\n cause: 'conflict',\n message: bodyResult.value.error,\n });\n }\n }\n\n return result;\n};\n","import {\n base,\n baseSepolia,\n mainnet,\n sepolia,\n optimism,\n arbitrum,\n polygon,\n} from 'viem/chains';\n\nimport type { Chain } from 'viem';\n\nexport interface ChainConfig {\n chain: Chain;\n caip2: string;\n v1Name: string;\n usdcAddress: `0x${string}`;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n 'eip155:8453': {\n chain: base,\n caip2: 'eip155:8453',\n v1Name: 'base',\n usdcAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n },\n 'eip155:84532': {\n chain: baseSepolia,\n caip2: 'eip155:84532',\n v1Name: 'base-sepolia',\n usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n },\n 'eip155:1': {\n chain: mainnet,\n caip2: 'eip155:1',\n v1Name: 'ethereum',\n usdcAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n },\n 'eip155:11155111': {\n chain: sepolia,\n caip2: 'eip155:11155111',\n v1Name: 'ethereum-sepolia',\n usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n },\n 'eip155:10': {\n chain: optimism,\n caip2: 'eip155:10',\n v1Name: 'optimism',\n usdcAddress: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n },\n 'eip155:42161': {\n chain: arbitrum,\n caip2: 'eip155:42161',\n v1Name: 'arbitrum',\n usdcAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n },\n 'eip155:137': {\n chain: polygon,\n caip2: 'eip155:137',\n v1Name: 'polygon',\n usdcAddress: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n },\n};\n\nconst V1_TO_CAIP2: Record<string, string> = {\n base: 'eip155:8453',\n 'base-sepolia': 'eip155:84532',\n ethereum: 'eip155:1',\n 'ethereum-sepolia': 'eip155:11155111',\n optimism: 'eip155:10',\n arbitrum: 'eip155:42161',\n polygon: 'eip155:137',\n};\n\nexport const DEFAULT_NETWORK = 'eip155:8453';\n\n/** Convert any network identifier to CAIP-2 format */\nexport function toCaip2(network: string): string {\n if (network.startsWith('eip155:')) return network;\n return V1_TO_CAIP2[network.toLowerCase()] ?? network;\n}\n\n/** Get chain config from network identifier */\nexport function getChainConfig(network: string): ChainConfig | undefined {\n return CHAIN_CONFIGS[toCaip2(network)];\n}\n\n/** Get USDC address for a network */\nexport function getUSDCAddress(network: string): `0x${string}` | undefined {\n return getChainConfig(network)?.usdcAddress;\n}\n\n/** Extract chain ID from CAIP-2 identifier */\nexport function getChainId(network: string): number | undefined {\n const caip2 = toCaip2(network);\n const match = /^eip155:(\\d+)$/.exec(caip2);\n return match ? parseInt(match[1]!, 10) : undefined;\n}\n\n/** Get human-readable chain name */\nexport function getChainName(network: string): string {\n return getChainConfig(network)?.chain.name ?? network;\n}\n\n/** Check if network is a testnet */\nexport function isTestnet(network: string): boolean {\n return getChainConfig(network)?.chain.testnet === true;\n}\n"],"mappings":"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","names":["account","reconciled","z","z"]}
@@ -4,7 +4,7 @@ import { dirname, join } from "path";
4
4
  import { fileURLToPath } from "url";
5
5
  function getVersion() {
6
6
  if (true) {
7
- return "0.7.7";
7
+ return "0.8.0";
8
8
  }
9
9
  const __dirname2 = dirname(fileURLToPath(import.meta.url));
10
10
  const pkg = JSON.parse(
@@ -19,4 +19,4 @@ export {
19
19
  MCP_VERSION,
20
20
  DIST_TAG
21
21
  };
22
- //# sourceMappingURL=chunk-JKCEMNAF.js.map
22
+ //# sourceMappingURL=chunk-VR5I67WE.js.map