/** * This code was AUTOGENERATED using the Codama library. * Please DO NOT EDIT THIS FILE, instead use visitors * to add features, then rerun Codama to update it. * * @see https://github.com/codama-idl/codama */ import { AccountRole, isProgramDerivedAddress, isTransactionSigner as kitIsTransactionSigner, type AccountMeta, type AccountSignerMeta, type Address, type ProgramDerivedAddress, type TransactionSigner, upgradeRoleToSigner, } from "@solana/kit"; /** * Asserts that the given value is not null or undefined. * @internal */ export function expectSome(value: T | null | undefined): T { if (value === null || value === undefined) { throw new Error("Expected a value but received null or undefined."); } return value; } /** * Asserts that the given value is a PublicKey. * @internal */ export function expectAddress( value: | Address | ProgramDerivedAddress | TransactionSigner | null | undefined, ): Address { if (!value) { throw new Error("Expected a Address."); } if (typeof value === "object" && "address" in value) { return value.address; } if (Array.isArray(value)) { return value[0] as Address; } return value as Address; } /** * Asserts that the given value is a PDA. * @internal */ export function expectProgramDerivedAddress( value: | Address | ProgramDerivedAddress | TransactionSigner | null | undefined, ): ProgramDerivedAddress { if (!value || !Array.isArray(value) || !isProgramDerivedAddress(value)) { throw new Error("Expected a ProgramDerivedAddress."); } return value; } /** * Asserts that the given value is a TransactionSigner. * @internal */ export function expectTransactionSigner( value: | Address | ProgramDerivedAddress | TransactionSigner | null | undefined, ): TransactionSigner { if (!value || !isTransactionSigner(value)) { throw new Error("Expected a TransactionSigner."); } return value; } /** * Defines an instruction account to resolve. * @internal */ export type ResolvedAccount< T extends string = string, U extends | Address | ProgramDerivedAddress | TransactionSigner | null = | Address | ProgramDerivedAddress | TransactionSigner | null, > = { isWritable: boolean; value: U; }; /** * Defines an instruction that stores additional bytes on-chain. * @internal */ export type InstructionWithByteDelta = { byteDelta: number; }; /** * Get account metas and signers from resolved accounts. * @internal */ export function getAccountMetaFactory( programAddress: Address, optionalAccountStrategy: "omitted" | "programId", ) { return ( account: ResolvedAccount, ): AccountMeta | AccountSignerMeta | undefined => { if (!account.value) { if (optionalAccountStrategy === "omitted") return; return Object.freeze({ address: programAddress, role: AccountRole.READONLY, }); } const writableRole = account.isWritable ? AccountRole.WRITABLE : AccountRole.READONLY; return Object.freeze({ address: expectAddress(account.value), role: isTransactionSigner(account.value) ? upgradeRoleToSigner(writableRole) : writableRole, ...(isTransactionSigner(account.value) ? { signer: account.value } : {}), }); }; } export function isTransactionSigner( value: | Address | ProgramDerivedAddress | TransactionSigner, ): value is TransactionSigner { return ( !!value && typeof value === "object" && "address" in value && kitIsTransactionSigner(value) ); }