* fix: adapt old settings loader to the new schema (filter schema_version) feat: migrate commissions globals feat: migrate locales refactor: generalize the old fields search chore: created functions signatures for all config migrations feat: created wallet migration feat: migrate operator info feat: migrate coin atm radar feat: migrate terms and conditions feat: migrate commissions overrides fix: removed the wallet_COIN_active field (don't exist anymore) chore: moved the config-migration lib to the lib folder feat: migrate cashout configurations feat: migrate notifications globals feat: export migration function feat: migrate most of notifications scoped configs fix: added the missing text property to the terms and conditions migration feat: migrate compliance triggers feat: migrate receipt printing feat: migrate accounts chore: remove test code form module refactor: change some functions naming fix: set default trigger type to 'volume' feat: added threshold days (default 1) to triggers fix: removed strike from the accounts importing refactor: cleaner code on fixed properties feat: avoid repeated crypto/machine pairs on the commissions overrides migrations refactor: make renameAccountFields function internal to the account migration function fix: migrate all crypto scoped commission overrides * fix: return plain objects from functions to make the jsons more readable fix: fix bitgo fields casing fix: improve commissions migration function readability refactor: standard styling * feat: add fallback values to the migration * feat: created db migration for the new config * feat: create migration to move machine names from file to db fix: updates machine names before the config migration fix: load machineLoader fix: create a param to ignore the schema version when loading the latest config using the old loader * refactor: remove unnecessary arguments on createTrigger function fix: check if there's an smsVerificationThreshold configured prior to migrating triggers * fix: migrate triggers with the correct thresholds and verify if they're valid
123 lines
3.6 KiB
JavaScript
123 lines
3.6 KiB
JavaScript
const _ = require('lodash/fp')
|
|
|
|
const db = require('../db')
|
|
const configValidate = require('../config-validate')
|
|
const config = require('./config')
|
|
const ph = require('../plugin-helper')
|
|
|
|
const schemas = ph.loadSchemas()
|
|
|
|
function fetchAccounts () {
|
|
return db.oneOrNone('select data from user_config where type=$1 and schema_version=$2', ['accounts', configValidate.SETTINGS_LOADER_SCHEMA_VERSION])
|
|
.then(row => {
|
|
// Hard code this for now
|
|
const accounts = [{
|
|
code: 'blockcypher',
|
|
display: 'Blockcypher',
|
|
fields: [
|
|
{ code: 'confidenceFactor', display: 'Confidence Factor', fieldType: 'integer', required: true, value: 40 }
|
|
]
|
|
}]
|
|
|
|
return row
|
|
? Promise.resolve(row.data.accounts)
|
|
: db.none('insert into user_config (type, data, valid) values ($1, $2, $3)', ['accounts', {accounts}, true])
|
|
.then(fetchAccounts)
|
|
})
|
|
}
|
|
|
|
function selectedAccounts () {
|
|
const mapAccount = v => v.fieldLocator.fieldType === 'account' &&
|
|
v.fieldValue.value
|
|
|
|
const mapSchema = code => schemas[code]
|
|
return config.fetchConfig()
|
|
.then(conf => {
|
|
const accountCodes = _.uniq(conf.map(mapAccount)
|
|
.filter(_.identity))
|
|
|
|
return _.sortBy(_.get('display'), accountCodes.map(mapSchema)
|
|
.filter(_.identity))
|
|
})
|
|
}
|
|
|
|
function fetchAccountSchema (account) {
|
|
return schemas[account]
|
|
}
|
|
|
|
function mergeAccount (oldAccount, newAccount) {
|
|
if (!newAccount) return oldAccount
|
|
|
|
const newFields = newAccount.fields
|
|
|
|
const updateWithData = oldField => {
|
|
const newField = _.find(r => r.code === oldField.code, newFields)
|
|
const newValue = _.isUndefined(newField) ? oldField.value : newField.value
|
|
return _.set('value', newValue, oldField)
|
|
}
|
|
|
|
const updatedFields = oldAccount.fields.map(updateWithData)
|
|
|
|
return _.set('fields', updatedFields, oldAccount)
|
|
}
|
|
|
|
function getAccounts (accountCode) {
|
|
const schema = fetchAccountSchema(accountCode)
|
|
if (!schema) return Promise.reject(new Error('No schema for: ' + accountCode))
|
|
|
|
return fetchAccounts()
|
|
.then(accounts => {
|
|
if (_.isEmpty(accounts)) return [schema]
|
|
const account = _.find(r => r.code === accountCode, accounts)
|
|
const mergedAccount = mergeAccount(schema, account)
|
|
|
|
return updateAccounts(mergedAccount, accounts)
|
|
})
|
|
}
|
|
|
|
function elideSecrets (account) {
|
|
const elideSecret = field => {
|
|
return field.fieldType === 'password'
|
|
? _.set('value', !_.isEmpty(field.value), field)
|
|
: field
|
|
}
|
|
|
|
return _.set('fields', account.fields.map(elideSecret), account)
|
|
}
|
|
|
|
function getAccount (accountCode) {
|
|
return getAccounts(accountCode)
|
|
.then(accounts => _.find(r => r.code === accountCode, accounts))
|
|
.then(elideSecrets)
|
|
}
|
|
|
|
function save (accounts) {
|
|
return db.none('update user_config set data=$1 where type=$2 and schema_version=$3', [{accounts: accounts}, 'accounts', configValidate.SETTINGS_LOADER_SCHEMA_VERSION])
|
|
}
|
|
|
|
function updateAccounts (newAccount, accounts) {
|
|
const accountCode = newAccount.code
|
|
const isPresent = _.some(_.matchesProperty('code', accountCode), accounts)
|
|
const updateAccount = r => r.code === accountCode
|
|
? newAccount
|
|
: r
|
|
|
|
return isPresent
|
|
? _.map(updateAccount, accounts)
|
|
: _.concat(accounts, newAccount)
|
|
}
|
|
|
|
function updateAccount (account) {
|
|
return getAccounts(account.code)
|
|
.then(accounts => {
|
|
const merged = mergeAccount(_.find(_.matchesProperty('code', account.code), accounts), account)
|
|
return save(updateAccounts(merged, accounts))
|
|
})
|
|
.then(() => getAccount(account.code))
|
|
}
|
|
|
|
module.exports = {
|
|
selectedAccounts,
|
|
getAccount,
|
|
updateAccount
|
|
}
|