@trilitech-umami/umami-embed
Version:
[WIP - not ready for production use] A simple embeddable Umami wallet
101 lines (100 loc) • 3.43 kB
JavaScript
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);
}
}