@aifinpay/mcp 2.5.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -20
- package/dist/config.d.ts +6 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +39 -4
- package/dist/config.js.map +1 -1
- package/dist/native-price.d.ts +1 -1
- package/dist/native-price.d.ts.map +1 -1
- package/dist/native-price.js +3 -3
- package/dist/native-price.js.map +1 -1
- package/dist/pay-chains.d.ts +5 -4
- package/dist/pay-chains.d.ts.map +1 -1
- package/dist/pay-chains.js +29 -28
- package/dist/pay-chains.js.map +1 -1
- package/dist/payment-identity.d.ts +17 -0
- package/dist/payment-identity.d.ts.map +1 -0
- package/dist/payment-identity.js +75 -0
- package/dist/payment-identity.js.map +1 -0
- package/dist/payment-state.d.ts +2 -1
- package/dist/payment-state.d.ts.map +1 -1
- package/dist/payment-state.js +52 -17
- package/dist/payment-state.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/agent-claim-self.d.ts +3 -3
- package/dist/tools/agent-claim-self.d.ts.map +1 -1
- package/dist/tools/agent-claim-self.js +65 -88
- package/dist/tools/agent-claim-self.js.map +1 -1
- package/dist/tools/agent-history.d.ts +0 -1
- package/dist/tools/agent-history.d.ts.map +1 -1
- package/dist/tools/agent-history.js +51 -52
- package/dist/tools/agent-history.js.map +1 -1
- package/dist/tools/agent-quota.d.ts.map +1 -1
- package/dist/tools/agent-quota.js +42 -11
- package/dist/tools/agent-quota.js.map +1 -1
- package/dist/tools/payable-fetch.d.ts.map +1 -1
- package/dist/tools/payable-fetch.js +156 -57
- package/dist/tools/payable-fetch.js.map +1 -1
- package/package.json +6 -6
- package/skills/SKILL.md +165 -43
- package/dist/directory.d.ts +0 -55
- package/dist/directory.d.ts.map +0 -1
- package/dist/directory.js +0 -56
- package/dist/directory.js.map +0 -1
- package/dist/tools/agent-call.d.ts +0 -68
- package/dist/tools/agent-call.d.ts.map +0 -1
- package/dist/tools/agent-call.js +0 -129
- package/dist/tools/agent-call.js.map +0 -1
- package/dist/tools/agent-quote.d.ts +0 -41
- package/dist/tools/agent-quote.d.ts.map +0 -1
- package/dist/tools/agent-quote.js +0 -81
- package/dist/tools/agent-quote.js.map +0 -1
- package/dist/tools/pay-with-split.d.ts +0 -93
- package/dist/tools/pay-with-split.d.ts.map +0 -1
- package/dist/tools/pay-with-split.js +0 -138
- package/dist/tools/pay-with-split.js.map +0 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import bs58 from "bs58";
|
|
2
|
+
import { solanaV14Inventory } from "@aifinpay/agent";
|
|
3
|
+
export function isSolanaPublicKey(value) {
|
|
4
|
+
try {
|
|
5
|
+
return typeof value === "string" && bs58.decode(value).length === 32 && bs58.encode(bs58.decode(value)) === value;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** Read/recovery inventory never grants settlement availability. */
|
|
12
|
+
export function solanaHistorySelection(config) {
|
|
13
|
+
const network = config.solanaNetwork;
|
|
14
|
+
if (network !== (config.devMode ? "devnet" : "mainnet"))
|
|
15
|
+
throw new Error("Solana history requires an explicit network matching the owner's configured mode");
|
|
16
|
+
const deployment = solanaV14Inventory(config.devMode ? "dev" : "prod", network);
|
|
17
|
+
return { network, program: deployment.programId };
|
|
18
|
+
}
|
|
19
|
+
/** A pinned request alone does not make a misconfigured response match it. */
|
|
20
|
+
export function assertSolanaReadContext(value, address, selected, identityField) {
|
|
21
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
22
|
+
throw new Error("Invalid Solana metadata");
|
|
23
|
+
const row = value;
|
|
24
|
+
if (row.chain !== "solana" ||
|
|
25
|
+
row.network !== selected.network ||
|
|
26
|
+
row.program !== selected.program ||
|
|
27
|
+
(row.program_id !== undefined && row.program_id !== selected.program) ||
|
|
28
|
+
row[identityField] !== address)
|
|
29
|
+
throw new Error("Solana metadata changed the selected wallet, cluster or program");
|
|
30
|
+
}
|
|
31
|
+
export function assertSolanaQuota(row) {
|
|
32
|
+
if (["merchant_id", "resource", "scope", "tier", "receipt_id", "currency"].some((f) => row[f] != null && typeof row[f] !== "string"))
|
|
33
|
+
throw new Error("Invalid structured Solana quota metadata");
|
|
34
|
+
if (row.amount != null &&
|
|
35
|
+
!((typeof row.amount === "number" && Number.isFinite(row.amount) && row.amount >= 0) ||
|
|
36
|
+
(typeof row.amount === "string" && /^\d+(\.\d+)?$/.test(row.amount))))
|
|
37
|
+
throw new Error("Invalid Solana quota amount metadata");
|
|
38
|
+
const units = row.unit_quota;
|
|
39
|
+
const used = row.used;
|
|
40
|
+
const remaining = row.remaining;
|
|
41
|
+
if (!Number.isSafeInteger(units) ||
|
|
42
|
+
Number(units) < 1 ||
|
|
43
|
+
!Number.isSafeInteger(used) ||
|
|
44
|
+
Number(used) < 0 ||
|
|
45
|
+
!Number.isSafeInteger(remaining) ||
|
|
46
|
+
Number(remaining) < 0 ||
|
|
47
|
+
Number(used) > Number(units) ||
|
|
48
|
+
Number(remaining) !== Number(units) - Number(used) ||
|
|
49
|
+
!Number.isSafeInteger(row.exp) ||
|
|
50
|
+
Number(row.exp) <= 0 ||
|
|
51
|
+
Number(row.exp) > 8_640_000_000_000)
|
|
52
|
+
throw new Error("Solana quota usage is unavailable or malformed");
|
|
53
|
+
}
|
|
54
|
+
export function solanaIndexingMetadata(value) {
|
|
55
|
+
if (value == null)
|
|
56
|
+
return undefined;
|
|
57
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
58
|
+
throw new Error("Invalid Solana coverage metadata");
|
|
59
|
+
const row = value;
|
|
60
|
+
if (row.coverage_kind !== "retained_rpc_inventory" ||
|
|
61
|
+
row.archive_complete !== false ||
|
|
62
|
+
typeof row.complete !== "boolean" ||
|
|
63
|
+
!(row.coverage_start === null ||
|
|
64
|
+
(Number.isSafeInteger(row.coverage_start) &&
|
|
65
|
+
Number(row.coverage_start) >= 0 &&
|
|
66
|
+
Number(row.coverage_start) <= 8_640_000_000_000)))
|
|
67
|
+
throw new Error("Solana coverage is partial or unavailable; invalid archive/coverage assertion");
|
|
68
|
+
return {
|
|
69
|
+
coverage_kind: row.coverage_kind,
|
|
70
|
+
coverage_start: row.coverage_start,
|
|
71
|
+
archive_complete: false,
|
|
72
|
+
complete: row.complete,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=payment-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-identity.js","sourceRoot":"","sources":["../src/payment-identity.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,CAAC;QACH,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC;IACpH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;IACrC,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;IACtG,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC;AACpD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,uBAAuB,CACrC,KAAc,EACd,OAAe,EACf,QAAmD,EACnD,aAAoD;IAEpD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC5G,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,IACE,GAAG,CAAC,KAAK,KAAK,QAAQ;QACtB,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO;QAChC,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO;QAChC,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,OAAO,CAAC;QACrE,GAAG,CAAC,aAAa,CAAC,KAAK,OAAO;QAE9B,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAA4B;IAC5D,IACE,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,IAAI,CACzE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CACpD;QAED,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,IACE,GAAG,CAAC,MAAM,IAAI,IAAI;QAClB,CAAC,CACC,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;YAClF,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CACrE;QAED,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC;IAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAChC,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACjB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAChB,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;QAChC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;QAClD,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;QACpB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,iBAAiB;QAEnC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACrH,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,IACE,GAAG,CAAC,aAAa,KAAK,wBAAwB;QAC9C,GAAG,CAAC,gBAAgB,KAAK,KAAK;QAC9B,OAAO,GAAG,CAAC,QAAQ,KAAK,SAAS;QACjC,CAAC,CACC,GAAG,CAAC,cAAc,KAAK,IAAI;YAC3B,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;gBACvC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC/B,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,iBAAiB,CAAC,CACnD;QAED,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACnG,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,gBAAgB,EAAE,KAAK;QACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC;AACJ,CAAC"}
|
package/dist/payment-state.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Aifp1CachedReceipt, Aifp1PaymentRecovery } from "@aifinpay/agent";
|
|
2
2
|
export interface PendingPayment {
|
|
3
3
|
recovery: Aifp1PaymentRecovery;
|
|
4
|
-
serializedTransaction
|
|
4
|
+
serializedTransaction?: `0x${string}`;
|
|
5
5
|
site: string;
|
|
6
6
|
amountUsd: number;
|
|
7
7
|
}
|
|
@@ -14,6 +14,7 @@ export interface PaymentState {
|
|
|
14
14
|
at: number;
|
|
15
15
|
usd: number;
|
|
16
16
|
tx: string;
|
|
17
|
+
failure?: true;
|
|
17
18
|
}[];
|
|
18
19
|
}
|
|
19
20
|
export declare class PaymentStateError extends Error {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-state.d.ts","sourceRoot":"","sources":["../src/payment-state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payment-state.d.ts","sourceRoot":"","sources":["../src/payment-state.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,qBAAqB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,IAAI,CAAA;KAAE,EAAE,CAAC;CAClE;AAED,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAyC/C,gFAAgF;AAChF,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBACtB,OAAO,EAAE,MAAM,EAAE,UAAU,SAA+B;IAWtE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,gBAAgB;IAMlB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAkBpD,IAAI,IAAI,YAAY;IAwBpB,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAsB/B,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,SAAa,GAAG,MAAM;CAGxD"}
|
package/dist/payment-state.js
CHANGED
|
@@ -2,8 +2,45 @@ import { constants, closeSync, existsSync, fsyncSync, lstatSync, mkdirSync, open
|
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
|
+
import bs58 from "bs58";
|
|
5
6
|
export class PaymentStateError extends Error {
|
|
6
7
|
}
|
|
8
|
+
function isSolanaSignature(value) {
|
|
9
|
+
try {
|
|
10
|
+
return typeof value === "string" && bs58.decode(value).length === 64 && bs58.encode(bs58.decode(value)) === value;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function isTransactionReference(value) {
|
|
17
|
+
return typeof value === "string" && (/^0x[0-9a-fA-F]{64}$/.test(value) || isSolanaSignature(value));
|
|
18
|
+
}
|
|
19
|
+
function validPending(state) {
|
|
20
|
+
const r = state.recovery;
|
|
21
|
+
if (!r || !Number.isFinite(state.amountUsd) || state.amountUsd <= 0)
|
|
22
|
+
return false;
|
|
23
|
+
if (r.family === "solana") {
|
|
24
|
+
const p = r.solana;
|
|
25
|
+
if (state.serializedTransaction !== undefined ||
|
|
26
|
+
r.chain !== "solana" ||
|
|
27
|
+
!p ||
|
|
28
|
+
p.family !== "solana" ||
|
|
29
|
+
!isSolanaSignature(r.txRef) ||
|
|
30
|
+
p.hash !== r.txRef ||
|
|
31
|
+
!["mainnet", "devnet"].includes(p.network) ||
|
|
32
|
+
typeof p.serializedTransactionBase64 !== "string" ||
|
|
33
|
+
p.serializedTransactionBase64.length > 1644 ||
|
|
34
|
+
!/^[A-Za-z0-9+/]+={0,2}$/.test(p.serializedTransactionBase64))
|
|
35
|
+
return false;
|
|
36
|
+
const bytes = Buffer.from(p.serializedTransactionBase64, "base64");
|
|
37
|
+
return bytes.length > 0 && bytes.toString("base64") === p.serializedTransactionBase64;
|
|
38
|
+
}
|
|
39
|
+
return ((r.family === undefined || r.family === "evm") &&
|
|
40
|
+
/^0x[0-9a-fA-F]{64}$/.test(r.txRef) &&
|
|
41
|
+
typeof state.serializedTransaction === "string" &&
|
|
42
|
+
/^0x[0-9a-fA-F]+$/.test(state.serializedTransaction));
|
|
43
|
+
}
|
|
7
44
|
/** Per-wallet lock and crash-safe private journal. Never print its contents. */
|
|
8
45
|
export class PaymentStateStore {
|
|
9
46
|
directory;
|
|
@@ -23,19 +60,21 @@ export class PaymentStateStore {
|
|
|
23
60
|
}
|
|
24
61
|
address;
|
|
25
62
|
durableDirectory(path) {
|
|
26
|
-
if (existsSync(path))
|
|
27
|
-
return;
|
|
28
63
|
const parent = dirname(path);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
64
|
+
if (parent !== path)
|
|
65
|
+
this.durableDirectory(parent);
|
|
66
|
+
if (!existsSync(path)) {
|
|
67
|
+
try {
|
|
68
|
+
mkdirSync(path, { mode: 0o700 });
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
if (error.code !== "EEXIST")
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
36
74
|
}
|
|
37
75
|
// A durable file inside a newly created directory is insufficient: persist
|
|
38
|
-
// every
|
|
76
|
+
// every ancestor entry before a prepared payment may be broadcast. An
|
|
77
|
+
// existing entry may be left by a previous failed fsync or another creator.
|
|
39
78
|
for (const directory of [path, parent]) {
|
|
40
79
|
const fd = openSync(directory, constants.O_RDONLY);
|
|
41
80
|
try {
|
|
@@ -82,15 +121,11 @@ export class PaymentStateStore {
|
|
|
82
121
|
state.address !== this.address ||
|
|
83
122
|
!Array.isArray(state.receipts) ||
|
|
84
123
|
!Array.isArray(state.spend) ||
|
|
85
|
-
state.spend.some((s) => !Number.isFinite(s.at) || !Number.isFinite(s.usd) || s.usd
|
|
124
|
+
state.spend.some((s) => !Number.isFinite(s.at) || !Number.isFinite(s.usd) || s.usd < 0 ||
|
|
125
|
+
(s.usd === 0 && s.failure !== true) || (s.failure !== undefined && s.failure !== true) || !isTransactionReference(s.tx))) {
|
|
86
126
|
throw new PaymentStateError("Invalid payment state; refusing to reset spent budget");
|
|
87
127
|
}
|
|
88
|
-
if (state.pending &&
|
|
89
|
-
(!state.pending.recovery ||
|
|
90
|
-
!/^0x[0-9a-fA-F]{64}$/.test(state.pending.recovery.txRef) ||
|
|
91
|
-
!/^0x[0-9a-fA-F]+$/.test(state.pending.serializedTransaction) ||
|
|
92
|
-
!Number.isFinite(state.pending.amountUsd) ||
|
|
93
|
-
state.pending.amountUsd <= 0)) {
|
|
128
|
+
if (state.pending && !validPending(state.pending)) {
|
|
94
129
|
throw new PaymentStateError("Invalid pending payment; manual reconciliation required");
|
|
95
130
|
}
|
|
96
131
|
return state;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-state.js","sourceRoot":"","sources":["../src/payment-state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"payment-state.js","sourceRoot":"","sources":["../src/payment-state.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
|
3
3
|
import type { McpConfig } from "./config.js";
|
|
4
4
|
import { PaymentStateStore } from "./payment-state.js";
|
|
5
5
|
/** Read-only by default. Explicit owner configuration enables the reviewed
|
|
6
|
-
*
|
|
6
|
+
* family-specific v1.4 payable_fetch path; legacy signing tools stay retired. */
|
|
7
7
|
export declare function createServer(config?: McpConfig): Promise<{
|
|
8
8
|
server: Server<{
|
|
9
9
|
method: string;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA0BvD;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA0BvD;iFACiF;AACjF,wBAAsB,YAAY,CAAC,MAAM,GAAE,SAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2LxD;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9D"}
|
package/dist/server.js
CHANGED
|
@@ -24,7 +24,7 @@ const safeFetch = makeSafeFetch({
|
|
|
24
24
|
trustedHosts: loadConfigFromEnv().trustedHosts,
|
|
25
25
|
});
|
|
26
26
|
/** Read-only by default. Explicit owner configuration enables the reviewed
|
|
27
|
-
*
|
|
27
|
+
* family-specific v1.4 payable_fetch path; legacy signing tools stay retired. */
|
|
28
28
|
export async function createServer(config = {}) {
|
|
29
29
|
const log = config.logFn ?? defaultLog;
|
|
30
30
|
let identitySource = "ephemeral";
|
|
@@ -34,11 +34,12 @@ export async function createServer(config = {}) {
|
|
|
34
34
|
return null;
|
|
35
35
|
// The owner's RPC for the pay chain, if set, is the one the SDK settles
|
|
36
36
|
// through; otherwise the SDK keeps its public default for that chain.
|
|
37
|
-
const rpc = config.rpcUrl ? { [config.payChain ?? "polygon"]: config.rpcUrl } : undefined;
|
|
37
|
+
const rpc = config.rpcUrl && config.payChain !== "solana" ? { [config.payChain ?? "polygon"]: config.rpcUrl } : undefined;
|
|
38
38
|
const options = {
|
|
39
39
|
fetchImpl: safeFetch,
|
|
40
40
|
baseUrl: config.baseUrl,
|
|
41
41
|
timeoutMs: config.timeoutMs,
|
|
42
|
+
...(config.payChain === "solana" && config.rpcUrl ? { solanaRpc: config.rpcUrl } : {}),
|
|
42
43
|
...(rpc ? { evmRpcUrls: rpc, ...(rpc.polygon ? { polygonRpc: rpc.polygon } : {}) } : {}),
|
|
43
44
|
};
|
|
44
45
|
const loaded = identity.seedHash
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEpF,2EAA2E;AAC3E,8EAA8E;AAC9E,qDAAqD;AACrD,MAAM,SAAS,GAAG,aAAa,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,GAAG;IAC9D,8EAA8E;IAC9E,0EAA0E;IAC1E,YAAY,EAAE,iBAAiB,EAAE,CAAC,YAAY;CAC/C,CAAC,CAAC;AAEH;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,8 @@ import type { ToolContext } from "../server.js";
|
|
|
10
10
|
* using this magic link"
|
|
11
11
|
* 3. Agent calls this tool with the magic_link_url
|
|
12
12
|
* 4. Tool hits the magic link → server issues session cookie
|
|
13
|
-
* 5. Tool
|
|
14
|
-
* 6. Tool signs
|
|
13
|
+
* 5. Tool requests a challenge for the owner-selected payment family
|
|
14
|
+
* 6. Tool signs only that address's claim (EIP-191 or Ed25519)
|
|
15
15
|
* 7. Tool POSTs to /api/me/agents/claim → server verifies signature →
|
|
16
16
|
* agent attached to user's watchlist
|
|
17
17
|
*
|
|
@@ -19,7 +19,7 @@ import type { ToolContext } from "../server.js";
|
|
|
19
19
|
*
|
|
20
20
|
* Security model:
|
|
21
21
|
* - Magic-link URL is one-shot, 15-min TTL, identifies the user
|
|
22
|
-
* - Signature proves the agent
|
|
22
|
+
* - Signature proves the agent controls the selected wallet
|
|
23
23
|
* - Combination: "this user OWNS this agent". Either alone is
|
|
24
24
|
* insufficient (signature alone can't pick an account; magic link
|
|
25
25
|
* alone can't prove key control).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-claim-self.d.ts","sourceRoot":"","sources":["../../src/tools/agent-claim-self.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-claim-self.d.ts","sourceRoot":"","sources":["../../src/tools/agent-claim-self.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;EA8BjC;AAqED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;GAyKtF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { payChain } from "../pay-chains.js";
|
|
1
2
|
/**
|
|
2
3
|
* `agent_claim_self` — agent attaches itself to a user's AiFinPay account
|
|
3
4
|
* autonomously by signing a claim challenge with its own key.
|
|
@@ -9,8 +10,8 @@
|
|
|
9
10
|
* using this magic link"
|
|
10
11
|
* 3. Agent calls this tool with the magic_link_url
|
|
11
12
|
* 4. Tool hits the magic link → server issues session cookie
|
|
12
|
-
* 5. Tool
|
|
13
|
-
* 6. Tool signs
|
|
13
|
+
* 5. Tool requests a challenge for the owner-selected payment family
|
|
14
|
+
* 6. Tool signs only that address's claim (EIP-191 or Ed25519)
|
|
14
15
|
* 7. Tool POSTs to /api/me/agents/claim → server verifies signature →
|
|
15
16
|
* agent attached to user's watchlist
|
|
16
17
|
*
|
|
@@ -18,7 +19,7 @@
|
|
|
18
19
|
*
|
|
19
20
|
* Security model:
|
|
20
21
|
* - Magic-link URL is one-shot, 15-min TTL, identifies the user
|
|
21
|
-
* - Signature proves the agent
|
|
22
|
+
* - Signature proves the agent controls the selected wallet
|
|
22
23
|
* - Combination: "this user OWNS this agent". Either alone is
|
|
23
24
|
* insufficient (signature alone can't pick an account; magic link
|
|
24
25
|
* alone can't prove key control).
|
|
@@ -162,10 +163,10 @@ export async function runAgentClaimSelf(ctx, args) {
|
|
|
162
163
|
};
|
|
163
164
|
}
|
|
164
165
|
}
|
|
165
|
-
catch
|
|
166
|
+
catch {
|
|
166
167
|
return {
|
|
167
168
|
isError: true,
|
|
168
|
-
content: [{ type: "text", text:
|
|
169
|
+
content: [{ type: "text", text: "Failed to fetch magic link; no claim was completed." }],
|
|
169
170
|
};
|
|
170
171
|
}
|
|
171
172
|
// Some setups split multiple cookies; grab the session one we care about.
|
|
@@ -173,14 +174,12 @@ export async function runAgentClaimSelf(ctx, args) {
|
|
|
173
174
|
.split(",")
|
|
174
175
|
.map((c) => c.trim().split(";")[0])
|
|
175
176
|
.join("; ");
|
|
176
|
-
//
|
|
177
|
-
//
|
|
178
|
-
|
|
179
|
-
|
|
177
|
+
// The owner-selected payment family is required. The other wallet is
|
|
178
|
+
// best-effort and can never turn a failed primary claim into success.
|
|
179
|
+
const selected = payChain(ctx.config?.payChain);
|
|
180
|
+
const primarySolana = selected.name === "solana";
|
|
180
181
|
const evmAddr = ctx.agent.evmAddress;
|
|
181
182
|
const solAddr = ctx.agent.solanaAddress;
|
|
182
|
-
const innerAny = ctx.agent.inner;
|
|
183
|
-
const solSecret = innerAny.secretKey; // tweetnacl 64-byte secretKey
|
|
184
183
|
async function claimOne(address, sigFn) {
|
|
185
184
|
// 1) challenge
|
|
186
185
|
const cr = await fetch(`${apiBase}/api/me/agents/challenge`, {
|
|
@@ -190,8 +189,8 @@ export async function runAgentClaimSelf(ctx, args) {
|
|
|
190
189
|
body: JSON.stringify({ address }),
|
|
191
190
|
});
|
|
192
191
|
const cj = (await cr.json());
|
|
193
|
-
if (!cr.ok || !cj.challenge_id || !cj.message) {
|
|
194
|
-
return { ok: false, reason:
|
|
192
|
+
if (!cr.ok || !cj || typeof cj.challenge_id !== "string" || !cj.challenge_id || typeof cj.message !== "string") {
|
|
193
|
+
return { ok: false, reason: `challenge refused (HTTP ${cr.status})` };
|
|
195
194
|
}
|
|
196
195
|
// 2) sign — but only the one shape this exchange is defined to produce.
|
|
197
196
|
if (!challengeIsWellFormed(cj.message, address)) {
|
|
@@ -204,8 +203,8 @@ export async function runAgentClaimSelf(ctx, args) {
|
|
|
204
203
|
try {
|
|
205
204
|
sigPayload = await sigFn(cj.message);
|
|
206
205
|
}
|
|
207
|
-
catch
|
|
208
|
-
return { ok: false, reason:
|
|
206
|
+
catch {
|
|
207
|
+
return { ok: false, reason: "local claim signer unavailable" };
|
|
209
208
|
}
|
|
210
209
|
// 3) submit
|
|
211
210
|
const sr = await fetch(`${apiBase}/api/me/agents/claim`, {
|
|
@@ -215,86 +214,64 @@ export async function runAgentClaimSelf(ctx, args) {
|
|
|
215
214
|
body: JSON.stringify({ challenge_id: cj.challenge_id, label, ...sigPayload }),
|
|
216
215
|
});
|
|
217
216
|
const sj = (await sr.json());
|
|
218
|
-
|
|
219
|
-
|
|
217
|
+
const expectedChain = address.startsWith("0x") ? "polygon" : "solana";
|
|
218
|
+
const sameAddress = typeof sj?.agent_address === "string" &&
|
|
219
|
+
(expectedChain === "polygon"
|
|
220
|
+
? sj.agent_address.toLowerCase() === address.toLowerCase()
|
|
221
|
+
: sj.agent_address === address);
|
|
222
|
+
if (!sr.ok || sj?.ok !== true || sj.chain !== expectedChain || !sameAddress) {
|
|
223
|
+
return { ok: false, reason: "claim response does not confirm this wallet and family" };
|
|
220
224
|
}
|
|
221
225
|
return { ok: true };
|
|
222
226
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
catch (e) {
|
|
244
|
-
solRes = { ok: false, reason: `solana_signer_unavailable: ${e.message}` };
|
|
245
|
-
}
|
|
246
|
-
// ── 4. Balance check (best-effort) — drives funded-vs-unfunded copy ─
|
|
247
|
-
// Never block the claim flow on a balance check; if the RPC is down or
|
|
248
|
-
// balance() throws, fall back to the standard funding recommendation.
|
|
249
|
-
// payable_fetch settles AIFP-1 v1.4 in native POL, so POL is what counts.
|
|
250
|
-
let polygonPol = 0;
|
|
251
|
-
let polUsd = null;
|
|
252
|
-
try {
|
|
253
|
-
const bal = await ctx.agent.balance();
|
|
254
|
-
polygonPol = bal.chains.polygon.matic ?? 0;
|
|
255
|
-
polUsd = Number.isFinite(bal.prices?.pol?.usd) ? bal.prices.pol.usd : null;
|
|
256
|
-
}
|
|
257
|
-
catch {
|
|
258
|
-
/* swallow — keep funding_recommendation as-is */
|
|
259
|
-
}
|
|
260
|
-
// ── 5. Report ──────────────────────────────────────────────────────
|
|
261
|
-
try {
|
|
262
|
-
// The dashboard is dash.aifinpay.io; /me redirects to My Agents.
|
|
263
|
-
// (dashboard.aifinpay.io only 301s here.)
|
|
264
|
-
const DASHBOARD_BASE = "https://dash.aifinpay.io";
|
|
265
|
-
// Funded threshold: $0.20 of POL — the smallest batch ($0.10) plus gas.
|
|
266
|
-
// At or above it we say so, so the agent does not ask for money it has.
|
|
267
|
-
const FUNDED_USD_THRESHOLD = 0.2;
|
|
268
|
-
const polValueUsd = polUsd === null ? null : polygonPol * polUsd;
|
|
269
|
-
const fundingFields = polValueUsd !== null && polValueUsd >= FUNDED_USD_THRESHOLD
|
|
270
|
-
? { funding_status: `Funded — ${polygonPol.toFixed(4)} POL (≈ $${polValueUsd.toFixed(2)}) on Polygon` }
|
|
271
|
-
: {
|
|
272
|
-
// AIFP-1 v1.4 settles in native POL on Polygon, and gas is POL too.
|
|
273
|
-
funding_recommendation: `Send POL on Polygon to ${evmAddr}. The smallest batch is $0.10 plus gas; 2–3 POL covers many batches.`,
|
|
274
|
-
};
|
|
275
|
-
return {
|
|
276
|
-
content: [
|
|
277
|
-
{
|
|
278
|
-
type: "text",
|
|
279
|
-
text: JSON.stringify({
|
|
280
|
-
ok: true,
|
|
281
|
-
polygon_address: evmAddr,
|
|
282
|
-
polygon_claim: "ok",
|
|
283
|
-
solana_address: solAddr,
|
|
284
|
-
solana_claim: solRes.ok ? "ok" : `skipped (${solRes.reason})`,
|
|
285
|
-
label: label || null,
|
|
286
|
-
...fundingFields,
|
|
287
|
-
next: `Open ${DASHBOARD_BASE}/me (My Agents) to see this agent's balance, payments and receipts. Public page: ${DASHBOARD_BASE}/agents/${evmAddr}.`,
|
|
288
|
-
}, null, 2),
|
|
289
|
-
},
|
|
290
|
-
],
|
|
291
|
-
};
|
|
227
|
+
async function claimFamily(solana) {
|
|
228
|
+
try {
|
|
229
|
+
if (!solana) {
|
|
230
|
+
return await claimOne(evmAddr, async (msg) => ({
|
|
231
|
+
signature: await ctx.agent.evmAccount.signMessage({ message: msg }),
|
|
232
|
+
}));
|
|
233
|
+
}
|
|
234
|
+
const nacl = (await import("tweetnacl")).default;
|
|
235
|
+
const bs58 = (await import("bs58")).default;
|
|
236
|
+
const inner = ctx.agent.inner;
|
|
237
|
+
return await claimOne(solAddr, async (msg) => ({
|
|
238
|
+
signature_base58: bs58.encode(nacl.sign.detached(Buffer.from(msg, "utf8"), inner.secretKey)),
|
|
239
|
+
}));
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
// Do not echo URL tokens, cookies, signing material or remote error text.
|
|
243
|
+
return { ok: false, reason: "claim exchange failed" };
|
|
244
|
+
}
|
|
292
245
|
}
|
|
293
|
-
|
|
246
|
+
const primary = await claimFamily(primarySolana);
|
|
247
|
+
if (!primary.ok) {
|
|
294
248
|
return {
|
|
295
249
|
isError: true,
|
|
296
|
-
content: [{ type: "text", text:
|
|
250
|
+
content: [{ type: "text", text: `${primarySolana ? "Solana" : "EVM"} claim failed: ${primary.reason}` }],
|
|
297
251
|
};
|
|
298
252
|
}
|
|
253
|
+
const secondary = await claimFamily(!primarySolana);
|
|
254
|
+
const evmResult = primarySolana ? secondary : primary;
|
|
255
|
+
const solanaResult = primarySolana ? primary : secondary;
|
|
256
|
+
const primaryAddress = primarySolana ? solAddr : evmAddr;
|
|
257
|
+
return {
|
|
258
|
+
content: [
|
|
259
|
+
{
|
|
260
|
+
type: "text",
|
|
261
|
+
text: JSON.stringify({
|
|
262
|
+
ok: true,
|
|
263
|
+
primary_family: primarySolana ? "solana" : "evm",
|
|
264
|
+
primary_address: primaryAddress,
|
|
265
|
+
payment_chain: selected.name,
|
|
266
|
+
polygon_address: evmAddr,
|
|
267
|
+
polygon_claim: evmResult.ok ? "ok" : `skipped (${evmResult.reason})`,
|
|
268
|
+
solana_address: solAddr,
|
|
269
|
+
solana_claim: solanaResult.ok ? "ok" : `skipped (${solanaResult.reason})`,
|
|
270
|
+
label: label || null,
|
|
271
|
+
next: `Open https://dash.aifinpay.io/my-agents/${encodeURIComponent(primaryAddress)}. Use Fund to view available payment networks and assets. Wallet binding does not enable payments on a disabled network.`,
|
|
272
|
+
}, null, 2),
|
|
273
|
+
},
|
|
274
|
+
],
|
|
275
|
+
};
|
|
299
276
|
}
|
|
300
277
|
//# sourceMappingURL=agent-claim-self.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-claim-self.js","sourceRoot":"","sources":["../../src/tools/agent-claim-self.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-claim-self.js","sourceRoot":"","sources":["../../src/tools/agent-claim-self.ts"],"names":[],"mappings":"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"}
|