{"version":3,"sources":["../../src/signer.ts","../../src/requirements.ts"],"sourcesContent":["/**\n * x402x Client signer - 只要求能做 EIP-712 typed data 签名\n */\nexport type X402xClientEvmSigner = {\n  readonly address: `0x${string}`;\n  signTypedData(message: {\n    domain: Record<string, unknown>;\n    types: Record<string, unknown>;\n    primaryType: string;\n    message: Record<string, unknown>;\n  }): Promise<`0x${string}`>;\n};\n\n/**\n * x402x 公共链读客户端（Permit 需要读 nonce / name / version）\n */\nexport type X402xPublicEvmClient = {\n  readContract(args: {\n    address: `0x${string}`;\n    abi: readonly unknown[];\n    functionName: string;\n    args?: readonly unknown[];\n  }): Promise<unknown>;\n};\n\n/**\n * x402x Facilitator signer - 用于 verify/settle（基于 viem 能力面）\n */\nexport type X402xFacilitatorEvmSigner = {\n  getAddresses(): readonly `0x${string}`[];\n  readContract(args: {\n    address: `0x${string}`;\n    abi: readonly unknown[];\n    functionName: string;\n    args?: readonly unknown[];\n  }): Promise<unknown>;\n  verifyTypedData(args: {\n    address: `0x${string}`;\n    domain: Record<string, unknown>;\n    types: Record<string, unknown>;\n    primaryType: string;\n    message: Record<string, unknown>;\n    signature: `0x${string}`;\n  }): Promise<boolean>;\n  writeContract(args: {\n    address: `0x${string}`;\n    abi: readonly unknown[];\n    functionName: string;\n    args: readonly unknown[];\n  }): Promise<`0x${string}`>;\n  waitForTransactionReceipt(args: { hash: `0x${string}` }): Promise<{ status: string }>;\n  getCode(args: { address: `0x${string}` }): Promise<`0x${string}` | undefined>;\n};\n\nexport function toX402xClientEvmSigner(signer: X402xClientEvmSigner): X402xClientEvmSigner {\n  return signer;\n}\n\nexport function toX402xFacilitatorEvmSigner(\n  client: Omit<X402xFacilitatorEvmSigner, \"getAddresses\"> & { address: `0x${string}` },\n): X402xFacilitatorEvmSigner {\n  return {\n    ...client,\n    getAddresses: () => [client.address],\n  };\n}\n\n\n","import type { PaymentRequirements } from '@x402/core/types'\n\n/**\n * Create a copy of PaymentRequirements with extra merged in.\n * This is a small helper to keep server examples clean (avoid repeating map + spread).\n *\n * @param requirements - A single requirements object or an array\n * @param extra - Extra fields to merge into requirements.extra\n * @returns New requirements object(s) with merged extra\n */\nexport function withExtra<T extends PaymentRequirements | PaymentRequirements[]>(\n  requirements: T,\n  extra: Record<string, unknown>,\n): T {\n  const mergeOne = (r: PaymentRequirements): PaymentRequirements => ({\n    ...r,\n    extra: {\n      ...(r.extra || {}),\n      ...extra,\n    },\n  })\n\n  return (Array.isArray(requirements) ? requirements.map(mergeOne) : mergeOne(requirements)) as T\n}\n"],"mappings":";;;;;;;;;;;;;;AAsDO,SAAS,uBAAuB,QAAoD;AACzF,SAAO;AACT;AAEO,SAAS,4BACd,QAC2B;AAC3B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,cAAc,MAAM,CAAC,OAAO,OAAO;AAAA,EACrC;AACF;;;ACvDO,SAAS,UACd,cACA,OACG;AACH,QAAM,WAAW,CAAC,OAAiD;AAAA,IACjE,GAAG;AAAA,IACH,OAAO;AAAA,MACL,GAAI,EAAE,SAAS,CAAC;AAAA,MAChB,GAAG;AAAA,IACL;AAAA,EACF;AAEA,SAAQ,MAAM,QAAQ,YAAY,IAAI,aAAa,IAAI,QAAQ,IAAI,SAAS,YAAY;AAC1F;","names":[]}