@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
JavaScript
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