torch-liquidation-bot 4.0.0 → 4.0.1
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/index.js +7 -11
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +8 -0
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/readme.md +4 -3
package/dist/index.js
CHANGED
|
@@ -25,16 +25,12 @@ const utils_1 = require("./utils");
|
|
|
25
25
|
// scan & liquidate
|
|
26
26
|
// ---------------------------------------------------------------------------
|
|
27
27
|
const scanAndLiquidate = async (connection, log, vaultCreator, agentKeypair) => {
|
|
28
|
-
const { tokens } = await (0, torchsdk_1.getTokens)(connection, {
|
|
29
|
-
status: 'migrated',
|
|
30
|
-
sort: 'volume',
|
|
31
|
-
limit: 50,
|
|
32
|
-
});
|
|
28
|
+
const { tokens } = await (0, utils_1.withTimeout)((0, torchsdk_1.getTokens)(connection, { status: 'migrated', sort: 'volume', limit: 50 }), 'getTokens');
|
|
33
29
|
log('debug', `discovered ${tokens.length} migrated tokens`);
|
|
34
30
|
for (const token of tokens) {
|
|
35
31
|
let positions;
|
|
36
32
|
try {
|
|
37
|
-
const result = await (0, torchsdk_1.getAllLoanPositions)(connection, token.mint);
|
|
33
|
+
const result = await (0, utils_1.withTimeout)((0, torchsdk_1.getAllLoanPositions)(connection, token.mint), 'getAllLoanPositions');
|
|
38
34
|
positions = result.positions;
|
|
39
35
|
}
|
|
40
36
|
catch {
|
|
@@ -52,15 +48,15 @@ const scanAndLiquidate = async (connection, log, vaultCreator, agentKeypair) =>
|
|
|
52
48
|
`owed=${(0, utils_1.sol)(position.total_owed)} SOL`);
|
|
53
49
|
// build and execute liquidation through the vault
|
|
54
50
|
try {
|
|
55
|
-
const { transaction, message } = await (0, torchsdk_1.buildLiquidateTransaction)(connection, {
|
|
51
|
+
const { transaction, message } = await (0, utils_1.withTimeout)((0, torchsdk_1.buildLiquidateTransaction)(connection, {
|
|
56
52
|
mint: token.mint,
|
|
57
53
|
liquidator: agentKeypair.publicKey.toBase58(),
|
|
58
54
|
borrower: position.borrower,
|
|
59
55
|
vault: vaultCreator,
|
|
60
|
-
});
|
|
56
|
+
}), 'buildLiquidateTransaction');
|
|
61
57
|
transaction.sign(agentKeypair);
|
|
62
58
|
const signature = await connection.sendRawTransaction(transaction.serialize());
|
|
63
|
-
await (0, torchsdk_1.confirmTransaction)(connection, signature, agentKeypair.publicKey.toBase58());
|
|
59
|
+
await (0, utils_1.withTimeout)((0, torchsdk_1.confirmTransaction)(connection, signature, agentKeypair.publicKey.toBase58()), 'confirmTransaction');
|
|
64
60
|
log('info', `LIQUIDATED | ${token.symbol} | borrower=${position.borrower.slice(0, 8)}... | ` +
|
|
65
61
|
`sig=${signature.slice(0, 16)}... | ${message}`);
|
|
66
62
|
}
|
|
@@ -107,13 +103,13 @@ const main = async () => {
|
|
|
107
103
|
console.log(`scan interval: ${config.scanIntervalMs}ms`);
|
|
108
104
|
console.log();
|
|
109
105
|
// verify vault exists
|
|
110
|
-
const vault = await (0, torchsdk_1.getVault)(connection, config.vaultCreator);
|
|
106
|
+
const vault = await (0, utils_1.withTimeout)((0, torchsdk_1.getVault)(connection, config.vaultCreator), 'getVault');
|
|
111
107
|
if (!vault) {
|
|
112
108
|
throw new Error(`vault not found for creator ${config.vaultCreator}`);
|
|
113
109
|
}
|
|
114
110
|
log('info', `vault found — authority=${vault.authority}`);
|
|
115
111
|
// verify agent wallet is linked to vault
|
|
116
|
-
const link = await (0, torchsdk_1.getVaultForWallet)(connection, agentKeypair.publicKey.toBase58());
|
|
112
|
+
const link = await (0, utils_1.withTimeout)((0, torchsdk_1.getVaultForWallet)(connection, agentKeypair.publicKey.toBase58()), 'getVaultForWallet');
|
|
117
113
|
if (!link) {
|
|
118
114
|
console.log();
|
|
119
115
|
console.log('--- ACTION REQUIRED ---');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;GAeG;;AAEH,6CAAqD;AACrD,uCAQiB;AACjB,qCAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -5,5 +5,6 @@ import type { LogLevel } from './types';
|
|
|
5
5
|
export declare const sol: (lamports: number) => string;
|
|
6
6
|
export declare const bpsToPercent: (bps: number) => string;
|
|
7
7
|
export declare const decodeBase58: (s: string) => Uint8Array;
|
|
8
|
+
export declare function withTimeout<T>(promise: Promise<T>, label: string): Promise<T>;
|
|
8
9
|
export declare function createLogger(minLevel: LogLevel): (level: LogLevel, msg: string) => void;
|
|
9
10
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,GAAG,GAAI,UAAU,MAAM,WAA6C,CAAA;AAEjF,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,WAAiC,CAAA;AAKzE,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,KAAG,UAmBxC,CAAA;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,IAGzB,OAAO,QAAQ,EAAE,KAAK,MAAM,UAMjD"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,GAAG,GAAI,UAAU,MAAM,WAA6C,CAAA;AAEjF,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,WAAiC,CAAA;AAKzE,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,KAAG,UAmBxC,CAAA;AAID,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAO7E;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,IAGzB,OAAO,QAAQ,EAAE,KAAK,MAAM,UAMjD"}
|
package/dist/utils.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.decodeBase58 = exports.bpsToPercent = exports.sol = void 0;
|
|
7
|
+
exports.withTimeout = withTimeout;
|
|
7
8
|
exports.createLogger = createLogger;
|
|
8
9
|
const torchsdk_1 = require("torchsdk");
|
|
9
10
|
const sol = (lamports) => (lamports / torchsdk_1.LAMPORTS_PER_SOL).toFixed(4);
|
|
@@ -34,6 +35,13 @@ const decodeBase58 = (s) => {
|
|
|
34
35
|
return new Uint8Array(result.reverse());
|
|
35
36
|
};
|
|
36
37
|
exports.decodeBase58 = decodeBase58;
|
|
38
|
+
const RPC_TIMEOUT_MS = 30000;
|
|
39
|
+
function withTimeout(promise, label) {
|
|
40
|
+
return Promise.race([
|
|
41
|
+
promise,
|
|
42
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`${label} timed out after ${RPC_TIMEOUT_MS}ms`)), RPC_TIMEOUT_MS)),
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
37
45
|
const LEVEL_ORDER = ['debug', 'info', 'warn', 'error'];
|
|
38
46
|
function createLogger(minLevel) {
|
|
39
47
|
const minIdx = LEVEL_ORDER.indexOf(minLevel);
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAmCH,oCASC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# torch-liquidation-bot v4.0.
|
|
1
|
+
# torch-liquidation-bot v4.0.1 (Vault Mode)
|
|
2
2
|
|
|
3
3
|
Vault-based liquidation bot for [Torch Market](https://torch.market) on Solana. Generates an agent keypair in-process — no user wallet required. All operations route through a Torch Vault.
|
|
4
4
|
|
|
@@ -7,7 +7,7 @@ Vault-based liquidation bot for [Torch Market](https://torch.market) on Solana.
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install torch-liquidation-bot@4.0.
|
|
10
|
+
npm install torch-liquidation-bot@4.0.1
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
## Quick Start
|
|
@@ -111,7 +111,7 @@ for (const token of tokens) {
|
|
|
111
111
|
src/
|
|
112
112
|
├── types.ts — BotConfig interface
|
|
113
113
|
├── config.ts — loadConfig() (SOLANA_RPC_URL, VAULT_CREATOR, SOLANA_PRIVATE_KEY, SCAN_INTERVAL_MS, LOG_LEVEL)
|
|
114
|
-
├── utils.ts — sol(), bpsToPercent(), createLogger()
|
|
114
|
+
├── utils.ts — sol(), bpsToPercent(), withTimeout(), createLogger()
|
|
115
115
|
└── index.ts — vault-based liquidation loop
|
|
116
116
|
```
|
|
117
117
|
|
|
@@ -139,6 +139,7 @@ pnpm test
|
|
|
139
139
|
- Agent keypair generated in-process with `Keypair.generate()` (or loaded from optional `SOLANA_PRIVATE_KEY`)
|
|
140
140
|
- Vault model: agent is a stateless controller, all value stays in the vault
|
|
141
141
|
- Authority can unlink the agent wallet instantly via `buildUnlinkWalletTransaction()`
|
|
142
|
+
- All SDK calls wrapped with 30-second timeout — a hanging RPC cannot stall the bot indefinitely
|
|
142
143
|
- Minimal dependencies: `@solana/web3.js` + `torchsdk` -- both pinned to exact versions
|
|
143
144
|
- No post-install hooks, no remote code fetching
|
|
144
145
|
- `disable-model-invocation: true` -- agents cannot invoke this skill autonomously
|