/** * Type assertion helpers for Web3.js v2 compatibility */ import type { IAccountMeta, IAccountSignerMeta } from './instruction-compat.js'; import type { Address } from '@solana/addresses'; import type { TransactionSigner } from '@solana/signers'; /** * Convert ReadonlyUint8Array to Uint8Array */ export function toUint8Array(data: readonly number[] | Uint8Array): Uint8Array { return new Uint8Array(data); } /** * Type assertion for account meta */ export function asAccountMeta( account: string | IAccountMeta ): IAccountMeta { if (typeof account === 'string') { return { address: account as Address, role: 'readonly' as const }; } return account; } /** * Type assertion for signer account meta */ export function asSignerAccountMeta( account: string | IAccountSignerMeta> ): IAccountSignerMeta> { if (typeof account === 'string') { return { address: account as Address, role: 'readonly_signer' as const, signer: undefined as any // Will be properly typed at usage }; } return account; } /** * Create a writable account meta */ export function createWritableAccount( address: Address ): IAccountMeta { return { address, role: 'writable' as const }; } /** * Create a readonly account meta */ export function createReadonlyAccount( address: Address ): IAccountMeta { return { address, role: 'readonly' as const }; } /** * Create a writable signer account meta */ export function createWritableSignerAccount( address: Address, signer: TransactionSigner ): IAccountSignerMeta> { return { address, role: 'writable_signer' as const, signer }; } /** * Create a readonly signer account meta */ export function createReadonlySignerAccount( address: Address, signer: TransactionSigner ): IAccountSignerMeta> { return { address, role: 'readonly_signer' as const, signer }; }