UNPKG

@frak-labs/core-sdk

Version:

Core SDK of the Frak wallet, low level library to interact directly with the frak ecosystem.

74 lines (64 loc) 2.01 kB
import { createIFrameFrakClient } from "../clients"; import type { FrakClient, FrakWalletSdkConfig } from "../types"; import { createIframe, getSupportedCurrency } from "../utils"; /** * Directly setup the Frak client with an iframe * Return when the FrakClient is ready (setup and communication estbalished with the wallet) * * @param config - The configuration to use for the Frak Wallet SDK * @returns a Promise with the Frak Client * * @example * const frakConfig: FrakWalletSdkConfig = { * metadata: { * name: "My app title", * }, * } * const client = await setupClient({ config: frakConfig }); */ export async function setupClient({ config, }: { config: FrakWalletSdkConfig; }): Promise<FrakClient | undefined> { // Prepare the config const preparedConfig = prepareConfig(config); // Create our iframe const iframe = await createIframe({ config: preparedConfig, }); if (!iframe) { console.error("Failed to create iframe"); return; } // Create our client const client = createIFrameFrakClient({ config: preparedConfig, iframe, }); // Wait for the client to be all setup await client.waitForSetup; // Wait for the connection to be established const waitForConnection = await client.waitForConnection; if (!waitForConnection) { console.error("Failed to connect to client"); return; } return client; } /** * Prepare the config for the Frak Client * @param config - The configuration to use for the Frak Wallet SDK * @returns The prepared configuration with the supported currency */ function prepareConfig(config: FrakWalletSdkConfig): FrakWalletSdkConfig { // Get the supported currency (e.g. "eur") const supportedCurrency = getSupportedCurrency(config.metadata?.currency); return { ...config, metadata: { ...config.metadata, currency: supportedCurrency, }, }; }