export {
  resolveRefCode,
  isSelfReferral,
  bindReferralOnSignup,
  ReferralSettingsNotFoundError,
  isReferralSettingsNotFoundError,
  type BindReferralInput,
} from './attribution.js'

export {
  computeCommission,
  computePercentageCommission,
  computeAffiliateCommission,
  computeReferralCommission,
  computePlatformNet,
  resolveAffiliateTierPct,
  isSelfVendorPurchase,
  PLATFORM_FEE_PCT,
  SELF_VENDOR_PURCHASE,
  type CommissionPolicy,
  type CommissionContext,
  type ComputeCommissionInput,
} from './commission.js'

export { type ReferralSettings, type AdapterOverride } from './settings.js'

export {
  InsufficientBalanceError,
  isInsufficientBalanceError,
  InvalidPayoutAmountError,
  isInvalidPayoutAmountError,
  FraudHoldError,
  isFraudHoldError,
} from './errors.js'

export {
  accrueCommission,
  computeMatureAt,
  InvalidSourceIdError,
  isInvalidSourceIdError,
  UnsupportedAccrualEntryTypeError,
  isUnsupportedAccrualEntryTypeError,
  type AccrueCommissionInput,
  type AccrueCommissionResult,
  type AccrueCommissionState,
  type CreditEntryType,
  type MatureAtInput,
  type MatureAtSettings,
} from './accrual.js'

export {
  processReferralEarn,
  type ProcessReferralEarnInput,
  type ProcessReferralEarnResult,
  type ProcessReferralEarnFailureReason,
} from './earn.js'

export {
  sweepMaturation,
  sweepWithdrawable,
  computeWithdrawableAt,
  type MaturityHostStore,
  type RedemptionFact,
  type RedemptionFactRef,
  type WithdrawableAtInput,
  type SweepMaturationResult,
} from './maturity-sweep.js'

export {
  debitPayoutInTx,
  ensurePayoutLedgerDebit,
  verifyPayoutReadyForSettlement,
  restorePayoutDebitInTx,
  settlePayout,
  sweepStuckPayouts,
  PayoutLedgerMismatchError,
  isPayoutLedgerMismatchError,
  type PayoutDestination,
  type PayoutExecutor,
  type SettlePayoutInput,
  type SettlePayoutResult,
} from './payout.js'
