Skip to content
This repository has been archived by the owner on Oct 4, 2023. It is now read-only.

Commit

Permalink
[C-803] Add common state and backend sagas to native (#1691)
Browse files Browse the repository at this point in the history
  • Loading branch information
dylanjeffers committed Aug 9, 2022
1 parent 96d9cc8 commit 4f60a49
Show file tree
Hide file tree
Showing 12 changed files with 53 additions and 16 deletions.
12 changes: 12 additions & 0 deletions packages/mobile/src/services/fingerprint.ts
@@ -0,0 +1,12 @@
import { FingerprintClient } from 'audius-client/src/common/services/fingerprint'
import Config from 'react-native-config'

const apiKey = Config.FINGERPRINT_PUBLIC_API_KEY || ''
const endpoint = Config.FINGERPRINT_ENDPOINT || ''
const identityService = Config.IDENTITY_SERVICE || ''

export const fingerprintClient = new FingerprintClient({
apiKey,
endpoint,
identityService
})
6 changes: 6 additions & 0 deletions packages/mobile/src/store/sagas.ts
@@ -1,14 +1,20 @@
import backendSagas, {
setupBackend
} from 'audius-client/src/common/store/backend/sagas'
import remoteConfig from 'audius-client/src/common/store/remote-config/sagas'
import { all, fork } from 'typed-redux-saga'

import initKeyboardEvents from './keyboard/sagas'
import oauthSagas from './oauth/sagas'

export default function* rootSaga() {
yield* fork(setupBackend)
const sagas = [
...backendSagas(),
initKeyboardEvents,
...remoteConfig(),
...oauthSagas()
]

yield* all(sagas.map(fork))
}
2 changes: 2 additions & 0 deletions packages/mobile/src/store/store.ts
@@ -1,6 +1,7 @@
import type { CommonState } from 'audius-client/src/common/store'
import type { RemoteConfigState } from 'audius-client/src/common/store/remote-config/slice'
import remoteConfig from 'audius-client/src/common/store/remote-config/slice'
import { reducers as commonReducers } from 'common/store/reducers'
import { createStore, combineReducers, applyMiddleware } from 'redux'
import { composeWithDevTools } from 'redux-devtools-extension'
import createSagaMiddleware from 'redux-saga'
Expand Down Expand Up @@ -46,6 +47,7 @@ export type AppState = {

const createRootReducer = () =>
combineReducers({
...commonReducers(),
audio,
common,
drawers,
Expand Down
4 changes: 3 additions & 1 deletion packages/mobile/src/store/storeContext.ts
Expand Up @@ -3,12 +3,14 @@ import type { CommonStoreContext } from 'audius-client/src/common/store'

import { apiClient } from 'app/services/audius-api-client'
import { audiusBackendInstance } from 'app/services/audius-backend-instance'
import { fingerprintClient } from 'app/services/fingerprint'
import { remoteConfigInstance } from 'app/services/remote-config'

export const storeContext: CommonStoreContext = {
getLocalStorageItem: async (key) => AsyncStorage.getItem(key),
setLocalStorageItem: async (key, value) => AsyncStorage.setItem(key, value),
remoteConfigInstance,
audiusBackendInstance,
apiClient
apiClient,
fingerprintClient
}
Expand Up @@ -2,17 +2,24 @@ import FingerprintJS, { Agent } from '@fingerprintjs/fingerprintjs-pro'

import { isElectron, isMobile } from 'utils/clientUtil'

const IDENTITY_SERVICE = process.env.REACT_APP_IDENTITY_SERVICE
type FingerprintClientConfig = {
apiKey: string
endpoint: string
identityService: string
}

class FingerprintClient {
export class FingerprintClient {
private apiKey: string
private fingerprint: Agent | null
private endpoint: string
private identityService: string

constructor(apiKey: string, endpoint: string) {
constructor(config: FingerprintClientConfig) {
const { apiKey, endpoint, identityService } = config
this.apiKey = apiKey
this.fingerprint = null
this.endpoint = endpoint
this.identityService = identityService
}

async init() {
Expand All @@ -39,7 +46,7 @@ class FingerprintClient {

// First, see if we've fingerprinted this user before
const response = await fetch(
`${IDENTITY_SERVICE}/fp?userId=${userId}&origin=${origin}`
`${this.identityService}/fp?userId=${userId}&origin=${origin}`
)

if (response.status !== 200) {
Expand All @@ -66,9 +73,3 @@ class FingerprintClient {
}
}
}

const apiKey = process.env.REACT_APP_FINGERPRINT_PUBLIC_API_KEY || ''
const endpoint = process.env.REACT_APP_FINGERPRINT_ENDPOINT || ''
const client = new FingerprintClient(apiKey, endpoint)

export default client
1 change: 1 addition & 0 deletions packages/web/src/common/services/fingerprint/index.ts
@@ -0,0 +1 @@
export * from './FingerprintClient'
2 changes: 1 addition & 1 deletion packages/web/src/common/store/backend/sagas.ts
Expand Up @@ -12,7 +12,6 @@ import {
import * as accountActions from 'common/store/account/reducer'
import * as reachabilityActions from 'common/store/reachability/actions'
import { getIsReachable } from 'common/store/reachability/selectors'
import fingerprintClient from 'services/fingerprint/FingerprintClient'
import { RequestNetworkConnected } from 'services/native-mobile-interface/lifecycle'

import { getContext } from '../effects'
Expand Down Expand Up @@ -75,6 +74,7 @@ export function* setupBackend() {
}

const apiClient = yield* getContext('apiClient')
const fingerprintClient = yield* getContext('fingerprintClient')
const audiusBackendInstance = yield* getContext('audiusBackendInstance')

// Init APICLient
Expand Down
2 changes: 2 additions & 0 deletions packages/web/src/common/store/storeContext.ts
Expand Up @@ -2,11 +2,13 @@ import { RemoteConfigInstance } from '@audius/common'

import { AudiusAPIClient } from 'common/services/audius-api-client'
import { AudiusBackend } from 'common/services/audius-backend'
import { FingerprintClient } from 'common/services/fingerprint'

export type CommonStoreContext = {
getLocalStorageItem: (key: string) => Promise<string | null>
setLocalStorageItem: (key: string, value: string) => Promise<void>
remoteConfigInstance: RemoteConfigInstance
audiusBackendInstance: AudiusBackend
apiClient: AudiusAPIClient
fingerprintClient: FingerprintClient
}
11 changes: 11 additions & 0 deletions packages/web/src/services/fingerprint.ts
@@ -0,0 +1,11 @@
import { FingerprintClient } from 'common/services/fingerprint'

const apiKey = process.env.REACT_APP_FINGERPRINT_PUBLIC_API_KEY || ''
const endpoint = process.env.REACT_APP_FINGERPRINT_ENDPOINT || ''
const identityService = process.env.REACT_APP_IDENTITY_SERVICE || ''

export const fingerprintClient = new FingerprintClient({
apiKey,
endpoint,
identityService
})
2 changes: 1 addition & 1 deletion packages/web/src/store/account/sagas.js
Expand Up @@ -34,7 +34,7 @@ import {
import { recordIP } from 'services/audius-backend/RecordIP'
import { audiusBackendInstance } from 'services/audius-backend/audius-backend-instance'
import { createUserBankIfNeeded } from 'services/audius-backend/waudio'
import fingerprintClient from 'services/fingerprint/FingerprintClient'
import { fingerprintClient } from 'services/fingerprint'
import { SignedIn } from 'services/native-mobile-interface/lifecycle'
import { remoteConfigInstance } from 'services/remote-config/remote-config-instance'
import { setSentryUser } from 'services/sentry'
Expand Down
2 changes: 0 additions & 2 deletions packages/web/src/store/sagas.ts
Expand Up @@ -75,8 +75,6 @@ import tippingSagas from 'store/tipping/sagas'
import tokenDashboardSagas from 'store/token-dashboard/sagas'
import walletSagas from 'store/wallet/sagas'

import { storeContext } from './storeContext'

const NATIVE_MOBILE = process.env.REACT_APP_NATIVE_MOBILE

export default function* rootSaga() {
Expand Down
4 changes: 3 additions & 1 deletion packages/web/src/store/storeContext.ts
@@ -1,6 +1,7 @@
import { CommonStoreContext } from 'common/store'
import { apiClient } from 'services/audius-api-client'
import { audiusBackendInstance } from 'services/audius-backend/audius-backend-instance'
import { fingerprintClient } from 'services/fingerprint'
import { remoteConfigInstance } from 'services/remote-config/remote-config-instance'

export const storeContext: CommonStoreContext = {
Expand All @@ -9,5 +10,6 @@ export const storeContext: CommonStoreContext = {
window.localStorage.setItem(key, value),
remoteConfigInstance,
audiusBackendInstance,
apiClient
apiClient,
fingerprintClient
}

0 comments on commit 4f60a49

Please sign in to comment.