Handle invalid bunker url, update synced stores

This commit is contained in:
Jon Staab
2025-07-15 11:06:47 -07:00
parent e2a0672ca5
commit 6f6bb508db
6 changed files with 61 additions and 19 deletions

View File

@@ -52,7 +52,7 @@
alt="Link preview"
onerror={onError}
src={imgproxy(preview.image)}
class="bg-alt max-h-72 object-contain object-center" />
class="bg-alt max-h-72 rounded-t-box object-contain object-center" />
{/if}
<div class="flex flex-col gap-2 p-4">
<strong class="overflow-hidden text-ellipsis whitespace-nowrap"

View File

@@ -33,18 +33,20 @@
const onSubmit = async () => {
if (controller.loading) return
const {signerPubkey, connectSecret, relays} = Nip46Broker.parseBunkerUrl(controller.bunker)
if (!signerPubkey || relays.length === 0) {
return pushToast({
theme: "error",
message: "Sorry, it looks like that's an invalid bunker link.",
})
}
controller.loading = true
try {
const {signerPubkey, connectSecret, relays} = Nip46Broker.parseBunkerUrl(controller.bunker)
console.log({signerPubkey, connectSecret, relays})
if (!signerPubkey || relays.length === 0) {
return pushToast({
theme: "error",
message: "Sorry, it looks like that's an invalid bunker link.",
})
}
controller.loading = true
const {clientSecret} = controller
const broker = new Nip46Broker({relays, clientSecret, signerPubkey})
const result = await broker.connect(connectSecret, NIP46_PERMS)
@@ -64,6 +66,13 @@
message: "Something went wrong, please try again!",
})
}
} catch (e) {
console.error(e)
return pushToast({
theme: "error",
message: "Something went wrong, please try again!",
})
} finally {
controller.loading = false
}

View File

@@ -1,5 +1,5 @@
import {derived} from "svelte/store"
import {synced, throttled} from "@welshman/store"
import {synced, localStorageProvider, throttled} from "@welshman/store"
import {pubkey} from "@welshman/app"
import {prop, spec, identity, now, groupBy} from "@welshman/lib"
import type {TrustedEvent} from "@welshman/util"
@@ -16,7 +16,11 @@ import {chats, getUrlsForEvent, userRoomsByUrl, repositoryStore} from "@app/stat
// Checked state
export const checked = synced<Record<string, number>>("checked", {})
export const checked = synced<Record<string, number>>({
key: "checked",
defaultValue: {},
storage: localStorageProvider,
})
export const deriveChecked = (key: string) => derived(checked, prop(key))

View File

@@ -30,6 +30,7 @@ import {
deriveEventsMapped,
withGetter,
synced,
localStorageProvider,
} from "@welshman/store"
import {
getIdFilters,
@@ -302,7 +303,11 @@ routerContext.getIndexerRelays = always(INDEXER_RELAYS)
// Settings
export const canDecrypt = synced("canDecrypt", false)
export const canDecrypt = synced({
key: "canDecrypt",
defaultValue: false,
storage: localStorageProvider,
})
export const SETTINGS = 38489
@@ -376,7 +381,11 @@ export type Wallet =
info: NWCInfo
}
export const wallet = synced<Wallet | undefined>("wallet", undefined)
export const wallet = synced<Wallet | undefined>({
key: "wallet",
defaultValue: undefined,
storage: localStorageProvider,
})
export const getWebLn = () => (window as any).webln

View File

@@ -1,3 +1,7 @@
import {synced} from "@welshman/store"
import {synced, localStorageProvider} from "@welshman/store"
export const theme = synced<string>("theme", "dark")
export const theme = synced({
key: "theme",
defaultValue: "dark",
storage: localStorageProvider,
})

View File

@@ -7,6 +7,7 @@
import {App} from "@capacitor/app"
import {dev} from "$app/environment"
import {goto} from "$app/navigation"
import {sync, localStorageProvider} from "@welshman/store"
import {identity, memoize, sleep, defer, ago, WEEK, TaskQueue} from "@welshman/lib"
import type {TrustedEvent, StampedEvent} from "@welshman/util"
import {
@@ -33,10 +34,11 @@
initStorage,
repository,
pubkey,
defaultStorageAdapters,
session,
sessions,
signer,
dropSession,
defaultStorageAdapters,
userInboxRelaySelections,
loginWithNip01,
loginWithNip46,
@@ -178,6 +180,20 @@
}
})
// Sync current pubkey
sync({
key: "pubkey",
store: pubkey,
storage: localStorageProvider,
})
// Sync user sessions
sync({
key: "sessions",
store: sessions,
storage: localStorageProvider,
})
await initStorage("flotilla", 8, {
...defaultStorageAdapters,
events: new EventsStorageAdapter({