piper-utils 1.0.11 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/main.js CHANGED
@@ -389,7 +389,7 @@ dynamoUtil;
389
389
  \******************************************/
390
390
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
391
391
 
392
- Object.defineProperty(exports, "__esModule", ({ value: true }));exports.handleEvents = handleEvents;var _handleFile = __webpack_require__(/*! ./handleFile.js */ "./src/eventManager/handleFile.js");var _lodash = __webpack_require__(/*! lodash */ "lodash");var _lodash2 = _interopRequireDefault(_lodash);var _bluebird = __webpack_require__(/*! bluebird */ "bluebird");var _bluebird2 = _interopRequireDefault(_bluebird);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function handleEvents(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders = false, userImportTypes) {
392
+ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.handleEvents = handleEvents;exports.handleEventsS3 = handleEventsS3;var _handleFile = __webpack_require__(/*! ./handleFile.js */ "./src/eventManager/handleFile.js");var _lodash = __webpack_require__(/*! lodash */ "lodash");var _lodash2 = _interopRequireDefault(_lodash);var _bluebird = __webpack_require__(/*! bluebird */ "bluebird");var _bluebird2 = _interopRequireDefault(_bluebird);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function handleEvents(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders = false, userImportTypes) {if (!event || !event.Records) {return _bluebird2.default.resolve();}let hasErrors = false;return _bluebird2.default.map(event.Records, (record) => {const snsInfo = JSON.parse(_lodash2.default.get(record, 'Sns.Message', '{}'));const s3Bucket = snsInfo.bucket;const files = snsInfo.files || [];return _bluebird2.default.map(files, (file) => {let path = decodeURIComponent(file);console.log('------->path', path);if (path) {return (0, _handleFile.handleFile)(path, s3Bucket, transformer, { shouldSkipFailedFolders, userImportTypes }).catch((err) => {if (errorHandlerPerFile && !errorHandlerPerFile(err, path)) {hasErrors = true;}});}});}).then(() => {if (hasErrors) {throw 'Errors processing one or more files. See error logs for detail on each error.';}});}function handleEventsS3(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders = false, userImportTypes) {
393
393
  if (!event || !event.Records) {
394
394
  return _bluebird2.default.resolve();
395
395
  }
@@ -397,20 +397,19 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.handleEv
397
397
  let hasErrors = false;
398
398
 
399
399
  return _bluebird2.default.map(event.Records, (record) => {
400
- const snsInfo = JSON.parse(_lodash2.default.get(record, 'Sns.Message', '{}'));
401
- const s3Bucket = snsInfo.bucket;
402
- const files = snsInfo.files || [];
403
-
404
- return _bluebird2.default.map(files, (file) => {
405
- let path = decodeURIComponent(file);
406
- if (path) {
407
- return (0, _handleFile.handleFile)(path, s3Bucket, transformer, { shouldSkipFailedFolders, userImportTypes }).catch((err) => {
408
- if (errorHandlerPerFile && !errorHandlerPerFile(err, path)) {
409
- hasErrors = true;
410
- }
411
- });
412
- }
413
- });
400
+ const s3Bucket = record.s3;
401
+ const file = record.s3.object.key || [];
402
+
403
+
404
+ let path = decodeURIComponent(file);
405
+ if (path) {
406
+ return (0, _handleFile.handleFile)(path, s3Bucket, transformer, { shouldSkipFailedFolders, userImportTypes }).catch((err) => {
407
+ if (errorHandlerPerFile && !errorHandlerPerFile(err, path)) {
408
+ hasErrors = true;
409
+ }
410
+ });
411
+ }
412
+
414
413
  }).then(() => {
415
414
  if (hasErrors) {
416
415
  throw 'Errors processing one or more files. See error logs for detail on each error.';
@@ -512,7 +511,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.loop = l
512
511
  * @param {string} bucket
513
512
  * @param {number} maxKeys
514
513
  * @param {Object} userImportTypes
515
- */async function loop(bucket, maxKeys, userImportTypes) {let bucketResult = {};let fileList = [];const currentTime = (0, _moment2.default)();do {bucketResult = await _S3Utils2.default.listObjectsV2({ Bucket: bucket, MaxKeys: maxKeys, ContinuationToken: _lodash2.default.get(bucketResult, 'NextContinuationToken') });let newFiles = _lodash2.default.filter(bucketResult.Contents, (file) => {if (_lodash2.default.startsWith(_lodash2.default.get(file, 'Key'), 'delayUntil/')) {const fileDelayTime = _lodash2.default.get(file, 'Key').split('/')[1];return (0, _moment2.default)(fileDelayTime, 'YYYYMMDDHHmm').isSameOrBefore(currentTime);}if (userImportTypes) {// look for items in the userImportTypes
514
+ */async function loop(bucket, maxKeys, userImportTypes, prefix) {let bucketResult = {};let fileList = [];const currentTime = (0, _moment2.default)();do {bucketResult = await _S3Utils2.default.listObjectsV2({ Bucket: bucket, MaxKeys: maxKeys, ContinuationToken: _lodash2.default.get(bucketResult, 'NextContinuationToken'), Prefix: prefix });let newFiles = _lodash2.default.filter(bucketResult.Contents, (file) => {if (_lodash2.default.startsWith(_lodash2.default.get(file, 'Key'), 'delayUntil/')) {const fileDelayTime = _lodash2.default.get(file, 'Key').split('/')[1];return (0, _moment2.default)(fileDelayTime, 'YYYYMMDDHHmm').isSameOrBefore(currentTime);}if (userImportTypes) {// look for items in the userImportTypes
516
515
  const usersImports = Object.values(userImportTypes);const items = file.Key.split('/');const fileName = _lodash2.default.last(items);const folderName = _lodash2.default.first(items);if (_lodash2.default.isEmpty(fileName)) {return false;} else if (usersImports.indexOf(folderName) === -1) {return false;}return !_lodash2.default.startsWith(file.Key, `${folderName}/error`);}return !_lodash2.default.startsWith(file.Key, 'error');});fileList = _lodash2.default.concat(fileList, newFiles);} while (bucketResult.IsTruncated && bucketResult.NextContinuationToken && fileList.length < maxKeys);return fileList;} /**
517
516
  * Published SNS events at a steady pace for data in a particular bucket. Should be executed via a cloud watch cron job as a part of a micro service
518
517
  *
@@ -521,11 +520,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.loop = l
521
520
  * @param {string} bucket - The name of the s3 bucket to watch, when you drop items into this table events will be created
522
521
  * @param {string} snsTopic - The name of the snsEvent to publish
523
522
  * @param {object} userImportTypes - import types to filter on
524
- */async function publishEvents(configTable, tableKey, bucket, snsTopic, userImportTypes) {let result;try {result = await _dynamoUtils2.default.get({ TableName: configTable, Key: { key: tableKey } });} catch (e) {console.error(`Cannot get config for key: ${tableKey} table: ${configTable} falling back to defaults of 2 and 10`, e);}let chunkSize = _lodash2.default.get(result, 'Item.snsChunkSize', 2);let maxMessages = _lodash2.default.get(result, 'Item.snsMaxMessages', 10);const snsCreateTopicResponse = await _SNSUtils2.default.createTopic({ Name: snsTopic });
525
- const topicArn = snsCreateTopicResponse.TopicArn;
523
+ * @param {object} prefix - subdirectory or file prefix
524
+ */async function publishEvents(configTable, tableKey, bucket, snsTopic, userImportTypes, prefix) {let result;try {result = await _dynamoUtils2.default.get({ TableName: configTable, Key: { key: tableKey } });} catch (e) {console.error(`Cannot get config for key: ${tableKey} table: ${configTable} falling back to defaults of 2 and 10`, e);}let chunkSize = _lodash2.default.get(result, 'Item.snsChunkSize', 2);let maxMessages = _lodash2.default.get(result, 'Item.snsMaxMessages', 10);const snsCreateTopicResponse = await _SNSUtils2.default.createTopic({ Name: snsTopic });const topicArn = snsCreateTopicResponse.TopicArn;
526
525
  const maxKeys = chunkSize * maxMessages;
527
526
 
528
- const fileList = await loop(bucket, maxKeys, userImportTypes);
527
+ const fileList = await loop(bucket, maxKeys, userImportTypes, prefix);
529
528
 
530
529
  const messageList = _lodash2.default.chain(fileList).
531
530
  map('Key').
@@ -566,14 +565,17 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.watchBuc
566
565
  * @param {function} [params.errorHandlerPerFile] - the function to run on as a catch on each file
567
566
  * @param {boolean} [params.shouldSkipFailedFolders] - whether to use the failed-once, failed-twice, error or just error folders
568
567
  * @param {object} [params.userImportTypes] - user import sub directories object map
569
- */function watchBucket({ event, dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, transformer, errorHandlerPerFile = _lodash2.default.noop, shouldSkipFailedFolders = false, userImportTypes }) {if (!event || !dynamoConfigTable || !dynamoConfigKey || !s3Bucket || !snsTopic || !transformer) {throw new Error('Missing required parameters. Need event, dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, transformer');}
568
+ * @param {object} [params.prefix] - watch a sub directory in the bucket - specify the subdirectory as a prefix
569
+ */function watchBucket({ event, dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, transformer, errorHandlerPerFile = _lodash2.default.noop, shouldSkipFailedFolders = false, userImportTypes, prefix }) {if (!event || !dynamoConfigTable || !dynamoConfigKey || !s3Bucket || !snsTopic || !transformer) {throw new Error('Missing required parameters. Need event, dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, transformer');}
570
570
 
571
571
  const EventSource = _lodash2.default.get(event, 'Records[0].EventSource');
572
572
  if (_lodash2.default.isEqual(EventSource, 'aws:sns')) {
573
573
  return (0, _handleEvents.handleEvents)(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders, userImportTypes);
574
+ } else if (_lodash2.default.isEqual(EventSource, 'aws:s3')) {
575
+ return (0, _handleEvents.handleEventsS3)(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders, userImportTypes);
574
576
  } else {
575
577
  // the function is being run from the cron job so publish SNS events
576
- return (0, _publishEvents.publishEvents)(dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, userImportTypes);
578
+ return (0, _publishEvents.publishEvents)(dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, userImportTypes, prefix);
577
579
  }
578
580
  }
579
581
 
@@ -728,7 +730,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));const errorList
728
730
 
729
731
  Object.defineProperty(exports, "__esModule", ({ value: true }));exports.success = success;exports.successHtml = successHtml;exports.getCurrentUserNameFromCognitoEvent = getCurrentUserNameFromCognitoEvent;exports.getCurrentUser = getCurrentUser;exports.failure = failure;exports.parseBody = parseBody;exports.parseEvent = parseEvent;exports.detectSequelizeError = detectSequelizeError;exports.detectJoyError = detectJoyError;var _lodash = __webpack_require__(/*! lodash */ "lodash");var _lodash2 = _interopRequireDefault(_lodash);var _errorCodes = __webpack_require__(/*! ./errorCodes.js */ "./src/requestResonse/errorCodes.js");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };} /**
730
732
  * @param {Object} body
731
- * @param {{}} options
733
+ * @param {{dbClose?:function}} [options]
732
734
  */function success(body, options) {const dbClose = _lodash2.default.get(options, 'dbClose', _lodash2.default.noop);dbClose();return buildResponse(200, body);} /**
733
735
  * @param {string} html
734
736
  * @param {{dbClose:function|undefined}} options
package/bin/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","mappings":"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","sources":["webpack://piper-utils/./src/database/dbSetup/migrations.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/accessRightsUtils.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/createFilters.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/createIncludes.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/createSort.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/defaultFilters.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/findAll.js","webpack://piper-utils/./src/dynamo/dynamoUtils.js","webpack://piper-utils/./src/eventManager/handleEvents.js","webpack://piper-utils/./src/eventManager/handleFile.js","webpack://piper-utils/./src/eventManager/publishEvents.js","webpack://piper-utils/./src/eventManager/watchBucket.js","webpack://piper-utils/./src/requestResonse/errorCodes.js","webpack://piper-utils/./src/requestResonse/requestResponse.js","webpack://piper-utils/./src/s3/S3Utils.js/S3Utils.js","webpack://piper-utils/./src/sns/SNSUtils.js","webpack://piper-utils/external commonjs \"@aws-sdk/client-dynamodb\"","webpack://piper-utils/external commonjs \"@aws-sdk/client-s3\"","webpack://piper-utils/external commonjs \"@aws-sdk/client-sns\"","webpack://piper-utils/external commonjs \"@aws-sdk/lib-dynamodb\"","webpack://piper-utils/external commonjs \"bluebird\"","webpack://piper-utils/external commonjs \"lodash\"","webpack://piper-utils/external commonjs \"moment\"","webpack://piper-utils/external commonjs \"moment/moment.js\"","webpack://piper-utils/external commonjs \"sequelize\"","webpack://piper-utils/external commonjs \"umzug\"","webpack://piper-utils/webpack/bootstrap","webpack://piper-utils/./src/index.js"],"sourcesContent":["import _ from 'lodash';\nimport { SequelizeStorage, Umzug } from 'umzug';\n\n/**\n * Execute database migrations\n * @param {string} databaseName - name of database to create (or verify existence)\n * @param {object} sequelizeInstance - instance of Sequelize (must be initialized)\n * @param {function} initializeModels - function to run to sync Sequelize models with database\n * @param {string} pathToMigrationFolder - pass in the path if using windows. windows and linux PWD will be different\n */\nexport async function runMigrations(databaseName,\n sequelizeInstance,\n initializeModels,\n pathToMigrationFolder = `${process.env.PWD}/migrations/*.js`) {\n const umzug = new Umzug({\n migrations: { glob: pathToMigrationFolder },\n context: sequelizeInstance.getQueryInterface(),\n storage: new SequelizeStorage({ sequelize: sequelizeInstance }),\n logger: console\n });\n\n const pendingMigrations = await umzug.pending();\n console.log('------->UTIL Pending Migrations:', pendingMigrations, pathToMigrationFolder);\n await umzug.up().catch((upError) => {\n return umzug.down({\n migrations: _.chain(pendingMigrations)\n .map('file')\n .reverse()\n .value()\n }).then(() => {\n const msg = 'UTIL Error: Error with migrating up:' + upError;\n console.error(msg);\n throw new Error(msg);\n }, (downError) => {\n const msg = 'UTIL Error: Error with migrating down:' + downError;\n console.error(msg);\n throw new Error(msg);\n });\n });\n\n // The following line is needed to sync (create) tables, but not to database updates\n // in the past it worked to leave it in, but now the tags module causes foreign key problems\n // The tables are still initiated by being passed in to run migrations\n await initializeModels();\n}","import _, { isEmpty } from 'lodash';\nimport { errorList } from '../../../requestResonse/errorCodes.js';\nimport { parseBody } from '../../../requestResonse/requestResponse.js';\n\n/**\n * Get the allowed businessIds for a user from the lambda event, compare it to businessIds, return what user has access to.\n *\n * @param {object} event - The lambda event passed in by a validated api request.\n * @param {{useCognitoBid:boolean}} [options] - An object with options, useCognitoBid prefers the businessId set in cognito if set and does not return the local bid of 1 if a bid is in the claim.\n * @returns {array} A list of businessIds that have been requested and are allowed to for some user.\n */\nexport function accessRightsUtils(event, options) {\n const useCognitoBid = _.get(options, 'useCognitoBid', false);\n const requestedBusinessIds = getRequestedBusinessIds(event);\n const allowedBusinessIds = getAllowedBusinessIds(event, useCognitoBid);\n const localBidList = ['1'];\n\n // if we are on local return for all bids in access rights\n if (_.isEmpty(allowedBusinessIds) &&\n !_.get(event, 'requestContext.authorizer.claims') &&\n !_.get(event, 'requestContext.authorizer.custom:AR') &&\n process.env.BUILD_ENV !== 'production' &&\n process.env.BUILD_ENV !== 'staging') {\n if (requestedBusinessIds.length === 0) {\n return localBidList;\n } else {\n return _.intersection(requestedBusinessIds, localBidList);\n }\n } else if (requestedBusinessIds.length === 0) {\n return allowedBusinessIds;\n }\n\n return _.intersection(requestedBusinessIds, allowedBusinessIds);\n}\n\n/**\n * Get the businessID set in cognito as custom:DBI.\n *\n * @param {object} event - The lambda event passed in by a validated api request.\n * @returns {string} The businessID set in cognito as custom:DBI\n */\nexport function userDefaultBid(event) {\n let jsonToParse = _.get(event, 'requestContext.authorizer.claims.custom:DBI') ||\n _.get(event, 'requestContext.authorizer.custom:DBI') ||\n '{}';\n\n const dbi = JSON.parse(jsonToParse);\n return _.get(dbi, 'defaultBid', '') || '1';\n}\n\n/**\n * Get requested businessIds from the query string.\n *\n * @param {object} event - The lambda event passed in by a validated api request.\n * @returns {array} The businessID requested by the query string\n */\nfunction getRequestedBusinessIds(event) {\n let requestedBusinessIds = _.get(event, 'queryStringParameters.businessIds', null);\n\n return requestedBusinessIds ? requestedBusinessIds.split(',') : [];\n}\n\n/**\n * Get the allowed businessIds for a user from cognito custom:AR property.\n *\n * @param {object} event - The lambda event passed in by a validated api request.\n * @param useCognitoBid\n * @returns {array} The businessID requested by the query string\n */\nfunction getAllowedBusinessIds(event, useCognitoBid) {\n const businesses = getBusinessesInfo(event, useCognitoBid);\n return Object.keys(businesses);\n}\n\nexport function getBusinessesInfo(event, useCognitoBid) {\n let jsonToParse = _.get(event, 'requestContext.authorizer.claims.custom:AR') ||\n _.get(event, 'requestContext.authorizer.custom:AR') ||\n '{}';\n const accessRights = JSON.parse(jsonToParse);\n\n if (process.env.BUILD_ENV === 'local') {\n if (!isEmpty(accessRights)) {\n const bids = _.get(accessRights, 'businessIds', {});\n let withLocal;\n if (useCognitoBid) {\n withLocal = { ...bids };\n } else {\n withLocal = { ...bids, '1': 'A' };\n }\n\n _.set(accessRights, 'businessIds', withLocal);\n\n return _.get(accessRights, 'businessIds', {});\n } else {\n const ar = { 'businessIds': { '1': 'A' } };\n return _.get(ar, 'businessIds', {});\n }\n }\n\n return _.get(accessRights, 'businessIds', {});\n}\n\n/**\n * Get the modules listed in custom:MOD.\n *\n * @param {object} event - The lambda event passed in by a validated api request.\n * @returns {array} The Module access list\n */\nexport function getModuleInfo(event) {\n let jsonToParse =\n _.get(event, 'requestContext.authorizer.claims.custom:MOD') ||\n _.get(event, 'requestContext.authorizer.custom:MOD') ||\n _.get(event, 'requestContext.authorizer.claims.custom:AR') ||\n _.get(event, 'requestContext.authorizer.custom:AR') ||\n\n '{}';\n\n const moduleRights = JSON.parse(jsonToParse);\n return _.get(moduleRights, 'module', {});\n}\n\n/**\n * Get the modules listed in custom:MOD.\n *\n * @param {string} moduleName - A sting name for a module.\n * @param {object} event - The lambda event passed in by a validated api request.\n * @returns {array} The Module access list\n */\nexport function checkModule(moduleName, event) {\n const moduleRights = getModuleInfo(event);\n let allowAccess = _.get(moduleRights, moduleName, false);\n\n if (process.env.BUILD_ENV === 'local') {\n return;\n }\n if (!allowAccess) {\n throw errorList.unauthorized;\n }\n}\n\nexport const userRoles = {\n admin: 'A',\n read: 'R',\n write: 'W'\n};\n\n/**\n * @param {{body: string}} event\n * @returns {string} businessId\n */\nexport function checkWriteAccess(event) {\n const eventBody = parseBody(event);\n const businessIds = accessRightsUtils(event) || [];\n const businessId = businessIds.find((id) => id === eventBody.businessId);\n const raw = getBusinessesInfo(event);\n const userRight = raw[businessId];\n\n if (process.env.BUILD_ENV === 'local') {\n return eventBody.businessId;\n }\n\n if ((userRight !== userRoles.admin && userRight !== userRoles.write) || (!userRight)) {\n throw errorList.unauthorized;\n }\n return businessId;\n}\n\n","import _ from 'lodash';\nimport DB from 'sequelize';\nimport moment from 'moment/moment.js';\nimport { errorList } from '../../../requestResonse/errorCodes.js';\nimport { accessRightsUtils } from './accessRightsUtils.js';\n\n/**\n * Create sequelize where clause from query string parameters and default sort object\n *\n * @param {object} event - the query parameters from the event passed by lambda\n * @param {object} objectFilters - the default filters object created by createDefaultFilters\n * @returns {object} An sequelize where object\n */\nexport const createFilters = function (event, objectFilters){\n let query = _.get(event, 'queryStringParameters', {}) || {};\n const startDate = _.get(query, 'startDate');\n const endDate = _.get(query, 'endDate');\n const where = Object.keys(query).reduce((acc, item) => {\n const val = _.get(objectFilters, item, null);\n\n if (val) {\n const itemName = item.includes('.')\n ? `$${item}$`\n : item;\n\n acc[itemName] = {};\n if (val.filterType === DB.Op.iLike) {\n acc[itemName][val.filterType] = `%${query[item]}%`;\n } else if (val.filterType === DB.Op.or) {\n acc[itemName][val.filterType] = [-1 * +query[item], +query[item]];\n } else if (val.filterType === DB.Op.in) {\n acc[itemName][val.filterType] = query[item].split(',');\n } else if (val.filterType === DB.Op.in) {\n acc[itemName][val.filterType] = query[item].split(',');\n } else {\n let parsedJson;\n try {\n // value is JSON, parse it\n parsedJson = JSON.parse(query[item]);\n } catch (e) {\n // value is not JSON, pass through as a string\n parsedJson = query[item];\n }\n acc[itemName][val.filterType] = parsedJson;\n }\n\n if (val.type === DB.BOOLEAN) {\n const queryValue = _.get(query, item, '').toLowerCase();\n\n const booleanMap = {\n 'false': false,\n 'null': null,\n 'true': true\n };\n\n acc[itemName][val.filterType] = booleanMap[queryValue];\n }\n }\n\n return acc;\n }, {});\n\n if (objectFilters?.active && !where?.active) {\n where.active = true;\n }\n\n const businessIds = accessRightsUtils(event);\n const filterAdds = {\n businessId: businessIds\n };\n\n if (startDate && endDate) {\n const s = moment.utc(startDate);\n const e = moment.utc(endDate);\n const dates = {\n [DB.Op.between]: [s.toDate(), e.toDate()]\n };\n if (!s.isValid()) {\n throw { ...errorList.invalidStartDate };\n }\n\n if (!e.isValid()) {\n throw { ...errorList.invalidEndDate };\n }\n\n filterAdds.createdAt = dates;\n }\n\n const withDate = Object.assign(where, filterAdds);\n\n return withDate;\n};\n","import _ from 'lodash';\n\n/**\n * Create sequelize includes array from query string parameters and default sequelize model\n *\n * @param {object} event - the query parameters from the event passed by lambda\n * @param {object} objectFilters - the default filters object created by createDefaultFilters\n * @returns {object} A sequelize includes array\n */\n\nexport function createIncludes(event, objectFilters) {\n const query = _.get(event, 'queryStringParameters', {}) || {};\n\n const keys = Object.keys(objectFilters);\n\n const canBeIncluded = keys.reduce((acc, item) => {\n acc = includeSubItem(item, acc);\n\n return acc;\n }, []);\n\n const askedForInQuery = Object.keys(query).reduce((acc, item) => {\n if (item === 'sort') {\n query[item].split(',').forEach((sortItem) => {\n sortItem = sortItem.indexOf('-') === 0 ? sortItem.substr(1) : sortItem;\n acc = includeSubItem(sortItem, acc);\n });\n }\n\n acc = includeSubItem(item, acc);\n\n return acc;\n }, []);\n\n return _.intersection(canBeIncluded, askedForInQuery);\n}\n\nexport function includeSubItem(queryStringItem, acc = []) {\n const dot = queryStringItem.indexOf('.');\n if (dot > 0) {\n acc.push(queryStringItem.substring(0, dot));\n }\n\n return acc;\n}","import _ from 'lodash';\n\n/**\n * Create sequelize order clause from query string parameters and default sort object\n *\n * @param {object} event - the event created AWS lambda, it will contain queryStringParameters with sort property a comma seperated list of sortable fields * @param {object} objectFilters - the default filters object created by createDefaultFilters\n * @param {object} defaultFilter - A default filter object as built by createDefault Filters, if items are not on the schema they will not be in the order by\n * @returns {object} An sequelize order by object\n */\nexport const createSort = function (event, defaultFilter) {\n let copyOfDefaultFilter = _.clone(defaultFilter);\n let query = _.get(event, 'queryStringParameters', {}) || {};\n let sort = _.get(query, 'sort', '-updatedAt') || '-updatedAt';\n\n return sort.split(',').reduce((acc, item) => {\n\n const testItem = item.indexOf('-') === 0 ? item.substr(1) : item;\n\n if (_.get(copyOfDefaultFilter, testItem, null)) {\n const sortItem = [];\n\n testItem.split('.').forEach((parentChildList) => {\n sortItem.push(parentChildList);\n });\n\n if (item.indexOf('-') === 0) {\n sortItem.push('DESC');\n } else {\n sortItem.push('ASC');\n }\n acc.push(sortItem);\n }\n\n return acc;\n }, []);\n};\n","import _ from 'lodash';\nimport DB from 'sequelize';\n\n/**\n * Create an object with default filters for a given sequeliaze Schema Object, and set of sub schemas\n *\n * @param {object} schema - type is sequelize data type\n * @param {object} subSchemas - An object with alias as the key and sequelize schema as the value http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#instance-method-define\n * sub schema can be {location: locationSchema} or {location: {as: \"asAlias\", schema: schema}}\n * @returns {object} An Object with a default filter for each dataType CHAR and TEXT will get a $like operator, INTEGER, DECIMAL and BOOLEAN will get a $eq.\n */\nexport function defaultFilters(schema, subSchemas = {}) {\n schema = _.clone(schema);\n\n const filters = {};\n\n addFiltersFromSchema(schema, filters);\n Object.keys(subSchemas).forEach((key) => {\n addFiltersFromSchema(subSchemas[key], filters, key);\n });\n\n return filters;\n}\n\nexport function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {\n const asLinkAlias = _.get(schema, 'as', null);\n schema = _.get(schema, 'schema') || schema;\n\n return Object.keys(schema).reduce((acc, item) => {\n let key = item;\n\n if (asLinkAlias) {\n acc[asLinkAlias] = { type: DB.STRING, filterType: DB.Op.eq };\n }\n\n if (keyPrefix) {\n key = `${keyPrefix}.${item}`;\n }\n\n if (schema[item].filterType) {\n acc[key] = { filterType: schema[item].filterType };\n\n return acc;\n }\n\n const itemType = schema[item].type;\n\n //todo these should be removed, there are just here for sort tests\n switch (itemType) {\n case DB.CHAR:\n case DB.STRING:\n case DB.TEXT:\n acc[key] = { filterType: DB.Op.iLike };\n break;\n\n case DB.DECIMAL:\n acc[key] = { filterType: DB.Op.or };\n break;\n\n case DB.BOOLEAN:\n case DB.BIGINT:\n case DB.INTEGER:\n acc[key] = { type: itemType, filterType: DB.Op.eq };\n break;\n\n case DB.DATE:\n case DB.DATEONLY:\n acc[key] = { filterType: DB.Op.lt };\n break;\n }\n\n //new sequelize uses classes instead of objects\n if (itemType instanceof DB.STRING) {\n acc[key] = { filterType: DB.Op.iLike };\n } else if (itemType instanceof DB.DECIMAL) {\n acc[key] = { filterType: DB.Op.or };\n } else if (itemType instanceof DB.INTEGER) {\n acc[key] = { filterType: DB.Op.or };\n } else if (itemType instanceof DB.BIGINT) {\n acc[key] = { filterType: DB.Op.or };\n } else if (itemType instanceof DB.BOOLEAN) {\n acc[key] = { type: itemType, filterType: DB.Op.eq };\n } else if (itemType instanceof DB.JSONB) {\n acc[key] = { type: itemType, filterType: DB.Op.contains };\n } else if (itemType instanceof DB.DATEONLY) {\n acc[key] = { type: itemType, filterType: DB.Op.eq };\n }\n\n //these are not part of the models so add them always\n acc['createdAt'] = { type: DB.DATE, filterType: DB.Op.lt };\n acc['updatedAt'] = { type: DB.DATE, filterType: DB.Op.lt };\n acc['id'] = { type: DB.INTEGER, filterType: DB.Op.eq };\n\n return acc;\n }, accumulator);\n}\n","/**\n * create pagination object from Sequelize findAll\n * @param {object} result - sequelize result\n * @param {number} limit - max number of results to return\n * @param {number} offset - page offset\n */\nexport function getPaginationFromFindAll(result, limit, offset) {\n result = result || [];\n limit = limit || 0;\n offset = offset || 0;\n\n const hasMore = result.length > limit;\n if (hasMore) {\n result.splice(-1, 1);\n }\n const pageObject = {\n offset: offset,\n limit: limit,\n rows: result,\n hasMore: hasMore\n };\n\n return pageObject;\n}\n\n/**\n * wrapper for Sequelize findAll\n * @param {object} model - instance of Sequelize (must be initialized)\n * @param {*&{include: [{model: *}], where: {businessId: Array}, order: [string[]]}} options - instance of Sequelize (must be initialized)\n */\nexport async function findAll(model, options) {\n\n const limit = options.limit || 0;\n const findArgs = Object.assign({include: { all: true, nested: true }}, options, { limit: limit + 1 });\n const results = await model.findAll(findArgs);\n return getPaginationFromFindAll(results, limit, options.offset);\n}\n\nconst findUtils = {\n findAll\n};\nexport default findUtils;","import { DynamoDBDocument } from '@aws-sdk/lib-dynamodb';\r\nimport { DynamoDB } from '@aws-sdk/client-dynamodb';\r\n\r\nconst dynamoUtil = {\r\n get: (params) => get(params)\r\n};\r\n\r\n/**\r\n * @param {{TableName:string, Key:{key:string}}} params\r\n */\r\nasync function get(params) {\r\n const dynamoDb = DynamoDBDocument.from(new DynamoDB());\r\n return dynamoDb.get(params);\r\n}\r\n\r\nexport default dynamoUtil;","import { handleFile } from './handleFile.js';\nimport _ from 'lodash';\nimport Promise from 'bluebird';\n\nexport function handleEvents(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders = false, userImportTypes) {\n if (!event || !event.Records) {\n return Promise.resolve();\n }\n\n let hasErrors = false;\n\n return Promise.map(event.Records, (record) => {\n const snsInfo = JSON.parse(_.get(record, 'Sns.Message', '{}'));\n const s3Bucket = snsInfo.bucket;\n const files = snsInfo.files || [];\n\n return Promise.map(files, (file) => {\n let path = decodeURIComponent(file);\n if (path) {\n return handleFile(path, s3Bucket, transformer, { shouldSkipFailedFolders, userImportTypes }).catch((err) => {\n if (errorHandlerPerFile && !errorHandlerPerFile(err, path)) {\n hasErrors = true;\n }\n });\n }\n });\n }).then(() => {\n if (hasErrors) {\n throw 'Errors processing one or more files. See error logs for detail on each error.';\n }\n });\n}\n","import _ from 'lodash';\nimport S3Util from '../s3/S3Utils.js/S3Utils.js';\n\nexport async function handleFile(path, s3Bucket, transformer, options) {\n const shouldSkipFailedFolders = _.get(options, 'shouldSkipFailedFolders');\n const userImportTypes = _.get(options, 'userImportTypes');\n const params = {\n Bucket: s3Bucket,\n Key: path\n };\n let body = '{}'\n try {\n body = await S3Util.getObject(params);\n const parsedBody = JSON.parse(body);\n const returnedValue = await transformer(parsedBody);\n await S3Util.deleteObject(params);\n\n return returnedValue;\n } catch (error) {\n console.error('handle-file-error', error);\n\n if (error.code === 'NoSuchKey' || !body) {\n return;\n }\n\n let newPath = '';\n\n if (userImportTypes) {\n // look for items in the userImportTypes\n const usersImports = Object.values(userImportTypes);\n const items = path.split('/');\n const fileName = _.last(items);\n const folderName = _.first(items);\n\n if (usersImports.indexOf(folderName) > -1) {\n if (shouldSkipFailedFolders) {\n newPath = `${folderName}/error/${fileName}`;\n } else if (_.startsWith(path, `${folderName}/failed-once/`)) {\n newPath = _.replace(path, `${folderName}/failed-once/`, `${folderName}/failed-twice/`);\n } else if (_.startsWith(path, `${folderName}/failed-twice/`)) {\n newPath = _.replace(path, `${folderName}/failed-twice/`, `${folderName}/error/`);\n } else {\n newPath = `${folderName}/failed-once/${fileName}`;\n }\n } else {\n newPath = `pathAndEventMisMatchError/${path}`;\n }\n\n } else {\n if (shouldSkipFailedFolders) {\n newPath = `error/${path}`;\n } else if (_.startsWith(path, 'failed-once/')) {\n newPath = _.replace(path, 'failed-once/', 'failed-twice/');\n } else if (_.startsWith(path, 'failed-twice/')) {\n newPath = _.replace(path, 'failed-twice/', 'error/');\n } else {\n if (_.includes(path, 'delayUntil/')) {\n path = _.last(path.split('/'));\n }\n\n newPath = `failed-once/${path}`;\n }\n }\n\n const newParams = {\n Bucket: s3Bucket,\n Key: newPath,\n Body: body\n };\n\n await S3Util.putObject(newParams);\n await S3Util.deleteObject(params);\n\n throw error;\n }\n}\n","import _ from 'lodash';\nimport moment from 'moment';\nimport Promise from 'bluebird';\nimport S3Utils from '../s3/S3Utils.js/S3Utils.js';\nimport SNSUtil from '../sns/SNSUtils.js';\nimport dynamoUtil from '../dynamo/dynamoUtils.js';\n\n/**\n * @param {string} bucket\n * @param {number} maxKeys\n * @param {Object} userImportTypes\n */\nexport async function loop(bucket, maxKeys, userImportTypes) {\n let bucketResult = {};\n let fileList = [];\n\n const currentTime = moment();\n\n do {\n bucketResult = await S3Utils.listObjectsV2({\n Bucket: bucket,\n MaxKeys: maxKeys,\n ContinuationToken: _.get(bucketResult, 'NextContinuationToken')\n });\n\n let newFiles = _.filter(bucketResult.Contents, (file) => {\n if (_.startsWith(_.get(file, 'Key'), 'delayUntil/')) {\n const fileDelayTime = _.get(file, 'Key').split('/')[1];\n return moment(fileDelayTime, 'YYYYMMDDHHmm').isSameOrBefore(currentTime);\n }\n if (userImportTypes) {\n // look for items in the userImportTypes\n const usersImports = Object.values(userImportTypes);\n const items = file.Key.split('/');\n const fileName = _.last(items);\n const folderName = _.first(items);\n if (_.isEmpty(fileName)) {\n return false;\n\n } else if (usersImports.indexOf(folderName) === -1) {\n return false;\n }\n\n return !_.startsWith(file.Key, `${folderName}/error`);\n }\n return !_.startsWith(file.Key, 'error');\n });\n\n fileList = _.concat(fileList, newFiles);\n } while (bucketResult.IsTruncated && bucketResult.NextContinuationToken && fileList.length < maxKeys);\n\n return fileList;\n}\n\n/**\n * Published SNS events at a steady pace for data in a particular bucket. Should be executed via a cloud watch cron job as a part of a micro service\n *\n * @param {string} configTable - The Dynamo DB table where to get the chunk-size and maxMessage size\n * @param {string} tableKey - The key to the item in the Dynamo DB table that holds the chunk-size and maxMessage size\n * @param {string} bucket - The name of the s3 bucket to watch, when you drop items into this table events will be created\n * @param {string} snsTopic - The name of the snsEvent to publish\n * @param {object} userImportTypes - import types to filter on\n */\nexport async function publishEvents(configTable, tableKey, bucket, snsTopic, userImportTypes) {\n let result;\n try {\n result = await dynamoUtil.get({\n TableName: configTable,\n Key: { key: tableKey }\n });\n } catch (e) {\n console.error(`Cannot get config for key: ${tableKey} table: ${configTable} falling back to defaults of 2 and 10`, e);\n }\n let chunkSize = _.get(result, 'Item.snsChunkSize', 2);\n let maxMessages = _.get(result, 'Item.snsMaxMessages', 10);\n\n const snsCreateTopicResponse = await SNSUtil.createTopic({ Name: snsTopic });\n const topicArn = snsCreateTopicResponse.TopicArn;\n const maxKeys = chunkSize * maxMessages;\n\n const fileList = await loop(bucket, maxKeys, userImportTypes);\n\n const messageList = _.chain(fileList)\n .map('Key')\n .chunk(chunkSize)\n .slice(0, maxMessages)\n .value()\n ;\n\n return Promise.map(messageList, (files) => {\n return SNSUtil.publish({\n Message: JSON.stringify({\n bucket: bucket,\n files: files\n }),\n TopicArn: topicArn\n });\n });\n}","import { publishEvents } from './publishEvents.js';\nimport { handleEvents } from './handleEvents.js';\nimport _ from 'lodash';\n\n/**\n * bucket watcher watches a s3 bucket and publishes events to a sns topic, this allows you to process files in s3 with a some transformer function\n *\n * @param {object} params - The parameters for watchBucket, see below\n * @param {object} params.event - The event of the lambda\n * @param {string} params.dynamoConfigTable - The Dynamo DB table where to get the chunkSize and maxMessage size\n * @param {string} params.dynamoConfigKey - The key to the item in the Dynamo DB table that holds the chunkSize and maxMessage size\n * @param {string} params.s3Bucket - The name of the s3 bucket to watch, when you drop items into this table events will be created\n * @param {string} params.snsTopic - The name of the snsEvent to publish\n * @param {function} params.transformer - the function to run on each file\n * @param {function} [params.errorHandlerPerFile] - the function to run on as a catch on each file\n * @param {boolean} [params.shouldSkipFailedFolders] - whether to use the failed-once, failed-twice, error or just error folders\n * @param {object} [params.userImportTypes] - user import sub directories object map\n */\nexport function watchBucket({\n event,\n dynamoConfigTable,\n dynamoConfigKey,\n s3Bucket,\n snsTopic,\n transformer,\n errorHandlerPerFile = _.noop,\n shouldSkipFailedFolders = false,\n userImportTypes\n }) {\n if (!event || !dynamoConfigTable || !dynamoConfigKey || !s3Bucket || !snsTopic || !transformer) {\n throw new Error('Missing required parameters. Need event, dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, transformer');\n }\n\n const EventSource = _.get(event, 'Records[0].EventSource');\n if (_.isEqual(EventSource, 'aws:sns')) {\n return handleEvents(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders, userImportTypes);\n } else {\n // the function is being run from the cron job so publish SNS events\n return publishEvents(dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, userImportTypes);\n }\n}\n","export const errorList = {\n invalidInventoryReleaseRequest: {\n message: 'NOT ENOUGH INVENTORY TO FULFILL RELEASE',\n errorCode: '4010',\n statusCode: 400\n },\n alreadyReleased: {\n message: 'ALREADY RELEASED',\n errorCode: '4011',\n statusCode: 400\n },\n alreadyReceived: {\n message: 'RECEIVABLE ALREADY RECEIVED',\n errorCode: '4012',\n statusCode: 400\n },\n invalidItemsRequest: {\n message: 'VALID ITEMS MUST BE INCLUDED',\n errorCode: '4013',\n statusCode: 400\n },\n invalidID: {\n message: 'ID is invalid',\n errorCode: '4014',\n statusCode: 400\n },\n invalidReceivable: {\n message: 'MUST CONTAIN AT LEAST ONE RECEIVABLE',\n errorCode: '4015',\n statusCode: 400\n },\n invalidRequest: {\n message: 'INVALID REQUEST DATA',\n errorCode: '4016',\n statusCode: 400\n },\n invalidAPIKey: {\n message: 'INVALID REQUEST - API MAY KEY INVALID',\n errorCode: '4017',\n statusCode: 400\n },\n qbCreationError: {\n message: 'QUICKBOOKS ERROR - ERROR CREATING OBJECT IN QUICKBOOKS',\n errorCode: '4018',\n statusCode: 400\n },\n cannotReopen: {\n message: 'CANNOT REOPEN - THE ORDER HAS ALREADY BEEN OPENED',\n errorCode: '4018',\n statusCode: 400\n },\n invalidDateFormat: {\n message: 'INVALID DATE FORMAT',\n errorCode: '4019',\n statusCode: 400\n },\n invalidStartDate: {\n message: 'INVALID START DATE',\n errorCode: '4020',\n statusCode: 400\n },\n invalidEndDate: {\n message: 'INVALID END DATE',\n errorCode: '4021',\n statusCode: 400\n },\n invalidOrderStatus: {\n message: 'UNABLE TO EDIT ORDER ITEMS UNLESS THE ORDER IS IN ESTIMATE STATUS',\n errorCode: '4022',\n statusCode: 400\n },\n invalidPaymentStatus: {\n message: 'UNABLE TO UPDATE PAYMENT STATUS PAYMENT MUST BE OPEN',\n errorCode: '4023',\n statusCode: 400\n },\n invalidReleaseStatus: {\n message: 'UNABLE TO UPDATE RELEASE, STATUS RELEASE MUST BE OPEN',\n errorCode: '4024',\n statusCode: 400\n },\n invalidReceivableStatus: {\n message: 'UNABLE TO UPDATE RECEIVABLE, STATUS RECEIVABLE MUST BE OPEN',\n errorCode: '40025',\n statusCode: 400\n },\n invalidJson:{\n message: 'INVALID JSON',\n errorCode: '4005',\n statusCode: 400\n },\n invalidFilter:{\n message: 'INVALID FILTER',\n errorCode: '4026',\n statusCode: 400\n },\n invalidUserNameUpdate:{\n message: 'UNABLE TO UPDATE USERNAME',\n errorCode: '4027',\n statusCode: 400\n },\n imageSizeLimit:{\n message: 'IMAGE SIZE LIMIT 100KB EXCEEDED',\n errorCode: '4028',\n statusCode: 400\n },\n unauthorized:{\n message: 'UNAUTHORIZED',\n errorCode: '4111',\n statusCode: 401\n },\n notFound:{\n message: 'ITEM NOT FOUND',\n errorCode: '4004',\n statusCode: 404\n },\n emailRequired:{\n message: 'NO EMAIL PROVIDED, CHECK CUSTOMER EMAIL',\n errorCode: '4004',\n statusCode: 404\n },\n mobilePhoneRequired:{\n message: 'NO MOBILE PHONE PROVIDED, CHECK CUSTOMER CONTACTS',\n errorCode: '4004',\n statusCode: 404\n },\n invalidCadenceType: {\n message: 'INVALID CADENCE TYPE',\n errorCode: '5001',\n statusCode: 500\n },\n};","import _ from 'lodash';\nimport { errorList } from './errorCodes.js';\n\n/**\n * @param {Object} body\n * @param {{}} options\n */\nexport function success(body, options) {\n const dbClose = _.get(options, 'dbClose', _.noop);\n dbClose();\n\n return buildResponse(200, body);\n}\n\n/**\n * @param {string} html\n * @param {{dbClose:function|undefined}} options\n */\nexport function successHtml(html, options) {\n const dbClose = _.get(options, 'dbClose', _.noop);\n\n dbClose();\n return {\n statusCode: 200,\n headers: {\n 'Content-Type': 'text/html',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Credentials': true\n },\n body: html\n };\n}\n\n/**\n * @param {string} event\n * @returns string\n */\nexport function getCurrentUserNameFromCognitoEvent(event) {\n const attributes = _.get(event, 'request.userAttributes');\n\n return attributes['cognito:email_alias'] || attributes['email']|| 'UNKNOWN USER';\n}\n\n/**\n * Get the user information from the event object\n *\n * @param event {Object} an event object\n * @returns {{username: string, id: number}}\n */\nexport function getCurrentUser(event) {\n let jsonToParse = _.get(event, 'requestContext.authorizer.claims.custom:UID') ||\n _.get(event, 'requestContext.authorizer.custom:UID') ||\n '0';\n\n const id = JSON.parse(jsonToParse);\n\n const username = _.get(event, 'requestContext.authorizer.claims.email') || _.get(event, 'requestContext.authorizer.email') || 'localtestuser@gexample.com';\n\n return {\n username,\n id\n };\n}\n\n/**\n * Create a failure response\n *\n * @param body {Object} an event object\n * @param options {Object} an options object\n * @returns {{statusCode:number, headers:object, body:string}} a response object\n */\nexport function failure(body = {}, options) {\n const dbClose = _.get(options, 'dbClose', _.noop);\n dbClose();\n let cleanedErrorBody;\n\n if (process.env.UTIL_LOG === 'LOG_ALL') {\n console.error('------->UTIL ERROR:', body);\n }\n\n const NORMAL_ERROR = { statusCode: 500, errorCode: '5XX', message: 'INTERNAL UTIL ERROR' };\n cleanedErrorBody = body;\n if (!_.isUndefined(body.details)) {\n cleanedErrorBody = detectJoyError(body);\n } else if (_.isUndefined(body.errorCode) || _.isUndefined(body.statusCode)) {\n cleanedErrorBody = detectSequelizeError(body);\n }\n if(_.get(body, 'response.data.message')) {\n console.error('------->UTIL ERROR: '+_.get(body, 'response.data.message'))\n }\n\n const newBody = _.merge(NORMAL_ERROR, cleanedErrorBody);\n\n return buildResponse(newBody.statusCode, newBody);\n}\n\n/**\n * Create a failure response object\n *\n * @param statusCode {Number} a status code\n * @param body {Object} an event object\n * @returns {{statusCode:number, headers:object, body:string}} a response object\n */\nfunction buildResponse(statusCode, body) {\n return {\n statusCode: statusCode,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Credentials': true\n },\n body: JSON.stringify(body)\n };\n}\n\n/**\n * parse the body of the event object\n *\n * @param requestEvent {{body:string}} an event object\n * @returns event {*} the json object of the body\n */\nexport function parseBody(requestEvent) {\n\n let eventBody = {};\n if (_.isString(requestEvent.body)) {\n try {\n eventBody = JSON.parse(requestEvent.body);\n } catch (e) {\n // Invalid JSON\n eventBody = null;\n\n throw errorList.invalidJson;\n }\n } else if (_.isObject(requestEvent.body)) {\n eventBody = requestEvent.body;\n }\n\n return eventBody;\n}\n\n/**\n * parse the body of the event object\n *\n * @param requestEvent {string|object} an event object\n * @param [callback] {function} undefined a call back function\n * @returns event {*} the json object of the body\n */\nexport function parseEvent(requestEvent, callback) {\n let event = {};\n if (_.isString(requestEvent)) {\n try {\n event = JSON.parse(requestEvent);\n } catch (e) {\n // Invalid JSON\n event = null;\n\n if (callback) {\n callback(Error(e));\n }\n }\n } else if (_.isObject(requestEvent)) {\n event = requestEvent;\n }\n\n return event;\n}\n\n/**\n * parse the body of the event object\n * look for sequelize errors and return a message\n * ERRORS should not be caught here this is a fallback for unknown database errors\n *\n * @param body {object} part of a body response\n * @returns error message object {message:string}\n */\nexport function detectSequelizeError(body) {\n const errorBody = {};\n\n let sequelizeError = _.get(body, 'errors', []).reduce((acc, err) => {\n acc = acc + ' ' + _.get(err, 'message');\n return acc;\n }, '');\n const parentError = _.get(body, 'parent', '');\n\n sequelizeError = sequelizeError + _.get(body, 'original.detail', '') + _.get(body, 'TypeError', '') + parentError;\n errorBody.message = sequelizeError.trim();\n return errorBody;\n}\n\nexport function detectJoyError(body) {\n const errorBody = {};\n const joyError = _.get(body, 'details[0]', {});\n console.error('USER VALIDATION ERROR:', body);\n\n errorBody.message = joyError.message;\n errorBody.statusCode = 400;\n errorBody.errorCode = '4000';\n return errorBody;\n}","import { S3 } from '@aws-sdk/client-s3';\r\n\r\nexport function s3Utils(action, params) {\r\n const s3 = new S3();\r\n return s3[action](params);\r\n}\r\n\r\nconst S3Util = {\r\n getObject: (params) => getS3(params),\r\n deleteObject: (params) => s3Utils('deleteObject', params),\r\n putObject: (params) => s3Utils('putObject', params),\r\n listObjectsV2: (params) => s3Utils('listObjectsV2', params)\r\n};\r\nexport default S3Util;\r\n\r\nasync function getS3(params) {\r\n const s3 = new S3();\r\n const response = await s3.getObject(params);\r\n return response.Body.transformToString('utf-8');\r\n}","import { SNS } from '@aws-sdk/client-sns';\r\n\r\nconst SNSUtil = {\r\n publish: (params) => publish(params),\r\n createTopic: (params) => createTopic(params)\r\n};\r\n\r\nasync function publish(params) {\r\n const sns = new SNS();\r\n return await sns.publish(params);\r\n}\r\n\r\nasync function createTopic(params) {\r\n const sns = new SNS();\r\n return await sns.createTopic(params);\r\n}\r\n\r\nexport default SNSUtil;\r\n","module.exports = require(\"@aws-sdk/client-dynamodb\");","module.exports = require(\"@aws-sdk/client-s3\");","module.exports = require(\"@aws-sdk/client-sns\");","module.exports = require(\"@aws-sdk/lib-dynamodb\");","module.exports = require(\"bluebird\");","module.exports = require(\"lodash\");","module.exports = require(\"moment\");","module.exports = require(\"moment/moment.js\");","module.exports = require(\"sequelize\");","module.exports = require(\"umzug\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","import { handleFile as handleFileImport } from './eventManager/handleFile.js';\nimport { watchBucket as watchBucketImport } from './eventManager/watchBucket.js';\nimport { publishEvents as publishEventsImport } from './eventManager/publishEvents.js';\nimport { createIncludes as createIncludesImport } from './database/dbUtils/queryStringUtils/createIncludes.js';\nimport { createFilters as createFiltersImport } from './database/dbUtils/queryStringUtils/createFilters.js';\nimport { createSort as createSortImport } from './database/dbUtils/queryStringUtils/createSort.js';\nimport { findAll as findAllImport } from './database/dbUtils/queryStringUtils/findAll.js';\nimport { checkModule as checkModuleImport } from './database/dbUtils/queryStringUtils/accessRightsUtils.js';\nimport { failure as failureImport, success as successImport } from './requestResonse/requestResponse.js';\nimport { runMigrations as runMigrationsImport } from './database/dbSetup/migrations.js';\nimport { getCurrentUser as getCurrentUserImport } from './requestResonse/requestResponse.js';\nimport { successHtml as successHtmlImport } from './requestResonse/requestResponse.js';\nimport { getCurrentUserNameFromCognitoEvent as getCurrentUserNameFromCognitoEventImport } from './requestResonse/requestResponse.js';\nimport { defaultFilters as defaultFiltersImport } from './database/dbUtils/queryStringUtils/defaultFilters.js';\nimport { accessRightsUtils as accessRightsUtilsImport } from './database/dbUtils/queryStringUtils/accessRightsUtils.js';\nimport { parseBody as parseBodyImport } from './requestResonse/requestResponse.js';\nimport { parseEvent as parseEventImport } from './requestResonse/requestResponse.js';\nimport { getBusinessesInfo as getBusinessesInfoImport } from './database/dbUtils/queryStringUtils/accessRightsUtils.js';\nimport { userDefaultBid as userDefaultBidImport } from './database/dbUtils/queryStringUtils/accessRightsUtils.js';\nimport { checkWriteAccess as checkWriteAccessImport } from './database/dbUtils/queryStringUtils/accessRightsUtils.js';\n\nexport const handleFile = handleFileImport;\nexport const watchBucket = watchBucketImport;\nexport const publishEvents = publishEventsImport;\nexport const createFilters = createFiltersImport;\nexport const createIncludes = createIncludesImport;\nexport const createSort = createSortImport;\nexport const findAll = findAllImport;\nexport const checkModule = checkModuleImport;\nexport const failure = failureImport;\nexport const success = successImport;\nexport const runMigrations = runMigrationsImport;\nexport const getCurrentUser = getCurrentUserImport;\nexport const successHtml = successHtmlImport;\nexport const getCurrentUserNameFromCognitoEvent = getCurrentUserNameFromCognitoEventImport;\nexport const defaultFilters = defaultFiltersImport;\nexport const accessRightsUtils = accessRightsUtilsImport;\nexport const parseBody = parseBodyImport;\nexport const parseEvent = parseEventImport;\nexport const getBusinessesInfo = getBusinessesInfoImport;\nexport const userDefaultBid = userDefaultBidImport;\nexport const checkWriteAccess = checkWriteAccessImport;\n"],"names":["runMigrations","_lodash","require","_lodash2","_interopRequireDefault","_umzug","obj","__esModule","default","databaseName","sequelizeInstance","initializeModels","pathToMigrationFolder","process","env","PWD","umzug","Umzug","migrations","glob","context","getQueryInterface","storage","SequelizeStorage","sequelize","logger","console","pendingMigrations","pending","log","up","catch","upError","down","_","chain","map","reverse","value","then","msg","error","Error","downError","accessRightsUtils","exports","userDefaultBid","getBusinessesInfo","getModuleInfo","checkModule","checkWriteAccess","_errorCodes","_requestResponse","event","options","useCognitoBid","get","requestedBusinessIds","getRequestedBusinessIds","allowedBusinessIds","getAllowedBusinessIds","localBidList","isEmpty","BUILD_ENV","length","intersection","jsonToParse","dbi","JSON","parse","split","businesses","Object","keys","accessRights","bids","withLocal","set","ar","moduleRights","moduleName","allowAccess","errorList","unauthorized","userRoles","admin","read","write","eventBody","parseBody","businessIds","businessId","find","id","raw","userRight","_sequelize","_sequelize2","_moment","_moment2","_accessRightsUtils","createFilters","objectFilters","query","startDate","endDate","where","reduce","acc","item","val","itemName","includes","filterType","DB","Op","iLike","or","in","parsedJson","e","type","BOOLEAN","queryValue","toLowerCase","booleanMap","active","filterAdds","s","moment","utc","dates","between","toDate","isValid","invalidStartDate","invalidEndDate","createdAt","withDate","assign","createIncludes","includeSubItem","canBeIncluded","askedForInQuery","forEach","sortItem","indexOf","substr","queryStringItem","dot","push","substring","createSort","defaultFilter","copyOfDefaultFilter","clone","sort","testItem","parentChildList","defaultFilters","addFiltersFromSchema","schema","subSchemas","filters","key","accumulator","keyPrefix","asLinkAlias","STRING","eq","itemType","CHAR","TEXT","DECIMAL","BIGINT","INTEGER","DATE","DATEONLY","lt","JSONB","contains","getPaginationFromFindAll","findAll","result","limit","offset","hasMore","splice","pageObject","rows","model","findArgs","include","all","nested","results","findUtils","_libDynamodb","_clientDynamodb","dynamoUtil","params","dynamoDb","DynamoDBDocument","from","DynamoDB","handleEvents","_handleFile","_bluebird","_bluebird2","transformer","errorHandlerPerFile","shouldSkipFailedFolders","userImportTypes","Records","Promise","resolve","hasErrors","record","snsInfo","s3Bucket","bucket","files","file","path","decodeURIComponent","handleFile","err","_S3Utils","_S3Utils2","Bucket","Key","body","S3Util","getObject","parsedBody","returnedValue","deleteObject","code","newPath","usersImports","values","items","fileName","last","folderName","first","startsWith","replace","newParams","Body","putObject","loop","publishEvents","_SNSUtils","_SNSUtils2","_dynamoUtils","_dynamoUtils2","maxKeys","bucketResult","fileList","currentTime","S3Utils","listObjectsV2","MaxKeys","ContinuationToken","newFiles","filter","Contents","fileDelayTime","isSameOrBefore","concat","IsTruncated","NextContinuationToken","configTable","tableKey","snsTopic","TableName","chunkSize","maxMessages","snsCreateTopicResponse","SNSUtil","createTopic","Name","topicArn","TopicArn","messageList","chunk","slice","publish","Message","stringify","watchBucket","_publishEvents","_handleEvents","dynamoConfigTable","dynamoConfigKey","noop","EventSource","isEqual","invalidInventoryReleaseRequest","message","errorCode","statusCode","alreadyReleased","alreadyReceived","invalidItemsRequest","invalidID","invalidReceivable","invalidRequest","invalidAPIKey","qbCreationError","cannotReopen","invalidDateFormat","invalidOrderStatus","invalidPaymentStatus","invalidReleaseStatus","invalidReceivableStatus","invalidJson","invalidFilter","invalidUserNameUpdate","imageSizeLimit","notFound","emailRequired","mobilePhoneRequired","invalidCadenceType","success","successHtml","getCurrentUserNameFromCognitoEvent","getCurrentUser","failure","parseEvent","detectSequelizeError","detectJoyError","dbClose","buildResponse","html","headers","attributes","username","cleanedErrorBody","UTIL_LOG","NORMAL_ERROR","isUndefined","details","newBody","merge","requestEvent","isString","isObject","callback","errorBody","sequelizeError","parentError","trim","joyError","s3Utils","_clientS","action","s3","S3","getS3","response","transformToString","_clientSns","sns","SNS","_watchBucket","_createIncludes","_createFilters","_createSort","_findAll","_migrations","_defaultFilters","handleFileImport","watchBucketImport","publishEventsImport","createFiltersImport","createIncludesImport","createSortImport","findAllImport","checkModuleImport","failureImport","successImport","runMigrationsImport","getCurrentUserImport","successHtmlImport","getCurrentUserNameFromCognitoEventImport","defaultFiltersImport","accessRightsUtilsImport","parseBodyImport","parseEventImport","getBusinessesInfoImport","userDefaultBidImport","checkWriteAccessImport"],"sourceRoot":""}
1
+ {"version":3,"file":"main.js","mappings":"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","sources":["webpack://piper-utils/./src/database/dbSetup/migrations.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/accessRightsUtils.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/createFilters.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/createIncludes.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/createSort.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/defaultFilters.js","webpack://piper-utils/./src/database/dbUtils/queryStringUtils/findAll.js","webpack://piper-utils/./src/dynamo/dynamoUtils.js","webpack://piper-utils/./src/eventManager/handleEvents.js","webpack://piper-utils/./src/eventManager/handleFile.js","webpack://piper-utils/./src/eventManager/publishEvents.js","webpack://piper-utils/./src/eventManager/watchBucket.js","webpack://piper-utils/./src/requestResonse/errorCodes.js","webpack://piper-utils/./src/requestResonse/requestResponse.js","webpack://piper-utils/./src/s3/S3Utils.js/S3Utils.js","webpack://piper-utils/./src/sns/SNSUtils.js","webpack://piper-utils/external commonjs \"@aws-sdk/client-dynamodb\"","webpack://piper-utils/external commonjs \"@aws-sdk/client-s3\"","webpack://piper-utils/external commonjs \"@aws-sdk/client-sns\"","webpack://piper-utils/external commonjs \"@aws-sdk/lib-dynamodb\"","webpack://piper-utils/external commonjs \"bluebird\"","webpack://piper-utils/external commonjs \"lodash\"","webpack://piper-utils/external commonjs \"moment\"","webpack://piper-utils/external commonjs \"moment/moment.js\"","webpack://piper-utils/external commonjs \"sequelize\"","webpack://piper-utils/external commonjs \"umzug\"","webpack://piper-utils/webpack/bootstrap","webpack://piper-utils/./src/index.js"],"sourcesContent":["import _ from 'lodash';\nimport { SequelizeStorage, Umzug } from 'umzug';\n\n/**\n * Execute database migrations\n * @param {string} databaseName - name of database to create (or verify existence)\n * @param {object} sequelizeInstance - instance of Sequelize (must be initialized)\n * @param {function} initializeModels - function to run to sync Sequelize models with database\n * @param {string} pathToMigrationFolder - pass in the path if using windows. windows and linux PWD will be different\n */\nexport async function runMigrations(databaseName,\n sequelizeInstance,\n initializeModels,\n pathToMigrationFolder = `${process.env.PWD}/migrations/*.js`) {\n const umzug = new Umzug({\n migrations: { glob: pathToMigrationFolder },\n context: sequelizeInstance.getQueryInterface(),\n storage: new SequelizeStorage({ sequelize: sequelizeInstance }),\n logger: console\n });\n\n const pendingMigrations = await umzug.pending();\n console.log('------->UTIL Pending Migrations:', pendingMigrations, pathToMigrationFolder);\n await umzug.up().catch((upError) => {\n return umzug.down({\n migrations: _.chain(pendingMigrations)\n .map('file')\n .reverse()\n .value()\n }).then(() => {\n const msg = 'UTIL Error: Error with migrating up:' + upError;\n console.error(msg);\n throw new Error(msg);\n }, (downError) => {\n const msg = 'UTIL Error: Error with migrating down:' + downError;\n console.error(msg);\n throw new Error(msg);\n });\n });\n\n // The following line is needed to sync (create) tables, but not to database updates\n // in the past it worked to leave it in, but now the tags module causes foreign key problems\n // The tables are still initiated by being passed in to run migrations\n await initializeModels();\n}","import _, { isEmpty } from 'lodash';\nimport { errorList } from '../../../requestResonse/errorCodes.js';\nimport { parseBody } from '../../../requestResonse/requestResponse.js';\n\n/**\n * Get the allowed businessIds for a user from the lambda event, compare it to businessIds, return what user has access to.\n *\n * @param {object} event - The lambda event passed in by a validated api request.\n * @param {{useCognitoBid:boolean}} [options] - An object with options, useCognitoBid prefers the businessId set in cognito if set and does not return the local bid of 1 if a bid is in the claim.\n * @returns {array} A list of businessIds that have been requested and are allowed to for some user.\n */\nexport function accessRightsUtils(event, options) {\n const useCognitoBid = _.get(options, 'useCognitoBid', false);\n const requestedBusinessIds = getRequestedBusinessIds(event);\n const allowedBusinessIds = getAllowedBusinessIds(event, useCognitoBid);\n const localBidList = ['1'];\n\n // if we are on local return for all bids in access rights\n if (_.isEmpty(allowedBusinessIds) &&\n !_.get(event, 'requestContext.authorizer.claims') &&\n !_.get(event, 'requestContext.authorizer.custom:AR') &&\n process.env.BUILD_ENV !== 'production' &&\n process.env.BUILD_ENV !== 'staging') {\n if (requestedBusinessIds.length === 0) {\n return localBidList;\n } else {\n return _.intersection(requestedBusinessIds, localBidList);\n }\n } else if (requestedBusinessIds.length === 0) {\n return allowedBusinessIds;\n }\n\n return _.intersection(requestedBusinessIds, allowedBusinessIds);\n}\n\n/**\n * Get the businessID set in cognito as custom:DBI.\n *\n * @param {object} event - The lambda event passed in by a validated api request.\n * @returns {string} The businessID set in cognito as custom:DBI\n */\nexport function userDefaultBid(event) {\n let jsonToParse = _.get(event, 'requestContext.authorizer.claims.custom:DBI') ||\n _.get(event, 'requestContext.authorizer.custom:DBI') ||\n '{}';\n\n const dbi = JSON.parse(jsonToParse);\n return _.get(dbi, 'defaultBid', '') || '1';\n}\n\n/**\n * Get requested businessIds from the query string.\n *\n * @param {object} event - The lambda event passed in by a validated api request.\n * @returns {array} The businessID requested by the query string\n */\nfunction getRequestedBusinessIds(event) {\n let requestedBusinessIds = _.get(event, 'queryStringParameters.businessIds', null);\n\n return requestedBusinessIds ? requestedBusinessIds.split(',') : [];\n}\n\n/**\n * Get the allowed businessIds for a user from cognito custom:AR property.\n *\n * @param {object} event - The lambda event passed in by a validated api request.\n * @param useCognitoBid\n * @returns {array} The businessID requested by the query string\n */\nfunction getAllowedBusinessIds(event, useCognitoBid) {\n const businesses = getBusinessesInfo(event, useCognitoBid);\n return Object.keys(businesses);\n}\n\nexport function getBusinessesInfo(event, useCognitoBid) {\n let jsonToParse = _.get(event, 'requestContext.authorizer.claims.custom:AR') ||\n _.get(event, 'requestContext.authorizer.custom:AR') ||\n '{}';\n const accessRights = JSON.parse(jsonToParse);\n\n if (process.env.BUILD_ENV === 'local') {\n if (!isEmpty(accessRights)) {\n const bids = _.get(accessRights, 'businessIds', {});\n let withLocal;\n if (useCognitoBid) {\n withLocal = { ...bids };\n } else {\n withLocal = { ...bids, '1': 'A' };\n }\n\n _.set(accessRights, 'businessIds', withLocal);\n\n return _.get(accessRights, 'businessIds', {});\n } else {\n const ar = { 'businessIds': { '1': 'A' } };\n return _.get(ar, 'businessIds', {});\n }\n }\n\n return _.get(accessRights, 'businessIds', {});\n}\n\n/**\n * Get the modules listed in custom:MOD.\n *\n * @param {object} event - The lambda event passed in by a validated api request.\n * @returns {array} The Module access list\n */\nexport function getModuleInfo(event) {\n let jsonToParse =\n _.get(event, 'requestContext.authorizer.claims.custom:MOD') ||\n _.get(event, 'requestContext.authorizer.custom:MOD') ||\n _.get(event, 'requestContext.authorizer.claims.custom:AR') ||\n _.get(event, 'requestContext.authorizer.custom:AR') ||\n\n '{}';\n\n const moduleRights = JSON.parse(jsonToParse);\n return _.get(moduleRights, 'module', {});\n}\n\n/**\n * Get the modules listed in custom:MOD.\n *\n * @param {string} moduleName - A sting name for a module.\n * @param {object} event - The lambda event passed in by a validated api request.\n * @returns {array} The Module access list\n */\nexport function checkModule(moduleName, event) {\n const moduleRights = getModuleInfo(event);\n let allowAccess = _.get(moduleRights, moduleName, false);\n\n if (process.env.BUILD_ENV === 'local') {\n return;\n }\n if (!allowAccess) {\n throw errorList.unauthorized;\n }\n}\n\nexport const userRoles = {\n admin: 'A',\n read: 'R',\n write: 'W'\n};\n\n/**\n * @param {{body: string}} event\n * @returns {string} businessId\n */\nexport function checkWriteAccess(event) {\n const eventBody = parseBody(event);\n const businessIds = accessRightsUtils(event) || [];\n const businessId = businessIds.find((id) => id === eventBody.businessId);\n const raw = getBusinessesInfo(event);\n const userRight = raw[businessId];\n\n if (process.env.BUILD_ENV === 'local') {\n return eventBody.businessId;\n }\n\n if ((userRight !== userRoles.admin && userRight !== userRoles.write) || (!userRight)) {\n throw errorList.unauthorized;\n }\n return businessId;\n}\n\n","import _ from 'lodash';\nimport DB from 'sequelize';\nimport moment from 'moment/moment.js';\nimport { errorList } from '../../../requestResonse/errorCodes.js';\nimport { accessRightsUtils } from './accessRightsUtils.js';\n\n/**\n * Create sequelize where clause from query string parameters and default sort object\n *\n * @param {object} event - the query parameters from the event passed by lambda\n * @param {object} objectFilters - the default filters object created by createDefaultFilters\n * @returns {object} An sequelize where object\n */\nexport const createFilters = function (event, objectFilters){\n let query = _.get(event, 'queryStringParameters', {}) || {};\n const startDate = _.get(query, 'startDate');\n const endDate = _.get(query, 'endDate');\n const where = Object.keys(query).reduce((acc, item) => {\n const val = _.get(objectFilters, item, null);\n\n if (val) {\n const itemName = item.includes('.')\n ? `$${item}$`\n : item;\n\n acc[itemName] = {};\n if (val.filterType === DB.Op.iLike) {\n acc[itemName][val.filterType] = `%${query[item]}%`;\n } else if (val.filterType === DB.Op.or) {\n acc[itemName][val.filterType] = [-1 * +query[item], +query[item]];\n } else if (val.filterType === DB.Op.in) {\n acc[itemName][val.filterType] = query[item].split(',');\n } else if (val.filterType === DB.Op.in) {\n acc[itemName][val.filterType] = query[item].split(',');\n } else {\n let parsedJson;\n try {\n // value is JSON, parse it\n parsedJson = JSON.parse(query[item]);\n } catch (e) {\n // value is not JSON, pass through as a string\n parsedJson = query[item];\n }\n acc[itemName][val.filterType] = parsedJson;\n }\n\n if (val.type === DB.BOOLEAN) {\n const queryValue = _.get(query, item, '').toLowerCase();\n\n const booleanMap = {\n 'false': false,\n 'null': null,\n 'true': true\n };\n\n acc[itemName][val.filterType] = booleanMap[queryValue];\n }\n }\n\n return acc;\n }, {});\n\n if (objectFilters?.active && !where?.active) {\n where.active = true;\n }\n\n const businessIds = accessRightsUtils(event);\n const filterAdds = {\n businessId: businessIds\n };\n\n if (startDate && endDate) {\n const s = moment.utc(startDate);\n const e = moment.utc(endDate);\n const dates = {\n [DB.Op.between]: [s.toDate(), e.toDate()]\n };\n if (!s.isValid()) {\n throw { ...errorList.invalidStartDate };\n }\n\n if (!e.isValid()) {\n throw { ...errorList.invalidEndDate };\n }\n\n filterAdds.createdAt = dates;\n }\n\n const withDate = Object.assign(where, filterAdds);\n\n return withDate;\n};\n","import _ from 'lodash';\n\n/**\n * Create sequelize includes array from query string parameters and default sequelize model\n *\n * @param {object} event - the query parameters from the event passed by lambda\n * @param {object} objectFilters - the default filters object created by createDefaultFilters\n * @returns {object} A sequelize includes array\n */\n\nexport function createIncludes(event, objectFilters) {\n const query = _.get(event, 'queryStringParameters', {}) || {};\n\n const keys = Object.keys(objectFilters);\n\n const canBeIncluded = keys.reduce((acc, item) => {\n acc = includeSubItem(item, acc);\n\n return acc;\n }, []);\n\n const askedForInQuery = Object.keys(query).reduce((acc, item) => {\n if (item === 'sort') {\n query[item].split(',').forEach((sortItem) => {\n sortItem = sortItem.indexOf('-') === 0 ? sortItem.substr(1) : sortItem;\n acc = includeSubItem(sortItem, acc);\n });\n }\n\n acc = includeSubItem(item, acc);\n\n return acc;\n }, []);\n\n return _.intersection(canBeIncluded, askedForInQuery);\n}\n\nexport function includeSubItem(queryStringItem, acc = []) {\n const dot = queryStringItem.indexOf('.');\n if (dot > 0) {\n acc.push(queryStringItem.substring(0, dot));\n }\n\n return acc;\n}","import _ from 'lodash';\n\n/**\n * Create sequelize order clause from query string parameters and default sort object\n *\n * @param {object} event - the event created AWS lambda, it will contain queryStringParameters with sort property a comma seperated list of sortable fields * @param {object} objectFilters - the default filters object created by createDefaultFilters\n * @param {object} defaultFilter - A default filter object as built by createDefault Filters, if items are not on the schema they will not be in the order by\n * @returns {object} An sequelize order by object\n */\nexport const createSort = function (event, defaultFilter) {\n let copyOfDefaultFilter = _.clone(defaultFilter);\n let query = _.get(event, 'queryStringParameters', {}) || {};\n let sort = _.get(query, 'sort', '-updatedAt') || '-updatedAt';\n\n return sort.split(',').reduce((acc, item) => {\n\n const testItem = item.indexOf('-') === 0 ? item.substr(1) : item;\n\n if (_.get(copyOfDefaultFilter, testItem, null)) {\n const sortItem = [];\n\n testItem.split('.').forEach((parentChildList) => {\n sortItem.push(parentChildList);\n });\n\n if (item.indexOf('-') === 0) {\n sortItem.push('DESC');\n } else {\n sortItem.push('ASC');\n }\n acc.push(sortItem);\n }\n\n return acc;\n }, []);\n};\n","import _ from 'lodash';\nimport DB from 'sequelize';\n\n/**\n * Create an object with default filters for a given sequeliaze Schema Object, and set of sub schemas\n *\n * @param {object} schema - type is sequelize data type\n * @param {object} subSchemas - An object with alias as the key and sequelize schema as the value http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html#instance-method-define\n * sub schema can be {location: locationSchema} or {location: {as: \"asAlias\", schema: schema}}\n * @returns {object} An Object with a default filter for each dataType CHAR and TEXT will get a $like operator, INTEGER, DECIMAL and BOOLEAN will get a $eq.\n */\nexport function defaultFilters(schema, subSchemas = {}) {\n schema = _.clone(schema);\n\n const filters = {};\n\n addFiltersFromSchema(schema, filters);\n Object.keys(subSchemas).forEach((key) => {\n addFiltersFromSchema(subSchemas[key], filters, key);\n });\n\n return filters;\n}\n\nexport function addFiltersFromSchema(schema, accumulator, keyPrefix = '') {\n const asLinkAlias = _.get(schema, 'as', null);\n schema = _.get(schema, 'schema') || schema;\n\n return Object.keys(schema).reduce((acc, item) => {\n let key = item;\n\n if (asLinkAlias) {\n acc[asLinkAlias] = { type: DB.STRING, filterType: DB.Op.eq };\n }\n\n if (keyPrefix) {\n key = `${keyPrefix}.${item}`;\n }\n\n if (schema[item].filterType) {\n acc[key] = { filterType: schema[item].filterType };\n\n return acc;\n }\n\n const itemType = schema[item].type;\n\n //todo these should be removed, there are just here for sort tests\n switch (itemType) {\n case DB.CHAR:\n case DB.STRING:\n case DB.TEXT:\n acc[key] = { filterType: DB.Op.iLike };\n break;\n\n case DB.DECIMAL:\n acc[key] = { filterType: DB.Op.or };\n break;\n\n case DB.BOOLEAN:\n case DB.BIGINT:\n case DB.INTEGER:\n acc[key] = { type: itemType, filterType: DB.Op.eq };\n break;\n\n case DB.DATE:\n case DB.DATEONLY:\n acc[key] = { filterType: DB.Op.lt };\n break;\n }\n\n //new sequelize uses classes instead of objects\n if (itemType instanceof DB.STRING) {\n acc[key] = { filterType: DB.Op.iLike };\n } else if (itemType instanceof DB.DECIMAL) {\n acc[key] = { filterType: DB.Op.or };\n } else if (itemType instanceof DB.INTEGER) {\n acc[key] = { filterType: DB.Op.or };\n } else if (itemType instanceof DB.BIGINT) {\n acc[key] = { filterType: DB.Op.or };\n } else if (itemType instanceof DB.BOOLEAN) {\n acc[key] = { type: itemType, filterType: DB.Op.eq };\n } else if (itemType instanceof DB.JSONB) {\n acc[key] = { type: itemType, filterType: DB.Op.contains };\n } else if (itemType instanceof DB.DATEONLY) {\n acc[key] = { type: itemType, filterType: DB.Op.eq };\n }\n\n //these are not part of the models so add them always\n acc['createdAt'] = { type: DB.DATE, filterType: DB.Op.lt };\n acc['updatedAt'] = { type: DB.DATE, filterType: DB.Op.lt };\n acc['id'] = { type: DB.INTEGER, filterType: DB.Op.eq };\n\n return acc;\n }, accumulator);\n}\n","/**\n * create pagination object from Sequelize findAll\n * @param {object} result - sequelize result\n * @param {number} limit - max number of results to return\n * @param {number} offset - page offset\n */\nexport function getPaginationFromFindAll(result, limit, offset) {\n result = result || [];\n limit = limit || 0;\n offset = offset || 0;\n\n const hasMore = result.length > limit;\n if (hasMore) {\n result.splice(-1, 1);\n }\n const pageObject = {\n offset: offset,\n limit: limit,\n rows: result,\n hasMore: hasMore\n };\n\n return pageObject;\n}\n\n/**\n * wrapper for Sequelize findAll\n * @param {object} model - instance of Sequelize (must be initialized)\n * @param {*&{include: [{model: *}], where: {businessId: Array}, order: [string[]]}} options - instance of Sequelize (must be initialized)\n */\nexport async function findAll(model, options) {\n\n const limit = options.limit || 0;\n const findArgs = Object.assign({include: { all: true, nested: true }}, options, { limit: limit + 1 });\n const results = await model.findAll(findArgs);\n return getPaginationFromFindAll(results, limit, options.offset);\n}\n\nconst findUtils = {\n findAll\n};\nexport default findUtils;","import { DynamoDBDocument } from '@aws-sdk/lib-dynamodb';\r\nimport { DynamoDB } from '@aws-sdk/client-dynamodb';\r\n\r\nconst dynamoUtil = {\r\n get: (params) => get(params)\r\n};\r\n\r\n/**\r\n * @param {{TableName:string, Key:{key:string}}} params\r\n */\r\nasync function get(params) {\r\n const dynamoDb = DynamoDBDocument.from(new DynamoDB());\r\n return dynamoDb.get(params);\r\n}\r\n\r\nexport default dynamoUtil;","import { handleFile } from './handleFile.js';\nimport _ from 'lodash';\nimport Promise from 'bluebird';\n\nexport function handleEvents(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders = false, userImportTypes) {\n if (!event || !event.Records) {\n return Promise.resolve();\n }\n\n let hasErrors = false;\n\n return Promise.map(event.Records, (record) => {\n const snsInfo = JSON.parse(_.get(record, 'Sns.Message', '{}'));\n const s3Bucket = snsInfo.bucket;\n const files = snsInfo.files || [];\n\n return Promise.map(files, (file) => {\n let path = decodeURIComponent(file);\n console.log('------->path', path);\n if (path) {\n return handleFile(path, s3Bucket, transformer, { shouldSkipFailedFolders, userImportTypes }).catch((err) => {\n if (errorHandlerPerFile && !errorHandlerPerFile(err, path)) {\n hasErrors = true;\n }\n });\n }\n });\n }).then(() => {\n if (hasErrors) {\n throw 'Errors processing one or more files. See error logs for detail on each error.';\n }\n });\n}\nexport function handleEventsS3(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders = false, userImportTypes) {\n if (!event || !event.Records) {\n return Promise.resolve();\n }\n\n let hasErrors = false;\n\n return Promise.map(event.Records, (record) => {\n const s3Bucket = record.s3;\n const file = record.s3.object.key || [];\n\n\n let path = decodeURIComponent(file);\n if (path) {\n return handleFile(path, s3Bucket, transformer, { shouldSkipFailedFolders, userImportTypes }).catch((err) => {\n if (errorHandlerPerFile && !errorHandlerPerFile(err, path)) {\n hasErrors = true;\n }\n });\n }\n\n }).then(() => {\n if (hasErrors) {\n throw 'Errors processing one or more files. See error logs for detail on each error.';\n }\n });\n}\n","import _ from 'lodash';\nimport S3Util from '../s3/S3Utils.js/S3Utils.js';\n\nexport async function handleFile(path, s3Bucket, transformer, options) {\n const shouldSkipFailedFolders = _.get(options, 'shouldSkipFailedFolders');\n const userImportTypes = _.get(options, 'userImportTypes');\n const params = {\n Bucket: s3Bucket,\n Key: path\n };\n let body = '{}'\n try {\n body = await S3Util.getObject(params);\n const parsedBody = JSON.parse(body);\n const returnedValue = await transformer(parsedBody);\n await S3Util.deleteObject(params);\n\n return returnedValue;\n } catch (error) {\n console.error('handle-file-error', error);\n\n if (error.code === 'NoSuchKey' || !body) {\n return;\n }\n\n let newPath = '';\n\n if (userImportTypes) {\n // look for items in the userImportTypes\n const usersImports = Object.values(userImportTypes);\n const items = path.split('/');\n const fileName = _.last(items);\n const folderName = _.first(items);\n\n if (usersImports.indexOf(folderName) > -1) {\n if (shouldSkipFailedFolders) {\n newPath = `${folderName}/error/${fileName}`;\n } else if (_.startsWith(path, `${folderName}/failed-once/`)) {\n newPath = _.replace(path, `${folderName}/failed-once/`, `${folderName}/failed-twice/`);\n } else if (_.startsWith(path, `${folderName}/failed-twice/`)) {\n newPath = _.replace(path, `${folderName}/failed-twice/`, `${folderName}/error/`);\n } else {\n newPath = `${folderName}/failed-once/${fileName}`;\n }\n } else {\n newPath = `pathAndEventMisMatchError/${path}`;\n }\n\n } else {\n if (shouldSkipFailedFolders) {\n newPath = `error/${path}`;\n } else if (_.startsWith(path, 'failed-once/')) {\n newPath = _.replace(path, 'failed-once/', 'failed-twice/');\n } else if (_.startsWith(path, 'failed-twice/')) {\n newPath = _.replace(path, 'failed-twice/', 'error/');\n } else {\n if (_.includes(path, 'delayUntil/')) {\n path = _.last(path.split('/'));\n }\n\n newPath = `failed-once/${path}`;\n }\n }\n\n const newParams = {\n Bucket: s3Bucket,\n Key: newPath,\n Body: body\n };\n\n await S3Util.putObject(newParams);\n await S3Util.deleteObject(params);\n\n throw error;\n }\n}\n","import _ from 'lodash';\nimport moment from 'moment';\nimport Promise from 'bluebird';\nimport S3Utils from '../s3/S3Utils.js/S3Utils.js';\nimport SNSUtil from '../sns/SNSUtils.js';\nimport dynamoUtil from '../dynamo/dynamoUtils.js';\n\n/**\n * @param {string} bucket\n * @param {number} maxKeys\n * @param {Object} userImportTypes\n */\nexport async function loop(bucket, maxKeys, userImportTypes, prefix) {\n let bucketResult = {};\n let fileList = [];\n\n const currentTime = moment();\n\n do {\n bucketResult = await S3Utils.listObjectsV2({\n Bucket: bucket,\n MaxKeys: maxKeys,\n ContinuationToken: _.get(bucketResult, 'NextContinuationToken'),\n Prefix:prefix\n });\n\n let newFiles = _.filter(bucketResult.Contents, (file) => {\n if (_.startsWith(_.get(file, 'Key'), 'delayUntil/')) {\n const fileDelayTime = _.get(file, 'Key').split('/')[1];\n return moment(fileDelayTime, 'YYYYMMDDHHmm').isSameOrBefore(currentTime);\n }\n if (userImportTypes) {\n // look for items in the userImportTypes\n const usersImports = Object.values(userImportTypes);\n const items = file.Key.split('/');\n const fileName = _.last(items);\n const folderName = _.first(items);\n if (_.isEmpty(fileName)) {\n return false;\n\n } else if (usersImports.indexOf(folderName) === -1) {\n return false;\n }\n\n return !_.startsWith(file.Key, `${folderName}/error`);\n }\n return !_.startsWith(file.Key, 'error');\n });\n\n fileList = _.concat(fileList, newFiles);\n } while (bucketResult.IsTruncated && bucketResult.NextContinuationToken && fileList.length < maxKeys);\n\n return fileList;\n}\n\n/**\n * Published SNS events at a steady pace for data in a particular bucket. Should be executed via a cloud watch cron job as a part of a micro service\n *\n * @param {string} configTable - The Dynamo DB table where to get the chunk-size and maxMessage size\n * @param {string} tableKey - The key to the item in the Dynamo DB table that holds the chunk-size and maxMessage size\n * @param {string} bucket - The name of the s3 bucket to watch, when you drop items into this table events will be created\n * @param {string} snsTopic - The name of the snsEvent to publish\n * @param {object} userImportTypes - import types to filter on\n * @param {object} prefix - subdirectory or file prefix\n */\nexport async function publishEvents(configTable, tableKey, bucket, snsTopic, userImportTypes, prefix) {\n let result;\n try {\n result = await dynamoUtil.get({\n TableName: configTable,\n Key: { key: tableKey }\n });\n } catch (e) {\n console.error(`Cannot get config for key: ${tableKey} table: ${configTable} falling back to defaults of 2 and 10`, e);\n }\n let chunkSize = _.get(result, 'Item.snsChunkSize', 2);\n let maxMessages = _.get(result, 'Item.snsMaxMessages', 10);\n\n const snsCreateTopicResponse = await SNSUtil.createTopic({ Name: snsTopic });\n const topicArn = snsCreateTopicResponse.TopicArn;\n const maxKeys = chunkSize * maxMessages;\n\n const fileList = await loop(bucket, maxKeys, userImportTypes, prefix);\n\n const messageList = _.chain(fileList)\n .map('Key')\n .chunk(chunkSize)\n .slice(0, maxMessages)\n .value()\n ;\n\n return Promise.map(messageList, (files) => {\n return SNSUtil.publish({\n Message: JSON.stringify({\n bucket: bucket,\n files: files\n }),\n TopicArn: topicArn\n });\n });\n}","import { publishEvents } from './publishEvents.js';\nimport { handleEvents, handleEventsS3 } from './handleEvents.js';\nimport _ from 'lodash';\n\n/**\n * bucket watcher watches a s3 bucket and publishes events to a sns topic, this allows you to process files in s3 with a some transformer function\n *\n * @param {object} params - The parameters for watchBucket, see below\n * @param {object} params.event - The event of the lambda\n * @param {string} params.dynamoConfigTable - The Dynamo DB table where to get the chunkSize and maxMessage size\n * @param {string} params.dynamoConfigKey - The key to the item in the Dynamo DB table that holds the chunkSize and maxMessage size\n * @param {string} params.s3Bucket - The name of the s3 bucket to watch, when you drop items into this table events will be created\n * @param {string} params.snsTopic - The name of the snsEvent to publish\n * @param {function} params.transformer - the function to run on each file\n * @param {function} [params.errorHandlerPerFile] - the function to run on as a catch on each file\n * @param {boolean} [params.shouldSkipFailedFolders] - whether to use the failed-once, failed-twice, error or just error folders\n * @param {object} [params.userImportTypes] - user import sub directories object map\n * @param {object} [params.prefix] - watch a sub directory in the bucket - specify the subdirectory as a prefix\n */\nexport function watchBucket({\n event,\n dynamoConfigTable,\n dynamoConfigKey,\n s3Bucket,\n snsTopic,\n transformer,\n errorHandlerPerFile = _.noop,\n shouldSkipFailedFolders = false,\n userImportTypes,\n prefix\n }) {\n if (!event || !dynamoConfigTable || !dynamoConfigKey || !s3Bucket || !snsTopic || !transformer) {\n throw new Error('Missing required parameters. Need event, dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, transformer');\n }\n\n const EventSource = _.get(event, 'Records[0].EventSource');\n if (_.isEqual(EventSource, 'aws:sns')) {\n return handleEvents(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders, userImportTypes);\n } else if (_.isEqual(EventSource, 'aws:s3')) {\n return handleEventsS3(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders, userImportTypes);\n } else {\n // the function is being run from the cron job so publish SNS events\n return publishEvents(dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, userImportTypes, prefix);\n }\n}\n","export const errorList = {\n invalidInventoryReleaseRequest: {\n message: 'NOT ENOUGH INVENTORY TO FULFILL RELEASE',\n errorCode: '4010',\n statusCode: 400\n },\n alreadyReleased: {\n message: 'ALREADY RELEASED',\n errorCode: '4011',\n statusCode: 400\n },\n alreadyReceived: {\n message: 'RECEIVABLE ALREADY RECEIVED',\n errorCode: '4012',\n statusCode: 400\n },\n invalidItemsRequest: {\n message: 'VALID ITEMS MUST BE INCLUDED',\n errorCode: '4013',\n statusCode: 400\n },\n invalidID: {\n message: 'ID is invalid',\n errorCode: '4014',\n statusCode: 400\n },\n invalidReceivable: {\n message: 'MUST CONTAIN AT LEAST ONE RECEIVABLE',\n errorCode: '4015',\n statusCode: 400\n },\n invalidRequest: {\n message: 'INVALID REQUEST DATA',\n errorCode: '4016',\n statusCode: 400\n },\n invalidAPIKey: {\n message: 'INVALID REQUEST - API MAY KEY INVALID',\n errorCode: '4017',\n statusCode: 400\n },\n qbCreationError: {\n message: 'QUICKBOOKS ERROR - ERROR CREATING OBJECT IN QUICKBOOKS',\n errorCode: '4018',\n statusCode: 400\n },\n cannotReopen: {\n message: 'CANNOT REOPEN - THE ORDER HAS ALREADY BEEN OPENED',\n errorCode: '4018',\n statusCode: 400\n },\n invalidDateFormat: {\n message: 'INVALID DATE FORMAT',\n errorCode: '4019',\n statusCode: 400\n },\n invalidStartDate: {\n message: 'INVALID START DATE',\n errorCode: '4020',\n statusCode: 400\n },\n invalidEndDate: {\n message: 'INVALID END DATE',\n errorCode: '4021',\n statusCode: 400\n },\n invalidOrderStatus: {\n message: 'UNABLE TO EDIT ORDER ITEMS UNLESS THE ORDER IS IN ESTIMATE STATUS',\n errorCode: '4022',\n statusCode: 400\n },\n invalidPaymentStatus: {\n message: 'UNABLE TO UPDATE PAYMENT STATUS PAYMENT MUST BE OPEN',\n errorCode: '4023',\n statusCode: 400\n },\n invalidReleaseStatus: {\n message: 'UNABLE TO UPDATE RELEASE, STATUS RELEASE MUST BE OPEN',\n errorCode: '4024',\n statusCode: 400\n },\n invalidReceivableStatus: {\n message: 'UNABLE TO UPDATE RECEIVABLE, STATUS RECEIVABLE MUST BE OPEN',\n errorCode: '40025',\n statusCode: 400\n },\n invalidJson:{\n message: 'INVALID JSON',\n errorCode: '4005',\n statusCode: 400\n },\n invalidFilter:{\n message: 'INVALID FILTER',\n errorCode: '4026',\n statusCode: 400\n },\n invalidUserNameUpdate:{\n message: 'UNABLE TO UPDATE USERNAME',\n errorCode: '4027',\n statusCode: 400\n },\n imageSizeLimit:{\n message: 'IMAGE SIZE LIMIT 100KB EXCEEDED',\n errorCode: '4028',\n statusCode: 400\n },\n unauthorized:{\n message: 'UNAUTHORIZED',\n errorCode: '4111',\n statusCode: 401\n },\n notFound:{\n message: 'ITEM NOT FOUND',\n errorCode: '4004',\n statusCode: 404\n },\n emailRequired:{\n message: 'NO EMAIL PROVIDED, CHECK CUSTOMER EMAIL',\n errorCode: '4004',\n statusCode: 404\n },\n mobilePhoneRequired:{\n message: 'NO MOBILE PHONE PROVIDED, CHECK CUSTOMER CONTACTS',\n errorCode: '4004',\n statusCode: 404\n },\n invalidCadenceType: {\n message: 'INVALID CADENCE TYPE',\n errorCode: '5001',\n statusCode: 500\n },\n};","import _ from 'lodash';\nimport { errorList } from './errorCodes.js';\n\n/**\n * @param {Object} body\n * @param {{dbClose?:function}} [options]\n */\nexport function success(body, options) {\n const dbClose = _.get(options, 'dbClose', _.noop);\n dbClose();\n\n return buildResponse(200, body);\n}\n\n/**\n * @param {string} html\n * @param {{dbClose:function|undefined}} options\n */\nexport function successHtml(html, options) {\n const dbClose = _.get(options, 'dbClose', _.noop);\n\n dbClose();\n return {\n statusCode: 200,\n headers: {\n 'Content-Type': 'text/html',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Credentials': true\n },\n body: html\n };\n}\n\n/**\n * @param {string} event\n * @returns string\n */\nexport function getCurrentUserNameFromCognitoEvent(event) {\n const attributes = _.get(event, 'request.userAttributes');\n\n return attributes['cognito:email_alias'] || attributes['email']|| 'UNKNOWN USER';\n}\n\n/**\n * Get the user information from the event object\n *\n * @param event {Object} an event object\n * @returns {{username: string, id: number}}\n */\nexport function getCurrentUser(event) {\n let jsonToParse = _.get(event, 'requestContext.authorizer.claims.custom:UID') ||\n _.get(event, 'requestContext.authorizer.custom:UID') ||\n '0';\n\n const id = JSON.parse(jsonToParse);\n\n const username = _.get(event, 'requestContext.authorizer.claims.email') || _.get(event, 'requestContext.authorizer.email') || 'localtestuser@gexample.com';\n\n return {\n username,\n id\n };\n}\n\n/**\n * Create a failure response\n *\n * @param body {Object} an event object\n * @param options {Object} an options object\n * @returns {{statusCode:number, headers:object, body:string}} a response object\n */\nexport function failure(body = {}, options) {\n const dbClose = _.get(options, 'dbClose', _.noop);\n dbClose();\n let cleanedErrorBody;\n\n if (process.env.UTIL_LOG === 'LOG_ALL') {\n console.error('------->UTIL ERROR:', body);\n }\n\n const NORMAL_ERROR = { statusCode: 500, errorCode: '5XX', message: 'INTERNAL UTIL ERROR' };\n cleanedErrorBody = body;\n if (!_.isUndefined(body.details)) {\n cleanedErrorBody = detectJoyError(body);\n } else if (_.isUndefined(body.errorCode) || _.isUndefined(body.statusCode)) {\n cleanedErrorBody = detectSequelizeError(body);\n }\n if(_.get(body, 'response.data.message')) {\n console.error('------->UTIL ERROR: '+_.get(body, 'response.data.message'))\n }\n\n const newBody = _.merge(NORMAL_ERROR, cleanedErrorBody);\n\n return buildResponse(newBody.statusCode, newBody);\n}\n\n/**\n * Create a failure response object\n *\n * @param statusCode {Number} a status code\n * @param body {Object} an event object\n * @returns {{statusCode:number, headers:object, body:string}} a response object\n */\nfunction buildResponse(statusCode, body) {\n return {\n statusCode: statusCode,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Credentials': true\n },\n body: JSON.stringify(body)\n };\n}\n\n/**\n * parse the body of the event object\n *\n * @param requestEvent {{body:string}} an event object\n * @returns event {*} the json object of the body\n */\nexport function parseBody(requestEvent) {\n\n let eventBody = {};\n if (_.isString(requestEvent.body)) {\n try {\n eventBody = JSON.parse(requestEvent.body);\n } catch (e) {\n // Invalid JSON\n eventBody = null;\n\n throw errorList.invalidJson;\n }\n } else if (_.isObject(requestEvent.body)) {\n eventBody = requestEvent.body;\n }\n\n return eventBody;\n}\n\n/**\n * parse the body of the event object\n *\n * @param requestEvent {string|object} an event object\n * @param [callback] {function} undefined a call back function\n * @returns event {*} the json object of the body\n */\nexport function parseEvent(requestEvent, callback) {\n let event = {};\n if (_.isString(requestEvent)) {\n try {\n event = JSON.parse(requestEvent);\n } catch (e) {\n // Invalid JSON\n event = null;\n\n if (callback) {\n callback(Error(e));\n }\n }\n } else if (_.isObject(requestEvent)) {\n event = requestEvent;\n }\n\n return event;\n}\n\n/**\n * parse the body of the event object\n * look for sequelize errors and return a message\n * ERRORS should not be caught here this is a fallback for unknown database errors\n *\n * @param body {object} part of a body response\n * @returns error message object {message:string}\n */\nexport function detectSequelizeError(body) {\n const errorBody = {};\n\n let sequelizeError = _.get(body, 'errors', []).reduce((acc, err) => {\n acc = acc + ' ' + _.get(err, 'message');\n return acc;\n }, '');\n const parentError = _.get(body, 'parent', '');\n\n sequelizeError = sequelizeError + _.get(body, 'original.detail', '') + _.get(body, 'TypeError', '') + parentError;\n errorBody.message = sequelizeError.trim();\n return errorBody;\n}\n\nexport function detectJoyError(body) {\n const errorBody = {};\n const joyError = _.get(body, 'details[0]', {});\n console.error('USER VALIDATION ERROR:', body);\n\n errorBody.message = joyError.message;\n errorBody.statusCode = 400;\n errorBody.errorCode = '4000';\n return errorBody;\n}","import { S3 } from '@aws-sdk/client-s3';\r\n\r\nexport function s3Utils(action, params) {\r\n const s3 = new S3();\r\n return s3[action](params);\r\n}\r\n\r\nconst S3Util = {\r\n getObject: (params) => getS3(params),\r\n deleteObject: (params) => s3Utils('deleteObject', params),\r\n putObject: (params) => s3Utils('putObject', params),\r\n listObjectsV2: (params) => s3Utils('listObjectsV2', params)\r\n};\r\nexport default S3Util;\r\n\r\nasync function getS3(params) {\r\n const s3 = new S3();\r\n const response = await s3.getObject(params);\r\n return response.Body.transformToString('utf-8');\r\n}","import { SNS } from '@aws-sdk/client-sns';\r\n\r\nconst SNSUtil = {\r\n publish: (params) => publish(params),\r\n createTopic: (params) => createTopic(params)\r\n};\r\n\r\nasync function publish(params) {\r\n const sns = new SNS();\r\n return await sns.publish(params);\r\n}\r\n\r\nasync function createTopic(params) {\r\n const sns = new SNS();\r\n return await sns.createTopic(params);\r\n}\r\n\r\nexport default SNSUtil;\r\n","module.exports = require(\"@aws-sdk/client-dynamodb\");","module.exports = require(\"@aws-sdk/client-s3\");","module.exports = require(\"@aws-sdk/client-sns\");","module.exports = require(\"@aws-sdk/lib-dynamodb\");","module.exports = require(\"bluebird\");","module.exports = require(\"lodash\");","module.exports = require(\"moment\");","module.exports = require(\"moment/moment.js\");","module.exports = require(\"sequelize\");","module.exports = require(\"umzug\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","import { handleFile as handleFileImport } from './eventManager/handleFile.js';\nimport { watchBucket as watchBucketImport } from './eventManager/watchBucket.js';\nimport { publishEvents as publishEventsImport } from './eventManager/publishEvents.js';\nimport { createIncludes as createIncludesImport } from './database/dbUtils/queryStringUtils/createIncludes.js';\nimport { createFilters as createFiltersImport } from './database/dbUtils/queryStringUtils/createFilters.js';\nimport { createSort as createSortImport } from './database/dbUtils/queryStringUtils/createSort.js';\nimport { findAll as findAllImport } from './database/dbUtils/queryStringUtils/findAll.js';\nimport { checkModule as checkModuleImport } from './database/dbUtils/queryStringUtils/accessRightsUtils.js';\nimport { failure as failureImport, success as successImport } from './requestResonse/requestResponse.js';\nimport { runMigrations as runMigrationsImport } from './database/dbSetup/migrations.js';\nimport { getCurrentUser as getCurrentUserImport } from './requestResonse/requestResponse.js';\nimport { successHtml as successHtmlImport } from './requestResonse/requestResponse.js';\nimport { getCurrentUserNameFromCognitoEvent as getCurrentUserNameFromCognitoEventImport } from './requestResonse/requestResponse.js';\nimport { defaultFilters as defaultFiltersImport } from './database/dbUtils/queryStringUtils/defaultFilters.js';\nimport { accessRightsUtils as accessRightsUtilsImport } from './database/dbUtils/queryStringUtils/accessRightsUtils.js';\nimport { parseBody as parseBodyImport } from './requestResonse/requestResponse.js';\nimport { parseEvent as parseEventImport } from './requestResonse/requestResponse.js';\nimport { getBusinessesInfo as getBusinessesInfoImport } from './database/dbUtils/queryStringUtils/accessRightsUtils.js';\nimport { userDefaultBid as userDefaultBidImport } from './database/dbUtils/queryStringUtils/accessRightsUtils.js';\nimport { checkWriteAccess as checkWriteAccessImport } from './database/dbUtils/queryStringUtils/accessRightsUtils.js';\n\nexport const handleFile = handleFileImport;\nexport const watchBucket = watchBucketImport;\nexport const publishEvents = publishEventsImport;\nexport const createFilters = createFiltersImport;\nexport const createIncludes = createIncludesImport;\nexport const createSort = createSortImport;\nexport const findAll = findAllImport;\nexport const checkModule = checkModuleImport;\nexport const failure = failureImport;\nexport const success = successImport;\nexport const runMigrations = runMigrationsImport;\nexport const getCurrentUser = getCurrentUserImport;\nexport const successHtml = successHtmlImport;\nexport const getCurrentUserNameFromCognitoEvent = getCurrentUserNameFromCognitoEventImport;\nexport const defaultFilters = defaultFiltersImport;\nexport const accessRightsUtils = accessRightsUtilsImport;\nexport const parseBody = parseBodyImport;\nexport const parseEvent = parseEventImport;\nexport const getBusinessesInfo = getBusinessesInfoImport;\nexport const userDefaultBid = userDefaultBidImport;\nexport const checkWriteAccess = checkWriteAccessImport;\n"],"names":["runMigrations","_lodash","require","_lodash2","_interopRequireDefault","_umzug","obj","__esModule","default","databaseName","sequelizeInstance","initializeModels","pathToMigrationFolder","process","env","PWD","umzug","Umzug","migrations","glob","context","getQueryInterface","storage","SequelizeStorage","sequelize","logger","console","pendingMigrations","pending","log","up","catch","upError","down","_","chain","map","reverse","value","then","msg","error","Error","downError","accessRightsUtils","exports","userDefaultBid","getBusinessesInfo","getModuleInfo","checkModule","checkWriteAccess","_errorCodes","_requestResponse","event","options","useCognitoBid","get","requestedBusinessIds","getRequestedBusinessIds","allowedBusinessIds","getAllowedBusinessIds","localBidList","isEmpty","BUILD_ENV","length","intersection","jsonToParse","dbi","JSON","parse","split","businesses","Object","keys","accessRights","bids","withLocal","set","ar","moduleRights","moduleName","allowAccess","errorList","unauthorized","userRoles","admin","read","write","eventBody","parseBody","businessIds","businessId","find","id","raw","userRight","_sequelize","_sequelize2","_moment","_moment2","_accessRightsUtils","createFilters","objectFilters","query","startDate","endDate","where","reduce","acc","item","val","itemName","includes","filterType","DB","Op","iLike","or","in","parsedJson","e","type","BOOLEAN","queryValue","toLowerCase","booleanMap","active","filterAdds","s","moment","utc","dates","between","toDate","isValid","invalidStartDate","invalidEndDate","createdAt","withDate","assign","createIncludes","includeSubItem","canBeIncluded","askedForInQuery","forEach","sortItem","indexOf","substr","queryStringItem","dot","push","substring","createSort","defaultFilter","copyOfDefaultFilter","clone","sort","testItem","parentChildList","defaultFilters","addFiltersFromSchema","schema","subSchemas","filters","key","accumulator","keyPrefix","asLinkAlias","STRING","eq","itemType","CHAR","TEXT","DECIMAL","BIGINT","INTEGER","DATE","DATEONLY","lt","JSONB","contains","getPaginationFromFindAll","findAll","result","limit","offset","hasMore","splice","pageObject","rows","model","findArgs","include","all","nested","results","findUtils","_libDynamodb","_clientDynamodb","dynamoUtil","params","dynamoDb","DynamoDBDocument","from","DynamoDB","handleEvents","handleEventsS3","_handleFile","_bluebird","_bluebird2","transformer","errorHandlerPerFile","shouldSkipFailedFolders","userImportTypes","Records","Promise","resolve","hasErrors","record","snsInfo","s3Bucket","bucket","files","file","path","decodeURIComponent","handleFile","err","s3","object","_S3Utils","_S3Utils2","Bucket","Key","body","S3Util","getObject","parsedBody","returnedValue","deleteObject","code","newPath","usersImports","values","items","fileName","last","folderName","first","startsWith","replace","newParams","Body","putObject","loop","publishEvents","_SNSUtils","_SNSUtils2","_dynamoUtils","_dynamoUtils2","maxKeys","prefix","bucketResult","fileList","currentTime","S3Utils","listObjectsV2","MaxKeys","ContinuationToken","Prefix","newFiles","filter","Contents","fileDelayTime","isSameOrBefore","concat","IsTruncated","NextContinuationToken","configTable","tableKey","snsTopic","TableName","chunkSize","maxMessages","snsCreateTopicResponse","SNSUtil","createTopic","Name","topicArn","TopicArn","messageList","chunk","slice","publish","Message","stringify","watchBucket","_publishEvents","_handleEvents","dynamoConfigTable","dynamoConfigKey","noop","EventSource","isEqual","invalidInventoryReleaseRequest","message","errorCode","statusCode","alreadyReleased","alreadyReceived","invalidItemsRequest","invalidID","invalidReceivable","invalidRequest","invalidAPIKey","qbCreationError","cannotReopen","invalidDateFormat","invalidOrderStatus","invalidPaymentStatus","invalidReleaseStatus","invalidReceivableStatus","invalidJson","invalidFilter","invalidUserNameUpdate","imageSizeLimit","notFound","emailRequired","mobilePhoneRequired","invalidCadenceType","success","successHtml","getCurrentUserNameFromCognitoEvent","getCurrentUser","failure","parseEvent","detectSequelizeError","detectJoyError","dbClose","buildResponse","html","headers","attributes","username","cleanedErrorBody","UTIL_LOG","NORMAL_ERROR","isUndefined","details","newBody","merge","requestEvent","isString","isObject","callback","errorBody","sequelizeError","parentError","trim","joyError","s3Utils","_clientS","action","S3","getS3","response","transformToString","_clientSns","sns","SNS","_watchBucket","_createIncludes","_createFilters","_createSort","_findAll","_migrations","_defaultFilters","handleFileImport","watchBucketImport","publishEventsImport","createFiltersImport","createIncludesImport","createSortImport","findAllImport","checkModuleImport","failureImport","successImport","runMigrationsImport","getCurrentUserImport","successHtmlImport","getCurrentUserNameFromCognitoEventImport","defaultFiltersImport","accessRightsUtilsImport","parseBodyImport","parseEventImport","getBusinessesInfoImport","userDefaultBidImport","checkWriteAccessImport"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "piper-utils",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "description": "utility library for piper",
5
5
  "main": "bin/main.js",
6
6
  "scripts": {
@@ -16,6 +16,7 @@ export function handleEvents(event, transformer, errorHandlerPerFile, shouldSkip
16
16
 
17
17
  return Promise.map(files, (file) => {
18
18
  let path = decodeURIComponent(file);
19
+ console.log('------->path', path);
19
20
  if (path) {
20
21
  return handleFile(path, s3Bucket, transformer, { shouldSkipFailedFolders, userImportTypes }).catch((err) => {
21
22
  if (errorHandlerPerFile && !errorHandlerPerFile(err, path)) {
@@ -30,3 +31,30 @@ export function handleEvents(event, transformer, errorHandlerPerFile, shouldSkip
30
31
  }
31
32
  });
32
33
  }
34
+ export function handleEventsS3(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders = false, userImportTypes) {
35
+ if (!event || !event.Records) {
36
+ return Promise.resolve();
37
+ }
38
+
39
+ let hasErrors = false;
40
+
41
+ return Promise.map(event.Records, (record) => {
42
+ const s3Bucket = record.s3;
43
+ const file = record.s3.object.key || [];
44
+
45
+
46
+ let path = decodeURIComponent(file);
47
+ if (path) {
48
+ return handleFile(path, s3Bucket, transformer, { shouldSkipFailedFolders, userImportTypes }).catch((err) => {
49
+ if (errorHandlerPerFile && !errorHandlerPerFile(err, path)) {
50
+ hasErrors = true;
51
+ }
52
+ });
53
+ }
54
+
55
+ }).then(() => {
56
+ if (hasErrors) {
57
+ throw 'Errors processing one or more files. See error logs for detail on each error.';
58
+ }
59
+ });
60
+ }
@@ -10,7 +10,7 @@ import dynamoUtil from '../dynamo/dynamoUtils.js';
10
10
  * @param {number} maxKeys
11
11
  * @param {Object} userImportTypes
12
12
  */
13
- export async function loop(bucket, maxKeys, userImportTypes) {
13
+ export async function loop(bucket, maxKeys, userImportTypes, prefix) {
14
14
  let bucketResult = {};
15
15
  let fileList = [];
16
16
 
@@ -20,7 +20,8 @@ export async function loop(bucket, maxKeys, userImportTypes) {
20
20
  bucketResult = await S3Utils.listObjectsV2({
21
21
  Bucket: bucket,
22
22
  MaxKeys: maxKeys,
23
- ContinuationToken: _.get(bucketResult, 'NextContinuationToken')
23
+ ContinuationToken: _.get(bucketResult, 'NextContinuationToken'),
24
+ Prefix:prefix
24
25
  });
25
26
 
26
27
  let newFiles = _.filter(bucketResult.Contents, (file) => {
@@ -60,8 +61,9 @@ export async function loop(bucket, maxKeys, userImportTypes) {
60
61
  * @param {string} bucket - The name of the s3 bucket to watch, when you drop items into this table events will be created
61
62
  * @param {string} snsTopic - The name of the snsEvent to publish
62
63
  * @param {object} userImportTypes - import types to filter on
64
+ * @param {object} prefix - subdirectory or file prefix
63
65
  */
64
- export async function publishEvents(configTable, tableKey, bucket, snsTopic, userImportTypes) {
66
+ export async function publishEvents(configTable, tableKey, bucket, snsTopic, userImportTypes, prefix) {
65
67
  let result;
66
68
  try {
67
69
  result = await dynamoUtil.get({
@@ -78,7 +80,7 @@ export async function publishEvents(configTable, tableKey, bucket, snsTopic, use
78
80
  const topicArn = snsCreateTopicResponse.TopicArn;
79
81
  const maxKeys = chunkSize * maxMessages;
80
82
 
81
- const fileList = await loop(bucket, maxKeys, userImportTypes);
83
+ const fileList = await loop(bucket, maxKeys, userImportTypes, prefix);
82
84
 
83
85
  const messageList = _.chain(fileList)
84
86
  .map('Key')
@@ -1,5 +1,5 @@
1
1
  import { publishEvents } from './publishEvents.js';
2
- import { handleEvents } from './handleEvents.js';
2
+ import { handleEvents, handleEventsS3 } from './handleEvents.js';
3
3
  import _ from 'lodash';
4
4
 
5
5
  /**
@@ -15,6 +15,7 @@ import _ from 'lodash';
15
15
  * @param {function} [params.errorHandlerPerFile] - the function to run on as a catch on each file
16
16
  * @param {boolean} [params.shouldSkipFailedFolders] - whether to use the failed-once, failed-twice, error or just error folders
17
17
  * @param {object} [params.userImportTypes] - user import sub directories object map
18
+ * @param {object} [params.prefix] - watch a sub directory in the bucket - specify the subdirectory as a prefix
18
19
  */
19
20
  export function watchBucket({
20
21
  event,
@@ -25,7 +26,8 @@ export function watchBucket({
25
26
  transformer,
26
27
  errorHandlerPerFile = _.noop,
27
28
  shouldSkipFailedFolders = false,
28
- userImportTypes
29
+ userImportTypes,
30
+ prefix
29
31
  }) {
30
32
  if (!event || !dynamoConfigTable || !dynamoConfigKey || !s3Bucket || !snsTopic || !transformer) {
31
33
  throw new Error('Missing required parameters. Need event, dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, transformer');
@@ -34,8 +36,10 @@ export function watchBucket({
34
36
  const EventSource = _.get(event, 'Records[0].EventSource');
35
37
  if (_.isEqual(EventSource, 'aws:sns')) {
36
38
  return handleEvents(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders, userImportTypes);
39
+ } else if (_.isEqual(EventSource, 'aws:s3')) {
40
+ return handleEventsS3(event, transformer, errorHandlerPerFile, shouldSkipFailedFolders, userImportTypes);
37
41
  } else {
38
42
  // the function is being run from the cron job so publish SNS events
39
- return publishEvents(dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, userImportTypes);
43
+ return publishEvents(dynamoConfigTable, dynamoConfigKey, s3Bucket, snsTopic, userImportTypes, prefix);
40
44
  }
41
45
  }
@@ -3,7 +3,7 @@ import { errorList } from './errorCodes.js';
3
3
 
4
4
  /**
5
5
  * @param {Object} body
6
- * @param {{}} options
6
+ * @param {{dbClose?:function}} [options]
7
7
  */
8
8
  export function success(body, options) {
9
9
  const dbClose = _.get(options, 'dbClose', _.noop);