React component for BEEP merchant payments with QR code display
npm install @beep-it/checkout-widgetA React component for SUI-based, self-custodial stablecoin payments with QR code generation, real-time payment verification, and full agent compatibility via AEO (Answer Engine Optimization). Built for the Beep payment system — the first agentic payment layer on the SUI network.
``bash`
npm install @beep-it/checkout-widget @beep-it/sdk-core
`tsx
import React from 'react';
import { CheckoutWidget } from '@beep-it/checkout-widget';
function App() {
return (
primaryColor="#007bff"
labels={{
scanQr: 'Scan QR Code to Pay',
paymentLabel: 'My Store Checkout',
}}
assets={[
{
assetId: 'product-uuid-123',
quantity: 2,
name: 'Premium Coffee',
description: 'Fresh roasted arabica beans',
},
]}
serverUrl="https://your-beep-server.com" // optional
/>
);
}
`
The widget supports two types of assets:
Reference pre-created products by their ID:
`tsx`
const assets = [
{
assetId: 'product-uuid-123',
quantity: 1,
name: 'Coffee', // optional override
description: 'Premium blend', // optional override
},
];
Create products dynamically during checkout. These items are created as products in your merchant account on the server (persisted for audit and reuse). They may be hidden from public listings by default.
`tsx`
const assets = [
{
name: 'Custom Item',
price: '25.50',
quantity: 2,
description: 'Custom product description',
},
];
| Prop | Type | Required | Description |
| --------------------- | ----------------------------------------------- | -------- | ---------------------------------------------------------------- |
| publishableKey | string | ✅ | BEEP publishable key for browser-safe authentication |primaryColor
| | string | ❌ | Primary color for styling (hex format, e.g., "#007bff") |labels
| | object | ✅ | Customizable text labels |labels.scanQr
| | string | ✅ | Text shown above QR code |labels.paymentLabel
| | string | ❌ | Label displayed in SUI wallets (default: "Beep Checkout") |assets
| | (BeepPurchaseAsset \| CreateProductPayload)[] | ✅ | Items to purchase |serverUrl
| | string | ❌ | Custom BEEP server URL (defaults to production) |
#### BeepPurchaseAsset
| Prop | Type | Required | Description |
| ------------- | -------- | -------- | ---------------------------- |
| assetId | string | ✅ | UUID of existing product |quantity
| | number | ✅ | Number of items |name
| | string | ❌ | Override product name |description
| | string | ❌ | Override product description |
#### CreateProductPayload
| Prop | Type | Required | Description |
| ------------- | -------- | -------- | --------------------------------------- |
| name | string | ✅ | Product display name |price
| | string | ✅ | Price in decimal format (e.g., "25.50") |quantity
| | number | ❌ | Number of items (default: 1) |description
| | string | ❌ | Product description |
- SUI Network Integration: Generates native SUI USDC payment requests
- Real-time Status Polling: Verifies payment confirmation directly from the SUI RPC
- Flexible Asset Support: Mix existing products with on-the-fly product creation (persisted)
- Payment Label Support: Custom labels appear in wallet interfaces
- Wallet Address Display: Shows copyable recipient address for desktop users
- Loading States: Smooth loading indicators during setup and polling
- Error Handling: Comprehensive error boundaries and user-friendly error messages
- Success Animation: Clear payment confirmation state
- Responsive Design: Works on desktop and mobile devices
- Customizable Theming: Primary color theming throughout the widget
- TypeScript Support: Full type safety with comprehensive interfaces
- Zero CSS Dependencies: Inline styles prevent conflicts with host applications
- Error Boundaries: Isolated error handling prevents widget crashes from affecting host app
- Comprehensive Logging: Detailed console logging for debugging
`tsx`
primaryColor="#10b981"
labels={{ scanQr: 'Pay with Crypto' }}
assets={[
{
assetId: 'coffee-product-uuid',
quantity: 1,
},
]}
/>
`tsx`
primaryColor="#3b82f6"
labels={{
scanQr: 'Scan to complete your order',
paymentLabel: 'Coffee Shop - Downtown',
}}
assets={[
{
assetId: 'coffee-uuid',
quantity: 2,
name: 'Espresso',
},
{
assetId: 'pastry-uuid',
quantity: 1,
name: 'Croissant',
},
]}
/>
`tsx`
primaryColor="#ef4444"
labels={{
scanQr: 'Pay for custom service',
paymentLabel: 'Consulting Services',
}}
assets={[
{
name: '1-Hour Consultation',
price: '150.00',
quantity: 1,
description: 'Professional consulting session',
},
]}
/>
`tsx`
primaryColor="#8b5cf6"
labels={{ scanQr: 'Complete your purchase' }}
assets={[
// Existing product
{
assetId: 'existing-product-uuid',
quantity: 1,
},
// Dynamic product
{
name: 'Rush Delivery',
price: '15.00',
quantity: 1,
},
]}
/>
1. Initialization Phase: The widget prepares a signed USDC-on-SUI payment request.
2. Display Phase: Shows QR code and total amount to user
3. Polling Phase: Automatically checks transaction finality via SUI RPC
4. Completion: Displays success state when payment is confirmed on-chain
The widget includes comprehensive error handling:
- Configuration Errors: Invalid API keys, missing assets
- Network Errors: API connection issues, timeouts
- Payment Errors: Failed transactions, expired payments
- Component Errors: Isolated error boundaries prevent crashes
The widget generates SUI-native Payment URLs with:
- Recipient: Developer's SUI wallet address
- Amount: Total calculated from all assets in USDC
- Token: Token address for payment
- Reference: Unique tracking identifier
- Label: Custom payment label for wallet display
- Message: Descriptive payment message
`bashInstall dependencies
pnpm install
Environment Variables
The widget respects these environment variables:
-
REACT_APP_BEEP_SERVER_URL: Default server URL if not provided via propsTypeScript Support
Full TypeScript support with exported interfaces:
`tsx
import { CheckoutWidget, MerchantWidgetProps, MerchantWidgetState } from '@beep-it/checkout-widget';import { BeepPurchaseAsset, CreateProductPayload } from '@beep-it/sdk-core';
``- Modern browsers with ES2017+ support
- React 18+ required
- TanStack Query for state management
See the main BEEP SDK license for details.
---
Built on SUI • Powered by Stablecoins • Designed for Developers