{"version":3,"sources":["../../src/batch-settlement/types.ts"],"sourcesContent":["import type { TypedData } from \"viem\";\n\nexport interface AuthorizerSigner {\n  address: `0x${string}`;\n  signTypedData(params: {\n    domain: Record<string, unknown>;\n    types: TypedData;\n    primaryType: string;\n    message: Record<string, unknown>;\n  }): Promise<`0x${string}`>;\n}\n\nexport type ChannelState = {\n  balance: bigint;\n  totalClaimed: bigint;\n  withdrawRequestedAt: number;\n  refundNonce: bigint;\n};\n\nexport type ChannelConfig = {\n  payer: `0x${string}`;\n  payerAuthorizer: `0x${string}`;\n  receiver: `0x${string}`;\n  receiverAuthorizer: `0x${string}`;\n  token: `0x${string}`;\n  withdrawDelay: number;\n  salt: `0x${string}`;\n};\n\nexport type BatchSettlementErc3009Authorization = {\n  validAfter: string;\n  validBefore: string;\n  salt: `0x${string}`;\n  signature: `0x${string}`;\n};\n\nexport type BatchSettlementPermit2Authorization = {\n  from: `0x${string}`;\n  permitted: {\n    token: `0x${string}`;\n    amount: string;\n  };\n  spender: `0x${string}`;\n  nonce: string;\n  deadline: string;\n  witness: {\n    channelId: `0x${string}`;\n  };\n  signature: `0x${string}`;\n};\n\nexport type BatchSettlementAssetTransferMethod = \"eip3009\" | \"permit2\";\n\nexport type BatchSettlementDepositAuthorization =\n  | {\n      erc3009Authorization: BatchSettlementErc3009Authorization;\n      permit2Authorization?: never;\n    }\n  | {\n      erc3009Authorization?: never;\n      permit2Authorization: BatchSettlementPermit2Authorization;\n    };\n\nexport type BatchSettlementDepositPayload = {\n  type: \"deposit\";\n  channelConfig: ChannelConfig;\n  voucher: BatchSettlementVoucherFields;\n  deposit: {\n    amount: string;\n    authorization: BatchSettlementDepositAuthorization;\n  };\n};\n\nexport type BatchSettlementVoucherPayload = {\n  type: \"voucher\";\n  channelConfig: ChannelConfig;\n  voucher: BatchSettlementVoucherFields;\n};\n\nexport type BatchSettlementRefundPayload = {\n  type: \"refund\";\n  channelConfig: ChannelConfig;\n  voucher: BatchSettlementVoucherFields;\n  amount?: string;\n};\n\nexport type BatchSettlementVoucherFields = {\n  channelId: `0x${string}`;\n  maxClaimableAmount: string;\n  signature: `0x${string}`;\n};\n\nexport type BatchSettlementVoucherClaim = {\n  voucher: {\n    channel: ChannelConfig;\n    maxClaimableAmount: string;\n  };\n  signature: `0x${string}`;\n  totalClaimed: string;\n};\n\nexport type BatchSettlementChannelStateExtra = {\n  channelId: `0x${string}`;\n  balance: string;\n  totalClaimed: string;\n  withdrawRequestedAt: number;\n  refundNonce: string;\n  chargedCumulativeAmount?: string;\n};\n\nexport type BatchSettlementVoucherStateExtra = {\n  signedMaxClaimable?: string;\n  signature?: `0x${string}`;\n};\n\nexport type BatchSettlementPaymentRequirementsExtra = {\n  receiverAuthorizer: `0x${string}`;\n  withdrawDelay: number;\n  name: string;\n  version: string;\n  assetTransferMethod?: BatchSettlementAssetTransferMethod;\n  channelState?: BatchSettlementChannelStateExtra;\n  voucherState?: BatchSettlementVoucherStateExtra;\n};\n\nexport type FileChannelStorageOptions = {\n  /** Root directory; channels are stored under `{directory}/{client|server}/{channelId}.json`. */\n  directory: string;\n};\n\nexport type BatchSettlementPaymentResponseExtra = {\n  chargedAmount?: string;\n  channelState?: BatchSettlementChannelStateExtra;\n  voucherState?: BatchSettlementVoucherStateExtra;\n};\n\nexport type BatchSettlementClaimPayload = {\n  type: \"claim\";\n  claims: BatchSettlementVoucherClaim[];\n  claimAuthorizerSignature?: `0x${string}`;\n};\n\nexport type BatchSettlementSettlePayload = {\n  type: \"settle\";\n  receiver: `0x${string}`;\n  token: `0x${string}`;\n};\n\nexport type BatchSettlementEnrichedRefundPayload = BatchSettlementRefundPayload & {\n  amount: string;\n  refundNonce: string;\n  claims: BatchSettlementVoucherClaim[];\n  refundAuthorizerSignature?: `0x${string}`;\n  claimAuthorizerSignature?: `0x${string}`;\n};\n\nexport type BatchSettlementPayload =\n  | BatchSettlementDepositPayload\n  | BatchSettlementVoucherPayload\n  | BatchSettlementRefundPayload;\n\nexport type BatchSettlementFacilitatorSettlePayload =\n  | BatchSettlementDepositPayload\n  | BatchSettlementClaimPayload\n  | BatchSettlementSettlePayload\n  | BatchSettlementEnrichedRefundPayload;\n\n/**\n * Returns true when the value is a non-null object (a usable record).\n *\n * @param payload - Value of unknown shape.\n * @returns True if `payload` is an object that can be indexed by string keys.\n */\nfunction isObject(payload: unknown): payload is Record<string, unknown> {\n  return typeof payload === \"object\" && payload !== null;\n}\n\n/**\n * Type guard for internal voucher field shape (channel, amount, signature).\n *\n * @param payload - Unknown value to check.\n * @returns True if `payload` is an object with `channelId`, `maxClaimableAmount`, and `signature`.\n */\nfunction isVoucherFields(payload: unknown): payload is BatchSettlementVoucherFields {\n  return (\n    isObject(payload) &&\n    \"channelId\" in payload &&\n    \"maxClaimableAmount\" in payload &&\n    \"signature\" in payload\n  );\n}\n\n/**\n * Type guard for {@link BatchSettlementDepositPayload}.\n *\n * @param payload - Unknown payload to check.\n * @returns True if `payload` is a deposit payload (carries `deposit` and `voucher`).\n */\nexport function isBatchSettlementDepositPayload(\n  payload: unknown,\n): payload is BatchSettlementDepositPayload {\n  return (\n    isObject(payload) &&\n    payload.type === \"deposit\" &&\n    \"channelConfig\" in payload &&\n    isVoucherFields(payload.voucher) &&\n    isObject(payload.deposit) &&\n    typeof payload.deposit.amount === \"string\" &&\n    isObject(payload.deposit.authorization)\n  );\n}\n\n/**\n * Type guard for {@link BatchSettlementVoucherPayload}.\n *\n * @param payload - Unknown payload to check.\n * @returns True if `payload` is a voucher payload with channel and signature fields.\n */\nexport function isBatchSettlementVoucherPayload(\n  payload: unknown,\n): payload is BatchSettlementVoucherPayload {\n  return (\n    isObject(payload) &&\n    payload.type === \"voucher\" &&\n    \"channelConfig\" in payload &&\n    isVoucherFields(payload.voucher)\n  );\n}\n\n/**\n * Type guard for {@link BatchSettlementRefundPayload}.\n *\n * @param payload - Unknown payload to check.\n * @returns True if `payload` is a refund payload with channel config and voucher fields.\n */\nexport function isBatchSettlementRefundPayload(\n  payload: unknown,\n): payload is BatchSettlementRefundPayload {\n  return (\n    isObject(payload) &&\n    payload.type === \"refund\" &&\n    \"channelConfig\" in payload &&\n    isVoucherFields(payload.voucher)\n  );\n}\n\n/**\n * Type guard for {@link BatchSettlementClaimPayload}.\n *\n * @param payload - Unknown payload to check.\n * @returns True if `payload` is a settle-action `claimWithSignature` payload.\n */\nexport function isBatchSettlementClaimPayload(\n  payload: unknown,\n): payload is BatchSettlementClaimPayload {\n  return isObject(payload) && payload.type === \"claim\" && \"claims\" in payload;\n}\n\n/**\n * Type guard for {@link BatchSettlementSettlePayload}.\n *\n * @param payload - Unknown payload to check.\n * @returns True if `payload` is a settle-action `settle` payload.\n */\nexport function isBatchSettlementSettlePayload(\n  payload: unknown,\n): payload is BatchSettlementSettlePayload {\n  return (\n    isObject(payload) && payload.type === \"settle\" && \"receiver\" in payload && \"token\" in payload\n  );\n}\n\n/**\n * Type guard for {@link BatchSettlementEnrichedRefundPayload}.\n *\n * @param payload - Unknown payload to check.\n * @returns True if `payload` is a settle-action `refundWithSignature` payload.\n */\nexport function isBatchSettlementEnrichedRefundPayload(\n  payload: unknown,\n): payload is BatchSettlementEnrichedRefundPayload {\n  return (\n    isBatchSettlementRefundPayload(payload) &&\n    \"amount\" in payload &&\n    \"refundNonce\" in payload &&\n    \"claims\" in payload\n  );\n}\n"],"mappings":";AA6KA,SAAS,SAAS,SAAsD;AACtE,SAAO,OAAO,YAAY,YAAY,YAAY;AACpD;AAQA,SAAS,gBAAgB,SAA2D;AAClF,SACE,SAAS,OAAO,KAChB,eAAe,WACf,wBAAwB,WACxB,eAAe;AAEnB;AAQO,SAAS,gCACd,SAC0C;AAC1C,SACE,SAAS,OAAO,KAChB,QAAQ,SAAS,aACjB,mBAAmB,WACnB,gBAAgB,QAAQ,OAAO,KAC/B,SAAS,QAAQ,OAAO,KACxB,OAAO,QAAQ,QAAQ,WAAW,YAClC,SAAS,QAAQ,QAAQ,aAAa;AAE1C;AAQO,SAAS,gCACd,SAC0C;AAC1C,SACE,SAAS,OAAO,KAChB,QAAQ,SAAS,aACjB,mBAAmB,WACnB,gBAAgB,QAAQ,OAAO;AAEnC;AAQO,SAAS,+BACd,SACyC;AACzC,SACE,SAAS,OAAO,KAChB,QAAQ,SAAS,YACjB,mBAAmB,WACnB,gBAAgB,QAAQ,OAAO;AAEnC;AAQO,SAAS,8BACd,SACwC;AACxC,SAAO,SAAS,OAAO,KAAK,QAAQ,SAAS,WAAW,YAAY;AACtE;AAQO,SAAS,+BACd,SACyC;AACzC,SACE,SAAS,OAAO,KAAK,QAAQ,SAAS,YAAY,cAAc,WAAW,WAAW;AAE1F;AAQO,SAAS,uCACd,SACiD;AACjD,SACE,+BAA+B,OAAO,KACtC,YAAY,WACZ,iBAAiB,WACjB,YAAY;AAEhB;","names":[]}