* refactor: landing screen * fix: code debt * feat: add settings screen * chore: clean up * feat: settings * feat: small updates
182 lines
3.8 KiB
TypeScript
182 lines
3.8 KiB
TypeScript
import type { Metadata } from "@lume/types";
|
|
import { type Result, commands } from "./commands";
|
|
import { Window } from "@tauri-apps/api/window";
|
|
|
|
export class NostrAccount {
|
|
static async getAccounts() {
|
|
const query = await commands.getAccounts();
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
static async loadAccount(npub: string) {
|
|
const bunker: string = localStorage.getItem(`${npub}_bunker`);
|
|
let query: Result<boolean, string>;
|
|
|
|
if (bunker?.length && bunker?.startsWith("bunker://")) {
|
|
query = await commands.loadAccount(npub, bunker);
|
|
} else {
|
|
query = await commands.loadAccount(npub, null);
|
|
}
|
|
|
|
if (query.status === "ok") {
|
|
const panel = Window.getByLabel("panel");
|
|
panel.emit("load-notification", { account: npub }); // trigger load notification
|
|
|
|
return query.data;
|
|
} else {
|
|
throw new Error(query.error);
|
|
}
|
|
}
|
|
|
|
static async createAccount() {
|
|
const query = await commands.createAccount();
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
throw new Error(query.error);
|
|
}
|
|
}
|
|
|
|
static async createProfile(profile: Metadata) {
|
|
const query = await commands.createProfile(
|
|
profile.name || "",
|
|
profile.display_name || "",
|
|
profile.about || "",
|
|
profile.picture || "",
|
|
profile.banner || "",
|
|
profile.nip05 || "",
|
|
profile.lud16 || "",
|
|
profile.website || "",
|
|
);
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
throw new Error(query.error);
|
|
}
|
|
}
|
|
|
|
static async saveAccount(nsec: string, password = "") {
|
|
const query = await commands.saveAccount(nsec, password);
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
throw new Error(query.error);
|
|
}
|
|
}
|
|
|
|
static async connectRemoteAccount(uri: string) {
|
|
const connect = await commands.connectRemoteAccount(uri);
|
|
|
|
if (connect.status === "ok") {
|
|
const npub = connect.data;
|
|
const parsed = new URL(uri);
|
|
parsed.searchParams.delete("secret");
|
|
|
|
// save connection string
|
|
localStorage.setItem(`${npub}_bunker`, parsed.toString());
|
|
|
|
return npub;
|
|
} else {
|
|
throw new Error(connect.error);
|
|
}
|
|
}
|
|
|
|
static async setContactList(pubkeys: string[]) {
|
|
const query = await commands.setContactList(pubkeys);
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
throw new Error(query.error);
|
|
}
|
|
}
|
|
|
|
static async setWallet(uri: string) {
|
|
const query = await commands.setNwc(uri);
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
throw new Error(query.error);
|
|
}
|
|
}
|
|
|
|
static async getProfile() {
|
|
const query = await commands.getCurrentUserProfile();
|
|
|
|
if (query.status === "ok") {
|
|
return JSON.parse(query.data) as Metadata;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
static async getBalance() {
|
|
const query = await commands.getBalance();
|
|
|
|
if (query.status === "ok") {
|
|
return Number.parseInt(query.data);
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
static async getContactList() {
|
|
const query = await commands.getContactList();
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
static async isContactListEmpty() {
|
|
const query = await commands.isContactListEmpty();
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
static async checkContact(pubkey: string) {
|
|
const query = await commands.checkContact(pubkey);
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
throw new Error(query.error);
|
|
}
|
|
}
|
|
|
|
static async toggleContact(pubkey: string, alias?: string) {
|
|
const query = await commands.toggleContact(pubkey, alias);
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
throw new Error(query.error);
|
|
}
|
|
}
|
|
|
|
static async f2f(npub: string) {
|
|
const query = await commands.friendToFriend(npub);
|
|
|
|
if (query.status === "ok") {
|
|
return query.data;
|
|
} else {
|
|
throw new Error(query.error);
|
|
}
|
|
}
|
|
}
|