UNPKG

@alchemy/aa-core

Version:

viem based SDK that enables interactions with ERC-4337 Smart Accounts. ABIs are based off the definitions generated in @account-abstraction/contracts

88 lines 2.78 kB
import { toHex } from "viem"; import * as chains from "viem/chains"; import * as alchemyChains from "../chains/index.js"; export const AlchemyChainMap = new Map(Object.values(alchemyChains).map((c) => [c.id, c])); export const getChain = (chainId) => { for (const chain of Object.values(chains)) { if (chain.id === chainId) { return AlchemyChainMap.get(chain.id) ?? chain; } } throw new Error("could not find chain"); }; export const asyncPipe = (...fns) => async (s, o, f) => { let result = s; for (const fn of fns) { result = await fn(result, o, f); } return result; }; export async function resolveProperties(object) { const promises = Object.keys(object).map((key) => { const value = object[key]; return Promise.resolve(value).then((v) => ({ key: key, value: v })); }); const results = await Promise.all(promises); return filterUndefined(results.reduce((accum, curr) => { accum[curr.key] = curr.value; return accum; }, {})); } export function deepHexlify(obj) { if (typeof obj === "function") { return undefined; } if (obj == null || typeof obj === "string" || typeof obj === "boolean") { return obj; } else if (typeof obj === "bigint") { return toHex(obj); } else if (obj._isBigNumber != null || typeof obj !== "object") { return toHex(obj).replace(/^0x0/, "0x"); } if (Array.isArray(obj)) { return obj.map((member) => deepHexlify(member)); } return Object.keys(obj).reduce((set, key) => ({ ...set, [key]: deepHexlify(obj[key]), }), {}); } export function defineReadOnly(object, key, value) { Object.defineProperty(object, key, { enumerable: true, value: value, writable: false, }); } export function filterUndefined(obj) { for (const key in obj) { if (obj[key] == null) { delete obj[key]; } } return obj; } export function pick(obj, keys) { return Object.keys(obj) .filter((k) => keys.includes(k)) .reduce((res, k) => Object.assign(res, { [k]: obj[k] }), {}); } export const allEqual = (...params) => { if (params.length === 0) { throw new Error("no values passed in"); } return params.every((v) => v === params[0]); }; export const conditionalReturn = (condition, value) => condition.then((t) => (t ? value() : undefined)); export const toRecord = (array, selector, fn) => array.reduce((acc, item) => { acc[item[selector]] = fn(item); return acc; }, {}); export * from "./bigint.js"; export * from "./bytes.js"; export * from "./defaults.js"; export * from "./schema.js"; export * from "./userop.js"; //# sourceMappingURL=index.js.map