import { Address } from '@mcintyre94/addresses'; /** * Quick primer on bitwise operations: https://stackoverflow.com/a/1436448/802047 */ declare enum AccountRole { WRITABLE_SIGNER = 3, READONLY_SIGNER = 2, WRITABLE = 1, READONLY = 0 } declare function downgradeRoleToNonSigner(role: AccountRole.READONLY_SIGNER): AccountRole.READONLY; declare function downgradeRoleToNonSigner(role: AccountRole.WRITABLE_SIGNER): AccountRole.WRITABLE; declare function downgradeRoleToNonSigner(role: AccountRole): AccountRole; declare function downgradeRoleToReadonly(role: AccountRole.WRITABLE): AccountRole.READONLY; declare function downgradeRoleToReadonly(role: AccountRole.WRITABLE_SIGNER): AccountRole.READONLY_SIGNER; declare function downgradeRoleToReadonly(role: AccountRole): AccountRole; declare function isSignerRole(role: AccountRole): role is AccountRole.READONLY_SIGNER | AccountRole.WRITABLE_SIGNER; declare function isWritableRole(role: AccountRole): role is AccountRole.WRITABLE | AccountRole.WRITABLE_SIGNER; declare function mergeRoles(roleA: AccountRole.WRITABLE, roleB: AccountRole.READONLY_SIGNER): AccountRole.WRITABLE_SIGNER; declare function mergeRoles(roleA: AccountRole.READONLY_SIGNER, roleB: AccountRole.WRITABLE): AccountRole.WRITABLE_SIGNER; declare function mergeRoles(roleA: AccountRole, roleB: AccountRole.WRITABLE_SIGNER): AccountRole.WRITABLE_SIGNER; declare function mergeRoles(roleA: AccountRole.WRITABLE_SIGNER, roleB: AccountRole): AccountRole.WRITABLE_SIGNER; declare function mergeRoles(roleA: AccountRole, roleB: AccountRole.READONLY_SIGNER): AccountRole.READONLY_SIGNER; declare function mergeRoles(roleA: AccountRole.READONLY_SIGNER, roleB: AccountRole): AccountRole.READONLY_SIGNER; declare function mergeRoles(roleA: AccountRole, roleB: AccountRole.WRITABLE): AccountRole.WRITABLE; declare function mergeRoles(roleA: AccountRole.WRITABLE, roleB: AccountRole): AccountRole.WRITABLE; declare function mergeRoles(roleA: AccountRole.READONLY, roleB: AccountRole.READONLY): AccountRole.READONLY; declare function mergeRoles(roleA: AccountRole, roleB: AccountRole): AccountRole; declare function upgradeRoleToSigner(role: AccountRole.READONLY): AccountRole.READONLY_SIGNER; declare function upgradeRoleToSigner(role: AccountRole.WRITABLE): AccountRole.WRITABLE_SIGNER; declare function upgradeRoleToSigner(role: AccountRole): AccountRole; declare function upgradeRoleToWritable(role: AccountRole.READONLY): AccountRole.WRITABLE; declare function upgradeRoleToWritable(role: AccountRole.READONLY_SIGNER): AccountRole.WRITABLE_SIGNER; declare function upgradeRoleToWritable(role: AccountRole): AccountRole; interface IAccountMeta { readonly address: Address; readonly role: AccountRole; } type ReadonlyAccount = IAccountMeta & { readonly role: AccountRole.READONLY; }; type WritableAccount = IAccountMeta & { role: AccountRole.WRITABLE; }; type ReadonlySignerAccount = IAccountMeta & { role: AccountRole.READONLY_SIGNER; }; type WritableSignerAccount = IAccountMeta & { role: AccountRole.WRITABLE_SIGNER; }; interface IAccountLookupMeta { readonly address: Address; readonly addressIndex: number; readonly lookupTableAddress: Address; readonly role: AccountRole.READONLY | AccountRole.WRITABLE; } type ReadonlyAccountLookup = IAccountLookupMeta & { readonly role: AccountRole.READONLY; }; type WritableAccountLookup = IAccountLookupMeta & { readonly role: AccountRole.WRITABLE; }; interface IInstruction { readonly accounts?: TAccounts; readonly data?: Uint8Array; readonly programAddress: Address; } interface IInstructionWithAccounts extends IInstruction { readonly accounts: TAccounts; } interface IInstructionWithData extends IInstruction { readonly data: TData; } export { AccountRole, type IAccountLookupMeta, type IAccountMeta, type IInstruction, type IInstructionWithAccounts, type IInstructionWithData, type ReadonlyAccount, type ReadonlyAccountLookup, type ReadonlySignerAccount, type WritableAccount, type WritableAccountLookup, type WritableSignerAccount, downgradeRoleToNonSigner, downgradeRoleToReadonly, isSignerRole, isWritableRole, mergeRoles, upgradeRoleToSigner, upgradeRoleToWritable };