Speed up initial login

This commit is contained in:
Jon Staab
2024-12-03 16:18:36 -08:00
parent 1ea39c1d56
commit efb0528f76
5 changed files with 38 additions and 31 deletions
+12 -7
View File
@@ -140,6 +140,8 @@ export const loginWithNip46 = async ({
if (!pubkey) return false
await loadUserData(pubkey)
const handler = {relays, pubkey: signerPubkey}
addSession({method: "nip46", pubkey, secret: clientSecret, handler})
@@ -153,13 +155,16 @@ export const loadUserData = (
pubkey: string,
request: Partial<SubscribeRequestWithHandlers> = {},
) => {
const promise = Promise.all([
loadInboxRelaySelections(pubkey, request),
loadMembership(pubkey, request),
loadSettings(pubkey, request),
loadProfile(pubkey, request),
loadFollows(pubkey, request),
loadMutes(pubkey, request),
const promise = Promise.race([
sleep(3000),
Promise.all([
loadInboxRelaySelections(pubkey, request),
loadMembership(pubkey, request),
loadSettings(pubkey, request),
loadProfile(pubkey, request),
loadFollows(pubkey, request),
loadMutes(pubkey, request),
]),
])
// Load followed profiles slowly in the background without clogging other stuff up
+11 -12
View File
@@ -20,28 +20,27 @@
const signUp = () => pushModal(SignUp)
const withLoading =
(cb: (...args: any[]) => any) =>
(s: string, cb: (...args: any[]) => any) =>
async (...args: any[]) => {
loading = true
loading = s
try {
await cb(...args)
} finally {
loading = false
loading = undefined
}
}
const onSuccess = async (session: Session, relays: string[] = []) => {
addSession(session)
await loadUserData(session.pubkey, {relays})
addSession(session)
pushToast({message: "Successfully logged in!"})
setChecked("*")
clearModals()
}
const loginWithNip07 = withLoading(async () => {
const loginWithNip07 = withLoading("nip07", async () => {
const pubkey = await getNip07()?.getPublicKey()
if (pubkey) {
@@ -54,7 +53,7 @@
}
})
const loginWithSigner = withLoading(async (app: any) => {
const loginWithNip55 = withLoading("nip55", async (app: any) => {
const signer = new Nip55Signer(app.packageName)
const pubkey = await signer.getPubkey()
@@ -72,8 +71,8 @@
const loginWithBunker = () => pushModal(LogInBunker)
let loading = false
let signers: any[] = []
let loading: string | undefined
let hasNativeSigner = Boolean(getNip07())
onMount(async () => {
@@ -96,7 +95,7 @@
</p>
{#if BURROW_URL}
<Button disabled={loading} on:click={loginWithPassword} class="btn btn-primary">
{#if loading}
{#if loading === "password"}
<span class="loading loading-spinner mr-3" />
{:else}
<Icon icon="key" />
@@ -109,7 +108,7 @@
disabled={loading}
on:click={loginWithNip07}
class={cx("btn", {"btn-primary": !BURROW_URL, "btn-neutral": BURROW_URL})}>
{#if loading}
{#if loading === "nip07"}
<span class="loading loading-spinner mr-3" />
{:else}
<Icon icon="widget" />
@@ -121,8 +120,8 @@
<Button
disabled={loading}
class={cx("btn", {"btn-primary": !BURROW_URL, "btn-neutral": BURROW_URL})}
on:click={() => loginWithSigner(app)}>
{#if loading}
on:click={() => loginWithNip55(app)}>
{#if loading === "nip55"}
<span class="loading loading-spinner mr-3" />
{:else}
<img src={app.iconUrl} alt={app.name} width="20" height="20" />
+6 -6
View File
@@ -1,7 +1,7 @@
<script lang="ts">
import {onMount, onDestroy} from "svelte"
import {Nip46Broker, makeSecret} from "@welshman/signer"
import {addSession, pubkey} from "@welshman/app"
import {addSession} from "@welshman/app"
import {slideAndFade} from "@lib/transition"
import Spinner from "@lib/components/Spinner.svelte"
import Button from "@lib/components/Button.svelte"
@@ -42,10 +42,10 @@
loading = true
try {
if (await loginWithNip46({connectSecret, clientSecret, signerPubkey, relays})) {
abortController.abort()
const success = await loginWithNip46({connectSecret, clientSecret, signerPubkey, relays})
await loadUserData($pubkey!)
if (success) {
abortController.abort()
} else {
return pushToast({
theme: "error",
@@ -90,6 +90,8 @@
const userPubkey = await broker.getPublicKey()
await loadUserData(userPubkey)
addSession({
method: "nip46",
pubkey: userPubkey,
@@ -100,8 +102,6 @@
},
})
await loadUserData(userPubkey)
setChecked("*")
clearModals()
}
+6 -3
View File
@@ -25,7 +25,9 @@
const abortController = new AbortController()
const relays = [normalizeRelayUrl("ws://" + stripProtocol(BURROW_URL))]
const relays = BURROW_URL.startsWith('http://')
? [normalizeRelayUrl("ws://" + stripProtocol(BURROW_URL))]
: [normalizeRelayUrl(BURROW_URL)]
const broker = Nip46Broker.get({clientSecret, relays})
@@ -78,15 +80,16 @@
const userPubkey = await broker.getPublicKey()
await loadUserData(userPubkey)
addSession({
email,
method: "nip46",
pubkey: userPubkey,
secret: clientSecret,
handler: {pubkey: response.event.pubkey, relays},
})
await loadUserData(userPubkey)
setChecked("*")
clearModals()
}
+3 -3
View File
@@ -1,7 +1,7 @@
<script lang="ts">
import {postJson} from "@welshman/lib"
import {postJson, assoc} from "@welshman/lib"
import {makeSecret, Nip46Broker} from "@welshman/signer"
import {loadHandle} from "@welshman/app"
import {pubkey, loadHandle, updateSession} from "@welshman/app"
import Icon from "@lib/components/Icon.svelte"
import Field from "@lib/components/Field.svelte"
import FieldInline from "@lib/components/FieldInline.svelte"
@@ -49,7 +49,6 @@
})
const signupNsecApp = withLoading(async () => {
const secret = makeSecret()
const handle = await loadHandle(`${username}@${signerDomain}`)
if (handle?.pubkey) {
@@ -86,6 +85,7 @@
})
}
updateSession($pubkey!, assoc("email", email))
pushToast({message: "Successfully logged in!"})
setChecked("*")
clearModals()