@hotmeshio/hotmesh 0.3.8 → 0.3.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/README.md +7 -13
  2. package/build/index.d.ts +5 -2
  3. package/build/index.js +8 -3
  4. package/build/modules/key.js +1 -1
  5. package/build/modules/utils.d.ts +12 -4
  6. package/build/modules/utils.js +1 -1
  7. package/build/package.json +15 -8
  8. package/build/services/activities/activity.d.ts +9 -9
  9. package/build/services/activities/activity.js +1 -1
  10. package/build/services/activities/await.d.ts +2 -2
  11. package/build/services/activities/await.js +1 -1
  12. package/build/services/activities/cycle.d.ts +2 -2
  13. package/build/services/activities/cycle.js +1 -1
  14. package/build/services/activities/hook.d.ts +2 -2
  15. package/build/services/activities/hook.js +1 -1
  16. package/build/services/activities/index.js +1 -1
  17. package/build/services/activities/interrupt.js +1 -1
  18. package/build/services/activities/signal.js +1 -1
  19. package/build/services/activities/trigger.d.ts +3 -3
  20. package/build/services/activities/trigger.js +1 -1
  21. package/build/services/activities/worker.d.ts +2 -2
  22. package/build/services/activities/worker.js +1 -1
  23. package/build/services/collator/index.d.ts +9 -9
  24. package/build/services/collator/index.js +1 -1
  25. package/build/services/compiler/deployer.d.ts +4 -4
  26. package/build/services/compiler/deployer.js +1 -1
  27. package/build/services/compiler/index.d.ts +4 -4
  28. package/build/services/compiler/index.js +1 -1
  29. package/build/services/compiler/validator.d.ts +3 -3
  30. package/build/services/compiler/validator.js +1 -1
  31. package/build/services/connector/factory.d.ts +7 -0
  32. package/build/services/connector/factory.js +65 -0
  33. package/build/services/connector/index.d.ts +13 -4
  34. package/build/services/connector/index.js +30 -23
  35. package/build/services/connector/providers/ioredis.d.ts +9 -0
  36. package/build/services/connector/providers/ioredis.js +26 -0
  37. package/build/services/connector/providers/nats.d.ts +9 -0
  38. package/build/services/connector/providers/nats.js +26 -0
  39. package/build/services/connector/providers/postgres.d.ts +9 -0
  40. package/build/services/connector/providers/postgres.js +44 -0
  41. package/build/services/connector/providers/redis.d.ts +9 -0
  42. package/build/services/connector/providers/redis.js +38 -0
  43. package/build/services/engine/index.d.ts +12 -12
  44. package/build/services/engine/index.js +1 -1
  45. package/build/services/exporter/index.d.ts +3 -3
  46. package/build/services/exporter/index.js +1 -1
  47. package/build/services/hotmesh/index.js +4 -4
  48. package/build/services/mapper/index.js +1 -1
  49. package/build/services/meshcall/index.d.ts +5 -4
  50. package/build/services/meshcall/index.js +31 -14
  51. package/build/services/meshdata/index.d.ts +6 -6
  52. package/build/services/meshdata/index.js +7 -15
  53. package/build/services/meshflow/connection.d.ts +3 -2
  54. package/build/services/meshflow/exporter.d.ts +3 -3
  55. package/build/services/meshflow/exporter.js +1 -1
  56. package/build/services/meshflow/search.js +12 -4
  57. package/build/services/meshflow/worker.js +7 -7
  58. package/build/services/meshos/index.d.ts +1 -4
  59. package/build/services/meshos/index.js +11 -44
  60. package/build/services/pipe/functions/array.js +1 -1
  61. package/build/services/pipe/functions/bitwise.js +1 -1
  62. package/build/services/pipe/functions/conditional.js +1 -1
  63. package/build/services/pipe/functions/cron.d.ts +2 -0
  64. package/build/services/pipe/functions/cron.js +1 -1
  65. package/build/services/pipe/functions/date.js +1 -1
  66. package/build/services/pipe/functions/index.js +1 -1
  67. package/build/services/pipe/functions/json.js +1 -1
  68. package/build/services/pipe/functions/logical.js +1 -1
  69. package/build/services/pipe/functions/math.js +1 -1
  70. package/build/services/pipe/functions/number.js +1 -1
  71. package/build/services/pipe/functions/object.js +1 -1
  72. package/build/services/pipe/functions/string.js +1 -1
  73. package/build/services/pipe/functions/symbol.js +1 -1
  74. package/build/services/pipe/functions/unary.js +1 -1
  75. package/build/services/pipe/index.js +1 -1
  76. package/build/services/quorum/index.d.ts +5 -5
  77. package/build/services/quorum/index.js +1 -1
  78. package/build/services/reporter/index.d.ts +2 -2
  79. package/build/services/reporter/index.js +1 -1
  80. package/build/services/router/index.d.ts +8 -13
  81. package/build/services/router/index.js +1 -1
  82. package/build/services/search/factory.d.ts +2 -2
  83. package/build/services/search/factory.js +1 -1
  84. package/build/services/search/index.d.ts +5 -4
  85. package/build/services/search/providers/redis/ioredis.js +1 -1
  86. package/build/services/search/providers/redis/redis.js +1 -1
  87. package/build/services/serializer/index.js +1 -1
  88. package/build/services/store/factory.d.ts +3 -3
  89. package/build/services/store/factory.js +1 -1
  90. package/build/services/store/index.d.ts +18 -17
  91. package/build/services/store/providers/redis/_base.d.ts +13 -15
  92. package/build/services/store/providers/redis/_base.js +1 -1
  93. package/build/services/store/providers/redis/ioredis.d.ts +2 -2
  94. package/build/services/store/providers/redis/ioredis.js +1 -1
  95. package/build/services/store/providers/redis/redis.d.ts +2 -2
  96. package/build/services/store/providers/redis/redis.js +1 -1
  97. package/build/services/store/providers/store-initializable.js +1 -1
  98. package/build/services/stream/factory.d.ts +3 -3
  99. package/build/services/stream/factory.js +16 -4
  100. package/build/services/stream/index.d.ts +57 -18
  101. package/build/services/stream/index.js +2 -1
  102. package/build/services/stream/providers/nats/nats.d.ts +59 -0
  103. package/build/services/stream/providers/nats/nats.js +1 -0
  104. package/build/services/stream/providers/postgres/postgres.d.ts +68 -0
  105. package/build/services/stream/providers/postgres/postgres.js +1 -0
  106. package/build/services/stream/providers/redis/ioredis.d.ts +53 -14
  107. package/build/services/stream/providers/redis/ioredis.js +1 -1
  108. package/build/services/stream/providers/redis/redis.d.ts +54 -15
  109. package/build/services/stream/providers/redis/redis.js +1 -1
  110. package/build/services/stream/providers/stream-initializable.d.ts +1 -2
  111. package/build/services/stream/providers/stream-initializable.js +1 -1
  112. package/build/services/sub/factory.d.ts +2 -2
  113. package/build/services/sub/factory.js +1 -1
  114. package/build/services/sub/index.d.ts +6 -5
  115. package/build/services/sub/providers/redis/ioredis.d.ts +1 -1
  116. package/build/services/sub/providers/redis/ioredis.js +1 -1
  117. package/build/services/sub/providers/redis/redis.d.ts +4 -4
  118. package/build/services/sub/providers/redis/redis.js +1 -1
  119. package/build/services/task/index.d.ts +5 -5
  120. package/build/services/task/index.js +1 -1
  121. package/build/services/telemetry/index.js +1 -1
  122. package/build/services/worker/index.d.ts +9 -9
  123. package/build/services/worker/index.js +1 -1
  124. package/build/types/hotmesh.d.ts +26 -14
  125. package/build/types/index.d.ts +8 -5
  126. package/build/types/manifest.d.ts +1 -9
  127. package/build/types/meshcall.d.ts +12 -7
  128. package/build/types/meshflow.d.ts +3 -7
  129. package/build/types/nats.d.ts +150 -0
  130. package/build/types/nats.js +2 -0
  131. package/build/types/postgres.d.ts +70 -0
  132. package/build/types/postgres.js +2 -0
  133. package/build/types/provider.d.ts +26 -0
  134. package/build/types/provider.js +2 -0
  135. package/build/types/redis.d.ts +33 -15
  136. package/build/types/stream.d.ts +65 -1
  137. package/index.ts +10 -5
  138. package/package.json +15 -8
  139. package/typedoc.json +6 -0
  140. package/types/hotmesh.ts +139 -22
  141. package/types/index.ts +80 -17
  142. package/types/manifest.ts +1 -10
  143. package/types/meshcall.ts +38 -13
  144. package/types/meshflow.ts +2 -7
  145. package/types/nats.ts +236 -0
  146. package/types/postgres.ts +85 -0
  147. package/types/provider.ts +71 -0
  148. package/types/redis.ts +63 -18
  149. package/types/stream.ts +85 -1
  150. package/build/services/connector/clients/ioredis.d.ts +0 -13
  151. package/build/services/connector/clients/ioredis.js +0 -48
  152. package/build/services/connector/clients/redis.d.ts +0 -13
  153. package/build/services/connector/clients/redis.js +0 -60
  154. package/build/services/stream/providers/postgres/_deploy.d.ts +0 -4
  155. package/build/services/stream/providers/postgres/_deploy.js +0 -1
@@ -1,16 +1,16 @@
1
1
  import { StoreService } from '../store';
2
2
  import { MappingStatements } from '../../types/map';
3
3
  import { HotMeshManifest } from '../../types/hotmesh';
4
- import { RedisClient, RedisMulti } from '../../types/redis';
4
+ import { ProviderClient, ProviderTransaction } from '../../types/provider';
5
5
  declare class Validator {
6
6
  manifest: HotMeshManifest | null;
7
7
  activityIds: string[];
8
8
  mappingStatements: MappingStatements;
9
- store: StoreService<RedisClient, RedisMulti> | null;
9
+ store: StoreService<ProviderClient, ProviderTransaction> | null;
10
10
  static SYS_VARS: string[];
11
11
  static CONTEXT_VARS: string[];
12
12
  constructor(manifest: HotMeshManifest);
13
- validate(store: StoreService<RedisClient, RedisMulti>): Promise<void>;
13
+ validate(store: StoreService<ProviderClient, ProviderTransaction>): Promise<void>;
14
14
  validateActivityIds(): void;
15
15
  isMappingStatement(value: string): boolean;
16
16
  extractMappingStatements(obj: any, result: MappingStatements, currentActivityId: string): void;
@@ -1 +1 @@
1
- 'use strict';(function(_0x3d61df,_0x182d80){const _0x264499=_0x22c6,_0x6b1997=_0x3d61df();while(!![]){try{const _0x1b3120=-parseInt(_0x264499(0x141))/0x1*(parseInt(_0x264499(0x147))/0x2)+-parseInt(_0x264499(0x13d))/0x3*(-parseInt(_0x264499(0x145))/0x4)+-parseInt(_0x264499(0x144))/0x5*(parseInt(_0x264499(0x142))/0x6)+-parseInt(_0x264499(0x146))/0x7+-parseInt(_0x264499(0x148))/0x8*(parseInt(_0x264499(0x143))/0x9)+-parseInt(_0x264499(0x13e))/0xa*(parseInt(_0x264499(0x13f))/0xb)+parseInt(_0x264499(0x140))/0xc;if(_0x1b3120===_0x182d80)break;else _0x6b1997['push'](_0x6b1997['shift']());}catch(_0x5b7fce){_0x6b1997['push'](_0x6b1997['shift']());}}}(_0x5454,0xa4bd9));Object['defineProperty'](exports,'__esModule',{'value':!![]}),exports['Validator']=void 0x0;const pipe_1=require('../pipe');function _0x5454(){const _0x26f8ce=['5CnIpQZ','577940MuwFAL','7509635KnRqhx','168MdZrxG','16YoFRDp','6RQuuPY','3446130VTYliE','11RFAzJV','53384280wuyRZf','13933mQRggB','3785202fIRjQj','3799017LXnABO'];_0x5454=function(){return _0x26f8ce;};return _0x5454();}function _0x22c6(_0x475f19,_0x25706a){const _0x5454d4=_0x5454();return _0x22c6=function(_0x22c603,_0x9a8c7d){_0x22c603=_0x22c603-0x13d;let _0x5052c6=_0x5454d4[_0x22c603];return _0x5052c6;},_0x22c6(_0x475f19,_0x25706a);}class Validator{constructor(_0x17e133){this['manifest']=null,this['activityIds']=[],this['mappingStatements']={},this['store']=null,this['manifest']=_0x17e133;}async['validate'](_0x3b8726){this['store']=_0x3b8726,this['getMappingStatements'](),this['validateActivityIds'](),this['validateReferencedActivityIds'](),this['validateMappingStatements'](),this['validateTransitions'](),this['validateTransitionConditions'](),this['validateStats'](),this['validateSchemas'](),this['validateUniqueHandledTopics'](),this['validateGraphPublishSubscribe'](),this['validateHooks'](),this['validateConditionalStatements']();}['validateActivityIds'](){const _0x2832b0=new Set();this['manifest']['app']['graphs']['forEach'](_0x3863c4=>{const _0x4713ae=Object['keys'](_0x3863c4['activities']);_0x4713ae['forEach'](_0x19bd34=>{if(_0x2832b0['has'](_0x19bd34))throw new Error('Duplicate\x20activity\x20id\x20found:\x20'+_0x19bd34);else _0x2832b0['add'](_0x19bd34);});}),this['activityIds']=Array['from'](_0x2832b0);}['isMappingStatement'](_0x138d99){return typeof _0x138d99==='string'&&_0x138d99['startsWith']('{')&&_0x138d99['endsWith']('}');}['extractMappingStatements'](_0x12f1dd,_0x588f69,_0x3b74cb){for(const _0x2b9ed7 in _0x12f1dd){if(typeof _0x12f1dd[_0x2b9ed7]==='object'&&_0x12f1dd[_0x2b9ed7]!==null)this['extractMappingStatements'](_0x12f1dd[_0x2b9ed7],_0x588f69,_0x3b74cb);else this['isMappingStatement'](_0x12f1dd[_0x2b9ed7])&&(!_0x588f69[_0x3b74cb]&&(_0x588f69[_0x3b74cb]=[]),_0x588f69[_0x3b74cb]['push'](_0x12f1dd[_0x2b9ed7]));}}['getMappingStatements'](){const _0x5bfa7d={};this['manifest']['app']['graphs']['forEach'](_0x3d2214=>{const _0x5a09d5=_0x3d2214['activities'];for(const _0x207054 in _0x5a09d5){const _0x18cc17=_0x5a09d5[_0x207054];this['extractMappingStatements'](_0x18cc17,_0x5bfa7d,_0x207054);}}),this['mappingStatements']=_0x5bfa7d;}['validateReferencedActivityIds'](){const _0x51434c=this['mappingStatements'],_0xdcf842=this['activityIds'];for(const _0x25250d in _0x51434c){const _0x4b9a8c=_0x51434c[_0x25250d];_0x4b9a8c['forEach'](_0x59f08c=>{if(_0x59f08c['startsWith']('{')&&_0x59f08c['endsWith']('}')){const _0x18246c=_0x59f08c['slice'](0x1,-0x1)['split']('.'),_0x48f3af=_0x18246c[0x0];if(!(Validator['SYS_VARS']['includes'](_0x48f3af)||_0xdcf842['includes'](_0x48f3af)||this['isFunction'](_0x59f08c)||this['isContextVariable'](_0x59f08c)))throw new Error('Mapping\x20statement\x20references\x20non-existent\x20activity:\x20'+_0x59f08c);}});}}['isFunction'](_0x124d49){return _0x124d49['startsWith']('{@')&&pipe_1['Pipe']['resolveFunction'](_0x124d49);}['isContextVariable'](_0x29d5e4){return['{$input}','{$output}','{$item}','{$key}','{$index}']['includes'](_0x29d5e4);}['validateMappingStatements'](){}['validateTransitions'](){}['validateTransitionConditions'](){}['validateStats'](){}['validateSchemas'](){}['validateUniqueHandledTopics'](){}['validateGraphPublishSubscribe'](){}['validateHooks'](){}['validateConditionalStatements'](){}}exports['Validator']=Validator,Validator['SYS_VARS']=['$app','$self','$graph','$job'],Validator['CONTEXT_VARS']=['{$input}','{$output}','{$item}','{$key}','{$index}'];
1
+ 'use strict';(function(_0x54baec,_0xf03727){const _0x25f663=_0x5437,_0x4ae4dd=_0x54baec();while(!![]){try{const _0x4b5be5=parseInt(_0x25f663(0x19a))/0x1*(-parseInt(_0x25f663(0x19e))/0x2)+-parseInt(_0x25f663(0x199))/0x3*(-parseInt(_0x25f663(0x19f))/0x4)+-parseInt(_0x25f663(0x1a3))/0x5*(-parseInt(_0x25f663(0x198))/0x6)+-parseInt(_0x25f663(0x19c))/0x7*(-parseInt(_0x25f663(0x19d))/0x8)+-parseInt(_0x25f663(0x1a1))/0x9*(-parseInt(_0x25f663(0x19b))/0xa)+parseInt(_0x25f663(0x1a2))/0xb+-parseInt(_0x25f663(0x1a0))/0xc;if(_0x4b5be5===_0xf03727)break;else _0x4ae4dd['push'](_0x4ae4dd['shift']());}catch(_0x5aadc3){_0x4ae4dd['push'](_0x4ae4dd['shift']());}}}(_0x5b8e,0xbea56));Object['defineProperty'](exports,'__esModule',{'value':!![]}),exports['Validator']=void 0x0;const pipe_1=require('../pipe');function _0x5437(_0x3f6a41,_0xc60ee2){const _0x5b8e39=_0x5b8e();return _0x5437=function(_0x5437ea,_0x454386){_0x5437ea=_0x5437ea-0x198;let _0x3ae129=_0x5b8e39[_0x5437ea];return _0x3ae129;},_0x5437(_0x3f6a41,_0xc60ee2);}function _0x5b8e(){const _0xfda38c=['218518nITgHw','1988xKKczH','64192884RUlrXB','6496794CyJMJw','14670282yegYov','35ODnhSw','1186536ioxmMl','8457EBywmW','1eMGMPr','10XxHpeM','7zYHvYT','11189512fARKGO'];_0x5b8e=function(){return _0xfda38c;};return _0x5b8e();}class Validator{constructor(_0x535098){this['manifest']=null,this['activityIds']=[],this['mappingStatements']={},this['store']=null,this['manifest']=_0x535098;}async['validate'](_0x2a1bab){this['store']=_0x2a1bab,this['getMappingStatements'](),this['validateActivityIds'](),this['validateReferencedActivityIds'](),this['validateMappingStatements'](),this['validateTransitions'](),this['validateTransitionConditions'](),this['validateStats'](),this['validateSchemas'](),this['validateUniqueHandledTopics'](),this['validateGraphPublishSubscribe'](),this['validateHooks'](),this['validateConditionalStatements']();}['validateActivityIds'](){const _0x546df9=new Set();this['manifest']['app']['graphs']['forEach'](_0x59e9e2=>{const _0x127cfc=Object['keys'](_0x59e9e2['activities']);_0x127cfc['forEach'](_0x159a3c=>{if(_0x546df9['has'](_0x159a3c))throw new Error('Duplicate\x20activity\x20id\x20found:\x20'+_0x159a3c);else _0x546df9['add'](_0x159a3c);});}),this['activityIds']=Array['from'](_0x546df9);}['isMappingStatement'](_0x9bd783){return typeof _0x9bd783==='string'&&_0x9bd783['startsWith']('{')&&_0x9bd783['endsWith']('}');}['extractMappingStatements'](_0xdc8a61,_0xadca81,_0x261e99){for(const _0x2c86af in _0xdc8a61){if(typeof _0xdc8a61[_0x2c86af]==='object'&&_0xdc8a61[_0x2c86af]!==null)this['extractMappingStatements'](_0xdc8a61[_0x2c86af],_0xadca81,_0x261e99);else this['isMappingStatement'](_0xdc8a61[_0x2c86af])&&(!_0xadca81[_0x261e99]&&(_0xadca81[_0x261e99]=[]),_0xadca81[_0x261e99]['push'](_0xdc8a61[_0x2c86af]));}}['getMappingStatements'](){const _0x1de8ff={};this['manifest']['app']['graphs']['forEach'](_0x5bccdf=>{const _0x39f8fc=_0x5bccdf['activities'];for(const _0x4cf903 in _0x39f8fc){const _0x21348b=_0x39f8fc[_0x4cf903];this['extractMappingStatements'](_0x21348b,_0x1de8ff,_0x4cf903);}}),this['mappingStatements']=_0x1de8ff;}['validateReferencedActivityIds'](){const _0x3f0949=this['mappingStatements'],_0x597872=this['activityIds'];for(const _0x3a8a1d in _0x3f0949){const _0x48e330=_0x3f0949[_0x3a8a1d];_0x48e330['forEach'](_0x59f9ae=>{if(_0x59f9ae['startsWith']('{')&&_0x59f9ae['endsWith']('}')){const _0x40dff5=_0x59f9ae['slice'](0x1,-0x1)['split']('.'),_0x312d16=_0x40dff5[0x0];if(!(Validator['SYS_VARS']['includes'](_0x312d16)||_0x597872['includes'](_0x312d16)||this['isFunction'](_0x59f9ae)||this['isContextVariable'](_0x59f9ae)))throw new Error('Mapping\x20statement\x20references\x20non-existent\x20activity:\x20'+_0x59f9ae);}});}}['isFunction'](_0x7dc92c){return _0x7dc92c['startsWith']('{@')&&pipe_1['Pipe']['resolveFunction'](_0x7dc92c);}['isContextVariable'](_0x277b07){return['{$input}','{$output}','{$item}','{$key}','{$index}']['includes'](_0x277b07);}['validateMappingStatements'](){}['validateTransitions'](){}['validateTransitionConditions'](){}['validateStats'](){}['validateSchemas'](){}['validateUniqueHandledTopics'](){}['validateGraphPublishSubscribe'](){}['validateHooks'](){}['validateConditionalStatements'](){}}exports['Validator']=Validator,Validator['SYS_VARS']=['$app','$self','$graph','$job'],Validator['CONTEXT_VARS']=['{$input}','{$output}','{$item}','{$key}','{$index}'];
@@ -0,0 +1,7 @@
1
+ import { HotMeshEngine, HotMeshWorker } from '../../types/hotmesh';
2
+ import { ProviderConfig, ProviderNativeClient } from '../../types/provider';
3
+ export declare class ConnectorService {
4
+ static connectClient(ProviderConfig: ProviderConfig): Promise<ProviderNativeClient>;
5
+ static initClients(target: HotMeshEngine | HotMeshWorker): Promise<void>;
6
+ static initClient(ProviderConfig: ProviderConfig, target: HotMeshEngine | HotMeshWorker, field: string): Promise<void>;
7
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectorService = void 0;
4
+ const utils_1 = require("../../modules/utils");
5
+ const ioredis_1 = require("./providers/ioredis");
6
+ const nats_1 = require("./providers/nats");
7
+ const postgres_1 = require("./providers/postgres");
8
+ const redis_1 = require("./providers/redis");
9
+ class ConnectorService {
10
+ static async connectClient(ProviderConfig) {
11
+ const target = {};
12
+ await ConnectorService.initClient(ProviderConfig, target, 'client');
13
+ return target.client;
14
+ }
15
+ static async initClients(target) {
16
+ const connections = target.connections;
17
+ if (connections) {
18
+ if (connections.store) {
19
+ await ConnectorService.initClient(connections.store, target, 'store');
20
+ }
21
+ if (connections.stream) {
22
+ await ConnectorService.initClient(connections.stream, target, 'stream');
23
+ }
24
+ if (connections.sub) {
25
+ await ConnectorService.initClient(connections.sub, target, 'sub');
26
+ }
27
+ }
28
+ else {
29
+ const ProviderConfig = utils_1.polyfill.providerConfig(target);
30
+ if (ProviderConfig) {
31
+ await ConnectorService.initClient(ProviderConfig, target, 'store');
32
+ await ConnectorService.initClient(ProviderConfig, target, 'stream');
33
+ await ConnectorService.initClient(ProviderConfig, target, 'sub');
34
+ }
35
+ }
36
+ }
37
+ static async initClient(ProviderConfig, target, field) {
38
+ if (target[field]) {
39
+ return;
40
+ }
41
+ const providerClass = ProviderConfig.class;
42
+ const options = ProviderConfig.options;
43
+ const providerName = (0, utils_1.identifyProvider)(providerClass);
44
+ let clientInstance;
45
+ const id = (0, utils_1.guid)();
46
+ switch (providerName) {
47
+ case 'redis':
48
+ clientInstance = await redis_1.RedisConnection.connect(id, providerClass, options);
49
+ break;
50
+ case 'ioredis':
51
+ clientInstance = await ioredis_1.RedisConnection.connect(id, providerClass, options);
52
+ break;
53
+ case 'nats':
54
+ clientInstance = await nats_1.NatsConnection.connect(id, providerClass, options);
55
+ break;
56
+ case 'postgres':
57
+ clientInstance = await postgres_1.PostgresConnection.connect(id, providerClass, options);
58
+ break;
59
+ default:
60
+ throw new Error(`Unknown provider class: ${providerName}`);
61
+ }
62
+ target[field] = clientInstance.getClient();
63
+ }
64
+ }
65
+ exports.ConnectorService = ConnectorService;
@@ -1,5 +1,14 @@
1
- import { HotMeshEngine, HotMeshWorker } from '../../types/hotmesh';
2
- import { RedisClass, RedisOptions } from '../../types/redis';
3
- export declare class ConnectorService {
4
- static initRedisClients(Redis: Partial<RedisClass>, options: Partial<RedisOptions>, target: HotMeshEngine | HotMeshWorker): Promise<void>;
1
+ import { ProviderClass, ProviderNativeClient, ProviderOptions } from '../../types/provider';
2
+ declare abstract class AbstractConnection<PClass, POptions> {
3
+ protected connection: any | null;
4
+ protected static instances: Map<string, AbstractConnection<ProviderClass, ProviderOptions>>;
5
+ protected id: string | null;
6
+ protected abstract defaultOptions: any;
7
+ protected abstract createConnection(client: PClass, options: POptions): Promise<any>;
8
+ abstract getClient(): ProviderNativeClient;
9
+ disconnect(): Promise<void>;
10
+ protected abstract closeConnection(connection: any): Promise<void>;
11
+ static connect<T extends AbstractConnection<ProviderClass, ProviderOptions>>(this: new () => T, id: string, client: ProviderClass, options?: ProviderOptions): Promise<T>;
12
+ static disconnectAll(): Promise<void>;
5
13
  }
14
+ export { AbstractConnection };
@@ -1,28 +1,35 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConnectorService = void 0;
4
- const utils_1 = require("../../modules/utils");
5
- const ioredis_1 = require("../connector/clients/ioredis");
6
- const redis_1 = require("../connector/clients/redis");
7
- class ConnectorService {
8
- static async initRedisClients(Redis, options, target) {
9
- if (!target.store || !target.stream || !target.sub) {
10
- const instances = [];
11
- if ((0, utils_1.identifyRedisTypeFromClass)(Redis) === 'redis') {
12
- for (let i = 1; i <= 3; i++) {
13
- instances.push(redis_1.RedisConnection.connect((0, utils_1.guid)(), Redis, options));
14
- }
15
- }
16
- else {
17
- for (let i = 1; i <= 3; i++) {
18
- instances.push(ioredis_1.RedisConnection.connect((0, utils_1.guid)(), Redis, options));
19
- }
20
- }
21
- const [store, stream, sub] = await Promise.all(instances);
22
- target.store = target.store || store.getClient();
23
- target.stream = target.stream || stream.getClient();
24
- target.sub = target.sub || sub.getClient();
3
+ exports.AbstractConnection = void 0;
4
+ class AbstractConnection {
5
+ constructor() {
6
+ this.connection = null;
7
+ this.id = null;
8
+ }
9
+ async disconnect() {
10
+ if (this.connection) {
11
+ await this.closeConnection(this.connection);
12
+ this.connection = null;
13
+ }
14
+ if (this.id) {
15
+ AbstractConnection.instances.delete(this.id);
25
16
  }
26
17
  }
18
+ static async connect(id, client, options) {
19
+ if (AbstractConnection.instances.has(id)) {
20
+ return AbstractConnection.instances.get(id);
21
+ }
22
+ const instance = new this();
23
+ const opts = options ? { ...options } : { ...instance.defaultOptions };
24
+ instance.connection = await instance.createConnection(client, opts);
25
+ instance.id = id;
26
+ AbstractConnection.instances.set(id, instance);
27
+ return instance;
28
+ }
29
+ static async disconnectAll() {
30
+ await Promise.all(Array.from(this.instances.values()).map((instance) => instance.disconnect()));
31
+ this.instances.clear();
32
+ }
27
33
  }
28
- exports.ConnectorService = ConnectorService;
34
+ exports.AbstractConnection = AbstractConnection;
35
+ AbstractConnection.instances = new Map();
@@ -0,0 +1,9 @@
1
+ import { AbstractConnection } from '..';
2
+ import { IORedisClientOptions as RedisClientOptions, IORedisClassType as RedisClassType, IORedisClientType as RedisClientType } from '../../../types/redis';
3
+ declare class RedisConnection extends AbstractConnection<RedisClassType, RedisClientOptions> {
4
+ defaultOptions: RedisClientOptions;
5
+ createConnection(Redis: RedisClassType, options: RedisClientOptions): Promise<RedisClientType>;
6
+ getClient(): RedisClientType;
7
+ closeConnection(connection: RedisClientType): Promise<void>;
8
+ }
9
+ export { RedisConnection };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedisConnection = void 0;
4
+ const __1 = require("..");
5
+ class RedisConnection extends __1.AbstractConnection {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.defaultOptions = {
9
+ host: 'localhost',
10
+ port: 6379,
11
+ };
12
+ }
13
+ async createConnection(Redis, options) {
14
+ return new Redis(options);
15
+ }
16
+ getClient() {
17
+ if (!this.connection) {
18
+ throw new Error('Redis client is not connected');
19
+ }
20
+ return this.connection;
21
+ }
22
+ async closeConnection(connection) {
23
+ await connection.quit();
24
+ }
25
+ }
26
+ exports.RedisConnection = RedisConnection;
@@ -0,0 +1,9 @@
1
+ import { AbstractConnection } from '..';
2
+ import { NatsClientOptions, NatsClientType, NatsClassType } from '../../../types/nats';
3
+ declare class NatsConnection extends AbstractConnection<NatsClassType, NatsClientOptions> {
4
+ defaultOptions: NatsClientOptions;
5
+ createConnection(Connect: NatsClassType, options: NatsClientOptions): Promise<NatsClientType>;
6
+ getClient(): NatsClientType;
7
+ closeConnection(connection: NatsClientType): Promise<void>;
8
+ }
9
+ export { NatsConnection, NatsClientOptions };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NatsConnection = void 0;
4
+ const __1 = require("..");
5
+ class NatsConnection extends __1.AbstractConnection {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.defaultOptions = {
9
+ servers: ['nats:4222'],
10
+ timeout: 5000,
11
+ };
12
+ }
13
+ async createConnection(Connect, options) {
14
+ return (await Connect(options));
15
+ }
16
+ getClient() {
17
+ if (!this.connection) {
18
+ throw new Error('NATS client is not connected');
19
+ }
20
+ return this.connection;
21
+ }
22
+ async closeConnection(connection) {
23
+ await connection.close();
24
+ }
25
+ }
26
+ exports.NatsConnection = NatsConnection;
@@ -0,0 +1,9 @@
1
+ import { AbstractConnection } from '..';
2
+ import { PostgresClientOptions, PostgresClientType, PostgresClassType } from '../../../types/postgres';
3
+ declare class PostgresConnection extends AbstractConnection<PostgresClassType, PostgresClientOptions> {
4
+ defaultOptions: PostgresClientOptions;
5
+ createConnection(clientConstructor: any, options: PostgresClientOptions): Promise<PostgresClientType>;
6
+ getClient(): PostgresClientType;
7
+ closeConnection(connection: PostgresClientType): Promise<void>;
8
+ }
9
+ export { PostgresConnection };
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PostgresConnection = void 0;
4
+ const __1 = require("..");
5
+ class PostgresConnection extends __1.AbstractConnection {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.defaultOptions = {
9
+ host: 'postgres',
10
+ port: 5432,
11
+ user: 'postgres',
12
+ password: 'password',
13
+ database: 'hotmesh',
14
+ max: 20,
15
+ idleTimeoutMillis: 30000,
16
+ };
17
+ }
18
+ async createConnection(clientConstructor, options) {
19
+ const connection = new clientConstructor(options);
20
+ try {
21
+ await connection.connect();
22
+ await connection.query('SELECT 1');
23
+ return connection;
24
+ }
25
+ catch (error) {
26
+ console.error(`Failed to connect to PostgreSQL: ${error.message}`);
27
+ throw new Error(`Failed to connect to PostgreSQL: ${error.message}`);
28
+ }
29
+ }
30
+ getClient() {
31
+ if (!this.connection) {
32
+ throw new Error('Postgres client is not connected');
33
+ }
34
+ return this.connection;
35
+ }
36
+ async closeConnection(connection) {
37
+ if (!connection) {
38
+ console.warn('No active PostgreSQL connection to close');
39
+ return;
40
+ }
41
+ await connection.end();
42
+ }
43
+ }
44
+ exports.PostgresConnection = PostgresConnection;
@@ -0,0 +1,9 @@
1
+ import { AbstractConnection } from '..';
2
+ import { RedisRedisClassType as RedisClassType, RedisRedisClientType as RedisClientType, RedisRedisClientOptions as RedisClientOptions } from '../../../types/redis';
3
+ declare class RedisConnection extends AbstractConnection<RedisClassType, RedisClientOptions> {
4
+ defaultOptions: RedisClientOptions;
5
+ createConnection(Redis: Partial<RedisClassType>, options: RedisClientOptions): Promise<Partial<RedisClientType>>;
6
+ getClient(): RedisClientType;
7
+ closeConnection(connection: any): Promise<void>;
8
+ }
9
+ export { RedisConnection, RedisClientType };
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedisConnection = void 0;
4
+ const __1 = require("..");
5
+ class RedisConnection extends __1.AbstractConnection {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.defaultOptions = {
9
+ socket: {
10
+ host: 'localhost',
11
+ port: 6379,
12
+ tls: false,
13
+ },
14
+ };
15
+ }
16
+ async createConnection(Redis, options) {
17
+ return new Promise((resolve, reject) => {
18
+ const client = Redis.createClient(options);
19
+ client.on('error', (error) => {
20
+ reject(error);
21
+ });
22
+ client.on('ready', () => {
23
+ resolve(client);
24
+ });
25
+ client.connect();
26
+ });
27
+ }
28
+ getClient() {
29
+ if (!this.connection) {
30
+ throw new Error('Redis client is not connected');
31
+ }
32
+ return this.connection;
33
+ }
34
+ async closeConnection(connection) {
35
+ await connection.quit();
36
+ }
37
+ }
38
+ exports.RedisConnection = RedisConnection;
@@ -8,6 +8,7 @@ import { Trigger } from '../activities/trigger';
8
8
  import { ExporterService } from '../exporter';
9
9
  import { ILogger } from '../logger';
10
10
  import { Router } from '../router';
11
+ import { SearchService } from '../search';
11
12
  import { StoreService } from '../store';
12
13
  import { StreamService } from '../stream';
13
14
  import { SubService } from '../sub';
@@ -18,24 +19,23 @@ import { CacheMode } from '../../types/cache';
18
19
  import { JobExport } from '../../types/exporter';
19
20
  import { JobState, JobData, JobMetadata, JobOutput, JobStatus, JobInterruptOptions, JobCompletionOptions, ExtensionType } from '../../types/job';
20
21
  import { HotMeshApps, HotMeshConfig, HotMeshManifest, HotMeshSettings } from '../../types/hotmesh';
22
+ import { ProviderClient, ProviderTransaction } from '../../types/provider';
21
23
  import { JobMessageCallback } from '../../types/quorum';
22
- import { RedisClient, RedisMulti } from '../../types/redis';
23
24
  import { StringAnyType, StringStringType } from '../../types/serializer';
24
25
  import { GetStatsOptions, IdsResponse, JobStatsInput, StatsResponse } from '../../types/stats';
25
26
  import { StreamCode, StreamData, StreamDataResponse, StreamError, StreamStatus } from '../../types/stream';
26
27
  import { WorkListTaskType } from '../../types/task';
27
- import { SearchService } from '../search';
28
28
  declare class EngineService {
29
29
  namespace: string;
30
30
  apps: HotMeshApps | null;
31
31
  appId: string;
32
32
  guid: string;
33
33
  exporter: ExporterService | null;
34
- router: Router | null;
35
- search: SearchService<RedisClient> | null;
36
- store: StoreService<RedisClient, RedisMulti> | null;
37
- stream: StreamService<RedisClient, RedisMulti> | null;
38
- subscribe: SubService<RedisClient, RedisMulti> | null;
34
+ search: SearchService<ProviderClient> | null;
35
+ store: StoreService<ProviderClient, ProviderTransaction> | null;
36
+ stream: StreamService<ProviderClient, ProviderTransaction> | null;
37
+ subscribe: SubService<ProviderClient, ProviderTransaction> | null;
38
+ router: Router<typeof this.stream> | null;
39
39
  taskService: TaskService | null;
40
40
  logger: ILogger;
41
41
  cacheMode: CacheMode;
@@ -47,11 +47,11 @@ declare class EngineService {
47
47
  constructor();
48
48
  static init(namespace: string, appId: string, guid: string, config: HotMeshConfig, logger: ILogger): Promise<EngineService>;
49
49
  verifyEngineFields(config: HotMeshConfig): void;
50
- initSearchChannel(search: RedisClient, store?: RedisClient): Promise<void>;
51
- initStoreChannel(store: RedisClient): Promise<void>;
52
- initSubChannel(sub: RedisClient, store: RedisClient): Promise<void>;
53
- initStreamChannel(stream: RedisClient, store: RedisClient): Promise<void>;
54
- initRouter(config: HotMeshConfig): Promise<Router>;
50
+ initSearchChannel(search: ProviderClient, store?: ProviderClient): Promise<void>;
51
+ initStoreChannel(store: ProviderClient): Promise<void>;
52
+ initSubChannel(sub: ProviderClient, store: ProviderClient): Promise<void>;
53
+ initStreamChannel(stream: ProviderClient, store: ProviderClient): Promise<void>;
54
+ initRouter(config: HotMeshConfig): Promise<Router<StreamService<ProviderClient, ProviderTransaction>>>;
55
55
  fetchAndVerifyVID(vid: AppVID, count?: number): Promise<AppVID>;
56
56
  getVID(vid?: AppVID): Promise<AppVID>;
57
57
  setCacheMode(cacheMode: CacheMode, untilVersion: string): void;
@@ -1 +1 @@
1
- 'use strict';(function(_0x11b0f6,_0x2b685d){const _0x2bbb11=_0xd44c,_0x867552=_0x11b0f6();while(!![]){try{const _0x2016d6=parseInt(_0x2bbb11(0x128))/0x1*(parseInt(_0x2bbb11(0x12e))/0x2)+parseInt(_0x2bbb11(0x126))/0x3*(parseInt(_0x2bbb11(0x130))/0x4)+-parseInt(_0x2bbb11(0x129))/0x5*(parseInt(_0x2bbb11(0x12c))/0x6)+-parseInt(_0x2bbb11(0x12d))/0x7+parseInt(_0x2bbb11(0x12a))/0x8*(parseInt(_0x2bbb11(0x127))/0x9)+parseInt(_0x2bbb11(0x125))/0xa*(-parseInt(_0x2bbb11(0x12b))/0xb)+parseInt(_0x2bbb11(0x12f))/0xc;if(_0x2016d6===_0x2b685d)break;else _0x867552['push'](_0x867552['shift']());}catch(_0x4b1e27){_0x867552['push'](_0x867552['shift']());}}}(_0xc6db,0x3de1b));var __importDefault=this&&this['__importDefault']||function(_0x52128f){return _0x52128f&&_0x52128f['__esModule']?_0x52128f:{'default':_0x52128f};};Object['defineProperty'](exports,'__esModule',{'value':!![]}),exports['EngineService']=void 0x0;const key_1=require('../../modules/key'),enums_1=require('../../modules/enums'),utils_1=require('../../modules/utils'),activities_1=__importDefault(require('../activities')),compiler_1=require('../compiler'),exporter_1=require('../exporter'),reporter_1=require('../reporter'),router_1=require('../router'),serializer_1=require('../serializer'),task_1=require('../task'),stream_1=require('../../types/stream'),factory_1=require('../stream/factory'),factory_2=require('../sub/factory'),factory_3=require('../store/factory'),factory_4=require('../search/factory');class EngineService{constructor(){this['cacheMode']='cache',this['untilVersion']=null,this['jobCallbacks']={},this['reporting']=![],this['jobId']=0x1;}static async['init'](_0x40b9ab,_0x4b4d82,_0x5d318a,_0x5bef8c,_0x377de9){if(_0x5bef8c['engine']){const _0x18e4a0=new EngineService();_0x18e4a0['verifyEngineFields'](_0x5bef8c),_0x18e4a0['namespace']=_0x40b9ab,_0x18e4a0['appId']=_0x4b4d82,_0x18e4a0['guid']=_0x5d318a,_0x18e4a0['logger']=_0x377de9,await _0x18e4a0['initSearchChannel'](_0x5bef8c['engine']['store']),await _0x18e4a0['initStoreChannel'](_0x5bef8c['engine']['store']),await _0x18e4a0['initSubChannel'](_0x5bef8c['engine']['sub'],_0x5bef8c['engine']['store']),await _0x18e4a0['initStreamChannel'](_0x5bef8c['engine']['stream'],_0x5bef8c['engine']['store']),_0x18e4a0['router']=await _0x18e4a0['initRouter'](_0x5bef8c);const _0x428b46=_0x18e4a0['store']['mintKey'](key_1['KeyType']['STREAMS'],{'appId':_0x18e4a0['appId']});return _0x18e4a0['router']['consumeMessages'](_0x428b46,'ENGINE',_0x18e4a0['guid'],_0x18e4a0['processStreamMessage']['bind'](_0x18e4a0)),_0x18e4a0['taskService']=new task_1['TaskService'](_0x18e4a0['store'],_0x377de9),_0x18e4a0['exporter']=new exporter_1['ExporterService'](_0x18e4a0['appId'],_0x18e4a0['store'],_0x377de9),_0x18e4a0['inited']=(0x0,utils_1['formatISODate'])(new Date()),_0x18e4a0;}}['verifyEngineFields'](_0x55c70d){if(!(0x0,utils_1['identifyRedisType'])(_0x55c70d['engine']['store'])||!(0x0,utils_1['identifyRedisType'])(_0x55c70d['engine']['stream'])||!(0x0,utils_1['identifyRedisType'])(_0x55c70d['engine']['sub']))throw new Error('engine\x20config\x20must\x20reference\x203\x20redis\x20client\x20instances');}async['initSearchChannel'](_0x41929a,_0xc3e149){this['search']=await factory_4['SearchServiceFactory']['init'](_0x41929a,_0xc3e149,this['namespace'],this['appId'],this['logger']);}async['initStoreChannel'](_0x5c4a67){this['store']=await factory_3['StoreServiceFactory']['init'](_0x5c4a67,this['namespace'],this['appId'],this['logger']);}async['initSubChannel'](_0x5f427b,_0x39ddfc){this['subscribe']=await factory_2['SubServiceFactory']['init'](_0x5f427b,_0x39ddfc,this['namespace'],this['appId'],this['guid'],this['logger']);}async['initStreamChannel'](_0x1744e4,_0x2c99c6){this['stream']=await factory_1['StreamServiceFactory']['init'](_0x1744e4,_0x2c99c6,this['namespace'],this['appId'],this['logger']);}async['initRouter'](_0x233a1a){const _0xd386ad=await this['store']['getThrottleRate'](':');return new router_1['Router']({'namespace':this['namespace'],'appId':this['appId'],'guid':this['guid'],'role':stream_1['StreamRole']['ENGINE'],'reclaimDelay':_0x233a1a['engine']['reclaimDelay'],'reclaimCount':_0x233a1a['engine']['reclaimCount'],'throttle':_0xd386ad,'readonly':_0x233a1a['engine']['readonly']},this['stream'],this['store'],this['logger']);}async['fetchAndVerifyVID'](_0x5b342f,_0x3fe3e8=0x0){if(isNaN(Number(_0x5b342f['version']))){const _0x62f25b=await this['store']['getApp'](_0x5b342f['id'],!![]);if(!isNaN(Number(_0x62f25b['version']))){if(!this['apps'])this['apps']={};return this['apps'][_0x5b342f['id']]=_0x62f25b,{'id':_0x5b342f['id'],'version':_0x62f25b['version']};}else{if(_0x3fe3e8<0xa)return await(0x0,utils_1['sleepFor'])(enums_1['HMSH_QUORUM_DELAY_MS']*0x2),await this['fetchAndVerifyVID'](_0x5b342f,_0x3fe3e8+0x1);else this['logger']['error']('engine-vid-resolution-error',{'id':_0x5b342f['id'],'guid':this['guid']});}}return _0x5b342f;}async['getVID'](_0x4feced){if(this['cacheMode']==='nocache'){const _0x273d5e=await this['store']['getApp'](this['appId'],!![]);if(_0x273d5e['version']['toString']()===this['untilVersion']['toString']()){if(!this['apps'])this['apps']={};this['apps'][this['appId']]=_0x273d5e,this['setCacheMode']('cache',_0x273d5e['version']['toString']());}return{'id':this['appId'],'version':_0x273d5e['version']};}else return!this['apps']&&_0x4feced?(this['apps']={},this['apps'][this['appId']]=_0x4feced,_0x4feced):await this['fetchAndVerifyVID']({'id':this['appId'],'version':this['apps']?.[this['appId']]['version']});}['setCacheMode'](_0x1492fe,_0x12e4a7){this['logger']['info']('engine-executable-cache',{'mode':_0x1492fe,[_0x1492fe==='cache'?'target':'until']:_0x12e4a7}),this['cacheMode']=_0x1492fe,this['untilVersion']=_0x12e4a7;}async['routeToSubscribers'](_0x27350e,_0x2a9d41){const _0x1db86a=this['jobCallbacks'][_0x2a9d41['metadata']['jid']];_0x1db86a&&(this['delistJobCallback'](_0x2a9d41['metadata']['jid']),_0x1db86a(_0x27350e,_0x2a9d41));}async['processWebHooks'](){this['taskService']['processWebHooks'](this['hook']['bind'](this));}async['processTimeHooks'](){this['taskService']['processTimeHooks'](this['hookTime']['bind'](this));}async['throttle'](_0x642c7d){try{this['router']['setThrottle'](_0x642c7d);}catch(_0x485436){this['logger']['error']('engine-throttle-error',{'error':_0x485436});}}async['initActivity'](_0x371138,_0x254115={},_0x4e28c8){const [_0x43d13b,_0x374af4]=await this['getSchema'](_0x371138),_0x3b7d23=activities_1['default'][utils_1['polyfill']['resolveActivityType'](_0x374af4['type'])];if(_0x3b7d23){const _0x3b0e6e=(0x0,utils_1['formatISODate'])(new Date()),_0x98f6f8={'aid':_0x43d13b,'atp':_0x374af4['type'],'stp':_0x374af4['subtype'],'ac':_0x3b0e6e,'au':_0x3b0e6e},_0x25f904=null;return new _0x3b7d23(_0x374af4,_0x254115,_0x98f6f8,_0x25f904,this,_0x4e28c8);}else throw new Error('activity\x20type\x20'+_0x374af4['type']+'\x20not\x20found');}async['getSchema'](_0x3a07d3){const _0x49bd3b=await this['store']['getApp'](this['appId']);if(!_0x49bd3b)throw new Error('no\x20app\x20found\x20for\x20id\x20'+this['appId']);if(this['isPrivate'](_0x3a07d3)){const _0x54e34d=_0x3a07d3['substring'](0x1),_0x5eaf98=await this['store']['getSchema'](_0x54e34d,await this['getVID'](_0x49bd3b));return[_0x54e34d,_0x5eaf98];}else{const _0x52e96c=await this['store']['getSubscription'](_0x3a07d3,await this['getVID'](_0x49bd3b));if(_0x52e96c){const _0x224283=await this['store']['getSchema'](_0x52e96c,await this['getVID'](_0x49bd3b));return[_0x52e96c,_0x224283];}}throw new Error('no\x20subscription\x20found\x20for\x20topic\x20'+_0x3a07d3+'\x20in\x20app\x20'+this['appId']+'\x20for\x20app\x20version\x20'+_0x49bd3b['version']);}async['getSettings'](){return await this['store']['getSettings']();}['isPrivate'](_0x10dd02){return _0x10dd02['startsWith']('.');}async['plan'](_0x5077c6){const _0x88ba49=new compiler_1['CompilerService'](this['store'],this['stream'],this['logger']);return await _0x88ba49['plan'](_0x5077c6);}async['deploy'](_0x2de35a){const _0x55a139=new compiler_1['CompilerService'](this['store'],this['stream'],this['logger']);return await _0x55a139['deploy'](_0x2de35a);}async['getStats'](_0x4b7480,_0x439ea3){const {id:_0x18d658,version:_0x339090}=await this['getVID'](),_0x1bc1e1=new reporter_1['ReporterService']({'id':_0x18d658,'version':_0x339090},this['store'],this['logger']),_0x1e3fb1=await this['resolveQuery'](_0x4b7480,_0x439ea3);return await _0x1bc1e1['getStats'](_0x1e3fb1);}async['getIds'](_0x650207,_0x342817,_0x57914a=[]){const {id:_0x44e2d2,version:_0x1b2877}=await this['getVID'](),_0x4b2991=new reporter_1['ReporterService']({'id':_0x44e2d2,'version':_0x1b2877},this['store'],this['logger']),_0x336650=await this['resolveQuery'](_0x650207,_0x342817);return await _0x4b2991['getIds'](_0x336650,_0x57914a);}async['resolveQuery'](_0x248943,_0x231fdd){const _0x5d5f0d=await this['initActivity'](_0x248943,_0x231fdd['data']);return await _0x5d5f0d['getState'](),{'end':_0x231fdd['end'],'start':_0x231fdd['start'],'range':_0x231fdd['range'],'granularity':_0x5d5f0d['resolveGranularity'](),'key':_0x5d5f0d['resolveJobKey'](_0x5d5f0d['createInputContext']()),'sparse':_0x231fdd['sparse']};}async['processStreamMessage'](_0x57979a){this['logger']['debug']('engine-process',{'jid':_0x57979a['metadata']['jid'],'gid':_0x57979a['metadata']['gid'],'dad':_0x57979a['metadata']['dad'],'aid':_0x57979a['metadata']['aid'],'status':_0x57979a['status']||stream_1['StreamStatus']['SUCCESS'],'code':_0x57979a['code']||0xc8,'type':_0x57979a['type']});const _0x292732={'metadata':{'guid':_0x57979a['metadata']['guid'],'jid':_0x57979a['metadata']['jid'],'gid':_0x57979a['metadata']['gid'],'dad':_0x57979a['metadata']['dad'],'aid':_0x57979a['metadata']['aid']},'data':_0x57979a['data']};if(_0x57979a['type']===stream_1['StreamDataType']['TIMEHOOK']){const _0x10c158=await this['initActivity']('.'+_0x57979a['metadata']['aid'],_0x292732['data'],_0x292732);await _0x10c158['processTimeHookEvent'](_0x57979a['metadata']['jid']);}else{if(_0x57979a['type']===stream_1['StreamDataType']['WEBHOOK']){const _0x2d4255=await this['initActivity']('.'+_0x57979a['metadata']['aid'],_0x292732['data'],_0x292732);await _0x2d4255['processWebHookEvent'](_0x57979a['status'],_0x57979a['code']);}else{if(_0x57979a['type']===stream_1['StreamDataType']['TRANSITION']){const _0x4cd2f9=await this['initActivity']('.'+_0x57979a['metadata']['aid'],_0x292732['data'],_0x292732);await _0x4cd2f9['process']();}else{if(_0x57979a['type']===stream_1['StreamDataType']['AWAIT']){_0x292732['metadata']={..._0x292732['metadata'],'pj':_0x57979a['metadata']['jid'],'pg':_0x57979a['metadata']['gid'],'pd':_0x57979a['metadata']['dad'],'pa':_0x57979a['metadata']['aid'],'px':_0x57979a['metadata']['await']===![],'trc':_0x57979a['metadata']['trc'],'spn':_0x57979a['metadata']['spn']};const _0x38faee=await this['initActivity'](_0x57979a['metadata']['topic'],_0x57979a['data'],_0x292732);await _0x38faee['process']();}else{if(_0x57979a['type']===stream_1['StreamDataType']['RESULT']){const _0x51642a=await this['initActivity']('.'+_0x292732['metadata']['aid'],_0x57979a['data'],_0x292732);await _0x51642a['processEvent'](_0x57979a['status'],_0x57979a['code']);}else{const _0x57a5dc=await this['initActivity']('.'+_0x57979a['metadata']['aid'],_0x57979a['data'],_0x292732);await _0x57a5dc['processEvent'](_0x57979a['status'],_0x57979a['code'],'output');}}}}}this['logger']['debug']('engine-process-end',{'jid':_0x57979a['metadata']['jid'],'gid':_0x57979a['metadata']['gid'],'aid':_0x57979a['metadata']['aid']});}async['execAdjacentParent'](_0x14a3b0,_0x211d51,_0x463eb0=![]){if(this['hasParentJob'](_0x14a3b0)){const _0x153beb=this['resolveError'](_0x211d51['metadata']),_0x2608db=_0x14a3b0['$self']?.['output']?.['metadata']?.['l2s']||_0x14a3b0['$self']?.['output']?.['metadata']?.['l1s'],_0x46f682={'metadata':{'guid':(0x0,utils_1['guid'])(),'jid':_0x14a3b0['metadata']['pj'],'gid':_0x14a3b0['metadata']['pg'],'dad':_0x14a3b0['metadata']['pd'],'aid':_0x14a3b0['metadata']['pa'],'trc':_0x14a3b0['metadata']['trc'],'spn':_0x2608db},'type':stream_1['StreamDataType']['RESULT'],'data':_0x211d51['data']};if(_0x153beb&&_0x153beb['code'])_0x46f682['status']=stream_1['StreamStatus']['ERROR'],_0x46f682['data']=_0x153beb,_0x46f682['code']=_0x153beb['code'],_0x46f682['stack']=_0x153beb['stack'];else _0x463eb0?(_0x46f682['status']=stream_1['StreamStatus']['PENDING'],_0x46f682['code']=enums_1['HMSH_CODE_PENDING']):(_0x46f682['status']=stream_1['StreamStatus']['SUCCESS'],_0x46f682['code']=enums_1['HMSH_CODE_SUCCESS']);return await this['router']?.['publishMessage'](null,_0x46f682);}}['hasParentJob'](_0x893832,_0xcdcefa=![]){if(_0xcdcefa)return Boolean(_0x893832['metadata']['pj']&&_0x893832['metadata']['pa']&&!_0x893832['metadata']['px']);return Boolean(_0x893832['metadata']['pj']&&_0x893832['metadata']['pa']);}['resolveError'](_0xf81660){if(_0xf81660&&_0xf81660['err'])return JSON['parse'](_0xf81660['err']);}async['interrupt'](_0x25e41f,_0x34a592,_0x45d270={}){await this['store']['interrupt'](_0x25e41f,_0x34a592,_0x45d270);const _0x6655f6=await this['getState'](_0x25e41f,_0x34a592),_0x2df8c9={'interrupt':_0x45d270['descend'],'expire':_0x45d270['expire']};return await this['runJobCompletionTasks'](_0x6655f6,_0x2df8c9);}async['scrub'](_0x17b96b){await this['store']['scrub'](_0x17b96b);}async['hook'](_0x2a0c96,_0x54aedc,_0x2168f3=stream_1['StreamStatus']['SUCCESS'],_0x4bb68e=0xc8){const _0x1d0d7a=await this['taskService']['getHookRule'](_0x2a0c96),[_0x23dd57]=await this['getSchema']('.'+_0x1d0d7a['to']),_0x27799d={'type':stream_1['StreamDataType']['WEBHOOK'],'status':_0x2168f3,'code':_0x4bb68e,'metadata':{'guid':(0x0,utils_1['guid'])(),'aid':_0x23dd57,'topic':_0x2a0c96},'data':_0x54aedc};return await this['router']['publishMessage'](null,_0x27799d);}async['hookTime'](_0x4d87d7,_0x5a9d66,_0x1fd8d9,_0x3b9e55){if(_0x3b9e55==='interrupt'||_0x3b9e55==='expire')return await this['interrupt'](_0x1fd8d9,_0x4d87d7,{'suppress':!![],'expire':0x1});const [_0x741ffe,..._0x1c7a91]=_0x1fd8d9['split'](','),_0x144590=','+_0x1c7a91['join'](','),_0x1e18ac={'type':stream_1['StreamDataType']['TIMEHOOK'],'metadata':{'guid':(0x0,utils_1['guid'])(),'jid':_0x4d87d7,'gid':_0x5a9d66,'dad':_0x144590,'aid':_0x741ffe},'data':{'timestamp':Date['now']()}};await this['router']['publishMessage'](null,_0x1e18ac);}async['hookAll'](_0x53fc6c,_0x2c193d,_0x208cdd,_0x347c0e=[]){const _0x39fd33=await this['getVID'](),_0x4b3125=await this['taskService']['getHookRule'](_0x53fc6c);if(_0x4b3125){const _0x300e17=await(0x0,utils_1['getSubscriptionTopic'])(_0x4b3125['to'],this['store'],_0x39fd33),_0x1654b3=await this['resolveQuery'](_0x300e17,_0x208cdd),_0x407c9f=new reporter_1['ReporterService'](_0x39fd33,this['store'],this['logger']),_0x254019=await _0x407c9f['getWorkItems'](_0x1654b3,_0x347c0e);if(_0x254019['length']){const _0x33e425=new task_1['TaskService'](this['store'],this['logger']);await _0x33e425['enqueueWorkItems'](_0x254019['map'](_0xada6e=>[_0x53fc6c,_0xada6e,_0x208cdd['scrub']||![],JSON['stringify'](_0x2c193d)]['join'](key_1['VALSEP']))),this['subscribe']['publish'](key_1['KeyType']['QUORUM'],{'type':'work','originator':this['guid']},this['appId']);}return _0x254019;}else throw new Error('unable\x20to\x20find\x20hook\x20rule\x20for\x20topic\x20'+_0x53fc6c);}async['pub'](_0x30b64a,_0x53ec0d,_0x572566,_0x319560){const _0x20cdc4=await this['initActivity'](_0x30b64a,_0x53ec0d,_0x572566);if(_0x20cdc4)return await _0x20cdc4['process'](_0x319560);else throw new Error('unable\x20to\x20process\x20activity\x20for\x20topic\x20'+_0x30b64a);}async['sub'](_0x35d78f,_0x269eca){const _0x73cd85=async(_0x75fbf1,_0x356bcc)=>{_0x269eca(_0x356bcc['topic'],_0x356bcc['job']);};return await this['subscribe']['subscribe'](key_1['KeyType']['QUORUM'],_0x73cd85,this['appId'],_0x35d78f);}async['unsub'](_0x224d9b){return await this['subscribe']['unsubscribe'](key_1['KeyType']['QUORUM'],this['appId'],_0x224d9b);}async['psub'](_0x9f0dfb,_0x329931){const _0x3a4572=async(_0x24f53f,_0x6ea174)=>{_0x329931(_0x6ea174['topic'],_0x6ea174['job']);};return await this['subscribe']['psubscribe'](key_1['KeyType']['QUORUM'],_0x3a4572,this['appId'],_0x9f0dfb);}async['punsub'](_0x261a88){return await this['subscribe']['punsubscribe'](key_1['KeyType']['QUORUM'],this['appId'],_0x261a88);}async['pubsub'](_0x30437c,_0x3dc08f,_0x431bf1,_0x1cb9cc=enums_1['HMSH_OTT_WAIT_TIME']){_0x431bf1={'metadata':{'ngn':this['guid'],'trc':_0x431bf1?.['metadata']?.['trc'],'spn':_0x431bf1?.['metadata']?.['spn']}};const _0x295b7c=await this['pub'](_0x30437c,_0x3dc08f,_0x431bf1);return new Promise((_0x4f8c33,_0x39297b)=>{this['registerJobCallback'](_0x295b7c,(_0x24d836,_0x5c0867)=>{if(_0x5c0867['metadata']['err']){const _0x24affa=JSON['parse'](_0x5c0867['metadata']['err']);_0x39297b({..._0x24affa,'job_id':_0x5c0867['metadata']['jid']});}else _0x4f8c33(_0x5c0867);}),setTimeout(()=>{this['delistJobCallback'](_0x295b7c),_0x39297b({'code':enums_1['HMSH_CODE_TIMEOUT'],'message':'timeout','job_id':_0x295b7c});},_0x1cb9cc);});}async['pubOneTimeSubs'](_0xa49e2a,_0x47bacb,_0x119619=![]){if(this['hasOneTimeSubscription'](_0xa49e2a)){const _0x3b68a9={'type':'job','topic':_0xa49e2a['metadata']['jid'],'job':(0x0,utils_1['restoreHierarchy'])(_0x47bacb)};this['subscribe']['publish'](key_1['KeyType']['QUORUM'],_0x3b68a9,this['appId'],_0xa49e2a['metadata']['ngn']);}}async['getPublishesTopic'](_0x3dba85){const _0x57b348=await this['getVID'](),_0x3780b7=_0x3dba85['metadata']['aid']||_0x3dba85['$self']?.['output']?.['metadata']?.['aid'],_0x2aaa70=await this['store']['getSchema'](_0x3780b7,_0x57b348);return _0x2aaa70['publishes'];}async['pubPermSubs'](_0x1ede49,_0x4ced98,_0x2d78d8=![]){const _0x29a9f6=await this['getPublishesTopic'](_0x1ede49);if(_0x29a9f6){const _0x1d329b={'type':'job','topic':_0x29a9f6,'job':(0x0,utils_1['restoreHierarchy'])(_0x4ced98)};this['subscribe']['publish'](key_1['KeyType']['QUORUM'],_0x1d329b,this['appId'],_0x29a9f6+'.'+_0x1ede49['metadata']['jid']);}}async['add'](_0x19d8fa){return await this['router']['publishMessage'](null,_0x19d8fa);}['registerJobCallback'](_0x4ce850,_0x3945ac){this['jobCallbacks'][_0x4ce850]=_0x3945ac;}['delistJobCallback'](_0x45bfe6){delete this['jobCallbacks'][_0x45bfe6];}['hasOneTimeSubscription'](_0x4b82bb){return Boolean(_0x4b82bb['metadata']['ngn']);}async['runJobCompletionTasks'](_0x580998,_0x520d3f={}){const _0x150b30=this['hasParentJob'](_0x580998,!![]),_0x21d696=this['hasOneTimeSubscription'](_0x580998),_0x1ebbe3=await this['getPublishesTopic'](_0x580998);let _0x5a5b06;if(_0x150b30||_0x21d696||_0x1ebbe3){const _0x259066=await this['getState'](_0x580998['metadata']['tpc'],_0x580998['metadata']['jid']);_0x5a5b06=await this['execAdjacentParent'](_0x580998,_0x259066,_0x520d3f['emit']),this['pubOneTimeSubs'](_0x580998,_0x259066,_0x520d3f['emit']),this['pubPermSubs'](_0x580998,_0x259066,_0x520d3f['emit']);}return!_0x520d3f['emit']&&this['taskService']['registerJobForCleanup'](_0x580998['metadata']['jid'],this['resolveExpires'](_0x580998,_0x520d3f),_0x520d3f),_0x5a5b06;}['resolveExpires'](_0x37373f,_0x423cf3){return _0x423cf3['expire']??_0x37373f['metadata']['expire']??enums_1['HMSH_EXPIRE_JOB_SECONDS'];}async['export'](_0x50ad38){return await this['exporter']['export'](_0x50ad38);}async['getRaw'](_0x339077){return await this['store']['getRaw'](_0x339077);}async['getStatus'](_0x35b35e){const {id:_0x22cbf0}=await this['getVID']();return await this['store']['getStatus'](_0x35b35e,_0x22cbf0);}async['getState'](_0x37e1b2,_0x17de57){const _0x4615a7=await this['store']['getSymbols']('$'+_0x37e1b2),_0x48cbde={['$'+_0x37e1b2]:Object['keys'](_0x4615a7)},_0x2c2882={},_0x458284=await this['store']['getState'](_0x17de57,_0x48cbde,_0x2c2882);if(!_0x458284)throw new Error('not\x20found\x20'+_0x17de57);const [_0x489b4f,_0x17facc]=_0x458284,_0x28ef55=(0x0,utils_1['restoreHierarchy'])(_0x489b4f);return _0x17facc&&_0x28ef55['metadata']&&(_0x28ef55['metadata']['js']=_0x17facc),_0x28ef55;}async['getQueryState'](_0x20423d,_0x1fb6e1){return await this['store']['getQueryState'](_0x20423d,_0x1fb6e1);}async['compress'](_0x1e8119){const _0x1ddd4c=await this['store']['getSymbolValues'](),_0x1dfbfd=Object['keys'](_0x1ddd4c)['length'],_0x4603eb=Math['pow'](0x34,0x2)-0x1,_0x1e5622=serializer_1['SerializerService']['filterSymVals'](_0x1dfbfd,_0x4603eb,_0x1ddd4c,new Set(_0x1e8119));return await this['store']['addSymbolValues'](_0x1e5622);}}function _0xd44c(_0x592ee5,_0x583bfa){const _0xc6db74=_0xc6db();return _0xd44c=function(_0xd44cb9,_0x119313){_0xd44cb9=_0xd44cb9-0x125;let _0x124b55=_0xc6db74[_0xd44cb9];return _0x124b55;},_0xd44c(_0x592ee5,_0x583bfa);}function _0xc6db(){const _0x4b2afa=['77432TSmxxA','10jsxwNB','51suQnED','9EeaLtS','192JAYWma','5sbeWvS','531224gViMjI','2868437vtUAQR','1871166ZNLENV','3187674CaFwPf','5126lVAzCY','4726704DaqFjD'];_0xc6db=function(){return _0x4b2afa;};return _0xc6db();}exports['EngineService']=EngineService;
1
+ 'use strict';(function(_0x1764d5,_0x334294){const _0x47a00f=_0x1635,_0x5a189f=_0x1764d5();while(!![]){try{const _0x1071e0=-parseInt(_0x47a00f(0x16d))/0x1*(-parseInt(_0x47a00f(0x16b))/0x2)+-parseInt(_0x47a00f(0x169))/0x3+parseInt(_0x47a00f(0x168))/0x4+-parseInt(_0x47a00f(0x16e))/0x5+-parseInt(_0x47a00f(0x166))/0x6+parseInt(_0x47a00f(0x167))/0x7*(-parseInt(_0x47a00f(0x16c))/0x8)+parseInt(_0x47a00f(0x16a))/0x9;if(_0x1071e0===_0x334294)break;else _0x5a189f['push'](_0x5a189f['shift']());}catch(_0x5f22a5){_0x5a189f['push'](_0x5a189f['shift']());}}}(_0x5bbf,0xbef32));function _0x5bbf(){const _0x24fffb=['2775814nAECXO','8jkbRmR','1mCGOAs','4361535avIAin','8864940lhDKsO','8414119fLgDfV','2670568mbBBug','1994022sGXfzS','26487621vvDzZK'];_0x5bbf=function(){return _0x24fffb;};return _0x5bbf();}function _0x1635(_0x2d2ffd,_0x13e272){const _0x5bbfa5=_0x5bbf();return _0x1635=function(_0x16353f,_0x22ec05){_0x16353f=_0x16353f-0x166;let _0x2bdabb=_0x5bbfa5[_0x16353f];return _0x2bdabb;},_0x1635(_0x2d2ffd,_0x13e272);}var __importDefault=this&&this['__importDefault']||function(_0x29161b){return _0x29161b&&_0x29161b['__esModule']?_0x29161b:{'default':_0x29161b};};Object['defineProperty'](exports,'__esModule',{'value':!![]}),exports['EngineService']=void 0x0;const key_1=require('../../modules/key'),enums_1=require('../../modules/enums'),utils_1=require('../../modules/utils'),activities_1=__importDefault(require('../activities')),compiler_1=require('../compiler'),exporter_1=require('../exporter'),reporter_1=require('../reporter'),router_1=require('../router'),serializer_1=require('../serializer'),factory_1=require('../search/factory'),factory_2=require('../store/factory'),factory_3=require('../stream/factory'),factory_4=require('../sub/factory'),task_1=require('../task'),stream_1=require('../../types/stream');class EngineService{constructor(){this['cacheMode']='cache',this['untilVersion']=null,this['jobCallbacks']={},this['reporting']=![],this['jobId']=0x1;}static async['init'](_0x566886,_0x8564b0,_0x846979,_0x5a297d,_0x4b151e){if(_0x5a297d['engine']){const _0x50cc1d=new EngineService();_0x50cc1d['verifyEngineFields'](_0x5a297d),_0x50cc1d['namespace']=_0x566886,_0x50cc1d['appId']=_0x8564b0,_0x50cc1d['guid']=_0x846979,_0x50cc1d['logger']=_0x4b151e,await _0x50cc1d['initSearchChannel'](_0x5a297d['engine']['store']),await _0x50cc1d['initStoreChannel'](_0x5a297d['engine']['store']),await _0x50cc1d['initSubChannel'](_0x5a297d['engine']['sub'],_0x5a297d['engine']['store']),await _0x50cc1d['initStreamChannel'](_0x5a297d['engine']['stream'],_0x5a297d['engine']['store']),_0x50cc1d['router']=await _0x50cc1d['initRouter'](_0x5a297d);const _0x212504=_0x50cc1d['store']['mintKey'](key_1['KeyType']['STREAMS'],{'appId':_0x50cc1d['appId']});return _0x50cc1d['router']['consumeMessages'](_0x212504,'ENGINE',_0x50cc1d['guid'],_0x50cc1d['processStreamMessage']['bind'](_0x50cc1d)),_0x50cc1d['taskService']=new task_1['TaskService'](_0x50cc1d['store'],_0x4b151e),_0x50cc1d['exporter']=new exporter_1['ExporterService'](_0x50cc1d['appId'],_0x50cc1d['store'],_0x4b151e),_0x50cc1d['inited']=(0x0,utils_1['formatISODate'])(new Date()),_0x50cc1d;}}['verifyEngineFields'](_0x1fd37b){if(!(0x0,utils_1['identifyProvider'])(_0x1fd37b['engine']['store'])||!(0x0,utils_1['identifyProvider'])(_0x1fd37b['engine']['stream'])||!(0x0,utils_1['identifyProvider'])(_0x1fd37b['engine']['sub']))throw new Error('engine\x20must\x20include\x20`store`,\x20`stream`,\x20and\x20`sub`\x20fields.');}async['initSearchChannel'](_0x28fe8e,_0xd03d96){this['search']=await factory_1['SearchServiceFactory']['init'](_0x28fe8e,_0xd03d96,this['namespace'],this['appId'],this['logger']);}async['initStoreChannel'](_0x115917){this['store']=await factory_2['StoreServiceFactory']['init'](_0x115917,this['namespace'],this['appId'],this['logger']);}async['initSubChannel'](_0x3117d1,_0x586978){this['subscribe']=await factory_4['SubServiceFactory']['init'](_0x3117d1,_0x586978,this['namespace'],this['appId'],this['guid'],this['logger']);}async['initStreamChannel'](_0x4f9719,_0x2a8c3d){this['stream']=await factory_3['StreamServiceFactory']['init'](_0x4f9719,_0x2a8c3d,this['namespace'],this['appId'],this['logger']);}async['initRouter'](_0x40643c){const _0x335a4a=await this['store']['getThrottleRate'](':');return new router_1['Router']({'namespace':this['namespace'],'appId':this['appId'],'guid':this['guid'],'role':stream_1['StreamRole']['ENGINE'],'reclaimDelay':_0x40643c['engine']['reclaimDelay'],'reclaimCount':_0x40643c['engine']['reclaimCount'],'throttle':_0x335a4a,'readonly':_0x40643c['engine']['readonly']},this['stream'],this['logger']);}async['fetchAndVerifyVID'](_0x1ed05b,_0x11aaf2=0x0){if(isNaN(Number(_0x1ed05b['version']))){const _0x1519f8=await this['store']['getApp'](_0x1ed05b['id'],!![]);if(!isNaN(Number(_0x1519f8['version']))){if(!this['apps'])this['apps']={};return this['apps'][_0x1ed05b['id']]=_0x1519f8,{'id':_0x1ed05b['id'],'version':_0x1519f8['version']};}else{if(_0x11aaf2<0xa)return await(0x0,utils_1['sleepFor'])(enums_1['HMSH_QUORUM_DELAY_MS']*0x2),await this['fetchAndVerifyVID'](_0x1ed05b,_0x11aaf2+0x1);else this['logger']['error']('engine-vid-resolution-error',{'id':_0x1ed05b['id'],'guid':this['guid']});}}return _0x1ed05b;}async['getVID'](_0x50aa58){if(this['cacheMode']==='nocache'){const _0x31fb61=await this['store']['getApp'](this['appId'],!![]);if(_0x31fb61['version']['toString']()===this['untilVersion']['toString']()){if(!this['apps'])this['apps']={};this['apps'][this['appId']]=_0x31fb61,this['setCacheMode']('cache',_0x31fb61['version']['toString']());}return{'id':this['appId'],'version':_0x31fb61['version']};}else return!this['apps']&&_0x50aa58?(this['apps']={},this['apps'][this['appId']]=_0x50aa58,_0x50aa58):await this['fetchAndVerifyVID']({'id':this['appId'],'version':this['apps']?.[this['appId']]['version']});}['setCacheMode'](_0x136946,_0x34c2fd){this['logger']['info']('engine-executable-cache',{'mode':_0x136946,[_0x136946==='cache'?'target':'until']:_0x34c2fd}),this['cacheMode']=_0x136946,this['untilVersion']=_0x34c2fd;}async['routeToSubscribers'](_0x16c951,_0x193a82){const _0x5ccda0=this['jobCallbacks'][_0x193a82['metadata']['jid']];_0x5ccda0&&(this['delistJobCallback'](_0x193a82['metadata']['jid']),_0x5ccda0(_0x16c951,_0x193a82));}async['processWebHooks'](){this['taskService']['processWebHooks'](this['hook']['bind'](this));}async['processTimeHooks'](){this['taskService']['processTimeHooks'](this['hookTime']['bind'](this));}async['throttle'](_0x450357){try{this['router']?.['setThrottle'](_0x450357);}catch(_0x127496){this['logger']['error']('engine-throttle-error',{'error':_0x127496});}}async['initActivity'](_0x40da70,_0x2e0492={},_0x38abdf){const [_0x477817,_0x5275a3]=await this['getSchema'](_0x40da70),_0x3f6f14=activities_1['default'][utils_1['polyfill']['resolveActivityType'](_0x5275a3['type'])];if(_0x3f6f14){const _0x55ba18=(0x0,utils_1['formatISODate'])(new Date()),_0x4f7dbc={'aid':_0x477817,'atp':_0x5275a3['type'],'stp':_0x5275a3['subtype'],'ac':_0x55ba18,'au':_0x55ba18},_0x11bd57=null;return new _0x3f6f14(_0x5275a3,_0x2e0492,_0x4f7dbc,_0x11bd57,this,_0x38abdf);}else throw new Error('activity\x20type\x20'+_0x5275a3['type']+'\x20not\x20found');}async['getSchema'](_0x1ebce3){const _0x1d8ecb=await this['store']['getApp'](this['appId']);if(!_0x1d8ecb)throw new Error('no\x20app\x20found\x20for\x20id\x20'+this['appId']);if(this['isPrivate'](_0x1ebce3)){const _0x3931ef=_0x1ebce3['substring'](0x1),_0x52fec9=await this['store']['getSchema'](_0x3931ef,await this['getVID'](_0x1d8ecb));return[_0x3931ef,_0x52fec9];}else{const _0x3f5d39=await this['store']['getSubscription'](_0x1ebce3,await this['getVID'](_0x1d8ecb));if(_0x3f5d39){const _0x42c0ac=await this['store']['getSchema'](_0x3f5d39,await this['getVID'](_0x1d8ecb));return[_0x3f5d39,_0x42c0ac];}}throw new Error('no\x20subscription\x20found\x20for\x20topic\x20'+_0x1ebce3+'\x20in\x20app\x20'+this['appId']+'\x20for\x20app\x20version\x20'+_0x1d8ecb['version']);}async['getSettings'](){return await this['store']['getSettings']();}['isPrivate'](_0x1ffbe8){return _0x1ffbe8['startsWith']('.');}async['plan'](_0x1a6c4c){const _0x2dc72e=new compiler_1['CompilerService'](this['store'],this['stream'],this['logger']);return await _0x2dc72e['plan'](_0x1a6c4c);}async['deploy'](_0x4519a3){const _0x29df3c=new compiler_1['CompilerService'](this['store'],this['stream'],this['logger']);return await _0x29df3c['deploy'](_0x4519a3);}async['getStats'](_0x2b98c5,_0x2c287c){const {id:_0x53c3f4,version:_0x259579}=await this['getVID'](),_0xfca9ef=new reporter_1['ReporterService']({'id':_0x53c3f4,'version':_0x259579},this['store'],this['logger']),_0x1655a2=await this['resolveQuery'](_0x2b98c5,_0x2c287c);return await _0xfca9ef['getStats'](_0x1655a2);}async['getIds'](_0x462ddc,_0x5972b7,_0x54fb25=[]){const {id:_0x16dc92,version:_0x4c697d}=await this['getVID'](),_0x520a8e=new reporter_1['ReporterService']({'id':_0x16dc92,'version':_0x4c697d},this['store'],this['logger']),_0x16aff8=await this['resolveQuery'](_0x462ddc,_0x5972b7);return await _0x520a8e['getIds'](_0x16aff8,_0x54fb25);}async['resolveQuery'](_0x4b00af,_0x3b2917){const _0x527cb1=await this['initActivity'](_0x4b00af,_0x3b2917['data']);return await _0x527cb1['getState'](),{'end':_0x3b2917['end'],'start':_0x3b2917['start'],'range':_0x3b2917['range'],'granularity':_0x527cb1['resolveGranularity'](),'key':_0x527cb1['resolveJobKey'](_0x527cb1['createInputContext']()),'sparse':_0x3b2917['sparse']};}async['processStreamMessage'](_0x221c49){this['logger']['debug']('engine-process',{'jid':_0x221c49['metadata']['jid'],'gid':_0x221c49['metadata']['gid'],'dad':_0x221c49['metadata']['dad'],'aid':_0x221c49['metadata']['aid'],'status':_0x221c49['status']||stream_1['StreamStatus']['SUCCESS'],'code':_0x221c49['code']||0xc8,'type':_0x221c49['type']});const _0x1712d6={'metadata':{'guid':_0x221c49['metadata']['guid'],'jid':_0x221c49['metadata']['jid'],'gid':_0x221c49['metadata']['gid'],'dad':_0x221c49['metadata']['dad'],'aid':_0x221c49['metadata']['aid']},'data':_0x221c49['data']};if(_0x221c49['type']===stream_1['StreamDataType']['TIMEHOOK']){const _0x5075f8=await this['initActivity']('.'+_0x221c49['metadata']['aid'],_0x1712d6['data'],_0x1712d6);await _0x5075f8['processTimeHookEvent'](_0x221c49['metadata']['jid']);}else{if(_0x221c49['type']===stream_1['StreamDataType']['WEBHOOK']){const _0x1b265f=await this['initActivity']('.'+_0x221c49['metadata']['aid'],_0x1712d6['data'],_0x1712d6);await _0x1b265f['processWebHookEvent'](_0x221c49['status'],_0x221c49['code']);}else{if(_0x221c49['type']===stream_1['StreamDataType']['TRANSITION']){const _0x480f1d=await this['initActivity']('.'+_0x221c49['metadata']['aid'],_0x1712d6['data'],_0x1712d6);await _0x480f1d['process']();}else{if(_0x221c49['type']===stream_1['StreamDataType']['AWAIT']){_0x1712d6['metadata']={..._0x1712d6['metadata'],'pj':_0x221c49['metadata']['jid'],'pg':_0x221c49['metadata']['gid'],'pd':_0x221c49['metadata']['dad'],'pa':_0x221c49['metadata']['aid'],'px':_0x221c49['metadata']['await']===![],'trc':_0x221c49['metadata']['trc'],'spn':_0x221c49['metadata']['spn']};const _0xe15661=await this['initActivity'](_0x221c49['metadata']['topic'],_0x221c49['data'],_0x1712d6);await _0xe15661['process']();}else{if(_0x221c49['type']===stream_1['StreamDataType']['RESULT']){const _0xabe657=await this['initActivity']('.'+_0x1712d6['metadata']['aid'],_0x221c49['data'],_0x1712d6);await _0xabe657['processEvent'](_0x221c49['status'],_0x221c49['code']);}else{const _0x2b2d1a=await this['initActivity']('.'+_0x221c49['metadata']['aid'],_0x221c49['data'],_0x1712d6);await _0x2b2d1a['processEvent'](_0x221c49['status'],_0x221c49['code'],'output');}}}}}this['logger']['debug']('engine-process-end',{'jid':_0x221c49['metadata']['jid'],'gid':_0x221c49['metadata']['gid'],'aid':_0x221c49['metadata']['aid']});}async['execAdjacentParent'](_0x2f0f95,_0x6950f4,_0x33578e=![]){if(this['hasParentJob'](_0x2f0f95)){const _0x1f16a4=this['resolveError'](_0x6950f4['metadata']),_0x3b32b2=_0x2f0f95['$self']?.['output']?.['metadata']?.['l2s']||_0x2f0f95['$self']?.['output']?.['metadata']?.['l1s'],_0x57a6d5={'metadata':{'guid':(0x0,utils_1['guid'])(),'jid':_0x2f0f95['metadata']['pj'],'gid':_0x2f0f95['metadata']['pg'],'dad':_0x2f0f95['metadata']['pd'],'aid':_0x2f0f95['metadata']['pa'],'trc':_0x2f0f95['metadata']['trc'],'spn':_0x3b32b2},'type':stream_1['StreamDataType']['RESULT'],'data':_0x6950f4['data']};if(_0x1f16a4&&_0x1f16a4['code'])_0x57a6d5['status']=stream_1['StreamStatus']['ERROR'],_0x57a6d5['data']=_0x1f16a4,_0x57a6d5['code']=_0x1f16a4['code'],_0x57a6d5['stack']=_0x1f16a4['stack'];else _0x33578e?(_0x57a6d5['status']=stream_1['StreamStatus']['PENDING'],_0x57a6d5['code']=enums_1['HMSH_CODE_PENDING']):(_0x57a6d5['status']=stream_1['StreamStatus']['SUCCESS'],_0x57a6d5['code']=enums_1['HMSH_CODE_SUCCESS']);return await this['router']?.['publishMessage'](null,_0x57a6d5);}}['hasParentJob'](_0x5becf6,_0x39f2ac=![]){if(_0x39f2ac)return Boolean(_0x5becf6['metadata']['pj']&&_0x5becf6['metadata']['pa']&&!_0x5becf6['metadata']['px']);return Boolean(_0x5becf6['metadata']['pj']&&_0x5becf6['metadata']['pa']);}['resolveError'](_0x2f38e6){if(_0x2f38e6&&_0x2f38e6['err'])return JSON['parse'](_0x2f38e6['err']);}async['interrupt'](_0x5d86ac,_0x17c407,_0x405ab9={}){await this['store']['interrupt'](_0x5d86ac,_0x17c407,_0x405ab9);const _0x1397ad=await this['getState'](_0x5d86ac,_0x17c407),_0x4e41db={'interrupt':_0x405ab9['descend'],'expire':_0x405ab9['expire']};return await this['runJobCompletionTasks'](_0x1397ad,_0x4e41db);}async['scrub'](_0x325106){await this['store']['scrub'](_0x325106);}async['hook'](_0x1bf1a7,_0x5c6956,_0x354e82=stream_1['StreamStatus']['SUCCESS'],_0x303bfb=0xc8){const _0x5635f9=await this['taskService']['getHookRule'](_0x1bf1a7),[_0x37b45c]=await this['getSchema']('.'+_0x5635f9['to']),_0x2ea6ec={'type':stream_1['StreamDataType']['WEBHOOK'],'status':_0x354e82,'code':_0x303bfb,'metadata':{'guid':(0x0,utils_1['guid'])(),'aid':_0x37b45c,'topic':_0x1bf1a7},'data':_0x5c6956};return await this['router']?.['publishMessage'](null,_0x2ea6ec);}async['hookTime'](_0x26de72,_0x9fb041,_0x5e7ea5,_0x5ea46a){if(_0x5ea46a==='interrupt'||_0x5ea46a==='expire')return await this['interrupt'](_0x5e7ea5,_0x26de72,{'suppress':!![],'expire':0x1});const [_0x329caa,..._0x3bdeb8]=_0x5e7ea5['split'](','),_0x31540f=','+_0x3bdeb8['join'](','),_0x4abf86={'type':stream_1['StreamDataType']['TIMEHOOK'],'metadata':{'guid':(0x0,utils_1['guid'])(),'jid':_0x26de72,'gid':_0x9fb041,'dad':_0x31540f,'aid':_0x329caa},'data':{'timestamp':Date['now']()}};await this['router']?.['publishMessage'](null,_0x4abf86);}async['hookAll'](_0x5571b7,_0x53bc33,_0x41d2ab,_0x35d3ec=[]){const _0x5b3c76=await this['getVID'](),_0x3139e0=await this['taskService']['getHookRule'](_0x5571b7);if(_0x3139e0){const _0x50aa0c=await(0x0,utils_1['getSubscriptionTopic'])(_0x3139e0['to'],this['store'],_0x5b3c76),_0x94cb47=await this['resolveQuery'](_0x50aa0c,_0x41d2ab),_0x7264e7=new reporter_1['ReporterService'](_0x5b3c76,this['store'],this['logger']),_0x3f440b=await _0x7264e7['getWorkItems'](_0x94cb47,_0x35d3ec);if(_0x3f440b['length']){const _0x4257e0=new task_1['TaskService'](this['store'],this['logger']);await _0x4257e0['enqueueWorkItems'](_0x3f440b['map'](_0x5cebd2=>[_0x5571b7,_0x5cebd2,_0x41d2ab['scrub']||![],JSON['stringify'](_0x53bc33)]['join'](key_1['VALSEP']))),this['subscribe']['publish'](key_1['KeyType']['QUORUM'],{'type':'work','originator':this['guid']},this['appId']);}return _0x3f440b;}else throw new Error('unable\x20to\x20find\x20hook\x20rule\x20for\x20topic\x20'+_0x5571b7);}async['pub'](_0x1f0036,_0x33bfea,_0x41a2cc,_0x262409){const _0x292fc0=await this['initActivity'](_0x1f0036,_0x33bfea,_0x41a2cc);if(_0x292fc0)return await _0x292fc0['process'](_0x262409);else throw new Error('unable\x20to\x20process\x20activity\x20for\x20topic\x20'+_0x1f0036);}async['sub'](_0x1e0f87,_0x45824a){const _0x34f42b=async(_0x15479e,_0x9dd57e)=>{_0x45824a(_0x9dd57e['topic'],_0x9dd57e['job']);};return await this['subscribe']['subscribe'](key_1['KeyType']['QUORUM'],_0x34f42b,this['appId'],_0x1e0f87);}async['unsub'](_0x47839f){return await this['subscribe']['unsubscribe'](key_1['KeyType']['QUORUM'],this['appId'],_0x47839f);}async['psub'](_0x47ab46,_0x303e12){const _0x1a5308=async(_0xb000b7,_0x484231)=>{_0x303e12(_0x484231['topic'],_0x484231['job']);};return await this['subscribe']['psubscribe'](key_1['KeyType']['QUORUM'],_0x1a5308,this['appId'],_0x47ab46);}async['punsub'](_0x54ac3a){return await this['subscribe']['punsubscribe'](key_1['KeyType']['QUORUM'],this['appId'],_0x54ac3a);}async['pubsub'](_0x343200,_0xa307e3,_0x2a6a72,_0x210022=enums_1['HMSH_OTT_WAIT_TIME']){_0x2a6a72={'metadata':{'ngn':this['guid'],'trc':_0x2a6a72?.['metadata']?.['trc'],'spn':_0x2a6a72?.['metadata']?.['spn']}};const _0x29a26c=await this['pub'](_0x343200,_0xa307e3,_0x2a6a72);return new Promise((_0x330576,_0x2b7e96)=>{this['registerJobCallback'](_0x29a26c,(_0x4f6b4c,_0x5c3311)=>{if(_0x5c3311['metadata']['err']){const _0x31256f=JSON['parse'](_0x5c3311['metadata']['err']);_0x2b7e96({..._0x31256f,'job_id':_0x5c3311['metadata']['jid']});}else _0x330576(_0x5c3311);}),setTimeout(()=>{this['delistJobCallback'](_0x29a26c),_0x2b7e96({'code':enums_1['HMSH_CODE_TIMEOUT'],'message':'timeout','job_id':_0x29a26c});},_0x210022);});}async['pubOneTimeSubs'](_0x17d82d,_0x5462f6,_0x22c9f3=![]){if(this['hasOneTimeSubscription'](_0x17d82d)){const _0xae4ab2={'type':'job','topic':_0x17d82d['metadata']['jid'],'job':(0x0,utils_1['restoreHierarchy'])(_0x5462f6)};this['subscribe']['publish'](key_1['KeyType']['QUORUM'],_0xae4ab2,this['appId'],_0x17d82d['metadata']['ngn']);}}async['getPublishesTopic'](_0x2ee5df){const _0x2b7aed=await this['getVID'](),_0x19d6ba=_0x2ee5df['metadata']['aid']||_0x2ee5df['$self']?.['output']?.['metadata']?.['aid'],_0x83efa4=await this['store']['getSchema'](_0x19d6ba,_0x2b7aed);return _0x83efa4['publishes'];}async['pubPermSubs'](_0x2368cd,_0x184d5c,_0x3b074e=![]){const _0x31135a=await this['getPublishesTopic'](_0x2368cd);if(_0x31135a){const _0x6673fd={'type':'job','topic':_0x31135a,'job':(0x0,utils_1['restoreHierarchy'])(_0x184d5c)};this['subscribe']['publish'](key_1['KeyType']['QUORUM'],_0x6673fd,this['appId'],_0x31135a+'.'+_0x2368cd['metadata']['jid']);}}async['add'](_0x3ee5a7){return await this['router']?.['publishMessage'](null,_0x3ee5a7);}['registerJobCallback'](_0x27b44e,_0x3cb60a){this['jobCallbacks'][_0x27b44e]=_0x3cb60a;}['delistJobCallback'](_0x2e46c7){delete this['jobCallbacks'][_0x2e46c7];}['hasOneTimeSubscription'](_0x129331){return Boolean(_0x129331['metadata']['ngn']);}async['runJobCompletionTasks'](_0x439fab,_0x3e0581={}){const _0x522d86=this['hasParentJob'](_0x439fab,!![]),_0x234962=this['hasOneTimeSubscription'](_0x439fab),_0x453277=await this['getPublishesTopic'](_0x439fab);let _0x51a0fd;if(_0x522d86||_0x234962||_0x453277){const _0xaef4db=await this['getState'](_0x439fab['metadata']['tpc'],_0x439fab['metadata']['jid']);_0x51a0fd=await this['execAdjacentParent'](_0x439fab,_0xaef4db,_0x3e0581['emit']),this['pubOneTimeSubs'](_0x439fab,_0xaef4db,_0x3e0581['emit']),this['pubPermSubs'](_0x439fab,_0xaef4db,_0x3e0581['emit']);}return!_0x3e0581['emit']&&this['taskService']['registerJobForCleanup'](_0x439fab['metadata']['jid'],this['resolveExpires'](_0x439fab,_0x3e0581),_0x3e0581),_0x51a0fd;}['resolveExpires'](_0x4ca5a0,_0x32ad98){return _0x32ad98['expire']??_0x4ca5a0['metadata']['expire']??enums_1['HMSH_EXPIRE_JOB_SECONDS'];}async['export'](_0x10283a){return await this['exporter']['export'](_0x10283a);}async['getRaw'](_0x17c0a1){return await this['store']['getRaw'](_0x17c0a1);}async['getStatus'](_0x54d233){const {id:_0x6ce27b}=await this['getVID']();return await this['store']['getStatus'](_0x54d233,_0x6ce27b);}async['getState'](_0x752020,_0x2dca04){const _0x495467=await this['store']['getSymbols']('$'+_0x752020),_0x3c3a6c={['$'+_0x752020]:Object['keys'](_0x495467)},_0x39e9ab={},_0x9768d0=await this['store']['getState'](_0x2dca04,_0x3c3a6c,_0x39e9ab);if(!_0x9768d0)throw new Error('not\x20found\x20'+_0x2dca04);const [_0x5b7a2b,_0x314cb8]=_0x9768d0,_0x46d8ef=(0x0,utils_1['restoreHierarchy'])(_0x5b7a2b);return _0x314cb8&&_0x46d8ef['metadata']&&(_0x46d8ef['metadata']['js']=_0x314cb8),_0x46d8ef;}async['getQueryState'](_0x3f4a72,_0x575770){return await this['store']['getQueryState'](_0x3f4a72,_0x575770);}async['compress'](_0x9048c0){const _0x2043b3=await this['store']['getSymbolValues'](),_0x4be9bd=Object['keys'](_0x2043b3)['length'],_0x1d9115=Math['pow'](0x34,0x2)-0x1,_0x3df749=serializer_1['SerializerService']['filterSymVals'](_0x4be9bd,_0x1d9115,_0x2043b3,new Set(_0x9048c0));return await this['store']['addSymbolValues'](_0x3df749);}}exports['EngineService']=EngineService;
@@ -1,14 +1,14 @@
1
1
  import { ILogger } from '../logger';
2
2
  import { StoreService } from '../store';
3
3
  import { DependencyExport, ExportOptions, JobActionExport, JobExport } from '../../types/exporter';
4
- import { RedisClient, RedisMulti } from '../../types/redis';
4
+ import { ProviderClient, ProviderTransaction } from '../../types/provider';
5
5
  import { StringStringType, Symbols } from '../../types/serializer';
6
6
  declare class ExporterService {
7
7
  appId: string;
8
8
  logger: ILogger;
9
- store: StoreService<RedisClient, RedisMulti>;
9
+ store: StoreService<ProviderClient, ProviderTransaction>;
10
10
  symbols: Promise<Symbols> | Symbols;
11
- constructor(appId: string, store: StoreService<RedisClient, RedisMulti>, logger: ILogger);
11
+ constructor(appId: string, store: StoreService<ProviderClient, ProviderTransaction>, logger: ILogger);
12
12
  export(jobId: string, options?: ExportOptions): Promise<JobExport>;
13
13
  inflateKey(key: string): string;
14
14
  inflate(jobHash: StringStringType, dependencyList: string[]): JobExport;