{"version":3,"file":"assertions.cjs","names":[],"sources":["../../src/utils/error.ts","../../src/utils/assertions.ts"],"sourcesContent":["/** Coerce an unknown caught value to an Error instance. */\nexport function toError(error: unknown): Error {\n  if (error instanceof Error) {\n    return error;\n  }\n  if (typeof error === \"object\" && error !== null && \"message\" in error) {\n    return new Error(String(error.message));\n  }\n  return new Error(String(error));\n}\n\n/**\n * Returns true if the error is a contract call revert (as opposed to a network/transport error).\n * Detects viem's ContractFunctionExecutionError / ContractFunctionRevertedError\n * and ethers' CALL_EXCEPTION.\n */\nexport function isContractCallError(error: unknown): boolean {\n  if (!(error instanceof Error)) {\n    return false;\n  }\n  // viem: ContractFunctionExecutionError, ContractFunctionRevertedError\n  if (\n    error.name === \"ContractFunctionExecutionError\" ||\n    error.name === \"ContractFunctionRevertedError\"\n  ) {\n    return true;\n  }\n  // ethers: error.code === \"CALL_EXCEPTION\"\n  if (\"code\" in error && error.code === \"CALL_EXCEPTION\") {\n    return true;\n  }\n  // Fallback: common revert message patterns from various providers\n  const msg = error.message.toLowerCase();\n  return msg.includes(\"execution reverted\") || msg.includes(\"call revert exception\");\n}\n\n/**\n * Extract an HTTP status code from an error, if present.\n * Relayer SDK errors may carry a `status` or `statusCode` property.\n */\nexport function extractHttpStatus(error: unknown): number | undefined {\n  if (error === null || error === undefined || typeof error !== \"object\") {\n    return undefined;\n  }\n  const e = error as Record<string, unknown>;\n  if (typeof e.statusCode === \"number\") {\n    return e.statusCode;\n  }\n  if (typeof e.status === \"number\") {\n    return e.status;\n  }\n  // Check nested cause\n  if (e.cause !== null && e.cause !== undefined && typeof e.cause === \"object\") {\n    const cause = e.cause as Record<string, unknown>;\n    if (typeof cause.statusCode === \"number\") {\n      return cause.statusCode;\n    }\n    if (typeof cause.status === \"number\") {\n      return cause.status;\n    }\n  }\n  return undefined;\n}\n","export function assertNonNullable<T>(value: T, context: string): asserts value is NonNullable<T> {\n  if (value === null || value === undefined) {\n    throw new TypeError(`${context} must not be null or undefined`);\n  }\n}\n\nexport function assertObject(\n  value: unknown,\n  context: string,\n): asserts value is Record<string, unknown> {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    throw new TypeError(`${context} must be an object, got ${typeof value}`);\n  }\n}\n\nexport function assertString(value: unknown, context: string): asserts value is string {\n  if (typeof value !== \"string\") {\n    throw new TypeError(`${context} must be a string, got ${typeof value}`);\n  }\n}\n\nexport function assertArray(value: unknown, context: string): asserts value is unknown[] {\n  if (!Array.isArray(value)) {\n    throw new TypeError(`${context} must be an array, got ${typeof value}`);\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport function assertFunction(value: unknown, context: string): asserts value is Function {\n  if (typeof value !== \"function\") {\n    throw new TypeError(`${context} must be a function, got ${typeof value}`);\n  }\n}\n\nexport function assertBigint(value: unknown, context: string): asserts value is bigint {\n  if (typeof value !== \"bigint\") {\n    throw new TypeError(`${context} must be a bigint, got ${typeof value}`);\n  }\n}\n\n/** Assert that `obj[key]` is a string. Narrows `obj` to include `{ [key]: string }`. */\nexport function assertStringProp<\n  K extends string,\n  O extends Record<string, unknown> = Record<string, unknown>,\n>(obj: O, key: K, context: string): asserts obj is O & Record<K, string> {\n  assertString(obj[key], context);\n}\n\n/** Assert that `obj[key]` is a function. Narrows `obj` to include `{ [key]: F }`. */\nexport function assertFunctionProp<\n  K extends string,\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  F extends Function,\n  O extends Record<string, unknown> = Record<string, unknown>,\n>(obj: O, key: K, context: string): asserts obj is O & Record<K, F> {\n  assertFunction(obj[key], context);\n}\n\nexport function assertCondition(condition: boolean, message: string): asserts condition {\n  if (!condition) {\n    throw new TypeError(message);\n  }\n}\n"],"mappings":"AACA,SAAgB,EAAQ,EAAuB,CAO7C,OANI,aAAiB,MACZ,EAEL,OAAO,GAAU,UAAY,GAAkB,YAAa,EACnD,MAAM,OAAO,EAAM,OAAO,CAAC,EAE7B,MAAM,OAAO,CAAK,CAAC,CAChC,CAOA,SAAgB,EAAoB,EAAyB,CAC3D,GAAI,EAAE,aAAiB,OACrB,MAAO,GAUT,GANE,EAAM,OAAS,kCACf,EAAM,OAAS,iCAKb,SAAU,GAAS,EAAM,OAAS,iBACpC,MAAO,GAGT,IAAM,EAAM,EAAM,QAAQ,YAAY,EACtC,OAAO,EAAI,SAAS,oBAAoB,GAAK,EAAI,SAAS,uBAAuB,CACnF,CAMA,SAAgB,EAAkB,EAAoC,CACpE,GAA6C,OAAO,GAAU,WAA1D,EACF,OAEF,IAAM,EAAI,EACV,GAAI,OAAO,EAAE,YAAe,SAC1B,OAAO,EAAE,WAEX,GAAI,OAAO,EAAE,QAAW,SACtB,OAAO,EAAE,OAGX,GAAI,EAAE,QAAU,MAAQ,EAAE,QAAU,IAAA,IAAa,OAAO,EAAE,OAAU,SAAU,CAC5E,IAAM,EAAQ,EAAE,MAChB,GAAI,OAAO,EAAM,YAAe,SAC9B,OAAO,EAAM,WAEf,GAAI,OAAO,EAAM,QAAW,SAC1B,OAAO,EAAM,MAEjB,CAEF,CC9DA,SAAgB,EAAqB,EAAU,EAAkD,CAC/F,GAAI,GAAU,KACZ,MAAU,UAAU,GAAG,EAAQ,+BAA+B,CAElE,CAEA,SAAgB,EACd,EACA,EAC0C,CAC1C,GAAI,OAAO,GAAU,WAAY,GAAkB,MAAM,QAAQ,CAAK,EACpE,MAAU,UAAU,GAAG,EAAQ,0BAA0B,OAAO,GAAO,CAE3E,CAEA,SAAgB,EAAa,EAAgB,EAA0C,CACrF,GAAI,OAAO,GAAU,SACnB,MAAU,UAAU,GAAG,EAAQ,yBAAyB,OAAO,GAAO,CAE1E,CASA,SAAgB,EAAe,EAAgB,EAA4C,CACzF,GAAI,OAAO,GAAU,WACnB,MAAU,UAAU,GAAG,EAAQ,2BAA2B,OAAO,GAAO,CAE5E,CAEA,SAAgB,EAAa,EAAgB,EAA0C,CACrF,GAAI,OAAO,GAAU,SACnB,MAAU,UAAU,GAAG,EAAQ,yBAAyB,OAAO,GAAO,CAE1E,CAGA,SAAgB,EAGd,EAAQ,EAAQ,EAAuD,CACvE,EAAa,EAAI,GAAM,CAAO,CAChC,CAGA,SAAgB,EAKd,EAAQ,EAAQ,EAAkD,CAClE,EAAe,EAAI,GAAM,CAAO,CAClC"}