feat: respect the relay hint

This commit is contained in:
reya
2024-06-07 09:07:33 +07:00
parent 799835a629
commit 04fe0fcec8
4 changed files with 423 additions and 579 deletions

View File

@@ -1,549 +1,370 @@
// This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually.
/** user-defined commands **/ // This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually.
export const commands = { /** user-defined commands **/
async getRelays(): Promise<Result<Relays, null>> {
try { export const commands = {
async getRelays() : Promise<Result<Relays, null>> {
try {
return { status: "ok", data: await TAURI_INVOKE("get_relays") }; return { status: "ok", data: await TAURI_INVOKE("get_relays") };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async connectRelay(relay: string): Promise<Result<boolean, null>> { async connectRelay(relay: string) : Promise<Result<boolean, null>> {
try { try {
return { return { status: "ok", data: await TAURI_INVOKE("connect_relay", { relay }) };
status: "ok", } catch (e) {
data: await TAURI_INVOKE("connect_relay", { relay }), if(e instanceof Error) throw e;
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async removeRelay(relay: string): Promise<Result<boolean, null>> { async removeRelay(relay: string) : Promise<Result<boolean, null>> {
try { try {
return { return { status: "ok", data: await TAURI_INVOKE("remove_relay", { relay }) };
status: "ok", } catch (e) {
data: await TAURI_INVOKE("remove_relay", { relay }), if(e instanceof Error) throw e;
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getAccounts(): Promise<Result<string[], string>> { async getAccounts() : Promise<Result<string[], string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("get_accounts") }; return { status: "ok", data: await TAURI_INVOKE("get_accounts") };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async createAccount(): Promise<Result<Account, null>> { async createAccount() : Promise<Result<Account, null>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("create_account") }; return { status: "ok", data: await TAURI_INVOKE("create_account") };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async saveAccount( async saveAccount(nsec: string, password: string) : Promise<Result<string, string>> {
nsec: string, try {
password: string, return { status: "ok", data: await TAURI_INVOKE("save_account", { nsec, password }) };
): Promise<Result<string, string>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("save_account", { nsec, password }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getEncryptedKey( async getEncryptedKey(npub: string, password: string) : Promise<Result<string, string>> {
npub: string, try {
password: string, return { status: "ok", data: await TAURI_INVOKE("get_encrypted_key", { npub, password }) };
): Promise<Result<string, string>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("get_encrypted_key", { npub, password }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async connectRemoteAccount(uri: string): Promise<Result<string, string>> { async connectRemoteAccount(uri: string) : Promise<Result<string, string>> {
try { try {
return { return { status: "ok", data: await TAURI_INVOKE("connect_remote_account", { uri }) };
status: "ok", } catch (e) {
data: await TAURI_INVOKE("connect_remote_account", { uri }), if(e instanceof Error) throw e;
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async loadAccount( async loadAccount(npub: string, bunker: string | null) : Promise<Result<boolean, string>> {
npub: string, try {
bunker: string | null, return { status: "ok", data: await TAURI_INVOKE("load_account", { npub, bunker }) };
): Promise<Result<boolean, string>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("load_account", { npub, bunker }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async eventToBech32( async eventToBech32(id: string, relays: string[]) : Promise<Result<string, null>> {
id: string, try {
relays: string[], return { status: "ok", data: await TAURI_INVOKE("event_to_bech32", { id, relays }) };
): Promise<Result<string, null>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("event_to_bech32", { id, relays }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async userToBech32( async userToBech32(key: string, relays: string[]) : Promise<Result<string, null>> {
key: string, try {
relays: string[], return { status: "ok", data: await TAURI_INVOKE("user_to_bech32", { key, relays }) };
): Promise<Result<string, null>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("user_to_bech32", { key, relays }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async verifyNip05( async verifyNip05(key: string, nip05: string) : Promise<Result<boolean, string>> {
key: string, try {
nip05: string, return { status: "ok", data: await TAURI_INVOKE("verify_nip05", { key, nip05 }) };
): Promise<Result<boolean, string>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("verify_nip05", { key, nip05 }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getCurrentUserProfile(): Promise<Result<string, string>> { async getCurrentUserProfile() : Promise<Result<string, string>> {
try { try {
return { return { status: "ok", data: await TAURI_INVOKE("get_current_user_profile") };
status: "ok", } catch (e) {
data: await TAURI_INVOKE("get_current_user_profile"), if(e instanceof Error) throw e;
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getProfile(id: string): Promise<Result<string, string>> { async getProfile(id: string) : Promise<Result<string, string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("get_profile", { id }) }; return { status: "ok", data: await TAURI_INVOKE("get_profile", { id }) };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getContactList(): Promise<Result<string[], string>> { async getContactList() : Promise<Result<string[], string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("get_contact_list") }; return { status: "ok", data: await TAURI_INVOKE("get_contact_list") };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async setContactList(pubkeys: string[]): Promise<Result<boolean, string>> { async setContactList(pubkeys: string[]) : Promise<Result<boolean, string>> {
try { try {
return { return { status: "ok", data: await TAURI_INVOKE("set_contact_list", { pubkeys }) };
status: "ok", } catch (e) {
data: await TAURI_INVOKE("set_contact_list", { pubkeys }), if(e instanceof Error) throw e;
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async createProfile( async createProfile(name: string, displayName: string, about: string, picture: string, banner: string, nip05: string, lud16: string, website: string) : Promise<Result<string, string>> {
name: string, try {
displayName: string, return { status: "ok", data: await TAURI_INVOKE("create_profile", { name, displayName, about, picture, banner, nip05, lud16, website }) };
about: string, } catch (e) {
picture: string, if(e instanceof Error) throw e;
banner: string,
nip05: string,
lud16: string,
website: string,
): Promise<Result<string, string>> {
try {
return {
status: "ok",
data: await TAURI_INVOKE("create_profile", {
name,
displayName,
about,
picture,
banner,
nip05,
lud16,
website,
}),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async follow( async follow(id: string, alias: string | null) : Promise<Result<string, string>> {
id: string, try {
alias: string | null, return { status: "ok", data: await TAURI_INVOKE("follow", { id, alias }) };
): Promise<Result<string, string>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("follow", { id, alias }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async unfollow(id: string): Promise<Result<string, string>> { async unfollow(id: string) : Promise<Result<string, string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("unfollow", { id }) }; return { status: "ok", data: await TAURI_INVOKE("unfollow", { id }) };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getNstore(key: string): Promise<Result<string, string>> { async getNstore(key: string) : Promise<Result<string, string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("get_nstore", { key }) }; return { status: "ok", data: await TAURI_INVOKE("get_nstore", { key }) };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async setNstore( async setNstore(key: string, content: string) : Promise<Result<string, string>> {
key: string, try {
content: string, return { status: "ok", data: await TAURI_INVOKE("set_nstore", { key, content }) };
): Promise<Result<string, string>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("set_nstore", { key, content }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async setNwc(uri: string): Promise<Result<boolean, string>> { async setNwc(uri: string) : Promise<Result<boolean, string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("set_nwc", { uri }) }; return { status: "ok", data: await TAURI_INVOKE("set_nwc", { uri }) };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async loadNwc(): Promise<Result<boolean, string>> { async loadNwc() : Promise<Result<boolean, string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("load_nwc") }; return { status: "ok", data: await TAURI_INVOKE("load_nwc") };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getBalance(): Promise<Result<string, string>> { async getBalance() : Promise<Result<string, string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("get_balance") }; return { status: "ok", data: await TAURI_INVOKE("get_balance") };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async zapProfile( async zapProfile(id: string, amount: string, message: string) : Promise<Result<boolean, string>> {
id: string, try {
amount: string, return { status: "ok", data: await TAURI_INVOKE("zap_profile", { id, amount, message }) };
message: string, } catch (e) {
): Promise<Result<boolean, string>> { if(e instanceof Error) throw e;
try {
return {
status: "ok",
data: await TAURI_INVOKE("zap_profile", { id, amount, message }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async zapEvent( async zapEvent(id: string, amount: string, message: string) : Promise<Result<boolean, string>> {
id: string, try {
amount: string, return { status: "ok", data: await TAURI_INVOKE("zap_event", { id, amount, message }) };
message: string, } catch (e) {
): Promise<Result<boolean, string>> { if(e instanceof Error) throw e;
try {
return {
status: "ok",
data: await TAURI_INVOKE("zap_event", { id, amount, message }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async friendToFriend(npub: string): Promise<Result<boolean, string>> { async friendToFriend(npub: string) : Promise<Result<boolean, string>> {
try { try {
return { return { status: "ok", data: await TAURI_INVOKE("friend_to_friend", { npub }) };
status: "ok", } catch (e) {
data: await TAURI_INVOKE("friend_to_friend", { npub }), if(e instanceof Error) throw e;
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getNotifications(): Promise<Result<string[], string>> { async getNotifications() : Promise<Result<string[], string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("get_notifications") }; return { status: "ok", data: await TAURI_INVOKE("get_notifications") };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getEvent(id: string): Promise<Result<string, string>> { async getEvent(id: string) : Promise<Result<string, string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("get_event", { id }) }; return { status: "ok", data: await TAURI_INVOKE("get_event", { id }) };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getReplies(id: string): Promise<Result<string[], string>> { async getReplies(id: string) : Promise<Result<string[], string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("get_replies", { id }) }; return { status: "ok", data: await TAURI_INVOKE("get_replies", { id }) };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getEventsBy( async getEventsBy(publicKey: string, asOf: string | null) : Promise<Result<string[], string>> {
publicKey: string, try {
asOf: string | null, return { status: "ok", data: await TAURI_INVOKE("get_events_by", { publicKey, asOf }) };
): Promise<Result<string[], string>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("get_events_by", { publicKey, asOf }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getLocalEvents( async getLocalEvents(pubkeys: string[], until: string | null) : Promise<Result<string[], string>> {
pubkeys: string[], try {
until: string | null, return { status: "ok", data: await TAURI_INVOKE("get_local_events", { pubkeys, until }) };
): Promise<Result<string[], string>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("get_local_events", { pubkeys, until }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getGlobalEvents( async getGlobalEvents(until: string | null) : Promise<Result<string[], string>> {
until: string | null, try {
): Promise<Result<string[], string>> { return { status: "ok", data: await TAURI_INVOKE("get_global_events", { until }) };
try { } catch (e) {
return { if(e instanceof Error) throw e;
status: "ok",
data: await TAURI_INVOKE("get_global_events", { until }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getHashtagEvents( async getHashtagEvents(hashtags: string[], until: string | null) : Promise<Result<string[], string>> {
hashtags: string[], try {
until: string | null, return { status: "ok", data: await TAURI_INVOKE("get_hashtag_events", { hashtags, until }) };
): Promise<Result<string[], string>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("get_hashtag_events", { hashtags, until }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async publish( async publish(content: string, tags: string[][]) : Promise<Result<string, string>> {
content: string, try {
tags: string[][], return { status: "ok", data: await TAURI_INVOKE("publish", { content, tags }) };
): Promise<Result<string, string>> { } catch (e) {
try { if(e instanceof Error) throw e;
return {
status: "ok",
data: await TAURI_INVOKE("publish", { content, tags }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async repost(raw: string): Promise<Result<string, string>> { async repost(raw: string) : Promise<Result<string, string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("repost", { raw }) }; return { status: "ok", data: await TAURI_INVOKE("repost", { raw }) };
} catch (e) { } catch (e) {
if (e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async showInFolder(path: string): Promise<void> { async showInFolder(path: string) : Promise<void> {
await TAURI_INVOKE("show_in_folder", { path }); await TAURI_INVOKE("show_in_folder", { path });
}, },
async createColumn( async createColumn(label: string, x: number, y: number, width: number, height: number, url: string) : Promise<Result<string, string>> {
label: string, try {
x: number, return { status: "ok", data: await TAURI_INVOKE("create_column", { label, x, y, width, height, url }) };
y: number, } catch (e) {
width: number, if(e instanceof Error) throw e;
height: number,
url: string,
): Promise<Result<string, string>> {
try {
return {
status: "ok",
data: await TAURI_INVOKE("create_column", {
label,
x,
y,
width,
height,
url,
}),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async closeColumn(label: string): Promise<Result<boolean, null>> { async closeColumn(label: string) : Promise<Result<boolean, null>> {
try { try {
return { return { status: "ok", data: await TAURI_INVOKE("close_column", { label }) };
status: "ok", } catch (e) {
data: await TAURI_INVOKE("close_column", { label }), if(e instanceof Error) throw e;
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async repositionColumn( async repositionColumn(label: string, x: number, y: number) : Promise<Result<null, string>> {
label: string, try {
x: number, return { status: "ok", data: await TAURI_INVOKE("reposition_column", { label, x, y }) };
y: number, } catch (e) {
): Promise<Result<null, string>> { if(e instanceof Error) throw e;
try {
return {
status: "ok",
data: await TAURI_INVOKE("reposition_column", { label, x, y }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async resizeColumn( async resizeColumn(label: string, width: number, height: number) : Promise<Result<null, string>> {
label: string, try {
width: number, return { status: "ok", data: await TAURI_INVOKE("resize_column", { label, width, height }) };
height: number, } catch (e) {
): Promise<Result<null, string>> { if(e instanceof Error) throw e;
try {
return {
status: "ok",
data: await TAURI_INVOKE("resize_column", { label, width, height }),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async openWindow( async openWindow(label: string, title: string, url: string, width: number, height: number) : Promise<Result<null, string>> {
label: string, try {
title: string, return { status: "ok", data: await TAURI_INVOKE("open_window", { label, title, url, width, height }) };
url: string, } catch (e) {
width: number, if(e instanceof Error) throw e;
height: number,
): Promise<Result<null, string>> {
try {
return {
status: "ok",
data: await TAURI_INVOKE("open_window", {
label,
title,
url,
width,
height,
}),
};
} catch (e) {
if (e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async setBadge(count: number): Promise<void> { async setBadge(count: number) : Promise<void> {
await TAURI_INVOKE("set_badge", { count }); await TAURI_INVOKE("set_badge", { count });
}, }
}; }
/** user-defined events **/
/** user-defined statics **/
/** user-defined events **/
/** user-defined statics **/
/** user-defined types **/ /** user-defined types **/
export type Account = { npub: string; nsec: string }; export type Account = { npub: string; nsec: string }
export type Relays = { export type Relays = { connected: string[]; read: string[] | null; write: string[] | null; both: string[] | null }
connected: string[];
read: string[] | null;
write: string[] | null;
both: string[] | null;
};
/** tauri-specta globals **/ /** tauri-specta globals **/
import { invoke as TAURI_INVOKE } from "@tauri-apps/api/core"; import { invoke as TAURI_INVOKE } from "@tauri-apps/api/core";
import * as TAURI_API_EVENT from "@tauri-apps/api/event"; import * as TAURI_API_EVENT from "@tauri-apps/api/event";
import { type WebviewWindow as __WebviewWindow__ } from "@tauri-apps/api/webviewWindow"; import { type WebviewWindow as __WebviewWindow__ } from "@tauri-apps/api/webviewWindow";
type __EventObj__<T> = { type __EventObj__<T> = {
listen: ( listen: (
cb: TAURI_API_EVENT.EventCallback<T>, cb: TAURI_API_EVENT.EventCallback<T>
) => ReturnType<typeof TAURI_API_EVENT.listen<T>>; ) => ReturnType<typeof TAURI_API_EVENT.listen<T>>;
once: ( once: (
cb: TAURI_API_EVENT.EventCallback<T>, cb: TAURI_API_EVENT.EventCallback<T>
) => ReturnType<typeof TAURI_API_EVENT.once<T>>; ) => ReturnType<typeof TAURI_API_EVENT.once<T>>;
emit: T extends null emit: T extends null
? (payload?: T) => ReturnType<typeof TAURI_API_EVENT.emit> ? (payload?: T) => ReturnType<typeof TAURI_API_EVENT.emit>
@@ -555,7 +376,7 @@ export type Result<T, E> =
| { status: "error"; error: E }; | { status: "error"; error: E };
function __makeEvents__<T extends Record<string, any>>( function __makeEvents__<T extends Record<string, any>>(
mappings: Record<keyof T, string>, mappings: Record<keyof T, string>
) { ) {
return new Proxy( return new Proxy(
{} as unknown as { {} as unknown as {
@@ -585,6 +406,8 @@ function __makeEvents__<T extends Record<string, any>>(
}, },
}); });
}, },
}, }
); );
} }

View File

@@ -22,7 +22,7 @@ export class LumeEvent {
return this.tags.filter((tag) => tag[0] === "p").map((tag) => tag[1]); return this.tags.filter((tag) => tag[0] === "p").map((tag) => tag[1]);
} }
static getEventThread(tags: string[][], gossip?: boolean) { static getEventThread(tags: string[][], gossip = true) {
let root: string = null; let root: string = null;
let reply: string = null; let reply: string = null;
@@ -30,14 +30,22 @@ export class LumeEvent {
const events = tags.filter((el) => el[0] === "e" && el[3] !== "mention"); const events = tags.filter((el) => el[0] === "e" && el[3] !== "mention");
if (gossip) { if (gossip) {
const relays = tags.filter((el) => el[0] === "e" && el[2]?.length); const relays = tags
.filter((el) => el[0] === "e" && el[2]?.length)
.map((tag) => tag[2]);
if (relays.length >= 1) { if (relays.length >= 1) {
for (const relay of relays) { for (const relay of relays) {
if (relay[2]?.length) try {
if (relay.length) {
const url = new URL(relay);
commands commands
.connectRelay(relay[2]) .connectRelay(url.toString())
.then(() => console.log("[gossip]: ", relay[2])); .then(() => console.log("[relay hint]: ", url));
}
} catch (e) {
console.log("[relay hint] error: ", relay);
}
} }
} }
} }
@@ -82,6 +90,14 @@ export class LumeEvent {
for (const tag of tags) { for (const tag of tags) {
const rootIndex = events.findIndex((el) => el.id === tag[1]); const rootIndex = events.findIndex((el) => el.id === tag[1]);
// Relay Hint
if (tag[2]?.length) {
const url = new URL(tag[2]);
commands
.connectRelay(url.toString())
.then(() => console.log("[relay hint]: ", url));
}
if (rootIndex !== -1) { if (rootIndex !== -1) {
const rootEvent = events[rootIndex]; const rootEvent = events[rootIndex];

View File

@@ -13,9 +13,8 @@ pub async fn get_event(id: &str, state: State<'_, Nostr>) -> Result<String, Stri
Nip19::Event(event) => { Nip19::Event(event) => {
let relays = event.relays; let relays = event.relays;
for relay in relays.into_iter() { for relay in relays.into_iter() {
let url = Url::from_str(&relay).unwrap(); let _ = client.add_relay(&relay).await.unwrap_or_default();
let _ = client.add_relay(&url).await.unwrap_or_default(); client.connect_relay(&relay).await.unwrap_or_default();
client.connect_relay(&url).await.unwrap_or_default();
} }
Some(event.event_id) Some(event.event_id)
} }

View File

@@ -4,7 +4,6 @@ use keyring::Entry;
use nostr_sdk::prelude::*; use nostr_sdk::prelude::*;
use std::{str::FromStr, time::Duration}; use std::{str::FromStr, time::Duration};
use tauri::State; use tauri::State;
use url::Url;
#[tauri::command] #[tauri::command]
#[specta::specta] #[specta::specta]
@@ -43,7 +42,14 @@ pub async fn get_profile(id: &str, state: State<'_, Nostr>) -> Result<String, St
let public_key: Option<PublicKey> = match Nip19::from_bech32(id) { let public_key: Option<PublicKey> = match Nip19::from_bech32(id) {
Ok(val) => match val { Ok(val) => match val {
Nip19::Pubkey(pubkey) => Some(pubkey), Nip19::Pubkey(pubkey) => Some(pubkey),
Nip19::Profile(profile) => Some(profile.public_key), Nip19::Profile(profile) => {
let relays = profile.relays;
for relay in relays.into_iter() {
let _ = client.add_relay(&relay).await.unwrap_or_default();
client.connect_relay(&relay).await.unwrap_or_default();
}
Some(profile.public_key)
}
_ => None, _ => None,
}, },
Err(_) => match PublicKey::from_str(id) { Err(_) => match PublicKey::from_str(id) {