{"version":3,"sources":["../../src/index.ts","../../src/provider/StartPayProvider.tsx","../../src/core/errors.ts","../../src/core/normalizeResponse.ts","../../src/adapters/customGatewayAdapter.ts","../../src/adapters/iframeAdapter.ts","../../src/adapters/popupAdapter.ts","../../src/adapters/redirectAdapter.ts","../../src/utils/logger.ts","../../src/utils/buildUrl.ts","../../src/core/constants.ts","../../src/utils/timeout.ts","../../src/utils/request.ts","../../src/core/createPaymentSession.ts","../../src/core/events.ts","../../src/core/paymentStatus.ts","../../src/core/validators.ts","../../src/core/verifyPayment.ts","../../src/core/StartPayClient.ts","../../src/provider/StartPayContext.ts","../../src/components/StartPayButton.tsx","../../src/hooks/useStartPay.ts"],"sourcesContent":["export { StartPayProvider } from \"./provider/StartPayProvider\";\nexport { StartPayButton } from \"./components/StartPayButton\";\nexport { useStartPay } from \"./hooks/useStartPay\";\nexport { createStartPayClient } from \"./core/StartPayClient\";\nexport { createPaymentSession } from \"./core/createPaymentSession\";\nexport { verifyPayment } from \"./core/verifyPayment\";\nexport { getPaymentStatus, cancelPayment } from \"./core/paymentStatus\";\nexport { normalizeResponse, normalizeError } from \"./core/normalizeResponse\";\nexport { StartPayError } from \"./core/errors\";\n\nexport type { StartPayConfig, StartPayEnvironment, StartPayMode, StartPayEndpoints } from \"./types/config\";\nexport type { StartPayCustomer } from \"./types/customer\";\nexport type { StartPaymentInput, StartPaymentRequest, PaymentSession, PaymentStatusInput, VerifyPaymentInput } from \"./types/payment\";\nexport type {\n  StartPayStatus,\n  StartPayResponse,\n  StartPaySuccessResponse,\n  StartPayFailureResponse,\n  StartPayPendingResponse,\n  StartPayCancelResponse,\n  StartPayErrorResponse\n} from \"./types/response\";\nexport type { StartPayEventMap, StartPayEventName, StartPayEventHandler } from \"./types/events\";\nexport type {\n  StartPayButtonCallback,\n  StartPayButtonClickHandler,\n  StartPayButtonProps,\n  StartPayButtonRenderProps\n} from \"./components/StartPayButton\";\nexport type { StartPayProviderProps } from \"./provider/StartPayProvider\";\n","import { useMemo } from \"react\";\nimport { createStartPayClient } from \"../core/StartPayClient\";\nimport type { StartPayConfig } from \"../types/config\";\nimport { StartPayContext } from \"./StartPayContext\";\n\nexport type StartPayProviderProps = {\n  config: StartPayConfig;\n  children: React.ReactNode;\n};\n\nexport const StartPayProvider = ({ config, children }: StartPayProviderProps) => {\n  const client = useMemo(() => createStartPayClient(config), [config]);\n  const value = useMemo(() => ({ client }), [client]);\n\n  return <StartPayContext.Provider value={value}>{children}</StartPayContext.Provider>;\n};\n","export class StartPayError extends Error {\n  code: string;\n  details?: unknown;\n\n  constructor(message: string, code = \"SDK_ERROR\", details?: unknown) {\n    super(message);\n    this.name = \"StartPayError\";\n    this.code = code;\n    this.details = details;\n  }\n}\n\nexport const toStartPayError = (error: unknown, fallback = \"Something went wrong while starting payment\") => {\n  if (error instanceof StartPayError) return error;\n  if (error instanceof Error) return new StartPayError(error.message || fallback, \"SDK_ERROR\", error);\n  return new StartPayError(fallback, \"SDK_ERROR\", error);\n};\n","import type { StartPaymentInput } from \"../types/payment\";\nimport type { StartPayResponse, StartPayStatus } from \"../types/response\";\nimport { StartPayError } from \"./errors\";\n\ntype NormalizeOptions = {\n  status: StartPayStatus;\n  input?: Pick<StartPaymentInput, \"amount\" | \"currency\" | \"orderId\" | \"metadata\">;\n  rawResponse?: unknown;\n  message?: string;\n  errorCode?: string;\n};\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n  value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n\nconst readString = (source: Record<string, unknown>, keys: string[]) => {\n  for (const key of keys) {\n    const value = source[key];\n    if (typeof value === \"string\" && value) return value;\n  }\n  return undefined;\n};\n\nexport const normalizeResponse = ({ status, input, rawResponse, message, errorCode }: NormalizeOptions): StartPayResponse => {\n  const raw = asRecord(rawResponse);\n  const orderId = input?.orderId ?? readString(raw, [\"orderId\", \"order_id\"]) ?? \"\";\n  const paymentId = readString(raw, [\"paymentId\", \"payment_id\"]) ?? null;\n  const transactionId = readString(raw, [\"transactionId\", \"transaction_id\", \"txnId\"]) ?? null;\n  const amount = typeof raw.amount === \"number\" ? raw.amount : input?.amount;\n  const currency = typeof raw.currency === \"string\" ? raw.currency : input?.currency;\n  const gateway = typeof raw.gateway === \"string\" ? raw.gateway : \"custom\";\n  const metadata = (asRecord(raw.metadata) ?? input?.metadata) as Record<string, unknown>;\n  const timestamp = new Date().toISOString();\n\n  if (status === \"success\") {\n    return {\n      status,\n      success: true,\n      paymentId: paymentId ?? \"\",\n      orderId,\n      transactionId,\n      amount,\n      currency,\n      gateway,\n      message: message ?? \"Payment completed successfully\",\n      rawResponse,\n      metadata,\n      timestamp\n    };\n  }\n\n  if (status === \"cancelled\") {\n    return {\n      status,\n      success: false,\n      paymentId: null,\n      orderId,\n      transactionId: null,\n      amount,\n      currency,\n      gateway,\n      errorCode: \"PAYMENT_CANCELLED\",\n      message: message ?? \"Payment cancelled by user\",\n      rawResponse,\n      metadata,\n      timestamp\n    };\n  }\n\n  if (status === \"error\") {\n    return {\n      status,\n      success: false,\n      orderId,\n      errorCode: errorCode ?? \"SDK_ERROR\",\n      message: message ?? \"Something went wrong while starting payment\",\n      details: rawResponse,\n      timestamp\n    };\n  }\n\n  if (status === \"pending\") {\n    return {\n      status,\n      success: false,\n      paymentId,\n      orderId,\n      transactionId,\n      amount,\n      currency,\n      gateway,\n      message: message ?? \"Payment is pending\",\n      rawResponse,\n      metadata,\n      timestamp\n    };\n  }\n\n  return {\n    status: \"failed\",\n    success: false,\n    paymentId,\n    orderId,\n    transactionId,\n    amount,\n    currency,\n    gateway,\n    errorCode: errorCode ?? \"PAYMENT_FAILED\",\n    message: message ?? \"Payment failed\",\n    rawResponse,\n    metadata,\n    timestamp\n  };\n};\n\nexport const normalizeError = (error: unknown, orderId?: string): StartPayResponse => {\n  const startPayError = error instanceof StartPayError ? error : new StartPayError(\"Something went wrong while starting payment\", \"SDK_ERROR\", error);\n  return {\n    status: \"error\",\n    success: false,\n    orderId,\n    errorCode: startPayError.code,\n    message: startPayError.message,\n    details: startPayError.details,\n    timestamp: new Date().toISOString()\n  };\n};\n","import type { PaymentSession, StartPaymentInput } from \"../types/payment\";\nimport type { StartPayResponse } from \"../types/response\";\nimport { normalizeResponse } from \"../core/normalizeResponse\";\n\nexport type PaymentAdapter = (session: PaymentSession, input: StartPaymentInput) => Promise<StartPayResponse>;\n\nconst inferStatus = (raw: Record<string, unknown>) => {\n  const status = String(raw.status ?? raw.paymentStatus ?? \"\").toLowerCase();\n  if (status === \"success\" || status === \"paid\" || status === \"completed\") return \"success\";\n  if (status === \"failed\" || status === \"failure\") return \"failed\";\n  if (status === \"cancelled\" || status === \"canceled\") return \"cancelled\";\n  return \"pending\";\n};\n\nexport const customGatewayAdapter: PaymentAdapter = async (session, input) => {\n  const raw = {\n    ...(typeof session.rawResponse === \"object\" && session.rawResponse ? session.rawResponse : {}),\n    paymentId: session.paymentId,\n    gateway: session.gateway,\n    orderId: input.orderId\n  };\n\n  return normalizeResponse({\n    status: inferStatus(raw) as \"success\" | \"failed\" | \"pending\" | \"cancelled\",\n    input,\n    rawResponse: raw\n  });\n};\n","import type { PaymentAdapter } from \"./customGatewayAdapter\";\nimport { normalizeResponse } from \"../core/normalizeResponse\";\n\nexport const iframeAdapter: PaymentAdapter = async (session, input) => {\n  const url = session.checkoutUrl ?? session.redirectUrl;\n\n  if (!url) {\n    return normalizeResponse({\n      status: \"pending\",\n      input,\n      rawResponse: session,\n      message: \"Payment session created\"\n    });\n  }\n\n  return normalizeResponse({\n    status: \"pending\",\n    input,\n    rawResponse: { ...session, iframeUrl: url },\n    message: \"Payment iframe session is ready\"\n  });\n};\n","import type { PaymentAdapter } from \"./customGatewayAdapter\";\nimport { normalizeResponse } from \"../core/normalizeResponse\";\n\nexport const popupAdapter: PaymentAdapter = async (session, input) => {\n  const url = session.checkoutUrl ?? session.redirectUrl;\n\n  if (!url) {\n    return normalizeResponse({\n      status: \"pending\",\n      input,\n      rawResponse: session,\n      message: \"Payment session created\"\n    });\n  }\n\n  const popup = window.open(url, \"startbutton-payment-gateway\", \"width=480,height=720,noopener,noreferrer\");\n  if (!popup) {\n    return normalizeResponse({\n      status: \"failed\",\n      input,\n      rawResponse: session,\n      errorCode: \"POPUP_BLOCKED\",\n      message: \"Payment popup was blocked by the browser\"\n    });\n  }\n\n  return normalizeResponse({\n    status: \"pending\",\n    input,\n    rawResponse: session,\n    message: \"Payment popup opened\"\n  });\n};\n","import type { PaymentAdapter } from \"./customGatewayAdapter\";\nimport { normalizeResponse } from \"../core/normalizeResponse\";\n\nexport const redirectAdapter: PaymentAdapter = async (session, input) => {\n  const url = session.redirectUrl ?? session.checkoutUrl;\n\n  if (!url) {\n    return normalizeResponse({\n      status: \"pending\",\n      input,\n      rawResponse: session,\n      message: \"Payment session created\"\n    });\n  }\n\n  window.location.assign(url);\n  return normalizeResponse({\n    status: \"pending\",\n    input,\n    rawResponse: session,\n    message: \"Payment redirected\"\n  });\n};\n","export type Logger = {\n  debug: (...args: unknown[]) => void;\n  warn: (...args: unknown[]) => void;\n};\n\nexport const createLogger = (enabled?: boolean): Logger => ({\n  debug: (...args) => {\n    if (enabled) console.debug(\"[StartButton-Payment-Gateway]\", ...args);\n  },\n  warn: (...args) => {\n    if (enabled) console.warn(\"[StartButton-Payment-Gateway]\", ...args);\n  }\n});\n","export const buildUrl = (baseUrl: string, path: string, query?: Record<string, string | undefined>) => {\n  const url = new URL(path.replace(/^\\/+/, \"\"), baseUrl.endsWith(\"/\") ? baseUrl : `${baseUrl}/`);\n\n  if (query) {\n    Object.entries(query).forEach(([key, value]) => {\n      if (value !== undefined && value !== \"\") url.searchParams.set(key, value);\n    });\n  }\n\n  return url.toString();\n};\n","export const DEFAULT_TIMEOUT = 30000;\nexport const DEFAULT_POLL_INTERVAL = 2000;\nexport const DEFAULT_MAX_POLL_ATTEMPTS = 30;\n\nexport const DEFAULT_ENDPOINTS = {\n  createSession: \"/payments/session\",\n  verifyPayment: \"/payments/verify\",\n  paymentStatus: \"/payments/status\",\n  cancelPayment: \"/payments/cancel\"\n} as const;\n","export const createTimeoutSignal = (timeoutMs: number, externalSignal?: AbortSignal) => {\n  const controller = new AbortController();\n  const timeoutId = window.setTimeout(() => controller.abort(\"timeout\"), timeoutMs);\n\n  const abortFromExternal = () => controller.abort(externalSignal?.reason);\n  if (externalSignal) {\n    if (externalSignal.aborted) abortFromExternal();\n    else externalSignal.addEventListener(\"abort\", abortFromExternal, { once: true });\n  }\n\n  return {\n    signal: controller.signal,\n    clear: () => {\n      window.clearTimeout(timeoutId);\n      externalSignal?.removeEventListener(\"abort\", abortFromExternal);\n    }\n  };\n};\n","import { DEFAULT_TIMEOUT } from \"../core/constants\";\nimport { StartPayError } from \"../core/errors\";\nimport { createTimeoutSignal } from \"./timeout\";\n\nexport type JsonRequestOptions = {\n  method?: \"GET\" | \"POST\";\n  body?: unknown;\n  headers?: Record<string, string>;\n  timeout?: number;\n  signal?: AbortSignal;\n};\n\nexport const requestJson = async <T>(url: string, options: JsonRequestOptions = {}): Promise<T> => {\n  const timeout = createTimeoutSignal(options.timeout ?? DEFAULT_TIMEOUT, options.signal);\n\n  try {\n    const response = await fetch(url, {\n      method: options.method ?? \"POST\",\n      headers: {\n        \"content-type\": \"application/json\",\n        ...options.headers\n      },\n      body: options.body === undefined ? undefined : JSON.stringify(options.body),\n      signal: timeout.signal\n    });\n\n    const text = await response.text();\n    const data = text ? JSON.parse(text) : undefined;\n\n    if (!response.ok) {\n      throw new StartPayError(\n        data?.message ?? `Request failed with status ${response.status}`,\n        data?.errorCode ?? \"REQUEST_FAILED\",\n        data\n      );\n    }\n\n    return data as T;\n  } catch (error) {\n    if (timeout.signal.aborted) {\n      throw new StartPayError(\"Payment request timed out\", \"REQUEST_TIMEOUT\", error);\n    }\n    throw error;\n  } finally {\n    timeout.clear();\n  }\n};\n","import type { StartPayConfig } from \"../types/config\";\nimport type { PaymentSession, StartPaymentInput } from \"../types/payment\";\nimport { buildUrl } from \"../utils/buildUrl\";\nimport { requestJson } from \"../utils/request\";\nimport { DEFAULT_ENDPOINTS } from \"./constants\";\n\nexport const createPaymentSession = (config: StartPayConfig, input: StartPaymentInput, signal?: AbortSignal) => {\n  const endpoint = config.endpoints?.createSession ?? DEFAULT_ENDPOINTS.createSession;\n\n  // The backend endpoint must create the order/session with secret gateway credentials.\n  return requestJson<PaymentSession>(buildUrl(config.apiBaseUrl, endpoint), {\n    body: {\n      ...input,\n      publicKey: config.publicKey,\n      environment: config.environment\n    },\n    headers: config.headers,\n    timeout: input.timeout ?? config.timeout,\n    signal\n  });\n};\n","import type { StartPayEventHandler, StartPayEventMap, StartPayEventName } from \"../types/events\";\n\nexport const createEventEmitter = () => {\n  const listeners = new Map<StartPayEventName, Set<StartPayEventHandler>>();\n\n  return {\n    on<T extends StartPayEventName>(event: T, handler: StartPayEventHandler<T>) {\n      const eventListeners = listeners.get(event) ?? new Set();\n      eventListeners.add(handler as StartPayEventHandler);\n      listeners.set(event, eventListeners);\n      return () => this.off(event, handler);\n    },\n    off<T extends StartPayEventName>(event: T, handler: StartPayEventHandler<T>) {\n      listeners.get(event)?.delete(handler as StartPayEventHandler);\n    },\n    emit<T extends StartPayEventName>(event: T, payload: StartPayEventMap[T]) {\n      listeners.get(event)?.forEach((handler) => handler(payload));\n    },\n    clear() {\n      listeners.clear();\n    }\n  };\n};\n","import type { StartPayConfig } from \"../types/config\";\nimport type { PaymentStatusInput } from \"../types/payment\";\nimport type { StartPayResponse } from \"../types/response\";\nimport { buildUrl } from \"../utils/buildUrl\";\nimport { requestJson } from \"../utils/request\";\nimport { DEFAULT_ENDPOINTS } from \"./constants\";\n\nexport const getPaymentStatus = (config: StartPayConfig, input: PaymentStatusInput) => {\n  const endpoint = config.endpoints?.paymentStatus ?? DEFAULT_ENDPOINTS.paymentStatus;\n\n  return requestJson<StartPayResponse>(\n    buildUrl(config.apiBaseUrl, endpoint, {\n      orderId: input.orderId,\n      paymentId: input.paymentId ?? undefined,\n      paymentSessionId: input.paymentSessionId\n    }),\n    {\n      method: \"GET\",\n      headers: config.headers,\n      timeout: config.timeout,\n      signal: input.signal\n    }\n  );\n};\n\nexport const cancelPayment = (config: StartPayConfig, input: PaymentStatusInput) => {\n  const endpoint = config.endpoints?.cancelPayment ?? DEFAULT_ENDPOINTS.cancelPayment;\n\n  return requestJson<StartPayResponse>(buildUrl(config.apiBaseUrl, endpoint), {\n    body: input,\n    headers: config.headers,\n    timeout: config.timeout,\n    signal: input.signal\n  });\n};\n","import type { StartPayConfig } from \"../types/config\";\nimport type { StartPaymentInput } from \"../types/payment\";\nimport { StartPayError } from \"./errors\";\n\nconst emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst phoneRegex = /^[+()0-9\\-\\s]{7,20}$/;\n\nexport const validateConfig = (config: StartPayConfig) => {\n  const unsafe = config as StartPayConfig & { secretKey?: string };\n\n  if (unsafe.secretKey) {\n    throw new StartPayError(\n      \"Do not pass secretKey to StartButton-Payment-Gateway frontend SDK. Keep gateway secrets on your backend only.\",\n      \"SECRET_KEY_NOT_ALLOWED\"\n    );\n  }\n  if (!config.publicKey?.trim()) throw new StartPayError(\"publicKey is required\", \"INVALID_CONFIG\");\n  if (!config.apiBaseUrl?.trim()) throw new StartPayError(\"apiBaseUrl is required\", \"INVALID_CONFIG\");\n  if (config.environment !== \"sandbox\" && config.environment !== \"production\") {\n    throw new StartPayError(\"environment must be either sandbox or production\", \"INVALID_CONFIG\");\n  }\n};\n\nexport const validatePaymentInput = (input: StartPaymentInput) => {\n  if (!Number.isFinite(input.amount) || input.amount <= 0) {\n    throw new StartPayError(\"amount must be greater than 0\", \"INVALID_PAYMENT_INPUT\");\n  }\n  if (!input.currency?.trim()) throw new StartPayError(\"currency is required\", \"INVALID_PAYMENT_INPUT\");\n  if (!input.orderId?.trim()) throw new StartPayError(\"orderId is required\", \"INVALID_PAYMENT_INPUT\");\n  if (input.customer?.email && !emailRegex.test(input.customer.email)) {\n    throw new StartPayError(\"customer.email must be a valid email address\", \"INVALID_PAYMENT_INPUT\");\n  }\n  if (input.customer?.phone && !phoneRegex.test(input.customer.phone)) {\n    throw new StartPayError(\"customer.phone must be a valid phone number\", \"INVALID_PAYMENT_INPUT\");\n  }\n};\n","import type { StartPayConfig } from \"../types/config\";\nimport type { VerifyPaymentInput } from \"../types/payment\";\nimport type { StartPayResponse } from \"../types/response\";\nimport { buildUrl } from \"../utils/buildUrl\";\nimport { requestJson } from \"../utils/request\";\nimport { DEFAULT_ENDPOINTS } from \"./constants\";\n\nexport const verifyPayment = (config: StartPayConfig, input: VerifyPaymentInput) => {\n  const endpoint = config.endpoints?.verifyPayment ?? DEFAULT_ENDPOINTS.verifyPayment;\n\n  // Final verification belongs on the backend so secret keys never enter the browser.\n  return requestJson<StartPayResponse>(buildUrl(config.apiBaseUrl, endpoint), {\n    body: input,\n    headers: config.headers,\n    timeout: config.timeout,\n    signal: input.signal\n  });\n};\n","import { customGatewayAdapter } from \"../adapters/customGatewayAdapter\";\nimport { iframeAdapter } from \"../adapters/iframeAdapter\";\nimport { popupAdapter } from \"../adapters/popupAdapter\";\nimport { redirectAdapter } from \"../adapters/redirectAdapter\";\nimport type { StartPayConfig } from \"../types/config\";\nimport type { PaymentStatusInput, StartPaymentRequest, VerifyPaymentInput } from \"../types/payment\";\nimport type { StartPayEventHandler, StartPayEventName } from \"../types/events\";\nimport type { StartPayResponse } from \"../types/response\";\nimport { createLogger } from \"../utils/logger\";\nimport { createPaymentSession } from \"./createPaymentSession\";\nimport { createEventEmitter } from \"./events\";\nimport { normalizeError } from \"./normalizeResponse\";\nimport { cancelPayment as cancelPaymentRequest, getPaymentStatus as getPaymentStatusRequest } from \"./paymentStatus\";\nimport { validateConfig, validatePaymentInput } from \"./validators\";\nimport { verifyPayment as verifyPaymentRequest } from \"./verifyPayment\";\n\nconst adapters = {\n  custom: customGatewayAdapter,\n  iframe: iframeAdapter,\n  popup: popupAdapter,\n  redirect: redirectAdapter\n} as const;\n\nexport type StartPayClient = ReturnType<typeof createStartPayClient>;\n\nexport const createStartPayClient = (initialConfig: StartPayConfig) => {\n  let config = { mode: \"popup\" as const, ...initialConfig };\n  validateConfig(config);\n\n  const emitter = createEventEmitter();\n  let logger = createLogger(config.debug);\n\n  const emitResult = (response: StartPayResponse) => {\n    if (response.status === \"success\") emitter.emit(\"payment:success\", response);\n    if (response.status === \"failed\") emitter.emit(\"payment:failed\", response);\n    if (response.status === \"pending\") emitter.emit(\"payment:pending\", response);\n    if (response.status === \"cancelled\") emitter.emit(\"payment:cancelled\", response);\n    if (response.status === \"error\") emitter.emit(\"payment:error\", response);\n    return response;\n  };\n\n  return {\n    async startPayment(input: StartPaymentRequest) {\n      try {\n        validatePaymentInput(input);\n        emitter.emit(\"payment:start\", input);\n        logger.debug(\"Creating payment session\", input.orderId);\n\n        const session = await createPaymentSession(config, input, input.signal);\n        emitter.emit(\"payment:session\", session);\n\n        const adapter = adapters[config.mode ?? \"popup\"];\n        const response = await adapter(session, input);\n        return emitResult(response);\n      } catch (error) {\n        return emitResult(normalizeError(error, input.orderId));\n      }\n    },\n    verifyPayment(input: VerifyPaymentInput) {\n      return verifyPaymentRequest(config, input);\n    },\n    getPaymentStatus(input: PaymentStatusInput) {\n      return getPaymentStatusRequest(config, input);\n    },\n    cancelPayment(input: PaymentStatusInput) {\n      return cancelPaymentRequest(config, input);\n    },\n    on<T extends StartPayEventName>(event: T, handler: StartPayEventHandler<T>) {\n      return emitter.on(event, handler);\n    },\n    off<T extends StartPayEventName>(event: T, handler: StartPayEventHandler<T>) {\n      emitter.off(event, handler);\n    },\n    setConfig(nextConfig: Partial<StartPayConfig>) {\n      config = { ...config, ...nextConfig };\n      validateConfig(config);\n      logger = createLogger(config.debug);\n    }\n  };\n};\n","import { createContext } from \"react\";\nimport type { StartPayClient } from \"../core/StartPayClient\";\n\nexport type StartPayContextValue = {\n  client: StartPayClient;\n};\n\nexport const StartPayContext = createContext<StartPayContextValue | null>(null);\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useStartPay } from \"../hooks/useStartPay\";\nimport { StartPayError } from \"../core/errors\";\nimport { normalizeError } from \"../core/normalizeResponse\";\nimport type { StartPaymentRequest } from \"../types/payment\";\nimport type { StartPayResponse } from \"../types/response\";\nimport type { ButtonHTMLAttributes, MouseEvent, ReactNode } from \"react\";\n\nexport type StartPayButtonCallback = (response: StartPayResponse) => void;\nexport type StartPayButtonClickHandler = (\n  event: MouseEvent<HTMLButtonElement>,\n  controls: StartPayButtonRenderProps\n) => void | Promise<void>;\n\nexport type StartPayButtonRenderProps = {\n  loading: boolean;\n  disabled: boolean;\n  lastStatus: StartPayResponse[\"status\"] | null;\n  start: () => Promise<StartPayResponse>;\n  launchPaymentFlow: () => Promise<StartPayResponse>;\n};\n\nexport type StartPayButtonProps = StartPaymentRequest &\n  Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\" | \"disabled\" | \"onClick\"> & {\n  disabled?: boolean;\n  autoStart?: boolean;\n  loadingText?: string;\n  successText?: string;\n  failureText?: string;\n  children?: ReactNode | ((props: StartPayButtonRenderProps) => ReactNode);\n  onClick?: StartPayButtonClickHandler;\n  onPaymentAuthorized?: StartPayButtonCallback;\n  onPaymentDeclined?: StartPayButtonCallback;\n  onPaymentPendingReview?: StartPayButtonCallback;\n  onPaymentAborted?: StartPayButtonCallback;\n  onPaymentException?: StartPayButtonCallback;\n  onPaymentSettled?: StartPayButtonCallback;\n  onSuccess?: StartPayButtonCallback;\n  onFailure?: StartPayButtonCallback;\n  onPending?: StartPayButtonCallback;\n  onCancel?: StartPayButtonCallback;\n  onError?: StartPayButtonCallback;\n};\n\nexport const StartPayButton = ({\n  amount,\n  currency,\n  orderId,\n  customer,\n  metadata,\n  callbackUrl,\n  returnUrl,\n  paymentMethods,\n  timeout,\n  signal,\n  disabled = false,\n  autoStart = true,\n  loadingText = \"Processing...\",\n  successText,\n  failureText,\n  children = \"Start Payment\",\n  onClick,\n  onPaymentAuthorized,\n  onPaymentDeclined,\n  onPaymentPendingReview,\n  onPaymentAborted,\n  onPaymentException,\n  onPaymentSettled,\n  onSuccess,\n  onFailure,\n  onPending,\n  onCancel,\n  onError,\n  ...buttonProps\n}: StartPayButtonProps) => {\n  const { startPayment, loading } = useStartPay();\n  const [lastStatus, setLastStatus] = useState<StartPayResponse[\"status\"] | null>(null);\n\n  const isDisabled = disabled || loading;\n  const input = useMemo(\n    () => ({\n      amount,\n      currency,\n      orderId,\n      customer,\n      metadata,\n      callbackUrl,\n      returnUrl,\n      paymentMethods,\n      timeout,\n      signal\n    }),\n    [amount, callbackUrl, currency, customer, metadata, orderId, paymentMethods, returnUrl, signal, timeout]\n  );\n\n  useEffect(() => {\n    setLastStatus(null);\n  }, [orderId]);\n\n  const routeResponse = useCallback(\n    (response: StartPayResponse) => {\n      setLastStatus(response.status);\n      onPaymentSettled?.(response);\n\n      if (response.status === \"success\") {\n        onPaymentAuthorized?.(response);\n        onSuccess?.(response);\n      } else if (response.status === \"failed\") {\n        onPaymentDeclined?.(response);\n        onFailure?.(response);\n      } else if (response.status === \"pending\") {\n        onPaymentPendingReview?.(response);\n        onPending?.(response);\n      } else if (response.status === \"cancelled\") {\n        onPaymentAborted?.(response);\n        onCancel?.(response);\n      } else {\n        onPaymentException?.(response);\n        onError?.(response);\n      }\n\n      return response;\n    },\n    [\n      onCancel,\n      onError,\n      onFailure,\n      onPaymentAborted,\n      onPaymentAuthorized,\n      onPaymentDeclined,\n      onPaymentException,\n      onPaymentPendingReview,\n      onPaymentSettled,\n      onPending,\n      onSuccess\n    ]\n  );\n\n  const launchPaymentFlow = useCallback(async () => {\n    if (isDisabled) {\n      return routeResponse(\n        normalizeError(\n          new StartPayError(\n            loading ? \"Payment flow is already running\" : \"Payment button is disabled\",\n            loading ? \"PAYMENT_FLOW_BUSY\" : \"PAYMENT_BUTTON_DISABLED\"\n          ),\n          orderId\n        )\n      );\n    }\n\n    try {\n      return routeResponse(await startPayment(input));\n    } catch (error) {\n      return routeResponse(normalizeError(error, orderId));\n    }\n  }, [input, isDisabled, loading, orderId, routeResponse, startPayment]);\n\n  const start = launchPaymentFlow;\n  const renderProps = useMemo(\n    () => ({ loading, disabled: isDisabled, lastStatus, start, launchPaymentFlow }),\n    [isDisabled, lastStatus, launchPaymentFlow, loading, start]\n  );\n\n  const handleClick = useCallback(\n    async (event: MouseEvent<HTMLButtonElement>) => {\n      await onClick?.(event, renderProps);\n      if (autoStart && !event.defaultPrevented) {\n        await launchPaymentFlow();\n      }\n    },\n    [autoStart, launchPaymentFlow, onClick, renderProps]\n  );\n\n  if (typeof children === \"function\") {\n    return <>{children(renderProps)}</>;\n  }\n\n  let label = children;\n  if (loading) label = loadingText;\n  else if (lastStatus === \"success\" && successText) label = successText;\n  else if ((lastStatus === \"failed\" || lastStatus === \"error\") && failureText) label = failureText;\n\n  return (\n    <button {...buttonProps} type={buttonProps.type ?? \"button\"} disabled={isDisabled} onClick={handleClick} aria-busy={loading}>\n      <span aria-live=\"polite\">{label}</span>\n    </button>\n  );\n};\n","import { useCallback, useContext, useState } from \"react\";\nimport { StartPayError } from \"../core/errors\";\nimport { StartPayContext } from \"../provider/StartPayContext\";\nimport type { PaymentStatusInput, StartPaymentRequest, VerifyPaymentInput } from \"../types/payment\";\n\nexport const useStartPay = () => {\n  const context = useContext(StartPayContext);\n  const [loading, setLoading] = useState(false);\n\n  if (!context) {\n    throw new StartPayError(\"useStartPay must be used inside StartPayProvider\", \"PROVIDER_MISSING\");\n  }\n\n  const { client } = context;\n\n  const startPayment = useCallback(\n    async (input: StartPaymentRequest) => {\n      setLoading(true);\n      try {\n        return await client.startPayment(input);\n      } finally {\n        setLoading(false);\n      }\n    },\n    [client]\n  );\n\n  return {\n    startPayment,\n    verifyPayment: useCallback((input: VerifyPaymentInput) => client.verifyPayment(input), [client]),\n    getPaymentStatus: useCallback((input: PaymentStatusInput) => client.getPaymentStatus(input), [client]),\n    cancelPayment: useCallback((input: PaymentStatusInput) => client.cancelPayment(input), [client]),\n    on: client.on,\n    off: client.off,\n    loading\n  };\n};\n"],"mappings":"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","names":["index_exports","__export","StartPayButton","StartPayError","StartPayProvider","cancelPayment","createPaymentSession","createStartPayClient","getPaymentStatus","normalizeError","normalizeResponse","useStartPay","verifyPayment","__toCommonJS","import_react","StartPayError","message","code","details","asRecord","value","readString","source","keys","key","normalizeResponse","status","input","rawResponse","message","errorCode","raw","orderId","paymentId","transactionId","amount","currency","gateway","metadata","timestamp","normalizeError","error","startPayError","StartPayError","inferStatus","raw","status","customGatewayAdapter","session","input","normalizeResponse","iframeAdapter","session","input","url","normalizeResponse","popupAdapter","session","input","url","normalizeResponse","redirectAdapter","session","input","url","normalizeResponse","createLogger","enabled","args","buildUrl","baseUrl","path","query","url","key","value","DEFAULT_ENDPOINTS","createTimeoutSignal","timeoutMs","externalSignal","controller","timeoutId","abortFromExternal","requestJson","url","options","timeout","createTimeoutSignal","response","text","data","StartPayError","error","createPaymentSession","config","input","signal","endpoint","DEFAULT_ENDPOINTS","requestJson","buildUrl","createEventEmitter","listeners","event","handler","eventListeners","payload","getPaymentStatus","config","input","endpoint","DEFAULT_ENDPOINTS","requestJson","buildUrl","cancelPayment","emailRegex","phoneRegex","validateConfig","config","StartPayError","validatePaymentInput","input","verifyPayment","config","input","endpoint","DEFAULT_ENDPOINTS","requestJson","buildUrl","adapters","customGatewayAdapter","iframeAdapter","popupAdapter","redirectAdapter","createStartPayClient","initialConfig","config","validateConfig","emitter","createEventEmitter","logger","createLogger","emitResult","response","input","validatePaymentInput","session","createPaymentSession","adapter","error","normalizeError","verifyPayment","getPaymentStatus","cancelPayment","event","handler","nextConfig","import_react","StartPayContext","import_jsx_runtime","StartPayProvider","config","children","client","createStartPayClient","value","StartPayContext","import_react","import_react","useStartPay","context","StartPayContext","loading","setLoading","StartPayError","client","input","import_jsx_runtime","StartPayButton","amount","currency","orderId","customer","metadata","callbackUrl","returnUrl","paymentMethods","timeout","signal","disabled","autoStart","loadingText","successText","failureText","children","onClick","onPaymentAuthorized","onPaymentDeclined","onPaymentPendingReview","onPaymentAborted","onPaymentException","onPaymentSettled","onSuccess","onFailure","onPending","onCancel","onError","buttonProps","startPayment","loading","useStartPay","lastStatus","setLastStatus","isDisabled","input","routeResponse","response","launchPaymentFlow","normalizeError","StartPayError","error","start","renderProps","handleClick","event","label"]}