feat(Relays): added fetching relays on authenticate
This commit is contained in:
parent
bfc00114d6
commit
7068d85821
@ -1,13 +1,18 @@
|
|||||||
import { EventTemplate } from 'nostr-tools'
|
import { EventTemplate } from 'nostr-tools'
|
||||||
import { MetadataController, NostrController } from '.'
|
import { MetadataController, NostrController } from '.'
|
||||||
import { setAuthState, setMetadataEvent } from '../store/actions'
|
import {
|
||||||
|
setAuthState,
|
||||||
|
setMetadataEvent,
|
||||||
|
setRelayMapAction
|
||||||
|
} from '../store/actions'
|
||||||
import store from '../store/store'
|
import store from '../store/store'
|
||||||
import {
|
import {
|
||||||
base64DecodeAuthToken,
|
base64DecodeAuthToken,
|
||||||
base64EncodeSignedEvent,
|
base64EncodeSignedEvent,
|
||||||
getAuthToken,
|
getAuthToken,
|
||||||
getVisitedLink,
|
getVisitedLink,
|
||||||
saveAuthToken
|
saveAuthToken,
|
||||||
|
compareObjects
|
||||||
} from '../utils'
|
} from '../utils'
|
||||||
import { appPrivateRoutes } from '../routes'
|
import { appPrivateRoutes } from '../routes'
|
||||||
import { SignedEvent } from '../types'
|
import { SignedEvent } from '../types'
|
||||||
@ -30,7 +35,7 @@ export class AuthController {
|
|||||||
* @returns url to redirect if authentication successfull
|
* @returns url to redirect if authentication successfull
|
||||||
* or error if otherwise
|
* or error if otherwise
|
||||||
*/
|
*/
|
||||||
async authenticateAndFindMetadata(pubkey: string) {
|
async authAndGetMetadataAndRelaysMap(pubkey: string) {
|
||||||
this.metadataController
|
this.metadataController
|
||||||
.findMetadata(pubkey)
|
.findMetadata(pubkey)
|
||||||
.then((event) => {
|
.then((event) => {
|
||||||
@ -61,6 +66,27 @@ export class AuthController {
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const relaysState = store.getState().relays
|
||||||
|
|
||||||
|
if (relaysState) {
|
||||||
|
// Relays state is defined and there is no need to await for the latest relay map
|
||||||
|
this.nostrController.getRelayMap(pubkey).then((relayMap) => {
|
||||||
|
if (!compareObjects(relaysState?.map, relayMap)) {
|
||||||
|
store.dispatch(setRelayMapAction(relayMap.map))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// Relays state is not defined, await for the latest relay map
|
||||||
|
const relayMap = await this.nostrController.getRelayMap(pubkey)
|
||||||
|
|
||||||
|
if (Object.keys(relayMap).length < 1) {
|
||||||
|
// Navigate user to relays page
|
||||||
|
return Promise.resolve(appPrivateRoutes.relays)
|
||||||
|
}
|
||||||
|
|
||||||
|
store.dispatch(setRelayMapAction(relayMap.map))
|
||||||
|
}
|
||||||
|
|
||||||
const visitedLink = getVisitedLink()
|
const visitedLink = getVisitedLink()
|
||||||
|
|
||||||
if (visitedLink) {
|
if (visitedLink) {
|
||||||
|
@ -54,7 +54,7 @@ export const Login = () => {
|
|||||||
|
|
||||||
setLoadingSpinnerDesc('Authenticating and finding metadata')
|
setLoadingSpinnerDesc('Authenticating and finding metadata')
|
||||||
const redirectPath =
|
const redirectPath =
|
||||||
await authController.authenticateAndFindMetadata(pubkey)
|
await authController.authAndGetMetadataAndRelaysMap(pubkey)
|
||||||
|
|
||||||
navigate(redirectPath)
|
navigate(redirectPath)
|
||||||
})
|
})
|
||||||
@ -93,7 +93,7 @@ export const Login = () => {
|
|||||||
setLoadingSpinnerDesc('Authenticating and finding metadata')
|
setLoadingSpinnerDesc('Authenticating and finding metadata')
|
||||||
|
|
||||||
const redirectPath = await authController
|
const redirectPath = await authController
|
||||||
.authenticateAndFindMetadata(publickey)
|
.authAndGetMetadataAndRelaysMap(publickey)
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
toast.error('Error occurred in authentication: ' + err)
|
toast.error('Error occurred in authentication: ' + err)
|
||||||
return null
|
return null
|
||||||
@ -188,7 +188,7 @@ export const Login = () => {
|
|||||||
setLoadingSpinnerDesc('Authenticating and finding metadata')
|
setLoadingSpinnerDesc('Authenticating and finding metadata')
|
||||||
|
|
||||||
const redirectPath = await authController
|
const redirectPath = await authController
|
||||||
.authenticateAndFindMetadata(pubkey!)
|
.authAndGetMetadataAndRelaysMap(pubkey!)
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
toast.error('Error occurred in authentication: ' + err)
|
toast.error('Error occurred in authentication: ' + err)
|
||||||
return null
|
return null
|
||||||
@ -248,7 +248,7 @@ export const Login = () => {
|
|||||||
setLoadingSpinnerDesc('Authenticating and finding metadata')
|
setLoadingSpinnerDesc('Authenticating and finding metadata')
|
||||||
|
|
||||||
const redirectPath = await authController
|
const redirectPath = await authController
|
||||||
.authenticateAndFindMetadata(pubkey!)
|
.authAndGetMetadataAndRelaysMap(pubkey!)
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
toast.error('Error occurred in authentication: ' + err)
|
toast.error('Error occurred in authentication: ' + err)
|
||||||
return null
|
return null
|
||||||
|
@ -176,6 +176,13 @@ export const RelaysPage = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// Display notification if an empty relay map has been received
|
||||||
|
if (relayMap && Object.keys(relayMap).length === 0) {
|
||||||
|
relayRequirementWarning()
|
||||||
|
}
|
||||||
|
}, [relayMap])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box className={styles.container}>
|
<Box className={styles.container}>
|
||||||
<Box>
|
<Box>
|
||||||
|
Loading…
Reference in New Issue
Block a user