actions.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const serviceManager_1 = require("../serviceManager");
  4. const Debug = require("debug");
  5. class Action {
  6. }
  7. exports.Action = Action;
  8. class ActionService {
  9. constructor() {
  10. this.timer = undefined;
  11. this.transport = undefined;
  12. this.actions = new Map();
  13. this.logger = Debug('axm:services:actions');
  14. }
  15. listener(data) {
  16. this.logger(`Received new message from reverse`);
  17. if (!data)
  18. return false;
  19. const actionName = data.msg ? data.msg : data.action_name ? data.action_name : data;
  20. let action = this.actions.get(actionName);
  21. if (typeof action !== 'object') {
  22. return this.logger(`Received action ${actionName} but failed to find the implementation`);
  23. }
  24. if (!action.isScoped) {
  25. this.logger(`Succesfully called custom action ${action.name} with arity ${action.handler.length}`);
  26. if (action.handler.length === 2) {
  27. let params = {};
  28. if (typeof data === 'object') {
  29. params = data.opts;
  30. }
  31. return action.handler(params, action.callback);
  32. }
  33. return action.handler(action.callback);
  34. }
  35. if (data.uuid === undefined) {
  36. return this.logger(`Received scoped action ${action.name} but without uuid`);
  37. }
  38. const stream = {
  39. send: (dt) => {
  40. this.transport.send('axm:scoped_action:stream', {
  41. data: dt,
  42. uuid: data.uuid,
  43. action_name: actionName
  44. });
  45. },
  46. error: (dt) => {
  47. this.transport.send('axm:scoped_action:error', {
  48. data: dt,
  49. uuid: data.uuid,
  50. action_name: actionName
  51. });
  52. },
  53. end: (dt) => {
  54. this.transport.send('axm:scoped_action:end', {
  55. data: dt,
  56. uuid: data.uuid,
  57. action_name: actionName
  58. });
  59. }
  60. };
  61. this.logger(`Succesfully called scoped action ${action.name}`);
  62. return action.handler(data.opts || {}, stream);
  63. }
  64. init() {
  65. this.transport = serviceManager_1.ServiceManager.get('transport');
  66. if (this.transport === undefined) {
  67. return this.logger(`Failed to load transport service`);
  68. }
  69. this.actions.clear();
  70. this.transport.on('data', this.listener.bind(this));
  71. }
  72. destroy() {
  73. if (this.timer !== undefined) {
  74. clearInterval(this.timer);
  75. }
  76. if (this.transport !== undefined) {
  77. this.transport.removeListener('data', this.listener.bind(this));
  78. }
  79. }
  80. registerAction(actionName, opts, handler) {
  81. if (typeof opts === 'function') {
  82. handler = opts;
  83. opts = undefined;
  84. }
  85. if (typeof actionName !== 'string') {
  86. console.error(`You must define an name when registering an action`);
  87. return;
  88. }
  89. if (typeof handler !== 'function') {
  90. console.error(`You must define an callback when registering an action`);
  91. return;
  92. }
  93. if (this.transport === undefined) {
  94. return this.logger(`Failed to load transport service`);
  95. }
  96. let type = 'custom';
  97. if (actionName.indexOf('km:') === 0 || actionName.indexOf('internal:') === 0) {
  98. type = 'internal';
  99. }
  100. const reply = (data) => {
  101. this.transport.send('axm:reply', {
  102. at: new Date().getTime(),
  103. action_name: actionName,
  104. return: data
  105. });
  106. };
  107. const action = {
  108. name: actionName,
  109. callback: reply,
  110. handler,
  111. type,
  112. isScoped: false,
  113. arity: handler.length,
  114. opts
  115. };
  116. this.logger(`Succesfully registered custom action ${action.name}`);
  117. this.actions.set(actionName, action);
  118. this.transport.addAction(action);
  119. }
  120. scopedAction(actionName, handler) {
  121. if (typeof actionName !== 'string') {
  122. console.error(`You must define an name when registering an action`);
  123. return -1;
  124. }
  125. if (typeof handler !== 'function') {
  126. console.error(`You must define an callback when registering an action`);
  127. return -1;
  128. }
  129. if (this.transport === undefined) {
  130. return this.logger(`Failed to load transport service`);
  131. }
  132. const action = {
  133. name: actionName,
  134. handler,
  135. type: 'scoped',
  136. isScoped: true,
  137. arity: handler.length,
  138. opts: null
  139. };
  140. this.logger(`Succesfully registered scoped action ${action.name}`);
  141. this.actions.set(actionName, action);
  142. this.transport.addAction(action);
  143. }
  144. }
  145. exports.ActionService = ActionService;
  146. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQWtEO0FBRWxELCtCQUE4QjtBQUU5QixNQUFhLE1BQU07Q0FRbEI7QUFSRCx3QkFRQztBQUVELE1BQWEsYUFBYTtJQUExQjtRQUVVLFVBQUssR0FBNkIsU0FBUyxDQUFBO1FBQzNDLGNBQVMsR0FBMEIsU0FBUyxDQUFBO1FBQzVDLFlBQU8sR0FBd0IsSUFBSSxHQUFHLEVBQWtCLENBQUE7UUFDeEQsV0FBTSxHQUFhLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0lBaUsxRCxDQUFDO0lBL0pTLFFBQVEsQ0FBRSxJQUFJO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtRQUNoRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFBO1FBRXZCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUNuRixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUN6QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLFVBQVUsd0NBQXdDLENBQUMsQ0FBQTtTQUMxRjtRQUdELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsb0NBQW9DLE1BQU0sQ0FBQyxJQUFJLGVBQWUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lB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