@intent-engine/cli 0.1.23 → 0.1.26

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 (175) hide show
  1. package/dist/src/admin-commands.d.ts +12 -0
  2. package/dist/src/admin-commands.js +140 -0
  3. package/dist/src/admin-commands.js.map +1 -0
  4. package/dist/src/agent/actions.d.ts +2 -0
  5. package/dist/src/agent/actions.js +1 -1
  6. package/dist/src/agent/actions.js.map +1 -1
  7. package/dist/src/agent/claims.js +13 -12
  8. package/dist/src/agent/claims.js.map +1 -1
  9. package/dist/src/agent/create.d.ts +1 -0
  10. package/dist/src/agent/create.js +7 -3
  11. package/dist/src/agent/create.js.map +1 -1
  12. package/dist/src/agent/mandate-agent.d.ts +2 -0
  13. package/dist/src/agent/mandate-agent.js +136 -0
  14. package/dist/src/agent/mandate-agent.js.map +1 -0
  15. package/dist/src/agent/mandate-grant.d.ts +2 -0
  16. package/dist/src/agent/mandate-grant.js +192 -0
  17. package/dist/src/agent/mandate-grant.js.map +1 -0
  18. package/dist/src/agent/mandate-revoke.d.ts +1 -0
  19. package/dist/src/agent/mandate-revoke.js +142 -0
  20. package/dist/src/agent/mandate-revoke.js.map +1 -0
  21. package/dist/src/agent/mandate-state.d.ts +33 -0
  22. package/dist/src/agent/mandate-state.js +85 -0
  23. package/dist/src/agent/mandate-state.js.map +1 -0
  24. package/dist/src/agent/mandate.d.ts +4 -26
  25. package/dist/src/agent/mandate.js +4 -479
  26. package/dist/src/agent/mandate.js.map +1 -1
  27. package/dist/src/agent/mcp.js +7 -3
  28. package/dist/src/agent/mcp.js.map +1 -1
  29. package/dist/src/agent/prepare.js +1 -1
  30. package/dist/src/agent/prepare.js.map +1 -1
  31. package/dist/src/agent/problems.d.ts +13 -1
  32. package/dist/src/agent/problems.js +32 -1
  33. package/dist/src/agent/problems.js.map +1 -1
  34. package/dist/src/agent/read.d.ts +12 -0
  35. package/dist/src/agent/read.js +20 -6
  36. package/dist/src/agent/read.js.map +1 -1
  37. package/dist/src/agent/registry.js +6 -1
  38. package/dist/src/agent/registry.js.map +1 -1
  39. package/dist/src/agent/relay.d.ts +2 -0
  40. package/dist/src/agent/relay.js +11 -3
  41. package/dist/src/agent/relay.js.map +1 -1
  42. package/dist/src/agent/sales.d.ts +29 -0
  43. package/dist/src/agent/sales.js +248 -0
  44. package/dist/src/agent/sales.js.map +1 -0
  45. package/dist/src/agent/signed-prepare.d.ts +1 -0
  46. package/dist/src/agent/signed-prepare.js +141 -0
  47. package/dist/src/agent/signed-prepare.js.map +1 -0
  48. package/dist/src/agent/signed-relay.d.ts +25 -0
  49. package/dist/src/agent/signed-relay.js +68 -0
  50. package/dist/src/agent/signed-relay.js.map +1 -0
  51. package/dist/src/agent/signed-submit.d.ts +2 -0
  52. package/dist/src/agent/signed-submit.js +137 -0
  53. package/dist/src/agent/signed-submit.js.map +1 -0
  54. package/dist/src/agent/signed-terms.d.ts +85 -0
  55. package/dist/src/agent/signed-terms.js +84 -0
  56. package/dist/src/agent/signed-terms.js.map +1 -0
  57. package/dist/src/agent/signed.d.ts +4 -13
  58. package/dist/src/agent/signed.js +4 -361
  59. package/dist/src/agent/signed.js.map +1 -1
  60. package/dist/src/agent/wallet/account.d.ts +4 -0
  61. package/dist/src/agent/wallet/account.js +84 -0
  62. package/dist/src/agent/wallet/account.js.map +1 -0
  63. package/dist/src/agent/wallet/attest.d.ts +4 -0
  64. package/dist/src/agent/wallet/attest.js +178 -0
  65. package/dist/src/agent/wallet/attest.js.map +1 -0
  66. package/dist/src/agent/wallet/delivery.d.ts +13 -0
  67. package/dist/src/agent/wallet/delivery.js +171 -0
  68. package/dist/src/agent/wallet/delivery.js.map +1 -0
  69. package/dist/src/agent/wallet/escrow.d.ts +7 -0
  70. package/dist/src/agent/wallet/escrow.js +164 -0
  71. package/dist/src/agent/wallet/escrow.js.map +1 -0
  72. package/dist/src/agent/wallet/fills.d.ts +27 -0
  73. package/dist/src/agent/wallet/fills.js +80 -0
  74. package/dist/src/agent/wallet/fills.js.map +1 -0
  75. package/dist/src/agent/wallet/guard.d.ts +57 -0
  76. package/dist/src/agent/wallet/guard.js +205 -0
  77. package/dist/src/agent/wallet/guard.js.map +1 -0
  78. package/dist/src/agent/wallet/offer.d.ts +50 -0
  79. package/dist/src/agent/wallet/offer.js +80 -0
  80. package/dist/src/agent/wallet/offer.js.map +1 -0
  81. package/dist/src/agent/wallet/receipt.d.ts +42 -0
  82. package/dist/src/agent/wallet/receipt.js +102 -0
  83. package/dist/src/agent/wallet/receipt.js.map +1 -0
  84. package/dist/src/agent/wallet/record.d.ts +31 -0
  85. package/dist/src/agent/wallet/record.js +178 -0
  86. package/dist/src/agent/wallet/record.js.map +1 -0
  87. package/dist/src/agent/wallet/releases.d.ts +40 -0
  88. package/dist/src/agent/wallet/releases.js +236 -0
  89. package/dist/src/agent/wallet/releases.js.map +1 -0
  90. package/dist/src/agent/wallet/split.d.ts +10 -0
  91. package/dist/src/agent/wallet/split.js +271 -0
  92. package/dist/src/agent/wallet/split.js.map +1 -0
  93. package/dist/src/agent/wallet/trade.d.ts +14 -0
  94. package/dist/src/agent/wallet/trade.js +243 -0
  95. package/dist/src/agent/wallet/trade.js.map +1 -0
  96. package/dist/src/agent/wallet/wait.d.ts +5 -0
  97. package/dist/src/agent/wallet/wait.js +99 -0
  98. package/dist/src/agent/wallet/wait.js.map +1 -0
  99. package/dist/src/agent/wallet.d.ts +18 -73
  100. package/dist/src/agent/wallet.js +24 -1322
  101. package/dist/src/agent/wallet.js.map +1 -1
  102. package/dist/src/arg-options.d.ts +333 -0
  103. package/dist/src/arg-options.js +310 -0
  104. package/dist/src/arg-options.js.map +1 -0
  105. package/dist/src/arg-usage.d.ts +7 -0
  106. package/dist/src/arg-usage.js +53 -0
  107. package/dist/src/arg-usage.js.map +1 -0
  108. package/dist/src/arg-values.d.ts +47 -0
  109. package/dist/src/arg-values.js +280 -0
  110. package/dist/src/arg-values.js.map +1 -0
  111. package/dist/src/args.d.ts +7 -545
  112. package/dist/src/args.js +55 -923
  113. package/dist/src/args.js.map +1 -1
  114. package/dist/src/artifact.d.ts +22 -0
  115. package/dist/src/artifact.js +89 -0
  116. package/dist/src/artifact.js.map +1 -0
  117. package/dist/src/check-process.d.ts +39 -0
  118. package/dist/src/check-process.js +338 -0
  119. package/dist/src/check-process.js.map +1 -0
  120. package/dist/src/command-builders.d.ts +37 -0
  121. package/dist/src/command-builders.js +216 -0
  122. package/dist/src/command-builders.js.map +1 -0
  123. package/dist/src/command-types.d.ts +227 -0
  124. package/dist/src/command-types.js +2 -0
  125. package/dist/src/command-types.js.map +1 -0
  126. package/dist/src/commands.d.ts +7 -43
  127. package/dist/src/commands.js +60 -457
  128. package/dist/src/commands.js.map +1 -1
  129. package/dist/src/event-feed.d.ts +13 -0
  130. package/dist/src/event-feed.js +46 -0
  131. package/dist/src/event-feed.js.map +1 -0
  132. package/dist/src/flow-commands.d.ts +8 -0
  133. package/dist/src/flow-commands.js +116 -0
  134. package/dist/src/flow-commands.js.map +1 -0
  135. package/dist/src/flows.d.ts +6 -0
  136. package/dist/src/flows.js +84 -10
  137. package/dist/src/flows.js.map +1 -1
  138. package/dist/src/job-commands.d.ts +9 -0
  139. package/dist/src/job-commands.js +89 -0
  140. package/dist/src/job-commands.js.map +1 -0
  141. package/dist/src/judge-errors.d.ts +12 -0
  142. package/dist/src/judge-errors.js +16 -0
  143. package/dist/src/judge-errors.js.map +1 -0
  144. package/dist/src/judge.d.ts +11 -16
  145. package/dist/src/judge.js +120 -100
  146. package/dist/src/judge.js.map +1 -1
  147. package/dist/src/main.d.ts +4 -1
  148. package/dist/src/main.js +25 -9
  149. package/dist/src/main.js.map +1 -1
  150. package/dist/src/order-builders.d.ts +10 -0
  151. package/dist/src/order-builders.js +172 -0
  152. package/dist/src/order-builders.js.map +1 -0
  153. package/dist/src/render.d.ts +1 -0
  154. package/dist/src/render.js +9 -0
  155. package/dist/src/render.js.map +1 -1
  156. package/dist/src/runtime.d.ts +22 -0
  157. package/dist/src/runtime.js +2 -0
  158. package/dist/src/runtime.js.map +1 -0
  159. package/dist/src/solve-commands.d.ts +25 -0
  160. package/dist/src/solve-commands.js +171 -0
  161. package/dist/src/solve-commands.js.map +1 -0
  162. package/dist/src/tokens.js +2 -1
  163. package/dist/src/tokens.js.map +1 -1
  164. package/dist/src/version.d.ts +1 -1
  165. package/dist/src/version.js +1 -1
  166. package/dist/src/wallet.d.ts +4 -1
  167. package/dist/src/wallet.js +25 -5
  168. package/dist/src/wallet.js.map +1 -1
  169. package/package.json +16 -7
  170. package/dist/src/events.d.ts +0 -8
  171. package/dist/src/events.js +0 -43
  172. package/dist/src/events.js.map +0 -1
  173. package/dist/src/transport.d.ts +0 -208
  174. package/dist/src/transport.js +0 -441
  175. package/dist/src/transport.js.map +0 -1
@@ -1,13 +1,4 @@
1
- import { type Intent, type SignedIntentFields } from "@intent-engine/core";
2
- export declare const DEFAULT_SUBMIT_WITHIN: number;
3
- export declare const MAX_SUBMIT_WITHIN: number;
4
- export declare const RELAY_TOO_LARGE = "this server's relayer cannot fit these signed terms in one Solana transaction; drop the partner fee or use a relayer that adds no priority fee";
5
- export declare const prepareSignedIntent: import("./actions.js").AnyAction;
6
- export declare const submitSignedIntent: import("./actions.js").AnyAction;
7
- export declare function paying<T>(paid: {
8
- any: boolean;
9
- }, sending: Promise<T>): Promise<T>;
10
- export declare const repriced: (admitted: bigint, now: bigint) => string;
11
- export declare function refuseRepricing(admitted: bigint, now: bigint): void;
12
- export declare const previewSignedIntent: import("./actions.js").AnyAction;
13
- export declare function sameTerms(stored: Intent, fields: SignedIntentFields): boolean;
1
+ export { DEFAULT_SUBMIT_WITHIN, MAX_SUBMIT_WITHIN, publishesLine, sameTerms, SPEC_URL_UNSIGNED } from "./signed-terms.js";
2
+ export { paying, RELAY_TOO_LARGE, refuseRepricing, repriced, SPEC_URL_TOO_LONG } from "./signed-relay.js";
3
+ export { prepareSignedIntent } from "./signed-prepare.js";
4
+ export { previewSignedIntent, submitSignedIntent } from "./signed-submit.js";
@@ -1,362 +1,5 @@
1
- import { createNoopSigner, getBase58Encoder, getBase64Decoder, getBase64Encoder, getPublicKeyFromAddress, verifySignature, } from "@solana/kit";
2
- import { buildApproveDelegate, buildCreateIntentSigned, buildEd25519Instruction, createExt, describeSignedIntent, encodeParams, escrowAmount, findAssociatedTokenAddress, formatAmount, findIntentPda, getIntentDecoder, partnerOf, signedIntentMessage, validate, } from "@intent-engine/core";
3
- import { define } from "./actions.js";
4
- import { tool } from "./names.js";
5
- import { expiryOf, termsInput, termsOutput, warningsOf } from "./create.js";
6
- import { pickNonce, raiseAllowance, setupLines, unusedIntent } from "./owner.js";
7
- import { prepare, transactionSize } from "./prepare.js";
8
- import { AgentRefusal } from "./problems.js";
9
- import { createCost, rentFor, SIGNATURE_FEE, TOKEN_ACCOUNT_RENT_BYTES } from "./budget.js";
10
- import { bytesFit } from "@intent-engine/solver";
11
- import { chainTime, Charged, clusterDomain, createdAccount, initUserIfMissing, loadConfig, loadUser, mintOf, tokenAccountIfMissing, } from "@intent-engine/client";
12
- import { admitRelay } from "./relay.js";
13
- import { claim, claimedBy, enter } from "./claims.js";
14
- import { orderSchema, paramsOf, partnerSchema, preparedSchema, preparedView } from "./shapes.js";
15
- import { tokenNames } from "../tokens.js";
16
- import { account, amount, integer, list, nullable, object, optional, text, time } from "./schema.js";
17
- export const DEFAULT_SUBMIT_WITHIN = 60 * 60;
18
- export const MAX_SUBMIT_WITHIN = 24 * 60 * 60;
19
- const SIGNATURE_PATTERN = "^[1-9A-HJ-NP-Za-km-z]{64,88}$";
20
- const signedTerms = {
21
- owner: account("the wallet that signs the message and sells"),
22
- input_mint: account(),
23
- output_mint: account(),
24
- order: orderSchema,
25
- expires_at: time(),
26
- nonce: amount(),
27
- submit_by: time("unix seconds after which the signature can no longer be submitted"),
28
- epoch: amount("the owner's signing epoch the signature is bound to"),
29
- relayer_fee: amount("raw input units the owner pays, from the same allowance, to whoever submits the signature"),
30
- partner: optional(partnerSchema),
31
- };
32
- async function fieldsOf(transport, t, params, outputTokenProgram) {
33
- const { config } = await loadConfig(transport);
34
- const inputToken = await mintOf(transport, t.input_mint);
35
- const fields = {
36
- domain: Uint8Array.from(config.domain),
37
- owner: t.owner,
38
- ownerInput: await findAssociatedTokenAddress({ owner: t.owner, mint: t.input_mint, tokenProgram: inputToken.tokenProgram }),
39
- inputMint: t.input_mint,
40
- outputMint: t.output_mint,
41
- receiver: await findAssociatedTokenAddress({ owner: t.owner, mint: t.output_mint, tokenProgram: outputTokenProgram }),
42
- nonce: t.nonce,
43
- expiresAt: t.expires_at,
44
- submitBy: t.submit_by,
45
- kind: params.kind,
46
- params: encodeParams(params),
47
- epoch: t.epoch,
48
- relayerFee: t.relayer_fee,
49
- ext: createExt(t.partner === undefined ? {} : { partner: { key: t.partner.account, bps: t.partner.bps } }),
50
- };
51
- return { config, inputToken, fields };
52
- }
53
- function relayFloor(relay, mint) {
54
- const floor = relay.fees.get(mint);
55
- if (floor === undefined) {
56
- throw new AgentRefusal("RelayMintNotAccepted", `this server's relayer does not relay intents selling ${mint}; it relays only ${[...relay.fees.keys()].join(", ")}`);
57
- }
58
- return floor;
59
- }
60
- export const RELAY_TOO_LARGE = "this server's relayer cannot fit these signed terms in one Solana transaction; drop the partner fee or use a relayer that adds no priority fee";
61
- async function relayCreate(input, relay, config, params, tokenPrograms) {
62
- return buildCreateIntentSigned({
63
- payer: relay.signer,
64
- owner: input.owner,
65
- treasury: config.feeRecipient,
66
- maxCreateFee: config.createFee,
67
- maxBounty: config.crankBounty,
68
- nonce: input.nonce,
69
- params,
70
- expiresAt: input.expires_at,
71
- ...(input.partner === undefined ? {} : { partner: { key: input.partner.account, bps: input.partner.bps } }),
72
- inputMint: input.input_mint,
73
- outputMint: input.output_mint,
74
- inputTokenProgram: tokenPrograms.input,
75
- outputTokenProgram: tokenPrograms.output,
76
- submitBy: input.submit_by,
77
- relayerFee: input.relayer_fee,
78
- });
79
- }
80
- async function relayFits(transport, relay, instructions) {
81
- const budgeted = await transport.budget(instructions, relay.signer.address);
82
- return bytesFit(await transactionSize(transport, budgeted, relay.signer.address));
83
- }
84
- const preparedFits = (prepared) => bytesFit(getBase64Encoder().encode(prepared.transaction).length);
85
- function offeredFee(floor, offered) {
86
- if (offered === undefined) {
87
- return floor;
88
- }
89
- if (offered < floor) {
90
- throw new AgentRefusal("RelayFeeTooLow", `this server's relayer charges ${floor} raw units of the input token; offer at least that or leave relayer_fee out`);
91
- }
92
- return offered;
93
- }
94
- export const prepareSignedIntent = define({
95
- name: tool("prepare_signed_intent"),
96
- title: "Prepare a relayer-submitted signed intent",
97
- description: `Build an intent the owner authorises by signing a message off-chain, so a relayer creates it on chain and pays its rent and fees. Steps: (1) the owner signs and sends the returned setup transaction; it registers them, creates the receiving token account and raises the engine's spending allowance on the input token by this intent's escrow plus any relayer fee, and it is the only part that costs the owner SOL: its network fee, which the summary gives in lamports, plus rent for any account it creates; (2) the owner signs message with their wallet's sign-message; (3) pass submit unchanged plus that base58 signature to ${tool("submit_signed_intent")}. When this server runs a relayer, it relays only the input tokens it lists a fee for, the message includes that fee, and the owner pays it in that token as the intent is created; without --relayer this server can prepare but not submit. Read summary and warnings before the owner signs anything.`,
98
- effect: "prepare",
99
- input: object({
100
- ...termsInput,
101
- owner: account("the wallet that signs the message off-chain; it pays only the setup transaction's network fee and any rent named in the summary, in SOL"),
102
- submit_within: optional(integer(60, MAX_SUBMIT_WITHIN, `seconds the relayer has to submit the signature; default ${DEFAULT_SUBMIT_WITHIN}`)),
103
- relayer_fee: optional(amount("raw input units offered to whoever submits; default and minimum is this server's relayer fee for the input token")),
104
- }),
105
- output: object({
106
- ...termsOutput,
107
- message: text("base64 bytes the owner signs with sign-message"),
108
- digest: text("sha-256 of the signed terms; the wallet shows the same value"),
109
- submit: object(signedTerms, `pass these unchanged, plus the signature, to ${tool("submit_signed_intent")}`),
110
- setup: preparedSchema,
111
- }),
112
- run: async ({ transport, claims, relay }, input, call) => {
113
- const now = await chainTime(transport);
114
- const expiresAt = expiryOf(input, now);
115
- const params = validate(paramsOf(input.order));
116
- const user = await loadUser(transport, input.owner);
117
- const outputToken = await mintOf(transport, input.output_mint);
118
- if (input.nonce !== undefined) {
119
- await unusedIntent(transport, input.owner, input.nonce);
120
- }
121
- const terms = {
122
- owner: input.owner,
123
- input_mint: input.input_mint,
124
- output_mint: input.output_mint,
125
- order: input.order,
126
- expires_at: expiresAt,
127
- nonce: pickNonce(user, input.nonce, claimedBy(claims, input.owner, now)),
128
- submit_by: now + BigInt(input.submit_within ?? DEFAULT_SUBMIT_WITHIN),
129
- epoch: user?.epoch ?? 0n,
130
- relayer_fee: offeredFee(relay === undefined ? 0n : relayFloor(relay, input.input_mint), input.relayer_fee),
131
- ...(input.partner === undefined ? {} : { partner: input.partner }),
132
- };
133
- claim(claims, call, input.owner, terms.nonce, terms.submit_by, now);
134
- const { config, inputToken, fields } = await fieldsOf(transport, terms, params, outputToken.tokenProgram);
135
- if (relay !== undefined) {
136
- const placeholder = buildEd25519Instruction({
137
- publicKey: input.owner,
138
- signature: new Uint8Array(64),
139
- message: await signedIntentMessage(fields),
140
- });
141
- const create = await relayCreate(terms, relay, config, params, {
142
- input: inputToken.tokenProgram,
143
- output: outputToken.tokenProgram,
144
- });
145
- if (!(await relayFits(transport, relay, [placeholder, create]))) {
146
- throw new AgentRefusal("RelayTooLarge", RELAY_TOO_LARGE);
147
- }
148
- }
149
- const description = await describeSignedIntent(fields, {
150
- now,
151
- currentEpoch: terms.epoch,
152
- expectedDomain: await clusterDomain(transport),
153
- outputTokenProgram: outputToken.tokenProgram,
154
- inputDecimals: inputToken.decimals,
155
- outputDecimals: outputToken.decimals,
156
- ...tokenNames(fields.inputMint, fields.outputMint),
157
- });
158
- const escrow = escrowAmount(params);
159
- const allowance = await raiseAllowance(transport, input.owner, fields.ownerInput, escrow + terms.relayer_fee);
160
- const receiver = await tokenAccountIfMissing(transport, createNoopSigner(input.owner), input.owner, input.output_mint, outputToken.tokenProgram);
161
- const approve = await buildApproveDelegate({
162
- owner: createNoopSigner(input.owner),
163
- mint: input.input_mint,
164
- tokenProgram: inputToken.tokenProgram,
165
- amount: allowance.after,
166
- decimals: inputToken.decimals,
167
- });
168
- const register = await initUserIfMissing(user, input.owner);
169
- const setup = [...register, ...receiver.create, approve];
170
- const intent = await unusedIntent(transport, input.owner, terms.nonce);
171
- const disclosed = setupLines({
172
- registers: register.length > 0,
173
- creates: receiver.create.length > 0 ? [input.output_mint] : [],
174
- allowance,
175
- decimals: inputToken.decimals,
176
- });
177
- const ready = await prepare(transport, setup, input.owner);
178
- const prepared = preparedView(ready);
179
- const setupFee = SIGNATURE_FEE * BigInt(ready.signers.length) + ready.priorityLamports;
180
- return {
181
- intent,
182
- nonce: terms.nonce,
183
- expires_at: expiresAt,
184
- escrow,
185
- summary: [
186
- ...description.lines,
187
- terms.relayer_fee === 0n
188
- ? `Cost to you: no relayer fee; only ${setupFee} lamports of SOL for the setup transaction's network fee, once`
189
- : `Cost to you: ${formatAmount(terms.relayer_fee, inputToken.decimals)} of ${input.input_mint} to the relayer, plus ${setupFee} lamports of SOL for the setup transaction's network fee, once`,
190
- ...disclosed.lines,
191
- ],
192
- warnings: [
193
- ...new Set([
194
- ...warningsOf(params, expiresAt, now, inputToken.scaled || outputToken.scaled),
195
- ...description.warnings,
196
- ...disclosed.warnings,
197
- ]),
198
- ],
199
- message: getBase64Decoder().decode(await signedIntentMessage(fields)),
200
- digest: description.digest,
201
- submit: terms,
202
- setup: prepared,
203
- };
204
- },
205
- });
206
- export const submitSignedIntent = define({
207
- name: tool("submit_signed_intent"),
208
- title: "Submit a signed intent",
209
- description: `Relay an owner's signed intent: the relayer key this server was started with (--relayer) pays the fee and creates the intent on chain, within the relayer's limits: accepted input tokens and their minimum fee, lamport cost per intent and per hour, expiry, transaction size and intents per owner per hour. Pass the submit object from ${tool("prepare_signed_intent")} unchanged plus the owner's base58 signature of its message. Calling again after success returns the same intent without sending anything.`,
210
- effect: "submit",
211
- input: object({ ...signedTerms, signature: text("the owner's base58 Ed25519 signature of the message") }),
212
- output: object({ intent: account(), signature: nullable(text("the relayed transaction's signature; null if it already existed")) }),
213
- run: async ({ transport, relay, claims }, input, call) => {
214
- if (relay === undefined) {
215
- throw new AgentRefusal("RelayerNotConfigured", "this server has no relayer key; start it with --relayer to submit signed intents");
216
- }
217
- const leave = enter(claims, `${input.owner}:${input.nonce}`);
218
- try {
219
- return await relaySigned(transport, relay, input, call);
220
- }
221
- finally {
222
- leave();
223
- }
224
- },
225
- });
226
- async function relaySigned(transport, relay, input, call) {
227
- const params = validate(paramsOf(input.order));
228
- const outputToken = await mintOf(transport, input.output_mint);
229
- const { config, inputToken, fields } = await fieldsOf(transport, input, params, outputToken.tokenProgram);
230
- const [intent] = await findIntentPda({ owner: input.owner, nonce: input.nonce });
231
- const existing = await createdAccount(transport, intent);
232
- if (existing !== null) {
233
- if (!sameTerms(getIntentDecoder().decode(existing.data), fields)) {
234
- throw new AgentRefusal("NonceTaken", "a different intent already uses this owner's nonce; these signed terms can never be submitted");
235
- }
236
- return { intent, signature: null };
237
- }
238
- const floor = relayFloor(relay, input.input_mint);
239
- if (input.relayer_fee < floor) {
240
- throw new AgentRefusal("RelayFeeTooLow", `this relayer charges ${floor} raw units of ${input.input_mint} per intent; prepare and sign the intent again on this server`);
241
- }
242
- const message = await signedIntentMessage(fields);
243
- const signature = signatureBytes(input.signature);
244
- if (!(await verifySignature(await getPublicKeyFromAddress(input.owner), signature, message))) {
245
- throw new AgentRefusal("SignatureInvalid", `the signature is not the owner's signature of these exact terms; sign the message from ${tool("prepare_signed_intent")} again`);
246
- }
247
- const feeAccount = input.relayer_fee === 0n
248
- ? { create: [] }
249
- : await tokenAccountIfMissing(transport, relay.signer, relay.signer.address, input.input_mint, inputToken.tokenProgram);
250
- const relayed = [
251
- buildEd25519Instruction({ publicKey: input.owner, signature, message }),
252
- await relayCreate(input, relay, config, params, { input: inputToken.tokenProgram, output: outputToken.tokenProgram }),
253
- ];
254
- const now = await chainTime(transport);
255
- let prepared = await prepare(transport, [...feeAccount.create, ...relayed], relay.signer.address);
256
- const split = feeAccount.create.length !== 0 && !preparedFits(prepared);
257
- const ticket = admitRelay(relay, input.owner, BigInt(config.createFee) + BigInt(config.crankBounty) + prepared.priorityLamports, createCost(config) +
258
- prepared.priorityLamports +
259
- (feeAccount.create.length > 0 ? rentFor(TOKEN_ACCOUNT_RENT_BYTES) : 0n) +
260
- (split ? SIGNATURE_FEE + prepared.priorityLamports : 0n), input.expires_at, now);
261
- const paid = { any: false };
262
- call.undo.push(() => {
263
- if (!paid.any) {
264
- ticket.cancel();
265
- }
266
- });
267
- const admitted = prepared.priorityLamports;
268
- if (split) {
269
- await paying(paid, transport.send(feeAccount.create, relay.signer));
270
- prepared = await prepare(transport, relayed, relay.signer.address);
271
- refuseRepricing(admitted, prepared.priorityLamports);
272
- }
273
- if (!preparedFits(prepared)) {
274
- throw new AgentRefusal("RelayTooLarge", RELAY_TOO_LARGE);
275
- }
276
- return { intent, signature: await paying(paid, transport.send(prepared.instructions, relay.signer)) };
277
- }
278
- export async function paying(paid, sending) {
279
- try {
280
- const result = await sending;
281
- paid.any = true;
282
- return result;
283
- }
284
- catch (error) {
285
- if (error instanceof Charged) {
286
- paid.any = true;
287
- }
288
- throw error;
289
- }
290
- }
291
- export const repriced = (admitted, now) => `the priority fee rose from the admitted ${admitted} to ${now} lamports while relaying; ask again later`;
292
- export function refuseRepricing(admitted, now) {
293
- if (now > admitted) {
294
- throw new AgentRefusal("RelayTooCostly", repriced(admitted, now));
295
- }
296
- }
297
- export const previewSignedIntent = define({
298
- name: tool("preview_signed_intent"),
299
- title: "Check a signed intent before relaying it",
300
- description: `Verify an owner's signature over signed terms and describe what relaying them creates, without sending anything.`,
301
- effect: "read",
302
- input: object({ ...signedTerms, signature: text("the owner's base58 Ed25519 signature of the message") }),
303
- output: object({
304
- intent: account(),
305
- exists: integer(0, 1, "1 if the intent is already on chain, else 0"),
306
- relayer_fee: amount("raw input-token units the relayer receives"),
307
- summary: list(text(), 32, "what relaying creates"),
308
- warnings: list(text(), 16, "anything to check before relaying"),
309
- }),
310
- run: async ({ transport }, input) => {
311
- const params = validate(paramsOf(input.order));
312
- const outputToken = await mintOf(transport, input.output_mint);
313
- const { config, inputToken, fields } = await fieldsOf(transport, input, params, outputToken.tokenProgram);
314
- const message = await signedIntentMessage(fields);
315
- if (!(await verifySignature(await getPublicKeyFromAddress(input.owner), signatureBytes(input.signature), message))) {
316
- throw new AgentRefusal("SignatureInvalid", "the signature is not the owner's signature of these exact terms");
317
- }
318
- const [intent] = await findIntentPda({ owner: input.owner, nonce: input.nonce });
319
- const exists = (await createdAccount(transport, intent)) !== null;
320
- const user = await loadUser(transport, input.owner);
321
- const description = await describeSignedIntent(fields, {
322
- now: await chainTime(transport),
323
- currentEpoch: user?.epoch ?? 0n,
324
- expectedDomain: await clusterDomain(transport),
325
- outputTokenProgram: outputToken.tokenProgram,
326
- inputDecimals: inputToken.decimals,
327
- outputDecimals: outputToken.decimals,
328
- ...tokenNames(fields.inputMint, fields.outputMint),
329
- });
330
- return {
331
- intent,
332
- exists: exists ? 1 : 0,
333
- relayer_fee: input.relayer_fee,
334
- summary: [
335
- ...description.lines,
336
- `Relaying costs you ${createCost(config)} lamports in create fee, crank bounty, rent and signature fee, plus any priority fee; you receive ${formatAmount(input.relayer_fee, inputToken.decimals)} of ${input.input_mint}`,
337
- ],
338
- warnings: description.warnings,
339
- };
340
- },
341
- });
342
- export function sameTerms(stored, fields) {
343
- const partner = partnerOf(fields.ext ?? new Uint8Array());
344
- return (stored.inputMint === fields.inputMint &&
345
- stored.outputMint === fields.outputMint &&
346
- stored.receiver === fields.receiver &&
347
- stored.expiresAt === fields.expiresAt &&
348
- stored.kind === fields.kind &&
349
- stored.flags === (fields.flags ?? 0) &&
350
- stored.partnerBps === (partner?.bps ?? 0) &&
351
- (partner === undefined || stored.partner === partner.key) &&
352
- stored.params.length === fields.params.length &&
353
- stored.params.every((byte, i) => byte === fields.params[i]));
354
- }
355
- function signatureBytes(text) {
356
- const bytes = new RegExp(SIGNATURE_PATTERN).test(text) ? getBase58Encoder().encode(text) : new Uint8Array();
357
- if (bytes.length !== 64) {
358
- throw new AgentRefusal("SignatureMalformed", "the signature must be 64 bytes written in base58");
359
- }
360
- return bytes;
361
- }
1
+ export { DEFAULT_SUBMIT_WITHIN, MAX_SUBMIT_WITHIN, publishesLine, sameTerms, SPEC_URL_UNSIGNED } from "./signed-terms.js";
2
+ export { paying, RELAY_TOO_LARGE, refuseRepricing, repriced, SPEC_URL_TOO_LONG } from "./signed-relay.js";
3
+ export { prepareSignedIntent } from "./signed-prepare.js";
4
+ export { previewSignedIntent, submitSignedIntent } from "./signed-submit.js";
362
5
  //# sourceMappingURL=signed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signed.js","sourceRoot":"","sources":["../../../src/agent/signed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signed.js","sourceRoot":"","sources":["../../../src/agent/signed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC1H,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC1G,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const walletSetup: import("../actions.js").AnyAction;
2
+ export declare const walletBalance: import("../actions.js").AnyAction;
3
+ export declare const walletIntents: import("../actions.js").AnyAction;
4
+ export declare const walletCancel: import("../actions.js").AnyAction;
@@ -0,0 +1,84 @@
1
+ import { balances, defaultMints, setup } from "../../wallet.js";
2
+ import { define } from "../actions.js";
3
+ import { tool } from "../names.js";
4
+ import { listIntents } from "../read.js";
5
+ import { account, amount, choice, flag, list, object, optional, text } from "../schema.js";
6
+ import { prepareCancel } from "../settle.js";
7
+ import { STATUS } from "../../accounts.js";
8
+ import { WALLET_NOTICE, access, testCluster, savedKeypair, signerOf, mintNamed, sent } from "./guard.js";
9
+ const tokenRow = object({
10
+ mint: account(),
11
+ name: optional(text()),
12
+ account: account("the wallet's token account for this mint"),
13
+ balance: text("in whole tokens"),
14
+ });
15
+ export const walletSetup = define({
16
+ name: tool("wallet_setup"),
17
+ title: "Set up the wallet",
18
+ description: "Create this server's devnet wallet if it has none, save it, and fund it from the devnet airdrop when it holds less than 0.5 SOL. Safe to call again: it reuses the saved wallet, and saves this server's RPC as the CLI's default only when none is saved. Call this first.",
19
+ effect: "submit",
20
+ destructive: false,
21
+ input: object({}),
22
+ output: object({
23
+ address: account(),
24
+ keypair: text("the file holding the wallet's key on this machine"),
25
+ created: flag("true when this call made the wallet"),
26
+ url: text("the RPC node this server uses, as scheme, host and port only"),
27
+ settings: text("whether this call saved the RPC as the CLI's default; it does so only when none is saved yet"),
28
+ sol: text("SOL the wallet holds"),
29
+ next: text("what to tell the user"),
30
+ notice: list(text(), 8, "the notice from the server instructions; show it if the user has not seen it yet"),
31
+ }),
32
+ run: async (ctx) => {
33
+ const wallet = await testCluster(ctx);
34
+ return { ...(await setup(ctx.transport, wallet.files, wallet.url, await savedKeypair(wallet), true)), notice: WALLET_NOTICE };
35
+ },
36
+ });
37
+ export const walletBalance = define({
38
+ name: tool("wallet_balance"),
39
+ title: "Show the wallet's balances",
40
+ description: "Show the SOL and token balances of this server's wallet, in whole tokens. Without mints it shows wrapped SOL and, on devnet, the TEST token.",
41
+ effect: "read",
42
+ input: object({ mints: optional(list(text("SOL, TEST or a mint address"), 8)) }),
43
+ output: object({ address: account(), sol: text(), tokens: list(tokenRow, 8) }),
44
+ run: async (ctx, input) => {
45
+ const wallet = access(ctx);
46
+ const owner = (await signerOf(ctx)).address;
47
+ const mints = input.mints?.map((m, i) => mintNamed(m, wallet.url, `mints.${i}`)) ?? defaultMints(wallet.url);
48
+ return balances(ctx.transport, owner, mints);
49
+ },
50
+ });
51
+ export const walletIntents = define({
52
+ name: tool("wallet_intents"),
53
+ title: "List the wallet's intents",
54
+ description: "List the intents this server's wallet created, newest state first: open ones can still fill or be cancelled.",
55
+ effect: "read",
56
+ input: object({ status: optional(choice(STATUS, "only intents in this status")) }),
57
+ output: listIntents.output,
58
+ run: async (ctx, input, call) => {
59
+ const owner = (await signerOf(ctx)).address;
60
+ return listIntents.run(ctx, { owner, ...(input.status === undefined ? {} : { status: input.status }) }, call);
61
+ },
62
+ });
63
+ export const walletCancel = define({
64
+ name: tool("wallet_cancel"),
65
+ title: "Cancel a wallet intent",
66
+ description: "Cancel an open intent of this server's wallet by its nonce: the escrow returns to the wallet's token account (wrapped SOL for SOL) and the intent account closes, returning its rent. Without send it only previews; call again with send: true once the user approves.",
67
+ effect: "submit",
68
+ input: object({ nonce: amount("the intent's nonce, from wallet_intents"), send: optional(flag("true signs and sends; leave out to preview")) }),
69
+ output: object({
70
+ intent: account(),
71
+ refund: amount("raw input units returned to the wallet"),
72
+ summary: list(text(), 16),
73
+ warnings: list(text(), 8),
74
+ sent: flag(),
75
+ signature: optional(text()),
76
+ next: optional(text()),
77
+ }),
78
+ run: async (ctx, input, call) => {
79
+ const signer = await signerOf(ctx);
80
+ const view = (await prepareCancel.run(ctx, { owner: signer.address, nonce: input.nonce, close: true }, call));
81
+ return sent(ctx, signer, view, input.send, call);
82
+ },
83
+ });
84
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../src/agent/wallet/account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const PAYEE_MOVED = "this wallet's token account for the escrowed token now belongs to someone else, so a release would not reach it; ask the payee for another wallet";
2
+ export declare const RELEASE_CHANGED = "this release differs from its preview: the payee, amount, result, fee or the escrow itself changed, or no approval was given; preview it again and show the user";
3
+ export declare const approvalOf: (message: Uint8Array, memo?: string) => string;
4
+ export declare const walletAttest: import("../actions.js").AnyAction;