outsmart 2.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +568 -0
- package/dist/cli.d.ts +44 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1251 -0
- package/dist/cli.js.map +1 -0
- package/dist/dex/byreal-clmm.d.ts +16 -0
- package/dist/dex/byreal-clmm.d.ts.map +1 -0
- package/dist/dex/byreal-clmm.js +39 -0
- package/dist/dex/byreal-clmm.js.map +1 -0
- package/dist/dex/dflow.d.ts +27 -0
- package/dist/dex/dflow.d.ts.map +1 -0
- package/dist/dex/dflow.js +200 -0
- package/dist/dex/dflow.js.map +1 -0
- package/dist/dex/fusion-amm.d.ts +44 -0
- package/dist/dex/fusion-amm.d.ts.map +1 -0
- package/dist/dex/fusion-amm.js +546 -0
- package/dist/dex/fusion-amm.js.map +1 -0
- package/dist/dex/futarchy-amm.d.ts +32 -0
- package/dist/dex/futarchy-amm.d.ts.map +1 -0
- package/dist/dex/futarchy-amm.js +443 -0
- package/dist/dex/futarchy-amm.js.map +1 -0
- package/dist/dex/futarchy-idl.d.ts +2568 -0
- package/dist/dex/futarchy-idl.d.ts.map +1 -0
- package/dist/dex/futarchy-idl.js +2570 -0
- package/dist/dex/futarchy-idl.js.map +1 -0
- package/dist/dex/futarchy-launchpad.d.ts +68 -0
- package/dist/dex/futarchy-launchpad.d.ts.map +1 -0
- package/dist/dex/futarchy-launchpad.js +377 -0
- package/dist/dex/futarchy-launchpad.js.map +1 -0
- package/dist/dex/index.d.ts +88 -0
- package/dist/dex/index.d.ts.map +1 -0
- package/dist/dex/index.js +159 -0
- package/dist/dex/index.js.map +1 -0
- package/dist/dex/jupiter-ultra.d.ts +27 -0
- package/dist/dex/jupiter-ultra.d.ts.map +1 -0
- package/dist/dex/jupiter-ultra.js +369 -0
- package/dist/dex/jupiter-ultra.js.map +1 -0
- package/dist/dex/meteora-damm-v1.d.ts +36 -0
- package/dist/dex/meteora-damm-v1.d.ts.map +1 -0
- package/dist/dex/meteora-damm-v1.js +314 -0
- package/dist/dex/meteora-damm-v1.js.map +1 -0
- package/dist/dex/meteora-damm-v2.d.ts +103 -0
- package/dist/dex/meteora-damm-v2.d.ts.map +1 -0
- package/dist/dex/meteora-damm-v2.js +1146 -0
- package/dist/dex/meteora-damm-v2.js.map +1 -0
- package/dist/dex/meteora-dbc.d.ts +38 -0
- package/dist/dex/meteora-dbc.d.ts.map +1 -0
- package/dist/dex/meteora-dbc.js +374 -0
- package/dist/dex/meteora-dbc.js.map +1 -0
- package/dist/dex/meteora-dlmm.d.ts +79 -0
- package/dist/dex/meteora-dlmm.d.ts.map +1 -0
- package/dist/dex/meteora-dlmm.js +735 -0
- package/dist/dex/meteora-dlmm.js.map +1 -0
- package/dist/dex/orca.d.ts +31 -0
- package/dist/dex/orca.d.ts.map +1 -0
- package/dist/dex/orca.js +536 -0
- package/dist/dex/orca.js.map +1 -0
- package/dist/dex/pancakeswap-clmm.d.ts +16 -0
- package/dist/dex/pancakeswap-clmm.d.ts.map +1 -0
- package/dist/dex/pancakeswap-clmm.js +39 -0
- package/dist/dex/pancakeswap-clmm.js.map +1 -0
- package/dist/dex/pumpfun-amm.d.ts +46 -0
- package/dist/dex/pumpfun-amm.d.ts.map +1 -0
- package/dist/dex/pumpfun-amm.js +692 -0
- package/dist/dex/pumpfun-amm.js.map +1 -0
- package/dist/dex/pumpfun.d.ts +41 -0
- package/dist/dex/pumpfun.d.ts.map +1 -0
- package/dist/dex/pumpfun.js +555 -0
- package/dist/dex/pumpfun.js.map +1 -0
- package/dist/dex/raydium-amm-v4.d.ts +11 -0
- package/dist/dex/raydium-amm-v4.d.ts.map +1 -0
- package/dist/dex/raydium-amm-v4.js +649 -0
- package/dist/dex/raydium-amm-v4.js.map +1 -0
- package/dist/dex/raydium-clmm.d.ts +12 -0
- package/dist/dex/raydium-clmm.d.ts.map +1 -0
- package/dist/dex/raydium-clmm.js +675 -0
- package/dist/dex/raydium-clmm.js.map +1 -0
- package/dist/dex/raydium-cpmm.d.ts +10 -0
- package/dist/dex/raydium-cpmm.d.ts.map +1 -0
- package/dist/dex/raydium-cpmm.js +613 -0
- package/dist/dex/raydium-cpmm.js.map +1 -0
- package/dist/dex/raydium-launchlab.d.ts +12 -0
- package/dist/dex/raydium-launchlab.d.ts.map +1 -0
- package/dist/dex/raydium-launchlab.js +530 -0
- package/dist/dex/raydium-launchlab.js.map +1 -0
- package/dist/dex/shared/clmm-base.d.ts +58 -0
- package/dist/dex/shared/clmm-base.d.ts.map +1 -0
- package/dist/dex/shared/clmm-base.js +891 -0
- package/dist/dex/shared/clmm-base.js.map +1 -0
- package/dist/dex/types.d.ts +601 -0
- package/dist/dex/types.d.ts.map +1 -0
- package/dist/dex/types.js +137 -0
- package/dist/dex/types.js.map +1 -0
- package/dist/dexscreener/index.d.ts +2 -0
- package/dist/dexscreener/index.d.ts.map +1 -0
- package/dist/dexscreener/index.js +18 -0
- package/dist/dexscreener/index.js.map +1 -0
- package/dist/dexscreener/info.d.ts +22 -0
- package/dist/dexscreener/info.d.ts.map +1 -0
- package/dist/dexscreener/info.js +104 -0
- package/dist/dexscreener/info.js.map +1 -0
- package/dist/helpers/check_balance.d.ts +10 -0
- package/dist/helpers/check_balance.d.ts.map +1 -0
- package/dist/helpers/check_balance.js +34 -0
- package/dist/helpers/check_balance.js.map +1 -0
- package/dist/helpers/config.d.ts +51 -0
- package/dist/helpers/config.d.ts.map +1 -0
- package/dist/helpers/config.js +118 -0
- package/dist/helpers/config.js.map +1 -0
- package/dist/helpers/index.d.ts +8 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +29 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/logger.d.ts +27 -0
- package/dist/helpers/logger.d.ts.map +1 -0
- package/dist/helpers/logger.js +39 -0
- package/dist/helpers/logger.js.map +1 -0
- package/dist/helpers/token-2022.d.ts +32 -0
- package/dist/helpers/token-2022.d.ts.map +1 -0
- package/dist/helpers/token-2022.js +48 -0
- package/dist/helpers/token-2022.js.map +1 -0
- package/dist/helpers/unwrap_sol.d.ts +2 -0
- package/dist/helpers/unwrap_sol.d.ts.map +1 -0
- package/dist/helpers/unwrap_sol.js +67 -0
- package/dist/helpers/unwrap_sol.js.map +1 -0
- package/dist/helpers/util.d.ts +698 -0
- package/dist/helpers/util.d.ts.map +1 -0
- package/dist/helpers/util.js +181 -0
- package/dist/helpers/util.js.map +1 -0
- package/dist/helpers/utils.d.ts +10 -0
- package/dist/helpers/utils.d.ts.map +1 -0
- package/dist/helpers/utils.js +97 -0
- package/dist/helpers/utils.js.map +1 -0
- package/dist/helpers/wrap_sol.d.ts +3 -0
- package/dist/helpers/wrap_sol.d.ts.map +1 -0
- package/dist/helpers/wrap_sol.js +88 -0
- package/dist/helpers/wrap_sol.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/transactions/bloXroute_tips_tx_executor.d.ts +4 -0
- package/dist/transactions/bloXroute_tips_tx_executor.d.ts.map +1 -0
- package/dist/transactions/bloXroute_tips_tx_executor.js +70 -0
- package/dist/transactions/bloXroute_tips_tx_executor.js.map +1 -0
- package/dist/transactions/index.d.ts +6 -0
- package/dist/transactions/index.d.ts.map +1 -0
- package/dist/transactions/index.js +30 -0
- package/dist/transactions/index.js.map +1 -0
- package/dist/transactions/jito_tips_tx_executor.d.ts +15 -0
- package/dist/transactions/jito_tips_tx_executor.d.ts.map +1 -0
- package/dist/transactions/jito_tips_tx_executor.js +99 -0
- package/dist/transactions/jito_tips_tx_executor.js.map +1 -0
- package/dist/transactions/landing/index.d.ts +30 -0
- package/dist/transactions/landing/index.d.ts.map +1 -0
- package/dist/transactions/landing/index.js +60 -0
- package/dist/transactions/landing/index.js.map +1 -0
- package/dist/transactions/landing/nonce-manager.d.ts +116 -0
- package/dist/transactions/landing/nonce-manager.d.ts.map +1 -0
- package/dist/transactions/landing/nonce-manager.js +393 -0
- package/dist/transactions/landing/nonce-manager.js.map +1 -0
- package/dist/transactions/landing/orchestrator.d.ts +104 -0
- package/dist/transactions/landing/orchestrator.d.ts.map +1 -0
- package/dist/transactions/landing/orchestrator.js +329 -0
- package/dist/transactions/landing/orchestrator.js.map +1 -0
- package/dist/transactions/landing/providers/astralane.d.ts +12 -0
- package/dist/transactions/landing/providers/astralane.d.ts.map +1 -0
- package/dist/transactions/landing/providers/astralane.js +132 -0
- package/dist/transactions/landing/providers/astralane.js.map +1 -0
- package/dist/transactions/landing/providers/blockrazor.d.ts +11 -0
- package/dist/transactions/landing/providers/blockrazor.d.ts.map +1 -0
- package/dist/transactions/landing/providers/blockrazor.js +134 -0
- package/dist/transactions/landing/providers/blockrazor.js.map +1 -0
- package/dist/transactions/landing/providers/bloxroute.d.ts +12 -0
- package/dist/transactions/landing/providers/bloxroute.d.ts.map +1 -0
- package/dist/transactions/landing/providers/bloxroute.js +102 -0
- package/dist/transactions/landing/providers/bloxroute.js.map +1 -0
- package/dist/transactions/landing/providers/flashblock.d.ts +10 -0
- package/dist/transactions/landing/providers/flashblock.d.ts.map +1 -0
- package/dist/transactions/landing/providers/flashblock.js +102 -0
- package/dist/transactions/landing/providers/flashblock.js.map +1 -0
- package/dist/transactions/landing/providers/helius-sender.d.ts +11 -0
- package/dist/transactions/landing/providers/helius-sender.d.ts.map +1 -0
- package/dist/transactions/landing/providers/helius-sender.js +101 -0
- package/dist/transactions/landing/providers/helius-sender.js.map +1 -0
- package/dist/transactions/landing/providers/jito.d.ts +16 -0
- package/dist/transactions/landing/providers/jito.d.ts.map +1 -0
- package/dist/transactions/landing/providers/jito.js +110 -0
- package/dist/transactions/landing/providers/jito.js.map +1 -0
- package/dist/transactions/landing/providers/nextblock.d.ts +11 -0
- package/dist/transactions/landing/providers/nextblock.d.ts.map +1 -0
- package/dist/transactions/landing/providers/nextblock.js +109 -0
- package/dist/transactions/landing/providers/nextblock.js.map +1 -0
- package/dist/transactions/landing/providers/node1.d.ts +11 -0
- package/dist/transactions/landing/providers/node1.d.ts.map +1 -0
- package/dist/transactions/landing/providers/node1.js +101 -0
- package/dist/transactions/landing/providers/node1.js.map +1 -0
- package/dist/transactions/landing/providers/nozomi.d.ts +11 -0
- package/dist/transactions/landing/providers/nozomi.d.ts.map +1 -0
- package/dist/transactions/landing/providers/nozomi.js +124 -0
- package/dist/transactions/landing/providers/nozomi.js.map +1 -0
- package/dist/transactions/landing/providers/soyas.d.ts +16 -0
- package/dist/transactions/landing/providers/soyas.d.ts.map +1 -0
- package/dist/transactions/landing/providers/soyas.js +192 -0
- package/dist/transactions/landing/providers/soyas.js.map +1 -0
- package/dist/transactions/landing/providers/stellium.d.ts +11 -0
- package/dist/transactions/landing/providers/stellium.d.ts.map +1 -0
- package/dist/transactions/landing/providers/stellium.js +102 -0
- package/dist/transactions/landing/providers/stellium.js.map +1 -0
- package/dist/transactions/landing/providers/zero-slot.d.ts +10 -0
- package/dist/transactions/landing/providers/zero-slot.d.ts.map +1 -0
- package/dist/transactions/landing/providers/zero-slot.js +92 -0
- package/dist/transactions/landing/providers/zero-slot.js.map +1 -0
- package/dist/transactions/landing/tip-accounts.d.ts +22 -0
- package/dist/transactions/landing/tip-accounts.d.ts.map +1 -0
- package/dist/transactions/landing/tip-accounts.js +140 -0
- package/dist/transactions/landing/tip-accounts.js.map +1 -0
- package/dist/transactions/landing/types.d.ts +98 -0
- package/dist/transactions/landing/types.d.ts.map +1 -0
- package/dist/transactions/landing/types.js +30 -0
- package/dist/transactions/landing/types.js.map +1 -0
- package/dist/transactions/nozomi/tx-submission.d.ts +14 -0
- package/dist/transactions/nozomi/tx-submission.d.ts.map +1 -0
- package/dist/transactions/nozomi/tx-submission.js +107 -0
- package/dist/transactions/nozomi/tx-submission.js.map +1 -0
- package/dist/transactions/send-rpc.d.ts +54 -0
- package/dist/transactions/send-rpc.d.ts.map +1 -0
- package/dist/transactions/send-rpc.js +126 -0
- package/dist/transactions/send-rpc.js.map +1 -0
- package/dist/transactions/simple_tx_executor.d.ts +10 -0
- package/dist/transactions/simple_tx_executor.d.ts.map +1 -0
- package/dist/transactions/simple_tx_executor.js +33 -0
- package/dist/transactions/simple_tx_executor.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DEX Adapter Registry
|
|
4
|
+
*
|
|
5
|
+
* Central registry for all DEX adapters. Each adapter (raydium-amm-v4,
|
|
6
|
+
* meteora-dlmm, orca, jupiter, etc.) registers itself here during module
|
|
7
|
+
* initialization.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* import { getDexAdapter, listDexAdapters } from "../dex";
|
|
11
|
+
*
|
|
12
|
+
* // Get a specific adapter
|
|
13
|
+
* const adapter = getDexAdapter("raydium-amm-v4");
|
|
14
|
+
* const result = await adapter.buy({ tokenMint: "...", amountSol: 0.1 });
|
|
15
|
+
*
|
|
16
|
+
* // List all registered adapters
|
|
17
|
+
* const adapters = listDexAdapters();
|
|
18
|
+
* console.log(adapters.map(a => `${a.name} (${a.protocol})`));
|
|
19
|
+
*/
|
|
20
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
23
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
24
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
25
|
+
}
|
|
26
|
+
Object.defineProperty(o, k2, desc);
|
|
27
|
+
}) : (function(o, m, k, k2) {
|
|
28
|
+
if (k2 === undefined) k2 = k;
|
|
29
|
+
o[k2] = m[k];
|
|
30
|
+
}));
|
|
31
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
32
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.DexRegistry = void 0;
|
|
36
|
+
exports.getRegistry = getRegistry;
|
|
37
|
+
exports.getDexAdapter = getDexAdapter;
|
|
38
|
+
exports.listDexAdapters = listDexAdapters;
|
|
39
|
+
exports.registerAdapter = registerAdapter;
|
|
40
|
+
// Re-export everything from types for single-import convenience
|
|
41
|
+
__exportStar(require("./types"), exports);
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// DexRegistry class
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
class DexRegistry {
|
|
46
|
+
adapters = new Map();
|
|
47
|
+
/**
|
|
48
|
+
* Register a DEX adapter.
|
|
49
|
+
*
|
|
50
|
+
* @param adapter - The adapter to register
|
|
51
|
+
* @throws Error if an adapter with the same name is already registered
|
|
52
|
+
*/
|
|
53
|
+
registerAdapter(adapter) {
|
|
54
|
+
if (this.adapters.has(adapter.name)) {
|
|
55
|
+
throw new Error(`DEX adapter "${adapter.name}" is already registered. ` +
|
|
56
|
+
`Each adapter name must be unique.`);
|
|
57
|
+
}
|
|
58
|
+
this.adapters.set(adapter.name, adapter);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get a DEX adapter by name.
|
|
62
|
+
*
|
|
63
|
+
* @param name - Adapter name (e.g. "raydium-amm-v4")
|
|
64
|
+
* @returns The adapter instance
|
|
65
|
+
* @throws Error if no adapter with that name is registered
|
|
66
|
+
*/
|
|
67
|
+
getDexAdapter(name) {
|
|
68
|
+
const adapter = this.adapters.get(name);
|
|
69
|
+
if (!adapter) {
|
|
70
|
+
const available = [...this.adapters.keys()].join(", ") || "(none)";
|
|
71
|
+
throw new Error(`DEX adapter "${name}" not found. Available adapters: ${available}`);
|
|
72
|
+
}
|
|
73
|
+
return adapter;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get a DEX adapter by name, returning undefined if not found.
|
|
77
|
+
*/
|
|
78
|
+
tryGetDexAdapter(name) {
|
|
79
|
+
return this.adapters.get(name);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* List all registered adapters with their info.
|
|
83
|
+
*/
|
|
84
|
+
listDexAdapters() {
|
|
85
|
+
return [...this.adapters.values()].map((a) => ({
|
|
86
|
+
name: a.name,
|
|
87
|
+
protocol: a.protocol,
|
|
88
|
+
capabilities: { ...a.capabilities },
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get all adapters of a specific protocol type.
|
|
93
|
+
*
|
|
94
|
+
* @param protocol - Protocol type (e.g. "clmm", "dlmm", "amm-v4")
|
|
95
|
+
*/
|
|
96
|
+
getAdaptersByProtocol(protocol) {
|
|
97
|
+
return [...this.adapters.values()].filter((a) => a.protocol === protocol);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get all adapters that have a specific capability.
|
|
101
|
+
*
|
|
102
|
+
* @param capability - Capability key (e.g. "canSell", "canSnipe")
|
|
103
|
+
*/
|
|
104
|
+
getAdaptersWithCapability(capability) {
|
|
105
|
+
return [...this.adapters.values()].filter((a) => a.capabilities[capability]);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if an adapter is registered.
|
|
109
|
+
*/
|
|
110
|
+
has(name) {
|
|
111
|
+
return this.adapters.has(name);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Number of registered adapters.
|
|
115
|
+
*/
|
|
116
|
+
get count() {
|
|
117
|
+
return this.adapters.size;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get all adapter names.
|
|
121
|
+
*/
|
|
122
|
+
getNames() {
|
|
123
|
+
return [...this.adapters.keys()];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.DexRegistry = DexRegistry;
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// Global singleton
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
let _registry = null;
|
|
131
|
+
/**
|
|
132
|
+
* Get the global DexRegistry singleton.
|
|
133
|
+
* Creates it on first access.
|
|
134
|
+
*/
|
|
135
|
+
function getRegistry() {
|
|
136
|
+
if (!_registry) {
|
|
137
|
+
_registry = new DexRegistry();
|
|
138
|
+
}
|
|
139
|
+
return _registry;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Convenience: get a DEX adapter by name from the global registry.
|
|
143
|
+
*/
|
|
144
|
+
function getDexAdapter(name) {
|
|
145
|
+
return getRegistry().getDexAdapter(name);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Convenience: list all registered adapters from the global registry.
|
|
149
|
+
*/
|
|
150
|
+
function listDexAdapters() {
|
|
151
|
+
return getRegistry().listDexAdapters();
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Convenience: register an adapter with the global registry.
|
|
155
|
+
*/
|
|
156
|
+
function registerAdapter(adapter) {
|
|
157
|
+
getRegistry().registerAdapter(adapter);
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dex/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jupiter Ultra — IDexAdapter Implementation
|
|
3
|
+
*
|
|
4
|
+
* REST API-based aggregator. Fundamentally different from on-chain adapters:
|
|
5
|
+
* 1. Get order from Jupiter Ultra API (server returns a transaction)
|
|
6
|
+
* 2. Deserialize and sign the transaction locally
|
|
7
|
+
* 3. Submit via Jupiter's execute API (NOT our landing layer)
|
|
8
|
+
* 4. Jupiter handles TX submission with built-in retry
|
|
9
|
+
*
|
|
10
|
+
* This adapter does NOT use landTransaction() — the Jupiter execute endpoint
|
|
11
|
+
* manages TX submission. The adapter wraps the server-generated flow.
|
|
12
|
+
*
|
|
13
|
+
* Source: 100x-algo-bots/trading-modules/jupiter/ultra-swap.ts
|
|
14
|
+
*
|
|
15
|
+
* Capabilities: canBuy, canSell (no snipe — doesn't make sense for an aggregator,
|
|
16
|
+
* no findPool/getPrice — no pool concept)
|
|
17
|
+
* API key from JUPITER_API_KEY env var (optional — works without key at lower rate limits).
|
|
18
|
+
*/
|
|
19
|
+
import { IDexAdapter, DexCapabilities, BuyParams, SellParams, SwapResult } from "./types";
|
|
20
|
+
export declare class JupiterUltraAdapter implements IDexAdapter {
|
|
21
|
+
readonly name = "jupiter-ultra";
|
|
22
|
+
readonly protocol = "ultra";
|
|
23
|
+
readonly capabilities: DexCapabilities;
|
|
24
|
+
buy(params: BuyParams): Promise<SwapResult>;
|
|
25
|
+
sell(params: SellParams): Promise<SwapResult>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=jupiter-ultra.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jupiter-ultra.d.ts","sourceRoot":"","sources":["../../src/dex/jupiter-ultra.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,OAAO,EACL,WAAW,EACX,eAAe,EAEf,SAAS,EACT,UAAU,EACV,UAAU,EAKX,MAAM,SAAS,CAAC;AA8XjB,qBAAa,mBAAoB,YAAW,WAAW;IACrD,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,YAAY,EAAE,eAAe,CAInC;IAIG,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAsC3C,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CA0EpD"}
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Jupiter Ultra — IDexAdapter Implementation
|
|
4
|
+
*
|
|
5
|
+
* REST API-based aggregator. Fundamentally different from on-chain adapters:
|
|
6
|
+
* 1. Get order from Jupiter Ultra API (server returns a transaction)
|
|
7
|
+
* 2. Deserialize and sign the transaction locally
|
|
8
|
+
* 3. Submit via Jupiter's execute API (NOT our landing layer)
|
|
9
|
+
* 4. Jupiter handles TX submission with built-in retry
|
|
10
|
+
*
|
|
11
|
+
* This adapter does NOT use landTransaction() — the Jupiter execute endpoint
|
|
12
|
+
* manages TX submission. The adapter wraps the server-generated flow.
|
|
13
|
+
*
|
|
14
|
+
* Source: 100x-algo-bots/trading-modules/jupiter/ultra-swap.ts
|
|
15
|
+
*
|
|
16
|
+
* Capabilities: canBuy, canSell (no snipe — doesn't make sense for an aggregator,
|
|
17
|
+
* no findPool/getPrice — no pool concept)
|
|
18
|
+
* API key from JUPITER_API_KEY env var (optional — works without key at lower rate limits).
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.JupiterUltraAdapter = void 0;
|
|
22
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
23
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
24
|
+
const config_1 = require("../helpers/config");
|
|
25
|
+
const types_1 = require("./types");
|
|
26
|
+
const index_1 = require("./index");
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Constants
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
const SOL_MINT = "So11111111111111111111111111111111111111112";
|
|
31
|
+
const JUPITER_ULTRA_API_BASE_URL = "https://api.jup.ag/ultra/v1";
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Helpers
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
let _apiKeyHintShown = false;
|
|
36
|
+
function getApiKey() {
|
|
37
|
+
const key = process.env.JUPITER_API_KEY || undefined;
|
|
38
|
+
if (!key && !_apiKeyHintShown) {
|
|
39
|
+
_apiKeyHintShown = true;
|
|
40
|
+
console.log("Tip: Set JUPITER_API_KEY for higher rate limits. Get one at https://portal.jup.ag");
|
|
41
|
+
}
|
|
42
|
+
return key;
|
|
43
|
+
}
|
|
44
|
+
function apiHeaders() {
|
|
45
|
+
const headers = {};
|
|
46
|
+
const key = getApiKey();
|
|
47
|
+
if (key) {
|
|
48
|
+
headers["x-api-key"] = key;
|
|
49
|
+
}
|
|
50
|
+
return headers;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get token decimals for a mint (supports Token-2022).
|
|
54
|
+
*/
|
|
55
|
+
async function getTokenDecimals(mint) {
|
|
56
|
+
const connection = (0, config_1.getConnection)();
|
|
57
|
+
try {
|
|
58
|
+
const mintInfo = await connection.getAccountInfo(mint);
|
|
59
|
+
if (!mintInfo) {
|
|
60
|
+
throw new Error(`Mint account not found: ${mint.toBase58()}`);
|
|
61
|
+
}
|
|
62
|
+
const tokenProgram = mintInfo.owner.equals(spl_token_1.TOKEN_2022_PROGRAM_ID)
|
|
63
|
+
? spl_token_1.TOKEN_2022_PROGRAM_ID
|
|
64
|
+
: spl_token_1.TOKEN_PROGRAM_ID;
|
|
65
|
+
const mintData = await (0, spl_token_1.getMint)(connection, mint, undefined, tokenProgram);
|
|
66
|
+
return mintData.decimals;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Default to 9 decimals if we can't fetch (common for most tokens)
|
|
70
|
+
return 9;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get order from Jupiter Ultra API.
|
|
75
|
+
*/
|
|
76
|
+
async function getUltraOrder(inputMint, outputMint, amount, taker, slippageBps) {
|
|
77
|
+
const url = new URL(`${JUPITER_ULTRA_API_BASE_URL}/order`);
|
|
78
|
+
url.searchParams.append("inputMint", inputMint);
|
|
79
|
+
url.searchParams.append("outputMint", outputMint);
|
|
80
|
+
url.searchParams.append("amount", amount);
|
|
81
|
+
url.searchParams.append("taker", taker);
|
|
82
|
+
if (slippageBps !== undefined) {
|
|
83
|
+
url.searchParams.append("slippageBps", slippageBps.toString());
|
|
84
|
+
}
|
|
85
|
+
const response = await fetch(url.toString(), {
|
|
86
|
+
headers: apiHeaders(),
|
|
87
|
+
});
|
|
88
|
+
if (!response.ok) {
|
|
89
|
+
const errorText = await response.text();
|
|
90
|
+
let errorData;
|
|
91
|
+
try {
|
|
92
|
+
errorData = JSON.parse(errorText);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
errorData = { error: errorText };
|
|
96
|
+
}
|
|
97
|
+
throw new Error(`Jupiter Ultra API error (${response.status}): ${JSON.stringify(errorData)}`);
|
|
98
|
+
}
|
|
99
|
+
const orderData = await response.json();
|
|
100
|
+
if (orderData.error) {
|
|
101
|
+
throw new Error(`Jupiter Ultra order error: ${orderData.error}`);
|
|
102
|
+
}
|
|
103
|
+
if (orderData.errorCode) {
|
|
104
|
+
throw new Error(`Jupiter Ultra order error (code ${orderData.errorCode}): ${orderData.errorMessage || "Unknown error"}`);
|
|
105
|
+
}
|
|
106
|
+
if (!orderData.transaction) {
|
|
107
|
+
throw new Error("Jupiter Ultra order response missing transaction field");
|
|
108
|
+
}
|
|
109
|
+
return orderData;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Check if an error code is retryable.
|
|
113
|
+
* Retryable: network issues, timeouts, failed to land, unknown errors.
|
|
114
|
+
* Non-retryable: authentication, invalid transaction, slippage exceeded, etc.
|
|
115
|
+
*/
|
|
116
|
+
function isRetryableError(executeResponse) {
|
|
117
|
+
if (!executeResponse.code) {
|
|
118
|
+
return executeResponse.status !== "Success";
|
|
119
|
+
}
|
|
120
|
+
if (executeResponse.code === 0)
|
|
121
|
+
return false;
|
|
122
|
+
// Retryable error codes (network/landing issues)
|
|
123
|
+
const retryableCodes = [
|
|
124
|
+
-1000, // Failed to land
|
|
125
|
+
-1001, // Unknown error
|
|
126
|
+
-1005, // Expired (might succeed on retry with fresh order)
|
|
127
|
+
-1006, // Timed out
|
|
128
|
+
-2000, // RFQ: Failed to land
|
|
129
|
+
-2001, // RFQ: Unknown error
|
|
130
|
+
];
|
|
131
|
+
// Non-retryable error codes
|
|
132
|
+
const nonRetryableCodes = [
|
|
133
|
+
-1, // Missing cached order
|
|
134
|
+
-2, // Invalid signed transaction
|
|
135
|
+
-3, // Invalid message bytes
|
|
136
|
+
-4, // Missing request id
|
|
137
|
+
-5, // Missing signed transaction
|
|
138
|
+
-1002, // Invalid transaction
|
|
139
|
+
-1003, // Transaction not fully signed
|
|
140
|
+
-1004, // Invalid block height
|
|
141
|
+
-1007, // Gasless unsupported wallet
|
|
142
|
+
-2002, // RFQ: Invalid payload
|
|
143
|
+
-2003, // RFQ: Quote expired
|
|
144
|
+
-2004, // RFQ: Swap rejected
|
|
145
|
+
-2005, // RFQ: Internal error
|
|
146
|
+
];
|
|
147
|
+
if (retryableCodes.includes(executeResponse.code))
|
|
148
|
+
return true;
|
|
149
|
+
if (nonRetryableCodes.includes(executeResponse.code))
|
|
150
|
+
return false;
|
|
151
|
+
// Positive codes are program errors (slippage, etc.) — don't retry
|
|
152
|
+
if (executeResponse.code > 0)
|
|
153
|
+
return false;
|
|
154
|
+
// Other negative codes — default to retryable
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Execute order via Jupiter Ultra API with retry logic.
|
|
159
|
+
*/
|
|
160
|
+
async function executeUltraOrderWithRetry(requestId, signedTransaction, maxRetries = 5, retryDelayMs = 5000) {
|
|
161
|
+
let lastResponse = null;
|
|
162
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
163
|
+
try {
|
|
164
|
+
const response = await fetch(`${JUPITER_ULTRA_API_BASE_URL}/execute`, {
|
|
165
|
+
method: "POST",
|
|
166
|
+
headers: {
|
|
167
|
+
"Content-Type": "application/json",
|
|
168
|
+
...apiHeaders(),
|
|
169
|
+
},
|
|
170
|
+
body: JSON.stringify({ requestId, signedTransaction }),
|
|
171
|
+
});
|
|
172
|
+
if (!response.ok) {
|
|
173
|
+
const errorText = await response.text();
|
|
174
|
+
let errorData;
|
|
175
|
+
try {
|
|
176
|
+
errorData = JSON.parse(errorText);
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
errorData = { error: errorText };
|
|
180
|
+
}
|
|
181
|
+
throw new Error(`Jupiter Ultra execute error (${response.status}): ${JSON.stringify(errorData)}`);
|
|
182
|
+
}
|
|
183
|
+
const executeResponse = await response.json();
|
|
184
|
+
lastResponse = executeResponse;
|
|
185
|
+
// Check if successful
|
|
186
|
+
if (executeResponse.status === "Success" && executeResponse.signature) {
|
|
187
|
+
return executeResponse;
|
|
188
|
+
}
|
|
189
|
+
if (executeResponse.code === 0 && executeResponse.signature) {
|
|
190
|
+
return executeResponse;
|
|
191
|
+
}
|
|
192
|
+
// Non-retryable error — throw immediately
|
|
193
|
+
if (!isRetryableError(executeResponse)) {
|
|
194
|
+
throw new Error(`Jupiter Ultra execute failed (code ${executeResponse.code}): ${executeResponse.error || "Unknown error"}`);
|
|
195
|
+
}
|
|
196
|
+
// Retryable error — wait and try again
|
|
197
|
+
if (attempt < maxRetries) {
|
|
198
|
+
await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
throw new Error(`Jupiter Ultra execute failed after ${maxRetries} attempts (code ${executeResponse.code}): ${executeResponse.error || "Unknown error"}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
// Network errors are retryable
|
|
206
|
+
if (error instanceof Error &&
|
|
207
|
+
(error.message.includes("fetch") ||
|
|
208
|
+
error.message.includes("network") ||
|
|
209
|
+
error.message.includes("timeout") ||
|
|
210
|
+
error.message.includes("ECONNREFUSED") ||
|
|
211
|
+
error.message.includes("ETIMEDOUT"))) {
|
|
212
|
+
if (attempt < maxRetries) {
|
|
213
|
+
await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Should not reach here
|
|
221
|
+
if (lastResponse) {
|
|
222
|
+
throw new Error(`Jupiter Ultra execute failed after ${maxRetries} attempts: ${JSON.stringify(lastResponse)}`);
|
|
223
|
+
}
|
|
224
|
+
throw new Error(`Jupiter Ultra execute failed after ${maxRetries} attempts`);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Sign a server-generated transaction (handles both legacy and versioned).
|
|
228
|
+
* Returns the base64-encoded signed transaction.
|
|
229
|
+
*/
|
|
230
|
+
function signTransaction(transactionBase64) {
|
|
231
|
+
const wallet = (0, config_1.getWallet)();
|
|
232
|
+
const transactionBytes = Buffer.from(transactionBase64, "base64");
|
|
233
|
+
try {
|
|
234
|
+
// Try as VersionedTransaction first (most common for Jupiter)
|
|
235
|
+
const versionedTx = web3_js_1.VersionedTransaction.deserialize(transactionBytes);
|
|
236
|
+
versionedTx.sign([wallet]);
|
|
237
|
+
return Buffer.from(versionedTx.serialize()).toString("base64");
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// Fallback to legacy Transaction
|
|
241
|
+
const legacyTx = web3_js_1.Transaction.from(transactionBytes);
|
|
242
|
+
legacyTx.sign(wallet);
|
|
243
|
+
return Buffer.from(legacyTx.serialize()).toString("base64");
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Full order-sign-execute flow. Used by both buy() and sell().
|
|
248
|
+
*/
|
|
249
|
+
async function executeOrder(inputMint, outputMint, amount, slippageBps) {
|
|
250
|
+
const wallet = (0, config_1.getWallet)();
|
|
251
|
+
// Step 1: Get order
|
|
252
|
+
const orderResponse = await getUltraOrder(inputMint, outputMint, amount, wallet.publicKey.toBase58(), slippageBps);
|
|
253
|
+
if (!orderResponse.transaction) {
|
|
254
|
+
throw new Error("Order response missing transaction field");
|
|
255
|
+
}
|
|
256
|
+
if (!orderResponse.requestId) {
|
|
257
|
+
throw new Error("Order response missing requestId");
|
|
258
|
+
}
|
|
259
|
+
// Step 2: Sign
|
|
260
|
+
const signedTxBase64 = signTransaction(orderResponse.transaction);
|
|
261
|
+
// Step 3: Execute with retry
|
|
262
|
+
const executeResponse = await executeUltraOrderWithRetry(orderResponse.requestId, signedTxBase64);
|
|
263
|
+
// Validate response
|
|
264
|
+
const signature = executeResponse.signature ??
|
|
265
|
+
(() => {
|
|
266
|
+
throw new Error(`Jupiter Ultra execute returned unexpected response: ${JSON.stringify(executeResponse)}`);
|
|
267
|
+
})();
|
|
268
|
+
return { signature, orderResponse, executeResponse };
|
|
269
|
+
}
|
|
270
|
+
// ---------------------------------------------------------------------------
|
|
271
|
+
// Adapter
|
|
272
|
+
// ---------------------------------------------------------------------------
|
|
273
|
+
class JupiterUltraAdapter {
|
|
274
|
+
name = "jupiter-ultra";
|
|
275
|
+
protocol = "ultra";
|
|
276
|
+
capabilities = (0, types_1.defaultCapabilities)({
|
|
277
|
+
canBuy: true,
|
|
278
|
+
canSell: true,
|
|
279
|
+
isAggregator: true,
|
|
280
|
+
});
|
|
281
|
+
// ----- Core: buy -----
|
|
282
|
+
async buy(params) {
|
|
283
|
+
const tokenMint = (0, types_1.requireTokenMint)(params, this.name);
|
|
284
|
+
const { amountSol, opts } = params;
|
|
285
|
+
const slippageBps = opts?.slippageBps ?? types_1.DEFAULT_SLIPPAGE_BPS;
|
|
286
|
+
// Convert SOL to lamports
|
|
287
|
+
const amount = Math.floor(amountSol * 1_000_000_000).toString();
|
|
288
|
+
const { signature, orderResponse, executeResponse } = await executeOrder(SOL_MINT, tokenMint, amount, slippageBps);
|
|
289
|
+
// Parse output amount — convert from raw to human-readable
|
|
290
|
+
let amountOut;
|
|
291
|
+
if (executeResponse.outputAmountResult) {
|
|
292
|
+
const outDecimals = await getTokenDecimals(new web3_js_1.PublicKey(tokenMint));
|
|
293
|
+
amountOut = Number(executeResponse.outputAmountResult) / Math.pow(10, outDecimals);
|
|
294
|
+
}
|
|
295
|
+
return {
|
|
296
|
+
txSignature: signature,
|
|
297
|
+
confirmed: true,
|
|
298
|
+
amountIn: amountSol,
|
|
299
|
+
amountInToken: SOL_MINT,
|
|
300
|
+
amountOut,
|
|
301
|
+
amountOutToken: tokenMint,
|
|
302
|
+
priceImpactPct: orderResponse.priceImpactPct
|
|
303
|
+
? parseFloat(orderResponse.priceImpactPct)
|
|
304
|
+
: undefined,
|
|
305
|
+
dex: this.name,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
// ----- Core: sell -----
|
|
309
|
+
async sell(params) {
|
|
310
|
+
const tokenMint = (0, types_1.requireTokenMint)(params, this.name);
|
|
311
|
+
const { percentage, quoteMint: quoteMintParam, opts } = params;
|
|
312
|
+
const connection = (0, config_1.getConnection)();
|
|
313
|
+
const wallet = (0, config_1.getWallet)();
|
|
314
|
+
const slippageBps = opts?.slippageBps ?? types_1.DEFAULT_SLIPPAGE_BPS;
|
|
315
|
+
const outputMint = quoteMintParam ?? SOL_MINT;
|
|
316
|
+
// Validate percentage
|
|
317
|
+
if (percentage < 0 || percentage > 100) {
|
|
318
|
+
throw new Error("Sell percentage must be between 0 and 100");
|
|
319
|
+
}
|
|
320
|
+
// Get token decimals
|
|
321
|
+
const tokenDecimals = await getTokenDecimals(new web3_js_1.PublicKey(tokenMint));
|
|
322
|
+
// Get token balance
|
|
323
|
+
const mintPk = new web3_js_1.PublicKey(tokenMint);
|
|
324
|
+
const mintInfo = await connection.getAccountInfo(mintPk);
|
|
325
|
+
const tokenProgram = mintInfo && mintInfo.owner.equals(spl_token_1.TOKEN_2022_PROGRAM_ID)
|
|
326
|
+
? spl_token_1.TOKEN_2022_PROGRAM_ID
|
|
327
|
+
: spl_token_1.TOKEN_PROGRAM_ID;
|
|
328
|
+
const tokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(mintPk, wallet.publicKey, false, tokenProgram);
|
|
329
|
+
let balance = 0;
|
|
330
|
+
try {
|
|
331
|
+
const balanceResponse = await connection.getTokenAccountBalance(tokenAccount);
|
|
332
|
+
balance = balanceResponse.value.uiAmount || 0;
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
balance = 0;
|
|
336
|
+
}
|
|
337
|
+
if (balance === 0) {
|
|
338
|
+
throw new Error("You have no balance of this token to sell");
|
|
339
|
+
}
|
|
340
|
+
// Calculate amount
|
|
341
|
+
const tokenAmount = (balance * percentage) / 100;
|
|
342
|
+
const amount = Math.floor(tokenAmount * Math.pow(10, tokenDecimals)).toString();
|
|
343
|
+
const { signature, orderResponse, executeResponse } = await executeOrder(tokenMint, outputMint, amount, slippageBps);
|
|
344
|
+
// Convert raw output to human-readable (SOL = 9 decimals)
|
|
345
|
+
let amountOut;
|
|
346
|
+
if (executeResponse.outputAmountResult) {
|
|
347
|
+
const outDecimals = outputMint === SOL_MINT ? 9 : await getTokenDecimals(new web3_js_1.PublicKey(outputMint));
|
|
348
|
+
amountOut = Number(executeResponse.outputAmountResult) / Math.pow(10, outDecimals);
|
|
349
|
+
}
|
|
350
|
+
return {
|
|
351
|
+
txSignature: signature,
|
|
352
|
+
confirmed: true,
|
|
353
|
+
amountIn: tokenAmount,
|
|
354
|
+
amountInToken: tokenMint,
|
|
355
|
+
amountOut,
|
|
356
|
+
amountOutToken: outputMint,
|
|
357
|
+
priceImpactPct: orderResponse.priceImpactPct
|
|
358
|
+
? parseFloat(orderResponse.priceImpactPct)
|
|
359
|
+
: undefined,
|
|
360
|
+
dex: this.name,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
exports.JupiterUltraAdapter = JupiterUltraAdapter;
|
|
365
|
+
// ---------------------------------------------------------------------------
|
|
366
|
+
// Auto-register
|
|
367
|
+
// ---------------------------------------------------------------------------
|
|
368
|
+
(0, index_1.registerAdapter)(new JupiterUltraAdapter());
|
|
369
|
+
//# sourceMappingURL=jupiter-ultra.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jupiter-ultra.js","sourceRoot":"","sources":["../../src/dex/jupiter-ultra.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meteora DAMM v1 (Dynamic AMM) — IDexAdapter Implementation
|
|
3
|
+
*
|
|
4
|
+
* Wraps the @meteora-ag/dynamic-amm-sdk (AmmImpl) for buy/snipe/findPool/getPrice.
|
|
5
|
+
* No sell in source module — sell throws UnsupportedOperationError.
|
|
6
|
+
*
|
|
7
|
+
* Source: 100x-algo-bots/trading-modules/meteora-damm-v1/
|
|
8
|
+
*
|
|
9
|
+
* SDK pattern:
|
|
10
|
+
* const amm = await AmmImpl.create(connection, poolAddress);
|
|
11
|
+
* const quote = amm.getSwapQuote(inputMint, inputAmount, slippagePct);
|
|
12
|
+
* const swapTx = await amm.swap(user, inputMint, inputAmount, minOut);
|
|
13
|
+
*/
|
|
14
|
+
import { IDexAdapter, DexCapabilities, BuyParams, SellParams, SnipeParams, SwapResult, PoolInfo, PriceInfo, BuildSwapIxsResult } from "./types";
|
|
15
|
+
export declare class MeteoraDammV1Adapter implements IDexAdapter {
|
|
16
|
+
readonly name = "meteora-damm-v1";
|
|
17
|
+
readonly protocol = "damm-v1";
|
|
18
|
+
readonly capabilities: DexCapabilities;
|
|
19
|
+
buy(params: BuyParams): Promise<SwapResult>;
|
|
20
|
+
sell(params: SellParams): Promise<SwapResult>;
|
|
21
|
+
snipe(params: SnipeParams): Promise<SwapResult>;
|
|
22
|
+
buildSwapIxs(params: BuyParams | SellParams): Promise<BuildSwapIxsResult>;
|
|
23
|
+
findPool(baseMint: string, quoteMint?: string): Promise<PoolInfo | null>;
|
|
24
|
+
getPrice(poolAddress: string): Promise<PriceInfo>;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve pool address — if not provided, discover via findPool().
|
|
27
|
+
* Throws PoolNotFoundError if no pool found.
|
|
28
|
+
*/
|
|
29
|
+
private resolvePool;
|
|
30
|
+
/**
|
|
31
|
+
* Derive customizable pool address using PDA seeds.
|
|
32
|
+
* Seeds: ["cpool", max(mintA, mintB), min(mintA, mintB)]
|
|
33
|
+
*/
|
|
34
|
+
private deriveCustomizablePoolAddress;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=meteora-damm-v1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meteora-damm-v1.d.ts","sourceRoot":"","sources":["../../src/dex/meteora-damm-v1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAgBH,OAAO,EACL,WAAW,EACX,eAAe,EAEf,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EACR,SAAS,EACT,kBAAkB,EAUnB,MAAM,SAAS,CAAC;AAuCjB,qBAAa,oBAAqB,YAAW,WAAW;IACtD,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,YAAY,EAAE,eAAe,CAMnC;IAIG,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAuD3C,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAqF7C,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAkD/C,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmCzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA6BxE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAkCvD;;;OAGG;YACW,WAAW;IAQzB;;;OAGG;IACH,OAAO,CAAC,6BAA6B;CAYtC"}
|