@intent-engine/cli 0.1.23 → 0.1.27
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/assets/viperjs-judge.sha256 +1 -0
- package/assets/viperjs-judge.wasm +0 -0
- package/dist/src/admin-commands.d.ts +13 -0
- package/dist/src/admin-commands.js +185 -0
- package/dist/src/admin-commands.js.map +1 -0
- package/dist/src/agent/actions.d.ts +2 -0
- package/dist/src/agent/actions.js +1 -1
- package/dist/src/agent/actions.js.map +1 -1
- package/dist/src/agent/claims.js +13 -12
- package/dist/src/agent/claims.js.map +1 -1
- package/dist/src/agent/create.d.ts +1 -0
- package/dist/src/agent/create.js +9 -3
- package/dist/src/agent/create.js.map +1 -1
- package/dist/src/agent/mandate-agent.d.ts +2 -0
- package/dist/src/agent/mandate-agent.js +138 -0
- package/dist/src/agent/mandate-agent.js.map +1 -0
- package/dist/src/agent/mandate-grant.d.ts +2 -0
- package/dist/src/agent/mandate-grant.js +192 -0
- package/dist/src/agent/mandate-grant.js.map +1 -0
- package/dist/src/agent/mandate-revoke.d.ts +1 -0
- package/dist/src/agent/mandate-revoke.js +142 -0
- package/dist/src/agent/mandate-revoke.js.map +1 -0
- package/dist/src/agent/mandate-state.d.ts +33 -0
- package/dist/src/agent/mandate-state.js +85 -0
- package/dist/src/agent/mandate-state.js.map +1 -0
- package/dist/src/agent/mandate.d.ts +4 -26
- package/dist/src/agent/mandate.js +4 -479
- package/dist/src/agent/mandate.js.map +1 -1
- package/dist/src/agent/mcp.js +9 -3
- package/dist/src/agent/mcp.js.map +1 -1
- package/dist/src/agent/prepare.js +1 -1
- package/dist/src/agent/prepare.js.map +1 -1
- package/dist/src/agent/problems.d.ts +28 -1
- package/dist/src/agent/problems.js +47 -1
- package/dist/src/agent/problems.js.map +1 -1
- package/dist/src/agent/read.d.ts +12 -0
- package/dist/src/agent/read.js +20 -6
- package/dist/src/agent/read.js.map +1 -1
- package/dist/src/agent/registry.js +8 -1
- package/dist/src/agent/registry.js.map +1 -1
- package/dist/src/agent/relay.d.ts +2 -0
- package/dist/src/agent/relay.js +11 -3
- package/dist/src/agent/relay.js.map +1 -1
- package/dist/src/agent/reputation.d.ts +4 -0
- package/dist/src/agent/reputation.js +127 -0
- package/dist/src/agent/reputation.js.map +1 -0
- package/dist/src/agent/sales.d.ts +29 -0
- package/dist/src/agent/sales.js +248 -0
- package/dist/src/agent/sales.js.map +1 -0
- package/dist/src/agent/signed-prepare.d.ts +1 -0
- package/dist/src/agent/signed-prepare.js +138 -0
- package/dist/src/agent/signed-prepare.js.map +1 -0
- package/dist/src/agent/signed-relay.d.ts +25 -0
- package/dist/src/agent/signed-relay.js +69 -0
- package/dist/src/agent/signed-relay.js.map +1 -0
- package/dist/src/agent/signed-submit.d.ts +2 -0
- package/dist/src/agent/signed-submit.js +137 -0
- package/dist/src/agent/signed-submit.js.map +1 -0
- package/dist/src/agent/signed-terms.d.ts +85 -0
- package/dist/src/agent/signed-terms.js +84 -0
- package/dist/src/agent/signed-terms.js.map +1 -0
- package/dist/src/agent/signed.d.ts +4 -13
- package/dist/src/agent/signed.js +4 -361
- package/dist/src/agent/signed.js.map +1 -1
- package/dist/src/agent/wallet/account.d.ts +4 -0
- package/dist/src/agent/wallet/account.js +84 -0
- package/dist/src/agent/wallet/account.js.map +1 -0
- package/dist/src/agent/wallet/attest.d.ts +4 -0
- package/dist/src/agent/wallet/attest.js +178 -0
- package/dist/src/agent/wallet/attest.js.map +1 -0
- package/dist/src/agent/wallet/committee.d.ts +4 -0
- package/dist/src/agent/wallet/committee.js +155 -0
- package/dist/src/agent/wallet/committee.js.map +1 -0
- package/dist/src/agent/wallet/delivery.d.ts +13 -0
- package/dist/src/agent/wallet/delivery.js +171 -0
- package/dist/src/agent/wallet/delivery.js.map +1 -0
- package/dist/src/agent/wallet/escrow.d.ts +7 -0
- package/dist/src/agent/wallet/escrow.js +164 -0
- package/dist/src/agent/wallet/escrow.js.map +1 -0
- package/dist/src/agent/wallet/fills.d.ts +27 -0
- package/dist/src/agent/wallet/fills.js +80 -0
- package/dist/src/agent/wallet/fills.js.map +1 -0
- package/dist/src/agent/wallet/guard.d.ts +57 -0
- package/dist/src/agent/wallet/guard.js +205 -0
- package/dist/src/agent/wallet/guard.js.map +1 -0
- package/dist/src/agent/wallet/offer.d.ts +50 -0
- package/dist/src/agent/wallet/offer.js +80 -0
- package/dist/src/agent/wallet/offer.js.map +1 -0
- package/dist/src/agent/wallet/receipt.d.ts +42 -0
- package/dist/src/agent/wallet/receipt.js +102 -0
- package/dist/src/agent/wallet/receipt.js.map +1 -0
- package/dist/src/agent/wallet/record.d.ts +31 -0
- package/dist/src/agent/wallet/record.js +178 -0
- package/dist/src/agent/wallet/record.js.map +1 -0
- package/dist/src/agent/wallet/releases.d.ts +40 -0
- package/dist/src/agent/wallet/releases.js +245 -0
- package/dist/src/agent/wallet/releases.js.map +1 -0
- package/dist/src/agent/wallet/split.d.ts +10 -0
- package/dist/src/agent/wallet/split.js +271 -0
- package/dist/src/agent/wallet/split.js.map +1 -0
- package/dist/src/agent/wallet/trade.d.ts +14 -0
- package/dist/src/agent/wallet/trade.js +243 -0
- package/dist/src/agent/wallet/trade.js.map +1 -0
- package/dist/src/agent/wallet/wait.d.ts +5 -0
- package/dist/src/agent/wallet/wait.js +99 -0
- package/dist/src/agent/wallet/wait.js.map +1 -0
- package/dist/src/agent/wallet.d.ts +19 -73
- package/dist/src/agent/wallet.js +30 -1322
- package/dist/src/agent/wallet.js.map +1 -1
- package/dist/src/arg-options.d.ts +405 -0
- package/dist/src/arg-options.js +361 -0
- package/dist/src/arg-options.js.map +1 -0
- package/dist/src/arg-usage.d.ts +7 -0
- package/dist/src/arg-usage.js +60 -0
- package/dist/src/arg-usage.js.map +1 -0
- package/dist/src/arg-values.d.ts +47 -0
- package/dist/src/arg-values.js +284 -0
- package/dist/src/arg-values.js.map +1 -0
- package/dist/src/args.d.ts +7 -545
- package/dist/src/args.js +103 -926
- package/dist/src/args.js.map +1 -1
- package/dist/src/artifact.d.ts +28 -0
- package/dist/src/artifact.js +103 -0
- package/dist/src/artifact.js.map +1 -0
- package/dist/src/check-process.d.ts +46 -0
- package/dist/src/check-process.js +416 -0
- package/dist/src/check-process.js.map +1 -0
- package/dist/src/command-builders.d.ts +37 -0
- package/dist/src/command-builders.js +216 -0
- package/dist/src/command-builders.js.map +1 -0
- package/dist/src/command-types.d.ts +285 -0
- package/dist/src/command-types.js +2 -0
- package/dist/src/command-types.js.map +1 -0
- package/dist/src/commands.d.ts +7 -43
- package/dist/src/commands.js +76 -457
- package/dist/src/commands.js.map +1 -1
- package/dist/src/committee-commands.d.ts +31 -0
- package/dist/src/committee-commands.js +167 -0
- package/dist/src/committee-commands.js.map +1 -0
- package/dist/src/event-feed.d.ts +13 -0
- package/dist/src/event-feed.js +46 -0
- package/dist/src/event-feed.js.map +1 -0
- package/dist/src/flow-commands.d.ts +8 -0
- package/dist/src/flow-commands.js +116 -0
- package/dist/src/flow-commands.js.map +1 -0
- package/dist/src/flows.d.ts +6 -0
- package/dist/src/flows.js +84 -10
- package/dist/src/flows.js.map +1 -1
- package/dist/src/host-judge.d.ts +11 -0
- package/dist/src/host-judge.js +120 -0
- package/dist/src/host-judge.js.map +1 -0
- package/dist/src/job-commands.d.ts +9 -0
- package/dist/src/job-commands.js +89 -0
- package/dist/src/job-commands.js.map +1 -0
- package/dist/src/judge-errors.d.ts +12 -0
- package/dist/src/judge-errors.js +16 -0
- package/dist/src/judge-errors.js.map +1 -0
- package/dist/src/judge.d.ts +25 -16
- package/dist/src/judge.js +179 -103
- package/dist/src/judge.js.map +1 -1
- package/dist/src/main.d.ts +5 -1
- package/dist/src/main.js +36 -9
- package/dist/src/main.js.map +1 -1
- package/dist/src/monitor-args.d.ts +11 -0
- package/dist/src/monitor-args.js +58 -0
- package/dist/src/monitor-args.js.map +1 -0
- package/dist/src/monitor-fills.d.ts +13 -0
- package/dist/src/monitor-fills.js +56 -0
- package/dist/src/monitor-fills.js.map +1 -0
- package/dist/src/monitor.d.ts +60 -0
- package/dist/src/monitor.js +295 -0
- package/dist/src/monitor.js.map +1 -0
- package/dist/src/order-builders.d.ts +10 -0
- package/dist/src/order-builders.js +172 -0
- package/dist/src/order-builders.js.map +1 -0
- package/dist/src/render.d.ts +1 -0
- package/dist/src/render.js +9 -0
- package/dist/src/render.js.map +1 -1
- package/dist/src/reputation-commands.d.ts +8 -0
- package/dist/src/reputation-commands.js +20 -0
- package/dist/src/reputation-commands.js.map +1 -0
- package/dist/src/runtime.d.ts +22 -0
- package/dist/src/runtime.js +2 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/sandbox.d.ts +46 -0
- package/dist/src/sandbox.js +142 -0
- package/dist/src/sandbox.js.map +1 -0
- package/dist/src/solve-commands.d.ts +25 -0
- package/dist/src/solve-commands.js +175 -0
- package/dist/src/solve-commands.js.map +1 -0
- package/dist/src/tokens.js +2 -1
- package/dist/src/tokens.js.map +1 -1
- package/dist/src/trust-args.d.ts +6 -0
- package/dist/src/trust-args.js +76 -0
- package/dist/src/trust-args.js.map +1 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/viper.d.ts +66 -0
- package/dist/src/viper.js +282 -0
- package/dist/src/viper.js.map +1 -0
- package/dist/src/wallet.d.ts +4 -1
- package/dist/src/wallet.js +25 -5
- package/dist/src/wallet.js.map +1 -1
- package/package.json +18 -7
- package/dist/src/events.d.ts +0 -8
- package/dist/src/events.js +0 -43
- package/dist/src/events.js.map +0 -1
- package/dist/src/transport.d.ts +0 -208
- package/dist/src/transport.js +0 -441
- package/dist/src/transport.js.map +0 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { formatAmount, MEMO_URL_RULE, NATIVE_MINT } from "@intent-engine/core";
|
|
2
|
+
import { chainTime, mintOf } from "@intent-engine/client";
|
|
3
|
+
import { TOKEN_NAMES, tokenNamed } from "../../tokens.js";
|
|
4
|
+
import { define } from "../actions.js";
|
|
5
|
+
import { MAX_EXPIRES_IN, MIN_EXPIRES_IN } from "../create.js";
|
|
6
|
+
import { tool } from "../names.js";
|
|
7
|
+
import { problemOf } from "../problems.js";
|
|
8
|
+
import { InvalidInput, account, amount, flag, hex32, integer, list, object, optional, text } from "../schema.js";
|
|
9
|
+
import { LANDING_SECONDS, access, mintNamed, raw, salesOf, checkSale, checkHour, refusedBeforeSending } from "./guard.js";
|
|
10
|
+
import { offerOutput, offered } from "./offer.js";
|
|
11
|
+
export const ESCROW_EXPIRES_IN = 86_400;
|
|
12
|
+
export const RECORD_MINT_NEEDED = "selling SOL on this RPC needs record_mint: any other token's mint, which only labels the escrow";
|
|
13
|
+
function recordedMint(sell, url, chosen) {
|
|
14
|
+
if (chosen !== undefined) {
|
|
15
|
+
return mintNamed(chosen, url, "record_mint");
|
|
16
|
+
}
|
|
17
|
+
if (sell !== NATIVE_MINT) {
|
|
18
|
+
return NATIVE_MINT;
|
|
19
|
+
}
|
|
20
|
+
const test = tokenNamed("TEST", url);
|
|
21
|
+
if (test instanceof Error) {
|
|
22
|
+
throw new InvalidInput([{ path: "record_mint", message: RECORD_MINT_NEEDED }]);
|
|
23
|
+
}
|
|
24
|
+
return test;
|
|
25
|
+
}
|
|
26
|
+
export const walletEscrow = define({
|
|
27
|
+
name: tool("wallet_escrow"),
|
|
28
|
+
title: "Escrow a payment for an attestor to release",
|
|
29
|
+
description: `Hold an exact amount of one token from this server's wallet in an attested intent: it goes, minus the engine fee, to whichever wallet the named attestor later signs for, once the attestor attests a result between min_result and max_result. Use it to pay another agent for work that a third agent or a person judges. The attestor alone decides who is paid, so name an attestor the user trusts; with spec_hash the release must also be signed over that exact spec. spec_url publishes where that spec lives, so workers find the escrow with ${tool("find_jobs")} and announce their work to the attestor with ${tool("wallet_deliver")}. Have the worker deliver to the attestor rather than to this wallet, since this wallet can cancel until the release; ${tool("wallet_receipt")} later shows what the release recorded. Until then the wallet can cancel it with ${tool("wallet_cancel")}, and after it expires anyone can return the escrow. Amounts are whole tokens such as 0.05. Without send it only previews; show the user the summary and call again with send: true once they approve.`,
|
|
30
|
+
effect: "submit",
|
|
31
|
+
repeats: true,
|
|
32
|
+
input: object({
|
|
33
|
+
sell: text("SOL, TEST or a mint address: the token to pay with"),
|
|
34
|
+
amount: text("whole tokens to escrow, such as 0.05"),
|
|
35
|
+
attestor: account("the wallet whose signature alone releases the escrow"),
|
|
36
|
+
min_result: optional(amount("least result the attestor may attest; default 1")),
|
|
37
|
+
max_result: optional(amount("greatest result the attestor may attest; default min_result")),
|
|
38
|
+
spec_hash: optional(hex32("64 hex: the sha256 of the acceptance spec the attestor must verify. Setting it binds the release to a signature over that exact spec, so the attestor cannot sign a generic result")),
|
|
39
|
+
spec_url: optional(text(`where the acceptance spec is published, ${MEMO_URL_RULE}; needs spec_hash. Recorded in a memo this wallet signs with the escrow`)),
|
|
40
|
+
judge_fee: optional(text("whole tokens of sell paid to the attestor out of the escrow when it settles, such as 0.001; needs spec_hash and must be below amount")),
|
|
41
|
+
expires_in: optional(integer(MIN_EXPIRES_IN, MAX_EXPIRES_IN, `least seconds the escrow stays open once sent; default ${ESCROW_EXPIRES_IN}`)),
|
|
42
|
+
record_mint: optional(text("a token the escrow records as its output, other than sell; only a label. Default SOL, or TEST when selling SOL on devnet")),
|
|
43
|
+
send: optional(flag("true signs and sends; leave out to preview")),
|
|
44
|
+
}),
|
|
45
|
+
output: offerOutput,
|
|
46
|
+
run: async (ctx, input, call) => {
|
|
47
|
+
const wallet = access(ctx);
|
|
48
|
+
const sold = mintNamed(input.sell, wallet.url, "sell");
|
|
49
|
+
const least = input.min_result ?? 1n;
|
|
50
|
+
const most = input.max_result ?? least;
|
|
51
|
+
if (most < least) {
|
|
52
|
+
throw new InvalidInput([{ path: "max_result", message: "must be at least min_result" }]);
|
|
53
|
+
}
|
|
54
|
+
const specHash = input.spec_hash;
|
|
55
|
+
if (input.judge_fee !== undefined && specHash === undefined) {
|
|
56
|
+
throw new InvalidInput([{ path: "judge_fee", message: "needs spec_hash" }]);
|
|
57
|
+
}
|
|
58
|
+
if (input.spec_url !== undefined && specHash === undefined) {
|
|
59
|
+
throw new InvalidInput([{ path: "spec_url", message: "needs spec_hash" }]);
|
|
60
|
+
}
|
|
61
|
+
return offered(ctx, call, { sell: sold, buy: recordedMint(sold, wallet.url, input.record_mint), send: input.send }, (token, _, now) => ({
|
|
62
|
+
order: {
|
|
63
|
+
kind: "attested",
|
|
64
|
+
amount_in: raw(input.amount, token.decimals, "amount"),
|
|
65
|
+
min_result: least,
|
|
66
|
+
max_result: most,
|
|
67
|
+
attestor: input.attestor,
|
|
68
|
+
...(specHash === undefined ? {} : { spec_hash: specHash }),
|
|
69
|
+
...(input.judge_fee === undefined ? {} : { judge_fee: raw(input.judge_fee, token.decimals, "judge_fee") }),
|
|
70
|
+
},
|
|
71
|
+
expires_at: now + BigInt((input.expires_in ?? ESCROW_EXPIRES_IN) + LANDING_SECONDS),
|
|
72
|
+
...(input.spec_url === undefined ? {} : { spec_url: input.spec_url }),
|
|
73
|
+
}));
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
export const MAX_PIECES = 12;
|
|
77
|
+
export const piecesPartlySent = (sent, total, problem) => `${sent} of ${total} pieces were escrowed; the next failed with ${problem}. To finish, escrow only the ${total - sent} remaining pieces; do not repeat this call`;
|
|
78
|
+
export const piecesMayHaveLanded = (sent, total, problem) => `${sent} of ${total} pieces were escrowed and the next may have landed too (${problem}); check ${tool("wallet_intents")} before escrowing any again, and do not repeat this call`;
|
|
79
|
+
export const walletEscrowPlan = define({
|
|
80
|
+
name: tool("wallet_escrow_plan"),
|
|
81
|
+
title: "Escrow a task's pieces in one plan",
|
|
82
|
+
description: `Split a task into pieces and escrow each piece's payment from this server's wallet in one call, each as ${tool("wallet_escrow")} would: every piece is its own escrow that its attestor releases on its own, to whichever wallet it signs for, so workers are paid as each piece passes. One preview shows every piece and the total; one send escrows them all. A piece not yet released can be cancelled on its own with ${tool("wallet_cancel")}. Have workers deliver to the attestor rather than to this wallet. Amounts are whole tokens. Without send it only previews; show the user the summary and call again with send: true once they approve.`,
|
|
83
|
+
effect: "submit",
|
|
84
|
+
repeats: true,
|
|
85
|
+
input: object({
|
|
86
|
+
sell: text("SOL, TEST or a mint address: the token to pay with"),
|
|
87
|
+
attestor: account("the wallet that releases every piece that names no attestor of its own"),
|
|
88
|
+
pieces: list(object({
|
|
89
|
+
name: text("a label for the piece, shown in the plan only"),
|
|
90
|
+
amount: text("whole tokens this piece pays, such as 0.01"),
|
|
91
|
+
attestor: optional(account("this piece's attestor, instead of the plan's")),
|
|
92
|
+
}), MAX_PIECES, "the pieces, in order", 2),
|
|
93
|
+
expires_in: optional(integer(MIN_EXPIRES_IN, MAX_EXPIRES_IN, `least seconds each escrow stays open once sent; default ${ESCROW_EXPIRES_IN}`)),
|
|
94
|
+
record_mint: optional(text("a token the escrows record as their output, other than sell; only a label. Default SOL, or TEST when selling SOL on devnet")),
|
|
95
|
+
send: optional(flag("true signs and sends every piece; leave out to preview")),
|
|
96
|
+
}),
|
|
97
|
+
output: object({
|
|
98
|
+
pieces: list(object({ name: text(), amount: text(), attestor: account(), intent: optional(account()), nonce: optional(amount()), signature: optional(text()) }), MAX_PIECES),
|
|
99
|
+
total: text("whole tokens escrowed across all pieces"),
|
|
100
|
+
summary: list(text(), 24, "the plan, then the first piece"),
|
|
101
|
+
warnings: list(text(), 16),
|
|
102
|
+
sent: flag(),
|
|
103
|
+
next: optional(text()),
|
|
104
|
+
}),
|
|
105
|
+
run: async (ctx, input, call) => {
|
|
106
|
+
const wallet = access(ctx);
|
|
107
|
+
const sold = mintNamed(input.sell, wallet.url, "sell");
|
|
108
|
+
const buy = recordedMint(sold, wallet.url, input.record_mint);
|
|
109
|
+
const [token, now] = await Promise.all([mintOf(ctx.transport, sold), chainTime(ctx.transport)]);
|
|
110
|
+
const planned = input.pieces.map((piece, i) => ({
|
|
111
|
+
name: piece.name,
|
|
112
|
+
amountIn: raw(piece.amount, token.decimals, `pieces.${i}.amount`),
|
|
113
|
+
attestor: piece.attestor ?? input.attestor,
|
|
114
|
+
}));
|
|
115
|
+
const total = planned.reduce((sum, piece) => sum + piece.amountIn, 0n);
|
|
116
|
+
const sales = await salesOf(wallet, now);
|
|
117
|
+
for (const piece of planned) {
|
|
118
|
+
checkSale(wallet.limits, sold, token.decimals, piece.amountIn, now, sales);
|
|
119
|
+
}
|
|
120
|
+
checkHour(wallet.limits, sold, token.decimals, total, now, sales);
|
|
121
|
+
const terms = (piece) => (_sold, _bought, at) => ({
|
|
122
|
+
order: { kind: "attested", amount_in: piece.amountIn, min_result: 1n, max_result: 1n, attestor: piece.attestor },
|
|
123
|
+
expires_at: at + BigInt((input.expires_in ?? ESCROW_EXPIRES_IN) + LANDING_SECONDS),
|
|
124
|
+
});
|
|
125
|
+
const name = TOKEN_NAMES[sold] ?? sold;
|
|
126
|
+
const listed = (piece) => ({ name: piece.name, amount: formatAmount(piece.amountIn, token.decimals), attestor: piece.attestor });
|
|
127
|
+
const [head, ...rest] = planned;
|
|
128
|
+
const first = (await offered(ctx, call, { sell: sold, buy, send: input.send }, terms(head)));
|
|
129
|
+
const shown = {
|
|
130
|
+
total: formatAmount(total, token.decimals),
|
|
131
|
+
summary: [
|
|
132
|
+
`Plan: ${planned.length} pieces, ${formatAmount(total, token.decimals)} of ${name} in all, each escrowed now and released on its own`,
|
|
133
|
+
...planned.map((piece, i) => `Piece ${i + 1}: ${piece.name}, ${formatAmount(piece.amountIn, token.decimals)} of ${name}, released by ${piece.attestor}`),
|
|
134
|
+
...first["summary"],
|
|
135
|
+
],
|
|
136
|
+
warnings: first["warnings"],
|
|
137
|
+
};
|
|
138
|
+
if (input.send !== true) {
|
|
139
|
+
return { pieces: planned.map(listed), ...shown, sent: false, next: first["next"] };
|
|
140
|
+
}
|
|
141
|
+
const pieces = [{ ...listed(head), intent: first["intent"], nonce: first["nonce"], signature: first["signature"] }];
|
|
142
|
+
for (const piece of rest) {
|
|
143
|
+
try {
|
|
144
|
+
const made = (await offered(ctx, call, { sell: sold, buy, send: true }, terms(piece)));
|
|
145
|
+
pieces.push({ ...listed(piece), intent: made["intent"], nonce: made["nonce"], signature: made["signature"] });
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
for (const undo of call.undo.splice(0)) {
|
|
149
|
+
undo();
|
|
150
|
+
}
|
|
151
|
+
const problem = problemOf(error);
|
|
152
|
+
const reason = `${problem.code}: ${problem.hint}`;
|
|
153
|
+
return {
|
|
154
|
+
pieces: [...pieces, ...planned.slice(pieces.length).map(listed)],
|
|
155
|
+
...shown,
|
|
156
|
+
sent: true,
|
|
157
|
+
next: refusedBeforeSending(error) ? piecesPartlySent(pieces.length, planned.length, reason) : piecesMayHaveLanded(pieces.length, planned.length, reason),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return { pieces, ...shown, sent: true };
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
//# sourceMappingURL=escrow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../../../src/agent/wallet/escrow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Address } from "@solana/kit";
|
|
2
|
+
import type { EngineTransaction, Transport } from "@intent-engine/client";
|
|
3
|
+
export declare const SWAP_HEADROOM_BPS = 200n;
|
|
4
|
+
export declare const SWAP_BLIND_BPS = 2500n;
|
|
5
|
+
export declare const SWAP_CAP_BPS = 20000n;
|
|
6
|
+
export declare function recentFills(transport: Transport, inputMint: Address, outputMint: Address): Promise<Fill[]>;
|
|
7
|
+
export declare const bestOf: (fills: Fill[]) => Fill | undefined;
|
|
8
|
+
export declare const medianOf: (fills: Fill[]) => Fill | undefined;
|
|
9
|
+
export declare function openingAsk(fills: Fill[], amount: bigint, floor: bigint): bigint;
|
|
10
|
+
export type Fill = {
|
|
11
|
+
intent: Address;
|
|
12
|
+
amountIn: bigint;
|
|
13
|
+
delivered: bigint;
|
|
14
|
+
signature: string;
|
|
15
|
+
blockTime: bigint | null;
|
|
16
|
+
};
|
|
17
|
+
export type Pair = {
|
|
18
|
+
inputMint: Address;
|
|
19
|
+
outputMint: Address;
|
|
20
|
+
};
|
|
21
|
+
export declare function historyIn(transactions: readonly EngineTransaction[]): {
|
|
22
|
+
created: Map<Address, Pair>;
|
|
23
|
+
fills: Fill[];
|
|
24
|
+
ended: Map<Address, "cancelled" | "expired">;
|
|
25
|
+
unread: number;
|
|
26
|
+
};
|
|
27
|
+
export declare function pairOf(data: Uint8Array): Pair | null;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { decodeEvent, getIntentDecoder } from "@intent-engine/core";
|
|
2
|
+
import { ESTIMATE_SCAN, ESTIMATE_FILLS } from "./guard.js";
|
|
3
|
+
export const SWAP_HEADROOM_BPS = 200n;
|
|
4
|
+
export const SWAP_BLIND_BPS = 2500n;
|
|
5
|
+
export const SWAP_CAP_BPS = 20000n;
|
|
6
|
+
export async function recentFills(transport, inputMint, outputMint) {
|
|
7
|
+
const { created, fills } = await engineHistory(transport, ESTIMATE_SCAN);
|
|
8
|
+
const unknown = [...new Set(fills.map((f) => f.intent).filter((intent) => !created.has(intent)))];
|
|
9
|
+
const views = unknown.length === 0 ? [] : await transport.getAccounts(unknown);
|
|
10
|
+
unknown.forEach((intent, i) => {
|
|
11
|
+
const view = views[i];
|
|
12
|
+
const pair = view === null || view === undefined ? null : pairOf(view.data);
|
|
13
|
+
if (pair !== null) {
|
|
14
|
+
created.set(intent, pair);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return fills
|
|
18
|
+
.filter((f) => f.amountIn > 0n && created.get(f.intent)?.inputMint === inputMint && created.get(f.intent)?.outputMint === outputMint)
|
|
19
|
+
.slice(0, ESTIMATE_FILLS);
|
|
20
|
+
}
|
|
21
|
+
const byRate = (fills) => [...fills].sort((a, b) => (a.delivered * b.amountIn < b.delivered * a.amountIn ? -1 : a.delivered * b.amountIn > b.delivered * a.amountIn ? 1 : 0));
|
|
22
|
+
export const bestOf = (fills) => byRate(fills).at(-1);
|
|
23
|
+
export const medianOf = (fills) => byRate(fills)[Math.floor((fills.length - 1) / 2)];
|
|
24
|
+
export function openingAsk(fills, amount, floor) {
|
|
25
|
+
const typical = medianOf(fills);
|
|
26
|
+
const blind = (floor * (10000n + SWAP_BLIND_BPS)) / 10000n;
|
|
27
|
+
const seen = typical === undefined ? 0n : (amount * typical.delivered * (10000n + SWAP_HEADROOM_BPS)) / (typical.amountIn * 10000n);
|
|
28
|
+
const cap = (floor * SWAP_CAP_BPS) / 10000n;
|
|
29
|
+
const ask = seen > blind ? seen : blind;
|
|
30
|
+
return ask < cap ? ask : cap;
|
|
31
|
+
}
|
|
32
|
+
async function engineHistory(transport, limit) {
|
|
33
|
+
return historyIn(await transport.engineTransactions(limit));
|
|
34
|
+
}
|
|
35
|
+
export function historyIn(transactions) {
|
|
36
|
+
const created = new Map();
|
|
37
|
+
const fills = [];
|
|
38
|
+
const ended = new Map();
|
|
39
|
+
let unread = 0;
|
|
40
|
+
for (const tx of transactions) {
|
|
41
|
+
if (tx.unread === true) {
|
|
42
|
+
unread += 1;
|
|
43
|
+
}
|
|
44
|
+
if (tx.failed) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const begun = new Map();
|
|
48
|
+
for (const event of tx.emitted.map(decodeEvent)) {
|
|
49
|
+
if (event === null) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const fields = event.fields;
|
|
53
|
+
const intent = fields["intent"];
|
|
54
|
+
if (event.name === "IntentCreated") {
|
|
55
|
+
created.set(intent, { inputMint: fields["inputMint"], outputMint: fields["outputMint"] });
|
|
56
|
+
}
|
|
57
|
+
if (event.name === "FillBegun") {
|
|
58
|
+
begun.set(intent, fields["amountIn"]);
|
|
59
|
+
}
|
|
60
|
+
const amountIn = event.name === "IntentFilled" ? fields["amountIn"] : event.name === "FillEnded" ? begun.get(intent) : undefined;
|
|
61
|
+
if (amountIn !== undefined) {
|
|
62
|
+
fills.push({ intent, amountIn, delivered: fields["delivered"], signature: tx.signature, blockTime: tx.blockTime });
|
|
63
|
+
}
|
|
64
|
+
if (event.name === "IntentCancelled" || event.name === "IntentExpired") {
|
|
65
|
+
ended.set(intent, event.name === "IntentCancelled" ? "cancelled" : "expired");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return { created, fills, ended, unread };
|
|
70
|
+
}
|
|
71
|
+
export function pairOf(data) {
|
|
72
|
+
try {
|
|
73
|
+
const { inputMint, outputMint } = getIntentDecoder().decode(data);
|
|
74
|
+
return { inputMint, outputMint };
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=fills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fills.js","sourceRoot":"","sources":["../../../../src/agent/wallet/fills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type Address, type KeyPairSigner } from "@solana/kit";
|
|
2
|
+
import { type Env, type WalletLimits } from "../../args.js";
|
|
3
|
+
import { type Files } from "../../wallet.js";
|
|
4
|
+
import type { AgentContext } from "../actions.js";
|
|
5
|
+
import type { Call } from "../claims.js";
|
|
6
|
+
import { type Sale, type SaleBook } from "../sales.js";
|
|
7
|
+
export type WalletGuard = {
|
|
8
|
+
limits: WalletLimits;
|
|
9
|
+
book: SaleBook;
|
|
10
|
+
};
|
|
11
|
+
export declare const walletGuard: (limits: WalletLimits, book?: SaleBook) => WalletGuard;
|
|
12
|
+
export type WalletAccess = {
|
|
13
|
+
url: string;
|
|
14
|
+
files: Files;
|
|
15
|
+
env: Env;
|
|
16
|
+
sleep(seconds: number): Promise<boolean>;
|
|
17
|
+
now(): bigint;
|
|
18
|
+
limits: WalletGuard;
|
|
19
|
+
};
|
|
20
|
+
export declare const SALE_WINDOW = 3600n;
|
|
21
|
+
export declare const ESTIMATE_SCAN = 12;
|
|
22
|
+
export declare const ESTIMATE_FILLS = 5;
|
|
23
|
+
export declare const WAIT_DEFAULT = 30;
|
|
24
|
+
export declare const WAIT_MAX = 40;
|
|
25
|
+
export declare const WAIT_SCAN = 10;
|
|
26
|
+
export declare const DEFAULT_EXPIRES_IN = 3600;
|
|
27
|
+
export declare const LANDING_SECONDS = 10;
|
|
28
|
+
export declare const MAINNET_GENESIS = "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d";
|
|
29
|
+
export declare const WALLET_NOTICE: string[];
|
|
30
|
+
export declare const walletEmpty: (address: string) => string;
|
|
31
|
+
export declare const NO_WALLET: string;
|
|
32
|
+
export declare const WALLET_OFF = "this server runs without a wallet; start it with mcp --wallet to let it sign";
|
|
33
|
+
export declare const PREVIEW_ONLY = "nothing was sent; show the summary to the user and call again with send: true only after they approve";
|
|
34
|
+
export declare function access(ctx: AgentContext): WalletAccess;
|
|
35
|
+
export declare function testCluster(ctx: AgentContext): Promise<WalletAccess>;
|
|
36
|
+
export declare function savedKeypair(wallet: WalletAccess): Promise<string | undefined>;
|
|
37
|
+
export declare function signerOf(ctx: AgentContext): Promise<KeyPairSigner>;
|
|
38
|
+
export declare function mintNamed(text: string, url: string, path: string): Address;
|
|
39
|
+
export declare function raw(tokens: string, decimals: number, path: string): bigint;
|
|
40
|
+
export declare const nameOf: (mint: Address) => string;
|
|
41
|
+
export declare const limited: (guard: WalletGuard) => boolean;
|
|
42
|
+
export declare function limitLines(limits: WalletLimits): string[];
|
|
43
|
+
export declare function bookOf(wallet: WalletAccess): Promise<string | undefined>;
|
|
44
|
+
export declare const live: (sales: readonly Sale[], now: bigint) => Sale[];
|
|
45
|
+
export declare function salesOf(wallet: WalletAccess, now: bigint): Promise<Sale[]>;
|
|
46
|
+
export declare function checkSale(guard: WalletGuard, mint: Address, decimals: number, amount: bigint, now: bigint, sales: readonly Sale[]): void;
|
|
47
|
+
export declare function checkHour(guard: WalletGuard, mint: Address, decimals: number, amount: bigint, now: bigint, sales: readonly Sale[]): void;
|
|
48
|
+
export declare function sent(ctx: AgentContext, signer: KeyPairSigner, view: Record<string, unknown>, send: boolean | undefined, call: Call): Promise<{
|
|
49
|
+
sent: boolean;
|
|
50
|
+
next: string;
|
|
51
|
+
} | {
|
|
52
|
+
sent: boolean;
|
|
53
|
+
signature: string;
|
|
54
|
+
}>;
|
|
55
|
+
export declare function sha256Of(text: string, path: string): string;
|
|
56
|
+
export declare function rpcRefused(error: unknown): boolean;
|
|
57
|
+
export declare const refusedBeforeSending: (error: unknown) => boolean;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { isSolanaError, SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR } from "@solana/kit";
|
|
3
|
+
import { formatAmount, parseAmount } from "@intent-engine/core";
|
|
4
|
+
import { Charged, neverLanded } from "@intent-engine/client";
|
|
5
|
+
import { ENV_KEYPAIR, WALLET_NOT_MAINNET } from "../../args.js";
|
|
6
|
+
import { execute } from "../../flows.js";
|
|
7
|
+
import { TOKEN_NAMES, tokenNamed } from "../../tokens.js";
|
|
8
|
+
import { expandHome, FAUCET, PUBLIC_FAUCET, withSettings } from "../../wallet.js";
|
|
9
|
+
import { tool } from "../names.js";
|
|
10
|
+
import { AgentRefusal } from "../problems.js";
|
|
11
|
+
import { InvalidInput } from "../schema.js";
|
|
12
|
+
import { fileSales, salesPath } from "../sales.js";
|
|
13
|
+
export const walletGuard = (limits, book = fileSales()) => ({ limits, book });
|
|
14
|
+
export const SALE_WINDOW = 3600n;
|
|
15
|
+
export const ESTIMATE_SCAN = 12;
|
|
16
|
+
export const ESTIMATE_FILLS = 5;
|
|
17
|
+
export const WAIT_DEFAULT = 30;
|
|
18
|
+
export const WAIT_MAX = 40;
|
|
19
|
+
export const WAIT_SCAN = 10;
|
|
20
|
+
export const DEFAULT_EXPIRES_IN = 3_600;
|
|
21
|
+
export const LANDING_SECONDS = 10;
|
|
22
|
+
export const MAINNET_GENESIS = "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d";
|
|
23
|
+
export const WALLET_NOTICE = [
|
|
24
|
+
"Test network only: this wallet works on Solana devnet, testnet or localnet and refuses mainnet. Its tokens have no value.",
|
|
25
|
+
"Your key stays on this machine: setup makes one unless a keypair is already configured, and names its file. Only signed transactions leave it.",
|
|
26
|
+
"This server talks to no one but the RPC endpoint it was started with.",
|
|
27
|
+
"Nothing moves until you approve: swaps, auctions, escrows, releases and cancels only preview until you say yes.",
|
|
28
|
+
"Do not send real funds to this wallet or use its key anywhere else.",
|
|
29
|
+
];
|
|
30
|
+
export const walletEmpty = (address) => `the wallet ${address} holds no SOL yet; request devnet SOL for it at ${FAUCET} or ${PUBLIC_FAUCET}, then try again`;
|
|
31
|
+
export const NO_WALLET = `this server has no wallet yet; call ${tool("wallet_setup")} first`;
|
|
32
|
+
export const WALLET_OFF = "this server runs without a wallet; start it with mcp --wallet to let it sign";
|
|
33
|
+
export const PREVIEW_ONLY = "nothing was sent; show the summary to the user and call again with send: true only after they approve";
|
|
34
|
+
export function access(ctx) {
|
|
35
|
+
if (ctx.wallet === undefined) {
|
|
36
|
+
throw new AgentRefusal("WalletNotConfigured", WALLET_OFF);
|
|
37
|
+
}
|
|
38
|
+
return ctx.wallet;
|
|
39
|
+
}
|
|
40
|
+
const genesisOf = new WeakMap();
|
|
41
|
+
export async function testCluster(ctx) {
|
|
42
|
+
const wallet = access(ctx);
|
|
43
|
+
let genesis = genesisOf.get(wallet);
|
|
44
|
+
if (genesis === undefined) {
|
|
45
|
+
const read = ctx.transport.genesisHash();
|
|
46
|
+
genesis = read;
|
|
47
|
+
genesisOf.set(wallet, read);
|
|
48
|
+
read.catch(() => {
|
|
49
|
+
if (genesisOf.get(wallet) === read) {
|
|
50
|
+
genesisOf.delete(wallet);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
if ((await genesis) === MAINNET_GENESIS) {
|
|
55
|
+
throw new AgentRefusal("WalletNotMainnet", WALLET_NOT_MAINNET);
|
|
56
|
+
}
|
|
57
|
+
return wallet;
|
|
58
|
+
}
|
|
59
|
+
export async function savedKeypair(wallet) {
|
|
60
|
+
return (await withSettings(wallet.files, wallet.env))[ENV_KEYPAIR];
|
|
61
|
+
}
|
|
62
|
+
export async function signerOf(ctx) {
|
|
63
|
+
const wallet = await testCluster(ctx);
|
|
64
|
+
const path = await savedKeypair(wallet);
|
|
65
|
+
if (path === undefined) {
|
|
66
|
+
throw new AgentRefusal("NoWallet", NO_WALLET);
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
return await wallet.files.loadSigner(path);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
throw new AgentRefusal("NoWallet", NO_WALLET);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function mintNamed(text, url, path) {
|
|
76
|
+
const mint = tokenNamed(text.trim(), url);
|
|
77
|
+
if (mint instanceof Error) {
|
|
78
|
+
throw new InvalidInput([{ path, message: mint.message }]);
|
|
79
|
+
}
|
|
80
|
+
if (!/^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(mint)) {
|
|
81
|
+
throw new InvalidInput([{ path, message: "name SOL, TEST or a token mint address" }]);
|
|
82
|
+
}
|
|
83
|
+
return mint;
|
|
84
|
+
}
|
|
85
|
+
export function raw(tokens, decimals, path) {
|
|
86
|
+
try {
|
|
87
|
+
return parseAmount(tokens, decimals);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
throw new InvalidInput([{ path, message: error instanceof Error ? error.message : String(error) }]);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export const nameOf = (mint) => TOKEN_NAMES[mint] ?? mint;
|
|
94
|
+
export const limited = (guard) => guard.limits.perTrade.size + guard.limits.perHour.size > 0;
|
|
95
|
+
export function limitLines(limits) {
|
|
96
|
+
const mints = [...new Set([...limits.perTrade.keys(), ...limits.perHour.keys()])];
|
|
97
|
+
if (mints.length === 0) {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
return [
|
|
101
|
+
"Whoever started this server set sell limits that no tool call can change:",
|
|
102
|
+
...mints.map((mint) => {
|
|
103
|
+
const caps = [
|
|
104
|
+
...(limits.perTrade.has(mint) ? [`${limits.perTrade.get(mint)} per trade`] : []),
|
|
105
|
+
...(limits.perHour.has(mint) ? [`${limits.perHour.get(mint)} per hour`] : []),
|
|
106
|
+
];
|
|
107
|
+
return `- ${nameOf(mint)}: at most ${caps.join(" and ")}`;
|
|
108
|
+
}),
|
|
109
|
+
"It sells no other token. Plan trades within these limits and tell the user when a request exceeds them.",
|
|
110
|
+
];
|
|
111
|
+
}
|
|
112
|
+
function capOf(text, decimals, mint) {
|
|
113
|
+
try {
|
|
114
|
+
return parseAmount(text, decimals);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
throw new AgentRefusal("WalletTokenNotAllowed", `this server's limit of ${text} ${nameOf(mint)} does not fit a token with ${decimals} decimals, so it sells none; the user restarts it with a valid limit`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export async function bookOf(wallet) {
|
|
121
|
+
const path = await savedKeypair(wallet);
|
|
122
|
+
return path === undefined ? undefined : salesPath(resolve(expandHome(path, wallet.files.home)));
|
|
123
|
+
}
|
|
124
|
+
export const live = (sales, now) => sales.filter((s) => s.at > now - SALE_WINDOW);
|
|
125
|
+
export async function salesOf(wallet, now) {
|
|
126
|
+
if (!limited(wallet.limits)) {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
const path = await bookOf(wallet);
|
|
130
|
+
return path === undefined ? [] : live(await wallet.limits.book.read(path), now);
|
|
131
|
+
}
|
|
132
|
+
export function checkSale(guard, mint, decimals, amount, now, sales) {
|
|
133
|
+
if (!limited(guard)) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const { perTrade, perHour } = guard.limits;
|
|
137
|
+
const name = nameOf(mint);
|
|
138
|
+
if (!perTrade.has(mint) && !perHour.has(mint)) {
|
|
139
|
+
const allowed = [...new Set([...perTrade.keys(), ...perHour.keys()])].map(nameOf).join(", ");
|
|
140
|
+
throw new AgentRefusal("WalletTokenNotAllowed", `this server sells only ${allowed}, not ${name}; its limits were set when it started`);
|
|
141
|
+
}
|
|
142
|
+
const trade = perTrade.get(mint);
|
|
143
|
+
if (trade !== undefined && amount > capOf(trade, decimals, mint)) {
|
|
144
|
+
throw new AgentRefusal("WalletTradeLimit", `this server sells at most ${trade} ${name} per trade and this sells ${formatAmount(amount, decimals)}; sell less, or the user restarts the server with a higher --wallet-per-trade`);
|
|
145
|
+
}
|
|
146
|
+
checkHour(guard, mint, decimals, amount, now, sales);
|
|
147
|
+
}
|
|
148
|
+
export function checkHour(guard, mint, decimals, amount, now, sales) {
|
|
149
|
+
const hour = guard.limits.perHour.get(mint);
|
|
150
|
+
const name = nameOf(mint);
|
|
151
|
+
if (hour === undefined) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const used = live(sales, now)
|
|
155
|
+
.filter((s) => s.mint === mint)
|
|
156
|
+
.reduce((sum, s) => sum + s.amount, 0n);
|
|
157
|
+
const cap = capOf(hour, decimals, mint);
|
|
158
|
+
if (used + amount > cap) {
|
|
159
|
+
throw new AgentRefusal("WalletHourLimit", `this server sells at most ${hour} ${name} per hour and has ${formatAmount(cap > used ? cap - used : 0n, decimals)} left; this sells ${formatAmount(amount, decimals)}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
export async function sent(ctx, signer, view, send, call) {
|
|
163
|
+
for (const undo of call.undo.splice(0)) {
|
|
164
|
+
undo();
|
|
165
|
+
}
|
|
166
|
+
const { prepared, ...shown } = view;
|
|
167
|
+
if (send !== true) {
|
|
168
|
+
return { ...shown, sent: false, next: PREVIEW_ONLY };
|
|
169
|
+
}
|
|
170
|
+
if ((await ctx.transport.genesisHash()) === MAINNET_GENESIS) {
|
|
171
|
+
throw new AgentRefusal("WalletNotMainnet", WALLET_NOT_MAINNET);
|
|
172
|
+
}
|
|
173
|
+
return { ...shown, sent: true, signature: await execute(ctx.transport, prepared, signer) };
|
|
174
|
+
}
|
|
175
|
+
export function sha256Of(text, path) {
|
|
176
|
+
const hex = text.trim().toLowerCase();
|
|
177
|
+
if (!/^[0-9a-f]{64}$/.test(hex)) {
|
|
178
|
+
throw new InvalidInput([{ path, message: "give a sha256 as 64 hex digits" }]);
|
|
179
|
+
}
|
|
180
|
+
return hex;
|
|
181
|
+
}
|
|
182
|
+
const UNREACHED = new Set(["ECONNREFUSED", "ENOTFOUND", "EAI_AGAIN"]);
|
|
183
|
+
const RPC_CAUSE_DEPTH = 8;
|
|
184
|
+
const JSON_RPC_FIRST = -32_000;
|
|
185
|
+
const JSON_RPC_LAST = -32_768;
|
|
186
|
+
export function rpcRefused(error) {
|
|
187
|
+
if (error instanceof Charged) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
let link = error;
|
|
191
|
+
for (let depth = 0; depth < RPC_CAUSE_DEPTH && link instanceof Error; depth++, link = link.cause) {
|
|
192
|
+
if (isSolanaError(link, SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR)) {
|
|
193
|
+
return link.context.statusCode >= 400 && link.context.statusCode < 500;
|
|
194
|
+
}
|
|
195
|
+
if (isSolanaError(link) && link.context.__code <= JSON_RPC_FIRST && link.context.__code >= JSON_RPC_LAST) {
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
if (UNREACHED.has(link.code)) {
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
export const refusedBeforeSending = (error) => neverLanded(error) || error instanceof AgentRefusal || error instanceof InvalidInput || rpcRefused(error);
|
|
205
|
+
//# sourceMappingURL=guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../../../../src/agent/wallet/guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Address } from "@solana/kit";
|
|
2
|
+
import { mintOf } from "@intent-engine/client";
|
|
3
|
+
import type { AgentContext } from "../actions.js";
|
|
4
|
+
import type { Call } from "../claims.js";
|
|
5
|
+
import { type Schema } from "../schema.js";
|
|
6
|
+
import { orderSchema } from "../shapes.js";
|
|
7
|
+
export declare const offerFields: {
|
|
8
|
+
intent: Schema<Address>;
|
|
9
|
+
nonce: Schema<bigint>;
|
|
10
|
+
summary: Schema<string[]>;
|
|
11
|
+
warnings: Schema<string[]>;
|
|
12
|
+
sent: Schema<boolean>;
|
|
13
|
+
signature: {
|
|
14
|
+
optional: Schema<string>;
|
|
15
|
+
};
|
|
16
|
+
next: {
|
|
17
|
+
optional: Schema<string>;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export declare const offerOutput: Schema<{
|
|
21
|
+
intent: Address;
|
|
22
|
+
nonce: bigint;
|
|
23
|
+
summary: string[];
|
|
24
|
+
warnings: string[];
|
|
25
|
+
sent: boolean;
|
|
26
|
+
} & {
|
|
27
|
+
signature?: string;
|
|
28
|
+
next?: string;
|
|
29
|
+
}>;
|
|
30
|
+
export type Token = Awaited<ReturnType<typeof mintOf>>;
|
|
31
|
+
type Order = typeof orderSchema extends Schema<infer T> ? T : never;
|
|
32
|
+
type Terms = {
|
|
33
|
+
order: Order;
|
|
34
|
+
expires_at: bigint;
|
|
35
|
+
spec_url?: string;
|
|
36
|
+
};
|
|
37
|
+
export declare function offered(ctx: AgentContext, call: Call, input: {
|
|
38
|
+
sell: string;
|
|
39
|
+
buy: string;
|
|
40
|
+
pay_to?: Address | undefined;
|
|
41
|
+
send?: boolean | undefined;
|
|
42
|
+
}, terms: (sold: Token, bought: Token, now: bigint, inputMint: Address, outputMint: Address) => Promise<Terms> | Terms): Promise<{
|
|
43
|
+
sent: boolean;
|
|
44
|
+
next: string;
|
|
45
|
+
} | {
|
|
46
|
+
sent: boolean;
|
|
47
|
+
signature: string;
|
|
48
|
+
}>;
|
|
49
|
+
export declare function nonceTaken(error: unknown): boolean;
|
|
50
|
+
export {};
|