UNPKG

@absolute/change-tracker-node-sdk

Version:

ChangeTracker SDK for Node.js

88 lines (82 loc) 2.95 kB
/** * makeChangeTrackerService - changeTrackerService maker function * @param {object} params * @param {function} params.generateToken - utility to generate token * @param {function} params.diff - diff between Row models * @param {function} params.store - store diff data * @param {function} params.createTable - create Table model to store * @returns {changeTrackerService} **/ function makeChangeTrackerService({ generateToken, diff, store, createTable }) { /** * @callback changeTrackerService * @type {function} * change tracker interface * @param {string} hostName - the project host name * @param {string} apiSecretGet - API get secret * @param {string} apiSecretPost- API post secret * @param {number} [tokenMinuteDuration=5] - the token duration in minutes **/ return (hostName, apiSecretGet, apiSecretPost, tokenMinuteDuration = 5) => { return { /** * store - stores data on change tracker * @param {string} tableName - the changed table name * @param {string} userName - the name of the user who perform the modification (for log purposes) * @param {string} rowDescription - log notes * @param {Row} prevModel - model before change * @param {Row} nextModel - model after change * @param {string} ipAddress - current request ip address (for log purposes) * @returns response object **/ store: async function ( tableName, userName, rowDescription, prevModel, nextModel, ipAddress = '' ) { let token = generateToken( apiSecretPost, tableName, undefined, tokenMinuteDuration ) const row = diff(prevModel, nextModel) if (!row) return { ok: false, errorText: 'ChangeTracker, diff: missing or invalid diff models', } row.desc = rowDescription const table = createTable([row], tableName, userName, ipAddress) if (!table) return { ok: false, errorText: 'ChangeTracker, createTable: invalid rows model', } return await store(hostName, token, table) }, /** * getToken - create a jwtToken for retrieving changeTracker records * @param {string} tableName - the name of the accessed table * @param {string} [rowKey] - the key of the accessed record * @param {number} [thisTokenMinuteDuration=5] - the token duration in minutes **/ getToken: ( tableName, rowKey, thisTokenMinuteDuration = tokenMinuteDuration ) => { return generateToken( apiSecretGet, tableName, rowKey, thisTokenMinuteDuration ) }, } } } module.exports = { makeChangeTrackerService }