tollkit-wallet 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/swap.d.ts CHANGED
@@ -12,8 +12,8 @@
12
12
  * registry, github.com/0xProject/0x-settler README), and simulates Solana
13
13
  * swaps, refusing any that take more than the coin being sold.
14
14
  */
15
- import { Connection, Keypair, PublicKey } from "@solana/web3.js";
16
- import { type Wallet, type HDNodeWallet } from "ethers";
15
+ import { Connection, Keypair, PublicKey, VersionedTransaction } from "@solana/web3.js";
16
+ import { JsonRpcProvider, type Wallet, type HDNodeWallet } from "ethers";
17
17
  import { type Chain } from "./chains.js";
18
18
  type Fetch = typeof fetch;
19
19
  export declare const DEFAULT_PROXY = "https://api.tollkit.dev/wallet";
@@ -36,13 +36,29 @@ export interface SwapQuote {
36
36
  venue_fee_bps: number;
37
37
  usd_value: number | null;
38
38
  fee_usd: number | null;
39
+ /** Solana only: Jupiter's route doesn't carry Tollkit's fee, so the wallet sends it on its own, in SOL, after the swap. */
40
+ fee_separate?: boolean;
41
+ /** Solana only: built from Jupiter's instructions with Tollkit's fee (in SOL) inside the same transaction. */
42
+ fee_inline?: boolean;
39
43
  raw: any;
40
44
  }
45
+ /**
46
+ * Jupiter pays Tollkit's 0.5% out of the route only when Tollkit has a fee account for the token Jupiter picks to
47
+ * take the fee in (it prefers SOL, then stablecoins, then other tokens). For any other token the order comes back
48
+ * with Jupiter's own default fee instead (developers.jup.ag/docs/swap/fees: "the order still returns but executes
49
+ * without your fees"), and Tollkit's fee is sent separately.
50
+ */
51
+ export declare function jupiterFeeInRoute(raw: any): boolean;
52
+ /** The coin Tollkit's fee is taken in on Base and Ethereum: a stablecoin side first, then ETH or WETH, else the coin sold. */
53
+ export declare function feeTokenFor(chain: Chain, sell: string, buy: string): string;
54
+ /** Tollkit's 0.5% in lamports: straight from the SOL side when there is one, else the trade's dollar value at SOL's price. */
55
+ export declare function solFeeLamports(q: Pick<SwapQuote, "sell_token" | "buy_token" | "sell_amount" | "buy_amount">, usd: number | null, solUsd: number | null): bigint;
41
56
  /** Dollar value of the sell side when either side is a stablecoin; else null (caller prices it). */
42
57
  export declare function stableValue(q: Pick<SwapQuote, "chain" | "sell_token" | "buy_token" | "sell_amount" | "buy_amount">): number | null;
43
58
  export declare function getQuote(req: SwapRequest, taker: string, opts?: {
44
59
  fetch?: Fetch;
45
60
  proxy?: string;
61
+ build?: boolean;
46
62
  }): Promise<SwapQuote>;
47
63
  /** Everything the wallet refuses to sign. Returns a reason, or null if the quote is safe. */
48
64
  export declare function vetQuote(q: SwapQuote, req: SwapRequest, taker?: string): string | null;
@@ -53,6 +69,8 @@ export declare function checkZeroExTx(q: SwapQuote, taker: string): string;
53
69
  /** Programs a Solana swap may call directly. JUP6…: Jupiter's router (Metis), as seen in live Ultra orders. */
54
70
  export declare const SWAP_PROGRAMS: Set<string>;
55
71
  export interface VerifyDeps {
72
+ /** A Solana transaction the wallet assembled itself (Jupiter's router path), and the SOL it adds for Tollkit's fee. */ vtx?: VersionedTransaction;
73
+ extraLamports?: bigint;
56
74
  /** eth_call on the swap's chain; returns the hex result. */ evmCall?: (chain: Chain, to: string, data: string) => Promise<string>;
57
75
  /** Solana connection (tests pass a fake). */ conn?: Pick<Connection, "getBalance" | "getParsedTokenAccountsByOwner" | "simulateTransaction"> & {
58
76
  getAddressLookupTable?: Connection["getAddressLookupTable"];
@@ -67,8 +85,20 @@ export interface ExecDeps {
67
85
  rpc?: Partial<Record<Chain, string>>;
68
86
  fetch?: Fetch;
69
87
  proxy?: string;
70
- verify?: VerifyDeps;
88
+ verify?: VerifyDeps; /** tests: the EVM provider to send with */
89
+ provider?: JsonRpcProvider; /** tests: how often to check a Solana send */
90
+ pollMs?: number;
71
91
  }
92
+ /**
93
+ * Jupiter's router instructions (Swap API v2 /build) plus Tollkit's fee as a plain SOL transfer, in one v0
94
+ * transaction: compute-unit limit from a simulation (x1.2, at most 1.4M), Jupiter's priority price, a fresh
95
+ * blockhash. Checked with the same rules as any swap, then sent and confirmed by polling.
96
+ */
97
+ export declare function assembleBuilt(q: SwapQuote, payer: PublicKey, conn: Pick<Connection, "getLatestBlockhash" | "simulateTransaction">): Promise<{
98
+ tx: VersionedTransaction;
99
+ lastValidBlockHeight: number;
100
+ feeLamports: bigint;
101
+ }>;
72
102
  /** Sign and send. Returns the transaction hash / signature. */
73
103
  export declare function executeSwap(q: SwapQuote, keys: {
74
104
  evm: Wallet | HDNodeWallet;
package/dist/swap.js CHANGED
@@ -12,10 +12,45 @@
12
12
  * registry, github.com/0xProject/0x-settler README), and simulates Solana
13
13
  * swaps, refusing any that take more than the coin being sold.
14
14
  */
15
- import { Connection, PublicKey, VersionedTransaction } from "@solana/web3.js";
15
+ import { AddressLookupTableAccount, ComputeBudgetProgram, Connection, PublicKey, SystemProgram, TransactionInstruction, TransactionMessage, VersionedTransaction } from "@solana/web3.js";
16
16
  import { AbiCoder, Contract, Interface, JsonRpcProvider, ZeroAddress } from "ethers";
17
+ import { KNOWN } from "./tokens.js";
18
+ import { sendingProvider, waitMined } from "./evmsend.js";
17
19
  import { ALLOWANCE_HOLDER, DEFAULT_RPC, EVM_CHAIN_ID, NATIVE_EVM, STABLES, SWAP_FEE_BPS, WSOL, isStable } from "./chains.js";
18
20
  export const DEFAULT_PROXY = "https://api.tollkit.dev/wallet";
21
+ /**
22
+ * Jupiter pays Tollkit's 0.5% out of the route only when Tollkit has a fee account for the token Jupiter picks to
23
+ * take the fee in (it prefers SOL, then stablecoins, then other tokens). For any other token the order comes back
24
+ * with Jupiter's own default fee instead (developers.jup.ag/docs/swap/fees: "the order still returns but executes
25
+ * without your fees"), and Tollkit's fee is sent separately.
26
+ */
27
+ export function jupiterFeeInRoute(raw) {
28
+ return !!raw?.referralAccount && Number(raw?.platformFee?.feeBps ?? raw?.feeBps) === SWAP_FEE_BPS;
29
+ }
30
+ /** The coin Tollkit's fee is taken in on Base and Ethereum: a stablecoin side first, then ETH or WETH, else the coin sold. */
31
+ export function feeTokenFor(chain, sell, buy) {
32
+ const eth = (t) => t.toLowerCase() === NATIVE_EVM.toLowerCase() || t.toLowerCase() === KNOWN[chain]?.WETH?.address?.toLowerCase();
33
+ if (isStable(chain, sell))
34
+ return sell;
35
+ if (isStable(chain, buy))
36
+ return buy;
37
+ if (eth(sell))
38
+ return sell;
39
+ if (eth(buy))
40
+ return buy;
41
+ return sell;
42
+ }
43
+ /** Tollkit's 0.5% in lamports: straight from the SOL side when there is one, else the trade's dollar value at SOL's price. */
44
+ export function solFeeLamports(q, usd, solUsd) {
45
+ const bps = BigInt(SWAP_FEE_BPS);
46
+ if (q.sell_token === WSOL)
47
+ return (BigInt(q.sell_amount) * bps) / 10000n;
48
+ if (q.buy_token === WSOL)
49
+ return (BigInt(q.buy_amount) * bps) / 10000n;
50
+ if (!(usd && usd > 0) || !(solUsd && solUsd > 0))
51
+ throw new Error("No SOL price right now to work out Tollkit's fee. Try again in a minute.");
52
+ return BigInt(Math.ceil(((usd * SWAP_FEE_BPS) / 10000 / solUsd) * 1e9));
53
+ }
19
54
  const decimalsOf = (chain, token) => (chain === "solana" ? STABLES.solana[token] : STABLES[chain][token.toLowerCase()])?.decimals;
20
55
  async function getJson(f, url, init) {
21
56
  const r = await f(url, { ...init, signal: AbortSignal.timeout(20_000) });
@@ -38,23 +73,48 @@ export async function getQuote(req, taker, opts = {}) {
38
73
  const u = new URL(`${proxy}/swap/solana/order`);
39
74
  u.search = new URLSearchParams({ inputMint: req.sell_token, outputMint: req.buy_token, amount: req.sell_amount, taker, slippageBps: String(req.slippage_bps) }).toString();
40
75
  const j = await getJson(f, u.toString());
76
+ const inRoute = jupiterFeeInRoute(j);
77
+ if (!inRoute && opts.build !== false) {
78
+ // No Tollkit fee account for the coin Jupiter would take the fee in: build the swap from Jupiter's router
79
+ // instructions instead, so Tollkit's 0.5% (in SOL) goes in the same transaction. If that path isn't
80
+ // available, fall back to the order with the fee sent right after (below).
81
+ try {
82
+ const bu = new URL(`${proxy}/swap/solana/build`);
83
+ bu.search = new URLSearchParams({ inputMint: req.sell_token, outputMint: req.buy_token, amount: req.sell_amount, taker, slippageBps: String(req.slippage_bps) }).toString();
84
+ const b = await getJson(f, bu.toString());
85
+ if (b?.swapInstruction && b?.tollkit_fee && typeof b.tollkit_fee.recipient === "string") {
86
+ return withUsd({
87
+ chain: "solana", venue: "jupiter", sell_token: req.sell_token, buy_token: req.buy_token,
88
+ sell_amount: String(b.inAmount ?? req.sell_amount), buy_amount: String(b.outAmount), min_buy_amount: String(b.otherAmountThreshold ?? b.outAmount),
89
+ fee_bps: Number(b.tollkit_fee.bps) === 0 ? 0 : SWAP_FEE_BPS, venue_fee_bps: 0, usd_value: null, fee_usd: null,
90
+ raw: { build: b, swapUsdValue: j.swapUsdValue, inUsdValue: j.inUsdValue }, fee_inline: true,
91
+ });
92
+ }
93
+ }
94
+ catch { /* the order below, with the fee sent separately */ }
95
+ }
41
96
  const q = {
42
97
  chain: "solana", venue: "jupiter", sell_token: req.sell_token, buy_token: req.buy_token,
43
98
  sell_amount: String(j.inAmount ?? req.sell_amount), buy_amount: String(j.outAmount), min_buy_amount: String(j.otherAmountThreshold ?? j.outAmount),
44
- fee_bps: Number(j.feeBps ?? SWAP_FEE_BPS), venue_fee_bps: 0, usd_value: null, fee_usd: null, raw: j,
99
+ // Tollkit's fee is always 0.5%; when the route doesn't carry it, whatever the route does carry is Jupiter's own.
100
+ fee_bps: SWAP_FEE_BPS, venue_fee_bps: inRoute ? 0 : Math.max(0, Number(j.platformFee?.feeBps ?? j.feeBps ?? 0) || 0),
101
+ usd_value: null, fee_usd: null, raw: j, ...(inRoute ? {} : { fee_separate: true }),
45
102
  };
46
103
  return withUsd(q);
47
104
  }
48
105
  const u = new URL(`${proxy}/swap/evm/quote`);
49
- u.search = new URLSearchParams({ chainId: String(EVM_CHAIN_ID[req.chain]), sellToken: req.sell_token, buyToken: req.buy_token, sellAmount: req.sell_amount, taker, slippageBps: String(req.slippage_bps) }).toString();
106
+ u.search = new URLSearchParams({ chainId: String(EVM_CHAIN_ID[req.chain]), sellToken: req.sell_token, buyToken: req.buy_token, sellAmount: req.sell_amount, taker, slippageBps: String(req.slippage_bps), feeToken: feeTokenFor(req.chain, req.sell_token, req.buy_token) }).toString();
50
107
  const j = await getJson(f, u.toString());
51
- const feeAmt = BigInt(j?.fees?.integratorFee?.amount ?? "0");
52
- const sell = BigInt(j.sellAmount ?? req.sell_amount);
53
- const feeBps = sell > 0n ? Number((feeAmt * 10000n) / sell) : 0;
108
+ const sell = BigInt(j.sellAmount ?? req.sell_amount), buy = BigInt(j.buyAmount ?? "0");
109
+ // A fee is a share of the side it's taken from: the amount sold, or what was bought before the fee came off.
110
+ const share = (fee) => {
111
+ const amt = BigInt(fee?.amount ?? "0"), tok = String(fee?.token ?? req.sell_token).toLowerCase();
112
+ const base = tok === req.buy_token.toLowerCase() ? buy + amt : tok === req.sell_token.toLowerCase() ? sell : 0n;
113
+ return base > 0n ? Number((amt * 20000n / base + 1n) / 2n) : 0;
114
+ };
115
+ const feeBps = share(j?.fees?.integratorFee);
54
116
  // 0x's own fee (0.15% on select pairs on the Standard plan), shown to the user too.
55
- const zx = BigInt(j?.fees?.zeroExFee?.amount ?? "0");
56
- const zxToken = String(j?.fees?.zeroExFee?.token ?? "").toLowerCase();
57
- const venueBps = sell > 0n && zxToken === req.sell_token.toLowerCase() ? Number((zx * 10000n) / sell) : 0;
117
+ const venueBps = j?.fees?.zeroExFee ? share(j.fees.zeroExFee) : 0;
58
118
  return withUsd({
59
119
  chain: req.chain, venue: "0x", sell_token: req.sell_token, buy_token: req.buy_token,
60
120
  sell_amount: String(j.sellAmount ?? req.sell_amount), buy_amount: String(j.buyAmount), min_buy_amount: String(j.minBuyAmount ?? j.buyAmount),
@@ -92,7 +152,11 @@ export function vetQuote(q, req, taker) {
92
152
  }
93
153
  }
94
154
  else {
95
- if (!q.raw?.transaction || !q.raw?.requestId)
155
+ if (q.raw?.build) {
156
+ if (!q.raw.build.swapInstruction)
157
+ return "The quote has no swap instruction.";
158
+ }
159
+ else if (!q.raw?.transaction || !q.raw?.requestId)
96
160
  return "The quote has no transaction.";
97
161
  }
98
162
  return null;
@@ -157,12 +221,15 @@ export async function verifySwapTx(q, me, d = {}) {
157
221
  return;
158
222
  }
159
223
  let vtx;
160
- try {
161
- vtx = VersionedTransaction.deserialize(Buffer.from(String(q.raw?.transaction ?? ""), "base64"));
162
- }
163
- catch {
164
- throw new Error("The quote's transaction can't be read.");
165
- }
224
+ if (d.vtx)
225
+ vtx = d.vtx;
226
+ else
227
+ try {
228
+ vtx = VersionedTransaction.deserialize(Buffer.from(String(q.raw?.transaction ?? ""), "base64"));
229
+ }
230
+ catch {
231
+ throw new Error("The quote's transaction can't be read.");
232
+ }
166
233
  const signers = vtx.message.staticAccountKeys.slice(0, vtx.message.header.numRequiredSignatures);
167
234
  if (!signers.some((k) => k.equals(me.solana)))
168
235
  throw new Error("The quote's transaction isn't for this wallet.");
@@ -257,7 +324,8 @@ export async function verifySwapTx(q, me, d = {}) {
257
324
  const sell = BigInt(q.sell_amount), sellingSol = q.sell_token === WSOL, buyingSol = q.buy_token === WSOL;
258
325
  const solDelta = BigInt(accs[0].lamports) - BigInt(before) + (tokens.get(WSOL) ?? 0n);
259
326
  // Network fees, priority fees and a new token account's deposit stay under 0.01 SOL.
260
- const FEES = 10000000n;
327
+ // Plus Tollkit's fee when the wallet put it in this transaction itself.
328
+ const FEES = 10000000n + (d.extraLamports ?? 0n);
261
329
  if (sellingSol && -solDelta > sell + FEES)
262
330
  throw new Error("This swap would take more SOL than you're selling. Not signing it.");
263
331
  if (!sellingSol && !buyingSol && -solDelta > FEES)
@@ -277,8 +345,52 @@ export async function verifySwapTx(q, me, d = {}) {
277
345
  function ataOf(owner, mint, tokenProgram) {
278
346
  return PublicKey.findProgramAddressSync([owner.toBuffer(), tokenProgram.toBuffer(), mint.toBuffer()], new PublicKey(ATA_PROGRAM))[0].toBase58();
279
347
  }
348
+ const toIx = (i) => new TransactionInstruction({ programId: new PublicKey(i.programId), keys: (i.accounts ?? []).map((a) => ({ pubkey: new PublicKey(a.pubkey), isSigner: !!a.isSigner, isWritable: !!a.isWritable })), data: Buffer.from(String(i.data ?? ""), "base64") });
349
+ const COMPUTE_BUDGET = "ComputeBudget111111111111111111111111111111";
350
+ /**
351
+ * Jupiter's router instructions (Swap API v2 /build) plus Tollkit's fee as a plain SOL transfer, in one v0
352
+ * transaction: compute-unit limit from a simulation (x1.2, at most 1.4M), Jupiter's priority price, a fresh
353
+ * blockhash. Checked with the same rules as any swap, then sent and confirmed by polling.
354
+ */
355
+ export async function assembleBuilt(q, payer, conn) {
356
+ const b = q.raw.build, fee = q.raw.fee;
357
+ const feeLamports = fee ? BigInt(fee.lamports) : 0n;
358
+ const price = (b.computeBudgetInstructions ?? []).map(toIx).filter((ix) => !(ix.programId.toBase58() === COMPUTE_BUDGET && ix.data[0] === 2));
359
+ const body = [...(b.setupInstructions ?? []).map(toIx), toIx(b.swapInstruction), ...(b.cleanupInstruction ? [toIx(b.cleanupInstruction)] : []), ...(b.otherInstructions ?? []).map(toIx)];
360
+ if (feeLamports > 0n)
361
+ body.push(SystemProgram.transfer({ fromPubkey: payer, toPubkey: new PublicKey(fee.to), lamports: feeLamports }));
362
+ const luts = Object.entries(b.addressesByLookupTableAddress ?? {}).map(([key, addrs]) => new AddressLookupTableAccount({ key: new PublicKey(key), state: { deactivationSlot: 18446744073709551615n, lastExtendedSlot: 0, lastExtendedSlotStartIndex: 0, addresses: addrs.map((a) => new PublicKey(a)) } }));
363
+ const { blockhash, lastValidBlockHeight } = await conn.getLatestBlockhash("confirmed");
364
+ const compile = (units) => new VersionedTransaction(new TransactionMessage({ payerKey: payer, recentBlockhash: blockhash, instructions: [ComputeBudgetProgram.setComputeUnitLimit({ units }), ...price, ...body] }).compileToV0Message(luts));
365
+ const sim = await conn.simulateTransaction(compile(1_400_000), { sigVerify: false, replaceRecentBlockhash: true });
366
+ if (sim.value.err)
367
+ throw new Error(`This swap would fail right now (${JSON.stringify(sim.value.err)}). Try again in a moment.`);
368
+ const units = Math.min(1_400_000, Math.ceil((sim.value.unitsConsumed ?? 1_200_000) * 1.2));
369
+ return { tx: compile(units), lastValidBlockHeight, feeLamports };
370
+ }
371
+ async function executeBuilt(q, keys, deps) {
372
+ const conn = deps.verify?.conn ?? new Connection(deps.rpc?.solana ?? DEFAULT_RPC.solana, "confirmed");
373
+ const { tx, lastValidBlockHeight, feeLamports } = await assembleBuilt(q, keys.solana.publicKey, conn);
374
+ await verifySwapTx(q, { evm: "", solana: keys.solana.publicKey }, { ...deps, ...deps.verify, vtx: tx, extraLamports: feeLamports });
375
+ tx.sign([keys.solana]);
376
+ const sig = await conn.sendRawTransaction(tx.serialize(), { preflightCommitment: "confirmed", maxRetries: 3 });
377
+ const until = Date.now() + 90_000;
378
+ for (;;) {
379
+ const st = (await conn.getSignatureStatuses([sig])).value[0];
380
+ if (st?.err)
381
+ throw new Error(`swap ${sig} failed: ${JSON.stringify(st.err)}`);
382
+ if (st && (st.confirmationStatus === "confirmed" || st.confirmationStatus === "finalized"))
383
+ return sig;
384
+ if (Date.now() > until || (await conn.getBlockHeight("confirmed")) > lastValidBlockHeight)
385
+ throw new Error(`Solana swap ${sig} wasn't confirmed in time. Check it on an explorer before trying again.`);
386
+ await new Promise((r) => setTimeout(r, deps.pollMs ?? 1500));
387
+ }
388
+ }
280
389
  /** Sign and send. Returns the transaction hash / signature. */
281
390
  export async function executeSwap(q, keys, deps = {}) {
391
+ // A built Solana swap is assembled first, then checked as the exact transaction that will be signed.
392
+ if (q.venue === "jupiter" && q.raw?.build)
393
+ return executeBuilt(q, keys, deps);
282
394
  await verifySwapTx(q, { evm: keys.evm.address, solana: keys.solana.publicKey }, { ...deps, ...deps.verify });
283
395
  if (q.venue === "jupiter") {
284
396
  const tx = VersionedTransaction.deserialize(Buffer.from(q.raw.transaction, "base64"));
@@ -292,19 +404,20 @@ export async function executeSwap(q, keys, deps = {}) {
292
404
  throw new Error(`swap failed: ${j.error ?? j.status}`);
293
405
  return String(j.signature);
294
406
  }
295
- const provider = new JsonRpcProvider(deps.rpc?.[q.chain] ?? DEFAULT_RPC[q.chain], EVM_CHAIN_ID[q.chain]);
407
+ // On Ethereum mainnet the approval and the swap go through Flashbots Protect (src/evmsend.ts).
408
+ const provider = deps.provider ?? sendingProvider(q.chain, { rpc: deps.rpc, proxy: deps.proxy, fetch: deps.fetch });
296
409
  const signer = keys.evm.connect(provider);
297
410
  if (q.raw?.issues?.allowance) {
298
411
  const token = new Contract(q.sell_token, ERC20, signer);
299
412
  const a = await token.getFunction("approve")(ALLOWANCE_HOLDER, BigInt(q.sell_amount)); // exact amount, never unlimited
300
- await a.wait();
413
+ await waitMined(a, "approval");
301
414
  }
302
415
  const t = q.raw.transaction;
303
416
  const sent = await signer.sendTransaction({
304
417
  to: t.to, data: t.data, value: BigInt(t.value ?? "0"),
305
418
  ...(t.gas ? { gasLimit: BigInt(t.gas) } : {}),
306
419
  });
307
- const r = await sent.wait();
420
+ const r = await waitMined(sent, "swap");
308
421
  if (!r || r.status !== 1)
309
422
  throw new Error(`swap transaction ${sent.hash} reverted`);
310
423
  return sent.hash;
package/dist/swap.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"swap.js","sourceRoot":"","sources":["../src/swap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../src/swap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type TradeMode = "ai" | "python";
2
+ export declare function tradeMode(dir?: string): TradeMode | null;
3
+ export declare function setTradeMode(mode: unknown, dir?: string): TradeMode;
@@ -0,0 +1,23 @@
1
+ /** How the owner wants to trade, picked once on first run: with AI (chat and connected AI apps) or with their own Python bots. */
2
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { walletHome } from "./paths.js";
5
+ const file = (dir) => path.join(walletHome(dir), "trade-mode.json");
6
+ export function tradeMode(dir) {
7
+ try {
8
+ if (existsSync(file(dir))) {
9
+ const m = JSON.parse(readFileSync(file(dir), "utf8")).mode;
10
+ if (m === "ai" || m === "python")
11
+ return m;
12
+ }
13
+ }
14
+ catch { /* unset */ }
15
+ return null;
16
+ }
17
+ export function setTradeMode(mode, dir) {
18
+ if (mode !== "ai" && mode !== "python")
19
+ throw new Error("mode must be ai or python");
20
+ writeFileSync(file(dir), JSON.stringify({ mode, at: new Date().toISOString() }, null, 2), { mode: 0o600 });
21
+ return mode;
22
+ }
23
+ //# sourceMappingURL=trademode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trademode.js","sourceRoot":"","sources":["../src/trademode.ts"],"names":[],"mappings":"AAAA,kIAAkI;AAClI,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,MAAM,IAAI,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAE7E,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,IAAI,CAAC;QAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC;QAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;IACpK,OAAO,IAAI,CAAC;AACd,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,GAAY;IACtD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACrF,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3G,OAAO,IAAI,CAAC;AACd,CAAC"}