server/middleware/grpc-client/format-response/format-response-describe-workflow.js (121 lines of code) (raw):

// Copyright (c) 2022-2024 Uber Technologies Inc. // // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. const formatEnum = require('./format-enum'); const formatFailureDetails = require('./format-failure-details'); const formatTimestampToDatetime = require('./format-timestamp-to-datetime'); const formatDurationToSeconds = require('./format-duration-to-seconds'); const formatResponseDescribeWorkflow = ({ executionConfiguration: { executionStartToCloseTimeout, taskList, taskStartToCloseTimeout, }, pendingActivities, pendingChildren, pendingDecision, workflowExecutionInfo, ...response }) => ({ ...response, executionConfiguration: { executionStartToCloseTimeoutSeconds: formatDurationToSeconds( executionStartToCloseTimeout ), taskList: { kind: taskList?.kind ? formatEnum(taskList?.kind, 'TASK_LIST_KIND') : null, name: taskList?.name || null, }, taskStartToCloseTimeoutSeconds: formatDurationToSeconds( taskStartToCloseTimeout ), }, pendingActivities: pendingActivities?.length ? pendingActivities.map( ({ activityId, expirationTime, lastFailure, lastHeartbeatTime, lastStartedTime, scheduledTime, state, ...pendingActivity }) => ({ ...pendingActivity, activityID: parseInt(activityId), expirationTimestamp: formatTimestampToDatetime(expirationTime), lastFailureDetails: formatFailureDetails(lastFailure), lastFailureReason: lastFailure?.reason || null, lastHeartbeatTimestamp: formatTimestampToDatetime(lastHeartbeatTime), lastStartedTimestamp: formatTimestampToDatetime(lastStartedTime), scheduledTimestamp: formatTimestampToDatetime(scheduledTime), state: formatEnum(state, 'PENDING_ACTIVITY_STATE'), }) ) : null, pendingChildren: pendingChildren?.length ? pendingChildren.map( ({ initiatedId, parentClosePolicy, workflowExecution, ...pendingChild }) => ({ ...pendingChild, initiatedID: parseInt(initiatedId), parentClosePolicy: formatEnum( parentClosePolicy, 'PARENT_CLOSE_POLICY' ), runID: workflowExecution?.runId || null, workflowID: workflowExecution?.workflowId || null, }) ) : null, pendingDecision: pendingDecision ? { attempt: pendingDecision.attempt, originalScheduledTimestamp: formatTimestampToDatetime( pendingDecision.originalScheduledTime ), scheduledTimestamp: formatTimestampToDatetime( pendingDecision.scheduledTime ), startedTimestamp: formatTimestampToDatetime( pendingDecision.startedTime ), state: formatEnum(pendingDecision.state, 'PENDING_DECISION_STATE'), } : null, workflowExecutionInfo: workflowExecutionInfo ? { ...workflowExecutionInfo, autoResetPoints: { points: workflowExecutionInfo?.autoResetPoints?.points.map( ({ createdTime, expiringTime, ...point }) => ({ ...point, createdTimeNano: formatTimestampToDatetime(createdTime), expiringTimeNano: formatTimestampToDatetime(expiringTime), }) ) || null, }, closeStatus: workflowExecutionInfo?.closeStatus ? formatEnum( workflowExecutionInfo?.closeStatus, 'WORKFLOW_EXECUTION_CLOSE_STATUS' ) : null, closeTime: formatTimestampToDatetime(workflowExecutionInfo?.closeTime) || null, execution: workflowExecutionInfo?.workflowExecution || null, executionTime: formatTimestampToDatetime(workflowExecutionInfo?.executionTime) || null, historyLength: parseInt(workflowExecutionInfo?.historyLength) || null, startTime: formatTimestampToDatetime(workflowExecutionInfo?.startTime) || null, } : null, }); module.exports = formatResponseDescribeWorkflow;