@hotmeshio/hotmesh 0.4.0 → 0.4.2

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 (284) hide show
  1. package/README.md +39 -14
  2. package/build/modules/enums.d.ts +110 -0
  3. package/build/modules/enums.js +134 -0
  4. package/build/modules/errors.d.ts +124 -0
  5. package/build/modules/errors.js +191 -0
  6. package/build/modules/key.d.ts +66 -0
  7. package/build/modules/key.js +190 -0
  8. package/build/modules/storage.d.ts +3 -0
  9. package/build/modules/storage.js +5 -0
  10. package/build/modules/utils.d.ts +119 -0
  11. package/build/modules/utils.js +374 -0
  12. package/build/package.json +1 -1
  13. package/build/services/activities/activity.d.ts +104 -0
  14. package/build/services/activities/activity.js +549 -0
  15. package/build/services/activities/await.d.ts +12 -0
  16. package/build/services/activities/await.js +114 -0
  17. package/build/services/activities/cycle.d.ts +19 -0
  18. package/build/services/activities/cycle.js +112 -0
  19. package/build/services/activities/hook.d.ts +27 -0
  20. package/build/services/activities/hook.js +168 -0
  21. package/build/services/activities/index.d.ts +19 -0
  22. package/build/services/activities/index.js +20 -0
  23. package/build/services/activities/interrupt.d.ts +16 -0
  24. package/build/services/activities/interrupt.js +158 -0
  25. package/build/services/activities/signal.d.ts +20 -0
  26. package/build/services/activities/signal.js +134 -0
  27. package/build/services/activities/trigger.d.ts +37 -0
  28. package/build/services/activities/trigger.js +246 -0
  29. package/build/services/activities/worker.d.ts +12 -0
  30. package/build/services/activities/worker.js +106 -0
  31. package/build/services/collator/index.d.ts +111 -0
  32. package/build/services/collator/index.js +293 -0
  33. package/build/services/compiler/deployer.d.ts +40 -0
  34. package/build/services/compiler/deployer.js +488 -0
  35. package/build/services/compiler/index.d.ts +32 -0
  36. package/build/services/compiler/index.js +112 -0
  37. package/build/services/compiler/validator.d.ts +34 -0
  38. package/build/services/compiler/validator.js +147 -0
  39. package/build/services/connector/factory.d.ts +22 -0
  40. package/build/services/connector/factory.js +99 -0
  41. package/build/services/connector/index.d.ts +30 -0
  42. package/build/services/connector/index.js +54 -0
  43. package/build/services/connector/providers/ioredis.d.ts +9 -0
  44. package/build/services/connector/providers/ioredis.js +26 -0
  45. package/build/services/connector/providers/nats.d.ts +9 -0
  46. package/build/services/connector/providers/nats.js +34 -0
  47. package/build/services/connector/providers/postgres.d.ts +20 -0
  48. package/build/services/connector/providers/postgres.js +102 -0
  49. package/build/services/connector/providers/redis.d.ts +9 -0
  50. package/build/services/connector/providers/redis.js +38 -0
  51. package/build/services/engine/index.d.ts +264 -0
  52. package/build/services/engine/index.js +761 -0
  53. package/build/services/exporter/index.d.ts +44 -0
  54. package/build/services/exporter/index.js +126 -0
  55. package/build/services/hotmesh/index.d.ts +483 -0
  56. package/build/services/hotmesh/index.js +622 -0
  57. package/build/services/logger/index.d.ts +16 -0
  58. package/build/services/logger/index.js +54 -0
  59. package/build/services/mapper/index.d.ts +28 -0
  60. package/build/services/mapper/index.js +81 -0
  61. package/build/services/memflow/client.d.ts +108 -0
  62. package/build/services/memflow/client.js +372 -0
  63. package/build/services/memflow/connection.d.ts +23 -0
  64. package/build/services/memflow/connection.js +33 -0
  65. package/build/services/memflow/context.d.ts +143 -0
  66. package/build/services/memflow/context.js +299 -0
  67. package/build/services/memflow/exporter.d.ts +51 -0
  68. package/build/services/memflow/exporter.js +215 -0
  69. package/build/services/memflow/handle.d.ts +90 -0
  70. package/build/services/memflow/handle.js +176 -0
  71. package/build/services/memflow/index.d.ts +116 -0
  72. package/build/services/memflow/index.js +122 -0
  73. package/build/services/memflow/schemas/factory.d.ts +29 -0
  74. package/build/services/memflow/schemas/factory.js +2492 -0
  75. package/build/services/memflow/search.d.ts +142 -0
  76. package/build/services/memflow/search.js +320 -0
  77. package/build/services/memflow/worker.d.ts +124 -0
  78. package/build/services/memflow/worker.js +514 -0
  79. package/build/services/memflow/workflow/all.d.ts +7 -0
  80. package/build/services/memflow/workflow/all.js +15 -0
  81. package/build/services/memflow/workflow/common.d.ts +20 -0
  82. package/build/services/memflow/workflow/common.js +47 -0
  83. package/build/services/memflow/workflow/context.d.ts +6 -0
  84. package/build/services/memflow/workflow/context.js +45 -0
  85. package/build/services/memflow/workflow/contextMethods.d.ts +14 -0
  86. package/build/services/memflow/workflow/contextMethods.js +33 -0
  87. package/build/services/memflow/workflow/didRun.d.ts +7 -0
  88. package/build/services/memflow/workflow/didRun.js +22 -0
  89. package/build/services/memflow/workflow/emit.d.ts +11 -0
  90. package/build/services/memflow/workflow/emit.js +29 -0
  91. package/build/services/memflow/workflow/enrich.d.ts +9 -0
  92. package/build/services/memflow/workflow/enrich.js +17 -0
  93. package/build/services/memflow/workflow/execChild.d.ts +18 -0
  94. package/build/services/memflow/workflow/execChild.js +102 -0
  95. package/build/services/memflow/workflow/execHook.d.ts +65 -0
  96. package/build/services/memflow/workflow/execHook.js +73 -0
  97. package/build/services/memflow/workflow/hook.d.ts +9 -0
  98. package/build/services/memflow/workflow/hook.js +56 -0
  99. package/build/services/memflow/workflow/index.d.ts +74 -0
  100. package/build/services/memflow/workflow/index.js +87 -0
  101. package/build/services/memflow/workflow/interrupt.d.ts +9 -0
  102. package/build/services/memflow/workflow/interrupt.js +24 -0
  103. package/build/services/memflow/workflow/isSideEffectAllowed.d.ts +10 -0
  104. package/build/services/memflow/workflow/isSideEffectAllowed.js +33 -0
  105. package/build/services/memflow/workflow/proxyActivities.d.ts +20 -0
  106. package/build/services/memflow/workflow/proxyActivities.js +97 -0
  107. package/build/services/memflow/workflow/random.d.ts +6 -0
  108. package/build/services/memflow/workflow/random.js +16 -0
  109. package/build/services/memflow/workflow/searchMethods.d.ts +6 -0
  110. package/build/services/memflow/workflow/searchMethods.js +25 -0
  111. package/build/services/memflow/workflow/signal.d.ts +29 -0
  112. package/build/services/memflow/workflow/signal.js +50 -0
  113. package/build/services/memflow/workflow/sleepFor.d.ts +24 -0
  114. package/build/services/memflow/workflow/sleepFor.js +51 -0
  115. package/build/services/memflow/workflow/trace.d.ts +14 -0
  116. package/build/services/memflow/workflow/trace.js +33 -0
  117. package/build/services/memflow/workflow/waitFor.d.ts +29 -0
  118. package/build/services/memflow/workflow/waitFor.js +56 -0
  119. package/build/services/meshcall/index.d.ts +194 -0
  120. package/build/services/meshcall/index.js +452 -0
  121. package/build/services/meshcall/schemas/factory.d.ts +9 -0
  122. package/build/services/meshcall/schemas/factory.js +189 -0
  123. package/build/services/meshdata/index.d.ts +795 -0
  124. package/build/services/meshdata/index.js +1235 -0
  125. package/build/services/meshos/index.d.ts +293 -0
  126. package/build/services/meshos/index.js +547 -0
  127. package/build/services/pipe/functions/array.d.ts +17 -0
  128. package/build/services/pipe/functions/array.js +74 -0
  129. package/build/services/pipe/functions/bitwise.d.ts +9 -0
  130. package/build/services/pipe/functions/bitwise.js +24 -0
  131. package/build/services/pipe/functions/conditional.d.ts +13 -0
  132. package/build/services/pipe/functions/conditional.js +36 -0
  133. package/build/services/pipe/functions/cron.d.ts +12 -0
  134. package/build/services/pipe/functions/cron.js +40 -0
  135. package/build/services/pipe/functions/date.d.ts +58 -0
  136. package/build/services/pipe/functions/date.js +171 -0
  137. package/build/services/pipe/functions/index.d.ts +29 -0
  138. package/build/services/pipe/functions/index.js +30 -0
  139. package/build/services/pipe/functions/json.d.ts +5 -0
  140. package/build/services/pipe/functions/json.js +12 -0
  141. package/build/services/pipe/functions/logical.d.ts +5 -0
  142. package/build/services/pipe/functions/logical.js +12 -0
  143. package/build/services/pipe/functions/math.d.ts +42 -0
  144. package/build/services/pipe/functions/math.js +184 -0
  145. package/build/services/pipe/functions/number.d.ts +21 -0
  146. package/build/services/pipe/functions/number.js +60 -0
  147. package/build/services/pipe/functions/object.d.ts +25 -0
  148. package/build/services/pipe/functions/object.js +81 -0
  149. package/build/services/pipe/functions/string.d.ts +23 -0
  150. package/build/services/pipe/functions/string.js +69 -0
  151. package/build/services/pipe/functions/symbol.d.ts +12 -0
  152. package/build/services/pipe/functions/symbol.js +33 -0
  153. package/build/services/pipe/functions/unary.d.ts +7 -0
  154. package/build/services/pipe/functions/unary.js +18 -0
  155. package/build/services/pipe/index.d.ts +48 -0
  156. package/build/services/pipe/index.js +242 -0
  157. package/build/services/quorum/index.d.ts +90 -0
  158. package/build/services/quorum/index.js +263 -0
  159. package/build/services/reporter/index.d.ts +50 -0
  160. package/build/services/reporter/index.js +348 -0
  161. package/build/services/router/config/index.d.ts +11 -0
  162. package/build/services/router/config/index.js +36 -0
  163. package/build/services/router/consumption/index.d.ts +34 -0
  164. package/build/services/router/consumption/index.js +395 -0
  165. package/build/services/router/error-handling/index.d.ts +8 -0
  166. package/build/services/router/error-handling/index.js +98 -0
  167. package/build/services/router/index.d.ts +57 -0
  168. package/build/services/router/index.js +121 -0
  169. package/build/services/router/lifecycle/index.d.ts +27 -0
  170. package/build/services/router/lifecycle/index.js +80 -0
  171. package/build/services/router/telemetry/index.d.ts +11 -0
  172. package/build/services/router/telemetry/index.js +32 -0
  173. package/build/services/router/throttling/index.d.ts +23 -0
  174. package/build/services/router/throttling/index.js +76 -0
  175. package/build/services/search/factory.d.ts +7 -0
  176. package/build/services/search/factory.js +24 -0
  177. package/build/services/search/index.d.ts +23 -0
  178. package/build/services/search/index.js +10 -0
  179. package/build/services/search/providers/postgres/postgres.d.ts +25 -0
  180. package/build/services/search/providers/postgres/postgres.js +149 -0
  181. package/build/services/search/providers/redis/ioredis.d.ts +19 -0
  182. package/build/services/search/providers/redis/ioredis.js +121 -0
  183. package/build/services/search/providers/redis/redis.d.ts +19 -0
  184. package/build/services/search/providers/redis/redis.js +134 -0
  185. package/build/services/serializer/index.d.ts +42 -0
  186. package/build/services/serializer/index.js +282 -0
  187. package/build/services/store/cache.d.ts +67 -0
  188. package/build/services/store/cache.js +128 -0
  189. package/build/services/store/factory.d.ts +8 -0
  190. package/build/services/store/factory.js +24 -0
  191. package/build/services/store/index.d.ts +89 -0
  192. package/build/services/store/index.js +9 -0
  193. package/build/services/store/providers/postgres/kvsql.d.ts +168 -0
  194. package/build/services/store/providers/postgres/kvsql.js +198 -0
  195. package/build/services/store/providers/postgres/kvtables.d.ts +20 -0
  196. package/build/services/store/providers/postgres/kvtables.js +441 -0
  197. package/build/services/store/providers/postgres/kvtransaction.d.ts +36 -0
  198. package/build/services/store/providers/postgres/kvtransaction.js +248 -0
  199. package/build/services/store/providers/postgres/kvtypes/hash.d.ts +60 -0
  200. package/build/services/store/providers/postgres/kvtypes/hash.js +1287 -0
  201. package/build/services/store/providers/postgres/kvtypes/list.d.ts +33 -0
  202. package/build/services/store/providers/postgres/kvtypes/list.js +194 -0
  203. package/build/services/store/providers/postgres/kvtypes/string.d.ts +20 -0
  204. package/build/services/store/providers/postgres/kvtypes/string.js +115 -0
  205. package/build/services/store/providers/postgres/kvtypes/zset.d.ts +41 -0
  206. package/build/services/store/providers/postgres/kvtypes/zset.js +214 -0
  207. package/build/services/store/providers/postgres/postgres.d.ts +178 -0
  208. package/build/services/store/providers/postgres/postgres.js +1244 -0
  209. package/build/services/store/providers/redis/_base.d.ts +137 -0
  210. package/build/services/store/providers/redis/_base.js +980 -0
  211. package/build/services/store/providers/redis/ioredis.d.ts +20 -0
  212. package/build/services/store/providers/redis/ioredis.js +180 -0
  213. package/build/services/store/providers/redis/redis.d.ts +18 -0
  214. package/build/services/store/providers/redis/redis.js +199 -0
  215. package/build/services/store/providers/store-initializable.d.ts +5 -0
  216. package/build/services/store/providers/store-initializable.js +2 -0
  217. package/build/services/stream/factory.d.ts +8 -0
  218. package/build/services/stream/factory.js +37 -0
  219. package/build/services/stream/index.d.ts +69 -0
  220. package/build/services/stream/index.js +11 -0
  221. package/build/services/stream/providers/nats/nats.d.ts +60 -0
  222. package/build/services/stream/providers/nats/nats.js +225 -0
  223. package/build/services/stream/providers/postgres/kvtables.d.ts +3 -0
  224. package/build/services/stream/providers/postgres/kvtables.js +146 -0
  225. package/build/services/stream/providers/postgres/postgres.d.ts +107 -0
  226. package/build/services/stream/providers/postgres/postgres.js +519 -0
  227. package/build/services/stream/providers/redis/ioredis.d.ts +61 -0
  228. package/build/services/stream/providers/redis/ioredis.js +272 -0
  229. package/build/services/stream/providers/redis/redis.d.ts +61 -0
  230. package/build/services/stream/providers/redis/redis.js +305 -0
  231. package/build/services/stream/providers/stream-initializable.d.ts +4 -0
  232. package/build/services/stream/providers/stream-initializable.js +2 -0
  233. package/build/services/sub/factory.d.ts +7 -0
  234. package/build/services/sub/factory.js +29 -0
  235. package/build/services/sub/index.d.ts +22 -0
  236. package/build/services/sub/index.js +10 -0
  237. package/build/services/sub/providers/nats/nats.d.ts +19 -0
  238. package/build/services/sub/providers/nats/nats.js +105 -0
  239. package/build/services/sub/providers/postgres/postgres.d.ts +19 -0
  240. package/build/services/sub/providers/postgres/postgres.js +92 -0
  241. package/build/services/sub/providers/redis/ioredis.d.ts +17 -0
  242. package/build/services/sub/providers/redis/ioredis.js +81 -0
  243. package/build/services/sub/providers/redis/redis.d.ts +17 -0
  244. package/build/services/sub/providers/redis/redis.js +72 -0
  245. package/build/services/task/index.d.ts +48 -0
  246. package/build/services/task/index.js +253 -0
  247. package/build/services/telemetry/index.d.ts +52 -0
  248. package/build/services/telemetry/index.js +306 -0
  249. package/build/services/worker/index.d.ts +77 -0
  250. package/build/services/worker/index.js +197 -0
  251. package/package.json +1 -1
  252. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  253. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  254. package/typedoc.json +0 -47
  255. package/types/activity.ts +0 -268
  256. package/types/app.ts +0 -20
  257. package/types/async.ts +0 -6
  258. package/types/cache.ts +0 -1
  259. package/types/collator.ts +0 -9
  260. package/types/error.ts +0 -56
  261. package/types/exporter.ts +0 -102
  262. package/types/hook.ts +0 -44
  263. package/types/hotmesh.ts +0 -314
  264. package/types/index.ts +0 -306
  265. package/types/job.ts +0 -233
  266. package/types/logger.ts +0 -8
  267. package/types/manifest.ts +0 -70
  268. package/types/map.ts +0 -5
  269. package/types/memflow.ts +0 -645
  270. package/types/meshcall.ts +0 -235
  271. package/types/meshdata.ts +0 -278
  272. package/types/ms.d.ts +0 -7
  273. package/types/nats.ts +0 -270
  274. package/types/pipe.ts +0 -90
  275. package/types/postgres.ts +0 -114
  276. package/types/provider.ts +0 -161
  277. package/types/quorum.ts +0 -167
  278. package/types/redis.ts +0 -404
  279. package/types/serializer.ts +0 -40
  280. package/types/stats.ts +0 -117
  281. package/types/stream.ts +0 -231
  282. package/types/task.ts +0 -7
  283. package/types/telemetry.ts +0 -16
  284. package/types/transition.ts +0 -20
@@ -0,0 +1,20 @@
1
+ import { IORedisClientType as RedisClientType, IORedisMultiType as RedisMultiType } from '../../../../types/redis';
2
+ import { StoreInitializable } from '../store-initializable';
3
+ import { RedisStoreBase } from './_base';
4
+ declare class IORedisStoreService extends RedisStoreBase<RedisClientType, RedisMultiType> implements StoreInitializable {
5
+ constructor(storeClient: RedisClientType);
6
+ /**
7
+ * When in cluster mode, the transact wrapper only
8
+ * sends commands to the same node/shard if they share a key.
9
+ * All other commands are sent simultaneouslyusing Promise.all
10
+ * and are then collated. this is effectiely a wrapper for
11
+ * `multi` but is closer to `pipeline` in terms of usage when
12
+ * promises are used.
13
+ */
14
+ transact(): RedisMultiType;
15
+ exec(...args: any[]): Promise<string | string[] | string[][]>;
16
+ setnxex(key: string, value: string, expireSeconds: number): Promise<boolean>;
17
+ hGetAllResult(result: any): any;
18
+ addTaskQueues(keys: string[]): Promise<void>;
19
+ }
20
+ export { IORedisStoreService };
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IORedisStoreService = void 0;
4
+ const key_1 = require("../../../../modules/key");
5
+ const enums_1 = require("../../../../modules/enums");
6
+ const _base_1 = require("./_base");
7
+ class IORedisStoreService extends _base_1.RedisStoreBase {
8
+ constructor(storeClient) {
9
+ super(storeClient);
10
+ this.commands = {
11
+ get: 'get',
12
+ set: 'set',
13
+ setnx: 'setnx',
14
+ del: 'del',
15
+ expire: 'expire',
16
+ hset: 'hset',
17
+ hscan: 'hscan',
18
+ hsetnx: 'hsetnx',
19
+ hincrby: 'hincrby',
20
+ hdel: 'hdel',
21
+ hget: 'hget',
22
+ hmget: 'hmget',
23
+ hgetall: 'hgetall',
24
+ hincrbyfloat: 'hincrbyfloat',
25
+ zrank: 'zrank',
26
+ zrange: 'zrange',
27
+ zrangebyscore_withscores: 'zrangebyscore',
28
+ zrangebyscore: 'zrangebyscore',
29
+ zrem: 'zrem',
30
+ zadd: 'zadd',
31
+ lmove: 'lmove',
32
+ lpop: 'lpop',
33
+ lrange: 'lrange',
34
+ rename: 'rename',
35
+ rpush: 'rpush',
36
+ scan: 'scan',
37
+ xack: 'xack',
38
+ xdel: 'xdel',
39
+ };
40
+ }
41
+ /**
42
+ * When in cluster mode, the transact wrapper only
43
+ * sends commands to the same node/shard if they share a key.
44
+ * All other commands are sent simultaneouslyusing Promise.all
45
+ * and are then collated. this is effectiely a wrapper for
46
+ * `multi` but is closer to `pipeline` in terms of usage when
47
+ * promises are used.
48
+ */
49
+ transact() {
50
+ const my = this;
51
+ if (enums_1.HMSH_IS_CLUSTER) {
52
+ const commands = [];
53
+ const addCommand = (command, args) => {
54
+ commands.push({ command, args });
55
+ return multiInstance;
56
+ };
57
+ const multiInstance = {
58
+ sendCommand(command) {
59
+ return my.storeClient.sendCommand(command);
60
+ },
61
+ async exec() {
62
+ if (commands.length === 0)
63
+ return [];
64
+ const sameKey = commands.every((cmd) => {
65
+ return cmd.args[0] === commands[0].args[0];
66
+ });
67
+ if (sameKey) {
68
+ const multi = my.storeClient.multi();
69
+ commands.forEach((cmd) => multi[cmd.command](...cmd.args));
70
+ const results = await multi.exec();
71
+ return results.map((item) => item);
72
+ }
73
+ else {
74
+ return Promise.all(commands.map((cmd) => my.storeClient[cmd.command](...cmd.args)));
75
+ }
76
+ },
77
+ xadd(key, id, fields, message) {
78
+ return addCommand('xadd', [key, id, fields, message]);
79
+ },
80
+ xack(key, group, id) {
81
+ return addCommand('xack', [key, group, id]);
82
+ },
83
+ xdel(key, id) {
84
+ return addCommand('xdel', [key, id]);
85
+ },
86
+ xlen(key) {
87
+ return addCommand('xlen', [key]);
88
+ },
89
+ xpending(key, group, start, end, count, consumer) {
90
+ return addCommand('xpending', [
91
+ key,
92
+ group,
93
+ start,
94
+ end,
95
+ count,
96
+ consumer,
97
+ ]);
98
+ },
99
+ xclaim(key, group, consumer, minIdleTime, id, ...args) {
100
+ return addCommand('xclaim', [
101
+ key,
102
+ group,
103
+ consumer,
104
+ minIdleTime,
105
+ id,
106
+ ...args,
107
+ ]);
108
+ },
109
+ del(key) {
110
+ return addCommand('del', [key]);
111
+ },
112
+ expire: function (key, seconds) {
113
+ return addCommand('expire', [key, seconds]);
114
+ },
115
+ hdel(key, itemId) {
116
+ return addCommand('hdel', [key, itemId]);
117
+ },
118
+ hget(key, itemId) {
119
+ return addCommand('hget', [key, itemId]);
120
+ },
121
+ hgetall(key) {
122
+ return addCommand('hgetall', [key]);
123
+ },
124
+ hincrbyfloat(key, itemId, value) {
125
+ return addCommand('hincrbyfloat', [key, itemId, value]);
126
+ },
127
+ hmget(key, itemIds) {
128
+ return addCommand('hmget', [key, itemIds]);
129
+ },
130
+ hset(key, values) {
131
+ return addCommand('hset', [key, values]);
132
+ },
133
+ lrange(key, start, end) {
134
+ return addCommand('lrange', [key, start, end]);
135
+ },
136
+ rpush(key, value) {
137
+ return addCommand('rpush', [key, value]);
138
+ },
139
+ zadd(...args) {
140
+ return addCommand('zadd', args);
141
+ },
142
+ xgroup(command, key, groupName, id, mkStream) {
143
+ return addCommand('xgroup', [command, key, groupName, id, mkStream]);
144
+ },
145
+ };
146
+ return multiInstance;
147
+ }
148
+ return this.storeClient.multi();
149
+ }
150
+ async exec(...args) {
151
+ const response = await this.storeClient.call.apply(this.storeClient, args);
152
+ if (typeof response === 'string') {
153
+ return response;
154
+ }
155
+ else if (Array.isArray(response)) {
156
+ if (Array.isArray(response[0])) {
157
+ return response;
158
+ }
159
+ return response;
160
+ }
161
+ return response;
162
+ }
163
+ async setnxex(key, value, expireSeconds) {
164
+ const status = await this.storeClient[this.commands.set](key, value, 'NX', 'EX', expireSeconds.toString());
165
+ return this.isSuccessful(status);
166
+ }
167
+ hGetAllResult(result) {
168
+ //ioredis response signature is [null, {}] or [null, null]
169
+ return result[1];
170
+ }
171
+ async addTaskQueues(keys) {
172
+ const multi = this.storeClient.multi();
173
+ const zsetKey = this.mintKey(key_1.KeyType.WORK_ITEMS, { appId: this.appId });
174
+ for (const key of keys) {
175
+ multi.zadd(zsetKey, 'NX', Date.now(), key);
176
+ }
177
+ await multi.exec();
178
+ }
179
+ }
180
+ exports.IORedisStoreService = IORedisStoreService;
@@ -0,0 +1,18 @@
1
+ import { StoreInitializable } from '../store-initializable';
2
+ import { RedisRedisClientType as RedisClientType, RedisRedisMultiType as RedisMultiType } from '../../../../types/redis';
3
+ import { RedisStoreBase } from './_base';
4
+ declare class RedisStoreService extends RedisStoreBase<RedisClientType, RedisMultiType> implements StoreInitializable {
5
+ constructor(storeClient: RedisClientType);
6
+ /**
7
+ * When in cluster mode, the transact wrapper only
8
+ * sends commands to the same node/shard if they share a key.
9
+ * All other commands are sent simultaneouslyusing Promise.all
10
+ * and are then collated
11
+ */
12
+ transact(): RedisMultiType;
13
+ exec(...args: any[]): Promise<string | string[] | string[][]>;
14
+ setnxex(key: string, value: string, expireSeconds: number): Promise<boolean>;
15
+ zAdd(key: string, score: number | string, value: string | number, redisMulti?: RedisMultiType): Promise<any>;
16
+ zRangeByScore(key: string, score: number | string, value: string | number): Promise<string | null>;
17
+ }
18
+ export { RedisStoreService };
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedisStoreService = void 0;
4
+ const enums_1 = require("../../../../modules/enums");
5
+ const _base_1 = require("./_base");
6
+ class RedisStoreService extends _base_1.RedisStoreBase {
7
+ constructor(storeClient) {
8
+ super(storeClient);
9
+ this.commands = {
10
+ get: 'GET',
11
+ set: 'SET',
12
+ setnx: 'SETNX',
13
+ del: 'DEL',
14
+ expire: 'EXPIRE',
15
+ hscan: 'HSCAN',
16
+ hset: 'HSET',
17
+ hsetnx: 'HSETNX',
18
+ hincrby: 'HINCRBY',
19
+ hdel: 'HDEL',
20
+ hget: 'HGET',
21
+ hmget: 'HMGET',
22
+ hgetall: 'HGETALL',
23
+ hincrbyfloat: 'HINCRBYFLOAT',
24
+ zrange: 'ZRANGE',
25
+ zrangebyscore_withscores: 'ZRANGEBYSCORE_WITHSCORES',
26
+ zrangebyscore: 'ZRANGEBYSCORE',
27
+ zrem: 'ZREM',
28
+ zadd: 'ZADD',
29
+ lmove: 'LMOVE',
30
+ lrange: 'LRANGE',
31
+ lpop: 'LPOP',
32
+ rename: 'RENAME',
33
+ rpush: 'RPUSH',
34
+ scan: 'SCAN',
35
+ xack: 'XACK',
36
+ xdel: 'XDEL',
37
+ xlen: 'XLEN',
38
+ };
39
+ }
40
+ /**
41
+ * When in cluster mode, the transact wrapper only
42
+ * sends commands to the same node/shard if they share a key.
43
+ * All other commands are sent simultaneouslyusing Promise.all
44
+ * and are then collated
45
+ */
46
+ transact() {
47
+ const my = this;
48
+ if (enums_1.HMSH_IS_CLUSTER) {
49
+ const commands = [];
50
+ const addCommand = (command, args) => {
51
+ commands.push({ command: command.toUpperCase(), args });
52
+ return multiInstance;
53
+ };
54
+ const multiInstance = {
55
+ sendCommand(command, ...args) {
56
+ return my.storeClient.sendCommand([command, ...args]);
57
+ },
58
+ async exec() {
59
+ if (commands.length === 0)
60
+ return [];
61
+ const sameKey = commands.every((cmd) => {
62
+ return cmd.args[0] === commands[0].args[0];
63
+ });
64
+ if (sameKey) {
65
+ const multi = my.storeClient.multi();
66
+ commands.forEach((cmd) => {
67
+ if (cmd.command === 'ZADD') {
68
+ return multi.ZADD(cmd.args[0], cmd.args[1], cmd.args[2]);
69
+ }
70
+ return multi[cmd.command](...cmd.args);
71
+ });
72
+ const results = await multi.exec();
73
+ return results.map((item) => item);
74
+ }
75
+ else {
76
+ return Promise.all(commands.map((cmd) => {
77
+ if (cmd.command === 'ZADD') {
78
+ return my.storeClient.ZADD(cmd.args[0], cmd.args[1], cmd.args[2]);
79
+ }
80
+ return my.storeClient[cmd.command](...cmd.args);
81
+ }));
82
+ }
83
+ },
84
+ XADD(key, id, fields, message) {
85
+ return addCommand('XADD', [key, id, fields, message]);
86
+ },
87
+ XACK(key, group, id) {
88
+ return addCommand('XACK', [key, group, id]);
89
+ },
90
+ XDEL(key, id) {
91
+ return addCommand('XDEL', [key, id]);
92
+ },
93
+ XLEN(key) {
94
+ return addCommand('XLEN', [key]);
95
+ },
96
+ XCLAIM(key, group, consumer, minIdleTime, id, ...args) {
97
+ return addCommand('XCLAIM', [
98
+ key,
99
+ group,
100
+ consumer,
101
+ minIdleTime,
102
+ id,
103
+ ...args,
104
+ ]);
105
+ },
106
+ XPENDING(key, group, start, end, count, consumer) {
107
+ return addCommand('XPENDING', [
108
+ key,
109
+ group,
110
+ start,
111
+ end,
112
+ count,
113
+ consumer,
114
+ ]);
115
+ },
116
+ DEL: function (key) {
117
+ return addCommand('DEL', [key]);
118
+ },
119
+ EXPIRE: function (key, seconds) {
120
+ return addCommand('EXPIRE', [key, seconds]);
121
+ },
122
+ HDEL(key, itemId) {
123
+ return addCommand('HDEL', [key, itemId]);
124
+ },
125
+ HGET(key, itemId) {
126
+ return addCommand('HGET', [key, itemId]);
127
+ },
128
+ HGETALL(key) {
129
+ return addCommand('HGETALL', [key]);
130
+ },
131
+ HINCRBYFLOAT(key, itemId, value) {
132
+ return addCommand('HINCRBYFLOAT', [key, itemId, value]);
133
+ },
134
+ HMGET(key, itemIds) {
135
+ return addCommand('HMGET', [key, itemIds]);
136
+ },
137
+ HSET(key, values) {
138
+ return addCommand('HSET', [key, values]);
139
+ },
140
+ LRANGE(key, start, end) {
141
+ return addCommand('LRANGE', [key, start, end]);
142
+ },
143
+ RPUSH(key, items) {
144
+ return addCommand('RPUSH', [key, items]);
145
+ },
146
+ ZADD(key, args, opts) {
147
+ return addCommand('ZADD', [key, args, opts]);
148
+ },
149
+ XGROUP(command, key, groupName, id, mkStream) {
150
+ return addCommand('XGROUP', [command, key, groupName, id, mkStream]);
151
+ },
152
+ EXISTS: function (key) {
153
+ throw new Error('Function not implemented.');
154
+ },
155
+ HMPUSH: function (key, values) {
156
+ throw new Error('Function not implemented.');
157
+ },
158
+ LPUSH: function (key, items) {
159
+ throw new Error('Function not implemented.');
160
+ },
161
+ SET: function (key, value) {
162
+ throw new Error('Function not implemented.');
163
+ },
164
+ ZRANGE_WITHSCORES: function (key, start, end) {
165
+ throw new Error('Function not implemented.');
166
+ },
167
+ ZRANK: function (key, member) {
168
+ throw new Error('Function not implemented.');
169
+ },
170
+ ZSCORE: function (key, value) {
171
+ throw new Error('Function not implemented.');
172
+ },
173
+ };
174
+ return multiInstance;
175
+ }
176
+ return this.storeClient.multi();
177
+ }
178
+ async exec(...args) {
179
+ return await this.storeClient.sendCommand(args);
180
+ }
181
+ async setnxex(key, value, expireSeconds) {
182
+ const status = await this.storeClient[this.commands.set](key, value, { NX: true, EX: expireSeconds });
183
+ return this.isSuccessful(status);
184
+ }
185
+ async zAdd(key, score, value, redisMulti) {
186
+ return await (redisMulti || this.storeClient)[this.commands.zadd](key, {
187
+ score: score,
188
+ value: value.toString(),
189
+ });
190
+ }
191
+ async zRangeByScore(key, score, value) {
192
+ const result = await this.storeClient[this.commands.zrangebyscore](key, score, value);
193
+ if (result?.length > 0) {
194
+ return result[0];
195
+ }
196
+ return null;
197
+ }
198
+ }
199
+ exports.RedisStoreService = RedisStoreService;
@@ -0,0 +1,5 @@
1
+ import { ILogger } from '../../logger';
2
+ import { HotMeshApps } from '../../../types/hotmesh';
3
+ export interface StoreInitializable {
4
+ init(namespace: string, appId: string, logger: ILogger): Promise<HotMeshApps>;
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ import { ILogger } from '../logger';
2
+ import { ProviderClient, ProviderTransaction } from '../../types/provider';
3
+ import { StreamInitializable } from './providers/stream-initializable';
4
+ import { StreamService } from './index';
5
+ declare class StreamServiceFactory {
6
+ static init(provider: ProviderClient, storeProvider: ProviderClient, namespace: string, appId: string, logger: ILogger): Promise<StreamService<ProviderClient, ProviderTransaction> & StreamInitializable>;
7
+ }
8
+ export { StreamServiceFactory };
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StreamServiceFactory = void 0;
4
+ const utils_1 = require("../../modules/utils");
5
+ const ioredis_1 = require("./providers/redis/ioredis");
6
+ const redis_1 = require("./providers/redis/redis");
7
+ const nats_1 = require("./providers/nats/nats");
8
+ const postgres_1 = require("./providers/postgres/postgres");
9
+ class StreamServiceFactory {
10
+ static async init(provider, storeProvider, namespace, appId, logger) {
11
+ let service;
12
+ const providerType = (0, utils_1.identifyProvider)(provider);
13
+ if (providerType === 'nats') {
14
+ let storeProvider;
15
+ if ((0, utils_1.identifyProvider)(storeProvider) === 'redis') {
16
+ storeProvider = storeProvider;
17
+ }
18
+ else {
19
+ //ioredis
20
+ storeProvider = storeProvider;
21
+ }
22
+ service = new nats_1.NatsStreamService(provider, storeProvider);
23
+ }
24
+ else if (providerType === 'postgres') {
25
+ service = new postgres_1.PostgresStreamService(provider, storeProvider);
26
+ }
27
+ else if (providerType === 'redis') {
28
+ service = new redis_1.RedisStreamService(provider, storeProvider);
29
+ }
30
+ else if (providerType === 'ioredis') {
31
+ service = new ioredis_1.IORedisStreamService(provider, storeProvider);
32
+ } //etc register other providers here
33
+ await service.init(namespace, appId, logger);
34
+ return service;
35
+ }
36
+ }
37
+ exports.StreamServiceFactory = StreamServiceFactory;
@@ -0,0 +1,69 @@
1
+ import { ILogger } from '../logger';
2
+ import { PublishMessageConfig, StreamConfig, StreamMessage, StreamStats } from '../../types/stream';
3
+ import { StringAnyType } from '../../types';
4
+ import { KeyStoreParams, KeyType } from '../../modules/key';
5
+ import { ProviderClient, ProviderTransaction } from '../../types/provider';
6
+ export declare abstract class StreamService<ClientProvider extends ProviderClient, TransactionProvider extends ProviderTransaction> {
7
+ protected streamClient: ClientProvider;
8
+ protected storeClient: ProviderClient;
9
+ protected namespace: string;
10
+ protected logger: ILogger;
11
+ protected appId: string;
12
+ protected config: StreamConfig;
13
+ constructor(streamClient: ClientProvider, storeClient: ProviderClient, config?: StreamConfig);
14
+ abstract init(namespace: string, appId: string, logger: ILogger): Promise<void>;
15
+ abstract mintKey(type: KeyType, params: KeyStoreParams): string;
16
+ abstract createStream(streamName: string): Promise<boolean>;
17
+ abstract deleteStream(streamName: string): Promise<boolean>;
18
+ abstract createConsumerGroup(streamName: string, groupName: string): Promise<boolean>;
19
+ abstract deleteConsumerGroup(streamName: string, groupName: string): Promise<boolean>;
20
+ abstract publishMessages(streamName: string, messages: string[], options?: PublishMessageConfig): Promise<string[] | ProviderTransaction>;
21
+ abstract consumeMessages(streamName: string, groupName: string, consumerName: string, options?: {
22
+ batchSize?: number;
23
+ blockTimeout?: number;
24
+ autoAck?: boolean;
25
+ enableBackoff?: boolean;
26
+ initialBackoff?: number;
27
+ maxBackoff?: number;
28
+ maxRetries?: number;
29
+ enableNotifications?: boolean;
30
+ notificationCallback?: (messages: StreamMessage[]) => void;
31
+ }): Promise<StreamMessage[]>;
32
+ abstract transact(): ProviderTransaction;
33
+ abstract ackAndDelete(streamName: string, groupName: string, messageIds: string[], options?: StringAnyType): Promise<number>;
34
+ abstract acknowledgeMessages(streamName: string, groupName: string, messageIds: string[], options?: StringAnyType): Promise<number | TransactionProvider>;
35
+ abstract deleteMessages(streamName: string, groupName: string, messageIds: string[], options?: StringAnyType): Promise<number | TransactionProvider>;
36
+ abstract retryMessages(streamName: string, groupName: string, options?: {
37
+ consumerName?: string;
38
+ minIdleTime?: number;
39
+ messageIds?: string[];
40
+ delay?: number;
41
+ maxRetries?: number;
42
+ limit?: number;
43
+ }): Promise<StreamMessage[]>;
44
+ abstract getStreamStats(streamName: string): Promise<StreamStats>;
45
+ abstract getStreamDepth(streamName: string): Promise<number>;
46
+ abstract getStreamDepths(streamName: {
47
+ stream: string;
48
+ }[]): Promise<{
49
+ stream: string;
50
+ depth: number;
51
+ }[]>;
52
+ abstract trimStream(streamName: string, options: {
53
+ maxLen?: number;
54
+ maxAge?: number;
55
+ exactLimit?: boolean;
56
+ }): Promise<number>;
57
+ abstract getProviderSpecificFeatures(): {
58
+ supportsBatching: boolean;
59
+ supportsDeadLetterQueue: boolean;
60
+ supportsOrdering: boolean;
61
+ supportsTrimming: boolean;
62
+ supportsRetry: boolean;
63
+ supportsNotifications?: boolean;
64
+ maxMessageSize: number;
65
+ maxBatchSize: number;
66
+ };
67
+ stopNotificationConsumer?(streamName: string, groupName: string): Promise<void>;
68
+ cleanup?(): Promise<void>;
69
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StreamService = void 0;
4
+ class StreamService {
5
+ constructor(streamClient, storeClient, config = {}) {
6
+ this.streamClient = streamClient;
7
+ this.storeClient = storeClient;
8
+ this.config = config;
9
+ }
10
+ }
11
+ exports.StreamService = StreamService;
@@ -0,0 +1,60 @@
1
+ import { ILogger } from '../../../logger';
2
+ import { StreamService } from '../../index';
3
+ import { PublishMessageConfig, StreamConfig, StreamMessage, StreamStats } from '../../../../types/stream';
4
+ import { KeyStoreParams, StringAnyType } from '../../../../types';
5
+ import { NatsJetStreamType, NatsJetStreamManager as NatsJetStreamManagerType, NatsPubAckType, NatsClientType } from '../../../../types/nats';
6
+ import { KeyType } from '../../../../modules/key';
7
+ import { ProviderClient, ProviderTransaction } from '../../../../types/provider';
8
+ declare class NatsStreamService extends StreamService<NatsClientType, NatsPubAckType> {
9
+ jetstream: NatsJetStreamType;
10
+ jsm: NatsJetStreamManagerType;
11
+ constructor(streamClient: NatsClientType, storeClient: ProviderClient, config?: StreamConfig);
12
+ init(namespace: string, appId: string, logger: ILogger): Promise<void>;
13
+ mintKey(type: KeyType, params: KeyStoreParams): string;
14
+ transact(): ProviderTransaction;
15
+ createStream(streamName: string): Promise<boolean>;
16
+ deleteStream(streamName: string): Promise<boolean>;
17
+ createConsumerGroup(streamName: string, groupName: string): Promise<boolean>;
18
+ deleteConsumerGroup(streamName: string, groupName: string): Promise<boolean>;
19
+ publishMessages(streamName: string, messages: string[], options?: PublishMessageConfig): Promise<string[] | ProviderTransaction>;
20
+ consumeMessages(streamName: string, groupName: string, consumerName: string, options?: {
21
+ batchSize?: number;
22
+ blockTimeout?: number;
23
+ autoAck?: boolean;
24
+ }): Promise<StreamMessage[]>;
25
+ ackAndDelete(streamName: string, groupName: string, messageIds: string[]): Promise<number>;
26
+ acknowledgeMessages(streamName: string, groupName: string, messageIds: string[], options?: StringAnyType): Promise<number>;
27
+ deleteMessages(streamName: string, groupName: string, messageIds: string[], options?: StringAnyType): Promise<number>;
28
+ retryMessages(streamName: string, groupName: string, options?: {
29
+ consumerName?: string;
30
+ minIdleTime?: number;
31
+ messageIds?: string[];
32
+ delay?: number;
33
+ maxRetries?: number;
34
+ limit?: number;
35
+ }): Promise<StreamMessage[]>;
36
+ getStreamStats(streamName: string): Promise<StreamStats>;
37
+ getStreamDepth(streamName: string): Promise<number>;
38
+ getStreamDepths(streamNames: {
39
+ stream: string;
40
+ }[]): Promise<{
41
+ stream: string;
42
+ depth: number;
43
+ }[]>;
44
+ trimStream(streamName: string, options: {
45
+ maxLen?: number;
46
+ maxAge?: number;
47
+ exactLimit?: boolean;
48
+ }): Promise<number>;
49
+ getProviderSpecificFeatures(): {
50
+ supportsBatching: boolean;
51
+ supportsDeadLetterQueue: boolean;
52
+ supportsOrdering: boolean;
53
+ supportsTrimming: boolean;
54
+ supportsRetry: boolean;
55
+ supportsNotifications: boolean;
56
+ maxMessageSize: number;
57
+ maxBatchSize: number;
58
+ };
59
+ }
60
+ export { NatsStreamService };