From 4f60a49bf30bf9877e9cbe6ccd3c79689e96eb4e Mon Sep 17 00:00:00 2001 From: Dylan Jeffers Date: Tue, 9 Aug 2022 11:28:43 -0400 Subject: [PATCH] [C-803] Add common state and backend sagas to native (#1691) --- packages/mobile/src/services/fingerprint.ts | 12 +++++++++++ packages/mobile/src/store/sagas.ts | 6 ++++++ packages/mobile/src/store/store.ts | 2 ++ packages/mobile/src/store/storeContext.ts | 4 +++- .../services/fingerprint/FingerprintClient.ts | 21 ++++++++++--------- .../src/common/services/fingerprint/index.ts | 1 + .../web/src/common/store/backend/sagas.ts | 2 +- packages/web/src/common/store/storeContext.ts | 2 ++ packages/web/src/services/fingerprint.ts | 11 ++++++++++ packages/web/src/store/account/sagas.js | 2 +- packages/web/src/store/sagas.ts | 2 -- packages/web/src/store/storeContext.ts | 4 +++- 12 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 packages/mobile/src/services/fingerprint.ts rename packages/web/src/{ => common}/services/fingerprint/FingerprintClient.ts (79%) create mode 100644 packages/web/src/common/services/fingerprint/index.ts create mode 100644 packages/web/src/services/fingerprint.ts diff --git a/packages/mobile/src/services/fingerprint.ts b/packages/mobile/src/services/fingerprint.ts new file mode 100644 index 0000000000..cdc48eb087 --- /dev/null +++ b/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 +}) diff --git a/packages/mobile/src/store/sagas.ts b/packages/mobile/src/store/sagas.ts index c4a22a0ac4..85421f8bd0 100644 --- a/packages/mobile/src/store/sagas.ts +++ b/packages/mobile/src/store/sagas.ts @@ -1,3 +1,6 @@ +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' @@ -5,10 +8,13 @@ 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)) } diff --git a/packages/mobile/src/store/store.ts b/packages/mobile/src/store/store.ts index a1ffde94e0..eec3801de0 100644 --- a/packages/mobile/src/store/store.ts +++ b/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' @@ -46,6 +47,7 @@ export type AppState = { const createRootReducer = () => combineReducers({ + ...commonReducers(), audio, common, drawers, diff --git a/packages/mobile/src/store/storeContext.ts b/packages/mobile/src/store/storeContext.ts index 8b94615ff4..5b4c789ac5 100644 --- a/packages/mobile/src/store/storeContext.ts +++ b/packages/mobile/src/store/storeContext.ts @@ -3,6 +3,7 @@ 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 = { @@ -10,5 +11,6 @@ export const storeContext: CommonStoreContext = { setLocalStorageItem: async (key, value) => AsyncStorage.setItem(key, value), remoteConfigInstance, audiusBackendInstance, - apiClient + apiClient, + fingerprintClient } diff --git a/packages/web/src/services/fingerprint/FingerprintClient.ts b/packages/web/src/common/services/fingerprint/FingerprintClient.ts similarity index 79% rename from packages/web/src/services/fingerprint/FingerprintClient.ts rename to packages/web/src/common/services/fingerprint/FingerprintClient.ts index 52dd86726b..77a0f04481 100644 --- a/packages/web/src/services/fingerprint/FingerprintClient.ts +++ b/packages/web/src/common/services/fingerprint/FingerprintClient.ts @@ -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() { @@ -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) { @@ -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 diff --git a/packages/web/src/common/services/fingerprint/index.ts b/packages/web/src/common/services/fingerprint/index.ts new file mode 100644 index 0000000000..6b6f35379e --- /dev/null +++ b/packages/web/src/common/services/fingerprint/index.ts @@ -0,0 +1 @@ +export * from './FingerprintClient' diff --git a/packages/web/src/common/store/backend/sagas.ts b/packages/web/src/common/store/backend/sagas.ts index 57608d78ff..ca89a2e94b 100644 --- a/packages/web/src/common/store/backend/sagas.ts +++ b/packages/web/src/common/store/backend/sagas.ts @@ -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' @@ -75,6 +74,7 @@ export function* setupBackend() { } const apiClient = yield* getContext('apiClient') + const fingerprintClient = yield* getContext('fingerprintClient') const audiusBackendInstance = yield* getContext('audiusBackendInstance') // Init APICLient diff --git a/packages/web/src/common/store/storeContext.ts b/packages/web/src/common/store/storeContext.ts index 6ddd5c926b..e7e3104f5b 100644 --- a/packages/web/src/common/store/storeContext.ts +++ b/packages/web/src/common/store/storeContext.ts @@ -2,6 +2,7 @@ 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 @@ -9,4 +10,5 @@ export type CommonStoreContext = { remoteConfigInstance: RemoteConfigInstance audiusBackendInstance: AudiusBackend apiClient: AudiusAPIClient + fingerprintClient: FingerprintClient } diff --git a/packages/web/src/services/fingerprint.ts b/packages/web/src/services/fingerprint.ts new file mode 100644 index 0000000000..dd2e59f93a --- /dev/null +++ b/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 +}) diff --git a/packages/web/src/store/account/sagas.js b/packages/web/src/store/account/sagas.js index 23de8772aa..847b02ec6e 100644 --- a/packages/web/src/store/account/sagas.js +++ b/packages/web/src/store/account/sagas.js @@ -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' diff --git a/packages/web/src/store/sagas.ts b/packages/web/src/store/sagas.ts index b54001378c..906441a427 100644 --- a/packages/web/src/store/sagas.ts +++ b/packages/web/src/store/sagas.ts @@ -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() { diff --git a/packages/web/src/store/storeContext.ts b/packages/web/src/store/storeContext.ts index 4bb0e55b75..ebc9bdfc7b 100644 --- a/packages/web/src/store/storeContext.ts +++ b/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 = { @@ -9,5 +10,6 @@ export const storeContext: CommonStoreContext = { window.localStorage.setItem(key, value), remoteConfigInstance, audiusBackendInstance, - apiClient + apiClient, + fingerprintClient }