redux-security
Version:
65 lines (56 loc) • 2.26 kB
JavaScript
import Promise from 'bluebird'
import { error, write } from 'redux-journal'
import { manager } from 'redux-manager'
import { SERVICE, TAGS } from '../config'
import { configAPIPaths } from './api.paths'
const tags = `${TAGS}.api.socket`
export const configAPISocket = (
{ serverServiceName = SERVICE, socket } =
{ serverServiceName: SERVICE }
) => {
const paths = configAPIPaths(serverServiceName)
const codeEmail = ({ sessionID }) => new Promise((resolve, reject) => {
socket.off(paths.codeEmail)
socket.emit(paths.codeEmail, { sessionID })
socket.on(paths.codeEmail, ({ error }) => {
if (error) { return reject(new Error(error)) }
resolve()
})
})
const codeConfirm = ({ code }) => new Promise((resolve, reject) => {
socket.off(paths.codeConfirm)
socket.emit(paths.codeConfirm, { code })
socket.on(paths.codeConfirm, ({ error }) => {
if (error) { return reject(new Error(error)) }
resolve()
})
})
const login = ({ username, password }) => new Promise((resolve, reject) => {
write(`({ username = '${username}', password = ${typeof password} }), paths.login = ${paths.login}`, `${tags}.login`)
socket.off(paths.login)
socket.emit(paths.login, { username, password })
socket.on(paths.login, ({ sessionID, error }) => {
if (error) { return reject(new Error(error)) }
resolve({ sessionID })
})
})
const logout = ({ sessionID }) => new Promise((resolve, reject) => {
write(`({ sessionID = '${sessionID})'`, `${tags}.logout`)
socket.off(paths.logout)
socket.emit(paths.logout, { sessionID })
socket.on(paths.logout, ({ error }) => {
if (error) { return reject(new Error(error)) }
resolve()
})
})
const signup = ({ username, password, email }) => new Promise((resolve, reject) => {
write(`({ username = '${username}', password = ${typeof password}, email = '${email}')`, `${tags}.signup`)
socket.off(paths.signup)
socket.emit(paths.signup, { username, password, email })
socket.on(paths.signup, ({ error }) => {
if (error) { return reject(new Error(error)) }
resolve({ username })
})
})
return { codeEmail, codeConfirm, login, logout, signup }
}