lamassu-server/packages/server/lib/sanctions.js
2025-05-12 15:35:00 +01:00

58 lines
1.4 KiB
JavaScript

const _ = require('lodash/fp')
const ofac = require('./ofac')
const T = require('./time')
const logger = require('./logger')
const customers = require('./customers')
const sanctionStatus = {
loaded: false,
timestamp: null,
}
const loadOrUpdateSanctions = () => {
if (
!sanctionStatus.loaded ||
(sanctionStatus.timestamp && Date.now() > sanctionStatus.timestamp + T.day)
) {
logger.info('No sanction lists loaded. Loading sanctions...')
return ofac
.load()
.then(() => {
logger.info('OFAC sanction list loaded!')
sanctionStatus.loaded = true
sanctionStatus.timestamp = Date.now()
})
.catch(e => {
logger.error("Couldn't load OFAC sanction list!", e)
})
}
return Promise.resolve()
}
const checkByUser = (customerId, userToken) => {
return Promise.all([
loadOrUpdateSanctions(),
customers.getCustomerById(customerId),
]).then(([, customer]) => {
const { firstName, lastName, dateOfBirth } = customer.idCardData
const birthdate = _.replace(/-/g, '')(dateOfBirth)
const ofacMatches = ofac.match({ firstName, lastName }, birthdate, {
threshold: 0.85,
fullNameThreshold: 0.95,
debug: false,
})
const isOfacSanctioned = _.size(ofacMatches) > 0
customers.updateCustomer(
customerId,
{ sanctions: !isOfacSanctioned },
userToken,
)
return { ofacSanctioned: isOfacSanctioned }
})
}
module.exports = {
checkByUser,
}