'use strict'; var currentTransport = require('../transports/current-transport'); var ConfigurationChangeMessage = require('./ConfigurationChangeMessage'); var DataModificationMessage = require('./DataModificationMessage'); var DataAccessMessage = require('./DataAccessMessage'); var SecurityMessage = require('./SecurityEventMessage'); var format = require('util').format; var utils = require('../utils'); module.exports = function auditlog(credentials, serviceOptions, securityContext) { var transport = currentTransport(credentials, serviceOptions, securityContext); return { configurationChange: function (accessedObject) { utils.validate.objectWithTypeAndId(accessedObject, 'accessed-object'); return new ConfigurationChangeMessage({ object: accessedObject }, transport); }, read: function (accessedObject) { utils.validate.objectWithTypeAndId(accessedObject, 'accessed-object'); return new DataAccessMessage({ object: accessedObject }, transport); }, update: function (accessedObject) { utils.validate.objectWithTypeAndId(accessedObject, 'accessed-object'); return new DataModificationMessage({ object: accessedObject }, transport); }, securityMessage: function () { utils.validate.provided(arguments[0], 'An argument'); return new SecurityMessage({ data: format.apply(null, arguments) }, transport); } }; };