@cryptoscan/orca-sdk
Version:
The fastest and easiest way to trade on Orca.
108 lines (107 loc) • 3.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrcaApi = void 0;
const swap_sdk_1 = require("@cryptoscan/swap-sdk");
const scanner_sdk_1 = require("@cryptoscan/scanner-sdk");
const web3_js_1 = require("@solana/web3.js");
const solana_wallet_sdk_1 = require("@cryptoscan/solana-wallet-sdk");
class OrcaApi {
params = {
buySlippage: 1,
sellSlippage: 10,
bumpSlippage: 10,
buyFee: 0.00005,
sellFee: 0.00005,
transferFee: 0.00005,
connection: new web3_js_1.Connection('https://api.mainnet-beta.solana.com/'),
};
constructor(params) {
if (params) {
this.params = {
...this.params,
...params,
};
}
}
async buy(_params) {
const params = {
..._params,
type: 'swap',
network: 'solana',
amount: _params.sol,
wallet: _params.payerWallet || _params.wallet,
from: 'So11111111111111111111111111111111111111112',
to: _params.coinAddress,
fee: _params.fee || this.params.buyFee,
slippage: _params.slippage || this.params.buySlippage,
connection: this.params.connection,
};
return (0, swap_sdk_1.swap)(params);
}
async sell(_params) {
let sol = _params.sol;
let amount;
if (!_params.sol) {
const balance = await (0, solana_wallet_sdk_1.getBalance)(_params.wallet.publicKey.toString(), _params.coinAddress);
amount = balance;
}
if (!amount) {
amount = await (0, scanner_sdk_1.getRate)({
network: 'solana',
from: 'So11111111111111111111111111111111111111112',
to: _params.coinAddress,
amount: sol,
}).then((r) => r?.amount);
}
if (!amount) {
throw new Error('Failed to get price');
}
const params = {
..._params,
type: 'swap',
network: 'solana',
amount,
wallet: _params.payerWallet || _params.wallet,
from: _params.coinAddress,
to: 'So11111111111111111111111111111111111111112',
fee: _params.fee || this.params.sellFee,
slippage: _params.slippage || this.params.sellSlippage,
connection: this.params.connection,
};
return (0, swap_sdk_1.swap)(params);
}
async transfer(_params) {
let amount = _params.sol;
if (!_params.sol) {
amount = await (0, solana_wallet_sdk_1.getBalance)(_params.walletFrom.publicKey.toString());
}
if (!!_params.coinAddress || _params.coinAddress?.toLowerCase() === 'so11111111111111111111111111111111111111112') {
amount = await (0, scanner_sdk_1.getRate)({
network: 'solana',
from: 'So11111111111111111111111111111111111111112',
to: _params.coinAddress,
amount,
}).then((r) => r?.amount);
if (!amount) {
throw new Error('Failed to get price');
}
}
const params = {
..._params,
type: 'transfer',
network: 'solana',
wallet: _params.payerWallet || _params.walletFrom,
coinAddress: _params.coinAddress || 'So11111111111111111111111111111111111111112',
from: _params.walletFrom.publicKey.toString(),
to: _params.walletTo.publicKey.toString(),
amount: amount,
fee: _params.fee || this.params.transferFee,
connection: this.params.connection,
};
return (0, swap_sdk_1.swap)(params);
}
async listenTransactions(address, onTransaction) {
throw new Error('is not implemented');
}
}
exports.OrcaApi = OrcaApi;