Remove disallow/remember on popup close, add pause before sending auth_url
This commit is contained in:
@@ -172,7 +172,9 @@ export const ModalConfirmConnect = () => {
|
|||||||
if (isPopup) {
|
if (isPopup) {
|
||||||
document.addEventListener('visibilitychange', () => {
|
document.addEventListener('visibilitychange', () => {
|
||||||
if (document.visibilityState === 'hidden') {
|
if (document.visibilityState === 'hidden') {
|
||||||
disallow()
|
// FIXME it should be 'ignore once',
|
||||||
|
// not 'disallow & remember' - this is too strict
|
||||||
|
// disallow()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { DOMAIN } from '@/utils/consts'
|
|||||||
import { fetchNip05 } from '@/utils/helpers/helpers'
|
import { fetchNip05 } from '@/utils/helpers/helpers'
|
||||||
import { Stack, Typography, useTheme } from '@mui/material'
|
import { Stack, Typography, useTheme } from '@mui/material'
|
||||||
import { ChangeEvent, Fragment, useCallback, useEffect, useState } from 'react'
|
import { ChangeEvent, Fragment, useCallback, useEffect, useState } from 'react'
|
||||||
import { useParams, useSearchParams } from 'react-router-dom'
|
import { useParams } from 'react-router-dom'
|
||||||
import { useDebounce } from 'use-debounce'
|
import { useDebounce } from 'use-debounce'
|
||||||
import { StyledSettingContainer } from './styled'
|
import { StyledSettingContainer } from './styled'
|
||||||
import { SectionTitle } from '@/shared/SectionTitle/SectionTitle'
|
import { SectionTitle } from '@/shared/SectionTitle/SectionTitle'
|
||||||
@@ -55,7 +55,7 @@ export const ModalEditName = () => {
|
|||||||
setIsAvailable(true)
|
setIsAvailable(true)
|
||||||
setIsChecking(false)
|
setIsChecking(false)
|
||||||
}
|
}
|
||||||
}, [debouncedName])
|
}, [debouncedName, npub])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
checkIsUsernameAvailable()
|
checkIsUsernameAvailable()
|
||||||
|
|||||||
@@ -693,7 +693,7 @@ export class NoauthBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private getDecision(backend: Nip46Backend, req: DbPending): DECISION {
|
private getDecision(backend: Nip46Backend, req: DbPending): DECISION {
|
||||||
if (!(req.method in backend.handlers)) return DECISION.IGNORE;
|
if (!(req.method in backend.handlers)) return DECISION.IGNORE
|
||||||
|
|
||||||
const reqPerm = getReqPerm(req)
|
const reqPerm = getReqPerm(req)
|
||||||
const appPerms = this.perms.filter((p) => p.npub === req.npub && p.appNpub === req.appNpub)
|
const appPerms = this.perms.filter((p) => p.npub === req.npub && p.appNpub === req.appNpub)
|
||||||
@@ -913,12 +913,22 @@ export class NoauthBackend {
|
|||||||
const confirmMethod = isConnect ? 'confirm-connect' : 'confirm-event'
|
const confirmMethod = isConnect ? 'confirm-connect' : 'confirm-event'
|
||||||
const authUrl = `${self.swg.location.origin}/key/${npub}?${confirmMethod}=true&appNpub=${appNpub}&reqId=${id}&popup=true`
|
const authUrl = `${self.swg.location.origin}/key/${npub}?${confirmMethod}=true&appNpub=${appNpub}&reqId=${id}&popup=true`
|
||||||
console.log('sending authUrl', authUrl, 'for', req)
|
console.log('sending authUrl', authUrl, 'for', req)
|
||||||
|
|
||||||
|
// NOTE: don't send auth_url immediately, wait some time
|
||||||
|
// to make sure other bunkers aren't replying
|
||||||
|
setTimeout(() => {
|
||||||
|
// request still there? (not dropped by the watcher)
|
||||||
|
if (self.confirmBuffer.find((r) => r.req.id === id)) {
|
||||||
// NOTE: if you set 'Update on reload' in the Chrome SW console
|
// NOTE: if you set 'Update on reload' in the Chrome SW console
|
||||||
// then this message will cause a new tab opened by the peer,
|
// then this message will cause a new tab opened by the peer,
|
||||||
// which will cause SW (this code) to reload, to fetch
|
// which will cause SW (this code) to reload, to fetch
|
||||||
// the pending requests and to re-send this event,
|
// the pending requests and to re-send this event,
|
||||||
// looping for 10 seconds (our request age threshold)
|
// looping for 10 seconds (our request age threshold)
|
||||||
backend.rpc.sendResponse(id, remotePubkey, 'auth_url', KIND_RPC, authUrl)
|
backend.rpc.sendResponse(id, remotePubkey, 'auth_url', KIND_RPC, authUrl)
|
||||||
|
} else {
|
||||||
|
console.log("skip sending auth_url")
|
||||||
|
}
|
||||||
|
}, 500)
|
||||||
|
|
||||||
// show notifs
|
// show notifs
|
||||||
// this.notify()
|
// this.notify()
|
||||||
@@ -941,6 +951,8 @@ export class NoauthBackend {
|
|||||||
const backend = new Nip46Backend(ndk, signer, this.allowPermitCallback.bind(this)) // , () => Promise.resolve(true)
|
const backend = new Nip46Backend(ndk, signer, this.allowPermitCallback.bind(this)) // , () => Promise.resolve(true)
|
||||||
const watcher = new Watcher(ndk, signer, (id) => {
|
const watcher = new Watcher(ndk, signer, (id) => {
|
||||||
// drop pending request
|
// drop pending request
|
||||||
|
const index = self.confirmBuffer.findIndex((r) => r.req.id === id)
|
||||||
|
if (index >= 0) self.confirmBuffer.splice(index, 1)
|
||||||
dbi.removePending(id).then(() => this.updateUI())
|
dbi.removePending(id).then(() => this.updateUI())
|
||||||
})
|
})
|
||||||
this.keys.push({ npub, backend, signer, ndk, backoff, watcher })
|
this.keys.push({ npub, backend, signer, ndk, backoff, watcher })
|
||||||
@@ -1156,7 +1168,7 @@ export class NoauthBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async editName(npub: string, name: string) {
|
private async editName(npub: string, name: string) {
|
||||||
const key = this.enckeys.find((k) => k.npub == npub)
|
const key = this.enckeys.find((k) => k.npub === npub)
|
||||||
if (!key) throw new Error('Npub not found')
|
if (!key) throw new Error('Npub not found')
|
||||||
if (key.name) {
|
if (key.name) {
|
||||||
try {
|
try {
|
||||||
@@ -1175,10 +1187,10 @@ export class NoauthBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async transferName(npub: string, name: string, newNpub: string) {
|
private async transferName(npub: string, name: string, newNpub: string) {
|
||||||
const key = this.enckeys.find(k => k.npub === npub)
|
const key = this.enckeys.find((k) => k.npub === npub)
|
||||||
if (!key) throw new Error("Npub not found")
|
if (!key) throw new Error('Npub not found')
|
||||||
if (!name) throw new Error("Empty name")
|
if (!name) throw new Error('Empty name')
|
||||||
if (key.name !== name) throw new Error("Name changed, please reload")
|
if (key.name !== name) throw new Error('Name changed, please reload')
|
||||||
await this.sendTransferNameToServer(npub, key.name, newNpub)
|
await this.sendTransferNameToServer(npub, key.name, newNpub)
|
||||||
await dbi.editName(npub, '')
|
await dbi.editName(npub, '')
|
||||||
key.name = ''
|
key.name = ''
|
||||||
|
|||||||
Reference in New Issue
Block a user