2018-10-03 12:08:14 -07:00
|
|
|
import { SagaIterator } from 'redux-saga';
|
|
|
|
import { select, put, all, takeEvery } from 'redux-saga/effects';
|
|
|
|
import { REHYDRATE } from 'redux-persist';
|
2018-11-07 11:08:42 -08:00
|
|
|
import { getAuthSignature, getAuthSignatureAddress } from './selectors';
|
2018-10-03 12:08:14 -07:00
|
|
|
import { authUser } from './actions';
|
|
|
|
|
|
|
|
export function* authFromToken(): SagaIterator {
|
2018-11-07 11:08:42 -08:00
|
|
|
const address: ReturnType<typeof getAuthSignatureAddress> = yield select(
|
|
|
|
getAuthSignatureAddress,
|
2018-10-03 12:08:14 -07:00
|
|
|
);
|
|
|
|
if (!address) {
|
|
|
|
return;
|
|
|
|
}
|
2018-11-07 11:08:42 -08:00
|
|
|
const signature: ReturnType<typeof getAuthSignature> = yield select(getAuthSignature);
|
2018-10-03 12:08:14 -07:00
|
|
|
|
|
|
|
// TODO: Figure out how to type redux-saga with thunks
|
2018-10-30 16:18:26 -07:00
|
|
|
yield put<any>(authUser(address, signature));
|
2018-10-03 12:08:14 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
export default function* authSaga(): SagaIterator {
|
|
|
|
yield all([
|
|
|
|
// Run authFromToken as soon as persisted state is hydrated
|
|
|
|
// TODO: Do this server-side at some point
|
|
|
|
takeEvery(REHYDRATE, authFromToken),
|
|
|
|
]);
|
|
|
|
}
|