@solana/pay
Version:
`@solana/pay` is a JavaScript library for facilitating commerce on Solana by using a token transfer URL scheme. The URL scheme ensures that no matter the wallet or service used, the payment request must be created and interpreted in one standard way.
105 lines • 12.6 kB
TypeScript
import { type DefaultRpcSubscriptionsChannelConfig, type TransactionSigner } from '@solana/kit';
/** Configuration for {@link createMerchantClient}. */
export interface MerchantClientConfig {
/** Solana RPC URL (e.g. 'https://api.mainnet-beta.solana.com'). */
rpcUrl: string;
/** Optional RPC subscriptions config (e.g. custom WebSocket URL for localhost). */
rpcSubscriptionsConfig?: DefaultRpcSubscriptionsChannelConfig<string>;
}
/** The type returned by {@link createMerchantClient}. */
export type MerchantClient = ReturnType<typeof createMerchantClient>;
/**
* Creates a merchant-side Solana Pay client with RPC and the merchant plugin.
* No payer required — merchants only encode URLs, generate QR codes, and
* read from the network to find/validate payments.
*
* @example
* ```ts
* const merchant = createMerchantClient({
* rpcUrl: 'https://api.mainnet-beta.solana.com',
* });
*
* const url = merchant.pay.encodeURL({ recipient, amount: 1.5 });
* const found = await merchant.pay.findReference(reference);
* await merchant.pay.validateTransfer(found.signature, { recipient, amount: 1.5 });
* ```
*/
export declare function createMerchantClient(config: MerchantClientConfig): import("@solana/kit").Client<import("./plugins/merchant.js").SolanaPayMerchantMethods & Omit<object, "rpc" | "rpcSubscriptions"> & {
rpc: import("@solana/kit").Rpc<import("@solana/kit").RequestAirdropApi & import("@solana/kit").GetAccountInfoApi & import("@solana/kit").GetBalanceApi & import("@solana/kit").GetBlockApi & import("@solana/kit").GetBlockCommitmentApi & import("@solana/kit").GetBlockHeightApi & import("@solana/kit").GetBlockProductionApi & import("@solana/kit").GetBlocksApi & import("@solana/kit").GetBlocksWithLimitApi & import("@solana/kit").GetBlockTimeApi & import("@solana/kit").GetClusterNodesApi & import("@solana/kit").GetEpochInfoApi & import("@solana/kit").GetEpochScheduleApi & import("@solana/kit").GetFeeForMessageApi & import("@solana/kit").GetFirstAvailableBlockApi & import("@solana/kit").GetGenesisHashApi & import("@solana/kit").GetHealthApi & import("@solana/kit").GetHighestSnapshotSlotApi & import("@solana/kit").GetIdentityApi & import("@solana/kit").GetInflationGovernorApi & import("@solana/kit").GetInflationRateApi & import("@solana/kit").GetInflationRewardApi & import("@solana/kit").GetLargestAccountsApi & import("@solana/kit").GetLatestBlockhashApi & import("@solana/kit").GetLeaderScheduleApi & import("@solana/kit").GetMaxRetransmitSlotApi & import("@solana/kit").GetMaxShredInsertSlotApi & import("@solana/kit").GetMinimumBalanceForRentExemptionApi & import("@solana/kit").GetMultipleAccountsApi & import("@solana/kit").GetProgramAccountsApi & import("@solana/kit").GetRecentPerformanceSamplesApi & import("@solana/kit").GetRecentPrioritizationFeesApi & import("@solana/kit").GetSignaturesForAddressApi & import("@solana/kit").GetSignatureStatusesApi & import("@solana/kit").GetSlotApi & import("@solana/kit").GetSlotLeaderApi & import("@solana/kit").GetSlotLeadersApi & import("@solana/kit").GetStakeMinimumDelegationApi & import("@solana/kit").GetSupplyApi & import("@solana/kit").GetTokenAccountBalanceApi & import("@solana/kit").GetTokenAccountsByDelegateApi & import("@solana/kit").GetTokenAccountsByOwnerApi & import("@solana/kit").GetTokenLargestAccountsApi & import("@solana/kit").GetTokenSupplyApi & import("@solana/kit").GetTransactionApi & import("@solana/kit").GetTransactionCountApi & import("@solana/kit").GetVersionApi & import("@solana/kit").GetVoteAccountsApi & import("@solana/kit").IsBlockhashValidApi & import("@solana/kit").MinimumLedgerSlotApi & import("@solana/kit").SendTransactionApi & import("@solana/kit").SimulateTransactionApi>;
rpcSubscriptions: import("@solana/kit").RpcSubscriptions<import("@solana/rpc-subscriptions-api").SolanaRpcSubscriptionsApi>;
}>;
/** Configuration for {@link createWalletClient}. */
export interface WalletClientConfig {
/** Solana RPC URL (e.g. 'https://api.mainnet-beta.solana.com'). */
rpcUrl: string;
/** Wallet signer that will be used as the default sender / fee payer. */
payer: TransactionSigner;
/** Optional RPC subscriptions config (e.g. custom WebSocket URL for localhost). */
rpcSubscriptionsConfig?: DefaultRpcSubscriptionsChannelConfig<string>;
}
/** The type returned by {@link createWalletClient}. */
export type WalletClient = ReturnType<typeof createWalletClient>;
/**
* Creates a wallet-side Solana Pay client with RPC, payer, transaction
* planner/executor, and the wallet plugin. Handles URL parsing, transfer
* instruction creation, and transaction sending.
*
* @example
* ```ts
* const wallet = createWalletClient({
* rpcUrl: 'https://api.mainnet-beta.solana.com',
* payer: myWalletSigner,
* });
*
* const parsed = wallet.pay.parseURL(url);
* const instructions = await wallet.pay.createTransfer({ recipient, amount: 1.5 });
* await wallet.sendTransaction(instructions);
* ```
*/
export declare function createWalletClient(config: WalletClientConfig): import("@solana/kit").Client<import("./plugins/wallet.js").SolanaPayWalletMethods & Omit<Omit<Omit<Omit<Omit<object, "rpc" | "rpcSubscriptions"> & {
rpc: import("@solana/kit").Rpc<import("@solana/kit").RequestAirdropApi & import("@solana/kit").GetAccountInfoApi & import("@solana/kit").GetBalanceApi & import("@solana/kit").GetBlockApi & import("@solana/kit").GetBlockCommitmentApi & import("@solana/kit").GetBlockHeightApi & import("@solana/kit").GetBlockProductionApi & import("@solana/kit").GetBlocksApi & import("@solana/kit").GetBlocksWithLimitApi & import("@solana/kit").GetBlockTimeApi & import("@solana/kit").GetClusterNodesApi & import("@solana/kit").GetEpochInfoApi & import("@solana/kit").GetEpochScheduleApi & import("@solana/kit").GetFeeForMessageApi & import("@solana/kit").GetFirstAvailableBlockApi & import("@solana/kit").GetGenesisHashApi & import("@solana/kit").GetHealthApi & import("@solana/kit").GetHighestSnapshotSlotApi & import("@solana/kit").GetIdentityApi & import("@solana/kit").GetInflationGovernorApi & import("@solana/kit").GetInflationRateApi & import("@solana/kit").GetInflationRewardApi & import("@solana/kit").GetLargestAccountsApi & import("@solana/kit").GetLatestBlockhashApi & import("@solana/kit").GetLeaderScheduleApi & import("@solana/kit").GetMaxRetransmitSlotApi & import("@solana/kit").GetMaxShredInsertSlotApi & import("@solana/kit").GetMinimumBalanceForRentExemptionApi & import("@solana/kit").GetMultipleAccountsApi & import("@solana/kit").GetProgramAccountsApi & import("@solana/kit").GetRecentPerformanceSamplesApi & import("@solana/kit").GetRecentPrioritizationFeesApi & import("@solana/kit").GetSignaturesForAddressApi & import("@solana/kit").GetSignatureStatusesApi & import("@solana/kit").GetSlotApi & import("@solana/kit").GetSlotLeaderApi & import("@solana/kit").GetSlotLeadersApi & import("@solana/kit").GetStakeMinimumDelegationApi & import("@solana/kit").GetSupplyApi & import("@solana/kit").GetTokenAccountBalanceApi & import("@solana/kit").GetTokenAccountsByDelegateApi & import("@solana/kit").GetTokenAccountsByOwnerApi & import("@solana/kit").GetTokenLargestAccountsApi & import("@solana/kit").GetTokenSupplyApi & import("@solana/kit").GetTransactionApi & import("@solana/kit").GetTransactionCountApi & import("@solana/kit").GetVersionApi & import("@solana/kit").GetVoteAccountsApi & import("@solana/kit").IsBlockhashValidApi & import("@solana/kit").MinimumLedgerSlotApi & import("@solana/kit").SendTransactionApi & import("@solana/kit").SimulateTransactionApi>;
rpcSubscriptions: import("@solana/kit").RpcSubscriptions<import("@solana/rpc-subscriptions-api").SolanaRpcSubscriptionsApi>;
}, "payer"> & {
payer: TransactionSigner;
}, "transactionPlanner"> & {
transactionPlanner: import("@solana/kit").TransactionPlanner;
}, "transactionPlanExecutor"> & {
transactionPlanExecutor: import("@solana/kit").TransactionPlanExecutor<import("@solana/kit").TransactionPlanResultContext>;
}, keyof import("@solana/kit").ClientWithTransactionPlanning | keyof import("@solana/kit").ClientWithTransactionSending> & import("@solana/kit").ClientWithTransactionPlanning & import("@solana/kit").ClientWithTransactionSending>;
/** Configuration for {@link createSolanaPayClient}. */
export interface SolanaPayClientConfig {
/** Solana RPC URL (e.g. 'https://api.mainnet-beta.solana.com'). */
rpcUrl: string;
/** Wallet signer that will be used as the default sender / fee payer. */
payer: TransactionSigner;
/** Optional RPC subscriptions config (e.g. custom WebSocket URL for localhost). */
rpcSubscriptionsConfig?: DefaultRpcSubscriptionsChannelConfig<string>;
}
/** The type returned by {@link createSolanaPayClient}. */
export type SolanaPayClient = ReturnType<typeof createSolanaPayClient>;
/**
* Creates a combined Solana Pay client with all merchant + wallet methods.
*
* @example
* ```ts
* const client = createSolanaPayClient({
* rpcUrl: 'https://api.mainnet-beta.solana.com',
* payer: myWalletSigner,
* });
*
* const url = client.pay.encodeURL({ recipient, amount: 1.5 });
* const parsed = client.pay.parseURL(url);
* const instructions = await client.pay.createTransfer({ recipient, amount: 1.5 });
* ```
*/
export declare function createSolanaPayClient(config: SolanaPayClientConfig): import("@solana/kit").Client<import("./plugins/wallet.js").SolanaPayWalletMethods & import("./plugins/merchant.js").SolanaPayMerchantMethods & Omit<Omit<Omit<Omit<Omit<object, "rpc" | "rpcSubscriptions"> & {
rpc: import("@solana/kit").Rpc<import("@solana/kit").RequestAirdropApi & import("@solana/kit").GetAccountInfoApi & import("@solana/kit").GetBalanceApi & import("@solana/kit").GetBlockApi & import("@solana/kit").GetBlockCommitmentApi & import("@solana/kit").GetBlockHeightApi & import("@solana/kit").GetBlockProductionApi & import("@solana/kit").GetBlocksApi & import("@solana/kit").GetBlocksWithLimitApi & import("@solana/kit").GetBlockTimeApi & import("@solana/kit").GetClusterNodesApi & import("@solana/kit").GetEpochInfoApi & import("@solana/kit").GetEpochScheduleApi & import("@solana/kit").GetFeeForMessageApi & import("@solana/kit").GetFirstAvailableBlockApi & import("@solana/kit").GetGenesisHashApi & import("@solana/kit").GetHealthApi & import("@solana/kit").GetHighestSnapshotSlotApi & import("@solana/kit").GetIdentityApi & import("@solana/kit").GetInflationGovernorApi & import("@solana/kit").GetInflationRateApi & import("@solana/kit").GetInflationRewardApi & import("@solana/kit").GetLargestAccountsApi & import("@solana/kit").GetLatestBlockhashApi & import("@solana/kit").GetLeaderScheduleApi & import("@solana/kit").GetMaxRetransmitSlotApi & import("@solana/kit").GetMaxShredInsertSlotApi & import("@solana/kit").GetMinimumBalanceForRentExemptionApi & import("@solana/kit").GetMultipleAccountsApi & import("@solana/kit").GetProgramAccountsApi & import("@solana/kit").GetRecentPerformanceSamplesApi & import("@solana/kit").GetRecentPrioritizationFeesApi & import("@solana/kit").GetSignaturesForAddressApi & import("@solana/kit").GetSignatureStatusesApi & import("@solana/kit").GetSlotApi & import("@solana/kit").GetSlotLeaderApi & import("@solana/kit").GetSlotLeadersApi & import("@solana/kit").GetStakeMinimumDelegationApi & import("@solana/kit").GetSupplyApi & import("@solana/kit").GetTokenAccountBalanceApi & import("@solana/kit").GetTokenAccountsByDelegateApi & import("@solana/kit").GetTokenAccountsByOwnerApi & import("@solana/kit").GetTokenLargestAccountsApi & import("@solana/kit").GetTokenSupplyApi & import("@solana/kit").GetTransactionApi & import("@solana/kit").GetTransactionCountApi & import("@solana/kit").GetVersionApi & import("@solana/kit").GetVoteAccountsApi & import("@solana/kit").IsBlockhashValidApi & import("@solana/kit").MinimumLedgerSlotApi & import("@solana/kit").SendTransactionApi & import("@solana/kit").SimulateTransactionApi>;
rpcSubscriptions: import("@solana/kit").RpcSubscriptions<import("@solana/rpc-subscriptions-api").SolanaRpcSubscriptionsApi>;
}, "payer"> & {
payer: TransactionSigner;
}, "transactionPlanner"> & {
transactionPlanner: import("@solana/kit").TransactionPlanner;
}, "transactionPlanExecutor"> & {
transactionPlanExecutor: import("@solana/kit").TransactionPlanExecutor<import("@solana/kit").TransactionPlanResultContext>;
}, keyof import("@solana/kit").ClientWithTransactionPlanning | keyof import("@solana/kit").ClientWithTransactionSending> & import("@solana/kit").ClientWithTransactionPlanning & import("@solana/kit").ClientWithTransactionSending>;
//# sourceMappingURL=client.d.ts.map