@wuwei-labs/srsly
Version:
TypeScript SDK for SRSLY
103 lines • 3.41 kB
TypeScript
/**
* @purpose Universal signer handling for @solana/kit and @solana/web3.js compatibility
*
* Accepts signers from both libraries and extracts address strings for use with Codama.
*/
import { type TransactionSigner, type Address } from '@solana/kit';
/**
* Universal signer type that accepts various signer formats
*
* Supports:
* - String addresses (for browser usage)
* - web3.js Keypair/Wallet (objects with `publicKey.toBase58()`)
* - web3.js PublicKey (objects with direct `toBase58()`)
* - @solana/kit TransactionSigner (objects with `address`)
*/
export type UniversalSigner = string | {
publicKey: {
toBase58(): string;
};
} | {
toBase58(): string;
} | {
address: string;
} | TransactionSigner;
/**
* Extract address string from any supported signer format
*
* @param signer - Signer in any supported format
* @returns Base58-encoded address string
* @throws Error if signer format is invalid
*
* @example
* ```typescript
* // String address
* const addr1 = getSignerAddress("9WzDXw...");
*
* // web3.js Keypair
* import { Keypair } from '@solana/web3.js';
* const keypair = Keypair.generate();
* const addr2 = getSignerAddress(keypair);
*
* // @solana/kit signer
* import { createNoopSigner, address } from '@solana/kit';
* const kitSigner = createNoopSigner(address("9WzDXw..."));
* const addr3 = getSignerAddress(kitSigner);
* ```
*/
export declare function getSignerAddress(signer: UniversalSigner): Address;
/**
* Validate that a string is a valid Solana address
*
* Basic validation - checks length only. For full validation,
* use @solana/kit's address() function or web3.js PublicKey constructor.
*
* @param address - Address string to validate
* @throws Error if address format is invalid
*/
export declare function validateAddress(address: string): void;
/**
* Type guard to check if a value is a web3.js signer
*/
export declare function isWeb3jsSigner(signer: UniversalSigner): signer is {
publicKey: {
toBase58(): string;
};
};
/**
* Type guard to check if a value is a @solana/kit signer
*/
export declare function isKitSigner(signer: UniversalSigner): signer is {
address: string;
} | TransactionSigner;
/**
* Type guard to check if a value is a string address
*/
export declare function isAddressString(signer: UniversalSigner): signer is string;
/**
* Convert UniversalSigner to TransactionSigner
*
* Intelligently handles different signer types:
* - If already a TransactionSigner with signing capability → return as-is
* - Otherwise → create noop signer from address (for browser/wallet cases)
*
* This enables the SDK to work in both:
* - Browser/wallet contexts (where you only have addresses, not private keys)
* - CLI/backend contexts (where you have full keypair signers)
*
* @param signer - Signer in any supported format
* @returns TransactionSigner (either real or noop)
*
* @example
* ```typescript
* // CLI/backend - has private key
* const wallet = await createKeyPairSignerFromBytes(secretKey);
* const txSigner = toTransactionSigner(wallet); // Returns wallet as-is
*
* // Browser - only has address
* const walletAddress = "9WzDXw...";
* const txSigner = toTransactionSigner(walletAddress); // Creates noop signer
* ```
*/
export declare function toTransactionSigner(signer: UniversalSigner): TransactionSigner;
//# sourceMappingURL=signer.d.ts.map