From 4db83605288cecd6a62a270d351b693286efdd0e Mon Sep 17 00:00:00 2001 From: Kevin Szuchet Date: Wed, 9 Aug 2023 11:00:53 +0200 Subject: [PATCH] style: eslint auto fixes --- src/components/Modals/index.ts | 2 +- src/components/PageLayout/PageLayout.tsx | 8 +-- .../Pages/Conference/Conference.container.ts | 36 ++++++------- .../Pages/Conference/Conference.tsx | 12 ++--- .../Pages/Conference/Conference.types.ts | 6 +-- src/components/Pages/Conference/index.ts | 2 +- .../VideoConference/Videoconference.tsx | 43 +++++++-------- src/main.tsx | 48 ++++++++--------- src/modules/conference/action.ts | 6 +-- src/modules/conference/reducer.ts | 10 ++-- src/modules/conference/selector.ts | 6 +-- src/modules/reducer.ts | 43 ++++++--------- src/modules/routing/locations.ts | 6 +-- src/modules/saga.ts | 30 +++++------ src/modules/store.ts | 28 +++++----- src/tests/store.ts | 29 +++++----- src/utils/auth.ts | 54 +++++++------------ src/utils/client-utils.ts | 8 +-- src/utils/flat-fetch.ts | 10 ++-- src/utils/server-utils.ts | 16 +++--- src/utils/types.ts | 2 +- 21 files changed, 181 insertions(+), 224 deletions(-) diff --git a/src/components/Modals/index.ts b/src/components/Modals/index.ts index 9a65e38..69add33 100644 --- a/src/components/Modals/index.ts +++ b/src/components/Modals/index.ts @@ -1 +1 @@ -export { default as LoginModal } from "decentraland-dapps/dist/containers/LoginModal" +export { default as LoginModal } from 'decentraland-dapps/dist/containers/LoginModal' diff --git a/src/components/PageLayout/PageLayout.tsx b/src/components/PageLayout/PageLayout.tsx index f3627d3..1a3a0de 100644 --- a/src/components/PageLayout/PageLayout.tsx +++ b/src/components/PageLayout/PageLayout.tsx @@ -1,7 +1,7 @@ -import React from "react" -import classNames from "classnames" -import { Props } from "./PageLayout.types" -import styles from "./PageLayout.module.css" +import React from 'react' +import classNames from 'classnames' +import { Props } from './PageLayout.types' +import styles from './PageLayout.module.css' const PageLayout = ({ children, className }: Props) => { return ( diff --git a/src/components/Pages/Conference/Conference.container.ts b/src/components/Pages/Conference/Conference.container.ts index 0aeb35b..0be1522 100644 --- a/src/components/Pages/Conference/Conference.container.ts +++ b/src/components/Pages/Conference/Conference.container.ts @@ -1,30 +1,24 @@ -import { connect } from "react-redux"; -import { - getAddress, - isConnecting, -} from "decentraland-dapps/dist/modules/wallet/selectors"; -import { isLoggingIn } from "../../../modules/identity/selector"; -import { getServer, getToken } from "../../../modules/conference/selector"; -import { RootState } from "../../../modules/reducer"; -import withRouter from "../../../utils/WithRouter"; -import Conference from "./Conference"; -import { MapDispatch, MapStateProps, OwnProps } from "./Conference.types"; +import { connect } from 'react-redux' +import { getAddress, isConnecting } from 'decentraland-dapps/dist/modules/wallet/selectors' +import { getServer, getToken } from '../../../modules/conference/selector' +import { isLoggingIn } from '../../../modules/identity/selector' +import { RootState } from '../../../modules/reducer' +import withRouter from '../../../utils/WithRouter' +import Conference from './Conference' +import { MapDispatch, MapStateProps, OwnProps } from './Conference.types' -const mapStateToProps = ( - state: RootState, - ownProps: OwnProps -): MapStateProps => { - const addressFromPath = ownProps.router.params.profileAddress; +const mapStateToProps = (state: RootState, ownProps: OwnProps): MapStateProps => { + const addressFromPath = ownProps.router.params.profileAddress return { profileAddress: addressFromPath?.toLowerCase(), isLoading: isLoggingIn(state) || isConnecting(state), loggedInAddress: getAddress(state)?.toLowerCase(), server: getServer(state), - token: getToken(state), - }; -}; + token: getToken(state) + } +} -const mapDispatch = (_dispatch: MapDispatch): any => ({}); +const mapDispatch = (_dispatch: MapDispatch): any => ({}) -export default withRouter(connect(mapStateToProps, mapDispatch)(Conference)); +export default withRouter(connect(mapStateToProps, mapDispatch)(Conference)) diff --git a/src/components/Pages/Conference/Conference.tsx b/src/components/Pages/Conference/Conference.tsx index 12cb3ed..774ca10 100644 --- a/src/components/Pages/Conference/Conference.tsx +++ b/src/components/Pages/Conference/Conference.tsx @@ -1,9 +1,9 @@ -import React from "react" -import { Props } from "./Conference.types" -import { LiveKitRoom } from "@livekit/components-react" -import { VideoConference } from "../../VideoConference/Videoconference" -import "@livekit/components-styles" -import "./Conference.css" +import React from 'react' +import { LiveKitRoom } from '@livekit/components-react' +import '@livekit/components-styles' +import { VideoConference } from '../../VideoConference/Videoconference' +import { Props } from './Conference.types' +import './Conference.css' export default function Conference(props: Props) { const { token, server } = props diff --git a/src/components/Pages/Conference/Conference.types.ts b/src/components/Pages/Conference/Conference.types.ts index 5038d25..6482362 100644 --- a/src/components/Pages/Conference/Conference.types.ts +++ b/src/components/Pages/Conference/Conference.types.ts @@ -1,5 +1,5 @@ -import { Dispatch } from "redux" -import { RouterProps } from "../../../utils/WithRouter" +import { Dispatch } from 'redux' +import { RouterProps } from '../../../utils/WithRouter' export type Props = { loggedInAddress?: string @@ -9,7 +9,7 @@ export type Props = { token?: string } -export type MapStateProps = Pick +export type MapStateProps = Pick export type MapDispatch = Dispatch type Params = { profileAddress?: string diff --git a/src/components/Pages/Conference/index.ts b/src/components/Pages/Conference/index.ts index 8316fe6..4055dbc 100644 --- a/src/components/Pages/Conference/index.ts +++ b/src/components/Pages/Conference/index.ts @@ -1,2 +1,2 @@ -import Conference from "./Conference.container" +import Conference from './Conference.container' export default Conference diff --git a/src/components/VideoConference/Videoconference.tsx b/src/components/VideoConference/Videoconference.tsx index 6663cd1..4cec714 100644 --- a/src/components/VideoConference/Videoconference.tsx +++ b/src/components/VideoConference/Videoconference.tsx @@ -1,8 +1,5 @@ -import * as React from "react" -import type { WidgetState } from "@livekit/components-core" -import { isEqualTrackRef, isTrackReference, log, isWeb } from "@livekit/components-core" -import { RoomEvent, Track } from "livekit-client" -import type { TrackReferenceOrPlaceholder } from "@livekit/components-core" +import * as React from 'react' +import { isEqualTrackRef, isTrackReference, log, isWeb } from '@livekit/components-core' import { CarouselView, Chat, @@ -17,9 +14,11 @@ import { useCreateLayoutContext, useParticipants, usePinnedTracks, - useTracks, -} from "@livekit/components-react" -import { ParticipantTile } from "./ParticipantTile" + useTracks +} from '@livekit/components-react' +import { RoomEvent, Track } from 'livekit-client' +import { ParticipantTile } from './ParticipantTile' +import type { TrackReferenceOrPlaceholder, WidgetState } from '@livekit/components-core' /** * @public @@ -51,46 +50,42 @@ export function VideoConference({ chatMessageFormatter, ...props }: VideoConfere const tracks = useTracks( [ { source: Track.Source.Camera, withPlaceholder: true }, - { source: Track.Source.ScreenShare, withPlaceholder: false }, + { source: Track.Source.ScreenShare, withPlaceholder: false } ], { updateOnlyOn: [RoomEvent.ActiveSpeakersChanged] } ) const participants = useParticipants({ - updateOnlyOn: [RoomEvent.ParticipantConnected, RoomEvent.ParticipantDisconnected], + updateOnlyOn: [RoomEvent.ParticipantConnected, RoomEvent.ParticipantDisconnected] }) const widgetUpdate = (state: WidgetState) => { - log.debug("updating widget state", state) + log.debug('updating widget state', state) setWidgetState(state) } const layoutContext = useCreateLayoutContext() - const screenShareTracks = tracks - .filter(isTrackReference) - .filter((track) => track.publication.source === Track.Source.ScreenShare) + const screenShareTracks = tracks.filter(isTrackReference).filter(track => track.publication.source === Track.Source.ScreenShare) const focusTrack = usePinnedTracks(layoutContext)?.[0] - const carouselTracks = tracks.filter((track) => !isEqualTrackRef(track, focusTrack)) + const carouselTracks = tracks.filter(track => !isEqualTrackRef(track, focusTrack)) React.useEffect(() => { // If screen share tracks are published, and no pin is set explicitly, auto set the screen share. if (screenShareTracks.length > 0 && lastAutoFocusedScreenShareTrack.current === null) { - log.debug("Auto set screen share focus:", { newScreenShareTrack: screenShareTracks[0] }) - layoutContext.pin.dispatch?.({ msg: "set_pin", trackReference: screenShareTracks[0] }) + log.debug('Auto set screen share focus:', { newScreenShareTrack: screenShareTracks[0] }) + layoutContext.pin.dispatch?.({ msg: 'set_pin', trackReference: screenShareTracks[0] }) lastAutoFocusedScreenShareTrack.current = screenShareTracks[0] } else if ( lastAutoFocusedScreenShareTrack.current && - !screenShareTracks.some( - (track) => track.publication.trackSid === lastAutoFocusedScreenShareTrack.current?.publication?.trackSid - ) + !screenShareTracks.some(track => track.publication.trackSid === lastAutoFocusedScreenShareTrack.current?.publication?.trackSid) ) { - log.debug("Auto clearing screen share focus.") - layoutContext.pin.dispatch?.({ msg: "clear_pin" }) + log.debug('Auto clearing screen share focus.') + layoutContext.pin.dispatch?.({ msg: 'clear_pin' }) lastAutoFocusedScreenShareTrack.current = null } - }, [screenShareTracks.map((ref) => ref.publication.trackSid).join(), focusTrack?.publication?.trackSid]) + }, [screenShareTracks.map(ref => ref.publication.trackSid).join(), focusTrack?.publication?.trackSid]) return (
@@ -119,7 +114,7 @@ export function VideoConference({ chatMessageFormatter, ...props }: VideoConfere )}
- + )} diff --git a/src/main.tsx b/src/main.tsx index 2904a85..88c438c 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,35 +1,35 @@ /* eslint-disable import/order */ -import "semantic-ui-css/semantic.min.css" -import React from "react" -import ReactDOM from "react-dom" -import { Provider } from "react-redux" -import { RouterProvider, createBrowserRouter } from "react-router-dom" -import ModalProvider from "decentraland-dapps/dist/providers/ModalProvider" -import TranslationProvider from "decentraland-dapps/dist/providers/TranslationProvider" -import WalletProvider from "decentraland-dapps/dist/providers/WalletProvider" -import * as modals from "./components/Modals" -import ConnectToWorld from "./components/Pages/ConnectToWorld" -import SignInPage from "./components/Pages/SignInPage" -import { initStore } from "./modules/store" -import * as locales from "./modules/translation/locales" -import Conference from "./components/Pages/Conference" +import 'semantic-ui-css/semantic.min.css' +import React from 'react' +import ReactDOM from 'react-dom' +import { Provider } from 'react-redux' +import { RouterProvider, createBrowserRouter } from 'react-router-dom' +import ModalProvider from 'decentraland-dapps/dist/providers/ModalProvider' +import TranslationProvider from 'decentraland-dapps/dist/providers/TranslationProvider' +import WalletProvider from 'decentraland-dapps/dist/providers/WalletProvider' +import * as modals from './components/Modals' +import ConnectToWorld from './components/Pages/ConnectToWorld' +import SignInPage from './components/Pages/SignInPage' +import { initStore } from './modules/store' +import * as locales from './modules/translation/locales' +import Conference from './components/Pages/Conference' // These CSS styles must be defined last to avoid overriding other styles -import "decentraland-ui/dist/themes/alternative/light-theme.css" -import "./index.css" +import 'decentraland-ui/dist/themes/alternative/light-theme.css' +import './index.css' const router = createBrowserRouter([ { - path: "/", - element: , + path: '/', + element: }, { - path: "sign-in", - element: , + path: 'sign-in', + element: }, { - path: "/meet/:server", - element: , - }, + path: '/meet/:server', + element: + } ]) const component = ( @@ -46,4 +46,4 @@ const component = ( ) -ReactDOM.render(component, document.getElementById("root") as HTMLElement) +ReactDOM.render(component, document.getElementById('root') as HTMLElement) diff --git a/src/modules/conference/action.ts b/src/modules/conference/action.ts index 399624e..034e6ff 100644 --- a/src/modules/conference/action.ts +++ b/src/modules/conference/action.ts @@ -1,9 +1,9 @@ -import { createAction } from "@reduxjs/toolkit" +import { createAction } from '@reduxjs/toolkit' -export const setServer = createAction<{ server: string }>("Set Server") +export const setServer = createAction<{ server: string }>('Set Server') export type SetServerAction = ReturnType -export const setToken = createAction<{ token: string }>("Set Token") +export const setToken = createAction<{ token: string }>('Set Token') export type SetTokenAction = ReturnType diff --git a/src/modules/conference/reducer.ts b/src/modules/conference/reducer.ts index 57197e5..c644e52 100644 --- a/src/modules/conference/reducer.ts +++ b/src/modules/conference/reducer.ts @@ -1,5 +1,5 @@ -import { createReducer } from "@reduxjs/toolkit" -import { setServer, setToken } from "./action" +import { createReducer } from '@reduxjs/toolkit' +import { setServer, setToken } from './action' export type ConferenceState = { token: string @@ -7,11 +7,11 @@ export type ConferenceState = { } export const INITIAL_STATE: ConferenceState = { - token: "", - server: "", + token: '', + server: '' } -export const conferenceReducer = createReducer(INITIAL_STATE, (builder) => +export const conferenceReducer = createReducer(INITIAL_STATE, builder => builder .addCase(setServer, (state, action) => { state.server = action.payload.server diff --git a/src/modules/conference/selector.ts b/src/modules/conference/selector.ts index 1fb1729..aa447d6 100644 --- a/src/modules/conference/selector.ts +++ b/src/modules/conference/selector.ts @@ -1,9 +1,9 @@ -import { createSelector } from "@reduxjs/toolkit" -import { RootState } from "../reducer" +import { createSelector } from '@reduxjs/toolkit' +import { RootState } from '../reducer' const getState = (state: RootState) => state.conference export const getToken = (state: RootState) => getState(state).token export const getServer = (state: RootState) => getState(state).server -export const isLoading = createSelector([getToken], (token) => !!token) +export const isLoading = createSelector([getToken], token => !!token) diff --git a/src/modules/reducer.ts b/src/modules/reducer.ts index eb6214a..b489d63 100644 --- a/src/modules/reducer.ts +++ b/src/modules/reducer.ts @@ -1,19 +1,12 @@ -import { configureStore, Reducer, Middleware, AnyAction, combineReducers, Store } from "@reduxjs/toolkit" -import { FeaturesState, featuresReducer as features } from "decentraland-dapps/dist/modules/features/reducer" -import { ModalState, modalReducer as modal } from "decentraland-dapps/dist/modules/modal/reducer" -import { ProfileState, profileReducer as profile } from "decentraland-dapps/dist/modules/profile/reducer" -import { - StorageState, - storageReducer as storage, - storageReducerWrapper, -} from "decentraland-dapps/dist/modules/storage/reducer" -import { - TranslationState, - translationReducer as translation, -} from "decentraland-dapps/dist/modules/translation/reducer" -import { WalletState, walletReducer as wallet } from "decentraland-dapps/dist/modules/wallet/reducer" -import { IdentityState, identityReducer as identity } from "./identity/reducer" -import { ConferenceState, conferenceReducer as conference } from "./conference/reducer" +import { configureStore, Reducer, Middleware, AnyAction, combineReducers, Store } from '@reduxjs/toolkit' +import { FeaturesState, featuresReducer as features } from 'decentraland-dapps/dist/modules/features/reducer' +import { ModalState, modalReducer as modal } from 'decentraland-dapps/dist/modules/modal/reducer' +import { ProfileState, profileReducer as profile } from 'decentraland-dapps/dist/modules/profile/reducer' +import { StorageState, storageReducer as storage, storageReducerWrapper } from 'decentraland-dapps/dist/modules/storage/reducer' +import { TranslationState, translationReducer as translation } from 'decentraland-dapps/dist/modules/translation/reducer' +import { WalletState, walletReducer as wallet } from 'decentraland-dapps/dist/modules/wallet/reducer' +import { ConferenceState, conferenceReducer as conference } from './conference/reducer' +import { IdentityState, identityReducer as identity } from './identity/reducer' export const createRootReducer = (middlewares: Middleware[], preloadedState = {}) => configureStore({ @@ -26,25 +19,19 @@ export const createRootReducer = (middlewares: Middleware[], preloadedState = {} translation: translation as Reducer, profile, identity, - conference, + conference }) ), preloadedState, - middleware: (getDefaultMiddleware) => + middleware: getDefaultMiddleware => getDefaultMiddleware({ thunk: false, serializableCheck: { // Ignore these action types - ignoredActions: [ - "[Request] Login", - "[Success] Login", - "Open modal", - "REDUX_PERSISTENCE_SAVE", - "REDUX_PERSISTENCE_LOAD", - ], - ignoredPaths: ["modal", "identity"], - }, - }).concat(middlewares), + ignoredActions: ['[Request] Login', '[Success] Login', 'Open modal', 'REDUX_PERSISTENCE_SAVE', 'REDUX_PERSISTENCE_LOAD'], + ignoredPaths: ['modal', 'identity'] + } + }).concat(middlewares) }) // We need to build the Store type manually due to the storageReducerWrapper function not propagating the type correctly diff --git a/src/modules/routing/locations.ts b/src/modules/routing/locations.ts index 27b8cb7..d59e686 100644 --- a/src/modules/routing/locations.ts +++ b/src/modules/routing/locations.ts @@ -1,8 +1,8 @@ export const locations = { - root: () => "/", + root: () => '/', account: (address: string) => `/accounts/${address}`, signIn: (redirectTo?: string) => { - return `/sign-in${redirectTo ? `?redirectTo=${encodeURIComponent(redirectTo)}` : ""}` + return `/sign-in${redirectTo ? `?redirectTo=${encodeURIComponent(redirectTo)}` : ''}` }, - meet: (server: string, token: string) => `/meet/${server}?token${token}`, + meet: (server: string, token: string) => `/meet/${server}?token${token}` } diff --git a/src/modules/saga.ts b/src/modules/saga.ts index eb6a22b..2f065e9 100644 --- a/src/modules/saga.ts +++ b/src/modules/saga.ts @@ -1,12 +1,12 @@ -import { all } from "redux-saga/effects" -import { createAnalyticsSaga } from "decentraland-dapps/dist/modules/analytics/sagas" -import { featuresSaga } from "decentraland-dapps/dist/modules/features/sagas" -import { createProfileSaga } from "decentraland-dapps/dist/modules/profile/sagas" -import { createWalletSaga } from "decentraland-dapps/dist/modules/wallet/sagas" -import { config } from "./config" -import { identitySaga } from "./identity/sagas" -import { modalSagas } from "./modal/sagas" -import { translationSaga } from "./translation/sagas" +import { all } from 'redux-saga/effects' +import { createAnalyticsSaga } from 'decentraland-dapps/dist/modules/analytics/sagas' +import { featuresSaga } from 'decentraland-dapps/dist/modules/features/sagas' +import { createProfileSaga } from 'decentraland-dapps/dist/modules/profile/sagas' +import { createWalletSaga } from 'decentraland-dapps/dist/modules/wallet/sagas' +import { config } from './config' +import { identitySaga } from './identity/sagas' +import { modalSagas } from './modal/sagas' +import { translationSaga } from './translation/sagas' const analyticsSaga = createAnalyticsSaga() @@ -15,23 +15,23 @@ export function* rootSaga() { analyticsSaga(), createWalletSaga({ // eslint-disable-next-line @typescript-eslint/naming-convention - CHAIN_ID: Number(config.get("CHAIN_ID")), + CHAIN_ID: Number(config.get('CHAIN_ID')), // eslint-disable-next-line @typescript-eslint/naming-convention POLL_INTERVAL: 0, // eslint-disable-next-line @typescript-eslint/naming-convention - TRANSACTIONS_API_URL: "https://transactions-api.decentraland.org/v1", + TRANSACTIONS_API_URL: 'https://transactions-api.decentraland.org/v1' })(), translationSaga(), identitySaga(), modalSagas(), - createProfileSaga({ peerUrl: config.get("PEER_URL") })(), + createProfileSaga({ peerUrl: config.get('PEER_URL') })(), featuresSaga({ polling: { apps: [ /* Application name here */ ], - delay: 60000 /** 60 seconds */, - }, - }), + delay: 60000 /** 60 seconds */ + } + }) ]) } diff --git a/src/modules/store.ts b/src/modules/store.ts index 61f91b9..bc7547a 100644 --- a/src/modules/store.ts +++ b/src/modules/store.ts @@ -1,25 +1,25 @@ -import { createLogger } from "redux-logger" -import createSagasMiddleware from "redux-saga" -import { Env } from "@dcl/ui-env" -import { createAnalyticsMiddleware } from "decentraland-dapps/dist/modules/analytics/middleware" -import { createStorageMiddleware } from "decentraland-dapps/dist/modules/storage/middleware" -import { config } from "./config" -import { createRootReducer } from "./reducer" -import { rootSaga } from "./saga" +import { createLogger } from 'redux-logger' +import createSagasMiddleware from 'redux-saga' +import { Env } from '@dcl/ui-env' +import { createAnalyticsMiddleware } from 'decentraland-dapps/dist/modules/analytics/middleware' +import { createStorageMiddleware } from 'decentraland-dapps/dist/modules/storage/middleware' +import { config } from './config' +import { createRootReducer } from './reducer' +import { rootSaga } from './saga' export function initStore() { const sagasMiddleware = createSagasMiddleware() const isDev = config.is(Env.DEVELOPMENT) const loggerMiddleware = createLogger({ collapsed: () => true, - predicate: (_: any, action) => isDev || action.type.includes("Failure"), + predicate: (_: any, action) => isDev || action.type.includes('Failure') }) - const analyticsMiddleware = createAnalyticsMiddleware(config.get("SEGMENT_API_KEY")) + const analyticsMiddleware = createAnalyticsMiddleware(config.get('SEGMENT_API_KEY')) const { storageMiddleware, loadStorageMiddleware } = createStorageMiddleware({ - storageKey: "profile", // this is the key used to save the state in localStorage (required) - paths: [["identity", "data"]], // array of paths from state to be persisted (optional) - actions: ["[Success] Login", "Logout"], // array of actions types that will trigger a SAVE (optional) - migrations: {}, // migration object that will migrate your localstorage (optional) + storageKey: 'profile', // this is the key used to save the state in localStorage (required) + paths: [['identity', 'data']], // array of paths from state to be persisted (optional) + actions: ['[Success] Login', 'Logout'], // array of actions types that will trigger a SAVE (optional) + migrations: {} // migration object that will migrate your localstorage (optional) }) const store = createRootReducer([sagasMiddleware, loggerMiddleware, analyticsMiddleware, storageMiddleware]) if (isDev) { diff --git a/src/tests/store.ts b/src/tests/store.ts index 16e1216..4a92ccb 100644 --- a/src/tests/store.ts +++ b/src/tests/store.ts @@ -1,22 +1,19 @@ -import createSagasMiddleware from "redux-saga"; -import { createStorageMiddleware } from "decentraland-dapps/dist/modules/storage/middleware"; -import { createRootReducer } from "../modules/reducer"; -import { rootSaga } from "../modules/saga"; +import createSagasMiddleware from 'redux-saga' +import { createStorageMiddleware } from 'decentraland-dapps/dist/modules/storage/middleware' +import { createRootReducer } from '../modules/reducer' +import { rootSaga } from '../modules/saga' export function initTestStore(preloadedState = {}) { - const sagasMiddleware = createSagasMiddleware(); + const sagasMiddleware = createSagasMiddleware() const { storageMiddleware, loadStorageMiddleware } = createStorageMiddleware({ - storageKey: "profile", // this is the key used to save the state in localStorage (required) - paths: [["identity", "data"]], // array of paths from state to be persisted (optional) + storageKey: 'profile', // this is the key used to save the state in localStorage (required) + paths: [['identity', 'data']], // array of paths from state to be persisted (optional) actions: [], // array of actions types that will trigger a SAVE (optional) - migrations: {}, // migration object that will migrate your localstorage (optional) - }); - const store = createRootReducer( - [sagasMiddleware, storageMiddleware], - preloadedState - ); - sagasMiddleware.run(rootSaga); - loadStorageMiddleware(store); + migrations: {} // migration object that will migrate your localstorage (optional) + }) + const store = createRootReducer([sagasMiddleware, storageMiddleware], preloadedState) + sagasMiddleware.run(rootSaga) + loadStorageMiddleware(store) - return store; + return store } diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 6abc146..a59bae0 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,7 +1,7 @@ -import { RequestManager } from "eth-connect" -import { createUnsafeIdentity } from "@dcl/crypto/dist/crypto" -import { FlatFetchInit, flatFetch } from "./flat-fetch" -import { AuthChain, AuthIdentity, Authenticator } from "@dcl/crypto" +import { RequestManager } from 'eth-connect' +import { AuthChain, AuthIdentity, Authenticator } from '@dcl/crypto' +import { createUnsafeIdentity } from '@dcl/crypto/dist/crypto' +import { FlatFetchInit, flatFetch } from './flat-fetch' const ephemeralLifespanMinutes = 10_000 @@ -16,10 +16,7 @@ export type ExplorerIdentity = { signer: (message: string) => Promise } -export async function getUserAccount( - requestManager: RequestManager, - returnChecksum: boolean -): Promise { +export async function getUserAccount(requestManager: RequestManager, returnChecksum: boolean): Promise { try { const accounts = await requestManager.eth_accounts() @@ -33,25 +30,20 @@ export async function getUserAccount( } } -const AUTH_CHAIN_HEADER_PREFIX = "x-identity-auth-chain-" -const AUTH_TIMESTAMP_HEADER = "x-identity-timestamp" -const AUTH_METADATA_HEADER = "x-identity-metadata" +const AUTH_CHAIN_HEADER_PREFIX = 'x-identity-auth-chain-' +const AUTH_TIMESTAMP_HEADER = 'x-identity-timestamp' +const AUTH_METADATA_HEADER = 'x-identity-metadata' -export function getAuthChainSignature( - method: string, - path: string, - metadata: string, - chainProvider: (payload: string) => AuthChain -) { +export function getAuthChainSignature(method: string, path: string, metadata: string, chainProvider: (payload: string) => AuthChain) { const timestamp = Date.now() const payloadParts = [method.toLowerCase(), path.toLowerCase(), timestamp.toString(), metadata] - const payloadToSign = payloadParts.join(":").toLowerCase() + const payloadToSign = payloadParts.join(':').toLowerCase() const authChain = chainProvider(payloadToSign) return { authChain, metadata, - timestamp, + timestamp } } @@ -72,28 +64,23 @@ export function getSignedHeaders( return headers } -export function signedFetch( - url: string, - identity: AuthIdentity, - init?: FlatFetchInit, - additionalMetadata: Record = {} -) { +export function signedFetch(url: string, identity: AuthIdentity, init?: FlatFetchInit, additionalMetadata: Record = {}) { const path = new URL(url).pathname const actualInit = { ...init, headers: { ...getSignedHeaders( - init?.method ?? "get", + init?.method ?? 'get', path, { origin: location.origin, - ...additionalMetadata, + ...additionalMetadata }, - (payload) => Authenticator.signPayload(identity, payload) + payload => Authenticator.signPayload(identity, payload) ), - ...init?.headers, - }, + ...init?.headers + } } as FlatFetchInit return flatFetch(url, actualInit) @@ -104,10 +91,7 @@ export function signedFetch( // the ephemeral private key is used to sign the rest of the authChain and subsequent // messages. this is a good way to not over-expose the real user accounts to excessive // signing requests. -export async function identityFromSigner( - address: string, - signer: (message: string) => Promise -): Promise { +export async function identityFromSigner(address: string, signer: (message: string) => Promise): Promise { const ephemeral = createUnsafeIdentity() const authChain = await Authenticator.initializeAuthChain(address, ephemeral, ephemeralLifespanMinutes, signer) @@ -116,6 +100,6 @@ export async function identityFromSigner( address, signer, authChain, - isGuest: true, + isGuest: true } } diff --git a/src/utils/client-utils.ts b/src/utils/client-utils.ts index cdee23f..7d17513 100644 --- a/src/utils/client-utils.ts +++ b/src/utils/client-utils.ts @@ -1,19 +1,19 @@ -import { useEffect, useState } from "react" +import { useEffect, useState } from 'react' export function useServerUrl(region?: string) { const [serverUrl, setServerUrl] = useState() useEffect(() => { - let endpoint = `/api/url` + let endpoint = '/api/url' if (region) { endpoint += `?region=${region}` } - fetch(endpoint).then(async (res) => { + fetch(endpoint).then(async res => { if (res.ok) { const body = await res.json() console.log(body) setServerUrl(body.url) } else { - throw Error("Error fetching server url, check server logs") + throw Error('Error fetching server url, check server logs') } }) }) diff --git a/src/utils/flat-fetch.ts b/src/utils/flat-fetch.ts index 32c9cf1..22022ca 100644 --- a/src/utils/flat-fetch.ts +++ b/src/utils/flat-fetch.ts @@ -7,14 +7,14 @@ type FlatFetchResponse = { text?: string } -type BodyType = "json" | "text" +type BodyType = 'json' | 'text' export type FlatFetchInit = RequestInit & { responseBodyType?: BodyType } export async function flatFetch(url: string, init?: FlatFetchInit): Promise { const response = await fetch(url, init) - const responseBodyType = init?.responseBodyType || "text" + const responseBodyType = init?.responseBodyType || 'text' const headers: Record = {} @@ -24,14 +24,14 @@ export async function flatFetch(url: string, init?: FlatFetchInit): Promise