feat: add button to check against OFAC sanction list
This commit is contained in:
parent
a29f3fc13c
commit
c77fda2623
11 changed files with 114 additions and 5 deletions
|
|
@ -114,6 +114,7 @@ function update (id, data, userToken) {
|
|||
async function updateCustomer (id, data, userToken) {
|
||||
const formattedData = _.pick(
|
||||
[
|
||||
'sanctions',
|
||||
'authorized_override',
|
||||
'id_card_photo_override',
|
||||
'id_card_data_override',
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ const { typeDefs, resolvers } = require('./graphql/schema')
|
|||
const findOperatorId = require('../middlewares/operatorId')
|
||||
const computeSchema = require('../compute-schema')
|
||||
const { USER_SESSIONS_CLEAR_INTERVAL } = require('../constants')
|
||||
const { session, cleanUserSessions, buildApolloContext } = require('./middlewares')
|
||||
const { session, cleanUserSessions, buildApolloContext, loadSanctionLists } = require('./middlewares')
|
||||
|
||||
const devMode = require('minimist')(process.argv.slice(2)).dev
|
||||
|
||||
|
|
@ -48,6 +48,7 @@ app.use(express.static(path.resolve(__dirname, '..', '..', 'public')))
|
|||
app.use(cleanUserSessions(USER_SESSIONS_CLEAR_INTERVAL))
|
||||
app.use(computeSchema)
|
||||
app.use(findOperatorId)
|
||||
app.use(loadSanctionLists)
|
||||
app.use(session)
|
||||
app.use(graphqlUploadExpress())
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ const machine = require('./machine.resolver')
|
|||
const notification = require('./notification.resolver')
|
||||
const pairing = require('./pairing.resolver')
|
||||
const rates = require('./rates.resolver')
|
||||
const sanctions = require('./sanctions.resolver')
|
||||
const scalar = require('./scalar.resolver')
|
||||
const settings = require('./settings.resolver')
|
||||
const sms = require('./sms.resolver')
|
||||
|
|
@ -37,6 +38,7 @@ const resolvers = [
|
|||
notification,
|
||||
pairing,
|
||||
rates,
|
||||
sanctions,
|
||||
scalar,
|
||||
settings,
|
||||
sms,
|
||||
|
|
|
|||
14
lib/new-admin/graphql/resolvers/sanctions.resolver.js
Normal file
14
lib/new-admin/graphql/resolvers/sanctions.resolver.js
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
const _ = require('lodash/fp')
|
||||
const ofac = require('../../../ofac')
|
||||
|
||||
const resolvers = {
|
||||
Query: {
|
||||
checkAgainstSanctions: (...[, { firstName, lastName, birthdate }]) => {
|
||||
const ofacMatches = ofac.match({ firstName, lastName }, birthdate, { threshold: 0.85, fullNameThreshold: 0.95, debug: false })
|
||||
|
||||
return { ofacSanctioned: _.size(ofacMatches) > 0 }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = resolvers
|
||||
|
|
@ -14,6 +14,7 @@ const machine = require('./machine.type')
|
|||
const notification = require('./notification.type')
|
||||
const pairing = require('./pairing.type')
|
||||
const rates = require('./rates.type')
|
||||
const sanctions = require('./sanctions.type')
|
||||
const scalar = require('./scalar.type')
|
||||
const settings = require('./settings.type')
|
||||
const sms = require('./sms.type')
|
||||
|
|
@ -37,6 +38,7 @@ const types = [
|
|||
notification,
|
||||
pairing,
|
||||
rates,
|
||||
sanctions,
|
||||
scalar,
|
||||
settings,
|
||||
sms,
|
||||
|
|
|
|||
13
lib/new-admin/graphql/types/sanctions.type.js
Normal file
13
lib/new-admin/graphql/types/sanctions.type.js
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
const { gql } = require('apollo-server-express')
|
||||
|
||||
const typeDef = gql`
|
||||
type SanctionMatches {
|
||||
ofacSanctioned: Boolean
|
||||
}
|
||||
|
||||
type Query {
|
||||
checkAgainstSanctions(firstName: String, lastName: String, birthdate: String): SanctionMatches @auth
|
||||
}
|
||||
`
|
||||
|
||||
module.exports = typeDef
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
const cleanUserSessions = require('./cleanUserSessions')
|
||||
const buildApolloContext = require('./context')
|
||||
const loadSanctionLists = require('./loadSanctionLists')
|
||||
const session = require('./session')
|
||||
|
||||
module.exports = {
|
||||
cleanUserSessions,
|
||||
buildApolloContext,
|
||||
loadSanctionLists,
|
||||
session
|
||||
}
|
||||
|
|
|
|||
28
lib/new-admin/middlewares/loadSanctionLists.js
Normal file
28
lib/new-admin/middlewares/loadSanctionLists.js
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
const logger = require('../../logger')
|
||||
const sanctions = require('../../ofac')
|
||||
|
||||
const sanctionStatus = {
|
||||
loaded: false,
|
||||
timestamp: null
|
||||
}
|
||||
|
||||
const loadSanctionLists = (req, res, next) => {
|
||||
if (!sanctionStatus.loaded) {
|
||||
logger.info('No sanction lists loaded. Loading sanctions...')
|
||||
return sanctions.load()
|
||||
.then(() => {
|
||||
logger.info('OFAC sanction list loaded!')
|
||||
sanctionStatus.loaded = true
|
||||
sanctionStatus.timestamp = Date.now()
|
||||
return next()
|
||||
})
|
||||
.catch(e => {
|
||||
logger.error('Couldn\'t load OFAC sanction list!')
|
||||
return next(e)
|
||||
})
|
||||
}
|
||||
|
||||
return next()
|
||||
}
|
||||
|
||||
module.exports = loadSanctionLists
|
||||
Loading…
Add table
Add a link
Reference in a new issue