52 lines
No EOL
1.7 KiB
JavaScript
52 lines
No EOL
1.7 KiB
JavaScript
const _ = require('lodash/fp')
|
|
|
|
const sumsubApi = require('./sumsub.api')
|
|
const { PENDING, RETRY, APPROVED, REJECTED } = require('../consts')
|
|
|
|
const CODE = 'sumsub'
|
|
|
|
const getApplicantByExternalId = (account, userId) => {
|
|
return sumsubApi.getApplicantByExternalId(account, userId)
|
|
.then(r => r.data)
|
|
}
|
|
|
|
const createApplicant = (account, userId, level) => {
|
|
return sumsubApi.createApplicant(account, userId, level)
|
|
.then(r => r.data)
|
|
.catch(err => {
|
|
if (err.response.status === 409) return getApplicantByExternalId(account, userId)
|
|
throw err
|
|
})
|
|
}
|
|
|
|
const createLink = (account, userId, level) => {
|
|
return sumsubApi.createLink(account, userId, level)
|
|
.then(r => r.data.url)
|
|
}
|
|
|
|
const getApplicantStatus = (account, userId) => {
|
|
return sumsubApi.getApplicantByExternalId(account, userId)
|
|
.then(r => {
|
|
const levelName = _.get('data.review.levelName', r)
|
|
const reviewStatus = _.get('data.review.reviewStatus', r)
|
|
const reviewAnswer = _.get('data.review.reviewResult.reviewAnswer', r)
|
|
const reviewRejectType = _.get('data.review.reviewResult.reviewRejectType', r)
|
|
|
|
// if last review was from a different level, return the current level and RETRY
|
|
if (levelName !== account.applicantLevel) return { level: account.applicantLevel, answer: RETRY }
|
|
|
|
let answer = PENDING
|
|
if (reviewAnswer === 'GREEN' && reviewStatus === 'completed') answer = APPROVED
|
|
if (reviewAnswer === 'RED' && reviewRejectType === 'RETRY') answer = RETRY
|
|
if (reviewAnswer === 'RED' && reviewRejectType === 'FINAL') answer = REJECTED
|
|
|
|
return { level: levelName, answer }
|
|
})
|
|
}
|
|
|
|
module.exports = {
|
|
CODE,
|
|
createApplicant,
|
|
getApplicantStatus,
|
|
createLink
|
|
} |