{"version":3,"file":"checkout.cjs","sources":["../../../../src/auth/checkout.ts"],"sourcesContent":["import type {\n  CheckoutInitializeRequest,\n  CheckoutInitializeResponse,\n  CheckoutStatusResponse,\n  CheckoutPreviewResponse,\n  CheckoutResult,\n  CheckoutRequest,\n} from \"./types\";\nimport { authRequest, sleep } from \"./utils\";\nimport { loadKeypair } from \"./loadKeypair\";\nimport { getAddress } from \"./getAddress\";\nimport { checkSolBalance, checkUsdcBalance } from \"./checkBalances\";\nimport { payWithMemo } from \"./payWithMemo\";\nimport { listProjects } from \"./listProjects\";\nimport { getProject } from \"./getProject\";\nimport {\n  MIN_SOL_FOR_TX,\n  CHECKOUT_POLL_INTERVAL_MS,\n  CHECKOUT_POLL_TIMEOUT_MS,\n  PROJECT_POLL_INTERVAL_MS,\n  PROJECT_POLL_TIMEOUT_MS,\n  PLAN_TO_USAGE_PLAN,\n} from \"./constants\";\nimport { fetchOpenPayPriceIds } from \"./devPortalConfigs\";\n\nexport async function resolvePriceId(\n  jwt: string,\n  plan: string,\n  period: \"monthly\" | \"yearly\",\n  userAgent?: string\n): Promise<string> {\n  const usagePlan = PLAN_TO_USAGE_PLAN[plan.toLowerCase()];\n  if (!usagePlan) {\n    throw new Error(\n      `Unknown plan: ${plan}. Available: ${Object.keys(PLAN_TO_USAGE_PLAN).join(\", \")}`\n    );\n  }\n  const priceIds = await fetchOpenPayPriceIds(jwt, userAgent);\n  const periodKey = period === \"monthly\" ? \"Monthly\" : \"Yearly\";\n  const priceId = priceIds[periodKey]?.[usagePlan];\n  if (!priceId) {\n    const available = Object.keys(priceIds[periodKey] ?? {});\n    throw new Error(\n      `No priceId found for plan \"${plan}\" (${period}). ` +\n        (available.length === 0\n          ? \"The pricing configuration is empty — the backend may not be fully deployed yet.\"\n          : `Expected key \"${usagePlan}\" but available keys are: [${available.join(\", \")}]`)\n    );\n  }\n  return priceId;\n}\n\nexport async function initializeCheckout(\n  jwt: string,\n  request: CheckoutInitializeRequest,\n  userAgent?: string\n): Promise<CheckoutInitializeResponse> {\n  return authRequest<CheckoutInitializeResponse>(\n    \"/checkout/initialize\",\n    {\n      method: \"POST\",\n      headers: { Authorization: `Bearer ${jwt}` },\n      body: JSON.stringify(request),\n    },\n    userAgent\n  );\n}\n\nexport async function getCheckoutPreview(\n  jwt: string,\n  plan: string,\n  period: \"monthly\" | \"yearly\",\n  refId: string,\n  couponCode?: string,\n  userAgent?: string\n): Promise<CheckoutPreviewResponse> {\n  const priceId = await resolvePriceId(jwt, plan, period, userAgent);\n  const params = new URLSearchParams({ priceId, refId });\n  if (couponCode) params.set(\"couponCode\", couponCode);\n  return authRequest<CheckoutPreviewResponse>(\n    `/checkout/preview?${params.toString()}`,\n    {\n      method: \"GET\",\n      headers: { Authorization: `Bearer ${jwt}` },\n    },\n    userAgent\n  );\n}\n\nexport async function getPaymentIntent(\n  jwt: string,\n  paymentIntentId: string,\n  userAgent?: string\n): Promise<CheckoutInitializeResponse> {\n  return authRequest<CheckoutInitializeResponse>(\n    `/checkout/${paymentIntentId}`,\n    {\n      method: \"GET\",\n      headers: { Authorization: `Bearer ${jwt}` },\n    },\n    userAgent\n  );\n}\n\nexport async function getPaymentStatus(\n  jwt: string,\n  paymentIntentId: string,\n  userAgent?: string\n): Promise<CheckoutStatusResponse> {\n  return authRequest<CheckoutStatusResponse>(\n    `/checkout/${paymentIntentId}/status`,\n    {\n      method: \"GET\",\n      headers: { Authorization: `Bearer ${jwt}` },\n    },\n    userAgent\n  );\n}\n\nexport async function pollCheckoutCompletion(\n  jwt: string,\n  paymentIntentId: string,\n  userAgent?: string,\n  options?: { timeoutMs?: number; intervalMs?: number }\n): Promise<CheckoutStatusResponse> {\n  const timeoutMs = options?.timeoutMs ?? CHECKOUT_POLL_TIMEOUT_MS;\n  const intervalMs = options?.intervalMs ?? CHECKOUT_POLL_INTERVAL_MS;\n  const deadline = Date.now() + timeoutMs;\n\n  while (Date.now() < deadline) {\n    let status: CheckoutStatusResponse;\n    try {\n      status = await authRequest<CheckoutStatusResponse>(\n        `/checkout/${paymentIntentId}/status`,\n        {\n          method: \"GET\",\n          headers: { Authorization: `Bearer ${jwt}` },\n        },\n        userAgent\n      );\n    } catch (error) {\n      // HTTP 410 Gone — intent expired\n      if (error instanceof Error && error.message.includes(\"410\")) {\n        return {\n          status: \"expired\",\n          phase: \"expired\",\n          subscriptionActive: false,\n          readyToRedirect: false,\n          message: \"Payment intent expired\",\n        };\n      }\n      throw error;\n    }\n\n    if (status.readyToRedirect) {\n      return status;\n    }\n\n    if (status.phase === \"failed\" || status.phase === \"expired\") {\n      return status;\n    }\n\n    await sleep(intervalMs);\n  }\n\n  return {\n    status: \"pending\",\n    phase: \"confirming\",\n    subscriptionActive: false,\n    readyToRedirect: false,\n    message: \"Polling timed out\",\n  };\n}\n\nexport async function payPaymentIntent(\n  secretKey: Uint8Array,\n  intent: CheckoutInitializeResponse\n): Promise<string> {\n  // $0 intents are auto-completed by backend — no transaction needed\n  if (intent.amount === 0) {\n    return \"\";\n  }\n\n  const keypair = loadKeypair(secretKey);\n  const walletAddress = await getAddress(keypair);\n\n  const solBalance = await checkSolBalance(walletAddress);\n  if (solBalance < MIN_SOL_FOR_TX) {\n    throw new Error(\n      `Insufficient SOL for transaction fees. Have: ${Number(solBalance) / 1_000_000_000} SOL, need: ~0.001 SOL. Fund address: ${walletAddress}`\n    );\n  }\n\n  // Convert cents → USDC 6-decimal raw: 4900 cents × 10,000 = 49,000,000 raw = 49.000000 USDC\n  const amountRaw = BigInt(intent.amount) * 10_000n;\n\n  const usdcBalance = await checkUsdcBalance(walletAddress);\n  if (usdcBalance < amountRaw) {\n    throw new Error(\n      `Insufficient USDC. Have: ${Number(usdcBalance) / 1_000_000} USDC, need: ${intent.amount / 100} USDC. Fund address: ${walletAddress}`\n    );\n  }\n\n  // memo is intent.id\n  return payWithMemo(secretKey, intent.destinationWallet, amountRaw, intent.id);\n}\n\nexport async function executeCheckout(\n  secretKey: Uint8Array,\n  jwt: string,\n  request: CheckoutRequest,\n  userAgent?: string,\n  options?: { skipProjectPolling?: boolean }\n): Promise<CheckoutResult> {\n  // 1. Resolve priceId from plan+period, then initialize checkout\n  const priceId = await resolvePriceId(\n    jwt,\n    request.plan,\n    request.period,\n    userAgent\n  );\n  const intent = await initializeCheckout(\n    jwt,\n    {\n      priceId,\n      refId: request.refId,\n      email: request.email,\n      firstName: request.firstName,\n      lastName: request.lastName,\n      walletAddress: request.walletAddress,\n      couponCode: request.couponCode,\n    },\n    userAgent\n  );\n\n  // 2. Send payment (handles $0 case)\n  let txSignature: string | null = null;\n  try {\n    txSignature = (await payPaymentIntent(secretKey, intent)) || null;\n  } catch (error) {\n    return {\n      paymentIntentId: intent.id,\n      txSignature: null,\n      status: \"failed\",\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n\n  // 3. Poll for payment confirmation\n  const checkoutStatus = await pollCheckoutCompletion(\n    jwt,\n    intent.id,\n    userAgent\n  );\n\n  if (checkoutStatus.phase === \"failed\") {\n    return {\n      paymentIntentId: intent.id,\n      txSignature,\n      status: \"failed\",\n      error: checkoutStatus.message,\n    };\n  }\n\n  if (checkoutStatus.phase === \"expired\") {\n    return {\n      paymentIntentId: intent.id,\n      txSignature,\n      status: \"expired\",\n      error: checkoutStatus.message,\n    };\n  }\n\n  if (!checkoutStatus.readyToRedirect) {\n    return {\n      paymentIntentId: intent.id,\n      txSignature,\n      status: \"timeout\",\n    };\n  }\n\n  // 4. Optionally poll for project creation\n  if (!options?.skipProjectPolling) {\n    const projectDeadline = Date.now() + PROJECT_POLL_TIMEOUT_MS;\n    let projectId: string | undefined;\n    let apiKey: string | undefined;\n\n    while (Date.now() < projectDeadline) {\n      const projects = await listProjects(jwt, userAgent);\n      if (projects.length > 0) {\n        projectId = projects[0].id;\n        const details = await getProject(jwt, projectId, userAgent);\n        apiKey = details.apiKeys?.[0]?.keyId;\n        break;\n      }\n      await sleep(PROJECT_POLL_INTERVAL_MS);\n    }\n\n    return {\n      paymentIntentId: intent.id,\n      txSignature,\n      status: \"completed\",\n      projectId,\n      apiKey,\n    };\n  }\n\n  return {\n    paymentIntentId: intent.id,\n    txSignature,\n    status: \"completed\",\n  };\n}\n\nexport async function executeUpgrade(\n  secretKey: Uint8Array,\n  jwt: string,\n  plan: string,\n  period: \"monthly\" | \"yearly\",\n  projectId: string,\n  couponCode?: string,\n  userAgent?: string\n): Promise<CheckoutResult> {\n  const priceId = await resolvePriceId(jwt, plan, period, userAgent);\n  const intent = await initializeCheckout(\n    jwt,\n    { priceId, refId: projectId, couponCode },\n    userAgent\n  );\n\n  let txSignature: string | null = null;\n  try {\n    txSignature = (await payPaymentIntent(secretKey, intent)) || null;\n  } catch (error) {\n    return {\n      paymentIntentId: intent.id,\n      txSignature: null,\n      status: \"failed\",\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n\n  const status = await pollCheckoutCompletion(jwt, intent.id, userAgent);\n\n  if (status.phase === \"failed\") {\n    return {\n      paymentIntentId: intent.id,\n      txSignature,\n      status: \"failed\",\n      error: status.message,\n    };\n  }\n  if (status.phase === \"expired\") {\n    return {\n      paymentIntentId: intent.id,\n      txSignature,\n      status: \"expired\",\n      error: status.message,\n    };\n  }\n  if (!status.readyToRedirect) {\n    return { paymentIntentId: intent.id, txSignature, status: \"timeout\" };\n  }\n\n  return { paymentIntentId: intent.id, txSignature, status: \"completed\" };\n}\n\nexport async function executeRenewal(\n  secretKey: Uint8Array,\n  jwt: string,\n  paymentIntentId: string,\n  userAgent?: string\n): Promise<CheckoutResult> {\n  const intent = await getPaymentIntent(jwt, paymentIntentId, userAgent);\n\n  if (intent.status !== \"pending\") {\n    throw new Error(\n      `Payment intent is ${intent.status}, cannot pay. Only pending intents can be paid.`\n    );\n  }\n\n  let txSignature: string | null = null;\n  try {\n    txSignature = (await payPaymentIntent(secretKey, intent)) || null;\n  } catch (error) {\n    return {\n      paymentIntentId: intent.id,\n      txSignature: null,\n      status: \"failed\",\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n\n  const status = await pollCheckoutCompletion(jwt, intent.id, userAgent);\n\n  if (status.phase === \"failed\") {\n    return {\n      paymentIntentId: intent.id,\n      txSignature,\n      status: \"failed\",\n      error: status.message,\n    };\n  }\n  if (status.phase === \"expired\") {\n    return {\n      paymentIntentId: intent.id,\n      txSignature,\n      status: \"expired\",\n      error: status.message,\n    };\n  }\n  if (!status.readyToRedirect) {\n    return { paymentIntentId: intent.id, txSignature, status: \"timeout\" };\n  }\n\n  return { paymentIntentId: intent.id, txSignature, status: \"completed\" };\n}\n"],"names":["PLAN_TO_USAGE_PLAN","fetchOpenPayPriceIds","authRequest","CHECKOUT_POLL_TIMEOUT_MS","CHECKOUT_POLL_INTERVAL_MS","sleep","loadKeypair","getAddress","checkSolBalance","MIN_SOL_FOR_TX","checkUsdcBalance","payWithMemo","PROJECT_POLL_TIMEOUT_MS","listProjects","getProject","PROJECT_POLL_INTERVAL_MS"],"mappings":"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"}