@agentix/plugin-solana-solayer
Version:
140 lines (134 loc) • 4.05 kB
JavaScript
;
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;