UNPKG

@kamino-finance/klend-sdk

Version:

Typescript SDK for interacting with the Kamino Lending (klend) protocol

151 lines 6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ManagerEnv = void 0; exports.initEnv = initEnv; const kit_1 = require("@solana/kit"); const ManagerConnectionPool_1 = require("./ManagerConnectionPool"); const programId_1 = require("../../@codegen/klend/programId"); const programId_2 = require("../../@codegen/kvault/programId"); const programId_3 = require("@kamino-finance/farms-sdk/dist/@codegen/farms/programId"); const constants_1 = require("../../utils/constants"); const keypair_1 = require("./keypair"); const farm_utils_1 = require("../../classes/farm_utils"); const consts_1 = require("../utils/consts"); class ManagerEnv { c; cluster; signerConfig; klendProgramId; kvaultProgramId; farmsProgramId; farmsGlobalConfig; constructor(c, cluster, signerConfig, klendProgramId, kvaultProgramId, farmsProgramId, farmsGlobalConfig) { this.c = c; this.cluster = cluster; this.signerConfig = signerConfig; this.klendProgramId = klendProgramId; this.kvaultProgramId = kvaultProgramId; this.farmsProgramId = farmsProgramId; this.farmsGlobalConfig = farmsGlobalConfig; } async getSigner({ market, useLendingMarketOwnerCached, vaultState, useVaultPendingAdmin, } = {}) { function matchesAdmin(config, a) { return config.admin !== undefined && config.admin.address === a; } if (vaultState) { if (useVaultPendingAdmin) { return matchesAdmin(this.signerConfig, vaultState.pendingAdmin) ? this.signerConfig.admin : (0, keypair_1.noopSigner)(vaultState.pendingAdmin); } else { return matchesAdmin(this.signerConfig, vaultState.vaultAdminAuthority) ? this.signerConfig.admin : (0, keypair_1.noopSigner)(vaultState.vaultAdminAuthority); } } else if (market) { if (useLendingMarketOwnerCached) { return matchesAdmin(this.signerConfig, market.state.lendingMarketOwnerCached) ? this.signerConfig.admin : (0, keypair_1.noopSigner)(market.state.lendingMarketOwnerCached); } else { return matchesAdmin(this.signerConfig, market.state.lendingMarketOwner) ? this.signerConfig.admin : (0, keypair_1.noopSigner)(market.state.lendingMarketOwner); } } else if (this.signerConfig.admin) { return this.signerConfig.admin; } else if (this.signerConfig.multisigSigner) { return this.signerConfig.multisigSigner; } throw new Error(`No signer in config ${JSON.stringify(this.signerConfig)}`); } } exports.ManagerEnv = ManagerEnv; function defaultProgramConfig(programConfig) { const stagingOpt = programConfig.staging ?? false; const config = { staging: stagingOpt, klendProgramId: programConfig?.klendProgramId ?? (stagingOpt ? constants_1.STAGING_PROGRAM_ID : programId_1.PROGRAM_ID), kvaultProgramId: programConfig.kvaultProgramId ?? (stagingOpt ? consts_1.KVAULT_STAGING_PROGRAM_ID : programId_2.PROGRAM_ID), farmsProgramId: programConfig?.farmsProgramId ?? programId_3.PROGRAM_ID, farmsGlobalConfig: programConfig?.farmsGlobalConfig ?? farm_utils_1.FARMS_GLOBAL_CONFIG_MAINNET, }; return config; } async function initEnv(staging = false, multisig = undefined, adminKeypairPath = process.env.ADMIN, rpcUrl = process.env.RPC) { const config = defaultProgramConfig({ staging, klendProgramId: staging ? envAddress('KLEND_PROGRAM_ID_STAGING') : envAddress('KLEND_PROGRAM_ID_MAINNET'), kvaultProgramId: staging ? envAddress('KVAULT_PROGRAM_ID_STAGING') : envAddress('KVAULT_PROGRAM_ID_MAINNET'), }); let resolvedUrl; if (rpcUrl) { resolvedUrl = rpcUrl; } else { throw 'Must specify an RPC URL'; } let resolvedAdmin = undefined; if (adminKeypairPath) { resolvedAdmin = await (0, keypair_1.parseKeypairFile)(adminKeypairPath); } const rpcChain = parseRpcChain(rpcUrl); const c = new ManagerConnectionPool_1.ManagerConnectionPool(rpcChain); const multisigSigner = multisig ? (0, keypair_1.noopSigner)(multisig) : undefined; const env = new ManagerEnv(c, rpcChain.name, { admin: resolvedAdmin, multisigSigner, }, config.klendProgramId, config.kvaultProgramId, config.farmsProgramId, config.farmsGlobalConfig); console.log('\nSettings ⚙️'); console.log(`Multisig: ${multisig}`); console.log(`Multisig signer: ${multisigSigner?.address}`); console.log(`Admin: ${resolvedAdmin?.address}`); console.log(`Rpc: ${resolvedUrl}`); console.log(`klendProgramId: ${env.klendProgramId}`); console.log(`kvaultProgramId: ${env.kvaultProgramId}`); return env; } function parseRpcChain(rpcUrl) { let chain; if (rpcUrl === 'localnet') { chain = { name: 'localnet', endpoint: { url: 'http://127.0.0.1:8899', name: 'localnet', }, wsEndpoint: { name: 'localnet', url: 'ws://127.0.0.1:8900', }, multicastEndpoints: [], }; } else { chain = { name: 'mainnet-beta', endpoint: { url: rpcUrl, name: 'mainnet-beta', }, wsEndpoint: { url: rpcUrl.replace('https:', 'wss:') + '/whirligig', name: 'mainnet-beta-ws', }, multicastEndpoints: [], }; } return chain; } function envAddress(env) { if (process.env[env]) { return (0, kit_1.address)(process.env[env]); } return undefined; } //# sourceMappingURL=ManagerEnv.js.map