UNPKG

@trilitech-umami/umami-embed

Version:

[WIP - not ready for production use] A simple embeddable Umami wallet

101 lines (100 loc) 3.43 kB
import { Messages } from "./Messages"; import { LoggerService } from "./LoggerService"; export class UmamiEmbed { get isInitialized() { return this.messages.isInitialized; } get isLoggedIn() { return this.userData !== null; } get user() { return this.userData; } constructor() { Object.defineProperty(this, "messages", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "userData", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.messages = new Messages(window, new LoggerService("none"), false, "ghostnet"); this.userData = null; } async init({ network, iframeParent = document.body, logsLevel = "none", useLocalEmbedIframe = false, theme, loginOptions, } = { network: "ghostnet" }) { if (this.isInitialized) { throw new Error("Umami Embed is already initialized."); } if (useLocalEmbedIframe && network !== "ghostnet") { throw new Error("Local iframe is only available for ghostnet network."); } if (loginOptions && loginOptions.length === 0) { throw new Error("Login options must include at least one login type value."); } const messages = new Messages(window, new LoggerService(logsLevel), useLocalEmbedIframe, network); const initResponse = await messages.init(iframeParent); if (initResponse.userData) { if (!loginOptions || loginOptions.includes(initResponse.userData.typeOfLogin)) { this.userData = initResponse.userData; } } await messages.setConfig({ network, logsLevel, theme, loginOptions, }); this.messages = messages; } destroy() { if (!this.isInitialized) { throw new Error("Umami Embed is not initialized."); } this.messages.destroy(); this.userData = null; } async login() { if (!this.isInitialized) { throw new Error("Umami Embed is not initialized."); } if (this.isLoggedIn) { throw new Error("Umami Embed is already logged in."); } this.userData = await this.messages.login(); return this.userData; } async logout() { if (!this.isInitialized) { throw new Error("Umami Embed is not initialized."); } if (!this.isLoggedIn) { throw new Error("Umami Embed is already logged out."); } await this.messages.logout(); this.userData = null; } async send(operations) { if (!this.isInitialized) { throw new Error("Umami Embed is not initialized."); } if (!this.isLoggedIn) { throw new Error("Umami Embed is not logged in."); } return (await this.messages.send(operations)).opHash; } async sign(signingType, payload) { if (!this.isInitialized) { throw new Error("Umami Embed is not initialized."); } if (!this.isLoggedIn) { throw new Error("Umami Embed is not logged in."); } return this.messages.sign(signingType, payload); } }