Internal Wallet Services

Tomo provides a few internal wallet services to wallet users so developers can selectively embed these services into their applications with minimum effort. Currently, these features are only available for users using social login, and users can only operate through a pop-up Tomo UI component. We will add support for extension wallet users and provide more configurable ways to invoke these services.

Service Types

Tomo supports the following basic service types:

enum WebWalletInvokeType {
  SWAP = "swap",             // Swap between selected token pairs
  ONRAMP = "onramp",         // Purchase Token by card
  SEND = "send",             // Send token to a given address
  RECEIVE = "receive",       // Display QR code and address for given token
}

Modals for Internal Services

Drawing
Modals for Onramp Services
Drawing
Modals for Swap Services

Invoke Services

import "@tomo-inc/tomo-web-sdk/style.css";
import { TomoContextProvider, useTomo,WebWalletInvokeType  } from "@tomo-inc/tomo-web-sdk";

// Get tomo SDK instance
const { openConnectModal, tomoSDK } = useTomo();

const handleAction = async (type: WebWalletInvokeType) => {
    tomoSDK?.handleWebWalletInvoke(type);
  };

// your app logic
...
<button onClick={() => handleAction(WebWalletInvokeType.SWAP)}>
        Swap
      </button>

Example


import "@tomo-inc/tomo-web-sdk/style.css";
import { TomoContextProvider, useTomo,WebWalletInvokeType  } from "@tomo-inc/tomo-web-sdk";

const OrderComponent = () => {
  const { openConnectModal, tomoSDK } = useTomo();

  const handleAction = async (type: WebWalletInvokeType) => {
    tomoSDK?.handleWebWalletInvoke(type);
  };

  return (
    <div style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>
      <h1>WebSDK Demo</h1>
      <button  onClick={() => openConnectModal()}>Connect Wallet</button>
      <button  onClick={() => handleAction(WebWalletInvokeType.ONRAMP)}>Onramp</button>
      <button  onClick={() => handleAction(WebWalletInvokeType.SWAP)}>Swap</button>
      <button  onClick={() => handleAction(WebWalletInvokeType.SEND)}>Send</button>
      <button  onClick={() => handleAction(WebWalletInvokeType.RECEIVE)}>Receive</button>
    </div>
  );
};

export default function WebSDKPage() {

  return (
    <TomoContextProvider
      theme="light"
      chainTypes={["sui"]}
      clientId="YOUR_CLIENT_ID"
    >
      <div style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>
        {/* Add your page content here */}
        <OrderComponent />
      </div>
    </TomoContextProvider>
  );
}

Last updated