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