UNPKG

@agentix/plugin-solana-solayer

Version:
140 lines (134 loc) 4.05 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var index_exports = {}; __export(index_exports, { default: () => index_default }); module.exports = __toCommonJS(index_exports); var import_agentix2 = require("agentix"); // src/actions/stakeWithSolayer.ts var import_zod = require("zod"); // src/tools/stake_with_solayer.ts var import_web3 = require("@solana/web3.js"); var import_agentix = require("agentix"); async function stakeWithSolayer(agent, amount) { try { const response = await fetch( `https://app.solayer.org/api/action/restake/ssol?amount=${amount}`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ account: agent.wallet.getAddress() }) } ); if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.message || "Staking request failed"); } const data = await response.json(); const txn = import_web3.VersionedTransaction.deserialize( Buffer.from(data.transaction, "base64") ); const { blockhash } = await agent.wallet.getConnection().getLatestBlockhash(); txn.message.recentBlockhash = blockhash; return await (0, import_agentix.signOrSendTX)(agent, txn); } catch (error) { console.error(error); throw new Error(`Solayer sSOL staking failed: ${error.message}`); } } // src/actions/stakeWithSolayer.ts var stakeWithSolayerAction = { name: "STAKE_WITH_SOLAYER", similes: [ "stake sol", "solayer sol", "ssol", "stake with solayer", "solayer restaking", "solayer staking", "stake with sol", "liquid staking solayer", "get solayer sol", "solayer sol restaking", "solayer sol staking" ], description: "Stake native SOL with Solayer's restaking protocol to receive Solayer SOL (sSOL)", examples: [ [ { input: { amount: 1 }, output: { status: "success", signature: "3FgHn9...", message: "Successfully staked 1.0 SOL for Solayer SOL (sSOL)" }, explanation: "Stake 1.0 SOL to receive Solayer SOL (sSOL)" } ] ], schema: import_zod.z.object({ amount: import_zod.z.number().positive().describe("Amount of SOL to stake") }), handler: async (agent, input) => { try { const amount = input.amount; const res = await stakeWithSolayer(agent, amount); return { status: "success", transaction: res, message: `Successfully staked ${amount} SOL for Solayer SOL (sSOL)` }; } catch (error) { return { status: "error", message: `Solayer staking failed: ${error.message}` }; } } }; var stakeWithSolayer_default = stakeWithSolayerAction; // src/index.ts var SolayerPlugin = class extends import_agentix2.PluginBase { constructor() { const methods = { stakeWithSolayer }; const actions = [ stakeWithSolayer_default ]; const supportedChains = [ { type: "solana" } ]; super("solayer", methods, actions, supportedChains); } supportsWallet(wallet) { return wallet instanceof import_agentix2.SolanaWalletBase; } }; var index_default = SolayerPlugin;