diff --git a/docs/assets/search.js b/docs/assets/search.js index e9af7ad..e086ffb 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/docs/classes/SolanaAgentKit.html b/docs/classes/SolanaAgentKit.html index 2602212..5440490 100644 --- a/docs/classes/SolanaAgentKit.html +++ b/docs/classes/SolanaAgentKit.html @@ -1,7 +1,7 @@ SolanaAgentKit | solana-agent-kit

Class SolanaAgentKit

Main class for interacting with Solana blockchain Provides a unified interface for token operations, NFT management, trading and more

SolanaAgentKit

-

Constructors

Constructors

Properties

config connection wallet @@ -77,14 +77,14 @@ Please use the new constructor with Config object instead:

const agent = new SolanaAgentKit(privateKey, rpcUrl, {
OPENAI_API_KEY: 'your-key'
});
-
  • Parameters

    • private_key: string
    • rpc_url: string
    • config: Config

    Returns SolanaAgentKit

  • Properties

    config: Config

    Configuration object

    -
    connection: Connection

    Solana RPC connection

    -
    wallet: Keypair

    Wallet keypair for signing transactions

    -
    wallet_address: PublicKey

    Public key of the wallet

    -

    Methods

    • Parameters

      • OptionaltransactionIndex: number | bigint

      Returns Promise<string>

    • Parameters

      • marketId: PublicKey

      Returns Promise<string>

    • Returns Promise<{ signature: string; size: number }>

    • Parameters

      • args: Omit<{ agent: SolanaAgentKit; price: number; tradeMint: PublicKey }, "agent">

      Returns Promise<string>

    • Parameters

      • args: Omit<{ agent: SolanaAgentKit; price: number; tradeMint: PublicKey }, "agent">

      Returns Promise<string>

    • Parameters

      • optionsWithBase58: StoreInitOptions
      • collectionOpts: CreateCollectionOptions

      Returns Promise<string>

    • Parameters

      • optionsWithBase58: StoreInitOptions
      • collectionAccount: string
      • createItemOptions: CreateSingleOptions
      • isMainnet: boolean

      Returns Promise<string>

    • Parameters

      • title: string
      • content: string
      • requirements: string
      • tags: string[]
      • tokenMintAddress: string
      • tokenAmount: number
      • Optionalpayer: string

      Returns Promise<GibworkCreateTaskReponse>

    • Parameters

      • OptionaltransactionIndex: number | bigint

      Returns Promise<string>

    • Parameters

      • creator: PublicKey

      Returns Promise<string>

    • Parameters

      • amount: number
      • OptionalsplmintAddress: PublicKey

      Returns Promise<{ signature: string; url: string }>

    • Parameters

      • name: string
      • uri: string
      • symbol: string
      • decimals: number = DEFAULT_OPTIONS.TOKEN_DECIMALS
      • OptionalinitialSupply: number

      Returns Promise<{ mint: PublicKey }>

    • Parameters

      • amount: number
      • vaultIndex: number = 0
      • Optionalmint: PublicKey

      Returns Promise<string>

    • Parameters

      • OptionaltransactionIndex: number | bigint

      Returns Promise<string>

    • Parameters

      • mint: string

      Returns Promise<string>

    • Closes an existing trading position on Flash.Trade

      +
  • Parameters

    • private_key: string
    • rpc_url: string
    • config: Config

    Returns SolanaAgentKit

  • Properties

    config: Config

    Configuration object

    +
    connection: Connection

    Solana RPC connection

    +
    wallet: Keypair

    Wallet keypair for signing transactions

    +
    wallet_address: PublicKey

    Public key of the wallet

    +

    Methods

    • Parameters

      • OptionaltransactionIndex: number | bigint

      Returns Promise<string>

    • Parameters

      • marketId: PublicKey

      Returns Promise<string>

    • Returns Promise<{ signature: string; size: number }>

    • Parameters

      • args: Omit<{ agent: SolanaAgentKit; price: number; tradeMint: PublicKey }, "agent">

      Returns Promise<string>

    • Parameters

      • args: Omit<{ agent: SolanaAgentKit; price: number; tradeMint: PublicKey }, "agent">

      Returns Promise<string>

    • Parameters

      • optionsWithBase58: StoreInitOptions
      • collectionOpts: CreateCollectionOptions

      Returns Promise<string>

    • Parameters

      • optionsWithBase58: StoreInitOptions
      • collectionAccount: string
      • createItemOptions: CreateSingleOptions
      • isMainnet: boolean

      Returns Promise<string>

    • Parameters

      • title: string
      • content: string
      • requirements: string
      • tags: string[]
      • tokenMintAddress: string
      • tokenAmount: number
      • Optionalpayer: string

      Returns Promise<GibworkCreateTaskReponse>

    • Parameters

      • OptionaltransactionIndex: number | bigint

      Returns Promise<string>

    • Parameters

      • creator: PublicKey

      Returns Promise<string>

    • Parameters

      • amount: number
      • OptionalsplmintAddress: PublicKey

      Returns Promise<{ signature: string; url: string }>

    • Parameters

      • name: string
      • uri: string
      • symbol: string
      • decimals: number = DEFAULT_OPTIONS.TOKEN_DECIMALS
      • OptionalinitialSupply: number

      Returns Promise<{ mint: PublicKey }>

    • Parameters

      • amount: number
      • vaultIndex: number = 0
      • Optionalmint: PublicKey

      Returns Promise<string>

    • Parameters

      • OptionaltransactionIndex: number | bigint

      Returns Promise<string>

    • Parameters

      • mint: string

      Returns Promise<string>

    • Opens a new trading position on Flash.Trade

      Parameters

      • params: FlashTradeParams

        Flash trade parameters including market, side, collateral, leverage, and pool name

      Returns Promise<string>

      Transaction signature

      -
    • Returns Promise<string[]>

    • Returns Promise<string[]>

    • Parameters

      • Optionaltoken_address: PublicKey

      Returns Promise<number>

    • Parameters

      • walletAddress: PublicKey
      • OptionaltokenAddress: PublicKey

      Returns Promise<number>

    • Parameters

      • owner: PublicKey

      Returns Promise<null | string>

    • Parameters

      • owner: PublicKey

      Returns Promise<string[]>

    • Parameters

      • tld: string

      Returns Promise<string[]>

    • Parameters

      • account: PublicKey

      Returns Promise<string>

    • Parameters

      • priceFeedID: string

      Returns Promise<string>

    • Parameters

      • tokenSymbol: string

      Returns Promise<string>

    • Parameters

      • amount: number

      Returns Promise<string>

    • Parameters

      • marketId: PublicKey
      • quantity: number
      • side: string
      • price: number

      Returns Promise<string>

    • Parameters

      • baseMint: PublicKey
      • quoteMint: PublicKey

      Returns Promise<string[]>

    • Parameters

      • collectionMint: PublicKey
      • metadata: {
            creators?: { address: string; share: number }[];
            name: string;
            sellerFeeBasisPoints?: number;
            uri: string;
        }
      • Optionalrecipient: PublicKey

      Returns Promise<MintCollectionNFTResponse>

    • Parameters

      • baseMint: PublicKey
      • quoteMint: PublicKey
      • lotSize: number = 1
      • tickSize: number = 0.01

      Returns Promise<string[]>

    • Parameters

      • args: Omit<
            {
                agent: SolanaAgentKit;
                collateralAmount: number;
                collateralMint?: PublicKey;
                leverage?: number;
                price: number;
                slippage?: number;
                tradeMint?: PublicKey;
            },
            "agent",
        >

      Returns Promise<string>

    • Parameters

      • args: Omit<
            {
                agent: SolanaAgentKit;
                collateralAmount: number;
                collateralMint?: PublicKey;
                leverage?: number;
                price: number;
                slippage?: number;
                tradeMint?: PublicKey;
            },
            "agent",
        >

      Returns Promise<string>

    • Parameters

      • positionMintAddress: PublicKey

      Returns Promise<string>

    • Parameters

      • mintDeploy: PublicKey
      • mintPair: PublicKey
      • initialPrice: Decimal
      • feeTier: 1 | 2 | 4 | 5 | 16 | 30 | 65 | 100 | 200

      Returns Promise<string>

    • Parameters

      • depositTokenAmount: number
      • depositTokenMint: PublicKey
      • otherTokenMint: PublicKey
      • initialPrice: Decimal
      • maxPrice: Decimal
      • feeTier: 1 | 2 | 4 | 5 | 16 | 30 | 65 | 100 | 200

      Returns Promise<string>

    • Parameters

      • whirlpoolAddress: PublicKey
      • priceOffsetBps: number
      • inputTokenMint: PublicKey
      • inputAmount: Decimal

      Returns Promise<string>

    • Parameters

      • whirlpoolAddress: PublicKey
      • distanceFromCurrentPriceBps: number
      • widthBps: number
      • inputTokenMint: PublicKey
      • inputAmount: Decimal

      Returns Promise<string>

    • Parameters

      • marketId: PublicKey
      • baseAmount: BN
      • quoteAmount: BN
      • startTime: BN

      Returns Promise<string>

    • Parameters

      • mint1: PublicKey
      • mint2: PublicKey
      • configId: PublicKey
      • initialPrice: Decimal
      • startTime: BN

      Returns Promise<string>

    • Parameters

      • mint1: PublicKey
      • mint2: PublicKey
      • configId: PublicKey
      • mintAAmount: BN
      • mintBAmount: BN
      • startTime: BN

      Returns Promise<string>

    • Parameters

      • name: string
      • OptionalspaceKB: number

      Returns Promise<string>

    • Parameters

      • OptionaltransactionIndex: number | bigint

      Returns Promise<string>

    • Parameters

      • domain: string

      Returns Promise<undefined | PublicKey>

    • Parameters

      • domain: string

      Returns Promise<PublicKey>

    • Parameters

      • amount: number

      Returns Promise<string>

    • Parameters

      • amount: number
      • choice: "rock" | "paper" | "scissors"

      Returns Promise<string>

    • Parameters

      • mintAddress: string
      • amount: number
      • decimals: number
      • recipients: string[]
      • priorityFeeInLamports: number
      • shouldLog: boolean

      Returns Promise<string[]>

    • Parameters

      • amount: number

      Returns Promise<string>

    • Parameters

      • nftMint: PublicKey

      Returns Promise<string>

    • Parameters

      • nftMint: PublicKey
      • price: number

      Returns Promise<string>

    • Parameters

      • outputMint: PublicKey
      • inputAmount: number
      • OptionalinputMint: PublicKey
      • slippageBps: number = DEFAULT_OPTIONS.SLIPPAGE_BPS

      Returns Promise<string>

    • Parameters

      • to: PublicKey
      • amount: number
      • Optionalmint: PublicKey

      Returns Promise<string>

    • Parameters

      • amount: number
      • to: PublicKey
      • vaultIndex: number = 0
      • Optionalmint: PublicKey

      Returns Promise<string>

    • Parameters

      • marketId: PublicKey

      Returns Promise<string>

    +
    diff --git a/docs/functions/createSolanaTools.html b/docs/functions/createSolanaTools.html index 946e754..dc4a8cd 100644 --- a/docs/functions/createSolanaTools.html +++ b/docs/functions/createSolanaTools.html @@ -1 +1 @@ -createSolanaTools | solana-agent-kit

    Function createSolanaTools

    • Parameters

      Returns (
          | SolanaBalanceTool
          | SolanaBalanceOtherTool
          | SolanaTransferTool
          | SolanaDeployTokenTool
          | SolanaDeployCollectionTool
          | SolanaMintNFTTool
          | SolanaPerpCloseTradeTool
          | SolanaPerpOpenTradeTool
          | SolanaTradeTool
          | SolanaLimitOrderTool
          | SolanaBatchOrderTool
          | SolanaCancelAllOrdersTool
          | SolanaWithdrawAllTool
          | SolanaRequestFundsTool
          | SolanaRegisterDomainTool
          | SolanaResolveDomainTool
          | SolanaGetDomainTool
          | SolanaGetWalletAddressTool
          | SolanaFlashOpenTrade
          | SolanaFlashCloseTrade
          | SolanaPumpfunTokenLaunchTool
          | SolanaCreateImageTool
          | SolanaLendAssetTool
          | SolanaTPSCalculatorTool
          | SolanaStakeTool
          | SolanaRestakeTool
          | SolanaFetchPriceTool
          | SolanaTokenDataTool
          | SolanaTokenDataByTickerTool
          | SolanaCompressedAirdropTool
          | SolanaClosePosition
          | SolanaOrcaCreateCLMM
          | SolanaOrcaCreateSingleSideLiquidityPool
          | SolanaOrcaFetchPositions
          | SolanaOrcaOpenCenteredPosition
          | SolanaOrcaOpenSingleSidedPosition
          | SolanaRaydiumCreateAmmV4
          | SolanaRaydiumCreateClmm
          | SolanaRaydiumCreateCpmm
          | SolanaOpenbookCreateMarket
          | SolanaManifestCreateMarket
          | SolanaPythFetchPrice
          | SolanaResolveAllDomainsTool
          | SolanaGetOwnedDomains
          | SolanaGetOwnedTldDomains
          | SolanaGetAllTlds
          | SolanaGetMainDomain
          | SolanaCreateGibworkTask
          | SolanaRockPaperScissorsTool
          | SolanaTipLinkTool
          | SolanaListNFTForSaleTool
          | SolanaCancelNFTListingTool
          | SolanaFetchTokenReportSummaryTool
          | SolanaFetchTokenDetailedReportTool
          | Solana3LandCreateSingle
          | Solana3LandCreateCollection
          | SolanaCloseEmptyTokenAccounts
          | SolanaCreate2by2Multisig
          | SolanaDepositTo2by2Multisig
          | SolanaTransferFrom2by2Multisig
          | SolanaCreateProposal2by2Multisig
          | SolanaApproveProposal2by2Multisig
          | SolanaRejectProposal2by2Multisig
          | SolanaExecuteProposal2by2Multisig
      )[]

    +createSolanaTools | solana-agent-kit

    Function createSolanaTools

    • Parameters

      Returns (
          | SolanaBalanceTool
          | SolanaBalanceOtherTool
          | SolanaTransferTool
          | SolanaDeployTokenTool
          | SolanaDeployCollectionTool
          | SolanaMintNFTTool
          | SolanaPerpCloseTradeTool
          | SolanaPerpOpenTradeTool
          | SolanaTradeTool
          | SolanaLimitOrderTool
          | SolanaBatchOrderTool
          | SolanaCancelAllOrdersTool
          | SolanaWithdrawAllTool
          | SolanaRequestFundsTool
          | SolanaRegisterDomainTool
          | SolanaResolveDomainTool
          | SolanaGetDomainTool
          | SolanaGetWalletAddressTool
          | SolanaFlashOpenTrade
          | SolanaFlashCloseTrade
          | SolanaPumpfunTokenLaunchTool
          | SolanaCreateImageTool
          | SolanaLendAssetTool
          | SolanaTPSCalculatorTool
          | SolanaStakeTool
          | SolanaRestakeTool
          | SolanaFetchPriceTool
          | SolanaTokenDataTool
          | SolanaTokenDataByTickerTool
          | SolanaCompressedAirdropTool
          | SolanaClosePosition
          | SolanaOrcaCreateCLMM
          | SolanaOrcaCreateSingleSideLiquidityPool
          | SolanaOrcaFetchPositions
          | SolanaOrcaOpenCenteredPosition
          | SolanaOrcaOpenSingleSidedPosition
          | SolanaRaydiumCreateAmmV4
          | SolanaRaydiumCreateClmm
          | SolanaRaydiumCreateCpmm
          | SolanaOpenbookCreateMarket
          | SolanaManifestCreateMarket
          | SolanaPythFetchPrice
          | SolanaResolveAllDomainsTool
          | SolanaGetOwnedDomains
          | SolanaGetOwnedTldDomains
          | SolanaGetAllTlds
          | SolanaGetMainDomain
          | SolanaCreateGibworkTask
          | SolanaRockPaperScissorsTool
          | SolanaTipLinkTool
          | SolanaListNFTForSaleTool
          | SolanaCancelNFTListingTool
          | SolanaFetchTokenReportSummaryTool
          | SolanaFetchTokenDetailedReportTool
          | Solana3LandCreateSingle
          | Solana3LandCreateCollection
          | SolanaCloseEmptyTokenAccounts
          | SolanaCreate2by2Multisig
          | SolanaDepositTo2by2Multisig
          | SolanaTransferFrom2by2Multisig
          | SolanaCreateProposal2by2Multisig
          | SolanaApproveProposal2by2Multisig
          | SolanaRejectProposal2by2Multisig
          | SolanaExecuteProposal2by2Multisig
      )[]

    diff --git a/docs/functions/createVercelAITools.html b/docs/functions/createVercelAITools.html index 41d02bc..20aab3b 100644 --- a/docs/functions/createVercelAITools.html +++ b/docs/functions/createVercelAITools.html @@ -1 +1 @@ -createVercelAITools | solana-agent-kit

    Function createVercelAITools

    +createVercelAITools | solana-agent-kit

    Function createVercelAITools

    diff --git a/docs/functions/executeAction.html b/docs/functions/executeAction.html index 106baa4..1dd05f1 100644 --- a/docs/functions/executeAction.html +++ b/docs/functions/executeAction.html @@ -1,2 +1,2 @@ executeAction | solana-agent-kit

    Function executeAction

    • Execute an action with the given input

      -

      Parameters

      Returns Promise<Record<string, any>>

    +

    Parameters

    Returns Promise<Record<string, any>>

    diff --git a/docs/functions/findAction.html b/docs/functions/findAction.html index f83cd39..cab7bee 100644 --- a/docs/functions/findAction.html +++ b/docs/functions/findAction.html @@ -1,2 +1,2 @@ findAction | solana-agent-kit

    Function findAction

    • Find an action by its name or one of its similes

      -

      Parameters

      • query: string

      Returns Action | undefined

    +

    Parameters

    Returns Action | undefined

    diff --git a/docs/functions/getActionExamples.html b/docs/functions/getActionExamples.html index 82e0ce8..866f4c1 100644 --- a/docs/functions/getActionExamples.html +++ b/docs/functions/getActionExamples.html @@ -1,2 +1,2 @@ getActionExamples | solana-agent-kit

    Function getActionExamples

    • Get examples for an action

      -

      Parameters

      • action: Action

      Returns string

    +

    Parameters

    Returns string

    diff --git a/docs/interfaces/Action.html b/docs/interfaces/Action.html index 0a8bde7..cf3930c 100644 --- a/docs/interfaces/Action.html +++ b/docs/interfaces/Action.html @@ -1,16 +1,16 @@ Action | solana-agent-kit

    Interface Action

    Main Action interface inspired by ELIZA This interface makes it easier to implement actions across different frameworks

    -
    interface Action {
        description: string;
        examples: ActionExample[][];
        handler: Handler;
        name: string;
        schema: ZodType;
        similes: string[];
    }

    Properties

    interface Action {
        description: string;
        examples: ActionExample[][];
        handler: Handler;
        name: string;
        schema: ZodType;
        similes: string[];
    }

    Properties

    description: string

    Detailed description of what the action does

    -
    examples: ActionExample[][]

    Array of example inputs and outputs for the action +

    examples: ActionExample[][]

    Array of example inputs and outputs for the action Each inner array represents a group of related examples

    -
    handler: Handler

    Function that executes the action

    -
    name: string

    Unique name of the action

    -
    schema: ZodType

    Zod schema for input validation

    -
    similes: string[]

    Alternative names/phrases that can trigger this action

    -
    +
    handler: Handler

    Function that executes the action

    +
    name: string

    Unique name of the action

    +
    schema: ZodType

    Zod schema for input validation

    +
    similes: string[]

    Alternative names/phrases that can trigger this action

    +
    diff --git a/docs/interfaces/ActionExample.html b/docs/interfaces/ActionExample.html index 1b9b012..dfef543 100644 --- a/docs/interfaces/ActionExample.html +++ b/docs/interfaces/ActionExample.html @@ -1,5 +1,5 @@ ActionExample | solana-agent-kit

    Interface ActionExample

    Example of an action with input and output

    -
    interface ActionExample {
        explanation: string;
        input: Record<string, any>;
        output: Record<string, any>;
    }

    Properties

    interface ActionExample {
        explanation: string;
        input: Record<string, any>;
        output: Record<string, any>;
    }

    Properties

    explanation: string
    input: Record<string, any>
    output: Record<string, any>
    +

    Properties

    explanation: string
    input: Record<string, any>
    output: Record<string, any>
    diff --git a/docs/interfaces/BatchOrderPattern.html b/docs/interfaces/BatchOrderPattern.html index 17f674f..48c1f92 100644 --- a/docs/interfaces/BatchOrderPattern.html +++ b/docs/interfaces/BatchOrderPattern.html @@ -1,7 +1,7 @@ -BatchOrderPattern | solana-agent-kit

    Interface BatchOrderPattern

    interface BatchOrderPattern {
        individualQuantity?: number;
        numberOfOrders?: number;
        priceRange?: { max?: number; min?: number };
        side: string;
        spacing?: { type: "percentage" | "fixed"; value: number };
        totalQuantity?: number;
    }

    Properties

    individualQuantity? +BatchOrderPattern | solana-agent-kit

    Interface BatchOrderPattern

    interface BatchOrderPattern {
        individualQuantity?: number;
        numberOfOrders?: number;
        priceRange?: { max?: number; min?: number };
        side: string;
        spacing?: { type: "percentage" | "fixed"; value: number };
        totalQuantity?: number;
    }

    Properties

    individualQuantity?: number
    numberOfOrders?: number
    priceRange?: { max?: number; min?: number }
    side: string
    spacing?: { type: "percentage" | "fixed"; value: number }
    totalQuantity?: number
    +

    Properties

    individualQuantity?: number
    numberOfOrders?: number
    priceRange?: { max?: number; min?: number }
    side: string
    spacing?: { type: "percentage" | "fixed"; value: number }
    totalQuantity?: number
    diff --git a/docs/interfaces/CollectionDeployment.html b/docs/interfaces/CollectionDeployment.html index fdca3d7..25dd7e8 100644 --- a/docs/interfaces/CollectionDeployment.html +++ b/docs/interfaces/CollectionDeployment.html @@ -1,3 +1,3 @@ -CollectionDeployment | solana-agent-kit

    Interface CollectionDeployment

    interface CollectionDeployment {
        collectionAddress: PublicKey;
        signature: Uint8Array;
    }

    Properties

    collectionAddress +CollectionDeployment | solana-agent-kit

    Interface CollectionDeployment

    interface CollectionDeployment {
        collectionAddress: PublicKey;
        signature: Uint8Array;
    }

    Properties

    collectionAddress: PublicKey
    signature: Uint8Array
    +

    Properties

    collectionAddress: PublicKey
    signature: Uint8Array
    diff --git a/docs/interfaces/CollectionOptions.html b/docs/interfaces/CollectionOptions.html index b5e8943..0a7ddc6 100644 --- a/docs/interfaces/CollectionOptions.html +++ b/docs/interfaces/CollectionOptions.html @@ -1,5 +1,5 @@ -CollectionOptions | solana-agent-kit

    Interface CollectionOptions

    interface CollectionOptions {
        creators?: Creator[];
        name: string;
        royaltyBasisPoints?: number;
        uri: string;
    }

    Properties

    creators? +CollectionOptions | solana-agent-kit

    Interface CollectionOptions

    interface CollectionOptions {
        creators?: Creator[];
        name: string;
        royaltyBasisPoints?: number;
        uri: string;
    }

    Properties

    creators?: Creator[]
    name: string
    royaltyBasisPoints?: number
    uri: string
    +

    Properties

    creators?: Creator[]
    name: string
    royaltyBasisPoints?: number
    uri: string
    diff --git a/docs/interfaces/Config.html b/docs/interfaces/Config.html index f9a0f9e..7f7456e 100644 --- a/docs/interfaces/Config.html +++ b/docs/interfaces/Config.html @@ -1,5 +1,5 @@ -Config | solana-agent-kit

    Interface Config

    interface Config {
        FLASH_PRIVILEGE?: string;
        JUPITER_FEE_BPS?: number;
        JUPITER_REFERRAL_ACCOUNT?: string;
        OPENAI_API_KEY?: string;
    }

    Properties

    FLASH_PRIVILEGE? +Config | solana-agent-kit

    Interface Config

    interface Config {
        FLASH_PRIVILEGE?: string;
        JUPITER_FEE_BPS?: number;
        JUPITER_REFERRAL_ACCOUNT?: string;
        OPENAI_API_KEY?: string;
    }

    Properties

    FLASH_PRIVILEGE?: string
    JUPITER_FEE_BPS?: number
    JUPITER_REFERRAL_ACCOUNT?: string
    OPENAI_API_KEY?: string
    +

    Properties

    FLASH_PRIVILEGE?: string
    JUPITER_FEE_BPS?: number
    JUPITER_REFERRAL_ACCOUNT?: string
    OPENAI_API_KEY?: string
    diff --git a/docs/interfaces/Creator.html b/docs/interfaces/Creator.html index c2fdf85..ecdf8db 100644 --- a/docs/interfaces/Creator.html +++ b/docs/interfaces/Creator.html @@ -1,3 +1,3 @@ -Creator | solana-agent-kit

    Interface Creator

    interface Creator {
        address: string;
        percentage: number;
    }

    Properties

    address +Creator | solana-agent-kit

    Interface Creator

    interface Creator {
        address: string;
        percentage: number;
    }

    Properties

    Properties

    address: string
    percentage: number
    +

    Properties

    address: string
    percentage: number
    diff --git a/docs/interfaces/FetchPriceResponse.html b/docs/interfaces/FetchPriceResponse.html index 78c47ba..0a77780 100644 --- a/docs/interfaces/FetchPriceResponse.html +++ b/docs/interfaces/FetchPriceResponse.html @@ -1,6 +1,6 @@ -FetchPriceResponse | solana-agent-kit

    Interface FetchPriceResponse

    interface FetchPriceResponse {
        code?: string;
        message?: string;
        priceInUSDC?: string;
        status: "success" | "error";
        tokenId?: string;
    }

    Properties

    code? +FetchPriceResponse | solana-agent-kit

    Interface FetchPriceResponse

    interface FetchPriceResponse {
        code?: string;
        message?: string;
        priceInUSDC?: string;
        status: "success" | "error";
        tokenId?: string;
    }

    Properties

    code?: string
    message?: string
    priceInUSDC?: string
    status: "success" | "error"
    tokenId?: string
    +

    Properties

    code?: string
    message?: string
    priceInUSDC?: string
    status: "success" | "error"
    tokenId?: string
    diff --git a/docs/interfaces/FlashCloseTradeParams.html b/docs/interfaces/FlashCloseTradeParams.html index 3286ef6..443ec20 100644 --- a/docs/interfaces/FlashCloseTradeParams.html +++ b/docs/interfaces/FlashCloseTradeParams.html @@ -1,3 +1,3 @@ -FlashCloseTradeParams | solana-agent-kit

    Interface FlashCloseTradeParams

    interface FlashCloseTradeParams {
        side: "long" | "short";
        token: string;
    }

    Properties

    side +FlashCloseTradeParams | solana-agent-kit

    Interface FlashCloseTradeParams

    interface FlashCloseTradeParams {
        side: "long" | "short";
        token: string;
    }

    Properties

    Properties

    side: "long" | "short"
    token: string
    +

    Properties

    side: "long" | "short"
    token: string
    diff --git a/docs/interfaces/FlashTradeParams.html b/docs/interfaces/FlashTradeParams.html index 863734d..ab9bbde 100644 --- a/docs/interfaces/FlashTradeParams.html +++ b/docs/interfaces/FlashTradeParams.html @@ -1,5 +1,5 @@ -FlashTradeParams | solana-agent-kit

    Interface FlashTradeParams

    interface FlashTradeParams {
        collateralUsd: number;
        leverage: number;
        side: "long" | "short";
        token: string;
    }

    Properties

    collateralUsd +FlashTradeParams | solana-agent-kit

    Interface FlashTradeParams

    interface FlashTradeParams {
        collateralUsd: number;
        leverage: number;
        side: "long" | "short";
        token: string;
    }

    Properties

    collateralUsd: number
    leverage: number
    side: "long" | "short"
    token: string
    +

    Properties

    collateralUsd: number
    leverage: number
    side: "long" | "short"
    token: string
    diff --git a/docs/interfaces/GibworkCreateTaskReponse.html b/docs/interfaces/GibworkCreateTaskReponse.html index 42cfb7c..22fd1b4 100644 --- a/docs/interfaces/GibworkCreateTaskReponse.html +++ b/docs/interfaces/GibworkCreateTaskReponse.html @@ -1,4 +1,4 @@ -GibworkCreateTaskReponse | solana-agent-kit

    Interface GibworkCreateTaskReponse

    interface GibworkCreateTaskReponse {
        signature?: string;
        status: "success" | "error";
        taskId?: string;
    }

    Properties

    signature? +GibworkCreateTaskReponse | solana-agent-kit

    Interface GibworkCreateTaskReponse

    interface GibworkCreateTaskReponse {
        signature?: string;
        status: "success" | "error";
        taskId?: string;
    }

    Properties

    signature?: string
    status: "success" | "error"
    taskId?: string
    +

    Properties

    signature?: string
    status: "success" | "error"
    taskId?: string
    diff --git a/docs/interfaces/JupiterTokenData.html b/docs/interfaces/JupiterTokenData.html index 6949e66..9de063e 100644 --- a/docs/interfaces/JupiterTokenData.html +++ b/docs/interfaces/JupiterTokenData.html @@ -1,4 +1,4 @@ -JupiterTokenData | solana-agent-kit

    Interface JupiterTokenData

    interface JupiterTokenData {
        address: string;
        daily_volume: number;
        decimals: number;
        extensions: { coingeckoId?: string };
        freeze_authority: null | string;
        logoURI: string;
        mint_authority: null | string;
        name: string;
        permanent_delegate: null | string;
        symbol: string;
        tags: string[];
    }

    Properties

    address +JupiterTokenData | solana-agent-kit

    Interface JupiterTokenData

    interface JupiterTokenData {
        address: string;
        daily_volume: number;
        decimals: number;
        extensions: { coingeckoId?: string };
        freeze_authority: null | string;
        logoURI: string;
        mint_authority: null | string;
        name: string;
        permanent_delegate: null | string;
        symbol: string;
        tags: string[];
    }

    Properties

    address: string
    daily_volume: number
    decimals: number
    extensions: { coingeckoId?: string }
    freeze_authority: null | string
    logoURI: string
    mint_authority: null | string
    name: string
    permanent_delegate: null | string
    symbol: string
    tags: string[]
    +

    Properties

    address: string
    daily_volume: number
    decimals: number
    extensions: { coingeckoId?: string }
    freeze_authority: null | string
    logoURI: string
    mint_authority: null | string
    name: string
    permanent_delegate: null | string
    symbol: string
    tags: string[]
    diff --git a/docs/interfaces/LuloAccountDetailsResponse.html b/docs/interfaces/LuloAccountDetailsResponse.html index 3123e79..498ae5a 100644 --- a/docs/interfaces/LuloAccountDetailsResponse.html +++ b/docs/interfaces/LuloAccountDetailsResponse.html @@ -1,6 +1,6 @@ LuloAccountDetailsResponse | solana-agent-kit

    Interface LuloAccountDetailsResponse

    Lulo Account Details response format

    -
    interface LuloAccountDetailsResponse {
        interestEarned: number;
        realtimeApy: number;
        settings: {
            allowedProtocols: null | string;
            homebase: null | string;
            minimumRate: string;
            owner: string;
        };
        totalValue: number;
    }

    Properties

    interface LuloAccountDetailsResponse {
        interestEarned: number;
        realtimeApy: number;
        settings: {
            allowedProtocols: null | string;
            homebase: null | string;
            minimumRate: string;
            owner: string;
        };
        totalValue: number;
    }

    Properties

    interestEarned: number
    realtimeApy: number
    settings: {
        allowedProtocols: null | string;
        homebase: null | string;
        minimumRate: string;
        owner: string;
    }
    totalValue: number
    +

    Properties

    interestEarned: number
    realtimeApy: number
    settings: {
        allowedProtocols: null | string;
        homebase: null | string;
        minimumRate: string;
        owner: string;
    }
    totalValue: number
    diff --git a/docs/interfaces/MintCollectionNFTResponse.html b/docs/interfaces/MintCollectionNFTResponse.html index e5cc1f2..b3c8140 100644 --- a/docs/interfaces/MintCollectionNFTResponse.html +++ b/docs/interfaces/MintCollectionNFTResponse.html @@ -1,3 +1,3 @@ -MintCollectionNFTResponse | solana-agent-kit

    Interface MintCollectionNFTResponse

    interface MintCollectionNFTResponse {
        metadata: PublicKey;
        mint: PublicKey;
    }

    Properties

    metadata +MintCollectionNFTResponse | solana-agent-kit

    Interface MintCollectionNFTResponse

    interface MintCollectionNFTResponse {
        metadata: PublicKey;
        mint: PublicKey;
    }

    Properties

    Properties

    metadata: PublicKey
    mint: PublicKey
    +

    Properties

    metadata: PublicKey
    mint: PublicKey
    diff --git a/docs/interfaces/OrderParams.html b/docs/interfaces/OrderParams.html index 91d7e84..0f230fa 100644 --- a/docs/interfaces/OrderParams.html +++ b/docs/interfaces/OrderParams.html @@ -1,4 +1,4 @@ -OrderParams | solana-agent-kit

    Interface OrderParams

    interface OrderParams {
        price: number;
        quantity: number;
        side: string;
    }

    Properties

    price +OrderParams | solana-agent-kit

    Interface OrderParams

    interface OrderParams {
        price: number;
        quantity: number;
        side: string;
    }

    Properties

    Properties

    price: number
    quantity: number
    side: string
    +

    Properties

    price: number
    quantity: number
    side: string
    diff --git a/docs/interfaces/PumpFunTokenOptions.html b/docs/interfaces/PumpFunTokenOptions.html index 1d471e9..884eff7 100644 --- a/docs/interfaces/PumpFunTokenOptions.html +++ b/docs/interfaces/PumpFunTokenOptions.html @@ -1,7 +1,7 @@ -PumpFunTokenOptions | solana-agent-kit

    Interface PumpFunTokenOptions

    interface PumpFunTokenOptions {
        initialLiquiditySOL?: number;
        priorityFee?: number;
        slippageBps?: number;
        telegram?: string;
        twitter?: string;
        website?: string;
    }

    Properties

    initialLiquiditySOL? +PumpFunTokenOptions | solana-agent-kit

    Interface PumpFunTokenOptions

    interface PumpFunTokenOptions {
        initialLiquiditySOL?: number;
        priorityFee?: number;
        slippageBps?: number;
        telegram?: string;
        twitter?: string;
        website?: string;
    }

    Properties

    initialLiquiditySOL?: number
    priorityFee?: number
    slippageBps?: number
    telegram?: string
    twitter?: string
    website?: string
    +

    Properties

    initialLiquiditySOL?: number
    priorityFee?: number
    slippageBps?: number
    telegram?: string
    twitter?: string
    website?: string
    diff --git a/docs/interfaces/PumpfunLaunchResponse.html b/docs/interfaces/PumpfunLaunchResponse.html index 5822e59..c603d3d 100644 --- a/docs/interfaces/PumpfunLaunchResponse.html +++ b/docs/interfaces/PumpfunLaunchResponse.html @@ -1,5 +1,5 @@ -PumpfunLaunchResponse | solana-agent-kit

    Interface PumpfunLaunchResponse

    interface PumpfunLaunchResponse {
        error?: string;
        metadataUri?: string;
        mint: string;
        signature: string;
    }

    Properties

    error? +PumpfunLaunchResponse | solana-agent-kit

    Interface PumpfunLaunchResponse

    interface PumpfunLaunchResponse {
        error?: string;
        metadataUri?: string;
        mint: string;
        signature: string;
    }

    Properties

    error?: string
    metadataUri?: string
    mint: string
    signature: string
    +

    Properties

    error?: string
    metadataUri?: string
    mint: string
    signature: string
    diff --git a/docs/interfaces/PythFetchPriceResponse.html b/docs/interfaces/PythFetchPriceResponse.html index 6f7362c..c9a8072 100644 --- a/docs/interfaces/PythFetchPriceResponse.html +++ b/docs/interfaces/PythFetchPriceResponse.html @@ -1,7 +1,7 @@ -PythFetchPriceResponse | solana-agent-kit

    Interface PythFetchPriceResponse

    interface PythFetchPriceResponse {
        code?: string;
        message?: string;
        price?: string;
        priceFeedID?: string;
        status: "success" | "error";
        tokenSymbol: string;
    }

    Properties

    code? +PythFetchPriceResponse | solana-agent-kit

    Interface PythFetchPriceResponse

    interface PythFetchPriceResponse {
        code?: string;
        message?: string;
        price?: string;
        priceFeedID?: string;
        status: "success" | "error";
        tokenSymbol: string;
    }

    Properties

    code?: string
    message?: string
    price?: string
    priceFeedID?: string
    status: "success" | "error"
    tokenSymbol: string
    +

    Properties

    code?: string
    message?: string
    price?: string
    priceFeedID?: string
    status: "success" | "error"
    tokenSymbol: string
    diff --git a/docs/interfaces/PythPriceFeedIDItem.html b/docs/interfaces/PythPriceFeedIDItem.html index 2457d7a..ee4bb5c 100644 --- a/docs/interfaces/PythPriceFeedIDItem.html +++ b/docs/interfaces/PythPriceFeedIDItem.html @@ -1,3 +1,3 @@ -PythPriceFeedIDItem | solana-agent-kit

    Interface PythPriceFeedIDItem

    interface PythPriceFeedIDItem {
        attributes: { asset_type: string; base: string };
        id: string;
    }

    Properties

    attributes +PythPriceFeedIDItem | solana-agent-kit

    Interface PythPriceFeedIDItem

    interface PythPriceFeedIDItem {
        attributes: { asset_type: string; base: string };
        id: string;
    }

    Properties

    Properties

    attributes: { asset_type: string; base: string }
    id: string
    +

    Properties

    attributes: { asset_type: string; base: string }
    id: string
    diff --git a/docs/interfaces/PythPriceItem.html b/docs/interfaces/PythPriceItem.html index 6b18692..04e1cf6 100644 --- a/docs/interfaces/PythPriceItem.html +++ b/docs/interfaces/PythPriceItem.html @@ -1,3 +1,3 @@ -PythPriceItem | solana-agent-kit

    Interface PythPriceItem

    interface PythPriceItem {
        binary: { data: string[]; encoding: string };
        parsed: [
            {
                ema_price: {
                    conf: string;
                    expo: number;
                    price: string;
                    publish_time: number;
                };
                id: string;
                metadata: {
                    prev_publish_time: number;
                    proof_available_time: number;
                    slot: number;
                };
                price: {
                    conf: string;
                    expo: number;
                    price: string;
                    publish_time: number;
                };
            }[],
        ];
    }

    Properties

    binary +PythPriceItem | solana-agent-kit

    Interface PythPriceItem

    interface PythPriceItem {
        binary: { data: string[]; encoding: string };
        parsed: [
            {
                ema_price: {
                    conf: string;
                    expo: number;
                    price: string;
                    publish_time: number;
                };
                id: string;
                metadata: {
                    prev_publish_time: number;
                    proof_available_time: number;
                    slot: number;
                };
                price: {
                    conf: string;
                    expo: number;
                    price: string;
                    publish_time: number;
                };
            }[],
        ];
    }

    Properties

    Properties

    binary: { data: string[]; encoding: string }
    parsed: [
        {
            ema_price: {
                conf: string;
                expo: number;
                price: string;
                publish_time: number;
            };
            id: string;
            metadata: {
                prev_publish_time: number;
                proof_available_time: number;
                slot: number;
            };
            price: { conf: string; expo: number; price: string; publish_time: number };
        }[],
    ]
    +

    Properties

    binary: { data: string[]; encoding: string }
    parsed: [
        {
            ema_price: {
                conf: string;
                expo: number;
                price: string;
                publish_time: number;
            };
            id: string;
            metadata: {
                prev_publish_time: number;
                proof_available_time: number;
                slot: number;
            };
            price: { conf: string; expo: number; price: string; publish_time: number };
        }[],
    ]
    diff --git a/docs/interfaces/TokenCheck.html b/docs/interfaces/TokenCheck.html index 0e7ee85..bf1c093 100644 --- a/docs/interfaces/TokenCheck.html +++ b/docs/interfaces/TokenCheck.html @@ -1,5 +1,5 @@ -TokenCheck | solana-agent-kit

    Interface TokenCheck

    interface TokenCheck {
        risks: {
            description: string;
            level: string;
            name: string;
            score: number;
        }[];
        score: number;
        tokenProgram: string;
        tokenType: string;
    }

    Properties

    risks +TokenCheck | solana-agent-kit

    Interface TokenCheck

    interface TokenCheck {
        risks: {
            description: string;
            level: string;
            name: string;
            score: number;
        }[];
        score: number;
        tokenProgram: string;
        tokenType: string;
    }

    Properties

    risks: { description: string; level: string; name: string; score: number }[]
    score: number
    tokenProgram: string
    tokenType: string
    +

    Properties

    risks: { description: string; level: string; name: string; score: number }[]
    score: number
    tokenProgram: string
    tokenType: string
    diff --git a/docs/types/Handler.html b/docs/types/Handler.html index 2209e3c..e97135e 100644 --- a/docs/types/Handler.html +++ b/docs/types/Handler.html @@ -1,2 +1,2 @@ Handler | solana-agent-kit

    Type Alias Handler

    Handler: (
        agent: SolanaAgentKit,
        input: Record<string, any>,
    ) => Promise<Record<string, any>>

    Handler function type for executing the action

    -

    Type declaration

      • (
            agent: SolanaAgentKit,
            input: Record<string, any>,
        ): Promise<Record<string, any>>
      • Parameters

        Returns Promise<Record<string, any>>

    +

    Type declaration

    diff --git a/docs/variables/actions.html b/docs/variables/actions.html index db561eb..ef90e43 100644 --- a/docs/variables/actions.html +++ b/docs/variables/actions.html @@ -1 +1 @@ -ACTIONS | solana-agent-kit

    Variable ACTIONSConst

    ACTIONS: {
        BALANCE_ACTION: Action;
        CREATE_GIBWORK_TASK_ACTION: Action;
        CREATE_IMAGE_ACTION: Action;
        CREATE_ORCA_SINGLE_SIDED_WHIRLPOOL_ACTION: Action;
        DEPLOY_COLLECTION_ACTION: Action;
        DEPLOY_TOKEN_ACTION: Action;
        FETCH_PRICE_ACTION: Action;
        FLASH_CLOSE_TRADE_ACTION: Action;
        FLASH_OPEN_TRADE_ACTION: Action;
        GET_ALL_DOMAINS_TLDS_ACTION: Action;
        GET_ALL_REGISTERED_ALL_DOMAINS_ACTION: Action;
        GET_MAIN_ALL_DOMAINS_DOMAIN_ACTION: Action;
        GET_OWNED_ALL_DOMAINS_ACTION: Action;
        GET_OWNED_DOMAINS_FOR_TLD_ACTION: Action;
        GET_PRIMARY_DOMAIN_ACTION: Action;
        GET_TOKEN_DATA_ACTION: Action;
        GET_TPS_ACTION: Action;
        LAUNCH_PUMPFUN_TOKEN_ACTION: Action;
        LEND_ASSET_ACTION: Action;
        MINT_NFT_ACTION: Action;
        PYTH_FETCH_PRICE_ACTION: Action;
        RAYDIUM_CREATE_AMM_V4_ACTION: Action;
        RAYDIUM_CREATE_CPMM_ACTION: Action;
        REGISTER_DOMAIN_ACTION: Action;
        REQUEST_FUNDS_ACTION: Action;
        RESOLVE_DOMAIN_ACTION: Action;
        RESOLVE_SOL_DOMAIN_ACTION: Action;
        STAKE_WITH_JUP_ACTION: Action;
        STAKE_WITH_SOLAYER_ACTION: Action;
        TRADE_ACTION: Action;
        TRANSFER_ACTION: Action;
        WALLET_ADDRESS_ACTION: Action;
    } = ...

    Type declaration

    • BALANCE_ACTION: Action
    • CREATE_GIBWORK_TASK_ACTION: Action
    • CREATE_IMAGE_ACTION: Action
    • CREATE_ORCA_SINGLE_SIDED_WHIRLPOOL_ACTION: Action
    • DEPLOY_COLLECTION_ACTION: Action
    • DEPLOY_TOKEN_ACTION: Action
    • FETCH_PRICE_ACTION: Action
    • FLASH_CLOSE_TRADE_ACTION: Action
    • FLASH_OPEN_TRADE_ACTION: Action
    • GET_ALL_DOMAINS_TLDS_ACTION: Action
    • GET_ALL_REGISTERED_ALL_DOMAINS_ACTION: Action
    • GET_MAIN_ALL_DOMAINS_DOMAIN_ACTION: Action
    • GET_OWNED_ALL_DOMAINS_ACTION: Action
    • GET_OWNED_DOMAINS_FOR_TLD_ACTION: Action
    • GET_PRIMARY_DOMAIN_ACTION: Action
    • GET_TOKEN_DATA_ACTION: Action
    • GET_TPS_ACTION: Action
    • LAUNCH_PUMPFUN_TOKEN_ACTION: Action
    • LEND_ASSET_ACTION: Action
    • MINT_NFT_ACTION: Action
    • PYTH_FETCH_PRICE_ACTION: Action
    • RAYDIUM_CREATE_AMM_V4_ACTION: Action
    • RAYDIUM_CREATE_CPMM_ACTION: Action
    • REGISTER_DOMAIN_ACTION: Action
    • REQUEST_FUNDS_ACTION: Action
    • RESOLVE_DOMAIN_ACTION: Action
    • RESOLVE_SOL_DOMAIN_ACTION: Action
    • STAKE_WITH_JUP_ACTION: Action
    • STAKE_WITH_SOLAYER_ACTION: Action
    • TRADE_ACTION: Action
    • TRANSFER_ACTION: Action
    • WALLET_ADDRESS_ACTION: Action
    +ACTIONS | solana-agent-kit

    Variable ACTIONSConst

    ACTIONS: {
        APPROVE_MULTISIG_PROPOSAL_ACTION: Action;
        BALANCE_ACTION: Action;
        CREATE_GIBWORK_TASK_ACTION: Action;
        CREATE_IMAGE_ACTION: Action;
        CREATE_MULTISIG_ACTION: Action;
        CREATE_MULTISIG_PROPOSAL_ACTION: Action;
        CREATE_ORCA_SINGLE_SIDED_WHIRLPOOL_ACTION: Action;
        DEPLOY_COLLECTION_ACTION: Action;
        DEPLOY_TOKEN_ACTION: Action;
        DEPOSIT_TO_MULTISIG_ACTION: Action;
        EXECUTE_MULTISIG_PROPOSAL_ACTION: Action;
        FETCH_PRICE_ACTION: Action;
        FLASH_CLOSE_TRADE_ACTION: Action;
        FLASH_OPEN_TRADE_ACTION: Action;
        GET_ALL_DOMAINS_TLDS_ACTION: Action;
        GET_ALL_REGISTERED_ALL_DOMAINS_ACTION: Action;
        GET_MAIN_ALL_DOMAINS_DOMAIN_ACTION: Action;
        GET_OWNED_ALL_DOMAINS_ACTION: Action;
        GET_OWNED_DOMAINS_FOR_TLD_ACTION: Action;
        GET_PRIMARY_DOMAIN_ACTION: Action;
        GET_TOKEN_DATA_ACTION: Action;
        GET_TPS_ACTION: Action;
        LAUNCH_PUMPFUN_TOKEN_ACTION: Action;
        LEND_ASSET_ACTION: Action;
        MINT_NFT_ACTION: Action;
        PYTH_FETCH_PRICE_ACTION: Action;
        RAYDIUM_CREATE_AMM_V4_ACTION: Action;
        RAYDIUM_CREATE_CPMM_ACTION: Action;
        REGISTER_DOMAIN_ACTION: Action;
        REJECT_MULTISIG_PROPOSAL_ACTION: Action;
        REQUEST_FUNDS_ACTION: Action;
        RESOLVE_DOMAIN_ACTION: Action;
        RESOLVE_SOL_DOMAIN_ACTION: Action;
        STAKE_WITH_JUP_ACTION: Action;
        STAKE_WITH_SOLAYER_ACTION: Action;
        TRADE_ACTION: Action;
        TRANSFER_ACTION: Action;
        TRANSFER_FROM_MULTISIG_ACTION: Action;
        WALLET_ADDRESS_ACTION: Action;
    } = ...

    Type declaration

    • APPROVE_MULTISIG_PROPOSAL_ACTION: Action
    • BALANCE_ACTION: Action
    • CREATE_GIBWORK_TASK_ACTION: Action
    • CREATE_IMAGE_ACTION: Action
    • CREATE_MULTISIG_ACTION: Action
    • CREATE_MULTISIG_PROPOSAL_ACTION: Action
    • CREATE_ORCA_SINGLE_SIDED_WHIRLPOOL_ACTION: Action
    • DEPLOY_COLLECTION_ACTION: Action
    • DEPLOY_TOKEN_ACTION: Action
    • DEPOSIT_TO_MULTISIG_ACTION: Action
    • EXECUTE_MULTISIG_PROPOSAL_ACTION: Action
    • FETCH_PRICE_ACTION: Action
    • FLASH_CLOSE_TRADE_ACTION: Action
    • FLASH_OPEN_TRADE_ACTION: Action
    • GET_ALL_DOMAINS_TLDS_ACTION: Action
    • GET_ALL_REGISTERED_ALL_DOMAINS_ACTION: Action
    • GET_MAIN_ALL_DOMAINS_DOMAIN_ACTION: Action
    • GET_OWNED_ALL_DOMAINS_ACTION: Action
    • GET_OWNED_DOMAINS_FOR_TLD_ACTION: Action
    • GET_PRIMARY_DOMAIN_ACTION: Action
    • GET_TOKEN_DATA_ACTION: Action
    • GET_TPS_ACTION: Action
    • LAUNCH_PUMPFUN_TOKEN_ACTION: Action
    • LEND_ASSET_ACTION: Action
    • MINT_NFT_ACTION: Action
    • PYTH_FETCH_PRICE_ACTION: Action
    • RAYDIUM_CREATE_AMM_V4_ACTION: Action
    • RAYDIUM_CREATE_CPMM_ACTION: Action
    • REGISTER_DOMAIN_ACTION: Action
    • REJECT_MULTISIG_PROPOSAL_ACTION: Action
    • REQUEST_FUNDS_ACTION: Action
    • RESOLVE_DOMAIN_ACTION: Action
    • RESOLVE_SOL_DOMAIN_ACTION: Action
    • STAKE_WITH_JUP_ACTION: Action
    • STAKE_WITH_SOLAYER_ACTION: Action
    • TRADE_ACTION: Action
    • TRANSFER_ACTION: Action
    • TRANSFER_FROM_MULTISIG_ACTION: Action
    • WALLET_ADDRESS_ACTION: Action
    diff --git a/guides/add_your_own_tool.md b/guides/add_your_own_tool.md index ba7a7c6..b5c0a97 100644 --- a/guides/add_your_own_tool.md +++ b/guides/add_your_own_tool.md @@ -5,11 +5,13 @@ Extending the **Solana Agent Kit** with custom tools allows you to add specializ ## Overview 1. Create a new tool file -2. Implement the tool class -3. Implement supporting functions in SolanaAgentKit -4. Export the new tool -5. Integrate the tool into the agent -6. Use the custom tool +2. Export the new tool +3. Add supporting functions in SolanaAgentKit +4. Implement the Langchain tool class +5. Export the Langchain tool +6. Define Action class for given tool +7. Export Action +8. Use the custom tool ## Implementation Guide @@ -17,7 +19,29 @@ Extending the **Solana Agent Kit** with custom tools allows you to add specializ Create a new TypeScript file in the `src/tools/` directory for your tool (e.g., `custom_tool.ts`). -### 2. Implement the Tool Class + +### 2. Export the Tool +> `src/tools/index.ts` +```typescript:src/tools/index.ts +export * from "./request_faucet_funds"; +export * from "./deploy_token"; +export * from "./custom_tool"; // Add your new tool +``` + +### 3. Add Supporting Functions to SolanaAgentKit +> `src/agent/index.ts` +```typescript:src/agent/index.ts +export class SolanaAgentKit { + // ... existing code ... + + async customFunction(input: string): Promise { + // Implement your custom functionality + return `Processed input: ${input}`; + } +} +``` + +### 4. Implement the Langchain Tool Class > `src/langchain/index.ts` ```typescript:src/langchain/index.ts import { Tool } from "langchain/tools"; @@ -50,31 +74,10 @@ export class CustomTool extends Tool { } ``` -### 3. Add Supporting Functions to SolanaAgentKit -> `src/agent/index.ts` -```typescript:src/agent/index.ts -export class SolanaAgentKit { - // ... existing code ... - - async customFunction(input: string): Promise { - // Implement your custom functionality - return `Processed input: ${input}`; - } -} -``` - -### 4. Export the Tool -> `src/tools/index.ts` -```typescript:src/tools/index.ts -export * from "./request_faucet_funds"; -export * from "./deploy_token"; -export * from "./custom_tool"; // Add your new tool -``` - -### 5. Integrate with Agent +### 5. Export Langchain Tool > `src/langchain/index.ts` ```typescript:src/langchain/index.ts -import { CustomTool } from "../tools/custom_tool"; +import { CustomTool } from "../tools"; export function createSolanaTools(agent: SolanaAgentKit) { return [ @@ -84,7 +87,53 @@ export function createSolanaTools(agent: SolanaAgentKit) { } ``` -### 6. Usage Example +### 6. Define Action class for given tool + +> `src/actions/custom_action.ts` +```typescript:src/actions/custom_action.ts +import { Action } from "../types/action"; +import { SolanaAgentKit } from "../agent"; +import { z } from "zod"; +import { custom_tool } from "../tools"; + +const customAction: Action = { + name: "CUSTOM_ACTION", + similes: ["custom tool"], + description: "Description of what the custom tool does.", + examples: [ + { + input: {}, + output: { + status: "success", + message: "Custom tool executed successfully", + data: result, + }, + explanation: "Custom tool executed successfully", + }, + ], + schema: z.object({ + input: z.string(), + }), + handler: async (agent: SolanaAgentKit, input: Record) => { + const result = await agent.customFunction(input); + return result; + }, +}; +``` + +### 7. Export Action +> `src/actions/index.ts` +```typescript:src/actions/index.ts +export * from "./balance"; +export * from "./custom_action"; + +export const ACTIONS = { + // ... existing actions ... + CUSTOM_ACTION: customAction, +} +``` + +### 8. Usage Example Add a code example in the `README.md` file. @@ -106,7 +155,7 @@ if (customTool) { } // or alternatively -const result = await agent.customFunction("your-input"); // assuming you have a `customFunction` method in SolanaAgentKit +const result = await agent.customFunction("your-input"); // assuming you have implemented `customFunction` method in SolanaAgentKit console.log(result); ``` @@ -174,6 +223,43 @@ export class SolanaAgentKit { } ``` +Add Action for given tool: +> `src/actions/fetch_token_price.ts` +```typescript:src/actions/fetch_token_price.ts +import { Action } from "../types/action"; +import { SolanaAgentKit } from "../agent"; +import { z } from "zod"; +import { fetch_token_price } from "../tools"; + +const fetchTokenPriceAction: Action = { + name: "FETCH_TOKEN_PRICE", + similes: ["fetch token price"], + description: "Fetches the current price of a specified token.", + examples: [ + { + input: { tokenSymbol: "SOL" }, + output: { + status: "success", + message: "Price fetched successfully for SOL.", + price: 150, + }, + explanation: "Fetch the current price of SOL token in USDC", + }, + ], + schema: z.object({ + tokenSymbol: z.string().describe("The symbol of the token to fetch the price for"), + }), + handler: async (agent: SolanaAgentKit, input: Record) => { + const price = await agent.getTokenPrice(input.tokenSymbol); + return { + status: "success", + price, + message: `Price fetched successfully for ${input.tokenSymbol}.`, + }; + }, +}; +``` + Then it can be used as such: ```typescript diff --git a/src/actions/index.ts b/src/actions/index.ts index e878aa1..96f40ab 100644 --- a/src/actions/index.ts +++ b/src/actions/index.ts @@ -30,6 +30,13 @@ import launchPumpfunTokenAction from "./pumpfun/launchPumpfunToken"; import getWalletAddressAction from "./agent/getWalletAddress"; import flashOpenTradeAction from "./flash/flashOpenTrade"; import flashCloseTradeAction from "./flash/flashCloseTrade"; +import createMultisigAction from "./squads/createMultisig"; +import approveMultisigProposalAction from "./squads/approveMultisigProposal"; +import createMultisigProposalAction from "./squads/createMultisigProposal"; +import depositToMultisigAction from "./squads/depositToMultisigTreasury"; +import executeMultisigProposalAction from "./squads/executeMultisigProposal"; +import rejectMultisigProposalAction from "./squads/rejectMultisigProposal"; +import transferFromMultisigAction from "./squads/transferFromMultisigTreasury"; export const ACTIONS = { WALLET_ADDRESS_ACTION: getWalletAddressAction, @@ -65,6 +72,13 @@ export const ACTIONS = { LAUNCH_PUMPFUN_TOKEN_ACTION: launchPumpfunTokenAction, FLASH_OPEN_TRADE_ACTION: flashOpenTradeAction, FLASH_CLOSE_TRADE_ACTION: flashCloseTradeAction, + CREATE_MULTISIG_ACTION: createMultisigAction, + DEPOSIT_TO_MULTISIG_ACTION: depositToMultisigAction, + TRANSFER_FROM_MULTISIG_ACTION: transferFromMultisigAction, + CREATE_MULTISIG_PROPOSAL_ACTION: createMultisigProposalAction, + APPROVE_MULTISIG_PROPOSAL_ACTION: approveMultisigProposalAction, + REJECT_MULTISIG_PROPOSAL_ACTION: rejectMultisigProposalAction, + EXECUTE_MULTISIG_PROPOSAL_ACTION: executeMultisigProposalAction, }; export type { Action, ActionExample, Handler } from "../types/action"; diff --git a/src/actions/squads/approveMultisigProposal.ts b/src/actions/squads/approveMultisigProposal.ts new file mode 100644 index 0000000..f0147dc --- /dev/null +++ b/src/actions/squads/approveMultisigProposal.ts @@ -0,0 +1,50 @@ +import { Action } from "../../types/action"; +import { SolanaAgentKit } from "../../agent"; +import { z } from "zod"; +import { multisig_approve_proposal } from "../../tools"; + +const approveMultisigProposalAction: Action = { + name: "APPROVE_MULTISIG_PROPOSAL_ACTION", + similes: [ + "approve proposal", + "approve proposal to transfer funds", + "approve proposal to transfer funds from 2-of-2 multisig", + "approve proposal to transfer funds from 2-of-2 multisig account", + "approve proposal to transfer funds from 2-of-2 multisig account on Solana", + ], + description: `Approve a proposal to transfer funds from a 2-of-2 multisig account on Solana with the user and the agent, where both approvals will be required to run the transactions. + + Note: For one AI agent, only one 2-by-2 multisig can be created as it is pair-wise.`, + examples: [ + [ + { + input: { + transactionIndex: 0, + }, + output: { + status: "success", + message: "Proposal approved successfully", + transaction: "4xKpN2...", + transactionIndex: "0", + }, + explanation: + "Approve a proposal to transfer 1 SOL from 2-of-2 multisig account on Solana", + }, + ], + ], + schema: z.object({ + transactionIndex: z.number().optional(), + }), + handler: async (agent: SolanaAgentKit, input: Record) => { + const tx = await multisig_approve_proposal(agent, input.transactionIndex); + + return { + status: "success", + message: "Proposal approved successfully", + transaction: tx, + transactionIndex: input.transactionIndex.toString(), + }; + }, +}; + +export default approveMultisigProposalAction; diff --git a/src/actions/squads/createMultisig.ts b/src/actions/squads/createMultisig.ts new file mode 100644 index 0000000..aa0f38f --- /dev/null +++ b/src/actions/squads/createMultisig.ts @@ -0,0 +1,52 @@ +import { Action } from "../../types/action"; +import { SolanaAgentKit } from "../../agent"; +import { z } from "zod"; +import { create_squads_multisig } from "../../tools"; +import { PublicKey } from "@solana/web3.js"; + +const createMultisigAction: Action = { + name: "CREATE_MULTISIG_ACTION", + similes: [ + "create multisig", + "create squads multisig", + "create 2-by-2 multisig", + "create 2-of-2 multisig", + "create 2-of-2 multisig account", + "create 2-of-2 multisig account on Solana", + ], + description: `Create a 2-of-2 multisig account on Solana using Squads with the user and the agent, where both approvals will be required to run the transactions. + + Note: For one AI agent, only one 2-by-2 multisig can be created as it is pair-wise.`, + examples: [ + [ + { + input: { + creator: "7nE9GvcwsqzYxmJLSrYmSB1V1YoJWVK1KWzAcWAzjXkN", + }, + output: { + status: "success", + message: "2-by-2 multisig account created successfully", + signature: "4xKpN2...", + }, + explanation: "Create a 2-of-2 multisig account on Solana", + }, + ], + ], + schema: z.object({ + creator: z.string(), + }), + handler: async (agent: SolanaAgentKit, input: Record) => { + const multisig = await create_squads_multisig( + agent, + new PublicKey(input.creator as string), + ); + + return { + status: "success", + message: "2-by-2 multisig account created successfully", + signature: multisig, + }; + }, +}; + +export default createMultisigAction; diff --git a/src/actions/squads/createMultisigProposal.ts b/src/actions/squads/createMultisigProposal.ts new file mode 100644 index 0000000..5d747bd --- /dev/null +++ b/src/actions/squads/createMultisigProposal.ts @@ -0,0 +1,55 @@ +import { Action } from "../../types/action"; +import { SolanaAgentKit } from "../../agent"; +import { z } from "zod"; +import { multisig_create_proposal } from "../../tools"; + +const createMultisigProposalAction: Action = { + name: "CREATE_MULTISIG_PROPOSAL_ACTION", + similes: [ + "create proposal", + "create proposal to transfer funds", + "create proposal to transfer funds from 2-of-2 multisig", + "create proposal to transfer funds from 2-of-2 multisig account", + "create proposal to transfer funds from 2-of-2 multisig account on Solana", + ], + description: `Create a proposal to transfer funds from a 2-of-2 multisig account on Solana with the user and the agent, where both approvals will be required to run the transactions. + + If transactionIndex is not provided, the latest index will automatically be fetched and used.`, + examples: [ + [ + { + input: { + transactionIndex: 0, + }, + output: { + status: "success", + message: "Proposal created successfully", + transaction: "4xKpN2...", + transactionIndex: "0", + }, + explanation: + "Create a proposal to transfer 1 SOL from 2-of-2 multisig account on Solana", + }, + ], + ], + schema: z.object({ + transactionIndex: z.number().optional(), + }), + handler: async (agent: SolanaAgentKit, input: Record) => { + const transactionIndex = + input.transactionIndex !== undefined + ? Number(input.transactionIndex) + : undefined; + + const multisig = await multisig_create_proposal(agent, transactionIndex); + + return { + status: "success", + message: "Proposal created successfully", + transaction: multisig, + transactionIndex: transactionIndex, + }; + }, +}; + +export default createMultisigProposalAction; diff --git a/src/actions/squads/depositToMultisigTreasury.ts b/src/actions/squads/depositToMultisigTreasury.ts new file mode 100644 index 0000000..40c366f --- /dev/null +++ b/src/actions/squads/depositToMultisigTreasury.ts @@ -0,0 +1,49 @@ +import { Action } from "../../types/action"; +import { SolanaAgentKit } from "../../agent"; +import { z } from "zod"; +import { multisig_deposit_to_treasury } from "../../tools"; + +const depositToMultisigAction: Action = { + name: "DEPOSIT_TO_MULTISIG_ACTION", + similes: [ + "deposit to multisig", + "deposit to squads multisig", + "deposit to 2-of-2 multisig account", + "deposit to 2-of-2 multisig account on Solana", + "deposit SOL to 2-of-2 multisig", + "deposit SPL tokens to 2-of-2 multisig", + ], + description: `Deposit funds to a 2-of-2 multisig account on Solana with the user and the agent, where both approvals will be required to run the transactions.`, + examples: [ + [ + { + input: { + amount: 1, + }, + output: { + status: "success", + message: "Funds deposited to 2-by-2 multisig account successfully", + signature: "4xKpN2...", + }, + explanation: "Deposit 1 SOL to 2-of-2 multisig account on Solana", + }, + ], + ], + schema: z.object({ + amount: z.number().min(0, "Amount must be greater than 0"), + }), + handler: async (agent: SolanaAgentKit, input: Record) => { + const multisig = await multisig_deposit_to_treasury( + agent, + input.amount as number, + ); + + return { + status: "success", + message: "Funds deposited to 2-by-2 multisig account successfully", + signature: multisig, + }; + }, +}; + +export default depositToMultisigAction; diff --git a/src/actions/squads/executeMultisigProposal.ts b/src/actions/squads/executeMultisigProposal.ts new file mode 100644 index 0000000..fed07da --- /dev/null +++ b/src/actions/squads/executeMultisigProposal.ts @@ -0,0 +1,53 @@ +import { Action } from "../../types/action"; +import { SolanaAgentKit } from "../../agent"; +import { z } from "zod"; +import { multisig_execute_proposal } from "../../tools"; + +const executeMultisigProposalAction: Action = { + name: "EXECUTE_MULTISIG_PROPOSAL_ACTION", + similes: [ + "execute proposal", + "execute proposal to transfer funds", + "execute proposal to transfer funds from 2-of-2 multisig", + "execute proposal to transfer funds from 2-of-2 multisig account", + "execute proposal to transfer funds from 2-of-2 multisig account on Solana", + ], + description: `Execute a proposal to transfer funds from a 2-of-2 multisig account on Solana with the user and the agent, where both approvals will be required to run the transactions.`, + examples: [ + [ + { + input: { + proposalIndex: 0, + }, + output: { + status: "success", + message: "Proposal executed successfully", + transaction: "4xKpN2...", + proposalIndex: "0", + }, + explanation: + "Execute a proposal to transfer 1 SOL from 2-of-2 multisig account on Solana", + }, + ], + ], + schema: z.object({ + proposalIndex: z.number().optional(), + }), + handler: async (agent: SolanaAgentKit, input: Record) => { + const proposalIndex = + input.proposalIndex !== undefined + ? Number(input.proposalIndex) + : undefined; + + const multisig = await multisig_execute_proposal(agent, proposalIndex); + + return { + status: "success", + message: "Proposal executed successfully", + transaction: multisig, + proposalIndex, + }; + }, +}; + +export default executeMultisigProposalAction; diff --git a/src/actions/squads/rejectMultisigProposal.ts b/src/actions/squads/rejectMultisigProposal.ts new file mode 100644 index 0000000..51329b2 --- /dev/null +++ b/src/actions/squads/rejectMultisigProposal.ts @@ -0,0 +1,53 @@ +import { Action } from "../../types/action"; +import { SolanaAgentKit } from "../../agent"; +import { z } from "zod"; +import { multisig_reject_proposal } from "../../tools"; + +const rejectMultisigProposalAction: Action = { + name: "REJECT_MULTISIG_PROPOSAL_ACTION", + similes: [ + "reject proposal", + "reject proposal to transfer funds", + "reject proposal to transfer funds from 2-of-2 multisig", + "reject proposal to transfer funds from 2-of-2 multisig account", + "reject proposal to transfer funds from 2-of-2 multisig account on Solana", + ], + description: `Reject a proposal to transfer funds from a 2-of-2 multisig account on Solana with the user and the agent, where both approvals will be required to run the transactions.`, + examples: [ + [ + { + input: { + proposalIndex: 0, + }, + output: { + status: "success", + message: "Proposal rejected successfully", + transaction: "4xKpN2...", + proposalIndex: "0", + }, + explanation: + "Reject a proposal to transfer 1 SOL from 2-of-2 multisig account on Solana", + }, + ], + ], + schema: z.object({ + proposalIndex: z.number().optional(), + }), + handler: async (agent: SolanaAgentKit, input: Record) => { + const proposalIndex = + input.proposalIndex !== undefined + ? Number(input.proposalIndex) + : undefined; + + const tx = await multisig_reject_proposal(agent, proposalIndex); + + return { + status: "success", + message: "Proposal rejected successfully", + transaction: tx, + proposalIndex, + }; + }, +}; + +export default rejectMultisigProposalAction; diff --git a/src/actions/squads/transferFromMultisigTreasury.ts b/src/actions/squads/transferFromMultisigTreasury.ts new file mode 100644 index 0000000..4e144a7 --- /dev/null +++ b/src/actions/squads/transferFromMultisigTreasury.ts @@ -0,0 +1,56 @@ +import { Action } from "../../types/action"; +import { SolanaAgentKit } from "../../agent"; +import { z } from "zod"; +import { multisig_transfer_from_treasury } from "../../tools"; +import { PublicKey } from "@solana/web3.js"; + +const transferFromMultisigAction: Action = { + name: "TRANSFER_FROM_MULTISIG_ACTION", + similes: [ + "transfer from multisig", + "transfer from squads multisig", + "transfer SOL from 2-by-2 multisig", + "transfer from 2-of-2 multisig account", + "transfer from 2-of-2 multisig account on Solana", + ], + description: `Create a transaction to transfer funds from a 2-of-2 multisig account on Solana using Squads with the user and the agent, where both approvals will be required to run the transactions.`, + examples: [ + [ + { + input: { + amount: 1, + recipient: "7nE9GvcwsqzYxmJLSrYmSB1V1YoJWVK1KWzAcWAzjXkN", + }, + output: { + status: "success", + message: "Transaction added to 2-by-2 multisig account successfully", + transaction: "4xKpN2...", + amount: "1", + recipient: "7nE9GvcwsqzYxmJLSrYmSB1V1YoJWVK1KWzAcWAzjXkN", + }, + explanation: "Transfer 1 SOL from 2-of-2 multisig account on Solana", + }, + ], + ], + schema: z.object({ + amount: z.number().min(0, "Amount must be greater than 0"), + recipient: z.string(), + }), + handler: async (agent: SolanaAgentKit, input: Record) => { + const multisig = await multisig_transfer_from_treasury( + agent, + input.amount as number, + new PublicKey(input.recipient as string), + ); + + return { + status: "success", + message: "Transaction added to 2-by-2 multisig account successfully", + transaction: multisig, + amount: input.amount, + recipient: input.recipient, + }; + }, +}; + +export default transferFromMultisigAction; diff --git a/src/agent/index.ts b/src/agent/index.ts index 25037c9..6ebc6bd 100644 --- a/src/agent/index.ts +++ b/src/agent/index.ts @@ -2,8 +2,12 @@ import { Connection, Keypair, PublicKey } from "@solana/web3.js"; import { BN } from "@coral-xyz/anchor"; import bs58 from "bs58"; import Decimal from "decimal.js"; +import { + CreateCollectionOptions, + CreateSingleOptions, + StoreInitOptions, +} from "@3land/listings-sdk/dist/types/implementation/implementationTypes"; import { DEFAULT_OPTIONS } from "../constants"; -import { Config, TokenCheck } from "../types"; import { deploy_collection, deploy_token, @@ -63,8 +67,19 @@ import { fetchPythPriceFeedID, flashOpenTrade, flashCloseTrade, -} from "../tools/"; + createCollection, + createSingle, + multisig_transfer_from_treasury, + create_squads_multisig, + multisig_create_proposal, + multisig_deposit_to_treasury, + multisig_reject_proposal, + multisig_approve_proposal, + multisig_execute_proposal, +} from "../tools"; import { + Config, + TokenCheck, CollectionDeployment, CollectionOptions, GibworkCreateTaskReponse, @@ -76,22 +91,6 @@ import { FlashTradeParams, FlashCloseTradeParams, } from "../types"; -import { - createCollection, - createSingle, -} from "../tools/3land/create_3land_collectible"; -import { - CreateCollectionOptions, - CreateSingleOptions, - StoreInitOptions, -} from "@3land/listings-sdk/dist/types/implementation/implementationTypes"; -import { create_squads_multisig } from "../tools/squads_multisig/create_multisig"; -import { deposit_to_multisig } from "../tools/squads_multisig/deposit_to_multisig"; -import { transfer_from_multisig } from "../tools/squads_multisig/transfer_from_multisig"; -import { create_proposal } from "../tools/squads_multisig/create_proposal"; -import { approve_proposal } from "../tools/squads_multisig/approve_proposal"; -import { execute_transaction } from "../tools/squads_multisig/execute_proposal"; -import { reject_proposal } from "../tools/squads_multisig/reject_proposal"; /** * Main class for interacting with Solana blockchain @@ -620,7 +619,7 @@ export class SolanaAgentKit { vaultIndex: number = 0, mint?: PublicKey, ): Promise { - return deposit_to_multisig(this, amount, vaultIndex, mint); + return multisig_deposit_to_treasury(this, amount, vaultIndex, mint); } async transferFromMultisig( @@ -629,30 +628,30 @@ export class SolanaAgentKit { vaultIndex: number = 0, mint?: PublicKey, ): Promise { - return transfer_from_multisig(this, amount, to, vaultIndex, mint); + return multisig_transfer_from_treasury(this, amount, to, vaultIndex, mint); } async createMultisigProposal( transactionIndex?: number | bigint, ): Promise { - return create_proposal(this, transactionIndex); + return multisig_create_proposal(this, transactionIndex); } async approveMultisigProposal( transactionIndex?: number | bigint, ): Promise { - return approve_proposal(this, transactionIndex); + return multisig_approve_proposal(this, transactionIndex); } async rejectMultisigProposal( transactionIndex?: number | bigint, ): Promise { - return reject_proposal(this, transactionIndex); + return multisig_reject_proposal(this, transactionIndex); } async executeMultisigTransaction( transactionIndex?: number | bigint, ): Promise { - return execute_transaction(this, transactionIndex); + return multisig_execute_proposal(this, transactionIndex); } } diff --git a/src/langchain/index.ts b/src/langchain/index.ts index c2e5aff..707a5d2 100644 --- a/src/langchain/index.ts +++ b/src/langchain/index.ts @@ -23,6 +23,7 @@ export * from "./3land"; export * from "./tiplink"; export * from "./sns"; export * from "./lightprotocol"; +export * from "./squads"; import { SolanaAgentKit } from "../agent"; import { @@ -83,6 +84,13 @@ import { SolanaPerpCloseTradeTool, SolanaFlashOpenTrade, SolanaFlashCloseTrade, + SolanaCreate2by2Multisig, + SolanaDepositTo2by2Multisig, + SolanaTransferFrom2by2Multisig, + SolanaCreateProposal2by2Multisig, + SolanaApproveProposal2by2Multisig, + SolanaExecuteProposal2by2Multisig, + SolanaRejectProposal2by2Multisig, } from "./index"; export function createSolanaTools(solanaKit: SolanaAgentKit) { @@ -144,5 +152,12 @@ export function createSolanaTools(solanaKit: SolanaAgentKit) { new SolanaPerpCloseTradeTool(solanaKit), new SolanaFlashOpenTrade(solanaKit), new SolanaFlashCloseTrade(solanaKit), + new SolanaCreate2by2Multisig(solanaKit), + new SolanaCreateProposal2by2Multisig(solanaKit), + new SolanaApproveProposal2by2Multisig(solanaKit), + new SolanaRejectProposal2by2Multisig(solanaKit), + new SolanaExecuteProposal2by2Multisig(solanaKit), + new SolanaDepositTo2by2Multisig(solanaKit), + new SolanaTransferFrom2by2Multisig(solanaKit), ]; } diff --git a/src/langchain/squads_multisig/approve_proposal.ts b/src/langchain/squads/approve_proposal.ts similarity index 100% rename from src/langchain/squads_multisig/approve_proposal.ts rename to src/langchain/squads/approve_proposal.ts diff --git a/src/langchain/squads_multisig/create_multisig.ts b/src/langchain/squads/create_multisig.ts similarity index 100% rename from src/langchain/squads_multisig/create_multisig.ts rename to src/langchain/squads/create_multisig.ts diff --git a/src/langchain/squads_multisig/create_proposal.ts b/src/langchain/squads/create_proposal.ts similarity index 100% rename from src/langchain/squads_multisig/create_proposal.ts rename to src/langchain/squads/create_proposal.ts diff --git a/src/langchain/squads_multisig/deposit_to_multisig.ts b/src/langchain/squads/deposit_to_multisig.ts similarity index 100% rename from src/langchain/squads_multisig/deposit_to_multisig.ts rename to src/langchain/squads/deposit_to_multisig.ts diff --git a/src/langchain/squads_multisig/execute_proposal.ts b/src/langchain/squads/execute_proposal.ts similarity index 100% rename from src/langchain/squads_multisig/execute_proposal.ts rename to src/langchain/squads/execute_proposal.ts diff --git a/src/langchain/squads_multisig/index.ts b/src/langchain/squads/index.ts similarity index 100% rename from src/langchain/squads_multisig/index.ts rename to src/langchain/squads/index.ts diff --git a/src/langchain/squads_multisig/reject_proposal.ts b/src/langchain/squads/reject_proposal.ts similarity index 100% rename from src/langchain/squads_multisig/reject_proposal.ts rename to src/langchain/squads/reject_proposal.ts diff --git a/src/langchain/squads_multisig/transfer_from_multisig.ts b/src/langchain/squads/transfer_from_multisig.ts similarity index 100% rename from src/langchain/squads_multisig/transfer_from_multisig.ts rename to src/langchain/squads/transfer_from_multisig.ts diff --git a/src/tools/3land/create_3land_collectible.ts b/src/tools/3land/create_3land_collectible.ts index 68bf80a..29295ab 100644 --- a/src/tools/3land/create_3land_collectible.ts +++ b/src/tools/3land/create_3land_collectible.ts @@ -55,15 +55,3 @@ export async function createSingle( throw new Error(`Single edition creation failed: ${error.message}`); } } - -/** - * Buy a single edition on 3Land - * @param - * @returns - */ -// export async function buySingle() { -// try { -// } catch (error: any) { -// throw new Error(`Buying single edition failed: ${error.message}`); -// } -// } diff --git a/src/tools/index.ts b/src/tools/index.ts index 6ea6443..6a546e9 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -22,4 +22,4 @@ export * from "./tensor"; export * from "./3land"; export * from "./tiplink"; export * from "./lightprotocol"; -export * from "./squads_multisig"; +export * from "./squads"; diff --git a/src/tools/squads_multisig/approve_proposal.ts b/src/tools/squads/approve_proposal.ts similarity index 97% rename from src/tools/squads_multisig/approve_proposal.ts rename to src/tools/squads/approve_proposal.ts index 178f4d5..a827176 100644 --- a/src/tools/squads_multisig/approve_proposal.ts +++ b/src/tools/squads/approve_proposal.ts @@ -10,7 +10,7 @@ const { Multisig } = multisig.accounts; * @returns {Promise} - A promise that resolves to the transaction ID of the approved proposal. * @throws {Error} - Throws an error if the approval process fails. */ -export async function approve_proposal( +export async function multisig_approve_proposal( agent: SolanaAgentKit, transactionIndex?: number | bigint, ): Promise { diff --git a/src/tools/squads_multisig/create_multisig.ts b/src/tools/squads/create_multisig.ts similarity index 100% rename from src/tools/squads_multisig/create_multisig.ts rename to src/tools/squads/create_multisig.ts diff --git a/src/tools/squads_multisig/create_proposal.ts b/src/tools/squads/create_proposal.ts similarity index 97% rename from src/tools/squads_multisig/create_proposal.ts rename to src/tools/squads/create_proposal.ts index 4ff47e2..5d56060 100644 --- a/src/tools/squads_multisig/create_proposal.ts +++ b/src/tools/squads/create_proposal.ts @@ -10,7 +10,7 @@ const { Multisig } = multisig.accounts; * @returns {Promise} - The transaction ID of the created proposal. * @throws {Error} - Throws an error if the proposal creation fails. */ -export async function create_proposal( +export async function multisig_create_proposal( agent: SolanaAgentKit, transactionIndex?: number | bigint, ): Promise { diff --git a/src/tools/squads_multisig/deposit_to_multisig.ts b/src/tools/squads/deposit_to_treasury.ts similarity index 98% rename from src/tools/squads_multisig/deposit_to_multisig.ts rename to src/tools/squads/deposit_to_treasury.ts index e2b23ad..a5e9419 100644 --- a/src/tools/squads_multisig/deposit_to_multisig.ts +++ b/src/tools/squads/deposit_to_treasury.ts @@ -17,7 +17,7 @@ import * as multisig from "@sqds/multisig"; * @param mint Optional mint address for SPL tokens * @returns Transaction signature */ -export async function deposit_to_multisig( +export async function multisig_deposit_to_treasury( agent: SolanaAgentKit, amount: number, vaultIndex?: number, diff --git a/src/tools/squads_multisig/execute_proposal.ts b/src/tools/squads/execute_proposal.ts similarity index 97% rename from src/tools/squads_multisig/execute_proposal.ts rename to src/tools/squads/execute_proposal.ts index 60c21f4..6b0bba3 100644 --- a/src/tools/squads_multisig/execute_proposal.ts +++ b/src/tools/squads/execute_proposal.ts @@ -10,7 +10,7 @@ const { Multisig } = multisig.accounts; * @returns {Promise} - A promise that resolves to the transaction signature string. * @throws {Error} - Throws an error if the transaction execution fails. */ -export async function execute_transaction( +export async function multisig_execute_proposal( agent: SolanaAgentKit, transactionIndex?: number | bigint, ): Promise { diff --git a/src/tools/squads_multisig/index.ts b/src/tools/squads/index.ts similarity index 68% rename from src/tools/squads_multisig/index.ts rename to src/tools/squads/index.ts index 5ceac36..183991a 100644 --- a/src/tools/squads_multisig/index.ts +++ b/src/tools/squads/index.ts @@ -1,7 +1,7 @@ -export * from "./approve_proposal"; export * from "./create_multisig"; export * from "./create_proposal"; -export * from "./deposit_to_multisig"; +export * from "./approve_proposal"; +export * from "./deposit_to_treasury"; export * from "./execute_proposal"; export * from "./reject_proposal"; -export * from "./transfer_from_multisig"; +export * from "./transfer_from_treasury"; diff --git a/src/tools/squads_multisig/reject_proposal.ts b/src/tools/squads/reject_proposal.ts similarity index 97% rename from src/tools/squads_multisig/reject_proposal.ts rename to src/tools/squads/reject_proposal.ts index 1736b6d..4ee1fdd 100644 --- a/src/tools/squads_multisig/reject_proposal.ts +++ b/src/tools/squads/reject_proposal.ts @@ -10,7 +10,7 @@ const { Multisig } = multisig.accounts; * @returns A promise that resolves to the transaction ID of the rejection transaction. * @throws Will throw an error if the transaction fails. */ -export async function reject_proposal( +export async function multisig_reject_proposal( agent: SolanaAgentKit, transactionIndex?: number | bigint, ): Promise { diff --git a/src/tools/squads_multisig/transfer_from_multisig.ts b/src/tools/squads/transfer_from_treasury.ts similarity index 98% rename from src/tools/squads_multisig/transfer_from_multisig.ts rename to src/tools/squads/transfer_from_treasury.ts index 6c9c35b..030d101 100644 --- a/src/tools/squads_multisig/transfer_from_multisig.ts +++ b/src/tools/squads/transfer_from_treasury.ts @@ -23,7 +23,7 @@ const { Multisig } = multisig.accounts; * @param mint - Optional mint address for SPL tokens. * @returns Transaction signature. */ -export async function transfer_from_multisig( +export async function multisig_transfer_from_treasury( agent: SolanaAgentKit, amount: number, to: PublicKey,