{"version":3,"file":"index.mjs","names":["sleep"],"sources":["../src/errors.ts","../src/amounts.ts","../src/constants.ts","../src/context.ts","../src/retry.ts","../src/rpc.ts","../src/token.ts","../src/balances.ts","../src/idempotency.ts","../src/transactions.ts","../src/payments.ts","../src/transfers.ts","../src/index.ts"],"sourcesContent":["export type SolanaUsdtErrorCode =\n  | \"INVALID_ADDRESS\"\n  | \"INVALID_INPUT\"\n  | \"INVALID_AMOUNT\"\n  | \"RPC_ERROR\"\n  | \"SIGNER_REQUIRED\"\n  | \"RPC_TIMEOUT\"\n  | \"TRANSACTION_FAILED\"\n  | \"TRANSACTION_TIMEOUT\"\n  | \"PAYMENT_NOT_FOUND\"\n  | \"PAYMENT_MISMATCH\"\n  | \"IDEMPOTENCY_CONFLICT\";\n\nexport class SolanaUsdtError extends Error {\n  public readonly code: SolanaUsdtErrorCode;\n  public readonly endpoint: string | undefined;\n  public readonly signature: string | undefined;\n  public readonly slot: bigint | undefined;\n  public readonly logs: readonly string[] | undefined;\n  public readonly retryable: boolean;\n  public override readonly cause: unknown;\n  public readonly meta: Record<string, unknown> | undefined;\n\n  constructor(options: {\n    code: SolanaUsdtErrorCode;\n    message: string;\n    endpoint?: string | undefined;\n    signature?: string | undefined;\n    slot?: bigint | number | undefined;\n    logs?: readonly string[] | undefined;\n    retryable?: boolean | undefined;\n    cause?: unknown;\n    meta?: Record<string, unknown> | undefined;\n  }) {\n    const suffix = options.signature ? ` (signature: ${options.signature})` : \"\";\n    super(`${options.message}${suffix}`, { cause: options.cause });\n    this.name = \"SolanaUsdtError\";\n    this.code = options.code;\n    this.endpoint = options.endpoint;\n    this.signature = options.signature;\n    this.slot = typeof options.slot === \"number\" ? BigInt(options.slot) : options.slot;\n    this.logs = options.logs;\n    this.retryable = options.retryable ?? false;\n    this.cause = options.cause;\n    this.meta = options.meta;\n\n    if (typeof Error.captureStackTrace === \"function\") {\n      Error.captureStackTrace(this, SolanaUsdtError);\n    }\n  }\n}\n\nexport function isSolanaUsdtError(error: unknown): error is SolanaUsdtError {\n  return error instanceof SolanaUsdtError;\n}\n\nexport function normalizeError(\n  error: unknown,\n  fallback: {\n    code: SolanaUsdtErrorCode;\n    message: string;\n    endpoint?: string | undefined;\n    signature?: string | undefined;\n    retryable?: boolean | undefined;\n  },\n): SolanaUsdtError {\n  if (error instanceof SolanaUsdtError) return error;\n  const message = error instanceof Error && error.message ? error.message : fallback.message;\n  return new SolanaUsdtError({\n    ...fallback,\n    message,\n    cause: error,\n  });\n}\n","import { SolanaUsdtError } from \"./errors.js\";\n\nexport type TokenAmountInput = string | number | bigint;\n\nexport function parseTokenAmount(amount: TokenAmountInput, decimals: number): bigint {\n  if (!Number.isInteger(decimals) || decimals < 0) {\n    throw new SolanaUsdtError({\n      code: \"INVALID_AMOUNT\",\n      message: \"Token decimals must be a non-negative integer.\",\n    });\n  }\n\n  if (typeof amount === \"bigint\") {\n    if (amount < 0n) throw invalidAmount(\"Amount must be greater than or equal to zero.\");\n    return amount;\n  }\n\n  const raw = String(amount).trim();\n  if (raw === \"\" || raw.startsWith(\"-\") || raw.includes(\"e\") || raw.includes(\"E\")) {\n    throw invalidAmount(\"Amount must be a positive decimal string, number, or bigint.\");\n  }\n\n  const match = /^(\\d+)(?:\\.(\\d+))?$/.exec(raw);\n  if (!match) throw invalidAmount(\"Amount must be a base-10 decimal value.\");\n\n  const whole = match[1] ?? \"0\";\n  const fraction = match[2] ?? \"\";\n  if (fraction.length > decimals) {\n    throw invalidAmount(`Amount has more than ${decimals} decimal places.`);\n  }\n\n  const multiplier = 10n ** BigInt(decimals);\n  const wholeUnits = BigInt(whole) * multiplier;\n  const fractionUnits = BigInt((fraction + \"0\".repeat(decimals)).slice(0, decimals) || \"0\");\n  return wholeUnits + fractionUnits;\n}\n\nexport function formatTokenAmount(amount: bigint | string | number, decimals: number): string {\n  const value = BigInt(amount);\n  const multiplier = 10n ** BigInt(decimals);\n  const whole = value / multiplier;\n  const fraction = value % multiplier;\n  if (decimals === 0) return whole.toString();\n\n  const fractionText = fraction.toString().padStart(decimals, \"0\").replace(/0+$/, \"\");\n  return fractionText === \"\" ? whole.toString() : `${whole.toString()}.${fractionText}`;\n}\n\nfunction invalidAmount(message: string): SolanaUsdtError {\n  return new SolanaUsdtError({ code: \"INVALID_AMOUNT\", message });\n}\n","import { address } from \"@solana/kit\";\n\nexport const SOLANA_USDT_MINT = \"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\";\nexport const SOLANA_USDT_DECIMALS = 6;\nexport const DEFAULT_COMMITMENT = \"confirmed\";\nexport const DEFAULT_REFERENCE_PREFIX = \"solana-usdt\";\n\nexport const SOLANA_USDT_MINT_ADDRESS = address(SOLANA_USDT_MINT);\n","import { address, createSolanaRpc, type Address, type TransactionSigner } from \"@solana/kit\";\nimport { DEFAULT_COMMITMENT, SOLANA_USDT_DECIMALS, SOLANA_USDT_MINT_ADDRESS } from \"./constants.js\";\nimport { SolanaUsdtError } from \"./errors.js\";\nimport type { AddressInput, ClientContext, SolanaUsdtClientOptions } from \"./types.js\";\n\nexport function createContext(options: SolanaUsdtClientOptions): ClientContext {\n  const mint =\n    options.mint === undefined ? SOLANA_USDT_MINT_ADDRESS : normalizeAddress(options.mint);\n  return {\n    rpcUrl: options.rpcUrl,\n    rpc:\n      options.rpc ??\n      (createSolanaRpc(\n        options.rpcUrl as never,\n        options.fetch ? ({ fetch: options.fetch } as never) : undefined,\n      ) as never),\n    signer: options.signer,\n    commitment: options.commitment ?? DEFAULT_COMMITMENT,\n    timeoutMs: options.timeoutMs,\n    retry: options.retry,\n    mint,\n    decimals: options.decimals ?? SOLANA_USDT_DECIMALS,\n    idempotencyStore: options.idempotencyStore,\n  };\n}\n\nexport function normalizeAddress(value: AddressInput, field = \"address\"): Address {\n  try {\n    return typeof value === \"string\" ? address(value) : value;\n  } catch (error) {\n    throw new SolanaUsdtError({\n      code: \"INVALID_ADDRESS\",\n      message: `Invalid Solana ${field}.`,\n      cause: error,\n    });\n  }\n}\n\nexport function requireSigner(ctx: ClientContext, operation: string): TransactionSigner {\n  if (!ctx.signer) {\n    throw new SolanaUsdtError({\n      code: \"SIGNER_REQUIRED\",\n      message: `${operation} requires a TransactionSigner. Configure signer on createSolanaUsdt(...) before calling transfer APIs.`,\n    });\n  }\n  return ctx.signer;\n}\n","import { SolanaUsdtError } from \"./errors.js\";\n\nexport interface RetryOptions {\n  retries?: number | undefined;\n  minDelayMs?: number | undefined;\n  maxDelayMs?: number | undefined;\n  retryableErrorCodes?: readonly string[] | undefined;\n}\n\nconst DEFAULT_RETRYABLE_CODES = [\n  \"ETIMEDOUT\",\n  \"ECONNRESET\",\n  \"ECONNREFUSED\",\n  \"EAI_AGAIN\",\n  \"UND_ERR_CONNECT_TIMEOUT\",\n  \"UND_ERR_HEADERS_TIMEOUT\",\n] as const;\n\nexport function isRetryableRpcError(\n  error: unknown,\n  retryableCodes: readonly string[] = DEFAULT_RETRYABLE_CODES,\n): boolean {\n  if (error instanceof SolanaUsdtError) return error.retryable;\n  if (typeof error !== \"object\" || error === null) return false;\n  const code = \"code\" in error ? String((error as { code?: unknown }).code) : undefined;\n  const message = error instanceof Error ? error.message.toLowerCase() : \"\";\n  return Boolean(\n    (code && retryableCodes.includes(code)) ||\n    message.includes(\"429\") ||\n    message.includes(\"rate limit\") ||\n    message.includes(\"timeout\") ||\n    message.includes(\"blockhash not found\"),\n  );\n}\n\nexport async function withRetry<T>(\n  fn: () => Promise<T>,\n  options: RetryOptions | undefined,\n  shouldRetry: (error: unknown) => boolean = (error) =>\n    isRetryableRpcError(error, options?.retryableErrorCodes),\n): Promise<T> {\n  const retries = options?.retries ?? 2;\n  const minDelayMs = options?.minDelayMs ?? 250;\n  const maxDelayMs = options?.maxDelayMs ?? 2_000;\n\n  let lastError: unknown;\n  for (let attempt = 0; attempt <= retries; attempt += 1) {\n    try {\n      return await fn();\n    } catch (error) {\n      lastError = error;\n      if (attempt >= retries || !shouldRetry(error)) throw error;\n      const backoff = Math.min(maxDelayMs, minDelayMs * 2 ** attempt);\n      const jitter = 0.5 + Math.random();\n      await sleep(Math.floor(backoff * jitter));\n    }\n  }\n  throw lastError;\n}\n\nexport function withTimeout<T>(\n  promise: Promise<T>,\n  timeoutMs: number | undefined,\n  endpoint?: string,\n): Promise<T> {\n  if (timeoutMs === undefined || timeoutMs <= 0) return promise;\n\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  const timeout = new Promise<never>((_, reject) => {\n    timer = setTimeout(() => {\n      reject(\n        new SolanaUsdtError({\n          code: \"RPC_TIMEOUT\",\n          message: `RPC request timed out after ${timeoutMs}ms.`,\n          endpoint,\n          retryable: true,\n        }),\n      );\n    }, timeoutMs);\n  });\n\n  return Promise.race([promise, timeout]).finally(() => {\n    if (timer !== undefined) clearTimeout(timer);\n  });\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import type { ClientContext } from \"./types.js\";\nimport { normalizeError, SolanaUsdtError } from \"./errors.js\";\nimport { withRetry, withTimeout } from \"./retry.js\";\n\nexport async function callRpc<T>(\n  ctx: ClientContext,\n  endpoint: string,\n  fn: () => Promise<T>,\n): Promise<T> {\n  try {\n    return await withRetry(() => withTimeout(fn(), ctx.timeoutMs, endpoint), ctx.retry);\n  } catch (error) {\n    throw normalizeError(error, {\n      code: \"RPC_ERROR\",\n      message: `Solana RPC request failed: ${endpoint}`,\n      endpoint,\n      retryable: true,\n    });\n  }\n}\n\nexport function requireRpcMethod<T extends keyof ClientContext[\"rpc\"]>(\n  ctx: ClientContext,\n  method: T,\n): NonNullable<ClientContext[\"rpc\"][T]> {\n  const rpcMethod = ctx.rpc[method];\n  if (typeof rpcMethod !== \"function\") {\n    throw new SolanaUsdtError({\n      code: \"RPC_ERROR\",\n      message: `Configured RPC client does not implement ${String(method)}.`,\n      endpoint: String(method),\n      retryable: false,\n    });\n  }\n  return rpcMethod as NonNullable<ClientContext[\"rpc\"][T]>;\n}\n\nexport function readContextSlot(response: unknown): bigint | undefined {\n  const slot = getPath(response, [\"context\", \"slot\"]);\n  return typeof slot === \"number\" || typeof slot === \"bigint\" ? BigInt(slot) : undefined;\n}\n\nexport function getPath(value: unknown, path: readonly string[]): unknown {\n  let current = value;\n  for (const key of path) {\n    if (typeof current !== \"object\" || current === null || !(key in current)) return undefined;\n    current = (current as Record<string, unknown>)[key];\n  }\n  return current;\n}\n","import { findAssociatedTokenPda, TOKEN_PROGRAM_ADDRESS } from \"@solana-program/token\";\nimport type { Address } from \"@solana/kit\";\nimport type { ClientContext } from \"./types.js\";\nimport { callRpc, getPath, readContextSlot, requireRpcMethod } from \"./rpc.js\";\n\nexport async function getAssociatedTokenAddress(owner: Address, mint: Address): Promise<Address> {\n  const [ata] = await findAssociatedTokenPda({\n    owner,\n    mint,\n    tokenProgram: TOKEN_PROGRAM_ADDRESS,\n  });\n  return ata;\n}\n\nexport async function getTokenAccountAmount(\n  ctx: ClientContext,\n  tokenAccount: Address,\n): Promise<{\n  exists: boolean;\n  amount: bigint;\n  slot?: bigint | undefined;\n}> {\n  const getAccountInfo = requireRpcMethod(ctx, \"getAccountInfo\");\n  const response = await callRpc<unknown>(ctx, \"getAccountInfo\", () =>\n    getAccountInfo\n      .call(ctx.rpc, tokenAccount, {\n        commitment: ctx.commitment,\n        encoding: \"jsonParsed\",\n      })\n      .send(),\n  );\n  const value = getPath(response, [\"value\"]);\n  if (value === null || value === undefined) {\n    return { exists: false, amount: 0n, slot: readContextSlot(response) };\n  }\n  const amount = getPath(value, [\"data\", \"parsed\", \"info\", \"tokenAmount\", \"amount\"]);\n  return {\n    exists: true,\n    amount:\n      typeof amount === \"string\" || typeof amount === \"number\" || typeof amount === \"bigint\"\n        ? BigInt(amount)\n        : 0n,\n    slot: readContextSlot(response),\n  };\n}\n","import { formatTokenAmount } from \"./amounts.js\";\nimport { normalizeAddress } from \"./context.js\";\nimport { getAssociatedTokenAddress, getTokenAccountAmount } from \"./token.js\";\nimport type { BalanceRetrieveInput, BalanceResult, ClientContext } from \"./types.js\";\n\nexport function createBalancesModule(ctx: ClientContext) {\n  return {\n    async retrieve(input: BalanceRetrieveInput): Promise<BalanceResult> {\n      const owner = normalizeAddress(input.owner, \"owner\");\n      const tokenAccount = await getAssociatedTokenAddress(owner, ctx.mint);\n      const account = await getTokenAccountAmount(ctx, tokenAccount);\n\n      return {\n        owner,\n        mint: ctx.mint,\n        tokenAccount,\n        amount: account.amount,\n        displayAmount: formatTokenAmount(account.amount, ctx.decimals),\n        decimals: ctx.decimals,\n        slot: account.slot,\n      };\n    },\n  };\n}\n","export interface IdempotencyRecord<T = unknown> {\n  key: string;\n  reference: string;\n  result: T;\n  createdAt: string;\n}\n\nexport interface IdempotencyStore<T = unknown> {\n  get(key: string): Promise<IdempotencyRecord<T> | undefined> | IdempotencyRecord<T> | undefined;\n  set(key: string, record: IdempotencyRecord<T>): Promise<void> | void;\n}\n\nexport class MemoryIdempotencyStore<T = unknown> implements IdempotencyStore<T> {\n  private readonly records = new Map<string, IdempotencyRecord<T>>();\n\n  get(key: string): IdempotencyRecord<T> | undefined {\n    return this.records.get(key);\n  }\n\n  set(key: string, record: IdempotencyRecord<T>): void {\n    this.records.set(key, record);\n  }\n}\n\nexport function createReference(prefix = \"solana-usdt\"): string {\n  let id: string;\n  const webCrypto =\n    typeof globalThis !== \"undefined\"\n      ? globalThis.crypto || (globalThis as any).msCrypto\n      : undefined;\n\n  if (webCrypto && typeof webCrypto.randomUUID === \"function\") {\n    id = webCrypto.randomUUID();\n  } else if (webCrypto && typeof webCrypto.getRandomValues === \"function\") {\n    const bytes = new Uint8Array(16);\n    webCrypto.getRandomValues(bytes);\n    // Set UUID v4 variant/version bits\n    bytes[6] = (bytes[6]! & 0x0f) | 0x40;\n    bytes[8] = (bytes[8]! & 0x3f) | 0x80;\n\n    id = \"\";\n    for (let i = 0; i < 16; i++) {\n      if (i === 4 || i === 6 || i === 8 || i === 10) id += \"-\";\n      id += bytes[i]!.toString(16).padStart(2, \"0\");\n    }\n  } else {\n    // Fallback using Math.random\n    id = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n      const r = (Math.random() * 16) | 0;\n      const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n      return v.toString(16);\n    });\n  }\n  return `${prefix}_${id}`;\n}\n\nexport function createMemo(reference: string, prefix = \"solana-usdt\"): string {\n  return `${prefix}:${reference}`;\n}\n\nexport function parseMemoReference(memo: string, prefix = \"solana-usdt\"): string | undefined {\n  const marker = `${prefix}:`;\n  return memo.startsWith(marker) ? memo.slice(marker.length) : undefined;\n}\n","import type {\n  ClientContext,\n  TransactionRetrieveInput,\n  TransactionStatus,\n  TransactionWaitInput,\n} from \"./types.js\";\nimport { callRpc, getPath, requireRpcMethod } from \"./rpc.js\";\nimport { SolanaUsdtError } from \"./errors.js\";\n\nexport function createTransactionsModule(ctx: ClientContext) {\n  return {\n    async retrieve(input: TransactionRetrieveInput): Promise<TransactionStatus> {\n      return retrieveTransaction(ctx, input.signature);\n    },\n\n    async wait(input: TransactionWaitInput): Promise<TransactionStatus> {\n      return waitForTransaction(ctx, input);\n    },\n  };\n}\n\nexport async function retrieveTransaction(\n  ctx: ClientContext,\n  signature: string,\n): Promise<TransactionStatus> {\n  const getSignatureStatuses = requireRpcMethod(ctx, \"getSignatureStatuses\");\n  const statuses = await callRpc<unknown>(ctx, \"getSignatureStatuses\", () =>\n    getSignatureStatuses.call(ctx.rpc, [signature], { searchTransactionHistory: true }).send(),\n  );\n  const status = Array.isArray(getPath(statuses, [\"value\"]))\n    ? (getPath(statuses, [\"value\"]) as unknown[])[0]\n    : undefined;\n\n  let transaction: unknown;\n  if (typeof ctx.rpc.getTransaction === \"function\") {\n    transaction = await callRpc<unknown>(ctx, \"getTransaction\", () =>\n      ctx.rpc.getTransaction!(signature, {\n        commitment: ctx.commitment,\n        encoding: \"jsonParsed\",\n        maxSupportedTransactionVersion: 0,\n      }).send(),\n    );\n  }\n\n  return {\n    signature,\n    slot: readBigInt(status, \"slot\") ?? readBigInt(transaction, \"slot\"),\n    confirmationStatus: readString(status, \"confirmationStatus\"),\n    err:\n      typeof status === \"object\" && status !== null\n        ? (status as Record<string, unknown>).err\n        : undefined,\n    transaction,\n  };\n}\n\nexport async function waitForTransaction(\n  ctx: ClientContext,\n  input: TransactionWaitInput,\n): Promise<TransactionStatus> {\n  const timeoutMs = input.timeoutMs ?? ctx.timeoutMs ?? 60_000;\n  const pollIntervalMs = input.pollIntervalMs ?? 750;\n  const commitment = input.commitment ?? ctx.commitment;\n  const deadline = Date.now() + timeoutMs;\n\n  while (Date.now() <= deadline) {\n    const status = await retrieveTransaction(ctx, input.signature);\n    if (status.err) {\n      throw new SolanaUsdtError({\n        code: \"TRANSACTION_FAILED\",\n        message: \"Solana transaction failed.\",\n        signature: input.signature,\n        slot: status.slot,\n        meta: { err: status.err },\n      });\n    }\n    if (\n      status.confirmationStatus &&\n      commitmentRank(status.confirmationStatus) >= commitmentRank(commitment)\n    ) {\n      return status;\n    }\n    await sleep(pollIntervalMs);\n  }\n\n  throw new SolanaUsdtError({\n    code: \"TRANSACTION_TIMEOUT\",\n    message: `Timed out waiting for transaction confirmation after ${timeoutMs}ms.`,\n    signature: input.signature,\n    retryable: true,\n  });\n}\n\nfunction commitmentRank(commitment: string): number {\n  if (commitment === \"finalized\") return 3;\n  if (commitment === \"confirmed\") return 2;\n  if (commitment === \"processed\") return 1;\n  return 0;\n}\n\nfunction readBigInt(value: unknown, key: string): bigint | undefined {\n  if (typeof value !== \"object\" || value === null) return undefined;\n  const raw = (value as Record<string, unknown>)[key];\n  return typeof raw === \"number\" || typeof raw === \"bigint\" ? BigInt(raw) : undefined;\n}\n\nfunction readString(value: unknown, key: string): string | undefined {\n  if (typeof value !== \"object\" || value === null) return undefined;\n  const raw = (value as Record<string, unknown>)[key];\n  return typeof raw === \"string\" ? raw : undefined;\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { formatTokenAmount, parseTokenAmount } from \"./amounts.js\";\nimport { normalizeAddress } from \"./context.js\";\nimport { DEFAULT_REFERENCE_PREFIX } from \"./constants.js\";\nimport { SolanaUsdtError } from \"./errors.js\";\nimport { createMemo, createReference, parseMemoReference } from \"./idempotency.js\";\nimport { callRpc, getPath, requireRpcMethod } from \"./rpc.js\";\nimport { getAssociatedTokenAddress } from \"./token.js\";\nimport { retrieveTransaction } from \"./transactions.js\";\nimport type {\n  ClientContext,\n  PaymentCreateRequestInput,\n  PaymentMonitorInput,\n  PaymentMonitorResult,\n  PaymentRequest,\n  PaymentVerifyInput,\n  PaymentVerificationScanDiagnostics,\n  SolanaPayUrlOptions,\n  VerifiedPayment,\n} from \"./types.js\";\n\nconst DEFAULT_SIGNATURE_SCAN_LIMIT = 20;\nconst MAX_SIGNATURE_SCAN_LIMIT = 1_000;\nconst DEFAULT_VERIFY_MAX_PAGES = 1;\nconst MAX_VERIFY_PAGES = 100;\n\nexport function createPaymentsModule(ctx: ClientContext) {\n  return {\n    createRequest(input: PaymentCreateRequestInput): PaymentRequest {\n      const amount = parseTokenAmount(input.amount, ctx.decimals);\n      const reference = input.reference ?? createReference(DEFAULT_REFERENCE_PREFIX);\n      return {\n        reference,\n        recipient: input.recipient ? normalizeAddress(input.recipient, \"recipient\") : undefined,\n        mint: ctx.mint,\n        amount,\n        displayAmount: formatTokenAmount(amount, ctx.decimals),\n        decimals: ctx.decimals,\n        memo: createMemo(reference, DEFAULT_REFERENCE_PREFIX),\n        metadata: input.metadata,\n        createdAt: new Date().toISOString(),\n      };\n    },\n\n    toSolanaPayUrl(request: PaymentRequest, options?: SolanaPayUrlOptions): URL {\n      return toSolanaPayUrl(request, options);\n    },\n\n    async verify(input: PaymentVerifyInput): Promise<VerifiedPayment> {\n      if (!input.signature && !input.reference) {\n        throw new SolanaUsdtError({\n          code: \"PAYMENT_NOT_FOUND\",\n          message: \"Provide either a transaction signature or memo reference to verify a payment.\",\n        });\n      }\n      if (input.signature) {\n        const payment = await verifySignature(ctx, input.signature, input);\n        if (payment) return payment;\n      }\n      if (input.reference && input.recipient) {\n        return await verifyReference(ctx, {\n          ...input,\n          reference: input.reference,\n          recipient: input.recipient,\n        });\n      }\n      return { found: false, reference: input.reference, signature: input.signature };\n    },\n\n    async monitor(input: PaymentMonitorInput): Promise<PaymentMonitorResult> {\n      return monitorPayments(ctx, input);\n    },\n  };\n}\n\nexport function toSolanaPayUrl(request: PaymentRequest, options: SolanaPayUrlOptions = {}): URL {\n  const recipient = options.recipient\n    ? normalizeAddress(options.recipient, \"recipient\")\n    : request.recipient;\n  if (!recipient) {\n    throw new SolanaUsdtError({\n      code: \"INVALID_ADDRESS\",\n      message: \"A payment request recipient is required to build a Solana Pay URL.\",\n    });\n  }\n\n  const url = new URL(`solana:${recipient}`);\n  url.searchParams.set(\"amount\", formatTokenAmount(request.amount, request.decimals));\n  url.searchParams.set(\"spl-token\", request.mint);\n\n  const references = normalizeReferences(options.reference ?? request.reference);\n  for (const reference of references) {\n    url.searchParams.append(\"reference\", reference);\n  }\n\n  const memo = options.memo ?? request.memo;\n  if (memo) url.searchParams.set(\"memo\", memo);\n  if (options.label !== undefined) url.searchParams.set(\"label\", options.label);\n  if (options.message !== undefined) url.searchParams.set(\"message\", options.message);\n  return url;\n}\n\nasync function verifySignature(\n  ctx: ClientContext,\n  signature: string,\n  input: PaymentVerifyInput,\n): Promise<VerifiedPayment | undefined> {\n  const status = await retrieveTransaction(ctx, signature);\n  const payment = extractVerifiedPayment(ctx, status.transaction, signature);\n  if (!payment) return undefined;\n  payment.slot = status.slot;\n  payment.confirmationStatus = status.confirmationStatus;\n  return assertExpectedPayment(ctx, payment, input);\n}\n\nasync function verifyReference(\n  ctx: ClientContext,\n  input: PaymentVerifyInput & {\n    reference: string;\n    recipient: NonNullable<PaymentVerifyInput[\"recipient\"]>;\n  },\n): Promise<VerifiedPayment> {\n  const limit = normalizeSignatureScanLimit(input.limit);\n  const maxPages = normalizeMaxPages(input.maxPages);\n  let cursor = input.cursor;\n  let pagesScanned = 0;\n  let signaturesScanned = 0;\n  let finalCursor: string | undefined;\n  let hasMore = false;\n\n  while (pagesScanned < maxPages) {\n    const monitored = await monitorPayments(ctx, {\n      recipient: input.recipient,\n      limit,\n      cursor,\n    });\n    pagesScanned += 1;\n    signaturesScanned += monitored.signaturesScanned;\n    finalCursor = monitored.cursor;\n    hasMore = monitored.hasMore;\n\n    const payment = monitored.payments.find((candidate) => candidate.reference === input.reference);\n    if (payment) {\n      const verified = await assertExpectedPayment(ctx, payment, input);\n      return {\n        ...verified,\n        scan: createScanDiagnostics({\n          pagesScanned,\n          signaturesScanned,\n          limit,\n          finalCursor,\n          hasMore,\n        }),\n      };\n    }\n\n    if (!monitored.hasMore || !monitored.cursor) break;\n    cursor = monitored.cursor;\n  }\n\n  return {\n    found: false,\n    reference: input.reference,\n    signature: input.signature,\n    scan: createScanDiagnostics({ pagesScanned, signaturesScanned, limit, finalCursor, hasMore }),\n  };\n}\n\nasync function monitorPayments(\n  ctx: ClientContext,\n  input: PaymentMonitorInput,\n): Promise<PaymentMonitorResult> {\n  const limit = normalizeSignatureScanLimit(input.limit);\n  const recipient = normalizeAddress(input.recipient, \"recipient\");\n  const recipientTokenAccount = await getAssociatedTokenAddress(recipient, ctx.mint);\n  const getSignaturesForAddress = requireRpcMethod(ctx, \"getSignaturesForAddress\");\n  const signatures = await callRpc<unknown[]>(ctx, \"getSignaturesForAddress\", async () => {\n    const response = await getSignaturesForAddress\n      .call(ctx.rpc, recipientTokenAccount, {\n        before: input.cursor,\n        limit,\n      })\n      .send();\n    return Array.isArray(response) ? response : [];\n  });\n\n  const payments: VerifiedPayment[] = [];\n  for (const row of signatures) {\n    const signature =\n      typeof row === \"object\" && row !== null\n        ? (row as Record<string, unknown>).signature\n        : undefined;\n    if (typeof signature !== \"string\") continue;\n    const status = await retrieveTransaction(ctx, signature);\n    const payment = extractVerifiedPayment(ctx, status.transaction, signature);\n    if (payment?.recipientTokenAccount === recipientTokenAccount) {\n      payment.recipient = recipient;\n      payment.slot = status.slot;\n      payment.confirmationStatus = status.confirmationStatus;\n      payments.push(payment);\n    }\n  }\n\n  const last = signatures.at(-1);\n  const cursor =\n    typeof last === \"object\" && last !== null\n      ? (last as Record<string, unknown>).signature\n      : undefined;\n  const nextCursor = typeof cursor === \"string\" ? cursor : undefined;\n  return {\n    cursor: nextCursor,\n    signaturesScanned: signatures.length,\n    hasMore: signatures.length >= limit && nextCursor !== undefined,\n    payments,\n  };\n}\n\nasync function assertExpectedPayment(\n  ctx: ClientContext,\n  payment: VerifiedPayment,\n  input: PaymentVerifyInput,\n): Promise<VerifiedPayment> {\n  if (input.reference && payment.reference !== input.reference) {\n    throw mismatch(\"Payment reference did not match.\", payment);\n  }\n  if (input.amount !== undefined) {\n    const expectedAmount = parseTokenAmount(input.amount, ctx.decimals);\n    if (payment.amount !== expectedAmount) throw mismatch(\"Payment amount did not match.\", payment);\n  }\n  if (input.recipient) {\n    const recipient = normalizeAddress(input.recipient, \"recipient\");\n    return await assertExpectedRecipient(ctx, payment, recipient);\n  }\n  return { ...payment, found: true };\n}\n\nasync function assertExpectedRecipient(\n  ctx: ClientContext,\n  payment: VerifiedPayment,\n  recipient: string,\n): Promise<VerifiedPayment> {\n  const recipientTokenAccount = await getAssociatedTokenAddress(\n    normalizeAddress(recipient),\n    ctx.mint,\n  );\n  if (payment.recipientTokenAccount === undefined) {\n    throw mismatch(\"Payment recipient token account was not found.\", payment);\n  }\n  if (payment.recipientTokenAccount !== recipientTokenAccount) {\n    throw mismatch(\"Payment recipient token account did not match.\", payment);\n  }\n  return {\n    ...payment,\n    found: true,\n    recipient,\n    recipientTokenAccount: payment.recipientTokenAccount ?? recipientTokenAccount,\n  };\n}\n\nfunction extractVerifiedPayment(\n  ctx: ClientContext,\n  transactionResponse: unknown,\n  signature: string,\n): VerifiedPayment | undefined {\n  const tx = getPath(transactionResponse, [\"transaction\"]) ?? transactionResponse;\n  const message = getPath(tx, [\"message\"]) ?? getPath(tx, [\"transaction\", \"message\"]);\n  const instructions = getPath(message, [\"instructions\"]);\n  if (!Array.isArray(instructions)) return undefined;\n\n  let memo: string | undefined;\n  let reference: string | undefined;\n  let recipientTokenAccount: string | undefined;\n  let amount: bigint | undefined;\n\n  for (const instruction of instructions) {\n    const parsedType = getPath(instruction, [\"parsed\", \"type\"]);\n    const parsedInfo = getPath(instruction, [\"parsed\", \"info\"]);\n    const program = getPath(instruction, [\"program\"]);\n    if (program === \"spl-memo\") {\n      const parsed = getPath(instruction, [\"parsed\"]);\n      memo =\n        typeof parsed === \"string\" ? parsed : typeof parsedInfo === \"string\" ? parsedInfo : memo;\n      if (memo) reference = parseMemoReference(memo, DEFAULT_REFERENCE_PREFIX) ?? reference;\n    }\n    if (parsedType === \"transferChecked\" && typeof parsedInfo === \"object\" && parsedInfo !== null) {\n      const info = parsedInfo as Record<string, unknown>;\n      if (info.mint === ctx.mint) {\n        recipientTokenAccount =\n          typeof info.destination === \"string\" ? info.destination : recipientTokenAccount;\n        const rawAmount = getPath(info, [\"tokenAmount\", \"amount\"]) ?? info.amount;\n        if (\n          typeof rawAmount === \"string\" ||\n          typeof rawAmount === \"number\" ||\n          typeof rawAmount === \"bigint\"\n        ) {\n          amount = BigInt(rawAmount);\n        }\n      }\n    }\n  }\n\n  if (!reference && amount === undefined) return undefined;\n  return {\n    found: true,\n    signature,\n    reference,\n    recipientTokenAccount,\n    amount,\n    displayAmount: amount === undefined ? undefined : formatTokenAmount(amount, ctx.decimals),\n    memo,\n  };\n}\n\nfunction mismatch(message: string, payment: VerifiedPayment): SolanaUsdtError {\n  return new SolanaUsdtError({\n    code: \"PAYMENT_MISMATCH\",\n    message,\n    signature: payment.signature,\n    slot: payment.slot,\n    meta: { payment },\n  });\n}\n\nfunction normalizeReferences(reference: string | readonly string[]): readonly string[] {\n  return typeof reference === \"string\" ? [reference] : reference;\n}\n\nfunction normalizeSignatureScanLimit(limit: number | undefined): number {\n  return normalizeBoundedInteger(limit, {\n    defaultValue: DEFAULT_SIGNATURE_SCAN_LIMIT,\n    field: \"payment scan limit\",\n    max: MAX_SIGNATURE_SCAN_LIMIT,\n  });\n}\n\nfunction normalizeMaxPages(maxPages: number | undefined): number {\n  return normalizeBoundedInteger(maxPages, {\n    defaultValue: DEFAULT_VERIFY_MAX_PAGES,\n    field: \"payment verify maxPages\",\n    max: MAX_VERIFY_PAGES,\n  });\n}\n\nfunction normalizeBoundedInteger(\n  value: number | undefined,\n  options: { defaultValue: number; field: string; max: number },\n): number {\n  if (value === undefined) return options.defaultValue;\n  if (!Number.isInteger(value) || value < 1 || value > options.max) {\n    throw new SolanaUsdtError({\n      code: \"INVALID_INPUT\",\n      message: `${options.field} must be an integer between 1 and ${options.max}.`,\n    });\n  }\n  return value;\n}\n\nfunction createScanDiagnostics(input: {\n  pagesScanned: number;\n  signaturesScanned: number;\n  limit: number;\n  finalCursor?: string | undefined;\n  hasMore: boolean;\n}): PaymentVerificationScanDiagnostics {\n  return {\n    pagesScanned: input.pagesScanned,\n    signaturesScanned: input.signaturesScanned,\n    limit: input.limit,\n    cursor: input.finalCursor,\n    hasMore: input.hasMore,\n  };\n}\n","import {\n  getCreateAssociatedTokenIdempotentInstruction,\n  getTransferCheckedInstruction,\n} from \"@solana-program/token\";\nimport { getAddMemoInstruction } from \"@solana-program/memo\";\nimport {\n  appendTransactionMessageInstructions,\n  createTransactionMessage,\n  getBase64EncodedWireTransaction,\n  setTransactionMessageFeePayerSigner,\n  setTransactionMessageLifetimeUsingBlockhash,\n  signTransactionMessageWithSigners,\n  type Instruction,\n} from \"@solana/kit\";\nimport { formatTokenAmount, parseTokenAmount } from \"./amounts.js\";\nimport { normalizeAddress, requireSigner } from \"./context.js\";\nimport { DEFAULT_REFERENCE_PREFIX } from \"./constants.js\";\nimport { SolanaUsdtError } from \"./errors.js\";\nimport { createMemo, createReference } from \"./idempotency.js\";\nimport { callRpc, getPath, requireRpcMethod } from \"./rpc.js\";\nimport { getAssociatedTokenAddress, getTokenAccountAmount } from \"./token.js\";\nimport { waitForTransaction } from \"./transactions.js\";\nimport type {\n  ClientContext,\n  TransferCreateInput,\n  TransferQuote,\n  TransferQuoteInput,\n  TransferResult,\n} from \"./types.js\";\n\nconst APPROX_SIGNATURE_FEE_LAMPORTS = 5_000n;\nconst APPROX_ATA_RENT_LAMPORTS = 2_039_280n;\n\nexport function createTransfersModule(ctx: ClientContext) {\n  return {\n    async quote(input: TransferQuoteInput): Promise<TransferQuote> {\n      const signer = requireSigner(ctx, \"transfers.quote\");\n      const destinationOwner = normalizeAddress(input.to, \"recipient\");\n      const amount = parseTokenAmount(input.amount, ctx.decimals);\n      const sourceTokenAccount = await getAssociatedTokenAddress(signer.address, ctx.mint);\n      const destinationTokenAccount = await getAssociatedTokenAddress(destinationOwner, ctx.mint);\n      const destination = await getTokenAccountAmount(ctx, destinationTokenAccount);\n      const willCreateRecipientAta = !destination.exists;\n\n      return {\n        to: destinationOwner,\n        mint: ctx.mint,\n        amount,\n        displayAmount: formatTokenAmount(amount, ctx.decimals),\n        sourceTokenAccount,\n        destinationTokenAccount,\n        recipientAtaExists: destination.exists,\n        willCreateRecipientAta,\n        estimatedFeeLamports:\n          APPROX_SIGNATURE_FEE_LAMPORTS + (willCreateRecipientAta ? APPROX_ATA_RENT_LAMPORTS : 0n),\n        feeEstimateType: \"approximate\",\n      };\n    },\n\n    async create(input: TransferCreateInput): Promise<TransferResult> {\n      return createTransfer(ctx, input);\n    },\n  };\n}\n\nexport async function createTransfer(\n  ctx: ClientContext,\n  input: TransferCreateInput,\n): Promise<TransferResult> {\n  const signer = requireSigner(ctx, \"transfers.create\");\n  const reference =\n    input.reference ?? input.idempotencyKey ?? createReference(DEFAULT_REFERENCE_PREFIX);\n  const destinationOwner = normalizeAddress(input.to, \"recipient\");\n  const amount = parseTokenAmount(input.amount, ctx.decimals);\n  const sourceTokenAccount = await getAssociatedTokenAddress(signer.address, ctx.mint);\n  const destinationTokenAccount = await getAssociatedTokenAddress(destinationOwner, ctx.mint);\n\n  if (input.idempotencyKey && ctx.idempotencyStore) {\n    const existing = await ctx.idempotencyStore.get(input.idempotencyKey);\n    if (existing) {\n      assertIdempotentReplay(existing.result, {\n        amount,\n        destinationTokenAccount,\n        mint: ctx.mint,\n      });\n      return existing.result;\n    }\n  }\n\n  const instructions = await buildTransferInstructions(ctx, {\n    amount,\n    destinationOwner,\n    destinationTokenAccount,\n    reference,\n    sourceTokenAccount,\n    createRecipientAta: input.createRecipientAta ?? true,\n  });\n\n  const latestBlockhash = await getLatestBlockhash(ctx);\n  const message = appendTransactionMessageInstructions(\n    instructions,\n    setTransactionMessageLifetimeUsingBlockhash(\n      latestBlockhash,\n      setTransactionMessageFeePayerSigner(signer, createTransactionMessage({ version: 0 })),\n    ),\n  );\n  const signedTransaction = await signTransactionMessageWithSigners(message);\n  const wireTransaction = getBase64EncodedWireTransaction(signedTransaction);\n  const sendTransaction = requireRpcMethod(ctx, \"sendTransaction\");\n  const signature = String(\n    await callRpc(ctx, \"sendTransaction\", () =>\n      sendTransaction\n        .call(ctx.rpc, wireTransaction, {\n          encoding: \"base64\",\n          preflightCommitment: ctx.commitment,\n          maxRetries: ctx.retry?.retries,\n        })\n        .send(),\n    ),\n  );\n  const submittedResult: TransferResult = {\n    signature,\n    reference,\n    idempotencyKey: input.idempotencyKey,\n    mint: ctx.mint,\n    amount,\n    displayAmount: formatTokenAmount(amount, ctx.decimals),\n    sourceTokenAccount,\n    destinationTokenAccount,\n    confirmationStatus: \"submitted\",\n  };\n\n  if (input.idempotencyKey && ctx.idempotencyStore) {\n    await storeIdempotencyResult(ctx, input.idempotencyKey, reference, submittedResult);\n  }\n\n  const status = await waitForTransaction(ctx, { signature });\n  const result: TransferResult = {\n    ...submittedResult,\n    slot: status.slot,\n    confirmationStatus: status.confirmationStatus,\n  };\n\n  if (input.idempotencyKey && ctx.idempotencyStore) {\n    await storeIdempotencyResult(ctx, input.idempotencyKey, reference, result);\n  }\n\n  return result;\n}\n\nasync function storeIdempotencyResult(\n  ctx: ClientContext,\n  key: string,\n  reference: string,\n  result: TransferResult,\n): Promise<void> {\n  await ctx.idempotencyStore?.set(key, {\n    key,\n    reference,\n    result,\n    createdAt: new Date().toISOString(),\n  });\n}\n\nfunction assertIdempotentReplay(\n  existing: TransferResult,\n  expected: { amount: bigint; destinationTokenAccount: string; mint: string },\n): void {\n  if (\n    existing.amount !== expected.amount ||\n    existing.destinationTokenAccount !== expected.destinationTokenAccount ||\n    existing.mint !== expected.mint\n  ) {\n    throw new SolanaUsdtError({\n      code: \"IDEMPOTENCY_CONFLICT\",\n      message: \"Idempotency key was already used for a different transfer.\",\n      signature: existing.signature,\n      meta: {\n        existing: {\n          amount: existing.amount.toString(),\n          destinationTokenAccount: existing.destinationTokenAccount,\n          mint: existing.mint,\n        },\n        requested: {\n          amount: expected.amount.toString(),\n          destinationTokenAccount: expected.destinationTokenAccount,\n          mint: expected.mint,\n        },\n      },\n    });\n  }\n}\n\nexport async function buildTransferInstructions(\n  ctx: ClientContext,\n  input: {\n    amount: bigint;\n    createRecipientAta: boolean;\n    destinationOwner: string;\n    destinationTokenAccount: string;\n    reference: string;\n    sourceTokenAccount: string;\n  },\n): Promise<Instruction[]> {\n  const signer = requireSigner(ctx, \"transfer instruction building\");\n  if (input.amount <= 0n) {\n    throw new SolanaUsdtError({\n      code: \"INVALID_AMOUNT\",\n      message: \"Transfer amount must be greater than zero.\",\n    });\n  }\n\n  const instructions: Instruction[] = [];\n  if (input.createRecipientAta) {\n    instructions.push(\n      getCreateAssociatedTokenIdempotentInstruction({\n        payer: signer,\n        ata: normalizeAddress(input.destinationTokenAccount, \"destination token account\"),\n        owner: normalizeAddress(input.destinationOwner, \"destination owner\"),\n        mint: ctx.mint,\n      }),\n    );\n  }\n\n  instructions.push(\n    getTransferCheckedInstruction({\n      source: normalizeAddress(input.sourceTokenAccount, \"source token account\"),\n      mint: ctx.mint,\n      destination: normalizeAddress(input.destinationTokenAccount, \"destination token account\"),\n      authority: signer,\n      amount: input.amount,\n      decimals: ctx.decimals,\n    }),\n  );\n\n  instructions.push(\n    getAddMemoInstruction({ memo: createMemo(input.reference, DEFAULT_REFERENCE_PREFIX) }),\n  );\n  return instructions;\n}\n\nasync function getLatestBlockhash(\n  ctx: ClientContext,\n): Promise<{ blockhash: never; lastValidBlockHeight: bigint }> {\n  const getLatestBlockhashRpc = requireRpcMethod(ctx, \"getLatestBlockhash\");\n  const response = await callRpc<unknown>(ctx, \"getLatestBlockhash\", () =>\n    getLatestBlockhashRpc.call(ctx.rpc, { commitment: ctx.commitment }).send(),\n  );\n  const value = getPath(response, [\"value\"]) ?? response;\n  const blockhash = getPath(value, [\"blockhash\"]);\n  const lastValidBlockHeight = getPath(value, [\"lastValidBlockHeight\"]);\n  if (\n    typeof blockhash !== \"string\" ||\n    (typeof lastValidBlockHeight !== \"number\" && typeof lastValidBlockHeight !== \"bigint\")\n  ) {\n    throw new SolanaUsdtError({\n      code: \"RPC_ERROR\",\n      message: \"RPC getLatestBlockhash response did not include a blockhash lifetime.\",\n      endpoint: \"getLatestBlockhash\",\n    });\n  }\n  return {\n    blockhash: blockhash as never,\n    lastValidBlockHeight: BigInt(lastValidBlockHeight),\n  };\n}\n","export * from \"./amounts.js\";\nexport * from \"./balances.js\";\nexport * from \"./constants.js\";\nexport * from \"./errors.js\";\nexport * from \"./idempotency.js\";\nexport * from \"./payments.js\";\nexport * from \"./retry.js\";\nexport * from \"./transactions.js\";\nexport * from \"./transfers.js\";\nexport * from \"./types.js\";\n\nexport {\n  createKeyPairSignerFromBytes,\n  createKeyPairSignerFromPrivateKeyBytes,\n  createNoopSigner,\n  createSignerFromKeyPair,\n  generateKeyPairSigner,\n  type TransactionSigner,\n} from \"@solana/kit\";\n\nimport { createBalancesModule } from \"./balances.js\";\nimport { createContext } from \"./context.js\";\nimport { createPaymentsModule } from \"./payments.js\";\nimport { createTransactionsModule } from \"./transactions.js\";\nimport { createTransfersModule } from \"./transfers.js\";\nimport type {\n  SolanaUsdtClient,\n  SolanaUsdtClientOptions,\n  SolanaUsdtReadOnlyClient,\n  SolanaUsdtReadOnlyClientOptions,\n} from \"./types.js\";\n\nexport function createSolanaUsdt(options: SolanaUsdtClientOptions): SolanaUsdtClient {\n  const ctx = createContext(options);\n  return {\n    balances: createBalancesModule(ctx),\n    transfers: createTransfersModule(ctx),\n    payments: createPaymentsModule(ctx),\n    transactions: createTransactionsModule(ctx),\n  };\n}\n\nexport function createReadOnlySolanaUsdt(\n  options: SolanaUsdtReadOnlyClientOptions,\n): SolanaUsdtReadOnlyClient {\n  const ctx = createContext(options);\n  return {\n    balances: createBalancesModule(ctx),\n    payments: createPaymentsModule(ctx),\n    transactions: createTransactionsModule(ctx),\n  };\n}\n"],"mappings":"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"}