import AsyncStorage from '@react-native-async-storage/async-storage'; import { batchActions } from 'redux-batched-actions'; import { authLoaded, setRefreshToken, setToken, setUsername } from './actions' // AsyncStorage.getAllKeys() // .then((keys) => AsyncStorage.multiGet(keys) // .then((data) => console.log(data))); async function safeSetStorage(key, value) { if (value) { await AsyncStorage.setItem(key, value) } else { await AsyncStorage.removeItem(key) } } const accessTokenKey = 'userToken' const refreshTokenKey = 'refreshToken' const userNameKey = 'userName' function subscibeOnAuthChanges(store) { let lastAccessToken = store.getState().user.token; let lastRefreshToken = store.getState().user.refreshToken; let lastUsername = store.getState().user.username; // console.log("In subscribe function", lastAccessToken, lastRefreshToken, lastUsername) store.subscribe(async () => { const state = store.getState(); // console.log("In subscribe...") const newAccessToken = state.user.token; const newRefreshToken = state.user.refreshToken; const newUsername = state.user.username; // console.log("In subscribe", newAccessToken, newRefreshToken, newUsername) if (lastAccessToken !== newAccessToken) { lastAccessToken = newAccessToken await safeSetStorage(accessTokenKey, newAccessToken) } if (lastRefreshToken !== newRefreshToken) { lastRefreshToken = newRefreshToken await safeSetStorage(refreshTokenKey, newRefreshToken) } if (lastUsername !== newUsername) { lastUsername = newUsername await safeSetStorage(userNameKey, newUsername) } }) } async function loadFromStorage(store) { try { // leave comments this for testing // console.log("getting Token from storage"); // await AsyncStorage.setItem(accessTokenKey, "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4MmVlNjNkMi0yZDRjLTRkZjQtYTQ0MS1hZWRkZjhiNGEwMmYiLCJzdWIiOiJpbGlqYSt1Y2lAcHJvZml0b3B0aWNzLmNvbSIsInVuaXF1ZV9uYW1lIjoiaWxpamErdWNpQHByb2ZpdG9wdGljcy5jb20iLCJVdGNPZmZzZXRNaW51dGVzIjoiLTI0MCIsIkFncmVlbWVudEFjY2VwdGVkIjoiVHJ1ZSIsIk9yZ2FuaXphdGlvbklkIjoiMTkiLCJPcmdhbml6YXRpb25Ib3N0bmFtZSI6Im15c3RyYXRhZGV2Mi5wcm9maXRvcHRpY3MuY29tIiwibmJmIjoxNjE2Njk0NTI2LCJleHAiOjE2MTY2OTYzMjYsImlzcyI6InN0cmF0YWNsZWFyLmNvbSIsImF1ZCI6IkNsaWVudCJ9.kk0TQENidNJfQpkLy6uVUZULHp1r46gA7IyhAMHkqsI"); userToken = await AsyncStorage.getItem(accessTokenKey); // leave this for testing // await AsyncStorage.setItem(refreshTokenKey, "IBFRYNvviwI0+C3CVy1sViQlvFDTXsTUZWa8fgzv6oLQtYTng3A+8xc4gMqpX+y1lR8WIhN4uDlEV19uu+prWEVpi8qkjp999Li0t+eiEoe7OdeK+vQwecowvvJZRt1WK/Qb3biMC76IhElZta/riy2yZ9jQRBhiEfPs+yK+GJI="); // await AsyncStorage.setItem(refreshTokenKey, "TV+VsT+Qwb9hh1oi8mG4CBX0gnN9y9aNfXT/QUPZsPwCJ3n1svOO/KwT14Z5UZxhU+8h5ocuvipj4dIGDJa7wJHkV7j5/mBKfSgVqMvX43VdFXkp19Dg0h4Tg9Elh6GpR0N6FSCDJl3igv83W3OpC4UWXylQKW+0gr+tjOPmT78="); refreshToken = await AsyncStorage.getItem(refreshTokenKey); // leave this for testing // await AsyncStorage.setItem(userNameKey, "ilija+uci@profitoptics.com"); userName = await AsyncStorage.getItem(userNameKey); // console.log('Loaded from storage', userToken) store.dispatch(batchActions([setToken(userToken), setRefreshToken(refreshToken), setUsername(userName), authLoaded()])) } catch (eror) { console.error("There was an error getting token from storage", eror); } } function init(store) { loadFromStorage(store) .then(() => subscibeOnAuthChanges(store)) } export { init };