UNPKG

@daimo/pay

Version:

Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.

58 lines (55 loc) 2.11 kB
import { worldchainWLD, worldchainUSDC, assert } from '@daimo/pay-common'; import { getAddress } from 'viem'; import { MiniKit, Tokens } from '@worldcoin/minikit-js'; /** * Open Worldcoin's payment drawer and prompt the user to pay a Daimo Pay order. */ async function promptWorldcoinPayment(order, trpc) { try { if (!MiniKit.isInstalled()) { console.error("[WORLD] MiniKit is not installed. Please install @worldcoin/minikit-js to use this feature."); return null; } const paymentOptions = (await trpc.getTokenPaymentOptions.query({ orderId: order.id, tokens: [ { chainId: worldchainWLD.chainId, token: worldchainWLD.token, }, { chainId: worldchainUSDC.chainId, token: worldchainUSDC.token, }, ], })); const wld = paymentOptions.find((opt) => getAddress(opt.token.token) === getAddress(worldchainWLD.token)); const usdc = paymentOptions.find((opt) => getAddress(opt.token.token) === getAddress(worldchainUSDC.token)); assert(wld != null, "WLD DP token not found"); assert(usdc != null, "USDC DP token not found"); const paymentId = crypto.randomUUID().replace(/-/g, ""); const payload = { reference: paymentId, to: order.intentAddr, tokens: [ { symbol: Tokens.WLD, token_amount: wld.amount, }, { symbol: Tokens.USDC, token_amount: usdc.amount, }, ], description: order.metadata.intent, }; const { finalPayload } = await MiniKit.commandsAsync.pay(payload); return { paymentId, finalPayload }; } catch (error) { console.error("[WORLD] Error sending payment", error); return null; } } export { promptWorldcoinPayment }; //# sourceMappingURL=promptWorldPayment.js.map