type OptionalDefaultGate = (key: TKey, defaultValue?: boolean) => boolean; type TokenSourcedAccount = { tokenSource?: string | null; }; export function listTokenSourcedAccounts( accounts: readonly TAccount[], ): TAccount[] { return accounts.filter((account) => account.tokenSource !== "none"); } export function createUnionActionGate( accounts: readonly TAccount[], createGate: (account: TAccount) => OptionalDefaultGate, ): OptionalDefaultGate { const gates = accounts.map((account) => createGate(account)); return (key, defaultValue = true) => gates.some((gate) => gate(key, defaultValue)); }