{"version":3,"file":"index.cjs","sources":["../src/shared/constants/api.constants.ts","../src/shared/errors/moyasar_error.ts","../src/client/base-client.ts","../src/features/webhook/enums.ts","../src/features/webhook/validation.ts","../src/features/webhook/errors.ts","../src/features/webhook/utils.ts","../src/features/payment/enums.ts","../src/features/payment/errors.ts","../src/features/payment/constants.ts","../src/shared/validation/amount_schema.ts","../src/shared/types/currency.ts","../src/shared/validation/currency_schema.ts","../src/shared/validation/pagination_meta_schema.ts","../src/features/payment/validation/schemas.ts","../src/features/payment/utils.ts","../src/features/payment/service.ts","../src/features/webhook/service.ts","../src/features/invoice/enums.ts","../src/features/invoice/errors.ts","../src/features/invoice/constants.ts","../src/features/invoice/validation/schemas.ts","../src/features/invoice/utils.ts","../src/features/invoice/service.ts","../src/client/moyasar-client.ts"],"sourcesContent":["export const API_ENDPOINTS = {\n  webhooks: \"/v1/webhooks\",\n  webhookAttempts: \"/v1/webhooks/attempts\",\n  availableEvents: \"/v1/webhooks/available_events\",\n  invoices: \"/v1/invoices\",\n  bulkInvoices: \"/v1/invoices/bulk\",\n  payments: \"/v1/payments\",\n  bulkPayments: \"/v1/payments/bulk\",\n} as const;\n\nexport const DEFAULT_API_CONFIG = {\n  BASE_URL: \"https://api.moyasar.com\",\n  TIMEOUT: 30000,\n} as const;\n","export class MoyasarError extends Error {\n  public readonly type: string;\n  public readonly statusCode: number;\n  public readonly details: Record<string, any>;\n\n  constructor(\n    message: string,\n    type: string = \"MOYASAR_ERROR\",\n    statusCode: number,\n    details: Record<string, any>\n  ) {\n    super(message);\n    this.name = \"MoyasarError\";\n    this.type = type;\n    this.statusCode = statusCode;\n    this.details = details;\n  }\n}\n","import axios, {\n  AxiosError,\n  type AxiosInstance,\n  type AxiosRequestConfig,\n  type AxiosResponse,\n} from \"axios\";\nimport { type ApiClientOptions, type RequestConfig } from \"@types\";\nimport { DEFAULT_API_CONFIG } from \"@constants\";\nimport { MoyasarError } from \"@errors\";\n\nexport abstract class BaseAxiosApiClient {\n  private axiosInstance: AxiosInstance;\n\n  constructor(apiKey: string, options: ApiClientOptions = {}) {\n    // Create axios instance with base configuration\n    this.axiosInstance = axios.create({\n      baseURL: options.baseUrl || DEFAULT_API_CONFIG.BASE_URL,\n      timeout: options.timeout || DEFAULT_API_CONFIG.TIMEOUT,\n      headers: {\n        Authorization: `Basic ${Buffer.from(apiKey + \":\").toString(\"base64\")}`,\n        \"Content-Type\": \"application/json\",\n        \"User-Agent\": \"Moyasar-SDK/1.0.0\",\n      },\n    });\n\n    // Setup response interceptor for error handling\n    this.setupInterceptors();\n  }\n\n  private setupInterceptors(): void {\n    // Response interceptor to handle errors\n    this.axiosInstance.interceptors.response.use(\n      (response: AxiosResponse) => response,\n      (error: AxiosError) => {\n        throw this.createErrorFromAxiosError(error);\n      }\n    );\n  }\n\n  async request<T = any>(config: RequestConfig): Promise<T> {\n    const response = await this.axiosInstance.request<T>(config);\n    return response.data;\n  }\n\n  private createErrorFromAxiosError(error: AxiosError): MoyasarError {\n    const response = error.response;\n\n    let errorData: {\n      type?: string;\n      message?: string;\n      errors?: string[];\n    } = {};\n    let message = error.message;\n    let statusCode = response?.status ?? 500;\n\n    // Handle network errors\n    if (!response) {\n      return new MoyasarError(\n        error.message || \"Network error occurred\",\n        \"api_connection_error\",\n        statusCode,\n        {\n          code: error.code,\n          originalError: error.message,\n        }\n      );\n    }\n\n    statusCode = response.status;\n    // Parse error response data\n    if (response.data) errorData = response.data;\n\n    // Determine error type and message based on Moyasar API documentation\n    let errorType = \"api_error\";\n\n    if (errorData.type) errorType = errorData.type;\n    else errorType = this.getDefaultErrorType(statusCode, errorType);\n\n    // Use error message from response or generate appropriate message\n    if (errorData.message) message = errorData.message;\n    else message = this.getDefaultErrorMessage(statusCode, errorType);\n\n    const moyasarError = new MoyasarError(message, errorType, statusCode, {\n      url: error.config?.url,\n      status: statusCode,\n      statusText: response.statusText,\n      errors: errorData.errors, // Detailed validation errors\n      ...errorData,\n    });\n\n    return moyasarError;\n  }\n\n  private getDefaultErrorType(statusCode: number, errorType: string) {\n    switch (statusCode) {\n      case 400:\n        errorType = \"invalid_request_error\";\n        break;\n      case 401:\n        errorType = \"authentication_error\";\n        break;\n      case 403:\n        errorType = \"account_inactive_error\";\n        break;\n      case 404:\n        errorType = \"invalid_request_error\";\n        break;\n      case 405:\n        errorType = \"account_inactive_error\";\n        break;\n      case 429:\n        errorType = \"rate_limit_error\";\n        break;\n      case 500:\n      case 503:\n        errorType = \"api_error\";\n        break;\n      default:\n        errorType = \"api_error\";\n    }\n    return errorType;\n  }\n\n  private getDefaultErrorMessage(\n    statusCode: number,\n    errorType: string\n  ): string {\n    switch (statusCode) {\n      case 400:\n        return \"The request was unacceptable, often due to missing a required parameter\";\n      case 401:\n        return \"Invalid authorization credentials\";\n      case 403:\n        return \"Credentials not enough to access resources\";\n      case 404:\n        return \"The requested resource doesn't exist\";\n      case 405:\n        return \"Entity not activated to use live account\";\n      case 429:\n        return \"Too many requests hit the API too quickly\";\n      case 500:\n        return \"We had a problem with our server. Try again later\";\n      case 503:\n        return \"We are temporarily offline for maintenance. Please try again later\";\n      default:\n        return `HTTP ${statusCode}: Request failed`;\n    }\n  }\n\n  // Getter for base URL (maintaining API compatibility)\n  get baseUrl(): string {\n    return this.axiosInstance.defaults.baseURL || \"\";\n  }\n\n  // Setter for base URL (maintaining API compatibility)\n  set baseUrl(url: string) {\n    this.axiosInstance.defaults.baseURL = url;\n  }\n}\n","export const WebhookEvent = {\n  /**\n   * ## Initiated\n   * First status of a payment. It indicates that the payment has been created but the cardholder did not pay yet.\n   * @hint If the payment is initiated then you need to complete the payment transaction by completing the payment challenge found in `Payment.source.transaction_url` depending on the payment source type.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=initiated\n   */\n  PAYOUT_INITIATED: \"payout_initiated\",\n  /**\n   * ## Payment Paid\n   * Payment reaches this status when the cardholder pays successfully.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=paid\n   */\n  PAYMENT_PAID: \"payment_paid\",\n  /**\n   * ## Payment Failed\n   * Payment reaches this status when the cardholder or merchant has a certain error that caused the payment to fail (errors are attached to the `message` attribute).\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=failed\n   */\n  PAYMENT_FAILED: \"payment_failed\",\n  /**\n   * ## Payment Authorized\n   * Payment reaches this status when the merchant authorizes it to be manually captured anytime later —the cardholder is not charged yet.\n   * @note The status authorized is used when a scheme payment is made with `manual: true` option which will cause the system to authorize the payment only without capturing it. The merchant must capture the payment within time it will be voided automatically by the issuer.\n   * @note Please note that when an issuer voids the payment, the status will be kept authorized and **WILL NOT BE updated by the system**.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=authorized\n   * @see https://docs.moyasar.com/api/payments/01-create-payment#responses\n   */\n  PAYMENT_AUTHORIZED: \"payment_authorized\",\n  /**\n   * ## Payment Captured\n   * Payment reaches this status when the cardholder of an authorized payment is charged successfully.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=captured\n   */\n  PAYMENT_CAPTURED: \"payment_captured\",\n  /**\n   * ## Payment Refunded\n   * Payment reaches this status when the merchant refunds a paid or captured payment successfully.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=refunded\n   */\n  PAYMENT_REFUNDED: \"payment_refunded\",\n  /**\n   * ## Payment Voided\n   * Payment reaches this status when the merchant cancels a paid, authorized, or captured payment. It works only if the amount is not settled yet in the merchant’s bank account.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=voided\n   */\n  PAYMENT_VOIDED: \"payment_voided\",\n  /**\n   * ## Payment Verified\n   * Payment reaches this status when the cardholder verifies his card in the tokenization process.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=verified\n   */\n  PAYMENT_VERIFIED: \"payment_verified\",\n  PAYMENT_ABANDONED: \"payment_abandoned\",\n  PAYMENT_CANCELED: \"payment_canceled\",\n  PAYMENT_EXPIRED: \"payment_expired\",\n  /**\n   * ## Balance Transferred\n   * When a settlement is created and sent to the merchant bank account, Moyasar will send a webhook notification to the merchant\n   * @see https://docs.moyasar.com/guides/settlements/settlement-notification/#:~:text=Make%20sure%20to%20selected%20the%20balance_transferred%20event\n   */\n  BALANCE_TRANSFERRED: \"balance_transferred\",\n  PAYOUT_PAID: \"payout_paid\",\n  PAYOUT_FAILED: \"payout_failed\",\n  PAYOUT_CANCELED: \"payout_canceled\",\n  PAYOUT_RETURNED: \"payout_returned\",\n} as const;\n\nexport type WebhookEvent = (typeof WebhookEvent)[keyof typeof WebhookEvent];\n\nexport const ALL_WEBHOOK_EVENTS = Object.values(WebhookEvent);\n\nexport const WebhookHttpMethod = {\n  POST: \"post\",\n  PUT: \"put\",\n  PATCH: \"patch\",\n} as const;\n\nexport type WebhookHttpMethod =\n  (typeof WebhookHttpMethod)[keyof typeof WebhookHttpMethod];\n","import { WebhookEvent, WebhookHttpMethod } from \"./enums\";\n\nexport class WebhookValidation {\n  /**\n   * Validate webhook event type\n   */\n  static isValidWebhookEvent(event: string): boolean {\n    return Object.values(WebhookEvent).includes(event as any);\n  }\n\n  /**\n   * Validate HTTP method\n   */\n  static isValidHttpMethod(method: string): boolean {\n    return Object.values(WebhookHttpMethod).includes(method as any);\n  }\n\n  /**\n   * Validate URL format\n   */\n  static isValidUrl(url: string): boolean {\n    try {\n      const parsedUrl = new URL(url);\n      return parsedUrl.protocol === \"https:\"; // Only allow HTTPS\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Validate required fields\n   */\n  static validateRequired<T extends Record<string, any>>(\n    obj: T,\n    requiredFields: (keyof T)[]\n  ): string[] {\n    const errors: string[] = [];\n\n    for (const field of requiredFields) {\n      if (\n        obj[field] === undefined ||\n        obj[field] === null ||\n        obj[field] === \"\"\n      ) {\n        errors.push(`${String(field)} is required`);\n      }\n    }\n\n    return errors;\n  }\n\n  /**\n   * Sanitize webhook URL\n   */\n  static sanitizeUrl(url: string): string {\n    return url.trim().toLowerCase();\n  }\n}\n","import { MoyasarError } from \"@errors\";\nimport type { WebhookPayload } from \"./types\";\n\nexport class WebhookError extends MoyasarError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, \"WEBHOOK_ERROR\", 500, details ?? {});\n    this.name = \"WebhookError\";\n  }\n}\n\nexport class WebhookVerificationError extends WebhookError {\n  constructor(message: string = \"Webhook signature verification failed\") {\n    super(message, {});\n    this.name = \"WebhookVerificationError\";\n  }\n}\n\nexport class WebhookValidationError extends WebhookError {\n  public readonly unexpected_payload: unknown;\n  constructor({\n    message = \"Webhook payload validation failed\",\n    unexpected_payload,\n  }: {\n    message?: string;\n    unexpected_payload: unknown;\n  }) {\n    super(message, { unexpected_payload });\n    this.unexpected_payload = unexpected_payload;\n    this.name = \"WebhookValidationError\";\n  }\n}\n","import { WebhookValidation } from \"./validation\";\nimport { WebhookError, WebhookValidationError } from \"./errors\";\nimport type { WebhookPayload } from \"./types\";\n\nexport class WebhookUtils {\n  /**\n   * Verify webhook payload signature\n   */\n  static async verifyWebhookSignature(\n    payload: { secret_token: string },\n    options: { secret_token: string }\n  ): Promise<boolean> {\n    const { secret_token } = options;\n\n    return secret_token === payload.secret_token;\n  }\n\n  /**\n   * Parse webhook payload safely\n   */\n  static parseWebhookPayload(rawPayload: string | Buffer): WebhookPayload {\n    try {\n      const payloadString =\n        rawPayload instanceof Buffer\n          ? rawPayload.toString(\"utf8\")\n          : (rawPayload as string);\n\n      const parsed = JSON.parse(payloadString);\n\n      // Basic validation\n      if (!parsed.id || !parsed.type || !parsed.data)\n        throw new WebhookValidationError({\n          message: \"Invalid webhook payload structure\",\n          unexpected_payload: parsed,\n        });\n\n      return parsed as WebhookPayload;\n    } catch (error) {\n      if (error instanceof WebhookError) {\n        throw error;\n      }\n      throw new WebhookValidationError({\n        message: `Failed to parse webhook payload: ${error}`,\n        unexpected_payload: {},\n      });\n    }\n  }\n\n  /**\n   * Validate webhook payload\n   */\n  static validateWebhookPayload(payload: unknown): string[] {\n    const errors: string[] = [];\n\n    if (typeof payload !== \"object\" || payload === null) {\n      errors.push(\n        \"Invalid webhook payload, expected an object got \" + typeof payload\n      );\n      return errors;\n    }\n\n    // Check required fields\n    errors.push(\n      ...WebhookValidation.validateRequired(payload as Record<string, any>, [\n        \"id\",\n        \"type\",\n        \"created_at\",\n        \"account_name\",\n        \"data\",\n      ])\n    );\n\n    // Validate event type\n    if (!(\"type\" in payload) || typeof payload.type !== \"string\") {\n      errors.push(`Invalid webhook event type`);\n    } else if (!WebhookValidation.isValidWebhookEvent(payload.type)) {\n      errors.push(\n        `Invalid webhook event type: ${JSON.stringify(payload.type)}`\n      );\n    }\n\n    // Validate live mode\n    if (!(\"live\" in payload) || typeof payload.live !== \"boolean\") {\n      errors.push(\"live field must be a boolean\");\n    }\n\n    return errors;\n  }\n\n  /**\n   * Extract signature from headers (common patterns)\n   */\n  static extractSignatureFromHeaders(\n    headers: Record<string, string | string[]>\n  ): string | null {\n    // Common signature header patterns\n    const signatureHeaders = [\n      \"x-moyasar-signature\",\n      \"x-signature\",\n      \"signature\",\n      \"authorization\",\n    ];\n\n    for (const header of signatureHeaders) {\n      const value = headers[header] || headers[header.toLowerCase()];\n      if (value) {\n        const signature = Array.isArray(value) ? value[0]! : value;\n        // Remove common prefixes\n        return signature.replace(/^(sha256=|hmac-sha256=|Bearer\\s+)/i, \"\");\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Create a consistent payload string for signature verification\n   */\n  static createSignaturePayload(\n    payload: WebhookPayload,\n    timestamp?: number\n  ): string {\n    const basePayload = JSON.stringify(payload);\n    return timestamp ? `${timestamp}.${basePayload}` : basePayload;\n  }\n\n  /**\n   * Get webhook event categories\n   */\n  static getEventCategory(event: string): \"payment\" | \"unknown\" {\n    if (event.startsWith(\"payment_\")) {\n      return \"payment\";\n    }\n    return \"unknown\";\n  }\n\n  /**\n   * Check if webhook should be retried based on response\n   */\n  static shouldRetryWebhook(\n    statusCode: number,\n    retryCount: number,\n    maxRetries: number = 5\n  ): boolean {\n    if (retryCount >= maxRetries) {\n      return false;\n    }\n\n    // Don't retry client errors (4xx) except specific ones\n    if (statusCode >= 400 && statusCode < 500) {\n      return [408, 429].includes(statusCode); // Timeout, Rate Limited\n    }\n\n    // Retry server errors (5xx) and network errors\n    return statusCode >= 500 || statusCode === 0;\n  }\n}\n","/**\n * @description Indicates the payment status. If the payment is in the initiated status, then an action must be taken (e.g. 3DS challenge) in order to complete the payment. The status authorized is used when a scheme payment is made with manual: true option which will cause the system to authorize the payment only without capturing it. The merchant must capture the payment within time it will be voided automatically by the issuer.\n * @note Please note that when an issuer voids the payment, the status will be kept authorized and WILL NOT BE updated by the system.\n * @values `initiated`, `paid`, `authorized`, `failed`, `refunded`, `captured`, `voided`, `verified`\n * @see https://docs.moyasar.com/api/payments/payment-status-reference\n */\nexport const PaymentStatus = {\n  /**\n   * ## Initiated\n   * First status of a payment. It indicates that the payment has been created but the cardholder did not pay yet.\n   * @hint If the payment is initiated then you need to complete the payment transaction by completing the payment challenge found in `Payment.source.transaction_url` depending on the payment source type.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=initiated\n   */\n  INITIATED: \"initiated\",\n  /**\n   * ## Paid\n   * Payment reaches this status when the cardholder pays successfully.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=paid\n   */\n  PAID: \"paid\",\n  /**\n   * ## Failed\n   * Payment reaches this status when the cardholder or merchant has a certain error that caused the payment to fail (errors are attached to the `message` attribute).\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=failed\n   */\n  FAILED: \"failed\",\n  /**\n   * ## Authorized\n   * Payment reaches this status when the merchant authorizes it to be manually captured anytime later —the cardholder is not charged yet.\n   * @note The status authorized is used when a scheme payment is made with `manual: true` option which will cause the system to authorize the payment only without capturing it. The merchant must capture the payment within time it will be voided automatically by the issuer.\n   * @note Please note that when an issuer voids the payment, the status will be kept authorized and **WILL NOT BE updated by the system**.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=authorized\n   * @see https://docs.moyasar.com/api/payments/01-create-payment#responses\n   */\n  AUTHORIZED: \"authorized\",\n  /**\n   * ## Captured\n   * Payment reaches this status when the cardholder of an authorized payment is charged successfully.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=captured\n   */\n  CAPTURED: \"captured\",\n  /**\n   * ## Refunded\n   * Payment reaches this status when the merchant refunds a paid or captured payment successfully.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=refunded\n   */\n  REFUNDED: \"refunded\",\n  /**\n   * ## Voided\n   * Payment reaches this status when the merchant cancels a paid, authorized, or captured payment. It works only if the amount is not settled yet in the merchant’s bank account.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=voided\n   */\n  VOIDED: \"voided\",\n  /**\n   * ## Verified\n   * Payment reaches this status when the cardholder verifies his card in the tokenization process.\n   * @see https://docs.moyasar.com/api/payments/payment-status-reference?_highlight=verified\n   */\n  VERIFIED: \"verified\",\n} as const;\n\nexport type PaymentStatus = (typeof PaymentStatus)[keyof typeof PaymentStatus];\n\nexport const PaymentSource = {\n  CREDITCARD: \"creditcard\",\n  APPLEPAY: \"applepay\",\n  GOOGLEPAY: \"googlepay\",\n  SAMSUNGPAY: \"samsungpay\",\n  STCPAY: \"stcpay\",\n  TOKEN: \"token\",\n} as const;\n\nexport type PaymentSource = (typeof PaymentSource)[keyof typeof PaymentSource];\n\nexport const CardScheme = {\n  MADA: \"mada\",\n  VISA: \"visa\",\n  MASTER: \"master\",\n  AMEX: \"amex\",\n} as const;\n\nexport type CardScheme = (typeof CardScheme)[keyof typeof CardScheme];\n\nexport const CardType = {\n  DEBIT: \"debit\",\n  CREDIT: \"credit\",\n  CHARGE_CARD: \"charge_card\",\n  UNSPECIFIED: \"unspecified\",\n} as const;\n\nexport type CardType = (typeof CardType)[keyof typeof CardType];\n","import { MoyasarError } from \"@errors\";\n\nexport class PaymentError extends MoyasarError {\n  constructor(\n    message: string,\n    statusCode: number,\n    details?: Record<string, any>\n  ) {\n    super(message, \"PAYMENT_ERROR\", statusCode, details ?? {});\n    this.name = \"PaymentError\";\n  }\n}\n","export const PaymentLimits = {\n  MIN_AMOUNT: 50, // Minimum payment amount in smallest currency unit\n  MAX_AMOUNT: 100000000, // Maximum payment amount (100M in smallest unit)\n  REFUND_TIMEOUT_DAYS: 30, // Days after which refunds are not allowed\n  CAPTURE_TIMEOUT_DAYS: 7, // Days after which authorized payments are auto-voided\n} as const;\n\nexport const PaymentValidation = {\n  DESCRIPTION_MAX_LENGTH: 255,\n  STATEMENT_DESCRIPTOR_MAX_LENGTH: 255,\n  CARD_NUMBER_MIN_LENGTH: 16,\n  CARD_NUMBER_MAX_LENGTH: 19,\n  CVV_LENGTH: 3,\n  AMEX_CVV_LENGTH: 4,\n  SAUDI_MOBILE_REGEX: /^(0|(00|\\+)?966)?(5\\d{8})$/,\n  RRN_REGEX: /^\\d{12}$/,\n  AUTH_CODE_REGEX: /^\\d{6}$/,\n  CARD_LAST_DIGITS_REGEX: /^\\d{4}$/,\n} as const;\n","import { z } from \"zod\";\n\nexport const amountSchema = z.number().int().positive().min(1);\n","export const Currency = Object.freeze({\n  USD: 'USD',\n  EUR: 'EUR',\n  GBP: 'GBP',\n  AUD: 'AUD',\n  CAD: 'CAD',\n  JPY: 'JPY',\n  BYR: 'BYR',\n  PAB: 'PAB',\n  SOS: 'SOS',\n  SRD: 'SRD',\n  SSP: 'SSP',\n  STD: 'STD',\n  STN: 'STN',\n  SVC: 'SVC',\n  SYP: 'SYP',\n  SZL: 'SZL',\n  THB: 'THB',\n  TJS: 'TJS',\n  TMT: 'TMT',\n  TND: 'TND',\n  TOP: 'TOP',\n  TRY: 'TRY',\n  NPR: 'NPR',\n  TTD: 'TTD',\n  TWD: 'TWD',\n  NOK: 'NOK',\n  TZS: 'TZS',\n  UAH: 'UAH',\n  UGX: 'UGX',\n  NIO: 'NIO',\n  PEN: 'PEN',\n  OMR: 'OMR',\n  PGK: 'PGK',\n  PHP: 'PHP',\n  PKR: 'PKR',\n  PLN: 'PLN',\n  PYG: 'PYG',\n  QAR: 'QAR',\n  RON: 'RON',\n  RSD: 'RSD',\n  RUB: 'RUB',\n  RWF: 'RWF',\n  SAR: 'SAR',\n  SBD: 'SBD',\n  SCR: 'SCR',\n  SDG: 'SDG',\n  SEK: 'SEK',\n  SGD: 'SGD',\n  SHP: 'SHP',\n  NZD: 'NZD',\n  SKK: 'SKK',\n  SLE: 'SLE',\n  SLL: 'SLL',\n  UYU: 'UYU',\n  BCH: 'BCH',\n  BTC: 'BTC',\n  JEP: 'JEP',\n  GGP: 'GGP',\n  IMP: 'IMP',\n  XFU: 'XFU',\n  GBX: 'GBX',\n  CNH: 'CNH',\n  USDC: 'USDC',\n  EEK: 'EEK',\n  GHS: 'GHS',\n  HRK: 'HRK',\n  LTL: 'LTL',\n  LVL: 'LVL',\n  MRO: 'MRO',\n  MTL: 'MTL',\n  TMM: 'TMM',\n  ZWD: 'ZWD',\n  ZWL: 'ZWL',\n  ZWN: 'ZWN',\n  ZWR: 'ZWR',\n  VEF: 'VEF',\n  UZS: 'UZS',\n  VES: 'VES',\n  VND: 'VND',\n  VUV: 'VUV',\n  WST: 'WST',\n  XAF: 'XAF',\n  XAG: 'XAG',\n  XAU: 'XAU',\n  XBA: 'XBA',\n  XBB: 'XBB',\n  XBC: 'XBC',\n  XBD: 'XBD',\n  XCD: 'XCD',\n  XDR: 'XDR',\n  XOF: 'XOF',\n  XPD: 'XPD',\n  XPF: 'XPF',\n  XPT: 'XPT',\n  XTS: 'XTS',\n  YER: 'YER',\n  ZAR: 'ZAR',\n  ZMK: 'ZMK',\n  ZMW: 'ZMW',\n  AED: 'AED',\n  CDF: 'CDF',\n  CHF: 'CHF',\n  CLF: 'CLF',\n  CLP: 'CLP',\n  CNY: 'CNY',\n  COP: 'COP',\n  CRC: 'CRC',\n  CUC: 'CUC',\n  CUP: 'CUP',\n  CVE: 'CVE',\n  CZK: 'CZK',\n  DJF: 'DJF',\n  DKK: 'DKK',\n  DOP: 'DOP',\n  DZD: 'DZD',\n  EGP: 'EGP',\n  ERN: 'ERN',\n  ETB: 'ETB',\n  FJD: 'FJD',\n  FKP: 'FKP',\n  GEL: 'GEL',\n  GIP: 'GIP',\n  AFN: 'AFN',\n  ALL: 'ALL',\n  AMD: 'AMD',\n  ANG: 'ANG',\n  AOA: 'AOA',\n  ARS: 'ARS',\n  AWG: 'AWG',\n  AZN: 'AZN',\n  BAM: 'BAM',\n  BBD: 'BBD',\n  BDT: 'BDT',\n  BGN: 'BGN',\n  BHD: 'BHD',\n  BIF: 'BIF',\n  BMD: 'BMD',\n  BND: 'BND',\n  BOB: 'BOB',\n  BRL: 'BRL',\n  BSD: 'BSD',\n  BTN: 'BTN',\n  BWP: 'BWP',\n  BYN: 'BYN',\n  BZD: 'BZD',\n  GMD: 'GMD',\n  KZT: 'KZT',\n  LAK: 'LAK',\n  LBP: 'LBP',\n  LKR: 'LKR',\n  LRD: 'LRD',\n  LSL: 'LSL',\n  LYD: 'LYD',\n  MAD: 'MAD',\n  MDL: 'MDL',\n  MGA: 'MGA',\n  MKD: 'MKD',\n  MMK: 'MMK',\n  MNT: 'MNT',\n  MOP: 'MOP',\n  MRU: 'MRU',\n  MUR: 'MUR',\n  MVR: 'MVR',\n  MWK: 'MWK',\n  MXN: 'MXN',\n  MYR: 'MYR',\n  MZN: 'MZN',\n  NAD: 'NAD',\n  NGN: 'NGN',\n  GNF: 'GNF',\n  GTQ: 'GTQ',\n  GYD: 'GYD',\n  HKD: 'HKD',\n  HNL: 'HNL',\n  HTG: 'HTG',\n  HUF: 'HUF',\n  IDR: 'IDR',\n  INR: 'INR',\n  IQD: 'IQD',\n  IRR: 'IRR',\n  ISK: 'ISK',\n  JMD: 'JMD',\n  JOD: 'JOD',\n  KES: 'KES',\n  KGS: 'KGS',\n  KHR: 'KHR',\n  KMF: 'KMF',\n  KPW: 'KPW',\n  KRW: 'KRW',\n  KWD: 'KWD',\n  KYD: 'KYD',\n});\n\n/**\n * @description ISO-4217 three-letter currency code.\n */\nexport type CurrencyType = (typeof Currency)[keyof typeof Currency];\n","import { z } from \"zod\";\nimport { Currency, type CurrencyType } from \"@types\";\n\nexport const currencySchema = z\n  .enum(Currency)\n  .transform(val => val.toUpperCase() as CurrencyType);\n","import { z } from \"zod\";\nimport type { AllKeys, PaginationMeta } from \"@types\";\n\nexport const paginationMetaSchema = z.object({\n  current_page: z.number(),\n  next_page: z.number().nullable(),\n  prev_page: z.number().nullable(),\n  total_pages: z.number(),\n  total_count: z.number(),\n} satisfies AllKeys<PaginationMeta>);\n","import { z } from \"zod\";\nimport { type CurrencyType } from \"@types\";\nimport { PaymentSource, CardScheme, CardType, PaymentStatus } from \"../enums\";\nimport {\n  type CapturePaymentRequest,\n  type CreateGooglePayPaymentSource,\n  type CreateApplePayPaymentSource,\n  type CreateSamsungPayPaymentSource,\n  type CreatePaymentRequest,\n  type CreateStcPayPaymentSource,\n  type CreateTokenPaymentSource,\n  type UpdatePaymentRequest,\n  type RefundPaymentRequest,\n  type WalletPaymentSource,\n  type StcPaySource,\n  type Payment,\n  type CreateCreditCardPaymentSource,\n  type BasePaymentSource,\n  type CreditCardSource,\n  type ListPaymentsResponse,\n} from \"../types\";\nimport type { AllKeys } from \"@types\";\n\nimport {\n  amountSchema,\n  currencySchema,\n  paginationMetaSchema,\n} from \"@validation\";\nimport { PaymentValidation } from \"../constants\";\n\nconst BasePaymentSourceSchema = z.object({\n  type: z.enum(PaymentSource),\n  company: z.enum(CardScheme).nullable(),\n  name: z.string().nullable(),\n  number: z.string(),\n  gateway_id: z.string(),\n  message: z.string().nullable(),\n  reference_number: z.string().nullable(),\n  token: z.string().nullable().optional(),\n  response_code: z.string().optional(),\n  authorization_code: z\n    .string()\n    .regex(PaymentValidation.AUTH_CODE_REGEX)\n    .optional(),\n  issuer_name: z.string().optional(),\n  issuer_country: z.string().optional(),\n  issuer_card_type: z.enum(CardType).optional(),\n  issuer_card_category: z.string().optional(),\n} satisfies AllKeys<BasePaymentSource>);\n\n// Zod schemas for validation and parsing\nconst CreditCardSourceResponseSchema = z.object({\n  ...BasePaymentSourceSchema.shape,\n  type: z.literal(PaymentSource.CREDITCARD),\n  transaction_url: z.url().nullable(),\n} satisfies AllKeys<CreditCardSource>);\n\nconst WalletPaymentSourceResponseSchema = z.object({\n  ...BasePaymentSourceSchema.shape,\n  type: z.enum([\n    PaymentSource.APPLEPAY,\n    PaymentSource.GOOGLEPAY,\n    PaymentSource.SAMSUNGPAY,\n  ]),\n  dpan: z.string().optional(),\n} satisfies AllKeys<WalletPaymentSource>);\n\nconst StcPaySourceResponseSchema = z.object({\n  type: z.literal(PaymentSource.STCPAY),\n  mobile: z.string().regex(PaymentValidation.SAUDI_MOBILE_REGEX),\n  reference_number: z.string().optional(),\n  cashier_id: z.string().optional(),\n  branch: z.string().optional(),\n  transaction_url: z.url().nullable(),\n  message: z.string(),\n} satisfies AllKeys<StcPaySource>);\n\nconst PaymentSourceResponseSchema = z.discriminatedUnion(\"type\", [\n  CreditCardSourceResponseSchema,\n  WalletPaymentSourceResponseSchema,\n  StcPaySourceResponseSchema,\n]);\n// z.discriminatedUnion(\"type\", [\n//   CreditCardSourceResponseSchema,\n//   WalletPaymentSourceResponseSchema,\n//   StcPaySourceResponseSchema,\n// ]);\n\nexport const PaymentSchema = z.object({\n  id: z.string(),\n  status: z.enum(PaymentStatus),\n  amount: amountSchema,\n  fee: z.number().int().min(0),\n  currency: currencySchema,\n  refunded: z.number().int().min(0),\n  refunded_at: z.coerce.date().nullable(),\n  captured: z.number().int().min(0),\n  captured_at: z.coerce.date().nullable(),\n  voided_at: z.coerce.date().nullable(),\n  description: z.string(),\n  amount_format: z\n    .string()\n    .transform(val => val as `${number} ${CurrencyType}`),\n  fee_format: z.string().transform(val => val as `${number} ${CurrencyType}`),\n  refunded_format: z\n    .string()\n    .transform(val => val as `${number} ${CurrencyType}`),\n  captured_format: z\n    .string()\n    .transform(val => val as `${number} ${CurrencyType}`),\n  invoice_id: z.string().nullable(),\n  ip: z.ipv4().nullable(),\n  callback_url: z.url().nullable(),\n  created_at: z.coerce.date(),\n  updated_at: z.coerce.date(),\n  metadata: z.record(z.string(), z.string()).nullable(),\n  source: PaymentSourceResponseSchema,\n} satisfies AllKeys<Payment>);\n\nconst CreditCardSourceSchema = z.object({\n  type: z.literal(PaymentSource.CREDITCARD),\n  name: z\n    .string()\n    .min(1, \"Name is required\")\n    .max(PaymentValidation.DESCRIPTION_MAX_LENGTH)\n    .refine(val => val.trim().split(\" \").length >= 2, {\n      message: \"Card holder name must be at least two words\",\n    })\n    .transform(val => val.trim()),\n  number: z.string().regex(/^\\d{16,19}$/, \"Card number must be 16-19 digits\"),\n  month: z\n    .number()\n    .int(\"Month must be an integer\")\n    .min(1, \"Month must be between 1 and 12\")\n    .max(12, \"Month must be between 1 and 12\"),\n  year: z\n    .number()\n    .int(\"Year must be an integer\")\n    .min(new Date().getFullYear(), \"Year cannot be in the past\"),\n  cvc: z.string().regex(/^\\d{3,4}$/, \"CVC must be 3-4 digits\"),\n  statement_descriptor: z\n    .string()\n    .max(PaymentValidation.STATEMENT_DESCRIPTOR_MAX_LENGTH)\n    .optional(),\n  \"3ds\": z.boolean().optional(),\n  manual: z.boolean().optional(),\n  save_card: z.boolean().optional(),\n} satisfies AllKeys<CreateCreditCardPaymentSource>);\n\nconst TokenSourceSchema = z.object({\n  type: z.literal(PaymentSource.TOKEN),\n  token: z.string().regex(/^token_/, \"Token must start with 'token_'\"),\n  cvc: z\n    .string()\n    .regex(/^\\d{3,4}$/, \"CVC must be 3-4 digits\")\n    .optional(),\n  statement_descriptor: z\n    .string()\n    .max(PaymentValidation.STATEMENT_DESCRIPTOR_MAX_LENGTH)\n    .optional(),\n  \"3ds\": z.boolean().optional(),\n  manual: z.boolean().optional(),\n} satisfies AllKeys<CreateTokenPaymentSource>);\n\nconst GooglePaySourceSchema = z.object({\n  type: z.literal(PaymentSource.GOOGLEPAY),\n  token: z.string().optional(),\n  manual: z.boolean().optional(),\n  save_card: z.boolean().optional(),\n  statement_descriptor: z\n    .string()\n    .max(PaymentValidation.STATEMENT_DESCRIPTOR_MAX_LENGTH)\n    .optional(),\n} satisfies AllKeys<CreateGooglePayPaymentSource>);\n\nconst ApplePaySourceSchema = z.object({\n  type: z.literal(PaymentSource.APPLEPAY),\n  token: z.string(),\n  manual: z.boolean().optional(),\n  save_card: z.boolean().optional(),\n  statement_descriptor: z\n    .string()\n    .max(PaymentValidation.STATEMENT_DESCRIPTOR_MAX_LENGTH)\n    .optional(),\n} satisfies AllKeys<CreateApplePayPaymentSource>);\n\nconst SamsungPaySourceSchema = z.object({\n  type: z.literal(PaymentSource.SAMSUNGPAY),\n  token: z.string(),\n  manual: z.boolean().optional(),\n  save_card: z.boolean().optional(),\n  statement_descriptor: z\n    .string()\n    .max(PaymentValidation.STATEMENT_DESCRIPTOR_MAX_LENGTH)\n    .optional(),\n} satisfies AllKeys<CreateSamsungPayPaymentSource>);\n\nconst StcPaySourceSchema = z.object({\n  type: z.literal(PaymentSource.STCPAY),\n  mobile: z\n    .string()\n    .regex(\n      PaymentValidation.SAUDI_MOBILE_REGEX,\n      \"Invalid Saudi mobile number format\"\n    ),\n  cashier_id: z.string().optional(),\n  branch: z.string().optional(),\n} satisfies AllKeys<CreateStcPayPaymentSource>);\n\nconst CreatePaymentSourceSchema = z.discriminatedUnion(\"type\", [\n  CreditCardSourceSchema,\n  TokenSourceSchema,\n  GooglePaySourceSchema,\n  ApplePaySourceSchema,\n  SamsungPaySourceSchema,\n  StcPaySourceSchema,\n]);\n\nexport const CreatePaymentSchema = z.object({\n  given_id: z.uuid(\"ID must be a valid UUID\").optional(),\n  amount: amountSchema,\n  currency: currencySchema,\n  description: z\n    .string()\n    .min(1, \"Description is required\")\n    .max(\n      PaymentValidation.DESCRIPTION_MAX_LENGTH,\n      `Description must be less than ${PaymentValidation.DESCRIPTION_MAX_LENGTH} characters`\n    )\n    .transform(val => val.trim()),\n  callback_url: z.url(\"Callback URL must be a valid URL\"),\n  source: CreatePaymentSourceSchema,\n  metadata: z.record(z.string(), z.string()).optional(),\n  apply_coupon: z.boolean().optional(),\n} satisfies AllKeys<CreatePaymentRequest>);\n\nexport const UpdatePaymentSchema = z.object({\n  description: z\n    .string()\n    .min(1, \"Description is required\")\n    .max(PaymentValidation.DESCRIPTION_MAX_LENGTH)\n    .transform(val => val.trim())\n    .optional(),\n  metadata: z.record(z.string(), z.string()).optional(),\n} satisfies AllKeys<UpdatePaymentRequest>);\n\nexport const RefundPaymentSchema = z.object({\n  amount: amountSchema.optional(),\n} satisfies AllKeys<RefundPaymentRequest>);\n\nexport const CapturePaymentSchema = z\n  .object({\n    amount: amountSchema.optional(),\n  } satisfies AllKeys<CapturePaymentRequest>)\n  .optional();\n\nexport const listPaymentResponseSchema = z.object({\n  payments: z.array(z.unknown()),\n  meta: paginationMetaSchema,\n} satisfies AllKeys<ListPaymentsResponse>);\n","import type { ListPaymentsResponse, Payment } from \"./types\";\nimport type {\n  CreatePaymentRequest,\n  UpdatePaymentRequest,\n  RefundPaymentRequest,\n  CapturePaymentRequest,\n} from \"./types\";\nimport { PaymentValidation } from \"./constants\";\nimport { PaymentStatus, PaymentSource, CardScheme } from \"./enums\";\nimport { type Amount, type CurrencyType } from \"@types\";\nimport {\n  CreatePaymentSchema,\n  UpdatePaymentSchema,\n  RefundPaymentSchema,\n  CapturePaymentSchema,\n  PaymentSchema,\n  listPaymentResponseSchema,\n} from \"./validation/schemas\";\nimport type { MetadataValidator, ValidationResult } from \"@types\";\n\ntype PaymentUtilsParams<T extends object> = {\n  metadataValidator: MetadataValidator<T>;\n};\nexport class PaymentUtils<T extends object> {\n  private readonly metadataValidator: MetadataValidator<T>;\n\n  constructor(p: PaymentUtilsParams<T>) {\n    this.metadataValidator = p.metadataValidator;\n  }\n\n  /**\n   * Validate payment creation request using Zod\n   */\n  validateCreatePaymentRequest(\n    request: CreatePaymentRequest<T>\n  ): ValidationResult<CreatePaymentRequest<T>> {\n    const result = CreatePaymentSchema.safeParse(request);\n    const metadata = result.data?.metadata\n      ? this.metadataValidator.parse(result.data?.metadata)\n      : undefined;\n\n    if (result.success) {\n      return {\n        success: true,\n        data: {\n          ...result.data,\n          metadata,\n        },\n        errors: [],\n      };\n    }\n\n    const errors = result.error.issues.map(err => {\n      const path = err.path.length > 0 ? `${err.path.join(\".\")}: ` : \"\";\n      return `${path}${err.message}`;\n    });\n\n    return {\n      success: false,\n      errors,\n    };\n  }\n\n  /**\n   * Validate payment update request using Zod\n   */\n  validateUpdatePaymentRequest(\n    request: UpdatePaymentRequest<T>\n  ): ValidationResult<UpdatePaymentRequest<T>> {\n    const result = UpdatePaymentSchema.safeParse(request);\n    const metadata = result.data?.metadata\n      ? this.metadataValidator.parse(result.data?.metadata)\n      : undefined;\n\n    if (result.success) {\n      return {\n        success: true,\n        data: {\n          ...result.data,\n          metadata,\n        },\n        errors: [],\n      };\n    }\n\n    const errors = result.error.issues.map(err => {\n      const path = err.path.length > 0 ? `${err.path.join(\".\")}: ` : \"\";\n      return `${path}${err.message}`;\n    });\n\n    return {\n      success: false,\n      errors,\n    };\n  }\n\n  /**\n   * Validate refund request using Zod\n   */\n  validateRefundRequest(\n    request: RefundPaymentRequest\n  ): ValidationResult<RefundPaymentRequest> {\n    const result = RefundPaymentSchema.safeParse(request);\n\n    if (result.success) {\n      return {\n        success: true,\n        data: result.data as RefundPaymentRequest,\n        errors: [],\n      };\n    }\n\n    const errors = result.error.issues.map(err => {\n      const path = err.path.length > 0 ? `${err.path.join(\".\")}: ` : \"\";\n      return `${path}${err.message}`;\n    });\n\n    return {\n      success: false,\n      errors,\n    };\n  }\n\n  /**\n   * Validate capture request using Zod\n   */\n  validateCaptureRequest(\n    request?: CapturePaymentRequest\n  ): ValidationResult<CapturePaymentRequest> {\n    const result = CapturePaymentSchema.safeParse(request);\n\n    if (result.success) {\n      return {\n        success: true,\n        data: result.data as CapturePaymentRequest,\n        errors: [],\n      };\n    }\n\n    const errors = result.error.issues.map(err => {\n      const path = err.path.length > 0 ? `${err.path.join(\".\")}: ` : \"\";\n      return `${path}${err.message}`;\n    });\n\n    return {\n      success: false,\n      errors,\n    };\n  }\n\n  /**\n   * Format amount for display\n   */\n  formatAmount(\n    amount: Amount,\n    currency: CurrencyType\n  ): `${number} ${CurrencyType}` {\n    const divisors: Record<string, number> = {\n      KWD: 1000,\n      JPY: 1,\n      SAR: 100,\n      USD: 100,\n      EUR: 100,\n    };\n\n    const divisor = divisors[currency] ?? 100;\n    const formattedAmount = (amount / divisor).toFixed(\n      divisor === 1 ? 0 : 2\n    ) as `${number}`;\n\n    return `${formattedAmount} ${currency}`;\n  }\n\n  /**\n   * Parse amount from display format to smallest unit\n   */\n  parseAmount(formattedAmount: string, currency: CurrencyType): number {\n    const divisors: Record<string, number> = {\n      KWD: 1000,\n      JPY: 1,\n      SAR: 100,\n      USD: 100,\n      EUR: 100,\n    };\n\n    const amount = parseFloat(formattedAmount.replace(/[^\\d.]/g, \"\"));\n    const divisor = divisors[currency.toUpperCase()] || 100;\n\n    return Math.round(amount * divisor);\n  }\n\n  /**\n   * Check if payment is in a final state\n   */\n  isPaymentFinal(status: PaymentStatus): boolean {\n    const finalStatuses: PaymentStatus[] = [\n      PaymentStatus.PAID,\n      PaymentStatus.FAILED,\n      PaymentStatus.REFUNDED,\n      PaymentStatus.CAPTURED,\n      PaymentStatus.VOIDED,\n      PaymentStatus.VERIFIED,\n    ];\n    return finalStatuses.includes(status);\n  }\n\n  /**\n   * Check if payment can be refunded\n   */\n  canRefundPayment(payment: Payment<T>): boolean {\n    const refundableStatuses: PaymentStatus[] = [\n      PaymentStatus.PAID,\n      PaymentStatus.CAPTURED,\n    ];\n\n    // Check if status allows refund and if there's refundable amount\n    const statusAllowed = refundableStatuses.includes(payment.status);\n    const hasRefundableAmount = payment.captured - payment.refunded > 0;\n\n    // Check if within refund timeout (if refunded_at exists, can't refund again)\n    const notFullyRefunded = payment.refunded < payment.captured;\n\n    return statusAllowed && hasRefundableAmount && notFullyRefunded;\n  }\n\n  /**\n   * Check if payment can be captured\n   */\n  canCapturePayment(payment: Payment<T>): boolean {\n    return payment.status === PaymentStatus.AUTHORIZED;\n  }\n\n  /**\n   * Check if payment can be voided\n   */\n  canVoidPayment(payment: Payment<T>): boolean {\n    return payment.status === PaymentStatus.AUTHORIZED;\n  }\n\n  /**\n   * Get maximum refund amount for a payment\n   */\n  getMaxRefundAmount(payment: Payment<T>): number {\n    return Math.max(0, payment.captured - payment.refunded);\n  }\n\n  /**\n   * Get maximum capture amount for an authorized payment\n   */\n  getMaxCaptureAmount(payment: Payment<T>): number {\n    if (payment.status !== PaymentStatus.AUTHORIZED) {\n      return 0;\n    }\n    return payment.amount;\n  }\n\n  /**\n   * Check if card scheme matches expected CVV length\n   */\n  validateCvcLength(cvc: string, scheme?: CardScheme): boolean {\n    if (scheme === CardScheme.AMEX) {\n      return cvc.length === PaymentValidation.AMEX_CVV_LENGTH;\n    }\n    return cvc.length === PaymentValidation.CVV_LENGTH;\n  }\n\n  /**\n   * Mask card number for display (show first 6 and last 4 digits)\n   */\n  maskCardNumber(cardNumber: string): string {\n    if (cardNumber.length < 10) {\n      return cardNumber;\n    }\n    const first6 = cardNumber.substring(0, 6);\n    const last4 = cardNumber.substring(cardNumber.length - 4);\n    const middle = \"*\".repeat(cardNumber.length - 10);\n    return `${first6}${middle}${last4}`;\n  }\n\n  /**\n   * Get last 4 digits of card number\n   */\n  getCardLast4(cardNumber: string): string {\n    return cardNumber.substring(cardNumber.length - 4);\n  }\n\n  /**\n   * Build metadata query parameters for filtering\n   */\n  buildMetadataQuery(metadata: Record<string, string>): Record<string, string> {\n    const query: Record<string, string> = {};\n\n    Object.entries(metadata).forEach(([key, value]) => {\n      query[`metadata[${key}]`] = value;\n    });\n\n    return query;\n  }\n\n  /**\n   * Sanitize payment description\n   */\n  sanitizeDescription(description: string): string {\n    return description\n      .trim()\n      .substring(0, PaymentValidation.DESCRIPTION_MAX_LENGTH);\n  }\n\n  /**\n   * Generate idempotency key for payment\n   */\n  generateIdempotencyKey(prefix: string = \"pay\"): string {\n    const timestamp = Date.now().toString(36);\n    const random = Math.random().toString(36).substring(2, 8);\n    return `${prefix}_${timestamp}_${random}`;\n  }\n\n  /**\n   * Check if payment method requires 3DS by default\n   */\n  requires3DS(source: CreatePaymentRequest[\"source\"]): boolean {\n    // Credit cards typically require 3DS unless explicitly bypassed\n    if (source.type === PaymentSource.CREDITCARD)\n      return source[\"3ds\"] !== false; // Undefined maps to true by default\n\n    // Wallet payments usually handle their own authentication\n    return false;\n  }\n\n  /**\n   * Parse and validate a Payment response, ensuring all data types are correct\n   */\n  parsePayment(payment: unknown): Payment<T> {\n    const parsed = PaymentSchema.parse(payment);\n    const metadata = parsed.metadata\n      ? this.metadataValidator.parse(parsed.metadata)\n      : undefined;\n\n    return {\n      ...parsed,\n      metadata,\n    };\n  }\n\n  parseListPaymentsResponse(response: unknown): ListPaymentsResponse<T> {\n    const parsed = listPaymentResponseSchema.parse(response);\n    const payments = parsed.payments.map(payment => this.parsePayment(payment));\n    return {\n      ...parsed,\n      payments,\n    };\n  }\n\n  /**\n   * Parse and validate an array of Payment responses\n   */\n  parsePayments(payments: unknown): Payment<T>[] {\n    if (!Array.isArray(payments)) {\n      throw new Error(\"Expected payments to be an array\");\n    }\n    return payments.map(payment => this.parsePayment(payment));\n  }\n\n  /**\n   * Safely parse a Payment response with error handling\n   */\n  safeParsePayment(payment: unknown): {\n    success: boolean;\n    data?: Payment<T>;\n    error?: string;\n  } {\n    try {\n      const parsedPayment = this.parsePayment(payment);\n      return {\n        success: true,\n        data: parsedPayment,\n      };\n    } catch (error) {\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : \"Unknown parsing error\",\n      };\n    }\n  }\n}\n\nexport * as PaymentSchemas from \"./validation/schemas\";\n","import type { ApiClient, Metadata, MoyasarClientTypes } from \"@types\";\nimport { API_ENDPOINTS } from \"@constants\";\nimport type {\n  ListPaymentsResponse,\n  PaymentListOptions,\n  Payment,\n  CreatePaymentRequest,\n  UpdatePaymentRequest,\n  RefundPaymentRequest,\n  CapturePaymentRequest,\n} from \"./types\";\nimport { PaymentStatus } from \"./enums\";\nimport { PaymentUtils } from \"./utils\";\nimport { PaymentError } from \"./errors\";\nimport { MoyasarError } from \"../../shared/errors\";\n\ntype PaymentServiceParams<T extends MoyasarClientTypes> = {\n  apiClient: ApiClient<T>;\n};\n\nexport class PaymentService<T extends MoyasarClientTypes> {\n  private apiClient: ApiClient<T>;\n  private readonly paymentUtils: PaymentUtils<T[\"metadata\"]>;\n\n  constructor(p: PaymentServiceParams<T>) {\n    this.apiClient = p.apiClient;\n    this.paymentUtils = new PaymentUtils({\n      metadataValidator: p.apiClient.metadataValidator,\n    });\n  }\n\n  /**\n   * Create a new payment\n   */\n  async create(\n    params: CreatePaymentRequest<T[\"metadata\"]>\n  ): Promise<Payment<T[\"metadata\"]>> {\n    // Validate input\n    const validation = this.paymentUtils.validateCreatePaymentRequest(params);\n    if (!validation.success) {\n      throw new PaymentError(\n        `Validation failed: ${validation.errors.join(\", \")}`,\n        400\n      );\n    }\n\n    try {\n      const response = await this.apiClient.request<unknown>({\n        method: \"POST\",\n        url: API_ENDPOINTS.payments,\n        data: params,\n      });\n\n      return this.paymentUtils.parsePayment(response);\n    } catch (error) {\n      const paymentError = this.handleError(error, `Failed to create payment`);\n      throw paymentError;\n    }\n  }\n\n  /**\n   * List payments with optional filtering\n   */\n  async list(\n    options: PaymentListOptions = {}\n  ): Promise<ListPaymentsResponse<T[\"metadata\"]>> {\n    try {\n      // Convert metadata filters to proper query format\n      const queryParams = this.parseBody(options);\n      const response = await this.apiClient.request<unknown>({\n        method: \"GET\",\n        url: API_ENDPOINTS.payments,\n        params: queryParams,\n      });\n\n      const parsed = this.paymentUtils.parseListPaymentsResponse(response);\n      return parsed;\n    } catch (error) {\n      const paymentError = this.handleError(error, \"Failed to list payments\");\n      throw paymentError;\n    }\n  }\n\n  /**\n   * Retrieve a specific payment\n   */\n  async retrieve(paymentId: string): Promise<Payment<T[\"metadata\"]>> {\n    if (!paymentId) throw new PaymentError(\"Payment ID is required\", 400);\n\n    try {\n      const response = await this.apiClient.request<unknown>({\n        method: \"GET\",\n        url: `${API_ENDPOINTS.payments}/${paymentId}`,\n      });\n\n      // Parse and validate the response\n      const payment = this.paymentUtils.parsePayment(response);\n      return payment;\n    } catch (error) {\n      const paymentError = this.handleError(\n        error,\n        `Failed to retrieve payment ${paymentId}`\n      );\n      throw paymentError;\n    }\n  }\n\n  /**\n   * Update a payment\n   */\n  async update({\n    paymentId,\n    update,\n  }: {\n    paymentId: string;\n    update: UpdatePaymentRequest<T[\"metadata\"]>;\n  }): Promise<Payment<T[\"metadata\"]>> {\n    if (!paymentId) {\n      throw new PaymentError(\"Payment ID is required\", 400);\n    }\n\n    // Validate input\n    const validation = this.paymentUtils.validateUpdatePaymentRequest(update);\n    if (!validation.success) {\n      throw new PaymentError(\n        `Validation failed: ${validation.errors.join(\", \")}`,\n        400\n      );\n    }\n\n    try {\n      const response = await this.apiClient.request<Payment<T[\"metadata\"]>>({\n        method: \"PUT\",\n        url: `${API_ENDPOINTS.payments}/${paymentId}`,\n        data: update,\n      });\n\n      return response;\n    } catch (error) {\n      const paymentError = this.handleError(\n        error,\n        `Failed to update payment ${paymentId}`\n      );\n      throw paymentError;\n    }\n  }\n\n  /**\n   * Refund a payment (full or partial)\n   */\n  async refund({\n    paymentId,\n    refund,\n  }: {\n    paymentId: string;\n    refund: RefundPaymentRequest;\n  }): Promise<Payment<T[\"metadata\"]>> {\n    if (!paymentId) {\n      throw new PaymentError(\"Payment ID is required\", 400);\n    }\n\n    refund.amount;\n    // Validate input\n    const validation = this.paymentUtils.validateRefundRequest(refund);\n    if (!validation.success) {\n      throw new PaymentError(\n        `Validation failed: ${validation.errors.join(\", \")}`,\n        400\n      );\n    }\n\n    try {\n      const response = await this.apiClient.request<unknown>({\n        method: \"POST\",\n        url: `${API_ENDPOINTS.payments}/${paymentId}/refund`,\n        data: refund,\n      });\n\n      // Parse and validate the response\n      const payment = this.paymentUtils.parsePayment(response);\n      return payment;\n    } catch (error) {\n      const paymentError = this.handleError(\n        error,\n        `Failed to refund payment ${paymentId}`\n      );\n      throw paymentError;\n    }\n  }\n\n  /**\n   * Capture an authorized payment (full or partial)\n   */\n  async capture({\n    paymentId,\n    capture,\n  }: {\n    paymentId: string;\n    capture?: CapturePaymentRequest;\n  }): Promise<Payment<T[\"metadata\"]>> {\n    if (!paymentId) throw new PaymentError(\"Payment ID is required\", 400);\n\n    // Validate input\n    const validation = this.paymentUtils.validateCaptureRequest(capture);\n    if (!validation.success) {\n      throw new PaymentError(`Validation failed: ${validation.errors}`, 400, {\n        errors: validation.errors,\n      });\n    }\n\n    try {\n      const response = await this.apiClient.request<unknown>({\n        method: \"POST\",\n        url: `${API_ENDPOINTS.payments}/${paymentId}/capture`,\n        data: capture,\n      });\n\n      // Parse and validate the response\n      const payment = this.paymentUtils.parsePayment(response);\n      return payment;\n    } catch (error) {\n      const paymentError = this.handleError(\n        error,\n        `Failed to capture payment ${paymentId}`\n      );\n      throw paymentError;\n    }\n  }\n\n  /**\n   * Void an authorized payment\n   */\n  async void(paymentId: string): Promise<Payment<T[\"metadata\"]>> {\n    if (!paymentId) throw new PaymentError(\"Payment ID is required\", 400);\n\n    try {\n      const response = await this.apiClient.request<unknown>({\n        method: \"POST\",\n        url: `${API_ENDPOINTS.payments}/${paymentId}/void`,\n      });\n\n      // Parse and validate the response\n      const payment = this.paymentUtils.parsePayment(response);\n      return payment;\n    } catch (error) {\n      const paymentError = this.handleError(\n        error,\n        `Failed to void payment ${paymentId}`\n      );\n      throw paymentError;\n    }\n  }\n\n  /**\n   * Search payments by metadata\n   */\n  async searchByMetadata({\n    metadata,\n    options,\n  }: {\n    metadata: Metadata;\n    options: Omit<PaymentListOptions, \"metadata\">;\n  }): Promise<ListPaymentsResponse<T[\"metadata\"]>> {\n    const metadataQuery = this.paymentUtils.buildMetadataQuery(metadata);\n\n    return this.list({\n      ...options,\n      ...metadataQuery,\n    } as PaymentListOptions);\n  }\n\n  /**\n   * Get payments by status\n   */\n  async getByStatus(\n    status: PaymentStatus,\n    options: Omit<PaymentListOptions, \"status\"> = {}\n  ): Promise<ListPaymentsResponse<T[\"metadata\"]>> {\n    return this.list({\n      ...options,\n      status,\n    });\n  }\n\n  /**\n   * Get paid payments\n   */\n  async getPaid(\n    options: Omit<PaymentListOptions, \"status\"> = {}\n  ): Promise<ListPaymentsResponse<T[\"metadata\"]>> {\n    return this.getByStatus(PaymentStatus.PAID, options);\n  }\n\n  /**\n   * Get failed payments\n   */\n  async getFailed(\n    options: Omit<PaymentListOptions, \"status\"> = {}\n  ): Promise<ListPaymentsResponse<T[\"metadata\"]>> {\n    return this.getByStatus(PaymentStatus.FAILED, options);\n  }\n\n  /**\n   * Get authorized payments\n   */\n  async getAuthorized(\n    options: Omit<PaymentListOptions, \"status\"> = {}\n  ): Promise<ListPaymentsResponse<T[\"metadata\"]>> {\n    return this.getByStatus(PaymentStatus.AUTHORIZED, options);\n  }\n\n  /**\n   * Get refunded payments\n   */\n  async getRefunded(\n    options: Omit<PaymentListOptions, \"status\"> = {}\n  ): Promise<ListPaymentsResponse<T[\"metadata\"]>> {\n    return this.getByStatus(PaymentStatus.REFUNDED, options);\n  }\n\n  /**\n   * Get payments by card last 4 digits\n   */\n  async getByCardLast4({\n    last4,\n    options,\n  }: {\n    last4: string;\n    options: Omit<PaymentListOptions, \"last_4\">;\n  }): Promise<ListPaymentsResponse<T[\"metadata\"]>> {\n    if (!/^\\d{4}$/.test(last4)) {\n      throw new PaymentError(\"Last 4 digits must be exactly 4 digits\", 400);\n    }\n\n    return this.list({\n      ...options,\n      last_4: last4,\n    });\n  }\n\n  /**\n   * Get payments by RRN (Retrieval Reference Number)\n   */\n  async getByRRN({\n    rrn,\n    options,\n  }: {\n    rrn: string;\n    options: Omit<PaymentListOptions, \"rrn\">;\n  }): Promise<ListPaymentsResponse<T[\"metadata\"]>> {\n    if (!/^\\d{12}$/.test(rrn)) {\n      throw new PaymentError(\"RRN must be exactly 12 digits\", 400);\n    }\n\n    return this.list({\n      ...options,\n      rrn,\n    });\n  }\n\n  /**\n   * Check payment capabilities (what actions can be performed)\n   */\n  async getPaymentCapabilities(paymentId: string): Promise<{\n    canRefund: boolean;\n    canCapture: boolean;\n    canVoid: boolean;\n    maxRefundAmount: number;\n    maxCaptureAmount: number;\n  }> {\n    const payment = await this.retrieve(paymentId);\n\n    return {\n      canRefund: this.paymentUtils.canRefundPayment(payment),\n      canCapture: this.paymentUtils.canCapturePayment(payment),\n      canVoid: this.paymentUtils.canVoidPayment(payment),\n      maxRefundAmount: this.paymentUtils.getMaxRefundAmount(payment),\n      maxCaptureAmount: this.paymentUtils.getMaxCaptureAmount(payment),\n    };\n  }\n\n  private handleError(error: any, message: string): PaymentError {\n    if (error instanceof PaymentError) return error;\n\n    if (error instanceof MoyasarError) {\n      return new PaymentError(\n        `${message}: ${error.message}`,\n        error.statusCode,\n        { ...error.details }\n      );\n    }\n\n    const errorMessage = error?.message || error?.toString() || \"Unknown error\";\n    return new PaymentError(`${message}: ${errorMessage}`, 500, {\n      cause: errorMessage,\n    });\n  }\n\n  protected parseBody(p: object): Record<string, string> {\n    const copied = { ...p };\n    Object.entries(copied).forEach(([key, value]) => {\n      if (typeof value === \"object\") {\n        if (value instanceof Date) {\n          // @ts-expect-error\n          copied[key] = value.toISOString();\n        }\n      }\n    });\n\n    return copied;\n  }\n}\n","import type { ApiClient, Metadata, MoyasarClientTypes } from \"@types\";\nimport { API_ENDPOINTS } from \"@constants\";\nimport { WebhookUtils } from \"./utils\";\nimport { WebhookError, WebhookValidationError } from \"./errors\";\nimport { WebhookValidation } from \"./validation\";\nimport { WebhookEvent } from \"./enums\";\nimport type {\n  Webhook,\n  WebhookPayload,\n  WebhookAttempt,\n  CreateWebhookRequest,\n  UpdateWebhookRequest,\n  ListWebhooksResponse,\n  ListWebhookAttemptsResponse,\n  AvailableEventsResponse,\n  WebhookListOptions,\n  WebhookAttemptListOptions,\n  WebhookVerificationOptions,\n  WebhookEventMap,\n} from \"./types\";\nimport { TypedEmitter } from \"tiny-typed-emitter\";\nimport { PaymentUtils } from \"@payment\";\n\ntype WebhookServiceParams<T extends MoyasarClientTypes> = {\n  apiClient: ApiClient<T>;\n};\n\nexport class WebhookService<T extends MoyasarClientTypes> extends TypedEmitter<\n  WebhookEventMap<T[\"metadata\"]>\n> {\n  private readonly apiClient: ApiClient<T>;\n  private readonly events = Object.values(WebhookEvent) as WebhookEvent[];\n  private readonly paymentUtils: PaymentUtils<T[\"metadata\"]>;\n  constructor(params: WebhookServiceParams<T>) {\n    super();\n    this.apiClient = params.apiClient;\n    this.paymentUtils = new PaymentUtils({\n      metadataValidator: params.apiClient.metadataValidator,\n    });\n  }\n\n  /**\n   * Create a new webhook\n   */\n  async create(params: CreateWebhookRequest): Promise<Webhook> {\n    // Validate input\n    this.validateCreateRequest(params);\n\n    try {\n      const webhook = await this.apiClient.request<Webhook>({\n        method: \"POST\",\n        url: API_ENDPOINTS.webhooks,\n        data: params,\n      });\n\n      return webhook;\n    } catch (error) {\n      const webhookError = this.handleError(error, \"Failed to create webhook\");\n      throw webhookError;\n    }\n  }\n\n  /**\n   * List all webhooks\n   */\n  async list(options: WebhookListOptions = {}): Promise<ListWebhooksResponse> {\n    try {\n      return await this.apiClient.request<ListWebhooksResponse>({\n        method: \"GET\",\n        url: API_ENDPOINTS.webhooks,\n        params: options,\n      });\n    } catch (error) {\n      const webhookError = this.handleError(error, \"Failed to list webhooks\");\n      throw webhookError;\n    }\n  }\n\n  /**\n   * Retrieve a specific webhook\n   */\n  async retrieve(webhookId: string): Promise<Webhook> {\n    if (!webhookId) {\n      throw new WebhookError(\"Webhook ID is required\");\n    }\n\n    try {\n      return await this.apiClient.request<Webhook>({\n        method: \"GET\",\n        url: `${API_ENDPOINTS.webhooks}/${webhookId}`,\n      });\n    } catch (error) {\n      const webhookError = this.handleError(\n        error,\n        `Failed to retrieve webhook ${webhookId}`\n      );\n      throw webhookError;\n    }\n  }\n\n  /**\n   * Update a webhook\n   */\n  async update(\n    webhookId: string,\n    params: UpdateWebhookRequest\n  ): Promise<Webhook> {\n    if (!webhookId) {\n      throw new WebhookError(\"Webhook ID is required\");\n    }\n\n    // Validate input\n    this.validateUpdateRequest(params);\n\n    try {\n      const webhook = await this.apiClient.request<Webhook>({\n        method: \"PUT\",\n        url: `${API_ENDPOINTS.webhooks}/${webhookId}`,\n        data: params,\n      });\n\n      return webhook;\n    } catch (error) {\n      const webhookError = this.handleError(\n        error,\n        `Failed to update webhook ${webhookId}`\n      );\n      throw webhookError;\n    }\n  }\n\n  /**\n   * Delete a webhook\n   */\n  async delete(webhookId: string): Promise<void> {\n    if (!webhookId) {\n      throw new WebhookError(\"Webhook ID is required\");\n    }\n\n    try {\n      await this.apiClient.request({\n        method: \"DELETE\",\n        url: `${API_ENDPOINTS.webhooks}/${webhookId}`,\n      });\n    } catch (error) {\n      const webhookError = this.handleError(\n        error,\n        `Failed to delete webhook ${webhookId}`\n      );\n      throw webhookError;\n    }\n  }\n\n  /**\n   * Get available webhook events\n   */\n  async availableEvents(): Promise<AvailableEventsResponse> {\n    try {\n      return await this.apiClient.request<AvailableEventsResponse>({\n        method: \"GET\",\n        url: API_ENDPOINTS.availableEvents,\n      });\n    } catch (error) {\n      const webhookError = this.handleError(\n        error,\n        \"Failed to fetch available events\"\n      );\n      throw webhookError;\n    }\n  }\n\n  /**\n   * Webhook Attempts Sub-service\n   */\n  get attempts() {\n    return {\n      /**\n       * List all webhook attempts\n       */\n      list: async (\n        options: WebhookAttemptListOptions = {}\n      ): Promise<ListWebhookAttemptsResponse> => {\n        try {\n          return await this.apiClient.request<ListWebhookAttemptsResponse>({\n            method: \"GET\",\n            url: API_ENDPOINTS.webhookAttempts,\n            params: options,\n          });\n        } catch (error) {\n          const webhookError = this.handleError(\n            error,\n            \"Failed to list webhook attempts\"\n          );\n          throw webhookError;\n        }\n      },\n\n      /**\n       * Retrieve a specific webhook attempt\n       */\n      retrieve: async (attemptId: string): Promise<WebhookAttempt> => {\n        if (!attemptId) {\n          throw new WebhookError(\"Attempt ID is required\");\n        }\n\n        try {\n          return await this.apiClient.request<WebhookAttempt>({\n            method: \"GET\",\n            url: `${API_ENDPOINTS.webhookAttempts}/${attemptId}`,\n          });\n        } catch (error) {\n          const webhookError = this.handleError(\n            error,\n            `Failed to retrieve webhook attempt ${attemptId}`\n          );\n          throw webhookError;\n        }\n      },\n    };\n  }\n\n  /**\n   * Process incoming webhook payload\n   * This method should be called from your webhook endpoint\n   */\n  async processWebhook(\n    rawPayload: string | Buffer | WebhookPayload<T[\"metadata\"]>,\n    options: WebhookVerificationOptions\n  ): Promise<WebhookPayload<T[\"metadata\"]>> {\n    try {\n      // Parse payload if it's raw\n      const payload =\n        typeof rawPayload === \"object\" && \"id\" in rawPayload\n          ? rawPayload\n          : WebhookUtils.parseWebhookPayload(rawPayload as string | Buffer);\n\n      // Validate payload structure\n      const validationErrors = WebhookUtils.validateWebhookPayload(payload);\n      if (validationErrors.length > 0) {\n        throw new WebhookValidationError({\n          message: `Invalid webhook payload: ${validationErrors.join(\", \")}`,\n          unexpected_payload: payload,\n        });\n      }\n\n      // Verify signature if provided\n\n      const isValidSignature = await WebhookUtils.verifyWebhookSignature(\n        payload,\n        options\n      );\n      if (!isValidSignature)\n        throw new WebhookError(\"Webhook signature verification failed\");\n\n      try {\n        const parsedPayment = this.paymentUtils.parsePayment(payload.data);\n        const parsedPayload = {\n          ...payload,\n          data: parsedPayment,\n        };\n\n        this.emit(payload.type, parsedPayload);\n        return parsedPayload;\n      } catch (error) {\n        throw new WebhookValidationError({\n          message:\n            error instanceof Error && \"message\" in error\n              ? error.message\n              : \"Unknown error\",\n          unexpected_payload: payload,\n        });\n      }\n    } catch (error) {\n      const webhookError =\n        error instanceof WebhookError\n          ? error\n          : this.handleError(error, \"Failed to process webhook\");\n\n      throw webhookError;\n    }\n  }\n\n  /**\n   * Utility method to create type-safe event listeners for payment events\n   */\n  onPaymentEvent(\n    event: WebhookEvent,\n    listener: (payload: WebhookPayload<T[\"metadata\"]>) => void | Promise<void>\n  ): this {\n    return this.on(event, listener);\n  }\n\n  /**\n   * Utility method to listen to all payment events\n   */\n  onAnyPaymentEvent(\n    listener: (payload: WebhookPayload<T[\"metadata\"]>) => void | Promise<void>\n  ): this {\n    this.events.forEach(event => {\n      this.on(event, listener);\n    });\n\n    return this;\n  }\n\n  /**\n   * Helper method to extract webhook signature from common header patterns\n   */\n  extractSignature(headers: Record<string, string | string[]>): string | null {\n    return WebhookUtils.extractSignatureFromHeaders(headers);\n  }\n\n  // Private helper methods\n\n  private validateCreateRequest(params: CreateWebhookRequest): void {\n    const errors: string[] = [];\n\n    // Required fields\n    if (!params.url) {\n      errors.push(\"url is required\");\n    } else if (!WebhookValidation.isValidUrl(params.url)) {\n      errors.push(\"url must be a valid HTTP/HTTPS URL\");\n    }\n\n    if (!params.http_method) {\n      errors.push(\"http_method is required\");\n    } else if (!WebhookValidation.isValidHttpMethod(params.http_method)) {\n      errors.push(\"http_method must be a valid HTTP method\");\n    }\n\n    // Validate events if provided\n    if (params.events) {\n      const invalidEvents = params.events.filter(\n        event => !WebhookValidation.isValidWebhookEvent(event)\n      );\n      if (invalidEvents.length > 0) {\n        errors.push(`Invalid webhook events: ${invalidEvents.join(\", \")}`);\n      }\n    }\n\n    if (errors.length > 0) {\n      throw new WebhookError(`Validation failed: ${errors.join(\", \")}`);\n    }\n  }\n\n  private validateUpdateRequest(params: UpdateWebhookRequest): void {\n    const errors: string[] = [];\n\n    // Validate URL if provided\n    if (params.url && !WebhookValidation.isValidUrl(params.url)) {\n      errors.push(\"url must be a valid HTTP/HTTPS URL\");\n    }\n\n    // Validate HTTP method if provided\n    if (\n      params.http_method &&\n      !WebhookValidation.isValidHttpMethod(params.http_method)\n    ) {\n      errors.push(\"http_method must be a valid HTTP method\");\n    }\n\n    // Validate events if provided\n    if (params.events) {\n      const invalidEvents = params.events.filter(\n        event => !WebhookValidation.isValidWebhookEvent(event)\n      );\n      if (invalidEvents.length > 0) {\n        errors.push(`Invalid webhook events: ${invalidEvents.join(\", \")}`);\n      }\n    }\n\n    if (errors.length > 0) {\n      throw new WebhookError(`Validation failed: ${errors.join(\", \")}`);\n    }\n  }\n\n  private handleError(error: any, message: string): WebhookError {\n    if (error instanceof WebhookError) {\n      return error;\n    }\n\n    const errorMessage = error?.message || error?.toString() || \"Unknown error\";\n    return new WebhookError(`${message}: ${errorMessage}`, {\n      statusCode: error?.statusCode || error?.status,\n      message: errorMessage,\n    });\n  }\n}\n","export const InvoiceStatus = {\n  INITIATED: \"initiated\",\n  PAID: \"paid\",\n  FAILED: \"failed\",\n  REFUNDED: \"refunded\",\n  CANCELED: \"canceled\",\n  ON_HOLD: \"on_hold\",\n  EXPIRED: \"expired\",\n  VOIDED: \"voided\",\n} as const;\n\nexport type InvoiceStatus = (typeof InvoiceStatus)[keyof typeof InvoiceStatus];\n\nexport const ALL_INVOICE_STATUSES = Object.values(InvoiceStatus);\n","import { MoyasarError } from \"@errors\";\nexport class InvoiceError extends MoyasarError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, \"INVOICE_ERROR\", 500, details ?? {});\n    this.name = \"InvoiceError\";\n  }\n}\n","export const BulkInvoiceLimit = {\n  MAX_BULK_INVOICES: 50,\n} as const;\n","import { z } from \"zod\";\nimport { type AllKeys, type CurrencyType, Currency } from \"@types\";\nimport { InvoiceStatus } from \"../enums\";\nimport type {\n  BulkCreateInvoiceRequest,\n  CreateInvoiceRequest,\n  Invoice,\n} from \"../types\";\nimport { BulkInvoiceLimit } from \"../constants\";\nimport { amountSchema } from \"@validation\";\n\nexport const CreateInvoiceSchema = z.object({\n  amount: amountSchema,\n\n  currency: z\n    .string()\n    .transform(val => val.toUpperCase() as CurrencyType)\n    .refine(val => Object.values(Currency).includes(val as CurrencyType), {\n      message: \"Invalid currency\",\n    }),\n\n  description: z\n    .string()\n    .min(1, \"description is required\")\n    .max(255, \"description must be less than 255 characters\")\n    .transform(val => val.trim()),\n\n  callback_url: z.url(\"callback_url must be a valid URL\").optional(),\n  success_url: z.url(\"success_url must be a valid URL\").optional(),\n  back_url: z.url(\"back_url must be a valid URL\").optional(),\n  expired_at: z.coerce\n    .date()\n    .refine(\n      date => new Date(date) > new Date(),\n      \"expired_at must be in the future\"\n    )\n    .optional(),\n\n  metadata: z.record(z.string(), z.string()).optional(),\n} satisfies AllKeys<CreateInvoiceRequest>);\n\nexport const BulkCreateInvoiceSchema = z.object({\n  invoices: z\n    .array(CreateInvoiceSchema)\n    .min(1, \"at least one invoice is required\")\n    .max(\n      BulkInvoiceLimit.MAX_BULK_INVOICES,\n      `maximum of ${BulkInvoiceLimit.MAX_BULK_INVOICES} invoices allowed per bulk request`\n    ),\n} satisfies AllKeys<BulkCreateInvoiceRequest>);\n\nexport const invoiceSchema = z.object({\n  id: z.string(),\n  status: z.enum(InvoiceStatus),\n  amount: amountSchema,\n  currency: z.enum(Currency),\n  description: z.string(),\n  logo_url: z.url(\"logo_url must be a valid URL\"),\n  callback_url: z.url(\"callback_url must be a valid URL\").optional(),\n  success_url: z.url(\"success_url must be a valid URL\").optional(),\n  back_url: z.url(\"back_url must be a valid URL\").optional(),\n  expired_at: z.coerce.date().optional(),\n  created_at: z.coerce.date(),\n  updated_at: z.coerce.date(),\n  metadata: z.record(z.string(), z.string()).optional(),\n  amount_format: z\n    .string()\n    .transform(val => val as `${number} ${CurrencyType}`),\n  url: z.url(\"url must be a valid URL\"),\n} satisfies AllKeys<Invoice>);\n","import type {\n  Invoice,\n  CreateInvoiceRequest,\n  BulkCreateInvoiceRequest,\n  DetailedInvoice,\n} from \"./types\";\nimport { InvoiceStatus } from \"./enums\";\nimport {\n  CreateInvoiceSchema,\n  BulkCreateInvoiceSchema,\n  invoiceSchema,\n} from \"./validation/schemas\";\nimport { PaymentStatus } from \"@payment\";\nimport type { ValidationResult, Amount, CurrencyType, Metadata } from \"@types\";\nimport type { MetadataValidator } from \"@types\";\n\ntype InvoiceUtilsParams<T extends object> = {\n  metadataValidator: MetadataValidator<T>;\n};\n\nexport class InvoiceUtils<T extends object> {\n  private readonly metadataDeserializer: MetadataValidator<T>;\n\n  constructor(p: InvoiceUtilsParams<T>) {\n    this.metadataDeserializer = p.metadataValidator;\n  }\n\n  /**\n   * Validate single invoice creation request using Zod\n   */\n  validateCreateInvoiceRequest(\n    request: CreateInvoiceRequest<T>\n  ): ValidationResult<CreateInvoiceRequest<T>> {\n    const result = CreateInvoiceSchema.safeParse(request);\n\n    if (result.success) {\n      return {\n        success: true,\n        data: result.data as CreateInvoiceRequest<T>,\n        errors: [],\n      };\n    }\n\n    const errors = result.error.issues.map(err => {\n      const path = err.path.length > 0 ? `${err.path.join(\".\")}: ` : \"\";\n      return `${path}${err.message}`;\n    });\n\n    return {\n      success: false,\n      errors,\n    };\n  }\n\n  /**\n   * Validate bulk invoice creation request using Zod\n   */\n  validateBulkCreateRequest(\n    request: BulkCreateInvoiceRequest<T>\n  ): ValidationResult<BulkCreateInvoiceRequest<T>> {\n    const result = BulkCreateInvoiceSchema.safeParse(request);\n\n    if (result.success) {\n      return {\n        success: true,\n        data: result.data as BulkCreateInvoiceRequest<T>,\n        errors: [],\n      };\n    }\n\n    const errors = result.error.issues.map(err => {\n      let message = err.message;\n\n      // Format array index errors more clearly\n      if (\n        err.path.length >= 2 &&\n        err.path[0] === \"invoices\" &&\n        typeof err.path[1] === \"number\"\n      ) {\n        const invoiceIndex = err.path[1] as number;\n        const fieldPath = err.path.slice(2).join(\".\");\n        const fieldPrefix = fieldPath ? `${fieldPath}: ` : \"\";\n        message = `Invoice ${invoiceIndex + 1}: ${fieldPrefix}${err.message}`;\n      } else if (err.path.length > 0) {\n        const path = err.path.join(\".\");\n        message = `${path}: ${err.message}`;\n      }\n\n      return message;\n    });\n\n    return {\n      success: false,\n      errors,\n    };\n  }\n\n  /**\n   * Convert amount to display format\n   */\n  formatAmount(\n    amount: Amount,\n    currency: CurrencyType\n  ): `${number} ${CurrencyType}` {\n    const divisors: Record<string, number> = {\n      KWD: 1000,\n      JPY: 1,\n      SAR: 100,\n      USD: 100,\n      EUR: 100,\n    };\n\n    const divisor = divisors[currency] ?? 100;\n    const formattedAmount = (amount / divisor).toFixed(\n      divisor === 1 ? 0 : 2\n    ) as `${number}`;\n\n    return `${formattedAmount} ${currency}`;\n  }\n\n  /**\n   * Parse amount from display format to smallest unit\n   */\n  parseAmount(formattedAmount: string, currency: CurrencyType): number {\n    const divisors: Record<string, number> = {\n      KWD: 1000,\n      JPY: 1,\n      SAR: 100,\n      USD: 100,\n      EUR: 100,\n    };\n\n    const amount = parseFloat(formattedAmount.replace(/[^\\d.]/g, \"\"));\n    const divisor = divisors[currency.toUpperCase()] || 100;\n\n    return Math.round(amount * divisor);\n  }\n\n  /**\n   * Check if invoice is in a final state\n   */\n  isInvoiceFinal(status: InvoiceStatus): boolean {\n    const finalStatuses: InvoiceStatus[] = [\n      InvoiceStatus.PAID,\n      InvoiceStatus.CANCELED,\n      InvoiceStatus.EXPIRED,\n      InvoiceStatus.VOIDED,\n    ];\n    return finalStatuses.includes(status);\n  }\n\n  /**\n   * Check if invoice can be canceled\n   */\n  canCancelInvoice(invoice: Invoice): boolean {\n    const cancelableStatuses: InvoiceStatus[] = [\n      InvoiceStatus.INITIATED,\n      InvoiceStatus.FAILED,\n    ];\n    return cancelableStatuses.includes(invoice.status);\n  }\n\n  /**\n   * Check if invoice is expired\n   */\n  isInvoiceExpired(invoice: Invoice): boolean {\n    if (!invoice.expired_at) {\n      return false;\n    }\n\n    return new Date(invoice.expired_at) <= new Date();\n  }\n\n  /**\n   * Get time until expiry\n   */\n  getTimeUntilExpiry(invoice: Invoice): number | null {\n    if (!invoice.expired_at) {\n      return null;\n    }\n\n    const expiryTime = new Date(invoice.expired_at).getTime();\n    const currentTime = new Date().getTime();\n\n    return Math.max(0, expiryTime - currentTime);\n  }\n\n  /**\n   * Get payment summary for an invoice\n   */\n  getPaymentSummary(invoice: DetailedInvoice<T>) {\n    const payments = invoice.payments;\n\n    return {\n      total: payments.length,\n      paid: payments.filter(p => p.status === PaymentStatus.PAID).length,\n      failed: payments.filter(p => p.status === PaymentStatus.FAILED).length,\n      pending: payments.filter(p => p.status === PaymentStatus.INITIATED)\n        .length,\n      totalAmount: payments.reduce((sum, p) => sum + p.amount, 0),\n      paidAmount: payments\n        .filter(p => p.status === PaymentStatus.PAID)\n        .reduce((sum, p) => sum + p.amount, 0),\n      refundedAmount: payments.reduce((sum, p) => sum + p.refunded, 0),\n    };\n  }\n\n  /**\n   * Build metadata query parameters for filtering\n   */\n  buildMetadataQuery(metadata: T): Record<`metadata[${string}]`, string> {\n    const query: Record<`metadata[${string}]`, string> = {};\n\n    Object.entries(metadata).forEach(([key, value]) => {\n      query[`metadata[${key}]`] = value;\n    });\n\n    return query;\n  }\n\n  /**\n   * Sanitize invoice description\n   */\n  sanitizeDescription(description: string): string {\n    return description.trim().substring(0, 255);\n  }\n\n  /**\n   * Generate invoice reference number\n   */\n  generateReference(prefix: string = \"INV\"): string {\n    const timestamp = Date.now().toString(36);\n    const random = Math.random().toString(36).substring(2, 8);\n    return `${prefix}-${timestamp}-${random}`.toUpperCase();\n  }\n\n  /**\n   * Parse and validate a CreateInvoiceRequest, returning sanitized data\n   */\n  parseCreateInvoiceRequest(\n    request: unknown\n  ): ValidationResult<CreateInvoiceRequest<T>> {\n    return this.validateCreateInvoiceRequest(\n      request as CreateInvoiceRequest<T>\n    );\n  }\n\n  /**\n   * Parse and validate a BulkCreateInvoiceRequest, returning sanitized data\n   */\n  parseBulkCreateRequest(\n    request: unknown\n  ): ValidationResult<BulkCreateInvoiceRequest<T>> {\n    return this.validateBulkCreateRequest(\n      request as BulkCreateInvoiceRequest<T>\n    );\n  }\n\n  parseInvoice(invoice: unknown): Invoice<T> {\n    const parsed = invoiceSchema.parse(invoice);\n    const metadata = parsed.metadata\n      ? this.metadataDeserializer.parse(parsed.metadata)\n      : undefined;\n\n    return {\n      ...parsed,\n      metadata,\n    };\n  }\n}\n","import type { ApiClient, MoyasarClientTypes } from \"@types\";\nimport { API_ENDPOINTS } from \"@constants\";\nimport { MoyasarError } from \"@errors\";\nimport type {\n  CreateInvoiceRequest,\n  UpdateInvoiceRequest,\n  BulkCreateInvoiceRequest,\n  ListInvoicesResponse,\n  BulkCreateInvoicesResponse,\n  InvoiceListOptions,\n  DetailedInvoice,\n} from \"./types\";\nimport { InvoiceStatus } from \"./enums\";\nimport { InvoiceUtils } from \"./utils\";\nimport { InvoiceError } from \"./errors\";\n\ntype InvoiceServiceParams<T extends MoyasarClientTypes> = {\n  apiClient: ApiClient<T>;\n};\n\nexport class InvoiceService<T extends MoyasarClientTypes> {\n  private readonly apiClient: ApiClient<T>;\n  private readonly invoiceUtils: InvoiceUtils<T[\"metadata\"]>;\n\n  constructor(p: InvoiceServiceParams<T>) {\n    this.apiClient = p.apiClient;\n    this.invoiceUtils = new InvoiceUtils({\n      metadataValidator: this.apiClient.metadataValidator,\n    });\n  }\n\n  /**\n   * Create a new invoice\n   */\n  async create(\n    params: CreateInvoiceRequest<T[\"metadata\"]>\n  ): Promise<DetailedInvoice<T[\"metadata\"]>> {\n    // Validate input\n    const validation = this.invoiceUtils.validateCreateInvoiceRequest(params);\n    if (!validation.success) {\n      throw new InvoiceError(\n        `Validation failed: ${validation.errors.join(\", \")}`\n      );\n    }\n\n    try {\n      const invoice = await this.apiClient.request<\n        DetailedInvoice<T[\"metadata\"]>\n      >({\n        method: \"POST\",\n        url: API_ENDPOINTS.invoices,\n        data: params,\n      });\n\n      return invoice;\n    } catch (error) {\n      const invoiceError = this.handleError(error, \"Failed to create invoice\");\n      throw invoiceError;\n    }\n  }\n\n  /**\n   * Create multiple invoices in bulk\n   */\n  async createBulk(\n    params: BulkCreateInvoiceRequest<T[\"metadata\"]>\n  ): Promise<BulkCreateInvoicesResponse<T[\"metadata\"]>> {\n    // Validate input\n    const validation = this.invoiceUtils.validateBulkCreateRequest(params);\n    if (!validation.success) {\n      throw new InvoiceError(\n        `Validation failed: ${validation.errors.join(\", \")}`\n      );\n    }\n\n    try {\n      const response = await this.apiClient.request<\n        BulkCreateInvoicesResponse<T[\"metadata\"]>\n      >({\n        method: \"POST\",\n        url: API_ENDPOINTS.bulkInvoices,\n        data: params,\n      });\n\n      return response;\n    } catch (error) {\n      const invoiceError = this.handleError(\n        error,\n        \"Failed to create bulk invoices\"\n      );\n      throw invoiceError;\n    }\n  }\n\n  /**\n   * List invoices with optional filtering\n   */\n  async list(\n    options: InvoiceListOptions<T[\"metadata\"]> = {}\n  ): Promise<ListInvoicesResponse<T[\"metadata\"]>> {\n    try {\n      // Convert metadata filters to proper query format\n      const queryParams = this.parseBody(options);\n\n      return await this.apiClient.request<ListInvoicesResponse<T[\"metadata\"]>>({\n        method: \"GET\",\n        url: API_ENDPOINTS.invoices,\n        params: queryParams,\n      });\n    } catch (error) {\n      const invoiceError = this.handleError(error, \"Failed to list invoices\");\n      throw invoiceError;\n    }\n  }\n\n  /**\n   * Retrieve a specific invoice\n   */\n  async retrieve(invoiceId: string): Promise<DetailedInvoice<T[\"metadata\"]>> {\n    if (!invoiceId) {\n      throw new InvoiceError(\"Invoice ID is required\");\n    }\n\n    try {\n      return await this.apiClient.request<DetailedInvoice<T[\"metadata\"]>>({\n        method: \"GET\",\n        url: `${API_ENDPOINTS.invoices}/${invoiceId}`,\n      });\n    } catch (error) {\n      const invoiceError = this.handleError(\n        error,\n        `Failed to retrieve invoice ${invoiceId}`\n      );\n      throw invoiceError;\n    }\n  }\n\n  /**\n   * Update an invoice\n   */\n  async update(\n    invoiceId: string,\n    params: UpdateInvoiceRequest<T[\"metadata\"]>\n  ): Promise<DetailedInvoice<T[\"metadata\"]>> {\n    if (!invoiceId) {\n      throw new InvoiceError(\"Invoice ID is required\");\n    }\n\n    try {\n      const invoice = await this.apiClient.request<\n        DetailedInvoice<T[\"metadata\"]>\n      >({\n        method: \"PUT\",\n        url: `${API_ENDPOINTS.invoices}/${invoiceId}`,\n        data: params,\n      });\n\n      return invoice;\n    } catch (error) {\n      const invoiceError = this.handleError(\n        error,\n        `Failed to update invoice ${invoiceId}`\n      );\n      throw invoiceError;\n    }\n  }\n\n  /**\n   * Cancel an invoice\n   */\n  async cancel(invoiceId: string): Promise<DetailedInvoice<T[\"metadata\"]>> {\n    if (!invoiceId) {\n      throw new InvoiceError(\"Invoice ID is required\");\n    }\n\n    try {\n      const invoice = await this.apiClient.request<\n        DetailedInvoice<T[\"metadata\"]>\n      >({\n        method: \"PUT\",\n        url: `${API_ENDPOINTS.invoices}/${invoiceId}/cancel`,\n      });\n\n      return invoice;\n    } catch (error) {\n      const invoiceError = this.handleError(\n        error,\n        `Failed to cancel invoice ${invoiceId}`\n      );\n      throw invoiceError;\n    }\n  }\n\n  /**\n   * Search invoices by metadata\n   */\n  async searchByMetadata(\n    metadata: Partial<T[\"metadata\"]>,\n    options: Omit<InvoiceListOptions, \"metadata\"> = {}\n  ): Promise<ListInvoicesResponse<T[\"metadata\"]>> {\n    return this.list({\n      ...options,\n      metadata,\n    });\n  }\n\n  /**\n   * Get invoices by status\n   */\n  async getByStatus(\n    status: InvoiceStatus,\n    options: Omit<InvoiceListOptions, \"status\"> = {}\n  ): Promise<ListInvoicesResponse<T[\"metadata\"]>> {\n    return this.list({\n      ...options,\n      status,\n    });\n  }\n\n  /**\n   * Get expired invoices\n   */\n  async getExpired(\n    options: Omit<InvoiceListOptions, \"status\"> = {}\n  ): Promise<ListInvoicesResponse<T[\"metadata\"]>> {\n    return this.getByStatus(InvoiceStatus.EXPIRED, options);\n  }\n\n  /**\n   * Get paid invoices\n   */\n  async getPaid(\n    options: Omit<InvoiceListOptions, \"status\"> = {}\n  ): Promise<ListInvoicesResponse<T[\"metadata\"]>> {\n    return this.getByStatus(InvoiceStatus.PAID, options);\n  }\n\n  private handleError(error: any, message: string): InvoiceError {\n    if (error instanceof InvoiceError) {\n      return error;\n    }\n\n    if (error instanceof MoyasarError) {\n      return new InvoiceError(`${message}: ${error.message}`, {\n        ...error.details,\n      });\n    }\n\n    const errorMessage = error?.message || error?.toString() || \"Unknown error\";\n    return new InvoiceError(`${message}: ${errorMessage}`, {\n      cause: errorMessage,\n    });\n  }\n\n  protected parseBody(p: InvoiceListOptions<T[\"metadata\"]>) {\n    const copied = {\n      ...p,\n      ...this.invoiceUtils.buildMetadataQuery(p.metadata ?? {}),\n    };\n\n    delete copied.metadata;\n\n    Object.entries(copied).forEach(([key, value]) => {\n      if (typeof value === \"object\") {\n        if (value instanceof Date) {\n          // @ts-expect-error\n          copied[key] = value.toISOString();\n        }\n      }\n    });\n\n    return copied;\n  }\n}\n","import { BaseAxiosApiClient } from \"./base-client\";\nimport { WebhookService } from \"@webhook\";\n\nimport { InvoiceService } from \"@invoice\";\nimport type {\n  ApiClientOptions,\n  Metadata,\n  MoyasarClientTypes,\n  MetadataValidator,\n  ApiClient,\n} from \"@types\";\nimport { PaymentService } from \"@payment\";\n\nexport interface MoyasarClientOptions<T extends object = Metadata>\n  extends ApiClientOptions {\n  apiKey: string;\n  metadataValidator?: MetadataValidator<T>;\n}\n\nexport class MoyasarClient<T extends object = Metadata>\n  extends BaseAxiosApiClient\n  implements ApiClient<MoyasarClientTypes<T>>\n{\n  public readonly webhook: WebhookService<MoyasarClientTypes<T>>;\n  public readonly invoice: InvoiceService<MoyasarClientTypes<T>>;\n  public readonly payment: PaymentService<MoyasarClientTypes<T>>;\n  public readonly metadataValidator: MetadataValidator<T>;\n\n  constructor(options: MoyasarClientOptions<T>) {\n    super(options.apiKey, options);\n    if (options.apiKey.length < 3)\n      throw new Error(`apiKey is required!, got ${options.apiKey}`);\n\n    this.metadataValidator = options.metadataValidator ?? this.defaultParser;\n\n    // Initialize feature services\n    this.webhook = new WebhookService({ apiClient: this });\n    this.invoice = new InvoiceService({ apiClient: this });\n    this.payment = new PaymentService({ apiClient: this });\n  }\n\n  public readonly defaultParser: MetadataValidator<T> = {\n    parse: payload => payload as T,\n  };\n\n  /**\n   * Test the API connection\n   */\n  async ping(): Promise<{ status: \"ok\"; timestamp: number }> {\n    try {\n      await this.webhook.availableEvents();\n      return {\n        status: \"ok\",\n        timestamp: Date.now(),\n      };\n    } catch (error) {\n      throw error;\n    }\n  }\n\n  /**\n   * Get client information\n   */\n  getClientInfo(): {\n    baseUrl: string;\n    userAgent: string;\n    version: string;\n  } {\n    return {\n      baseUrl: this.baseUrl,\n      userAgent: \"Moyasar-SDK/1.0.0\",\n      version: \"1.0.0\",\n    };\n  }\n}\n"],"names":["z","TypedEmitter"],"mappings":"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AAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,E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"}