/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/redis-workflow@0.5.1/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";var __extends=this&&this.__extends||function(){var e=function(r,t){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var t in r)r.hasOwnProperty(t)&&(e[t]=r[t])},e(r,t)};return function(r,t){function o(){this.constructor=r}e(r,t),r.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}}();Object.defineProperty(exports,"__esModule",{value:!0});var events_1=require("events"),redis=require("redis"),Action_1=require("./lib/Action");exports.ActionType=Action_1.ActionType;var DelayedAction_1=require("./lib/DelayedAction");exports.DelayedAction=DelayedAction_1.default;var ImmediateAction_1=require("./lib/ImmediateAction");exports.ImmediateAction=ImmediateAction_1.default;var RedisConfig_1=require("./lib/RedisConfig");exports.RedisConfig=RedisConfig_1.default;var Rule_1=require("./lib/Rule");exports.Rule=Rule_1.default;var Trigger_1=require("./lib/Trigger");exports.Trigger=Trigger_1.default;var Util_1=require("./lib/Util");exports.Util=Util_1.default;var WorkflowEvents,Workflow_1=require("./lib/Workflow");exports.Workflow=Workflow_1.default,function(e){e.Error="error",e.Add="add",e.Remove="remove",e.Load="load",e.Save="save",e.Delete="delete",e.Ready="ready",e.Start="start",e.Stop="stop",e.Reset="reset",e.Schedule="schedule",e.Immediate="immediate",e.Invalid="invalid",e.Audit="audit",e.Kill="kill"}(WorkflowEvents=exports.WorkflowEvents||(exports.WorkflowEvents={}));var RedisWorkflowManager=function(e){function r(r,t,o){var n=e.call(this)||this;if(n.DEFAULT_REDIS_HOST="localhost",n.DEFAULT_REDIS_PORT=6379,n.PUBSUB_KILL_MESSAGE="WFKILL",n.REDIS_WORKFLOW_KEY_SUFFIX="workflows",r&&"object"!=typeof r)throw new TypeError("Config must be null or a valid RedisConfig");if(t&&"object"!=typeof t)throw new TypeError("Client must be null or a valid RedisClient");if(o&&0===o.length)throw new TypeError("Channels must be valid array of at least one string");if(t&&t instanceof redis.RedisClient)n.client=t,n.subscriber=t;else{var i={host:r.host||n.DEFAULT_REDIS_HOST,port:r.port||n.DEFAULT_REDIS_PORT,retry_strategy:function(e){return e.error&&"ECONNREFUSED"===e.error.code?new Error("The server refused the connection"):e.total_retry_time>36e5?new Error("Retry time exhausted"):e.attempt>10?void 0:Math.min(100*e.attempt,3e3)}};r.db&&(i.db=r.db),r.password&&(i.password=r.password),n.client=redis.createClient(i),n.subscriber=redis.createClient(i)}return n.workflows={},o&&n.reload(o).then((function(){return n})).catch((function(e){return n.emit(WorkflowEvents.Error,e),n})),n}return __extends(r,e),r.prototype.setWorkflows=function(e){if("object"!=typeof e)throw new TypeError("Workflows must be a valid object");this.workflows=e},r.prototype.setWorkflowsForChannel=function(e,r){if("object"!=typeof r)throw new TypeError("Workflows must be a valid object");this.workflows[e]=r},r.prototype.getWorkflows=function(){return this.workflows||{}},r.prototype.getWorkflowsForChannel=function(e){if("string"!=typeof e)throw new TypeError("Channel must be a valid string");if(!this.workflows)throw new Error("You haven't defined any workflows yet");if(this.workflows&&!this.workflows[e])throw new Error("No workflows exist for that channel");return this.workflows[e]},r.prototype.addWorkflow=function(e,r){var t=this;return new Promise((function(o,n){var i;if(!e||"string"!=typeof e)throw new TypeError("Channel must be a valid string");if(!r||"object"!=typeof r)throw new TypeError("Workflow is required");t.workflows?t.workflows&&!t.workflows[e]?t.workflows[e]=[r]:t.workflows[e].push(r):t.workflows=((i={})[e]=[r],i),t.saveWorkflowsToDatabaseForChannel(e).then((function(){t.emit(WorkflowEvents.Add),o()})).catch((function(e){n(e)}))}))},r.prototype.removeWorkflow=function(e,r){var t=this;return new Promise((function(o,n){if(!e||"string"!=typeof e)throw new TypeError("Channel must be a valid string");if(!r||"string"!=typeof r)throw new TypeError("Name must be a valid string");if(t.workflows&&t.workflows[e]){var i=t.workflows[e];i=i.filter((function(e){return e.getName()!==r})),t.workflows[e]=i}t.saveWorkflowsToDatabaseForChannel(e).then((function(){t.emit(WorkflowEvents.Remove),o()})).catch((function(e){n(e)}))}))},r.prototype.start=function(e){var r=this;return new Promise((function(t,o){if("string"!=typeof e)throw new TypeError("Channel must be a valid string");if(!r.workflows)throw new Error("You haven't defined any workflows yet");if(r.workflows&&!r.workflows[e])throw new Error("No workflows exist for that channel");var n=r.getTriggersAsDictForChannel(e);r.subscriber.on("message",(function(t,o){if(t===e)if(o===r.PUBSUB_KILL_MESSAGE)r.subscriber.unsubscribe(e),r.emit(WorkflowEvents.Kill,e);else if(o&&"string"==typeof o)try{var i=JSON.parse(o),s=i.event,a=i.context,f=s&&a?n[s]:null;f?f.getActionsForContext(a).then((function(e){0===e.length?r.emit(WorkflowEvents.Invalid,i):e.map((function(e){e.setContext(a),e?(r.emit(e.getName(),e),r.emit(WorkflowEvents.Audit,e),e instanceof DelayedAction_1.default?r.emit(WorkflowEvents.Schedule,e):e instanceof ImmediateAction_1.default&&r.emit(WorkflowEvents.Immediate,e)):r.emit(WorkflowEvents.Error,new TypeError("Action object was null"))}))})).catch((function(e){r.emit(WorkflowEvents.Error,e)})):r.emit(WorkflowEvents.Error,new TypeError("No trigger defined for event '"+s+"'"))}catch(e){r.emit(WorkflowEvents.Error,e)}else r.emit(WorkflowEvents.Error,new TypeError("Message "+o+" is not valid JSON '{event, context}'"))})),r.subscriber.subscribe(e,(function(e,o){if(null!==e)throw e;r.emit(WorkflowEvents.Start),t()}))}))},r.prototype.stop=function(e){var r=this;return new Promise((function(t,o){if("string"!=typeof e)throw new TypeError("Channel parameter must be a string");r.client.publish(e,r.PUBSUB_KILL_MESSAGE,(function(e,o){r.emit(WorkflowEvents.Stop),t()}))}))},r.prototype.reload=function(e){var r=this;return new Promise((function(t,o){if(!e||0===e.length)throw new TypeError("Channels must be valid array of one or more strings");var n=[];e.map((function(e){n.push(r.loadWorkflowsFromDatabaseForChannel(e))})),Promise.all(n).then((function(e){r.emit(WorkflowEvents.Ready),t()})).catch((function(e){r.emit(WorkflowEvents.Error,e)}))}))},r.prototype.save=function(e){var r=this;return new Promise((function(t,o){if(!e||0===e.length)throw new TypeError("Channels must be valid array of one or more strings");var n=[];e.map((function(e){n.push(r.saveWorkflowsToDatabaseForChannel(e))})),Promise.all(n).then((function(e){r.emit(WorkflowEvents.Save),t()})).catch((function(e){r.emit(WorkflowEvents.Error,e)}))}))},r.prototype.reset=function(e){var r=this;return new Promise((function(e,t){r.workflows={},r.emit(WorkflowEvents.Reset),e()}))},r.prototype.saveWorkflowsToDatabaseForChannel=function(e){var r=this;return new Promise((function(t,o){if("string"!=typeof e)throw new TypeError("Channel parameter must be a string");if(r.workflows){var n=[];r.workflows[e].map((function(t){var o=Util_1.default.hash(t.getName()),i=[e,o].join(":");n.push(r.saveWorkflowToDatabase(i,t))})),Promise.all(n).then((function(o){var n,i=[e,r.REDIS_WORKFLOW_KEY_SUFFIX].join(":");(n=r.client).sadd.apply(n,[i].concat(o,[function(o,n){r.emit(WorkflowEvents.Save,e),t()}]))})).catch((function(e){o(e)}))}}))},r.prototype.saveWorkflowToDatabase=function(e,r){var t=this;return new Promise((function(o,n){if(!e||"string"!=typeof e)throw new TypeError("Key must be valid string");if(!r||"object"!=typeof r)throw new TypeError("Workflow must be valid Workflow");var i=r.toDict();t.client.set(e,JSON.stringify(i),(function(r,t){if(null!==r)throw r;o(e)}))}))},r.prototype.getWorkflowFromDb=function(e){var r=this;return new Promise((function(t,o){if(!e||"string"!=typeof e)throw new TypeError("Key must be valid string");r.client.get(e,(function(e,r){if(null!==e)throw e;try{var n=JSON.parse(r),i=(new Workflow_1.default).fromDict(n);t(i)}catch(e){o(e)}}))}))},r.prototype.loadWorkflowsFromDatabaseForChannel=function(e){var r=this;return new Promise((function(t,o){if("string"!=typeof e)throw new TypeError("Channel parameter must be a string");var n=[];r.client.smembers([e,r.REDIS_WORKFLOW_KEY_SUFFIX].join(":"),(function(o,i){if(null!==o)throw o;i.map((function(e){n.push(r.getWorkflowFromDb(e))})),Promise.all(n).then((function(o){r.setWorkflowsForChannel(e,o),r.emit(WorkflowEvents.Load),t()})).catch((function(e){throw e}))}))}))},r.prototype.removeWorkflowsFromDatabase=function(e){var r=this;return new Promise((function(t,o){if("string"!=typeof e)throw new TypeError("Channel parameter must be a string");var n=[e,r.REDIS_WORKFLOW_KEY_SUFFIX].join(":");r.client.del(n,(function(o,n){r.emit(WorkflowEvents.Delete,e),t()}))}))},r.prototype.getTriggersAsDictForChannel=function(e){var r={};return this.workflows[e].map((function(e){e&&null!==e&&null!==e.getTrigger()&&null!==e.getTrigger().getName()&&void 0!==e.getTrigger().getName()&&(r[e.getTrigger().getName()]=e)})),r},r}(events_1.EventEmitter);exports.RedisWorkflowManager=RedisWorkflowManager;
//# sourceMappingURL=/sm/61ecbe6dc2fd80ea157a43654950b1f1a978fcf1898196934009b61a7f62b304.map