New Release #200
@ -8,7 +8,7 @@
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "tsc && vite build",
|
||||
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 2",
|
||||
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
||||
"lint:fix": "eslint . --fix --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
||||
"lint:staged": "eslint --fix --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
||||
"formatter:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"",
|
||||
|
@ -109,6 +109,7 @@ export const MainLayout = () => {
|
||||
|
||||
if (pubkey && !hasSubscribed.current) {
|
||||
// Call `subscribeForSigits` only if it hasn't been called before
|
||||
// #193 disabled websocket subscribtion, until #194 is done
|
||||
subscribeForSigits(pubkey)
|
||||
|
||||
// Mark `subscribeForSigits` as called
|
||||
|
@ -18,6 +18,10 @@ export interface RestoreState {
|
||||
payload: State
|
||||
}
|
||||
|
||||
export interface UserLogout {
|
||||
type: typeof ActionTypes.USER_LOGOUT
|
||||
}
|
||||
|
||||
export const userLogOutAction = () => {
|
||||
return {
|
||||
type: ActionTypes.USER_LOGOUT
|
||||
|
@ -1,5 +1,5 @@
|
||||
import * as ActionTypes from '../actionTypes'
|
||||
import { RestoreState } from '../actions'
|
||||
import { RestoreState, UserLogout } from '../actions'
|
||||
|
||||
export enum LoginMethods {
|
||||
extension = 'extension',
|
||||
@ -54,3 +54,4 @@ export type AuthDispatchTypes =
|
||||
| UpdateKeyPair
|
||||
| UpdateNsecBunkerPubkey
|
||||
| UpdateNsecBunkerRelays
|
||||
| UserLogout
|
||||
|
@ -3,12 +3,15 @@ import { combineReducers } from 'redux'
|
||||
import { UserAppData } from '../types'
|
||||
import * as ActionTypes from './actionTypes'
|
||||
import authReducer from './auth/reducer'
|
||||
import { AuthState } from './auth/types'
|
||||
import { AuthDispatchTypes, AuthState } from './auth/types'
|
||||
import metadataReducer from './metadata/reducer'
|
||||
import relaysReducer from './relays/reducer'
|
||||
import { RelaysState } from './relays/types'
|
||||
import { RelaysDispatchTypes, RelaysState } from './relays/types'
|
||||
import UserAppDataReducer from './userAppData/reducer'
|
||||
import userRobotImageReducer from './userRobotImage/reducer'
|
||||
import { MetadataDispatchTypes } from './metadata/types'
|
||||
import { UserAppDataDispatchTypes } from './userAppData/types'
|
||||
import { UserRobotImageDispatchTypes } from './userRobotImage/types'
|
||||
|
||||
export interface State {
|
||||
auth: AuthState
|
||||
@ -18,6 +21,13 @@ export interface State {
|
||||
userAppData?: UserAppData
|
||||
}
|
||||
|
||||
type AppActions =
|
||||
| AuthDispatchTypes
|
||||
| MetadataDispatchTypes
|
||||
| UserRobotImageDispatchTypes
|
||||
| RelaysDispatchTypes
|
||||
| UserAppDataDispatchTypes
|
||||
|
||||
export const appReducer = combineReducers({
|
||||
auth: authReducer,
|
||||
metadata: metadataReducer,
|
||||
@ -26,8 +36,10 @@ export const appReducer = combineReducers({
|
||||
userAppData: UserAppDataReducer
|
||||
})
|
||||
|
||||
// FIXME: define types
|
||||
export default (state: any, action: any) => {
|
||||
export default (
|
||||
state: ReturnType<typeof appReducer> | undefined,
|
||||
action: AppActions
|
||||
) => {
|
||||
switch (action.type) {
|
||||
case ActionTypes.USER_LOGOUT:
|
||||
return appReducer(undefined, action)
|
||||
|
@ -1,11 +1,11 @@
|
||||
import * as ActionTypes from '../actionTypes'
|
||||
import { MetadataDispatchTypes } from './types'
|
||||
import { UserRobotImageDispatchTypes } from './types'
|
||||
|
||||
const initialState: string | null = null
|
||||
|
||||
const reducer = (
|
||||
state = initialState,
|
||||
action: MetadataDispatchTypes
|
||||
action: UserRobotImageDispatchTypes
|
||||
): string | null | undefined => {
|
||||
switch (action.type) {
|
||||
case ActionTypes.SET_USER_ROBOT_IMAGE:
|
||||
|
@ -6,4 +6,4 @@ export interface SetUserRobotImage {
|
||||
payload: string | null
|
||||
}
|
||||
|
||||
export type MetadataDispatchTypes = SetUserRobotImage | RestoreState
|
||||
export type UserRobotImageDispatchTypes = SetUserRobotImage | RestoreState
|
||||
|
@ -859,9 +859,16 @@ export const subscribeForSigits = async (pubkey: string) => {
|
||||
'#p': [pubkey]
|
||||
}
|
||||
|
||||
relayController.subscribeForEvents(filter, relaySet.read, (event) => {
|
||||
processReceivedEvent(event) // Process the received event
|
||||
})
|
||||
// Process the received event synchronously
|
||||
const events = await relayController.fetchEvents(filter, relaySet.read)
|
||||
for (const e of events) {
|
||||
await processReceivedEvent(e)
|
||||
}
|
||||
|
||||
// Async processing of the events has a race condition
|
||||
// relayController.subscribeForEvents(filter, relaySet.read, (event) => {
|
||||
// processReceivedEvent(event)
|
||||
// })
|
||||
}
|
||||
|
||||
const processReceivedEvent = async (event: Event, difficulty: number = 5) => {
|
||||
@ -907,7 +914,7 @@ const processReceivedEvent = async (event: Event, difficulty: number = 5) => {
|
||||
|
||||
if (!meta) return
|
||||
|
||||
updateUsersAppData(meta)
|
||||
await updateUsersAppData(meta)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -6,6 +6,7 @@ import { localCache } from '../services'
|
||||
import { RelayMap, RelaySet } from '../types'
|
||||
import {
|
||||
DEFAULT_LOOK_UP_RELAY_LIST,
|
||||
ONE_DAY_IN_MS,
|
||||
ONE_WEEK_IN_MS,
|
||||
SIGIT_RELAY
|
||||
} from './const'
|
||||
@ -56,7 +57,7 @@ const findRelayListInCache = async (hexKey: string): Promise<Event | null> => {
|
||||
// Check if the cached event is not older than one week
|
||||
if (
|
||||
cachedRelayListMetadataEvent &&
|
||||
isOlderThanOneWeek(cachedRelayListMetadataEvent.cachedAt)
|
||||
!isOlderThanOneWeek(cachedRelayListMetadataEvent.cachedAt)
|
||||
) {
|
||||
return cachedRelayListMetadataEvent.event
|
||||
}
|
||||
@ -88,11 +89,11 @@ const getDefaultRelayMap = (): RelayMap => ({
|
||||
})
|
||||
|
||||
const isOlderThanOneWeek = (cachedAt: number) => {
|
||||
return Date.now() - cachedAt < ONE_WEEK_IN_MS
|
||||
return Date.now() - cachedAt > ONE_WEEK_IN_MS
|
||||
}
|
||||
|
||||
const isOlderThanOneDay = (cachedAt: number) => {
|
||||
return Date.now() - cachedAt < ONE_WEEK_IN_MS
|
||||
return Date.now() - cachedAt > ONE_DAY_IN_MS
|
||||
}
|
||||
|
||||
const isRelayTag = (tag: string[]): boolean => tag[0] === 'r'
|
||||
|
Loading…
Reference in New Issue
Block a user