@cumulus/message
Version:
Utilities for building and parsing Cumulus messages
90 lines • 3.48 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildQueueMessageFromTemplate = exports.buildCumulusMeta = void 0;
/**
* Utility functions for building Cumulus messages
*
* @module Build
*
* @example
* const Build = require('@cumulus/message/Build');
*/
const merge_1 = __importDefault(require("lodash/merge"));
const uuid_1 = require("uuid");
/**
* Generate an execution name.
*
* @param {string} [prefix]
* @returns {string}
* @private
*/
const createExecutionName = (prefix) => (prefix ? `${prefix}-${(0, uuid_1.v4)()}` : (0, uuid_1.v4)());
/**
* Build base message.cumulus_meta for a queued execution.
*
* @param {Object} params
* @param {string} params.stateMachine - State machine name
* @param {string} [params.asyncOperationId] - Async operation ID
* @param {string} [params.parentExecutionArn] - Parent execution ARN
* @param {string} [params.executionNamePrefix] - Prefix to apply to the name
* of the enqueued execution
* @returns {Message.CumulusMeta}
*
* @private
*/
const buildCumulusMeta = ({ stateMachine, asyncOperationId, parentExecutionArn, templateCumulusMeta, executionNamePrefix, }) => {
const cumulusMeta = {
...templateCumulusMeta,
execution_name: createExecutionName(executionNamePrefix),
state_machine: stateMachine,
};
if (parentExecutionArn)
cumulusMeta.parentExecutionArn = parentExecutionArn;
if (asyncOperationId)
cumulusMeta.asyncOperationId = asyncOperationId;
return cumulusMeta;
};
exports.buildCumulusMeta = buildCumulusMeta;
/**
* Build an SQS message from a workflow template for queueing executions.
*
* @param {Object} params
* @param {Object} params.provider - A provider object
* @param {Object} params.collection - A collection object
* @param {string} params.parentExecutionArn - ARN for parent execution
* @param {Object} params.messageTemplate - Message template for the workflow
* @param {Object} params.payload - Payload for the workflow
* @param {Object} params.workflow - workflow name & arn object
* @param {string} [params.asyncOperationId] - Async operation ID
* @param {Object} [params.customCumulusMeta] - Custom data for message.cumulus_meta
* @param {Object} [params.customMeta] - Custom data for message.meta
* @param {string} [params.executionNamePrefix] - Prefix to apply to the name
* of the enqueued execution
*
* @returns {Message.CumulusMessage} A Cumulus message object
*
* @alias module:Build
*/
const buildQueueMessageFromTemplate = ({ parentExecutionArn, asyncOperationId, messageTemplate, payload, workflow, customCumulusMeta = {}, customMeta = {}, executionNamePrefix, }) => {
const cumulusMeta = (0, exports.buildCumulusMeta)({
asyncOperationId,
parentExecutionArn,
stateMachine: workflow.arn,
templateCumulusMeta: messageTemplate.cumulus_meta,
executionNamePrefix,
});
const message = {
...messageTemplate,
meta: (0, merge_1.default)(messageTemplate.meta, customMeta, {
workflow_name: workflow.name,
}),
cumulus_meta: (0, merge_1.default)(customCumulusMeta, cumulusMeta),
payload,
};
return message;
};
exports.buildQueueMessageFromTemplate = buildQueueMessageFromTemplate;
//# sourceMappingURL=Build.js.map
;