Speed up initial login
This commit is contained in:
+12
-7
@@ -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
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user