@absolute/change-tracker-node-sdk
Version:
ChangeTracker SDK for Node.js
88 lines (82 loc) • 2.95 kB
JavaScript
/**
* 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 }