UNPKG

@solana/rpc-api

Version:

Defines all default Solana RPC methods as types

1 lines • 18.1 kB
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.node.mjs","sourcesContent":["/**\n * This package contains types that describe the [methods](https://solana.com/docs/rpc/http) of the\n * Solana JSON RPC API, and utilities for creating a {@link RpcApi} implementation with sensible\n * defaults. It can be used standalone, but it is also exported as part of Kit\n * [`@solana/kit`](https://github.com/anza-xyz/kit/tree/main/packages/kit).\n *\n * @example\n * Each RPC method is described in terms of a TypeScript type of the following form:\n *\n * ```ts\n * type ExampleApi = {\n * getSomething(address: Address): Something;\n * };\n * ```\n *\n * A {@link RpcApi} that implements `ExampleApi` will ultimately expose its defined methods on any\n * {@link Rpc} that uses it.\n *\n * ```ts\n * const rpc: Rpc<ExampleApi> = createExampleRpc(/* ... *\\/);\n * const something: Something = await rpc.getSomething(address('95DpK3y3GF7U8s1k4EvZ7xqyeCkhsHeZaE97iZpHUGMN')).send();\n * ```\n *\n * @packageDocumentation\n */\nimport { createJsonRpcApi, RpcApi } from '@solana/rpc-spec';\nimport {\n AllowedNumericKeypaths,\n getDefaultRequestTransformerForSolanaRpc,\n getDefaultResponseTransformerForSolanaRpc,\n innerInstructionsConfigs,\n jsonParsedAccountsConfigs,\n jsonParsedTokenAccountsConfigs,\n KEYPATH_WILDCARD,\n messageConfig,\n RequestTransformerConfig,\n} from '@solana/rpc-transformers';\n\nimport { GetAccountInfoApi } from './getAccountInfo';\nimport { GetBalanceApi } from './getBalance';\nimport { GetBlockApi } from './getBlock';\nimport { GetBlockCommitmentApi } from './getBlockCommitment';\nimport { GetBlockHeightApi } from './getBlockHeight';\nimport { GetBlockProductionApi } from './getBlockProduction';\nimport { GetBlocksApi } from './getBlocks';\nimport { GetBlocksWithLimitApi } from './getBlocksWithLimit';\nimport { GetBlockTimeApi } from './getBlockTime';\nimport { GetClusterNodesApi } from './getClusterNodes';\nimport { GetEpochInfoApi } from './getEpochInfo';\nimport { GetEpochScheduleApi } from './getEpochSchedule';\nimport { GetFeeForMessageApi } from './getFeeForMessage';\nimport { GetFirstAvailableBlockApi } from './getFirstAvailableBlock';\nimport { GetGenesisHashApi } from './getGenesisHash';\nimport { GetHealthApi } from './getHealth';\nimport { GetHighestSnapshotSlotApi } from './getHighestSnapshotSlot';\nimport { GetIdentityApi } from './getIdentity';\nimport { GetInflationGovernorApi } from './getInflationGovernor';\nimport { GetInflationRateApi } from './getInflationRate';\nimport { GetInflationRewardApi } from './getInflationReward';\nimport { GetLargestAccountsApi } from './getLargestAccounts';\nimport { GetLatestBlockhashApi } from './getLatestBlockhash';\nimport { GetLeaderScheduleApi } from './getLeaderSchedule';\nimport { GetMaxRetransmitSlotApi } from './getMaxRetransmitSlot';\nimport { GetMaxShredInsertSlotApi } from './getMaxShredInsertSlot';\nimport { GetMinimumBalanceForRentExemptionApi } from './getMinimumBalanceForRentExemption';\nimport { GetMultipleAccountsApi } from './getMultipleAccounts';\nimport { GetProgramAccountsApi } from './getProgramAccounts';\nimport { GetRecentPerformanceSamplesApi } from './getRecentPerformanceSamples';\nimport { GetRecentPrioritizationFeesApi } from './getRecentPrioritizationFees';\nimport { GetSignaturesForAddressApi } from './getSignaturesForAddress';\nimport { GetSignatureStatusesApi } from './getSignatureStatuses';\nimport { GetSlotApi } from './getSlot';\nimport { GetSlotLeaderApi } from './getSlotLeader';\nimport { GetSlotLeadersApi } from './getSlotLeaders';\nimport { GetStakeMinimumDelegationApi } from './getStakeMinimumDelegation';\nimport { GetSupplyApi } from './getSupply';\nimport { GetTokenAccountBalanceApi } from './getTokenAccountBalance';\nimport { GetTokenAccountsByDelegateApi } from './getTokenAccountsByDelegate';\nimport { GetTokenAccountsByOwnerApi } from './getTokenAccountsByOwner';\nimport { GetTokenLargestAccountsApi } from './getTokenLargestAccounts';\nimport { GetTokenSupplyApi } from './getTokenSupply';\nimport { GetTransactionApi } from './getTransaction';\nimport { GetTransactionCountApi } from './getTransactionCount';\nimport { GetVersionApi } from './getVersion';\nimport { GetVoteAccountsApi } from './getVoteAccounts';\nimport { IsBlockhashValidApi } from './isBlockhashValid';\nimport { MinimumLedgerSlotApi } from './minimumLedgerSlot';\nimport { RequestAirdropApi } from './requestAirdrop';\nimport { SendTransactionApi } from './sendTransaction';\nimport { SimulateTransactionApi } from './simulateTransaction';\n\ntype SolanaRpcApiForAllClusters = GetAccountInfoApi &\n GetBalanceApi &\n GetBlockApi &\n GetBlockCommitmentApi &\n GetBlockHeightApi &\n GetBlockProductionApi &\n GetBlocksApi &\n GetBlocksWithLimitApi &\n GetBlockTimeApi &\n GetClusterNodesApi &\n GetEpochInfoApi &\n GetEpochScheduleApi &\n GetFeeForMessageApi &\n GetFirstAvailableBlockApi &\n GetGenesisHashApi &\n GetHealthApi &\n GetHighestSnapshotSlotApi &\n GetIdentityApi &\n GetInflationGovernorApi &\n GetInflationRateApi &\n GetInflationRewardApi &\n GetLargestAccountsApi &\n GetLatestBlockhashApi &\n GetLeaderScheduleApi &\n GetMaxRetransmitSlotApi &\n GetMaxShredInsertSlotApi &\n GetMinimumBalanceForRentExemptionApi &\n GetMultipleAccountsApi &\n GetProgramAccountsApi &\n GetRecentPerformanceSamplesApi &\n GetRecentPrioritizationFeesApi &\n GetSignaturesForAddressApi &\n GetSignatureStatusesApi &\n GetSlotApi &\n GetSlotLeaderApi &\n GetSlotLeadersApi &\n GetStakeMinimumDelegationApi &\n GetSupplyApi &\n GetTokenAccountBalanceApi &\n GetTokenAccountsByDelegateApi &\n GetTokenAccountsByOwnerApi &\n GetTokenLargestAccountsApi &\n GetTokenSupplyApi &\n GetTransactionApi &\n GetTransactionCountApi &\n GetVersionApi &\n GetVoteAccountsApi &\n IsBlockhashValidApi &\n MinimumLedgerSlotApi &\n SendTransactionApi &\n SimulateTransactionApi;\ntype SolanaRpcApiForTestClusters = RequestAirdropApi & SolanaRpcApiForAllClusters;\n/**\n * Represents the RPC methods available on test clusters.\n *\n * For instance, the test clusters support the {@link RequestAirdropApi} while mainnet does not.\n */\nexport type SolanaRpcApi = SolanaRpcApiForTestClusters;\n/**\n * Represents the RPC methods available on the devnet cluster.\n *\n * For instance, the devnet cluster supports the {@link RequestAirdropApi} while mainnet does not.\n */\nexport type SolanaRpcApiDevnet = SolanaRpcApiForTestClusters;\n/**\n * Represents the RPC methods available on the testnet cluster.\n *\n * For instance, the testnet cluster supports the {@link RequestAirdropApi} while mainnet does not.\n */\nexport type SolanaRpcApiTestnet = SolanaRpcApiForTestClusters;\n/**\n * Represents the RPC methods available on the mainnet cluster.\n *\n * For instance, the mainnet cluster does not support the {@link RequestAirdropApi} whereas test\n * clusters do.\n */\nexport type SolanaRpcApiMainnet = SolanaRpcApiForAllClusters;\n\nexport type {\n GetAccountInfoApi,\n GetBalanceApi,\n GetBlockApi,\n GetBlockCommitmentApi,\n GetBlockHeightApi,\n GetBlockProductionApi,\n GetBlocksApi,\n GetBlocksWithLimitApi,\n GetBlockTimeApi,\n GetClusterNodesApi,\n GetEpochInfoApi,\n GetEpochScheduleApi,\n GetFeeForMessageApi,\n GetFirstAvailableBlockApi,\n GetGenesisHashApi,\n GetHealthApi,\n GetHighestSnapshotSlotApi,\n GetIdentityApi,\n GetInflationGovernorApi,\n GetInflationRateApi,\n GetInflationRewardApi,\n GetLargestAccountsApi,\n GetLatestBlockhashApi,\n GetLeaderScheduleApi,\n GetMaxRetransmitSlotApi,\n GetMaxShredInsertSlotApi,\n GetMinimumBalanceForRentExemptionApi,\n GetMultipleAccountsApi,\n GetProgramAccountsApi,\n GetRecentPerformanceSamplesApi,\n GetRecentPrioritizationFeesApi,\n GetSignaturesForAddressApi,\n GetSignatureStatusesApi,\n GetSlotApi,\n GetSlotLeaderApi,\n GetSlotLeadersApi,\n GetStakeMinimumDelegationApi,\n GetSupplyApi,\n GetTokenAccountBalanceApi,\n GetTokenAccountsByDelegateApi,\n GetTokenAccountsByOwnerApi,\n GetTokenLargestAccountsApi,\n GetTokenSupplyApi,\n GetTransactionApi,\n GetTransactionCountApi,\n GetVersionApi,\n GetVoteAccountsApi,\n IsBlockhashValidApi,\n MinimumLedgerSlotApi,\n RequestAirdropApi,\n SendTransactionApi,\n SimulateTransactionApi,\n};\n\ntype Config = RequestTransformerConfig;\n\n/**\n * Creates a {@link RpcApi} implementation of the Solana JSON RPC API with some default behaviours.\n *\n * The default behaviours include:\n * - A transform that converts `bigint` inputs to `number` for compatibility with version 1.0 of the\n * Solana JSON RPC.\n * - A transform that calls the config's {@link Config.onIntegerOverflow | onIntegerOverflow}\n * handler whenever a `bigint` input would overflow a JavaScript IEEE 754 number. See\n * [this](https://github.com/solana-labs/solana-web3.js/issues/1116) GitHub issue for more\n * information.\n * - A transform that applies a default commitment wherever not specified\n */\nexport function createSolanaRpcApi<\n // eslint-disable-next-line @typescript-eslint/no-duplicate-type-constituents\n TRpcMethods extends SolanaRpcApi | SolanaRpcApiDevnet | SolanaRpcApiMainnet | SolanaRpcApiTestnet = SolanaRpcApi,\n>(config?: Config): RpcApi<TRpcMethods> {\n return createJsonRpcApi<TRpcMethods>({\n requestTransformer: getDefaultRequestTransformerForSolanaRpc(config),\n responseTransformer: getDefaultResponseTransformerForSolanaRpc({\n allowedNumericKeyPaths: getAllowedNumericKeypaths(),\n }),\n });\n}\n\nlet memoizedKeypaths: AllowedNumericKeypaths<RpcApi<SolanaRpcApi>>;\n\n/**\n * These are keypaths at the end of which you will find a numeric value that should *not* be upcast\n * to a `bigint`. These are values that are legitimately defined as `u8` or `usize` on the backend.\n */\nfunction getAllowedNumericKeypaths(): AllowedNumericKeypaths<RpcApi<SolanaRpcApi>> {\n if (!memoizedKeypaths) {\n memoizedKeypaths = {\n getAccountInfo: jsonParsedAccountsConfigs.map(c => ['value', ...c]),\n getBlock: [\n ['transactions', KEYPATH_WILDCARD, 'meta', 'preTokenBalances', KEYPATH_WILDCARD, 'accountIndex'],\n [\n 'transactions',\n KEYPATH_WILDCARD,\n 'meta',\n 'preTokenBalances',\n KEYPATH_WILDCARD,\n 'uiTokenAmount',\n 'decimals',\n ],\n ['transactions', KEYPATH_WILDCARD, 'meta', 'postTokenBalances', KEYPATH_WILDCARD, 'accountIndex'],\n [\n 'transactions',\n KEYPATH_WILDCARD,\n 'meta',\n 'postTokenBalances',\n KEYPATH_WILDCARD,\n 'uiTokenAmount',\n 'decimals',\n ],\n ['transactions', KEYPATH_WILDCARD, 'meta', 'rewards', KEYPATH_WILDCARD, 'commission'],\n ...innerInstructionsConfigs.map(c => [\n 'transactions',\n KEYPATH_WILDCARD,\n 'meta',\n 'innerInstructions',\n KEYPATH_WILDCARD,\n ...c,\n ]),\n ...messageConfig.map(c => ['transactions', KEYPATH_WILDCARD, 'transaction', 'message', ...c] as const),\n ['rewards', KEYPATH_WILDCARD, 'commission'],\n ],\n getClusterNodes: [\n [KEYPATH_WILDCARD, 'featureSet'],\n [KEYPATH_WILDCARD, 'shredVersion'],\n ],\n getInflationGovernor: [['initial'], ['foundation'], ['foundationTerm'], ['taper'], ['terminal']],\n getInflationRate: [['foundation'], ['total'], ['validator']],\n getInflationReward: [[KEYPATH_WILDCARD, 'commission']],\n getMultipleAccounts: jsonParsedAccountsConfigs.map(c => ['value', KEYPATH_WILDCARD, ...c]),\n getProgramAccounts: jsonParsedAccountsConfigs.flatMap(c => [\n ['value', KEYPATH_WILDCARD, 'account', ...c],\n [KEYPATH_WILDCARD, 'account', ...c],\n ]),\n getRecentPerformanceSamples: [[KEYPATH_WILDCARD, 'samplePeriodSecs']],\n getTokenAccountBalance: [\n ['value', 'decimals'],\n ['value', 'uiAmount'],\n ],\n getTokenAccountsByDelegate: jsonParsedTokenAccountsConfigs.map(c => [\n 'value',\n KEYPATH_WILDCARD,\n 'account',\n ...c,\n ]),\n getTokenAccountsByOwner: jsonParsedTokenAccountsConfigs.map(c => [\n 'value',\n KEYPATH_WILDCARD,\n 'account',\n ...c,\n ]),\n getTokenLargestAccounts: [\n ['value', KEYPATH_WILDCARD, 'decimals'],\n ['value', KEYPATH_WILDCARD, 'uiAmount'],\n ],\n getTokenSupply: [\n ['value', 'decimals'],\n ['value', 'uiAmount'],\n ],\n getTransaction: [\n ['meta', 'preTokenBalances', KEYPATH_WILDCARD, 'accountIndex'],\n ['meta', 'preTokenBalances', KEYPATH_WILDCARD, 'uiTokenAmount', 'decimals'],\n ['meta', 'postTokenBalances', KEYPATH_WILDCARD, 'accountIndex'],\n ['meta', 'postTokenBalances', KEYPATH_WILDCARD, 'uiTokenAmount', 'decimals'],\n ['meta', 'rewards', KEYPATH_WILDCARD, 'commission'],\n ...innerInstructionsConfigs.map(c => ['meta', 'innerInstructions', KEYPATH_WILDCARD, ...c]),\n ...messageConfig.map(c => ['transaction', 'message', ...c] as const),\n ],\n getVersion: [['feature-set']],\n getVoteAccounts: [\n ['current', KEYPATH_WILDCARD, 'commission'],\n ['delinquent', KEYPATH_WILDCARD, 'commission'],\n ],\n simulateTransaction: [\n ...jsonParsedAccountsConfigs.map(c => ['value', 'accounts', KEYPATH_WILDCARD, ...c]),\n ...innerInstructionsConfigs.map(c => ['value', 'innerInstructions', KEYPATH_WILDCARD, ...c]),\n ],\n };\n }\n return memoizedKeypaths;\n}\n"]}