UNPKG

@commercetools/personal-data-erasure

Version:

Export and delete all data related to a single customer

125 lines (121 loc) 4.79 kB
"use strict"; var _fs = _interopRequireDefault(require("fs")); var _getCredentials = require("@commercetools/get-credentials"); var _pino = _interopRequireDefault(require("pino")); var _prettyError = _interopRequireDefault(require("pretty-error")); var _yargs = _interopRequireDefault(require("yargs")); var _promptConfirm = _interopRequireDefault(require("prompt-confirm")); var _main = _interopRequireDefault(require("./main")); var _package = require("../package.json"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } process.title = 'personal-data-erasure'; var args = _yargs["default"].usage("\nUsage: $0 [options]\n".concat(_package.description)).showHelpOnFail(false).option('output', { alias: 'o', "default": 'stdout', describe: 'Path to output file.' }).option('customerId', { alias: 'c', describe: 'Customer to fetch or delete.', demand: true }).option('apiUrl', { "default": 'https://api.europe-west1.gcp.commercetools.com', describe: 'The host URL of the HTTP API service.' }).option('authUrl', { "default": 'https://auth.europe-west1.gcp.commercetools.com', describe: 'The host URL of the OAuth API service.' }).option('accessToken', { describe: 'CTP client access token.' }).option('projectKey', { alias: 'p', describe: 'API project key.', demand: true }).option('deleteAll', { type: 'boolean', alias: 'D', describe: 'Delete all data related to customer.' }).option('force', { type: 'boolean', describe: 'Continue without confirmation when combined with --deleteAll.' }).option('logLevel', { "default": 'info', describe: 'Logging level: error, warn, info or debug.' }).option('prettyLogs ', { describe: 'Pretty print logs to the terminal', type: 'boolean' }).option('logFile', { "default": 'personal-data-erasure.log', describe: 'Path to where to save logs file.', type: 'string' }).argv; // instantiate logger var loggerConfig = { level: args.logLevel, prettyPrint: args.prettyLogs }; // If the stdout is used for a data output, save all logs to a log file. // pino writes logs to stdout by default var logDestination; if (args.output === process.stdout) logDestination = _fs["default"].createWriteStream(args.logFile); var logger = (0, _pino["default"])(loggerConfig, logDestination); // print errors to stderr if we use stdout for data output // if we save data to output file errors are already logged by pino var logError = function logError(error) { var errorFormatter = new _prettyError["default"](); if (args.logLevel === 'debug') process.stderr.write("ERR: ".concat(errorFormatter.render(error)));else process.stderr.write("ERR: ".concat(error.message || error)); }; var errorHandler = function errorHandler(errors) { if (Array.isArray(errors)) errors.forEach(logError);else logError(errors); process.exitCode = 1; }; var resolveCredentials = function resolveCredentials(options) { if (options.accessToken) return Promise.resolve({}); return (0, _getCredentials.getCredentials)(options.projectKey); }; var deleteOrNot = function deleteOrNot(personalDataEraser, answer) { if (answer === true) { personalDataEraser.deleteAll(args.customerId); logger.info("All data related to customer with id '".concat(args.customerId, "' has successfully been deleted.")); } else { logger.info('No data was deleted.'); } }; resolveCredentials(args).then(function (credentials) { var apiConfig = { host: args.authUrl, apiUrl: args.apiUrl, projectKey: args.projectKey, credentials: credentials }; var exporterOptions = { apiConfig: apiConfig, accessToken: args.accessToken, predicate: args.where, logger: { error: logger.error.bind(logger), warn: logger.warn.bind(logger), info: logger.info.bind(logger), debug: logger.debug.bind(logger) } }; return new _main["default"](exporterOptions); }).then(function (personalDataEraser) { if (args.deleteAll) { if (args.force) deleteOrNot(personalDataEraser, args.force);else { var confirm = new _promptConfirm["default"]("Are you sure you want to delete all data related to customer with \nid: \"".concat(args.customerId, "\"?")); confirm.run().then(function (answer) { deleteOrNot(personalDataEraser, answer); }); } } else { personalDataEraser.getCustomerData(args.customerId).then(function (result) { if (args.output === 'stdout') { // eslint-disable-next-line } else { _fs["default"].writeFile(args.output, JSON.stringify(result, null, 2), function (err) { if (err) throw err; logger.info("".concat(result.length, " entities has been successfully written to file '").concat(args.output, "'")); }); } }); } })["catch"](errorHandler);