{"version":3,"sources":["../src/zkkyc/index.ts","../src/contracts/reputation-manager/writes.ts","../src/validation/errors.validation.ts","../src/validation/schemas.validation.ts","../src/country/currency.ts","../src/zkkyc/errors.ts","../src/zkkyc/validation.ts","../src/contracts/abis/index.ts","../src/contracts/abis/order-flow-facet.ts","../src/contracts/abis/order-processor-facet.ts","../src/contracts/abis/p2p-config-facet.ts","../src/contracts/abis/p2p-stake-boost-facet.ts","../src/contracts/abis/reputation-manager.ts","../src/zkkyc/client.ts","../src/zkkyc/orchestrators/bvn.ts","../src/zkkyc/orchestrators/constants.ts","../src/zkkyc/orchestrators/liveness.ts","../src/zkkyc/orchestrators/reclaim.ts","../src/zkkyc/orchestrators/types.ts","../src/zkkyc/orchestrators/simple-kyc.ts","../src/zkkyc/orchestrators/zk-passport.ts"],"sourcesContent":["export type { Zkkyc } from \"./client\";\nexport { createZkkyc } from \"./client\";\nexport type { ZkkycErrorCode } from \"./errors\";\nexport { ZkkycError } from \"./errors\";\nexport type { ZkkycConfig } from \"./types\";\nexport type {\n\tAnonAadharProofParams,\n\tBvnSubmitParams,\n\tLivenessSubmitParams,\n\tSimpleKycSubmitParams,\n\tSocialVerifyParams,\n\tZkPassportRegisterParams,\n} from \"./validation\";\n\n// ── Orchestrators ────────────────────────────────────────────────────────────\n\nexport { createBvnFlow } from \"./orchestrators/bvn\";\nexport {\n\tBVN_OTP_METHODS,\n\tDEFAULT_RECLAIM_PROVIDER_IDS,\n\tLIVENESS_DEFAULT_TENANT,\n\tRECLAIM_APP_LINKS,\n\tSIMPLE_KYC_DEFAULT_TENANT,\n\tZK_PASSPORT_APP_LINKS,\n} from \"./orchestrators/constants\";\nexport { createLivenessFlow, resumeLivenessFlow } from \"./orchestrators/liveness\";\nexport { createReclaimFlow } from \"./orchestrators/reclaim\";\nexport { createSimpleKycFlow, resumeSimpleKycFlow } from \"./orchestrators/simple-kyc\";\nexport type {\n\tBvnAttestation,\n\tBvnDecision,\n\tBvnFlow,\n\tBvnFlowConfig,\n\tBvnMethod,\n\tBvnOnboardParams,\n\tBvnOtpMethod,\n\tBvnScope,\n\tBvnSendOtpParams,\n\tBvnSession,\n\tLivenessAttestation,\n\tLivenessFlowParams,\n\tLivenessSession,\n\tLivenessStatus,\n\tReclaimFlowParams,\n\tReclaimProofResult,\n\tReclaimSession,\n\tReclaimStatus,\n\tSimpleKycAttestation,\n\tSimpleKycFlowParams,\n\tSimpleKycSession,\n\tSimpleKycStatus,\n\tSocialPlatform,\n\tZkPassportFlowParams,\n\tZkPassportProofResult,\n\tZkPassportSession,\n\tZkPassportStatus,\n} from \"./orchestrators/types\";\nexport { SOCIAL_PLATFORM_NAMES } from \"./orchestrators/types\";\nexport { createZkPassportFlow } from \"./orchestrators/zk-passport\";\n","import { Result } from \"neverthrow\";\nimport { type Address, encodeFunctionData } from \"viem\";\nimport { validate } from \"../../validation\";\nimport { ZkkycError } from \"../../zkkyc/errors\";\nimport type {\n\tAnonAadharProofParams,\n\tBvnSubmitParams,\n\tLivenessSubmitParams,\n\tSimpleKycSubmitParams,\n\tSocialVerifyParams,\n\tZkPassportRegisterParams,\n} from \"../../zkkyc/validation\";\nimport {\n\tZodAnonAadharProofParamsSchema,\n\tZodBvnSubmitParamsSchema,\n\tZodLivenessSubmitParamsSchema,\n\tZodSimpleKycSubmitParamsSchema,\n\tZodSocialVerifyParamsSchema,\n\tZodZkPassportRegisterParamsSchema,\n} from \"../../zkkyc/validation\";\nimport { ABIS } from \"../abis\";\n\n/** Prepares a social verification transaction. */\nexport function prepareSocialVerify(\n\treputationManagerAddress: Address,\n\tparams: SocialVerifyParams,\n): Result<{ to: Address; data: `0x${string}` }, ZkkycError> {\n\treturn validate(\n\t\tZodSocialVerifyParamsSchema,\n\t\tparams,\n\t\t(message, cause, data) =>\n\t\t\tnew ZkkycError(message, { code: \"VALIDATION_ERROR\", cause, context: { params: data } }),\n\t).andThen((validated) =>\n\t\tResult.fromThrowable(\n\t\t\t() => ({\n\t\t\t\tto: reputationManagerAddress,\n\t\t\t\tdata: encodeFunctionData({\n\t\t\t\t\tabi: ABIS.EXTERNAL.REPUTATION_MANAGER,\n\t\t\t\t\tfunctionName: \"socialVerify\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\tvalidated._socialName,\n\t\t\t\t\t\tvalidated.proofs.map((proof) => ({\n\t\t\t\t\t\t\t...proof,\n\t\t\t\t\t\t\tsignedClaim: {\n\t\t\t\t\t\t\t\t...proof.signedClaim,\n\t\t\t\t\t\t\t\tclaim: {\n\t\t\t\t\t\t\t\t\t...proof.signedClaim.claim,\n\t\t\t\t\t\t\t\t\tidentifier: proof.signedClaim.claim.identifier as `0x${string}`,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignatures: proof.signedClaim.signatures as readonly `0x${string}`[],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t}),\n\t\t\t(error) =>\n\t\t\t\tnew ZkkycError(\"Failed to encode socialVerify\", {\n\t\t\t\t\tcode: \"ENCODE_ERROR\",\n\t\t\t\t\tcause: error,\n\t\t\t\t}),\n\t\t)(),\n\t);\n}\n\n/** Prepares a submit anon Aadhaar proof transaction. */\nexport function prepareSubmitAnonAadharProof(\n\treputationManagerAddress: Address,\n\tparams: AnonAadharProofParams,\n): Result<{ to: Address; data: `0x${string}` }, ZkkycError> {\n\treturn validate(\n\t\tZodAnonAadharProofParamsSchema,\n\t\tparams,\n\t\t(message, cause, data) =>\n\t\t\tnew ZkkycError(message, { code: \"VALIDATION_ERROR\", cause, context: { params: data } }),\n\t).andThen((validated) =>\n\t\tResult.fromThrowable(\n\t\t\t() => ({\n\t\t\t\tto: reputationManagerAddress,\n\t\t\t\tdata: encodeFunctionData({\n\t\t\t\t\tabi: ABIS.EXTERNAL.REPUTATION_MANAGER,\n\t\t\t\t\tfunctionName: \"submitAnonAadharProof\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\tvalidated.nullifierSeed,\n\t\t\t\t\t\tvalidated.nullifier,\n\t\t\t\t\t\tvalidated.timestamp,\n\t\t\t\t\t\tvalidated.signal,\n\t\t\t\t\t\tvalidated.revealArray,\n\t\t\t\t\t\tvalidated.packedGroth16Proof,\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t}),\n\t\t\t(error) =>\n\t\t\t\tnew ZkkycError(\"Failed to encode submitAnonAadharProof\", {\n\t\t\t\t\tcode: \"ENCODE_ERROR\",\n\t\t\t\t\tcause: error,\n\t\t\t\t}),\n\t\t)(),\n\t);\n}\n\n/** Prepares a simple-kyc EIP-712 attestation submission (awards KYC rp). */\nexport function prepareSubmitKycAttestation(\n\treputationManagerAddress: Address,\n\tparams: SimpleKycSubmitParams,\n): Result<{ to: Address; data: `0x${string}` }, ZkkycError> {\n\treturn validate(\n\t\tZodSimpleKycSubmitParamsSchema,\n\t\tparams,\n\t\t(message, cause, data) =>\n\t\t\tnew ZkkycError(message, { code: \"VALIDATION_ERROR\", cause, context: { params: data } }),\n\t).andThen((validated) =>\n\t\tResult.fromThrowable(\n\t\t\t() => ({\n\t\t\t\tto: reputationManagerAddress,\n\t\t\t\tdata: encodeFunctionData({\n\t\t\t\t\tabi: ABIS.EXTERNAL.REPUTATION_MANAGER,\n\t\t\t\t\tfunctionName: \"submitKycAttestation\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\tvalidated.nullifier as `0x${string}`,\n\t\t\t\t\t\tvalidated.limit,\n\t\t\t\t\t\tvalidated.expiry,\n\t\t\t\t\t\tvalidated.signature as `0x${string}`,\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t}),\n\t\t\t(error) =>\n\t\t\t\tnew ZkkycError(\"Failed to encode submitKycAttestation\", {\n\t\t\t\t\tcode: \"ENCODE_ERROR\",\n\t\t\t\t\tcause: error,\n\t\t\t\t}),\n\t\t)(),\n\t);\n}\n\n/** Prepares a BVN EIP-712 attestation submission (awards BVN rp). */\nexport function prepareSubmitBvnAttestation(\n\treputationManagerAddress: Address,\n\tparams: BvnSubmitParams,\n): Result<{ to: Address; data: `0x${string}` }, ZkkycError> {\n\treturn validate(\n\t\tZodBvnSubmitParamsSchema,\n\t\tparams,\n\t\t(message, cause, data) =>\n\t\t\tnew ZkkycError(message, { code: \"VALIDATION_ERROR\", cause, context: { params: data } }),\n\t).andThen((validated) =>\n\t\tResult.fromThrowable(\n\t\t\t() => ({\n\t\t\t\tto: reputationManagerAddress,\n\t\t\t\tdata: encodeFunctionData({\n\t\t\t\t\tabi: ABIS.EXTERNAL.REPUTATION_MANAGER,\n\t\t\t\t\tfunctionName: \"submitBvnAttestation\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\tvalidated.nullifier as `0x${string}`,\n\t\t\t\t\t\tvalidated.limit,\n\t\t\t\t\t\tvalidated.expiry,\n\t\t\t\t\t\tvalidated.signature as `0x${string}`,\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t}),\n\t\t\t(error) =>\n\t\t\t\tnew ZkkycError(\"Failed to encode submitBvnAttestation\", {\n\t\t\t\t\tcode: \"ENCODE_ERROR\",\n\t\t\t\t\tcause: error,\n\t\t\t\t}),\n\t\t)(),\n\t);\n}\n\n/** Prepares a liveness EIP-712 attestation submission (awards liveness rp).\n *\n * Same struct shape as the KYC one but a different on-chain function: the\n * liveness verifier is a separate service with its own EIP-712 domain and its\n * own nullifier set, so the two attestations are not interchangeable.\n */\nexport function prepareSubmitLivenessAttestation(\n\treputationManagerAddress: Address,\n\tparams: LivenessSubmitParams,\n): Result<{ to: Address; data: `0x${string}` }, ZkkycError> {\n\treturn validate(\n\t\tZodLivenessSubmitParamsSchema,\n\t\tparams,\n\t\t(message, cause, data) =>\n\t\t\tnew ZkkycError(message, { code: \"VALIDATION_ERROR\", cause, context: { params: data } }),\n\t).andThen((validated) =>\n\t\tResult.fromThrowable(\n\t\t\t() => ({\n\t\t\t\tto: reputationManagerAddress,\n\t\t\t\tdata: encodeFunctionData({\n\t\t\t\t\tabi: ABIS.EXTERNAL.REPUTATION_MANAGER,\n\t\t\t\t\tfunctionName: \"submitLivenessAttestation\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\tvalidated.nullifier as `0x${string}`,\n\t\t\t\t\t\tvalidated.limit,\n\t\t\t\t\t\tvalidated.expiry,\n\t\t\t\t\t\tvalidated.signature as `0x${string}`,\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t}),\n\t\t\t(error) =>\n\t\t\t\tnew ZkkycError(\"Failed to encode submitLivenessAttestation\", {\n\t\t\t\t\tcode: \"ENCODE_ERROR\",\n\t\t\t\t\tcause: error,\n\t\t\t\t}),\n\t\t)(),\n\t);\n}\n\n/** Prepares a zkPassport registration transaction. */\nexport function prepareZkPassportRegister(\n\treputationManagerAddress: Address,\n\tparams: ZkPassportRegisterParams,\n): Result<{ to: Address; data: `0x${string}` }, ZkkycError> {\n\treturn validate(\n\t\tZodZkPassportRegisterParamsSchema,\n\t\tparams,\n\t\t(message, cause, data) =>\n\t\t\tnew ZkkycError(message, { code: \"VALIDATION_ERROR\", cause, context: { params: data } }),\n\t).andThen((validated) =>\n\t\tResult.fromThrowable(\n\t\t\t() => {\n\t\t\t\tconst { proofVerificationData, serviceConfig, committedInputs, version } = validated.params;\n\n\t\t\t\tconst proofVerificationParams = {\n\t\t\t\t\tversion: version as `0x${string}`,\n\t\t\t\t\tproofVerificationData: {\n\t\t\t\t\t\tvkeyHash: proofVerificationData.vkeyHash as `0x${string}`,\n\t\t\t\t\t\tproof: proofVerificationData.proof as `0x${string}`,\n\t\t\t\t\t\tpublicInputs: proofVerificationData.publicInputs as `0x${string}`[],\n\t\t\t\t\t},\n\t\t\t\t\tcommittedInputs: committedInputs as `0x${string}`,\n\t\t\t\t\tserviceConfig: {\n\t\t\t\t\t\tvalidityPeriodInSeconds: BigInt(serviceConfig.validityPeriodInSeconds),\n\t\t\t\t\t\tdomain: serviceConfig.domain,\n\t\t\t\t\t\tscope: serviceConfig.scope,\n\t\t\t\t\t\tdevMode: serviceConfig.devMode,\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\treturn {\n\t\t\t\t\tto: reputationManagerAddress,\n\t\t\t\t\tdata: encodeFunctionData({\n\t\t\t\t\t\tabi: ABIS.EXTERNAL.REPUTATION_MANAGER,\n\t\t\t\t\t\tfunctionName: \"zkPassportRegister\",\n\t\t\t\t\t\targs: [proofVerificationParams, validated.isIDCard],\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\t(error) =>\n\t\t\t\tnew ZkkycError(\"Failed to encode zkPassportRegister\", {\n\t\t\t\t\tcode: \"ENCODE_ERROR\",\n\t\t\t\t\tcause: error,\n\t\t\t\t}),\n\t\t)(),\n\t);\n}\n","export class SdkError<TCode extends string = string> extends Error {\n\treadonly code: TCode;\n\treadonly cause?: unknown;\n\treadonly context?: Record<string, unknown>;\n\n\tconstructor(\n\t\tmessage: string,\n\t\toptions: {\n\t\t\tcode: TCode;\n\t\t\tcause?: unknown;\n\t\t\tcontext?: Record<string, unknown>;\n\t\t},\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"SdkError\";\n\t\tthis.code = options.code;\n\t\tthis.cause = options.cause;\n\t\tthis.context = options.context;\n\t}\n}\n","import { err, ok, type Result } from \"neverthrow\";\nimport { isAddress } from \"viem\";\nimport { z } from \"zod\";\nimport { CURRENCY_CODES } from \"../country/currency\";\n\nexport const ZodAddressSchema = z\n\t.string()\n\t.refine((s) => isAddress(s), { message: \"Invalid Ethereum address\" });\n\nexport const ZodCurrencySchema = z.enum(CURRENCY_CODES);\n\nexport function validate<S extends z.ZodType, E>(\n\tschema: S,\n\tdata: unknown,\n\ttoError: (message: string, cause: unknown, data: unknown) => E,\n): Result<z.infer<S>, E> {\n\tconst result = schema.safeParse(data);\n\tif (result.success) {\n\t\treturn ok(result.data as z.infer<S>);\n\t}\n\treturn err(toError(z.prettifyError(result.error), result.error, data));\n}\n","/**\n * All supported currency symbols. Single source of truth for the SDK.\n *\n * Lives alongside the country metadata so that adding a currency is a\n * single-folder operation: drop a new file in `currencies/<code>.ts`, add it\n * to this map, and both `COUNTRY_OPTIONS` and `ZodCurrencySchema` pick it up.\n */\nexport const CURRENCY = {\n\tIDR: \"IDR\",\n\tINR: \"INR\",\n\tBRL: \"BRL\",\n\tARS: \"ARS\",\n\tMEX: \"MEX\",\n\tVEN: \"VEN\",\n\tBOB: \"BOB\",\n\tEUR: \"EUR\",\n\tNGN: \"NGN\",\n\tUSD: \"USD\",\n\tCOP: \"COP\",\n\tCUP: \"CUP\",\n\tECU: \"ECU\",\n\tPEN: \"PEN\",\n\tPHP: \"PHP\",\n} as const;\n\n/** Union of supported currency codes. */\nexport type CurrencyCode = (typeof CURRENCY)[keyof typeof CURRENCY];\n\n/**\n * Tuple form of the currency codes — used by `z.enum(...)` in the shared\n * validation layer. Narrow tuple type required by Zod.\n */\nexport const CURRENCY_CODES = Object.values(CURRENCY) as [CurrencyCode, ...CurrencyCode[]];\n","import { SdkError } from \"../validation\";\n\nexport type ZkkycErrorCode =\n\t| \"VALIDATION_ERROR\"\n\t| \"CONTRACT_READ_ERROR\"\n\t| \"ENCODE_ERROR\"\n\t| \"RECLAIM_INIT_FAILED\"\n\t| \"RECLAIM_SESSION_NOT_FOUND\"\n\t| \"RECLAIM_PROOF_GENERATION_FAILED\"\n\t| \"RECLAIM_PROOF_INVALID\"\n\t| \"RECLAIM_POLLING_ABORTED\"\n\t| \"ZK_PASSPORT_INIT_FAILED\"\n\t| \"ZK_PASSPORT_REJECTED\"\n\t| \"ZK_PASSPORT_VERIFICATION_FAILED\"\n\t| \"ZK_PASSPORT_ABORTED\"\n\t| \"SIMPLE_KYC_SESSION_FAILED\"\n\t| \"SIMPLE_KYC_REDEEM_FAILED\"\n\t| \"LIVENESS_SESSION_FAILED\"\n\t| \"LIVENESS_REDEEM_FAILED\"\n\t| \"BVN_ONBOARD_FAILED\"\n\t| \"BVN_SUBMIT_FAILED\"\n\t| \"BVN_OTP_SEND_FAILED\"\n\t| \"BVN_OTP_CONFIRM_FAILED\"\n\t| \"BVN_ATTESTATION_FAILED\"\n\t| \"BVN_SESSION_EXPIRED\"\n\t| \"PEER_DEPENDENCY_MISSING\";\n\nexport class ZkkycError extends SdkError<ZkkycErrorCode> {\n\tconstructor(\n\t\tmessage: string,\n\t\toptions: {\n\t\t\tcode: ZkkycErrorCode;\n\t\t\tcause?: unknown;\n\t\t\tcontext?: Record<string, unknown>;\n\t\t},\n\t) {\n\t\tsuper(message, options);\n\t\tthis.name = \"ZkkycError\";\n\t}\n}\n","import { z } from \"zod\";\nimport { ZodAddressSchema } from \"../validation\";\n\n// ── Write param schemas ──────────────────────────────────────────────────────\n\nexport const ZodAnonAadharProofParamsSchema = z.object({\n\tnullifierSeed: z.bigint(),\n\tnullifier: z.bigint(),\n\ttimestamp: z.bigint(),\n\tsignal: z.bigint(),\n\trevealArray: z.tuple([z.bigint(), z.bigint(), z.bigint(), z.bigint()]),\n\tpackedGroth16Proof: z.tuple([\n\t\tz.bigint(),\n\t\tz.bigint(),\n\t\tz.bigint(),\n\t\tz.bigint(),\n\t\tz.bigint(),\n\t\tz.bigint(),\n\t\tz.bigint(),\n\t\tz.bigint(),\n\t]),\n});\n\nexport type AnonAadharProofParams = z.infer<typeof ZodAnonAadharProofParamsSchema>;\n\nexport const ZodSocialVerifyParamsSchema = z.object({\n\t_socialName: z.string(),\n\tproofs: z.array(\n\t\tz.object({\n\t\t\tclaimInfo: z.object({\n\t\t\t\tprovider: z.string(),\n\t\t\t\tparameters: z.string(),\n\t\t\t\tcontext: z.string(),\n\t\t\t}),\n\t\t\tsignedClaim: z.object({\n\t\t\t\tclaim: z.object({\n\t\t\t\t\tidentifier: z.string(),\n\t\t\t\t\towner: ZodAddressSchema,\n\t\t\t\t\ttimestampS: z.number(),\n\t\t\t\t\tepoch: z.number(),\n\t\t\t\t}),\n\t\t\t\tsignatures: z.array(z.string()),\n\t\t\t}),\n\t\t}),\n\t),\n});\n\nexport type SocialVerifyParams = z.infer<typeof ZodSocialVerifyParamsSchema>;\n\n// Schema matching SolidityVerifierParameters from @zkpassport/sdk (structural definition)\nexport const ZodSolidityVerifierParametersSchema = z.object({\n\tversion: z.string().refine((val) => val.startsWith(\"0x\"), {\n\t\tmessage: \"Version must be a hex string\",\n\t}),\n\tproofVerificationData: z.object({\n\t\tvkeyHash: z.string().refine((val) => /^0x[a-fA-F0-9]{64}$/.test(val), {\n\t\t\tmessage: \"Invalid bytes32 hex string\",\n\t\t}),\n\t\tproof: z.string().refine((val) => val.startsWith(\"0x\"), {\n\t\t\tmessage: \"Proof must be a hex string\",\n\t\t}),\n\t\tpublicInputs: z.array(\n\t\t\tz.string().refine((val) => /^0x[a-fA-F0-9]{64}$/.test(val), {\n\t\t\t\tmessage: \"Each public input must be a valid bytes32 hex string\",\n\t\t\t}),\n\t\t),\n\t}),\n\tcommittedInputs: z.string().refine((val) => val.startsWith(\"0x\"), {\n\t\tmessage: \"Committed inputs must be a hex string\",\n\t}),\n\tserviceConfig: z.object({\n\t\tvalidityPeriodInSeconds: z.number().int().nonnegative(),\n\t\tdomain: z.string(),\n\t\tscope: z.string(),\n\t\tdevMode: z.boolean(),\n\t}),\n});\n\nexport type SolidityVerifierParameters = z.infer<typeof ZodSolidityVerifierParametersSchema>;\n\nexport const ZodZkPassportRegisterParamsSchema = z.object({\n\tparams: ZodSolidityVerifierParametersSchema,\n\tisIDCard: z.boolean(),\n});\n\nexport type ZkPassportRegisterParams = z.infer<typeof ZodZkPassportRegisterParamsSchema>;\n\n// ── simple-kyc EIP-712 attestation ───────────────────────────────────────────\n\nexport const ZodSimpleKycSubmitParamsSchema = z.object({\n\t/** Per-(tenant, identity) Sybil nullifier (bytes32 hex). */\n\tnullifier: z.string().refine((v) => /^0x[a-fA-F0-9]{64}$/.test(v), {\n\t\tmessage: \"nullifier must be a bytes32 hex string\",\n\t}),\n\t/** Remaining limit in micro-USDC (part of the signed struct). */\n\tlimit: z.bigint(),\n\t/** Attestation expiry (unix seconds). */\n\texpiry: z.bigint(),\n\t/** 65-byte secp256k1 signature (hex). */\n\tsignature: z.string().refine((v) => /^0x[a-fA-F0-9]+$/.test(v), {\n\t\tmessage: \"signature must be a hex string\",\n\t}),\n});\n\nexport type SimpleKycSubmitParams = z.infer<typeof ZodSimpleKycSubmitParamsSchema>;\n\n// ── BVN EIP-712 attestation ──────────────────────────────────────────────────\n\nexport const ZodBvnSubmitParamsSchema = z.object({\n\t/** Per-(tenant, identity) Sybil nullifier (bytes32 hex). */\n\tnullifier: z.string().refine((v) => /^0x[a-fA-F0-9]{64}$/.test(v), {\n\t\tmessage: \"nullifier must be a bytes32 hex string\",\n\t}),\n\t/** Remaining limit in micro-USDC (part of the signed struct). */\n\tlimit: z.bigint(),\n\t/** Attestation expiry (unix seconds). */\n\texpiry: z.bigint(),\n\t/** 65-byte secp256k1 signature (hex). */\n\tsignature: z.string().refine((v) => /^0x[a-fA-F0-9]+$/.test(v), {\n\t\tmessage: \"signature must be a hex string\",\n\t}),\n});\n\nexport type BvnSubmitParams = z.infer<typeof ZodBvnSubmitParamsSchema>;\n\n// ── Liveness EIP-712 attestation ─────────────────────────────────────────────\n\nexport const ZodLivenessSubmitParamsSchema = z.object({\n\t/** Per-(tenant, identity) Sybil nullifier (bytes32 hex). */\n\tnullifier: z.string().refine((v) => /^0x[a-fA-F0-9]{64}$/.test(v), {\n\t\tmessage: \"nullifier must be a bytes32 hex string\",\n\t}),\n\t/** Remaining limit in micro-USDC (part of the signed struct). */\n\tlimit: z.bigint(),\n\t/** Attestation expiry (unix seconds). */\n\texpiry: z.bigint(),\n\t/** 65-byte secp256k1 signature (hex). */\n\tsignature: z.string().refine((v) => /^0x[a-fA-F0-9]+$/.test(v), {\n\t\tmessage: \"signature must be a hex string\",\n\t}),\n});\n\nexport type LivenessSubmitParams = z.infer<typeof ZodLivenessSubmitParamsSchema>;\n","import { erc20Abi } from \"viem\";\nimport { orderFlowFacetAbi } from \"./order-flow-facet\";\nimport { orderProcessorFacetAbi } from \"./order-processor-facet\";\nimport { p2pConfigFacetAbi } from \"./p2p-config-facet\";\nimport { p2pStakeBoostFacetAbi } from \"./p2p-stake-boost-facet\";\nimport { reputationManagerAbi } from \"./reputation-manager\";\n\nconst DIAMOND_ABI = [\n\t...orderFlowFacetAbi,\n\t...orderProcessorFacetAbi,\n\t...p2pConfigFacetAbi,\n\t...p2pStakeBoostFacetAbi,\n] as const;\n\nexport const ABIS = {\n\tDIAMOND: DIAMOND_ABI,\n\tFACETS: {\n\t\tORDER_FLOW: orderFlowFacetAbi,\n\t\tORDER_PROCESSOR: orderProcessorFacetAbi,\n\t\tCONFIG: p2pConfigFacetAbi,\n\t\tSTAKE: p2pStakeBoostFacetAbi,\n\t},\n\tEXTERNAL: {\n\t\tUSDC: erc20Abi,\n\t\tREPUTATION_MANAGER: reputationManagerAbi,\n\t},\n} as const;\n","export const orderFlowFacetAbi = [\n\t{\n\t\tinputs: [\n\t\t\t{ internalType: \"uint256\", name: \"circleId\", type: \"uint256\" },\n\t\t\t{ internalType: \"uint256\", name: \"assignUpto\", type: \"uint256\" },\n\t\t\t{ internalType: \"bytes32\", name: \"currency\", type: \"bytes32\" },\n\t\t\t{ internalType: \"address\", name: \"user\", type: \"address\" },\n\t\t\t{ internalType: \"uint256\", name: \"usdtAmount\", type: \"uint256\" },\n\t\t\t{ internalType: \"uint256\", name: \"fiatAmount\", type: \"uint256\" },\n\t\t\t{ internalType: \"int256\", name: \"orderType\", type: \"int256\" },\n\t\t\t{ internalType: \"uint256\", name: \"preferredPCConfigId\", type: \"uint256\" },\n\t\t],\n\t\tname: \"getAssignableMerchantsFromCircle\",\n\t\toutputs: [{ internalType: \"address[]\", name: \"\", type: \"address[]\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{ internalType: \"address\", name: \"_user\", type: \"address\" },\n\t\t\t{ internalType: \"bytes32\", name: \"_nativeCurrency\", type: \"bytes32\" },\n\t\t],\n\t\tname: \"userTxLimit\",\n\t\toutputs: [\n\t\t\t{ internalType: \"uint256\", name: \"\", type: \"uint256\" },\n\t\t\t{ internalType: \"uint256\", name: \"\", type: \"uint256\" },\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{ internalType: \"string\", name: \"_pubKey\", type: \"string\" },\n\t\t\t{ internalType: \"uint256\", name: \"_amount\", type: \"uint256\" },\n\t\t\t{ internalType: \"address\", name: \"_recipientAddr\", type: \"address\" },\n\t\t\t{ internalType: \"uint8\", name: \"_orderType\", type: \"uint8\" },\n\t\t\t{ internalType: \"string\", name: \"_userUpi\", type: \"string\" },\n\t\t\t{ internalType: \"string\", name: \"_userPubKey\", type: \"string\" },\n\t\t\t{ internalType: \"bytes32\", name: \"_currency\", type: \"bytes32\" },\n\t\t\t{ internalType: \"uint256\", name: \"preferredPaymentChannelConfigId\", type: \"uint256\" },\n\t\t\t{ internalType: \"uint256\", name: \"_circleId\", type: \"uint256\" },\n\t\t\t{ internalType: \"uint256\", name: \"_fiatAmountLimit\", type: \"uint256\" },\n\t\t],\n\t\tname: \"placeOrder\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [{ internalType: \"uint256\", name: \"_orderId\", type: \"uint256\" }],\n\t\tname: \"cancelOrder\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{ internalType: \"uint256\", name: \"_orderId\", type: \"uint256\" },\n\t\t\t{ internalType: \"string\", name: \"_userEncUpi\", type: \"string\" },\n\t\t\t{ internalType: \"uint256\", name: \"_updatedAmount\", type: \"uint256\" },\n\t\t],\n\t\tname: \"setSellOrderUpi\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"OrderPlaced\",\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{ indexed: true, name: \"orderId\", type: \"uint256\" },\n\t\t\t{ indexed: true, name: \"user\", type: \"address\" },\n\t\t\t{ indexed: true, name: \"merchant\", type: \"address\" },\n\t\t\t{ indexed: false, name: \"amount\", type: \"uint256\" },\n\t\t\t{ indexed: false, name: \"orderType\", type: \"uint8\" },\n\t\t\t{ indexed: false, name: \"placedTimestamp\", type: \"uint256\" },\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tname: \"_order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"amount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"fiatAmount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"placedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"completedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userCompletedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"acceptedMerchant\", type: \"address\" },\n\t\t\t\t\t{ name: \"user\", type: \"address\" },\n\t\t\t\t\t{ name: \"recipientAddr\", type: \"address\" },\n\t\t\t\t\t{ name: \"pubkey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"userCompleted\", type: \"bool\" },\n\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t{ name: \"orderType\", type: \"uint8\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"disputeInfo\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"raisedBy\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"redactTransId\", type: \"uint256\" },\n\t\t\t\t\t\t\t{ name: \"accountNumber\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"id\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userPubKey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encMerchantUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"acceptedAccountNo\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"assignedAccountNos\", type: \"uint256[]\" },\n\t\t\t\t\t{ name: \"currency\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"preferredPaymentChannelConfigId\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"circleId\", type: \"uint256\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"OrderAccepted\",\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{ indexed: true, name: \"orderId\", type: \"uint256\" },\n\t\t\t{ indexed: true, name: \"merchant\", type: \"address\" },\n\t\t\t{ indexed: false, name: \"pubKey\", type: \"string\" },\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tname: \"_order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"amount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"fiatAmount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"placedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"completedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userCompletedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"acceptedMerchant\", type: \"address\" },\n\t\t\t\t\t{ name: \"user\", type: \"address\" },\n\t\t\t\t\t{ name: \"recipientAddr\", type: \"address\" },\n\t\t\t\t\t{ name: \"pubkey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"userCompleted\", type: \"bool\" },\n\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t{ name: \"orderType\", type: \"uint8\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"disputeInfo\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"raisedBy\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"redactTransId\", type: \"uint256\" },\n\t\t\t\t\t\t\t{ name: \"accountNumber\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"id\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userPubKey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encMerchantUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"acceptedAccountNo\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"assignedAccountNos\", type: \"uint256[]\" },\n\t\t\t\t\t{ name: \"currency\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"preferredPaymentChannelConfigId\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"circleId\", type: \"uint256\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"BuyOrderPaid\",\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{ indexed: true, name: \"orderId\", type: \"uint256\" },\n\t\t\t{ indexed: true, name: \"user\", type: \"address\" },\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tname: \"_order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"amount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"fiatAmount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"placedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"completedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userCompletedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"acceptedMerchant\", type: \"address\" },\n\t\t\t\t\t{ name: \"user\", type: \"address\" },\n\t\t\t\t\t{ name: \"recipientAddr\", type: \"address\" },\n\t\t\t\t\t{ name: \"pubkey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"userCompleted\", type: \"bool\" },\n\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t{ name: \"orderType\", type: \"uint8\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"disputeInfo\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"raisedBy\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"redactTransId\", type: \"uint256\" },\n\t\t\t\t\t\t\t{ name: \"accountNumber\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"id\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userPubKey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encMerchantUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"acceptedAccountNo\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"assignedAccountNos\", type: \"uint256[]\" },\n\t\t\t\t\t{ name: \"currency\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"preferredPaymentChannelConfigId\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"circleId\", type: \"uint256\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"OrderCompleted\",\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{ indexed: true, name: \"orderId\", type: \"uint256\" },\n\t\t\t{ indexed: true, name: \"user\", type: \"address\" },\n\t\t\t{ indexed: false, name: \"completedTimestamp\", type: \"uint256\" },\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tname: \"_order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"amount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"fiatAmount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"placedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"completedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userCompletedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"acceptedMerchant\", type: \"address\" },\n\t\t\t\t\t{ name: \"user\", type: \"address\" },\n\t\t\t\t\t{ name: \"recipientAddr\", type: \"address\" },\n\t\t\t\t\t{ name: \"pubkey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"userCompleted\", type: \"bool\" },\n\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t{ name: \"orderType\", type: \"uint8\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"disputeInfo\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"raisedBy\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"redactTransId\", type: \"uint256\" },\n\t\t\t\t\t\t\t{ name: \"accountNumber\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"id\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userPubKey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encMerchantUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"acceptedAccountNo\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"assignedAccountNos\", type: \"uint256[]\" },\n\t\t\t\t\t{ name: \"currency\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"preferredPaymentChannelConfigId\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"circleId\", type: \"uint256\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"CancelledOrders\",\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{ indexed: true, name: \"orderId\", type: \"uint256\" },\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tname: \"_order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"amount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"fiatAmount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"placedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"completedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userCompletedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"acceptedMerchant\", type: \"address\" },\n\t\t\t\t\t{ name: \"user\", type: \"address\" },\n\t\t\t\t\t{ name: \"recipientAddr\", type: \"address\" },\n\t\t\t\t\t{ name: \"pubkey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"userCompleted\", type: \"bool\" },\n\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t{ name: \"orderType\", type: \"uint8\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"disputeInfo\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"raisedBy\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"redactTransId\", type: \"uint256\" },\n\t\t\t\t\t\t\t{ name: \"accountNumber\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"id\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userPubKey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encMerchantUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"acceptedAccountNo\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"assignedAccountNos\", type: \"uint256[]\" },\n\t\t\t\t\t{ name: \"currency\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"preferredPaymentChannelConfigId\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"circleId\", type: \"uint256\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n] as const;\n","/**\n * Minimal ABI fragments for reads on OrderProcessor storage via the Diamond.\n * `getOrdersById`, `getAdditionalOrderDetails`, and the per-currency small-order\n * fee config getters (`getSmallOrderThreshold`, `getSmallOrderFixedFee`).\n */\nexport const orderProcessorFacetAbi = [\n\t{\n\t\ttype: \"function\",\n\t\tname: \"getOrdersById\",\n\t\tstateMutability: \"view\",\n\t\tinputs: [{ name: \"orderId\", type: \"uint256\" }],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"amount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"fiatAmount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"placedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"completedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userCompletedTimestamp\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"acceptedMerchant\", type: \"address\" },\n\t\t\t\t\t{ name: \"user\", type: \"address\" },\n\t\t\t\t\t{ name: \"recipientAddr\", type: \"address\" },\n\t\t\t\t\t{ name: \"pubkey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"userCompleted\", type: \"bool\" },\n\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t{ name: \"orderType\", type: \"uint8\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"disputeInfo\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"raisedBy\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"status\", type: \"uint8\" },\n\t\t\t\t\t\t\t{ name: \"redactTransId\", type: \"uint256\" },\n\t\t\t\t\t\t\t{ name: \"accountNumber\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"id\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"userPubKey\", type: \"string\" },\n\t\t\t\t\t{ name: \"encMerchantUpi\", type: \"string\" },\n\t\t\t\t\t{ name: \"acceptedAccountNo\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"assignedAccountNos\", type: \"uint256[]\" },\n\t\t\t\t\t{ name: \"currency\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"preferredPaymentChannelConfigId\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"circleId\", type: \"uint256\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"getAdditionalOrderDetails\",\n\t\tstateMutability: \"view\",\n\t\tinputs: [{ name: \"orderId\", type: \"uint256\" }],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"fixedFeePaid\", type: \"uint64\" },\n\t\t\t\t\t{ name: \"tipsPaid\", type: \"uint64\" },\n\t\t\t\t\t{ name: \"acceptedTimestamp\", type: \"uint128\" },\n\t\t\t\t\t{ name: \"paidTimestamp\", type: \"uint128\" },\n\t\t\t\t\t{ name: \"reserved2\", type: \"uint128\" },\n\t\t\t\t\t{ name: \"actualUsdtAmount\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"actualFiatAmount\", type: \"uint256\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"getSmallOrderThreshold\",\n\t\tstateMutability: \"view\",\n\t\tinputs: [{ name: \"currency\", type: \"bytes32\" }],\n\t\toutputs: [{ name: \"\", type: \"uint256\" }],\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"getSmallOrderFixedFee\",\n\t\tstateMutability: \"view\",\n\t\tinputs: [{ name: \"currency\", type: \"bytes32\" }],\n\t\toutputs: [{ name: \"\", type: \"uint256\" }],\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"raiseDispute\",\n\t\tstateMutability: \"nonpayable\",\n\t\tinputs: [\n\t\t\t{ name: \"_orderId\", type: \"uint256\" },\n\t\t\t{ name: \"redactTransId\", type: \"uint256\" },\n\t\t],\n\t\toutputs: [],\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"paidBuyOrder\",\n\t\tstateMutability: \"nonpayable\",\n\t\tinputs: [{ name: \"_orderId\", type: \"uint256\" }],\n\t\toutputs: [],\n\t},\n] as const;\n","export const p2pConfigFacetAbi = [\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"_currency\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"getPriceConfig\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"buyPrice\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"sellPrice\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"int256\",\n\t\t\t\t\t\tname: \"buyPriceOffset\",\n\t\t\t\t\t\ttype: \"int256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"baseSpread\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct P2pConfigStorage.PriceConfig\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"_nativeCurrency\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"getRpPerUsdtLimitRational\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"numerator\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"denominator\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n] as const;\n","export const p2pStakeBoostFacetAbi = [\n  {\n    inputs: [{ internalType: \"uint256\", name: \"tokens\", type: \"uint256\" }],\n    name: \"p2pBoostStake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [{ internalType: \"uint256\", name: \"tokens\", type: \"uint256\" }],\n    name: \"p2pBoostTopUp\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"p2pBoostRequestUnstake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"p2pBoostClaimUnstake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"p2pBoostCancelUnstake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [{ internalType: \"address\", name: \"user\", type: \"address\" }],\n    name: \"getUserStake\",\n    outputs: [\n      {\n        components: [\n          { internalType: \"uint128\", name: \"stakedAmount\", type: \"uint128\" },\n          { internalType: \"uint64\", name: \"cooldownEnd\", type: \"uint64\" },\n          { internalType: \"uint8\", name: \"status\", type: \"uint8\" },\n        ],\n        internalType: \"struct P2PStakeBoostStorage.UserStake\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [{ internalType: \"bytes32\", name: \"currency\", type: \"bytes32\" }],\n    name: \"getStakeBoostConfig\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"tokensPerUsdNumerator\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"tokensPerUsdDenominator\",\n            type: \"uint256\",\n          },\n          { internalType: \"uint256\", name: \"maxBoostUsd\", type: \"uint256\" },\n        ],\n        internalType: \"struct P2PStakeBoostStorage.BoostConfig\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"getStakeBoostGlobals\",\n    outputs: [\n      { internalType: \"address\", name: \"p2pToken\", type: \"address\" },\n      { internalType: \"address\", name: \"fraudReserve\", type: \"address\" },\n      { internalType: \"uint256\", name: \"maxStakeTokens\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"normalCooldown\", type: \"uint256\" },\n      { internalType: \"uint256\", name: \"blacklistCooldown\", type: \"uint256\" },\n      { internalType: \"uint8\", name: \"tokenDecimals\", type: \"uint8\" },\n      { internalType: \"uint256\", name: \"totalStaked\", type: \"uint256\" },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n] as const;\n","export const reputationManagerAbi = [\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"_socialName\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"string\",\n\t\t\t\t\t\t\t\tname: \"provider\",\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"string\",\n\t\t\t\t\t\t\t\tname: \"parameters\",\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"string\",\n\t\t\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct IReclaimSDK.ClaimInfo\",\n\t\t\t\t\t\tname: \"claimInfo\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tname: \"identifier\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\t\t\t\t\tname: \"owner\",\n\t\t\t\t\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint32\",\n\t\t\t\t\t\t\t\t\t\tname: \"timestampS\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint32\",\n\t\t\t\t\t\t\t\t\t\tname: \"epoch\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tinternalType: \"struct IReclaimSDK.CompleteClaimData\",\n\t\t\t\t\t\t\t\tname: \"claim\",\n\t\t\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\t\t\tname: \"signatures\",\n\t\t\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct IReclaimSDK.SignedClaim\",\n\t\t\t\t\t\tname: \"signedClaim\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct IReclaimSDK.Proof[]\",\n\t\t\t\tname: \"proofs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t},\n\t\t],\n\t\tname: \"socialVerify\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"nullifierSeed\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"nullifier\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"timestamp\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"signal\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256[4]\",\n\t\t\t\tname: \"revealArray\",\n\t\t\t\ttype: \"uint256[4]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256[8]\",\n\t\t\t\tname: \"groth16Proof\",\n\t\t\t\ttype: \"uint256[8]\",\n\t\t\t},\n\t\t],\n\t\tname: \"submitAnonAadharProof\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"version\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\tname: \"vkeyHash\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\tname: \"proof\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32[]\",\n\t\t\t\t\t\t\t\tname: \"publicInputs\",\n\t\t\t\t\t\t\t\ttype: \"bytes32[]\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct ProofVerificationData\",\n\t\t\t\t\t\tname: \"proofVerificationData\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"committedInputs\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"validityPeriodInSeconds\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"string\",\n\t\t\t\t\t\t\t\tname: \"domain\",\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"string\",\n\t\t\t\t\t\t\t\tname: \"scope\",\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bool\",\n\t\t\t\t\t\t\t\tname: \"devMode\",\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct ServiceConfig\",\n\t\t\t\t\t\tname: \"serviceConfig\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct ProofVerificationParams\",\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bool\",\n\t\t\t\tname: \"isIDCard\",\n\t\t\t\ttype: \"bool\",\n\t\t\t},\n\t\t],\n\t\tname: \"zkPassportRegister\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{ internalType: \"bytes32\", name: \"nullifier\", type: \"bytes32\" },\n\t\t\t{ internalType: \"uint256\", name: \"limit\", type: \"uint256\" },\n\t\t\t{ internalType: \"uint256\", name: \"expiry\", type: \"uint256\" },\n\t\t\t{ internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n\t\t],\n\t\tname: \"submitKycAttestation\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"kycRp\",\n\t\toutputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n\t\tname: \"kycVerified\",\n\t\toutputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t// ── BVN (Nigerian Bank Verification Number) attestation ─────────────────\n\t{ inputs: [], name: \"BvnSignerNotSet\", type: \"error\" },\n\t{ inputs: [], name: \"BvnAttestationExpired\", type: \"error\" },\n\t{ inputs: [], name: \"BvnNullifierAlreadySpent\", type: \"error\" },\n\t{ inputs: [], name: \"BvnAlreadyVerified\", type: \"error\" },\n\t{ inputs: [], name: \"BvnInvalidSignature\", type: \"error\" },\n\t{\n\t\tinputs: [\n\t\t\t{ internalType: \"bytes32\", name: \"nullifier\", type: \"bytes32\" },\n\t\t\t{ internalType: \"uint256\", name: \"limit\", type: \"uint256\" },\n\t\t\t{ internalType: \"uint256\", name: \"expiry\", type: \"uint256\" },\n\t\t\t{ internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n\t\t],\n\t\tname: \"submitBvnAttestation\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"bvnRp\",\n\t\toutputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n\t\tname: \"bvnVerified\",\n\t\toutputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t// ── Liveness (face-only, no document) attestation ───────────────────────\n\t{ inputs: [], name: \"LivenessSignerNotSet\", type: \"error\" },\n\t{ inputs: [], name: \"LivenessAttestationExpired\", type: \"error\" },\n\t{ inputs: [], name: \"LivenessNullifierZero\", type: \"error\" },\n\t{ inputs: [], name: \"LivenessNullifierAlreadySpent\", type: \"error\" },\n\t{ inputs: [], name: \"LivenessAlreadyVerified\", type: \"error\" },\n\t{ inputs: [], name: \"LivenessInvalidSignature\", type: \"error\" },\n\t{\n\t\tinputs: [\n\t\t\t{ internalType: \"bytes32\", name: \"nullifier\", type: \"bytes32\" },\n\t\t\t{ internalType: \"uint256\", name: \"limit\", type: \"uint256\" },\n\t\t\t{ internalType: \"uint256\", name: \"expiry\", type: \"uint256\" },\n\t\t\t{ internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n\t\t],\n\t\tname: \"submitLivenessAttestation\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"livenessRp\",\n\t\toutputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n\t\tname: \"livenessVerified\",\n\t\toutputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n] as const;\n","import type { Result } from \"neverthrow\";\nimport type { Address } from \"viem\";\nimport {\n\tprepareSocialVerify,\n\tprepareSubmitAnonAadharProof,\n\tprepareSubmitBvnAttestation,\n\tprepareSubmitKycAttestation,\n\tprepareSubmitLivenessAttestation,\n\tprepareZkPassportRegister,\n} from \"../contracts/reputation-manager/writes\";\nimport type { ZkkycError } from \"./errors\";\nimport type { ZkkycConfig } from \"./types\";\nimport type {\n\tAnonAadharProofParams,\n\tBvnSubmitParams,\n\tLivenessSubmitParams,\n\tSimpleKycSubmitParams,\n\tSocialVerifyParams,\n\tZkPassportRegisterParams,\n} from \"./validation\";\n\nexport interface Zkkyc {\n\tprepareSocialVerify(\n\t\tparams: SocialVerifyParams,\n\t): Result<{ to: Address; data: `0x${string}` }, ZkkycError>;\n\tprepareSubmitAnonAadharProof(\n\t\tparams: AnonAadharProofParams,\n\t): Result<{ to: Address; data: `0x${string}` }, ZkkycError>;\n\tprepareZkPassportRegister(\n\t\tparams: ZkPassportRegisterParams,\n\t): Result<{ to: Address; data: `0x${string}` }, ZkkycError>;\n\tprepareSubmitKycAttestation(\n\t\tparams: SimpleKycSubmitParams,\n\t): Result<{ to: Address; data: `0x${string}` }, ZkkycError>;\n\tprepareSubmitBvnAttestation(\n\t\tparams: BvnSubmitParams,\n\t): Result<{ to: Address; data: `0x${string}` }, ZkkycError>;\n\tprepareSubmitLivenessAttestation(\n\t\tparams: LivenessSubmitParams,\n\t): Result<{ to: Address; data: `0x${string}` }, ZkkycError>;\n}\n\n/**\n * Creates a Zkkyc client that binds a reputation manager address,\n * exposing write-preparation methods for social verify, Aadhaar, and ZK Passport.\n */\nexport function createZkkyc(config: ZkkycConfig): Zkkyc {\n\tconst { reputationManagerAddress } = config;\n\treturn {\n\t\tprepareSocialVerify: (params) => prepareSocialVerify(reputationManagerAddress, params),\n\t\tprepareSubmitAnonAadharProof: (params) =>\n\t\t\tprepareSubmitAnonAadharProof(reputationManagerAddress, params),\n\t\tprepareZkPassportRegister: (params) =>\n\t\t\tprepareZkPassportRegister(reputationManagerAddress, params),\n\t\tprepareSubmitKycAttestation: (params) =>\n\t\t\tprepareSubmitKycAttestation(reputationManagerAddress, params),\n\t\tprepareSubmitBvnAttestation: (params) =>\n\t\t\tprepareSubmitBvnAttestation(reputationManagerAddress, params),\n\t\tprepareSubmitLivenessAttestation: (params) =>\n\t\t\tprepareSubmitLivenessAttestation(reputationManagerAddress, params),\n\t};\n}\n","import { ResultAsync } from \"neverthrow\";\nimport { ZkkycError, type ZkkycErrorCode } from \"../errors\";\nimport type {\n\tBvnAttestation,\n\tBvnDecision,\n\tBvnFlow,\n\tBvnFlowConfig,\n\tBvnMethod,\n\tBvnOnboardParams,\n\tBvnSendOtpParams,\n\tBvnSession,\n} from \"./types\";\n\n/**\n * Drives the BVN (Nigerian Bank Verification Number) on-chain attestation flow.\n *\n * The SDK talks only to a backend proxy — the single party that holds the Mono\n * secret + the EIP-712 attestor key. Every response uses the `{ ok, data }`\n * envelope. On approval, `getAttestation` returns a signed attestation shaped\n * for `zkkyc.prepareSubmitBvnAttestation`, which the app submits on-chain from\n * the same wallet.\n *\n * Flow: onboard → submitBvn → sendOtp → confirmOtp → getAttestation.\n */\nexport function createBvnFlow(config: BvnFlowConfig): BvnFlow {\n\tconst { baseUrl, tenant } = config;\n\n\tasync function request<T>(\n\t\tpath: string,\n\t\tfailureCode: ZkkycErrorCode,\n\t\tinit: RequestInit | undefined,\n\t\tparse: (data: unknown) => T,\n\t): Promise<T> {\n\t\tconst response = await fetch(`${baseUrl}${path}`, init);\n\t\tconst body: unknown = await response.json().catch(() => null);\n\t\tconst envelope =\n\t\t\tbody && typeof body === \"object\" ? (body as Record<string, unknown>) : {};\n\n\t\tif (!response.ok || envelope.ok === false) {\n\t\t\tconst code = typeof envelope.error === \"string\" ? envelope.error : \"request_failed\";\n\t\t\tconst message =\n\t\t\t\ttypeof envelope.message === \"string\"\n\t\t\t\t\t? envelope.message\n\t\t\t\t\t: `BVN request failed (${response.status})`;\n\t\t\t// A rejected session token means the run must restart from onboard.\n\t\t\tconst isSessionExpired = response.status === 401 || code === \"unauthorized\";\n\t\t\tthrow new ZkkycError(message, {\n\t\t\t\tcode: isSessionExpired ? \"BVN_SESSION_EXPIRED\" : failureCode,\n\t\t\t\tcontext: { status: response.status, backendError: code, path },\n\t\t\t});\n\t\t}\n\n\t\treturn parse(envelope.data);\n\t}\n\n\tfunction run<T>(\n\t\tfailureCode: ZkkycErrorCode,\n\t\tfn: () => Promise<T>,\n\t): ResultAsync<T, ZkkycError> {\n\t\treturn ResultAsync.fromPromise(fn(), (error) => {\n\t\t\tif (error instanceof ZkkycError) return error;\n\t\t\treturn new ZkkycError(\"BVN request failed\", { code: failureCode, cause: error });\n\t\t});\n\t}\n\n\tfunction authHeaders(token: string): Record<string, string> {\n\t\treturn { \"content-type\": \"application/json\", \"x-session-token\": token };\n\t}\n\n\treturn {\n\t\tonboard(params: BvnOnboardParams): ResultAsync<BvnSession, ZkkycError> {\n\t\t\treturn run(\"BVN_ONBOARD_FAILED\", () =>\n\t\t\t\trequest(\n\t\t\t\t\t\"/v1/onboard\",\n\t\t\t\t\t\"BVN_ONBOARD_FAILED\",\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\t\ttenant,\n\t\t\t\t\t\t\twallet: params.walletAddress,\n\t\t\t\t\t\t\tscope: params.scope ?? \"identity\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\t(data) => {\n\t\t\t\t\t\tconst d = data as { session_id: number; session_token: string };\n\t\t\t\t\t\treturn { sessionId: d.session_id, sessionToken: d.session_token };\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\n\t\tsubmitBvn(session: BvnSession, bvn: string): ResultAsync<BvnMethod[], ZkkycError> {\n\t\t\treturn run(\"BVN_SUBMIT_FAILED\", () =>\n\t\t\t\trequest(\n\t\t\t\t\t`/v1/sessions/${session.sessionId}/bvn`,\n\t\t\t\t\t\"BVN_SUBMIT_FAILED\",\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\theaders: authHeaders(session.sessionToken),\n\t\t\t\t\t\tbody: JSON.stringify({ bvn }),\n\t\t\t\t\t},\n\t\t\t\t\t(data) => (data as { methods: BvnMethod[] }).methods,\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\n\t\tsendOtp(session: BvnSession, params: BvnSendOtpParams): ResultAsync<boolean, ZkkycError> {\n\t\t\treturn run(\"BVN_OTP_SEND_FAILED\", () =>\n\t\t\t\trequest(\n\t\t\t\t\t`/v1/sessions/${session.sessionId}/otp`,\n\t\t\t\t\t\"BVN_OTP_SEND_FAILED\",\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\theaders: authHeaders(session.sessionToken),\n\t\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\t\tmethod: params.method,\n\t\t\t\t\t\t\t...(params.method === \"alternate_phone\" && params.phoneNumber\n\t\t\t\t\t\t\t\t? { phone_number: params.phoneNumber }\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\t(data) => (data as { sent: boolean }).sent,\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\n\t\tconfirmOtp(session: BvnSession, otp: string): ResultAsync<BvnDecision, ZkkycError> {\n\t\t\treturn run(\"BVN_OTP_CONFIRM_FAILED\", () =>\n\t\t\t\trequest(\n\t\t\t\t\t`/v1/sessions/${session.sessionId}/otp/confirm`,\n\t\t\t\t\t\"BVN_OTP_CONFIRM_FAILED\",\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\theaders: authHeaders(session.sessionToken),\n\t\t\t\t\t\tbody: JSON.stringify({ otp }),\n\t\t\t\t\t},\n\t\t\t\t\t(data) => {\n\t\t\t\t\t\tconst d = data as { decision: \"approve\" | \"reject\"; reason?: string };\n\t\t\t\t\t\treturn { decision: d.decision, reason: d.reason };\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\n\t\tgetAttestation(session: BvnSession): ResultAsync<BvnAttestation, ZkkycError> {\n\t\t\treturn run(\"BVN_ATTESTATION_FAILED\", () =>\n\t\t\t\trequest(\n\t\t\t\t\t`/v1/sessions/${session.sessionId}/attestation`,\n\t\t\t\t\t\"BVN_ATTESTATION_FAILED\",\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\theaders: { \"x-session-token\": session.sessionToken },\n\t\t\t\t\t},\n\t\t\t\t\t(data) => {\n\t\t\t\t\t\tconst d = data as {\n\t\t\t\t\t\t\tsignature: string;\n\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\twallet: string;\n\t\t\t\t\t\t\t\tnullifier: string;\n\t\t\t\t\t\t\t\tlimit: string | number;\n\t\t\t\t\t\t\t\texpiry: string | number;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnullifier: d.message.nullifier as `0x${string}`,\n\t\t\t\t\t\t\tlimit: BigInt(d.message.limit),\n\t\t\t\t\t\t\texpiry: BigInt(d.message.expiry),\n\t\t\t\t\t\t\tsignature: d.signature as `0x${string}`,\n\t\t\t\t\t\t\twallet: d.message.wallet,\n\t\t\t\t\t\t} satisfies BvnAttestation;\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\n\t\tgetAttestor(): ResultAsync<{ address: string }, ZkkycError> {\n\t\t\treturn run(\"BVN_ATTESTATION_FAILED\", () =>\n\t\t\t\trequest(\n\t\t\t\t\t\"/v1/attestor\",\n\t\t\t\t\t\"BVN_ATTESTATION_FAILED\",\n\t\t\t\t\tundefined,\n\t\t\t\t\t(data) => data as { address: string },\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t};\n}\n","import type { SocialPlatform } from \"./types\";\n\n/** Default Reclaim provider IDs for each social platform. */\nexport const DEFAULT_RECLAIM_PROVIDER_IDS: Record<SocialPlatform, string> = {\n\tlinkedin: \"6a86edbe-a0fe-420b-8db2-3155220cc949\",\n\tgithub: \"033f0c06-2eb3-48c8-894c-5599c3356d1c\",\n\tx: \"aad95818-f726-4a34-be97-8d1f47631b03\",\n\tinstagram: \"7e5b59a9-56c5-490c-a169-82a443f9b507\",\n\tfacebook: \"2701510b-c835-4820-84f0-d9e74569656b\",\n\tbinance: \"7e40c007-f432-4d47-ac00-3e0762f8a7a0\",\n};\n\n/** ZK Passport app store links. */\nexport const ZK_PASSPORT_APP_LINKS = {\n\tIOS: \"https://apps.apple.com/us/app/zkpassport/id6477371975\",\n\tANDROID: \"https://play.google.com/store/apps/details?id=app.zkpassport.zkpassport\",\n} as const;\n\n/** Reclaim Protocol app store links. */\nexport const RECLAIM_APP_LINKS = {\n\tANDROID: \"https://play.google.com/store/apps/details?id=org.reclaimprotocol.app\",\n} as const;\n\n/** Default tenant slug for the P2P reputation contract on the simple-kyc service. */\nexport const SIMPLE_KYC_DEFAULT_TENANT = \"p2p-reputation\";\n\n/**\n * Default tenant slug for the P2P reputation contract on the **liveness**\n * service. Distinct registry from simple-kyc's — the two services keep separate\n * databases, so a slug existing on one says nothing about the other.\n */\nexport const LIVENESS_DEFAULT_TENANT = \"p2p-reputation-liveness\";\n\n/** OTP delivery channels the BVN backend (Mono) exposes. */\nexport const BVN_OTP_METHODS = [\"email\", \"phone\", \"phone_1\", \"alternate_phone\"] as const;\n","import { ResultAsync } from \"neverthrow\";\nimport { ZkkycError } from \"../errors\";\nimport type { LivenessAttestation, LivenessFlowParams, LivenessSession } from \"./types\";\n\n/**\n * Starts the hosted liveness wizard flow. Creates a browser-initiable widget\n * session (no API key in the browser — `baseUrl` points at the liveness proxy,\n * which injects the key and whose tenant allowlist validates the redirect_uri),\n * then returns the wizard URL to navigate to.\n *\n * The wizard runs onboard → active liveness challenge → face embed → 1:N dedup\n * and, on approval, redirects back to `redirectUrl` with `?code=<code>&state=<state>`.\n * Call `resumeLivenessFlow({ baseUrl, code })` on return to fetch the attestation.\n *\n * Deliberately separate from `createSimpleKycFlow`: the liveness verifier is a\n * different service with its own database, its own attestor key and its own\n * EIP-712 domain (`LivenessVerifier`, vs the passport wizard's `KycVerifier`).\n * Pointing one flow at the other's base URL yields a signature the contract\n * rejects. The one API-shape difference is that liveness takes **no `country`** —\n * it reads no document, so there is no issuing market to prebind.\n */\nexport function createLivenessFlow(\n\tparams: LivenessFlowParams,\n): ResultAsync<LivenessSession, ZkkycError> {\n\tconst { baseUrl, walletAddress, tenant, redirectUrl, state, onStatus } = params;\n\treturn ResultAsync.fromPromise(\n\t\t(async () => {\n\t\t\tconst res = await fetch(`${baseUrl}/v1/widget/public-sessions`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\twallet_pubkey: walletAddress,\n\t\t\t\t\tredirect_uri: redirectUrl,\n\t\t\t\t\ttenant,\n\t\t\t\t\tstate,\n\t\t\t\t}),\n\t\t\t});\n\t\t\tif (!res.ok) {\n\t\t\t\tconst body = await res.text();\n\t\t\t\tthrow new ZkkycError(`liveness session creation failed: ${res.status} ${body}`, {\n\t\t\t\t\tcode: \"LIVENESS_SESSION_FAILED\",\n\t\t\t\t\tcontext: { status: res.status },\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst data = (await res.json()) as { widget_url: string };\n\t\t\tconst widgetUrl = data.widget_url;\n\t\t\tonStatus?.({ type: \"session_created\", widgetUrl });\n\t\t\treturn {\n\t\t\t\twidgetUrl,\n\t\t\t\tredirect: () => {\n\t\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\t\tonStatus?.({ type: \"redirecting\", widgetUrl });\n\t\t\t\t\t\twindow.location.href = widgetUrl;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t} satisfies LivenessSession;\n\t\t})(),\n\t\t(error) => {\n\t\t\tif (error instanceof ZkkycError) return error;\n\t\t\treturn new ZkkycError(\"liveness flow failed to start\", {\n\t\t\t\tcode: \"LIVENESS_SESSION_FAILED\",\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t},\n\t);\n}\n\n/**\n * Redeems the one-time `code` from the wizard's redirect for the EIP-712\n * attestation. The result feeds straight into `zkkyc.prepareSubmitLivenessAttestation`.\n * The endpoint returns only the (non-PII, self-verifying) attestation.\n */\nexport function resumeLivenessFlow(args: {\n\tbaseUrl: string;\n\tcode: string;\n}): ResultAsync<LivenessAttestation, ZkkycError> {\n\treturn ResultAsync.fromPromise(\n\t\t(async () => {\n\t\t\tconst res = await fetch(`${args.baseUrl}/v1/widget/attestation`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify({ code: args.code }),\n\t\t\t});\n\t\t\tif (!res.ok) {\n\t\t\t\tconst body = await res.text();\n\t\t\t\tthrow new ZkkycError(`liveness attestation redemption failed: ${res.status} ${body}`, {\n\t\t\t\t\tcode: \"LIVENESS_REDEEM_FAILED\",\n\t\t\t\t\tcontext: { status: res.status },\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst d = (await res.json()) as {\n\t\t\t\tnullifier: string;\n\t\t\t\tlimit: string | number;\n\t\t\t\texpiry: string | number;\n\t\t\t\tsignature: string;\n\t\t\t\tidentity_hash?: string;\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tnullifier: d.nullifier as `0x${string}`,\n\t\t\t\tlimit: BigInt(d.limit),\n\t\t\t\texpiry: BigInt(d.expiry),\n\t\t\t\tsignature: d.signature as `0x${string}`,\n\t\t\t\tidentityHash: d.identity_hash,\n\t\t\t} satisfies LivenessAttestation;\n\t\t})(),\n\t\t(error) => {\n\t\t\tif (error instanceof ZkkycError) return error;\n\t\t\treturn new ZkkycError(\"liveness attestation redemption failed\", {\n\t\t\t\tcode: \"LIVENESS_REDEEM_FAILED\",\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t},\n\t);\n}\n","import { ResultAsync } from \"neverthrow\";\nimport { ZkkycError } from \"../errors\";\nimport type { ReclaimFlowParams, ReclaimProofResult, ReclaimSession } from \"./types\";\nimport { SOCIAL_PLATFORM_NAMES } from \"./types\";\n\nconst RECLAIM_SESSION_API = \"https://api.reclaimprotocol.org/api/sdk/session\";\n\n/**\n * Initializes a Reclaim social verification flow and returns a session. `init()`\n * runs eagerly here, so call this on page load; the returned session's `start()`\n * triggers the in-app flow and polls for the proof, so call that on user action.\n */\nexport function createReclaimFlow(\n\tparams: ReclaimFlowParams,\n): ResultAsync<ReclaimSession, ZkkycError> {\n\treturn ResultAsync.fromPromise(\n\t\t(async () => {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: optional peer dependency\n\t\t\tconst mod: any = await import(\"@reclaimprotocol/js-sdk\").catch(() => {\n\t\t\t\tthrow new ZkkycError(\n\t\t\t\t\t\"Missing peer dependency: @reclaimprotocol/js-sdk. Install it with: npm install @reclaimprotocol/js-sdk\",\n\t\t\t\t\t{ code: \"PEER_DEPENDENCY_MISSING\" },\n\t\t\t\t);\n\t\t\t});\n\t\t\tconst { ReclaimProofRequest, transformForOnchain } = mod;\n\n\t\t\tconst {\n\t\t\t\tappId,\n\t\t\t\tappSecret,\n\t\t\t\tproviderIds,\n\t\t\t\tplatform,\n\t\t\t\twalletAddress,\n\t\t\t\tredirectUrl,\n\t\t\t\tsessionId: existingSessionId,\n\t\t\t\tcontextDescription,\n\t\t\t\tonStatus,\n\t\t\t\tsignal,\n\t\t\t\tpollingIntervalMs = 5000,\n\t\t\t} = params;\n\n\t\t\tconst socialName = SOCIAL_PLATFORM_NAMES[platform];\n\t\t\tconst providerId = providerIds[platform];\n\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: optional peer dependency\n\t\t\tlet reclaimProofRequest: any = null;\n\t\t\tlet sessionId: string;\n\t\t\tlet requestUrl = \"\";\n\n\t\t\tif (existingSessionId) {\n\t\t\t\tsessionId = existingSessionId;\n\t\t\t} else {\n\t\t\t\treclaimProofRequest = await ReclaimProofRequest.init(appId, appSecret, providerId, {\n\t\t\t\t\tlaunchOptions: {\n\t\t\t\t\t\tcanUseDeferredDeepLinksFlow: true,\n\t\t\t\t\t\tverificationMode: \"app\",\n\t\t\t\t\t},\n\t\t\t\t\tuseAppClip: true,\n\t\t\t\t\tlog: true,\n\t\t\t\t});\n\n\t\t\t\tconst statusUrl = reclaimProofRequest.getStatusUrl();\n\t\t\t\tsessionId = statusUrl.split(\"/\").pop() || \"\";\n\n\t\t\t\tif (redirectUrl) {\n\t\t\t\t\tconst separator = redirectUrl.includes(\"?\") ? \"&\" : \"?\";\n\t\t\t\t\treclaimProofRequest.setRedirectUrl(\n\t\t\t\t\t\t`${redirectUrl}${separator}sessionId=${sessionId}&socialPlatform=${socialName}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treclaimProofRequest.addContext(\n\t\t\t\t\twalletAddress,\n\t\t\t\t\tcontextDescription ?? `Social verification for ${socialName}`,\n\t\t\t\t);\n\n\t\t\t\trequestUrl = await reclaimProofRequest.getRequestUrl();\n\n\t\t\t\tonStatus?.({ type: \"session_created\", sessionId, requestUrl });\n\t\t\t}\n\n\t\t\tlet aborted = false;\n\n\t\t\tconst pollForProof = async (): Promise<ReclaimProofResult> => {\n\t\t\t\tif (reclaimProofRequest && typeof window !== \"undefined\") {\n\t\t\t\t\treclaimProofRequest.triggerReclaimFlow({ verificationMode: \"app\" });\n\t\t\t\t}\n\n\t\t\t\tonStatus?.({ type: \"polling_started\", sessionId });\n\n\t\t\t\twhile (true) {\n\t\t\t\t\tif (aborted || signal?.aborted) {\n\t\t\t\t\t\tthrow new ZkkycError(\"Reclaim polling aborted\", {\n\t\t\t\t\t\t\tcode: \"RECLAIM_POLLING_ABORTED\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tconst response = await fetch(`${RECLAIM_SESSION_API}/${sessionId}`);\n\t\t\t\t\tconst data = await response.json();\n\n\t\t\t\t\tif (data?.session?.proofs?.length > 0) {\n\t\t\t\t\t\tconst proofs = data.session.proofs;\n\t\t\t\t\t\tonStatus?.({ type: \"proof_received\" });\n\n\t\t\t\t\t\tif (platform === \"github\" && proofs.length > 0) {\n\t\t\t\t\t\t\tconst first = proofs[0] as { publicData?: Record<string, unknown> };\n\t\t\t\t\t\t\tif (first?.publicData && Object.keys(first.publicData).length === 0) {\n\t\t\t\t\t\t\t\tthrow new ZkkycError(\"GitHub verification eligibility criteria not met\", {\n\t\t\t\t\t\t\t\t\tcode: \"RECLAIM_PROOF_INVALID\",\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst transformedProofs = proofs.map((proof: unknown) => transformForOnchain(proof));\n\n\t\t\t\t\t\tonStatus?.({ type: \"proof_transformed\" });\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t_socialName: socialName,\n\t\t\t\t\t\t\tproofs: transformedProofs,\n\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t} as ReclaimProofResult;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data?.message?.includes(\"Session not found\")) {\n\t\t\t\t\t\tthrow new ZkkycError(\"Reclaim session not found\", {\n\t\t\t\t\t\t\tcode: \"RECLAIM_SESSION_NOT_FOUND\",\n\t\t\t\t\t\t\tcontext: { sessionId },\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data?.session?.statusV2 === \"PROOF_GENERATION_FAILED\") {\n\t\t\t\t\t\tthrow new ZkkycError(\"Reclaim proof generation failed\", {\n\t\t\t\t\t\t\tcode: \"RECLAIM_PROOF_GENERATION_FAILED\",\n\t\t\t\t\t\t\tcontext: { sessionId },\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, pollingIntervalMs));\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst session: ReclaimSession = {\n\t\t\t\tsessionId,\n\t\t\t\trequestUrl,\n\t\t\t\tstart: () =>\n\t\t\t\t\tResultAsync.fromPromise(pollForProof(), (error) => {\n\t\t\t\t\t\tif (error instanceof ZkkycError) return error;\n\t\t\t\t\t\treturn new ZkkycError(\"Reclaim verification flow failed\", {\n\t\t\t\t\t\t\tcode: \"RECLAIM_INIT_FAILED\",\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t});\n\t\t\t\t\t}),\n\t\t\t\tabort: () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\treturn session;\n\t\t})(),\n\t\t(error) => {\n\t\t\tif (error instanceof ZkkycError) return error;\n\t\t\treturn new ZkkycError(\"Reclaim verification flow failed\", {\n\t\t\t\tcode: \"RECLAIM_INIT_FAILED\",\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t},\n\t);\n}\n","import type { ResultAsync } from \"neverthrow\";\nimport type { Address } from \"viem\";\nimport type { ZkkycError } from \"../errors\";\nimport type { SolidityVerifierParameters } from \"../validation\";\n\n// ── Social Platform ──────────────────────────────────────────────────────────\n\nexport type SocialPlatform = \"linkedin\" | \"github\" | \"x\" | \"instagram\" | \"facebook\" | \"binance\";\n\n/** Maps SocialPlatform to the capitalized name the contract expects for _socialName. */\nexport const SOCIAL_PLATFORM_NAMES: Record<SocialPlatform, string> = {\n\tlinkedin: \"LinkedIn\",\n\tgithub: \"GitHub\",\n\tx: \"X\",\n\tinstagram: \"Instagram\",\n\tfacebook: \"Facebook\",\n\tbinance: \"Binance\",\n};\n\n// ── Reclaim (Social Verification) ────────────────────────────────────────────\n\n/**\n * Single-object params for `createReclaimFlow`. Merges the app-level config\n * (appId, appSecret, providerIds) with the per-call options (platform,\n * walletAddress, callbacks, …) into one argument.\n */\nexport interface ReclaimFlowParams {\n\t// ── App-level config ──────────────────────────────────────────────\n\treadonly appId: string;\n\treadonly appSecret: string;\n\treadonly providerIds: Record<SocialPlatform, string>;\n\n\t// ── Per-call options ──────────────────────────────────────────────\n\treadonly platform: SocialPlatform;\n\treadonly walletAddress: Address;\n\t/** Base URL for redirect after Reclaim flow. SDK appends ?sessionId={id}&socialPlatform={Name}. */\n\treadonly redirectUrl?: string;\n\t/** Resume polling for an existing session (redirect-back case). */\n\treadonly sessionId?: string;\n\t/** Description added to Reclaim context. */\n\treadonly contextDescription?: string;\n\t/** Called with status updates during the flow. */\n\treadonly onStatus?: (status: ReclaimStatus) => void;\n\t/** AbortSignal to cancel polling. */\n\treadonly signal?: AbortSignal;\n\t/** Polling interval in ms. Defaults to 5000. */\n\treadonly pollingIntervalMs?: number;\n}\n\nexport type ReclaimStatus =\n\t| { type: \"session_created\"; sessionId: string; requestUrl: string }\n\t| { type: \"polling_started\"; sessionId: string }\n\t| { type: \"proof_received\" }\n\t| { type: \"proof_transformed\" };\n\nexport interface ReclaimProofResult {\n\treadonly _socialName: string;\n\treadonly proofs: readonly {\n\t\tclaimInfo: { provider: string; parameters: string; context: string };\n\t\tsignedClaim: {\n\t\t\tclaim: { identifier: string; owner: string; timestampS: number; epoch: number };\n\t\t\tsignatures: string[];\n\t\t};\n\t}[];\n\treadonly sessionId: string;\n}\n\nexport interface ReclaimSession {\n\t/** The Reclaim session id (empty until known when resuming). */\n\treadonly sessionId: string;\n\t/** URL to display as a QR code or open as a deep link. Empty when resuming an existing session. */\n\treadonly requestUrl: string;\n\t/** Triggers the in-app Reclaim flow (browser only) and polls until the proof is ready. Call on user action (e.g. button click). */\n\treadonly start: () => ResultAsync<ReclaimProofResult, ZkkycError>;\n\t/** Aborts an in-flight polling loop started by `start`. */\n\treadonly abort: () => void;\n}\n\n// ── ZK Passport ──────────────────────────────────────────────────────────────\n\n/**\n * Single-object params for `createZkPassportFlow`. Merges app-level config\n * (domain, name, logo, purpose) with per-call options (walletAddress, onStatus).\n */\nexport interface ZkPassportFlowParams {\n\t// ── App-level config ──────────────────────────────────────────────\n\t/** Domain for ZKPassport initialization (e.g. \"app.yourproject.com\"). Required — no default is provided to avoid impersonating another app. */\n\treadonly domain: string;\n\t/** App name shown in ZKPassport UI. Defaults to \"ZKPassport\". */\n\treadonly name?: string;\n\t/** Logo URL shown in ZKPassport UI. */\n\treadonly logo?: string;\n\t/** Purpose text shown in ZKPassport UI. Defaults to \"Prove your personhood\". */\n\treadonly purpose?: string;\n\n\t// ── Per-call options ──────────────────────────────────────────────\n\treadonly walletAddress: Address;\n\t/** Called with status updates during the flow. */\n\treadonly onStatus?: (status: ZkPassportStatus) => void;\n}\n\nexport type ZkPassportStatus =\n\t| { type: \"request_created\"; url: string }\n\t| { type: \"request_received\" }\n\t| { type: \"generating_proof\" }\n\t| { type: \"proof_generated\" }\n\t| { type: \"result_received\" }\n\t| { type: \"rejected\" };\n\nexport interface ZkPassportProofResult {\n\treadonly params: SolidityVerifierParameters;\n\treadonly isIDCard: boolean;\n}\n\nexport interface ZkPassportSession {\n\t/** URL to display as QR code or open as deeplink. */\n\treadonly url: string;\n\t/** Resolves when the full flow completes (proof verified). */\n\treadonly result: ResultAsync<ZkPassportProofResult, ZkkycError>;\n\t/** Aborts the flow. The result promise will reject with ZK_PASSPORT_ABORTED. */\n\treadonly abort: () => void;\n}\n\n// ── simple-kyc (hosted passport + liveness wizard) ────────────────────────────\n\n/**\n * Params for `createSimpleKycFlow`. The app opens the hosted simple-kyc wizard,\n * which runs onboard → passport → liveness → face match/dedup and, on approval,\n * redirects back to `redirectUrl` with `?code=<code>&state=<state>`. The app\n * then calls `resumeSimpleKycFlow` to redeem the code for the EIP-712 attestation.\n */\nexport interface SimpleKycFlowParams {\n\t/**\n\t * Base URL exposing the browser-facing `/v1/widget/public-sessions` and\n\t * `/v1/widget/attestation` endpoints — the `kyc-proxy` in a client-only setup\n\t * (e.g. http://localhost:8787). The proxy holds the X-API-Key and forwards to\n\t * simple-kyc's key-gated endpoints.\n\t */\n\treadonly baseUrl: string;\n\t/** The user's EVM wallet — bound into the attestation and credited on-chain. */\n\treadonly walletAddress: Address;\n\t/** Tenant slug (one per consuming contract), e.g. \"p2p-reputation\". */\n\treadonly tenant: string;\n\t/** Return URL — pass `${window.location.origin}<route>` so each app self-routes. */\n\treadonly redirectUrl: string;\n\t/**\n\t * ISO-2 country code (e.g. \"IN\"). Required — the embedded wizard skips the\n\t * country step, so the app must prebind it. Must be one of simple-kyc's\n\t * supported markets (IN, NG, BR, MX, CO, AR, VE, ID).\n\t */\n\treadonly country: string;\n\t/** Opaque state round-tripped back to the app (CSRF/nonce + page to restore). */\n\treadonly state?: string;\n\t/** Status callback. */\n\treadonly onStatus?: (status: SimpleKycStatus) => void;\n}\n\nexport type SimpleKycStatus =\n\t| { type: \"session_created\"; widgetUrl: string }\n\t| { type: \"redirecting\"; widgetUrl: string };\n\nexport interface SimpleKycSession {\n\t/** The hosted wizard URL to navigate to. */\n\treadonly widgetUrl: string;\n\t/** Convenience: navigate the browser to the wizard (no-op outside the browser). */\n\treadonly redirect: () => void;\n}\n\n/** The on-chain-ready attestation, shaped for `prepareSubmitKycAttestation`. */\nexport interface SimpleKycAttestation {\n\treadonly nullifier: `0x${string}`;\n\treadonly limit: bigint;\n\treadonly expiry: bigint;\n\treadonly signature: `0x${string}`;\n\t/** The opaque unique-human handle (no PII), for app-side bookkeeping. */\n\treadonly identityHash?: string;\n}\n\n// ── liveness (hosted face-only wizard, no document) ───────────────────────────\n\n/**\n * Params for `createLivenessFlow`. The app opens the hosted liveness wizard,\n * which runs onboard → active liveness challenge → face embed → 1:N dedup and,\n * on approval, redirects back to `redirectUrl` with `?code=<code>&state=<state>`.\n * The app then calls `resumeLivenessFlow` to redeem the code for the EIP-712\n * attestation.\n *\n * Identical to `SimpleKycFlowParams` minus `country`: liveness reads no\n * document, so there is no issuing market to prebind.\n */\nexport interface LivenessFlowParams {\n\t/**\n\t * Base URL exposing the browser-facing `/v1/widget/public-sessions` and\n\t * `/v1/widget/attestation` endpoints — the liveness proxy in a client-only\n\t * setup (e.g. https://liveness-proxy.p2p.cool). The proxy holds the\n\t * X-API-Key and forwards to the liveness service's key-gated endpoints.\n\t * This is **not** the same host as the passport (`simple-kyc`) proxy.\n\t */\n\treadonly baseUrl: string;\n\t/** The user's EVM wallet — bound into the attestation and credited on-chain. */\n\treadonly walletAddress: Address;\n\t/** Tenant slug (one per consuming contract), e.g. \"p2p-reputation-liveness\". */\n\treadonly tenant: string;\n\t/** Return URL — pass `${window.location.origin}<route>` so each app self-routes. */\n\treadonly redirectUrl: string;\n\t/** Opaque state round-tripped back to the app (CSRF/nonce + page to restore). */\n\treadonly state?: string;\n\t/** Status callback. */\n\treadonly onStatus?: (status: LivenessStatus) => void;\n}\n\nexport type LivenessStatus =\n\t| { type: \"session_created\"; widgetUrl: string }\n\t| { type: \"redirecting\"; widgetUrl: string };\n\nexport interface LivenessSession {\n\t/** The hosted wizard URL to navigate to. */\n\treadonly widgetUrl: string;\n\t/** Convenience: navigate the browser to the wizard (no-op outside the browser). */\n\treadonly redirect: () => void;\n}\n\n/** The on-chain-ready attestation, shaped for `prepareSubmitLivenessAttestation`. */\nexport interface LivenessAttestation {\n\treadonly nullifier: `0x${string}`;\n\treadonly limit: bigint;\n\treadonly expiry: bigint;\n\treadonly signature: `0x${string}`;\n\t/** The opaque unique-human handle (no PII), for app-side bookkeeping. */\n\treadonly identityHash?: string;\n}\n\n// ── BVN (Nigerian Bank Verification Number) ──────────────────────────────────\n\n/** OTP delivery channels the BVN backend exposes. `alternate_phone` needs a number. */\nexport type BvnOtpMethod = \"email\" | \"phone\" | \"phone_1\" | \"alternate_phone\";\n\n/** BVN identity scope requested during onboard. */\nexport type BvnScope = \"identity\" | \"bank_accounts\";\n\n/**\n * Shared config for every BVN step. `baseUrl` points at the backend proxy — the\n * only party holding the Mono secret + the EIP-712 attestor key — using the\n * `{ ok, data }` envelope.\n */\nexport interface BvnFlowConfig {\n\t/** Backend proxy base URL (e.g. https://ngn-bvn-verify-production.up.railway.app). */\n\treadonly baseUrl: string;\n\t/** Tenant slug registered on the backend, mapping to one on-chain contract. */\n\treadonly tenant: string;\n}\n\n/** An active BVN backend session. Carry this between steps. */\nexport interface BvnSession {\n\treadonly sessionId: number;\n\treadonly sessionToken: string;\n}\n\n/** An available OTP delivery method returned after submitting the BVN. */\nexport interface BvnMethod {\n\treadonly method: string;\n\treadonly hint?: string;\n}\n\n/** The confirm-OTP decision. `reject` may carry a reason (e.g. \"bvn_reused\"). */\nexport interface BvnDecision {\n\treadonly decision: \"approve\" | \"reject\";\n\treadonly reason?: string;\n}\n\n/** The on-chain-ready attestation, shaped for `prepareSubmitBvnAttestation`. */\nexport interface BvnAttestation {\n\treadonly nullifier: `0x${string}`;\n\treadonly limit: bigint;\n\treadonly expiry: bigint;\n\treadonly signature: `0x${string}`;\n\t/** The wallet the attestation is bound to. */\n\treadonly wallet?: string;\n}\n\n/** Params for `bvnOnboard`. */\nexport interface BvnOnboardParams {\n\t/** The user's EVM wallet — bound into the attestation and credited on-chain. */\n\treadonly walletAddress: Address;\n\t/** Identity scope. Defaults to \"identity\". */\n\treadonly scope?: BvnScope;\n}\n\n/** Params for `bvnSendOtp`. */\nexport interface BvnSendOtpParams {\n\treadonly method: BvnOtpMethod;\n\t/** Required only when `method` is \"alternate_phone\". */\n\treadonly phoneNumber?: string;\n}\n\n/** The full BVN flow bound to a config — mirrors the `Zkkyc` client shape. */\nexport interface BvnFlow {\n\t/** Step 1 — start a session bound to the wallet + tenant. */\n\tonboard(params: BvnOnboardParams): ResultAsync<BvnSession, ZkkycError>;\n\t/** Step 2 — submit the 11-digit BVN, get available OTP methods. */\n\tsubmitBvn(session: BvnSession, bvn: string): ResultAsync<BvnMethod[], ZkkycError>;\n\t/** Step 3 — request an OTP over the chosen channel. */\n\tsendOtp(session: BvnSession, params: BvnSendOtpParams): ResultAsync<boolean, ZkkycError>;\n\t/** Step 4 — confirm the OTP; returns approve/reject (never any PII). */\n\tconfirmOtp(session: BvnSession, otp: string): ResultAsync<BvnDecision, ZkkycError>;\n\t/** Step 5 — mint the signed EIP-712 attestation for an approved session. */\n\tgetAttestation(session: BvnSession): ResultAsync<BvnAttestation, ZkkycError>;\n\t/** Optional — the address the tenant contract must trust as its signer. */\n\tgetAttestor(): ResultAsync<{ address: string }, ZkkycError>;\n}\n","import { ResultAsync } from \"neverthrow\";\nimport { ZkkycError } from \"../errors\";\nimport type { SimpleKycAttestation, SimpleKycFlowParams, SimpleKycSession } from \"./types\";\n\n/**\n * Starts the hosted simple-kyc wizard flow. Creates a browser-initiable widget\n * session (no API key in the browser — `baseUrl` points at the kyc-proxy, which\n * injects the key and whose tenant allowlist validates the redirect_uri), then\n * returns the wizard URL to navigate to.\n *\n * The wizard runs passport → liveness → face match/dedup and, on approval,\n * redirects back to `redirectUrl` with `?code=<code>&state=<state>`. Call\n * `resumeSimpleKycFlow({ baseUrl, code })` on return to fetch the attestation.\n */\nexport function createSimpleKycFlow(\n\tparams: SimpleKycFlowParams,\n): ResultAsync<SimpleKycSession, ZkkycError> {\n\tconst { baseUrl, walletAddress, tenant, redirectUrl, country, state, onStatus } = params;\n\treturn ResultAsync.fromPromise(\n\t\t(async () => {\n\t\t\tconst res = await fetch(`${baseUrl}/v1/widget/public-sessions`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\twallet_pubkey: walletAddress,\n\t\t\t\t\tredirect_uri: redirectUrl,\n\t\t\t\t\ttenant,\n\t\t\t\t\tcountry,\n\t\t\t\t\tstate,\n\t\t\t\t}),\n\t\t\t});\n\t\t\tif (!res.ok) {\n\t\t\t\tconst body = await res.text();\n\t\t\t\tthrow new ZkkycError(`simple-kyc session creation failed: ${res.status} ${body}`, {\n\t\t\t\t\tcode: \"SIMPLE_KYC_SESSION_FAILED\",\n\t\t\t\t\tcontext: { status: res.status },\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst data = (await res.json()) as { widget_url: string };\n\t\t\tconst widgetUrl = data.widget_url;\n\t\t\tonStatus?.({ type: \"session_created\", widgetUrl });\n\t\t\treturn {\n\t\t\t\twidgetUrl,\n\t\t\t\tredirect: () => {\n\t\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\t\tonStatus?.({ type: \"redirecting\", widgetUrl });\n\t\t\t\t\t\twindow.location.href = widgetUrl;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t} satisfies SimpleKycSession;\n\t\t})(),\n\t\t(error) => {\n\t\t\tif (error instanceof ZkkycError) return error;\n\t\t\treturn new ZkkycError(\"simple-kyc flow failed to start\", {\n\t\t\t\tcode: \"SIMPLE_KYC_SESSION_FAILED\",\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t},\n\t);\n}\n\n/**\n * Redeems the one-time `kyc_code` from the wizard's redirect for the EIP-712\n * attestation. The result feeds straight into `zkkyc.prepareSubmitKycAttestation`.\n * The endpoint returns only the (non-PII, self-verifying) attestation.\n */\nexport function resumeSimpleKycFlow(args: {\n\tbaseUrl: string;\n\tcode: string;\n}): ResultAsync<SimpleKycAttestation, ZkkycError> {\n\treturn ResultAsync.fromPromise(\n\t\t(async () => {\n\t\t\tconst res = await fetch(`${args.baseUrl}/v1/widget/attestation`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify({ code: args.code }),\n\t\t\t});\n\t\t\tif (!res.ok) {\n\t\t\t\tconst body = await res.text();\n\t\t\t\tthrow new ZkkycError(`simple-kyc attestation redemption failed: ${res.status} ${body}`, {\n\t\t\t\t\tcode: \"SIMPLE_KYC_REDEEM_FAILED\",\n\t\t\t\t\tcontext: { status: res.status },\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst d = (await res.json()) as {\n\t\t\t\tnullifier: string;\n\t\t\t\tlimit: string | number;\n\t\t\t\texpiry: string | number;\n\t\t\t\tsignature: string;\n\t\t\t\tidentity_hash?: string;\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tnullifier: d.nullifier as `0x${string}`,\n\t\t\t\tlimit: BigInt(d.limit),\n\t\t\t\texpiry: BigInt(d.expiry),\n\t\t\t\tsignature: d.signature as `0x${string}`,\n\t\t\t\tidentityHash: d.identity_hash,\n\t\t\t} satisfies SimpleKycAttestation;\n\t\t})(),\n\t\t(error) => {\n\t\t\tif (error instanceof ZkkycError) return error;\n\t\t\treturn new ZkkycError(\"simple-kyc attestation redemption failed\", {\n\t\t\t\tcode: \"SIMPLE_KYC_REDEEM_FAILED\",\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t},\n\t);\n}\n","import { ResultAsync } from \"neverthrow\";\nimport { ZkkycError } from \"../errors\";\nimport type { ZkPassportFlowParams, ZkPassportProofResult, ZkPassportSession } from \"./types\";\n\n/** Initializes a ZK Passport verification flow and returns a session. */\nexport function createZkPassportFlow(\n\tparams: ZkPassportFlowParams,\n): ResultAsync<ZkPassportSession, ZkkycError> {\n\treturn ResultAsync.fromPromise(\n\t\t(async () => {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: optional peer dependency\n\t\t\tconst mod: any = await import(\"@zkpassport/sdk\").catch(() => {\n\t\t\t\tthrow new ZkkycError(\n\t\t\t\t\t\"Missing peer dependency: @zkpassport/sdk. Install it with: npm install @zkpassport/sdk\",\n\t\t\t\t\t{ code: \"PEER_DEPENDENCY_MISSING\" },\n\t\t\t\t);\n\t\t\t});\n\t\t\tconst { ZKPassport } = mod;\n\n\t\t\tconst zkPassport = new ZKPassport(params.domain);\n\n\t\t\tconst queryBuilder = await zkPassport.request({\n\t\t\t\tname: params.name ?? \"ZKPassport\",\n\t\t\t\tlogo: params.logo,\n\t\t\t\tpurpose: params.purpose ?? \"Prove your personhood\",\n\t\t\t\tscope: \"personhood\",\n\t\t\t\tmode: \"compressed-evm\",\n\t\t\t});\n\n\t\t\tconst {\n\t\t\t\turl,\n\t\t\t\tonRequestReceived,\n\t\t\t\tonGeneratingProof,\n\t\t\t\tonProofGenerated,\n\t\t\t\tonResult,\n\t\t\t\tonReject,\n\t\t\t\tonError,\n\t\t\t} = queryBuilder\n\t\t\t\t.gte(\"age\", 18)\n\t\t\t\t.disclose(\"document_type\")\n\t\t\t\t.disclose(\"nationality\")\n\t\t\t\t.bind(\"user_address\", params.walletAddress)\n\t\t\t\t.done();\n\n\t\t\tparams.onStatus?.({ type: \"request_created\", url });\n\n\t\t\tlet aborted = false;\n\n\t\t\tconst resultPromise = new Promise<ZkPassportProofResult>((resolve, reject) => {\n\t\t\t\tlet proof: unknown = null;\n\n\t\t\t\tonRequestReceived(() => {\n\t\t\t\t\tif (aborted) return;\n\t\t\t\t\tparams.onStatus?.({ type: \"request_received\" });\n\t\t\t\t});\n\n\t\t\t\tonGeneratingProof(() => {\n\t\t\t\t\tif (aborted) return;\n\t\t\t\t\tparams.onStatus?.({ type: \"generating_proof\" });\n\t\t\t\t});\n\n\t\t\t\tonProofGenerated(async (result: unknown) => {\n\t\t\t\t\tif (aborted) return;\n\t\t\t\t\tparams.onStatus?.({ type: \"proof_generated\" });\n\t\t\t\t\tproof = result;\n\t\t\t\t});\n\n\t\t\t\tonResult(\n\t\t\t\t\tasync ({\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tuniqueIdentifier,\n\t\t\t\t\t\tverified,\n\t\t\t\t\t}: {\n\t\t\t\t\t\tresult: Record<string, { disclose?: { result?: string } }>;\n\t\t\t\t\t\tuniqueIdentifier: string | null;\n\t\t\t\t\t\tverified: boolean;\n\t\t\t\t\t}) => {\n\t\t\t\t\t\tif (aborted) return;\n\t\t\t\t\t\tparams.onStatus?.({ type: \"result_received\" });\n\n\t\t\t\t\t\tif (!verified || !proof || !uniqueIdentifier) {\n\t\t\t\t\t\t\treject(\n\t\t\t\t\t\t\t\tnew ZkkycError(\"ZK Passport verification failed\", {\n\t\t\t\t\t\t\t\t\tcode: \"ZK_PASSPORT_VERIFICATION_FAILED\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst verifierParams = zkPassport.getSolidityVerifierParameters({\n\t\t\t\t\t\t\t\tproof,\n\t\t\t\t\t\t\t\tscope: \"personhood\",\n\t\t\t\t\t\t\t\tdevMode: false,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst isIDCard = result.document_type?.disclose?.result !== \"passport\";\n\n\t\t\t\t\t\t\tresolve({ params: verifierParams, isIDCard });\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\treject(\n\t\t\t\t\t\t\t\tnew ZkkycError(\"Failed to extract ZK Passport verifier parameters\", {\n\t\t\t\t\t\t\t\t\tcode: \"ZK_PASSPORT_VERIFICATION_FAILED\",\n\t\t\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tonReject(() => {\n\t\t\t\t\tparams.onStatus?.({ type: \"rejected\" });\n\t\t\t\t\treject(\n\t\t\t\t\t\tnew ZkkycError(\"User rejected ZK Passport verification\", {\n\t\t\t\t\t\t\tcode: \"ZK_PASSPORT_REJECTED\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tonError((error: unknown) => {\n\t\t\t\t\treject(\n\t\t\t\t\t\tnew ZkkycError(typeof error === \"string\" ? error : \"ZK Passport verification error\", {\n\t\t\t\t\t\t\tcode: \"ZK_PASSPORT_VERIFICATION_FAILED\",\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tconst session: ZkPassportSession = {\n\t\t\t\turl,\n\t\t\t\tresult: ResultAsync.fromPromise(resultPromise, (error) => {\n\t\t\t\t\tif (error instanceof ZkkycError) return error;\n\t\t\t\t\treturn new ZkkycError(\"ZK Passport flow failed\", {\n\t\t\t\t\t\tcode: \"ZK_PASSPORT_VERIFICATION_FAILED\",\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tabort: () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\treturn session;\n\t\t})(),\n\t\t(error) => {\n\t\t\tif (error instanceof ZkkycError) return error;\n\t\t\treturn new ZkkycError(\"Failed to initialize ZK Passport\", {\n\t\t\t\tcode: \"ZK_PASSPORT_INIT_FAILED\",\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t},\n\t);\n}\n"],"mappings":"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","names":["import_neverthrow","import_viem","import_zod","import_viem","import_neverthrow","import_neverthrow","import_neverthrow","import_neverthrow","import_neverthrow"]}