simple-swf
Version:
Actually simple API layer for AWS SWF
127 lines • 6.6 kB
JavaScript
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var _ = require("lodash");
var SWFConfig_1 = require("../SWFConfig");
var interfaces_1 = require("../interfaces");
var ActivityTypeInfo_1 = require("./ActivityTypeInfo");
var ActivityType = (function (_super) {
__extends(ActivityType, _super);
function ActivityType(name, version, HandlerClass, opts) {
if (opts === void 0) { opts = {}; }
var _this = _super.call(this, name, version) || this;
_this.HandlerClass = HandlerClass;
_this.opts = opts;
_this.maxRetry = opts['maxRetry'] || 5;
_this.domainScope = {};
return _this;
}
ActivityType.prototype.ensureActivityType = function (domain, cb) {
var defaults = domain.config.populateDefaults({ entities: ['activity'], api: 'registerActivityType' }, this.opts);
var params = {
name: this.name,
version: this.version,
domain: domain.name
};
domain.swfClient.registerActivityType(_.defaults(params, defaults), function (err) {
if (err && err.code !== interfaces_1.TypeExistsFault)
return cb(err, false);
if (err)
return cb(null, false);
cb(null, true);
});
};
ActivityType.prototype.createExecution = function (workflow, task) {
return new this.HandlerClass(workflow, this, task);
};
ActivityType.prototype.heartbeatTimeout = function (config) {
if (this.opts['heartbeatTimeout'])
return this.opts['heartbeatTimeout'];
return config.getValueForParam('activity', 'heartbeatTimeout');
};
ActivityType.getDefaultConfig = function () {
return {
heartbeatTimeout: {
description: 'A task must make a RecordActivityTaskHeartbeat call once within this interval. If not, the task is marked as invalid and rescheduled',
mappings: [
{ api: 'respondDecisionTaskCompleted', attribute: 'scheduleActivityTaskDecisionAttributes', name: 'heartbeatTimeout' },
{ api: 'registerActivityType', name: 'defaultTaskHeartbeatTimeout' }
],
value: 120,
unit: SWFConfig_1.ConfigDefaultUnit.Second
},
startToCloseTimeout: {
description: 'The maximum amount of time an activity task can be outstanding after being started. 0 or NONE indiciate no limit',
mappings: [
{ api: 'registerActivityType', name: 'defaultTaskStartToCloseTimeout' },
{ api: 'startWorkflowExecution', name: 'taskStartToCloseTimeout' },
{ api: 'respondDecisionTaskCompleted', attribute: 'scheduleActivityTaskDecisionAttributes', name: 'startToCloseTimeout' },
{ api: 'respondDecisionTaskCompleted', attribute: 'scheduleLambdaFunctionDecisionAttributes', name: 'startToCloseTimeout' }
],
value: 'NONE',
unit: SWFConfig_1.ConfigDefaultUnit.Second,
},
scheduleToStartTimeout: {
description: 'The maximum amount of time a task can be waiting to be started. 0 or NONE indicate no limit',
mappings: [
{ api: 'registerActivityType', name: 'defaultTaskScheduleToStartTimeout' },
{ api: 'respondDecisionTaskCompleted', attribute: 'scheduleActivityTaskDecisionAttributes', name: 'scheduleToStartTimeout' },
],
value: 'NONE',
unit: SWFConfig_1.ConfigDefaultUnit.Second,
},
scheduleToCloseTimeout: {
description: 'The maximum amount of time a task can be outstanding, including scheudling delay. 0 or NONE indicate no limit',
mappings: [
{ api: 'registerActivityType', name: 'defaultTaskScheduleToCloseTimeout' },
{ api: 'respondDecisionTaskCompleted', attribute: 'scheduleActivityTaskDecisionAttributes', name: 'scheduleToCloseTimeout' },
],
value: 'NONE',
unit: SWFConfig_1.ConfigDefaultUnit.Second,
},
taskList: {
description: 'Specifies the taskList name for a specific activity or filters by taskList, see SWF docs for more stails',
mappings: [
{ api: 'registerActivityType', name: 'defaultTaskList' },
{ api: 'respondDecisionTaskCompleted', attribute: 'scheduleActivityTaskDecisionAttributes', name: 'taskList' },
{ api: 'respondDecisionTaskCompleted', attribute: 'startChildWorkflowExecutionDecisionAttributes', name: 'taskList' },
{ api: 'pollForActivityTask', name: 'taskList' }
],
value: 'simple-swf',
format: function (name) {
return { name: name };
},
unit: SWFConfig_1.ConfigDefaultUnit.String
},
taskPriority: {
description: 'The priority allows for tasks to be prioritized above others, see SWF docs for details',
mappings: [
{ api: 'registerActivityType', name: 'defaultTaskPriority' },
{ api: 'respondDecisionTaskCompleted', attribute: 'startChildWorkflowExecutionDecisionAttributes', name: 'taskPriority' }
],
value: 0,
unit: SWFConfig_1.ConfigDefaultUnit.Number
},
description: {
description: 'Provides a text description for this activty type',
mappings: [
{ api: 'registerActivityType', name: 'description' }
],
value: null,
unit: SWFConfig_1.ConfigDefaultUnit.String
}
};
};
return ActivityType;
}(ActivityTypeInfo_1.ActivityTypeInfo));
exports.ActivityType = ActivityType;
//# sourceMappingURL=ActivityType.js.map
;