@hotmeshio/hotmesh 0.0.7 → 0.0.9

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 (365) hide show
  1. package/LICENSE +4 -7
  2. package/README.md +37 -46
  3. package/build/{esm/package.json → package.json} +6 -11
  4. package/build/{cjs/services → services}/activities/activity.d.ts +6 -0
  5. package/build/{cjs/services → services}/activities/activity.js +83 -7
  6. package/build/{cjs/services → services}/activities/await.d.ts +2 -2
  7. package/build/{cjs/services → services}/activities/await.js +5 -5
  8. package/build/services/activities/cycle.d.ts +19 -0
  9. package/build/services/activities/cycle.js +77 -0
  10. package/build/{esm/services → services}/activities/index.d.ts +4 -2
  11. package/build/{cjs/services → services}/activities/index.js +4 -2
  12. package/build/{cjs/services → services}/activities/worker.d.ts +0 -8
  13. package/build/services/activities/worker.js +73 -0
  14. package/build/{esm/services → services}/collator/index.d.ts +18 -1
  15. package/build/{cjs/services → services}/collator/index.js +41 -11
  16. package/build/{cjs/services → services}/durable/factory.js +17 -1
  17. package/build/{cjs/services → services}/durable/native.js +2 -2
  18. package/build/{cjs/services → services}/durable/worker.d.ts +2 -3
  19. package/build/{esm/services → services}/durable/worker.js +35 -37
  20. package/build/{cjs/services → services}/durable/workflow.js +11 -2
  21. package/build/{cjs/services → services}/mapper/index.js +3 -0
  22. package/build/{cjs/services → services}/signaler/stream.js +0 -1
  23. package/build/{esm/types → types}/activity.d.ts +7 -2
  24. package/build/{cjs/types → types}/durable.d.ts +4 -6
  25. package/build/{cjs/types → types}/index.d.ts +1 -1
  26. package/package.json +6 -11
  27. package/services/activities/activity.ts +90 -7
  28. package/services/activities/await.ts +5 -5
  29. package/services/activities/cycle.ts +96 -0
  30. package/services/activities/index.ts +4 -2
  31. package/services/activities/worker.ts +2 -93
  32. package/services/collator/index.ts +43 -11
  33. package/services/durable/factory.ts +17 -1
  34. package/services/durable/native.ts +2 -2
  35. package/services/durable/worker.ts +19 -22
  36. package/services/durable/workflow.ts +11 -2
  37. package/services/mapper/index.ts +3 -0
  38. package/services/signaler/stream.ts +0 -1
  39. package/types/activity.ts +8 -1
  40. package/types/durable.ts +4 -4
  41. package/types/index.ts +1 -0
  42. package/build/cjs/package.json +0 -80
  43. package/build/cjs/services/activities/index.d.ts +0 -15
  44. package/build/cjs/services/activities/worker.js +0 -159
  45. package/build/cjs/services/collator/index.d.ts +0 -56
  46. package/build/cjs/services/durable/worker.js +0 -298
  47. package/build/cjs/types/activity.d.ts +0 -87
  48. package/build/esm/index.d.ts +0 -4
  49. package/build/esm/index.js +0 -3
  50. package/build/esm/modules/errors.d.ts +0 -28
  51. package/build/esm/modules/errors.js +0 -41
  52. package/build/esm/modules/key.d.ts +0 -75
  53. package/build/esm/modules/key.js +0 -111
  54. package/build/esm/modules/utils.d.ts +0 -34
  55. package/build/esm/modules/utils.js +0 -154
  56. package/build/esm/services/activities/activity.d.ts +0 -61
  57. package/build/esm/services/activities/activity.js +0 -410
  58. package/build/esm/services/activities/await.d.ts +0 -16
  59. package/build/esm/services/activities/await.js +0 -140
  60. package/build/esm/services/activities/emit.d.ts +0 -9
  61. package/build/esm/services/activities/emit.js +0 -10
  62. package/build/esm/services/activities/index.js +0 -14
  63. package/build/esm/services/activities/iterate.d.ts +0 -9
  64. package/build/esm/services/activities/iterate.js +0 -10
  65. package/build/esm/services/activities/trigger.d.ts +0 -22
  66. package/build/esm/services/activities/trigger.js +0 -158
  67. package/build/esm/services/activities/worker.d.ts +0 -19
  68. package/build/esm/services/activities/worker.js +0 -156
  69. package/build/esm/services/collator/index.js +0 -191
  70. package/build/esm/services/compiler/deployer.d.ts +0 -36
  71. package/build/esm/services/compiler/deployer.js +0 -423
  72. package/build/esm/services/compiler/index.d.ts +0 -30
  73. package/build/esm/services/compiler/index.js +0 -82
  74. package/build/esm/services/compiler/validator.d.ts +0 -32
  75. package/build/esm/services/compiler/validator.js +0 -131
  76. package/build/esm/services/connector/clients/ioredis.d.ts +0 -13
  77. package/build/esm/services/connector/clients/ioredis.js +0 -47
  78. package/build/esm/services/connector/clients/redis.d.ts +0 -13
  79. package/build/esm/services/connector/clients/redis.js +0 -59
  80. package/build/esm/services/connector/index.d.ts +0 -5
  81. package/build/esm/services/connector/index.js +0 -27
  82. package/build/esm/services/dimension/index.d.ts +0 -29
  83. package/build/esm/services/dimension/index.js +0 -32
  84. package/build/esm/services/durable/asyncLocalStorage.d.ts +0 -3
  85. package/build/esm/services/durable/asyncLocalStorage.js +0 -2
  86. package/build/esm/services/durable/client.d.ts +0 -15
  87. package/build/esm/services/durable/client.js +0 -114
  88. package/build/esm/services/durable/connection.d.ts +0 -4
  89. package/build/esm/services/durable/connection.js +0 -47
  90. package/build/esm/services/durable/factory.d.ts +0 -3
  91. package/build/esm/services/durable/factory.js +0 -119
  92. package/build/esm/services/durable/handle.d.ts +0 -8
  93. package/build/esm/services/durable/handle.js +0 -34
  94. package/build/esm/services/durable/index.d.ts +0 -57
  95. package/build/esm/services/durable/index.js +0 -55
  96. package/build/esm/services/durable/native.d.ts +0 -4
  97. package/build/esm/services/durable/native.js +0 -43
  98. package/build/esm/services/durable/worker.d.ts +0 -37
  99. package/build/esm/services/durable/workflow.d.ts +0 -6
  100. package/build/esm/services/durable/workflow.js +0 -128
  101. package/build/esm/services/engine/index.d.ts +0 -82
  102. package/build/esm/services/engine/index.js +0 -522
  103. package/build/esm/services/hotmesh/index.d.ts +0 -45
  104. package/build/esm/services/hotmesh/index.js +0 -131
  105. package/build/esm/services/logger/index.d.ts +0 -17
  106. package/build/esm/services/logger/index.js +0 -70
  107. package/build/esm/services/mapper/index.d.ts +0 -24
  108. package/build/esm/services/mapper/index.js +0 -69
  109. package/build/esm/services/pipe/functions/array.d.ts +0 -24
  110. package/build/esm/services/pipe/functions/array.js +0 -66
  111. package/build/esm/services/pipe/functions/bitwise.d.ts +0 -9
  112. package/build/esm/services/pipe/functions/bitwise.js +0 -21
  113. package/build/esm/services/pipe/functions/conditional.d.ts +0 -10
  114. package/build/esm/services/pipe/functions/conditional.js +0 -24
  115. package/build/esm/services/pipe/functions/date.d.ts +0 -57
  116. package/build/esm/services/pipe/functions/date.js +0 -164
  117. package/build/esm/services/pipe/functions/index.d.ts +0 -25
  118. package/build/esm/services/pipe/functions/index.js +0 -24
  119. package/build/esm/services/pipe/functions/json.d.ts +0 -5
  120. package/build/esm/services/pipe/functions/json.js +0 -9
  121. package/build/esm/services/pipe/functions/math.d.ts +0 -38
  122. package/build/esm/services/pipe/functions/math.js +0 -108
  123. package/build/esm/services/pipe/functions/number.d.ts +0 -25
  124. package/build/esm/services/pipe/functions/number.js +0 -130
  125. package/build/esm/services/pipe/functions/object.d.ts +0 -22
  126. package/build/esm/services/pipe/functions/object.js +0 -60
  127. package/build/esm/services/pipe/functions/string.d.ts +0 -23
  128. package/build/esm/services/pipe/functions/string.js +0 -66
  129. package/build/esm/services/pipe/functions/symbol.d.ts +0 -12
  130. package/build/esm/services/pipe/functions/symbol.js +0 -30
  131. package/build/esm/services/pipe/functions/unary.d.ts +0 -7
  132. package/build/esm/services/pipe/functions/unary.js +0 -15
  133. package/build/esm/services/pipe/index.d.ts +0 -30
  134. package/build/esm/services/pipe/index.js +0 -122
  135. package/build/esm/services/quorum/index.d.ts +0 -34
  136. package/build/esm/services/quorum/index.js +0 -144
  137. package/build/esm/services/reporter/index.d.ts +0 -47
  138. package/build/esm/services/reporter/index.js +0 -327
  139. package/build/esm/services/serializer/index.d.ts +0 -41
  140. package/build/esm/services/serializer/index.js +0 -251
  141. package/build/esm/services/signaler/store.d.ts +0 -15
  142. package/build/esm/services/signaler/store.js +0 -50
  143. package/build/esm/services/signaler/stream.d.ts +0 -43
  144. package/build/esm/services/signaler/stream.js +0 -315
  145. package/build/esm/services/store/cache.d.ts +0 -66
  146. package/build/esm/services/store/cache.js +0 -124
  147. package/build/esm/services/store/clients/ioredis.d.ts +0 -27
  148. package/build/esm/services/store/clients/ioredis.js +0 -93
  149. package/build/esm/services/store/clients/redis.d.ts +0 -29
  150. package/build/esm/services/store/clients/redis.js +0 -140
  151. package/build/esm/services/store/index.d.ts +0 -88
  152. package/build/esm/services/store/index.js +0 -623
  153. package/build/esm/services/stream/clients/ioredis.d.ts +0 -23
  154. package/build/esm/services/stream/clients/ioredis.js +0 -112
  155. package/build/esm/services/stream/clients/redis.d.ts +0 -23
  156. package/build/esm/services/stream/clients/redis.js +0 -116
  157. package/build/esm/services/stream/index.d.ts +0 -21
  158. package/build/esm/services/stream/index.js +0 -6
  159. package/build/esm/services/sub/clients/ioredis.d.ts +0 -20
  160. package/build/esm/services/sub/clients/ioredis.js +0 -69
  161. package/build/esm/services/sub/clients/redis.d.ts +0 -20
  162. package/build/esm/services/sub/clients/redis.js +0 -60
  163. package/build/esm/services/sub/index.d.ts +0 -18
  164. package/build/esm/services/sub/index.js +0 -6
  165. package/build/esm/services/task/index.d.ts +0 -18
  166. package/build/esm/services/task/index.js +0 -70
  167. package/build/esm/services/telemetry/index.d.ts +0 -49
  168. package/build/esm/services/telemetry/index.js +0 -217
  169. package/build/esm/services/worker/index.d.ts +0 -30
  170. package/build/esm/services/worker/index.js +0 -102
  171. package/build/esm/types/activity.js +0 -1
  172. package/build/esm/types/app.d.ts +0 -16
  173. package/build/esm/types/app.js +0 -1
  174. package/build/esm/types/async.d.ts +0 -5
  175. package/build/esm/types/async.js +0 -1
  176. package/build/esm/types/cache.d.ts +0 -1
  177. package/build/esm/types/cache.js +0 -1
  178. package/build/esm/types/collator.d.ts +0 -8
  179. package/build/esm/types/collator.js +0 -8
  180. package/build/esm/types/durable.d.ts +0 -59
  181. package/build/esm/types/durable.js +0 -1
  182. package/build/esm/types/hook.d.ts +0 -31
  183. package/build/esm/types/hook.js +0 -6
  184. package/build/esm/types/hotmesh.d.ts +0 -82
  185. package/build/esm/types/hotmesh.js +0 -1
  186. package/build/esm/types/index.d.ts +0 -20
  187. package/build/esm/types/index.js +0 -5
  188. package/build/esm/types/ioredisclient.d.ts +0 -5
  189. package/build/esm/types/ioredisclient.js +0 -2
  190. package/build/esm/types/job.d.ts +0 -50
  191. package/build/esm/types/job.js +0 -1
  192. package/build/esm/types/logger.d.ts +0 -6
  193. package/build/esm/types/logger.js +0 -1
  194. package/build/esm/types/map.d.ts +0 -4
  195. package/build/esm/types/map.js +0 -1
  196. package/build/esm/types/pipe.d.ts +0 -4
  197. package/build/esm/types/pipe.js +0 -1
  198. package/build/esm/types/quorum.d.ts +0 -46
  199. package/build/esm/types/quorum.js +0 -1
  200. package/build/esm/types/redis.d.ts +0 -8
  201. package/build/esm/types/redis.js +0 -1
  202. package/build/esm/types/redisclient.d.ts +0 -25
  203. package/build/esm/types/redisclient.js +0 -1
  204. package/build/esm/types/serializer.d.ts +0 -33
  205. package/build/esm/types/serializer.js +0 -1
  206. package/build/esm/types/stats.d.ts +0 -83
  207. package/build/esm/types/stats.js +0 -1
  208. package/build/esm/types/stream.d.ts +0 -67
  209. package/build/esm/types/stream.js +0 -22
  210. package/build/esm/types/telemetry.d.ts +0 -1
  211. package/build/esm/types/telemetry.js +0 -1
  212. package/build/esm/types/transition.d.ts +0 -17
  213. package/build/esm/types/transition.js +0 -1
  214. package/tsconfig.cjs.json +0 -8
  215. package/tsconfig.esm.json +0 -9
  216. /package/build/{cjs/index.d.ts → index.d.ts} +0 -0
  217. /package/build/{cjs/index.js → index.js} +0 -0
  218. /package/build/{cjs/modules → modules}/errors.d.ts +0 -0
  219. /package/build/{cjs/modules → modules}/errors.js +0 -0
  220. /package/build/{cjs/modules → modules}/key.d.ts +0 -0
  221. /package/build/{cjs/modules → modules}/key.js +0 -0
  222. /package/build/{cjs/modules → modules}/utils.d.ts +0 -0
  223. /package/build/{cjs/modules → modules}/utils.js +0 -0
  224. /package/build/{cjs/services → services}/activities/emit.d.ts +0 -0
  225. /package/build/{cjs/services → services}/activities/emit.js +0 -0
  226. /package/build/{cjs/services → services}/activities/iterate.d.ts +0 -0
  227. /package/build/{cjs/services → services}/activities/iterate.js +0 -0
  228. /package/build/{cjs/services → services}/activities/trigger.d.ts +0 -0
  229. /package/build/{cjs/services → services}/activities/trigger.js +0 -0
  230. /package/build/{cjs/services → services}/compiler/deployer.d.ts +0 -0
  231. /package/build/{cjs/services → services}/compiler/deployer.js +0 -0
  232. /package/build/{cjs/services → services}/compiler/index.d.ts +0 -0
  233. /package/build/{cjs/services → services}/compiler/index.js +0 -0
  234. /package/build/{cjs/services → services}/compiler/validator.d.ts +0 -0
  235. /package/build/{cjs/services → services}/compiler/validator.js +0 -0
  236. /package/build/{cjs/services → services}/connector/clients/ioredis.d.ts +0 -0
  237. /package/build/{cjs/services → services}/connector/clients/ioredis.js +0 -0
  238. /package/build/{cjs/services → services}/connector/clients/redis.d.ts +0 -0
  239. /package/build/{cjs/services → services}/connector/clients/redis.js +0 -0
  240. /package/build/{cjs/services → services}/connector/index.d.ts +0 -0
  241. /package/build/{cjs/services → services}/connector/index.js +0 -0
  242. /package/build/{cjs/services → services}/dimension/index.d.ts +0 -0
  243. /package/build/{cjs/services → services}/dimension/index.js +0 -0
  244. /package/build/{cjs/services → services}/durable/asyncLocalStorage.d.ts +0 -0
  245. /package/build/{cjs/services → services}/durable/asyncLocalStorage.js +0 -0
  246. /package/build/{cjs/services → services}/durable/client.d.ts +0 -0
  247. /package/build/{cjs/services → services}/durable/client.js +0 -0
  248. /package/build/{cjs/services → services}/durable/connection.d.ts +0 -0
  249. /package/build/{cjs/services → services}/durable/connection.js +0 -0
  250. /package/build/{cjs/services → services}/durable/factory.d.ts +0 -0
  251. /package/build/{cjs/services → services}/durable/handle.d.ts +0 -0
  252. /package/build/{cjs/services → services}/durable/handle.js +0 -0
  253. /package/build/{cjs/services → services}/durable/index.d.ts +0 -0
  254. /package/build/{cjs/services → services}/durable/index.js +0 -0
  255. /package/build/{cjs/services → services}/durable/native.d.ts +0 -0
  256. /package/build/{cjs/services → services}/durable/workflow.d.ts +0 -0
  257. /package/build/{cjs/services → services}/engine/index.d.ts +0 -0
  258. /package/build/{cjs/services → services}/engine/index.js +0 -0
  259. /package/build/{cjs/services → services}/hotmesh/index.d.ts +0 -0
  260. /package/build/{cjs/services → services}/hotmesh/index.js +0 -0
  261. /package/build/{cjs/services → services}/logger/index.d.ts +0 -0
  262. /package/build/{cjs/services → services}/logger/index.js +0 -0
  263. /package/build/{cjs/services → services}/mapper/index.d.ts +0 -0
  264. /package/build/{cjs/services → services}/pipe/functions/array.d.ts +0 -0
  265. /package/build/{cjs/services → services}/pipe/functions/array.js +0 -0
  266. /package/build/{cjs/services → services}/pipe/functions/bitwise.d.ts +0 -0
  267. /package/build/{cjs/services → services}/pipe/functions/bitwise.js +0 -0
  268. /package/build/{cjs/services → services}/pipe/functions/conditional.d.ts +0 -0
  269. /package/build/{cjs/services → services}/pipe/functions/conditional.js +0 -0
  270. /package/build/{cjs/services → services}/pipe/functions/date.d.ts +0 -0
  271. /package/build/{cjs/services → services}/pipe/functions/date.js +0 -0
  272. /package/build/{cjs/services → services}/pipe/functions/index.d.ts +0 -0
  273. /package/build/{cjs/services → services}/pipe/functions/index.js +0 -0
  274. /package/build/{cjs/services → services}/pipe/functions/json.d.ts +0 -0
  275. /package/build/{cjs/services → services}/pipe/functions/json.js +0 -0
  276. /package/build/{cjs/services → services}/pipe/functions/math.d.ts +0 -0
  277. /package/build/{cjs/services → services}/pipe/functions/math.js +0 -0
  278. /package/build/{cjs/services → services}/pipe/functions/number.d.ts +0 -0
  279. /package/build/{cjs/services → services}/pipe/functions/number.js +0 -0
  280. /package/build/{cjs/services → services}/pipe/functions/object.d.ts +0 -0
  281. /package/build/{cjs/services → services}/pipe/functions/object.js +0 -0
  282. /package/build/{cjs/services → services}/pipe/functions/string.d.ts +0 -0
  283. /package/build/{cjs/services → services}/pipe/functions/string.js +0 -0
  284. /package/build/{cjs/services → services}/pipe/functions/symbol.d.ts +0 -0
  285. /package/build/{cjs/services → services}/pipe/functions/symbol.js +0 -0
  286. /package/build/{cjs/services → services}/pipe/functions/unary.d.ts +0 -0
  287. /package/build/{cjs/services → services}/pipe/functions/unary.js +0 -0
  288. /package/build/{cjs/services → services}/pipe/index.d.ts +0 -0
  289. /package/build/{cjs/services → services}/pipe/index.js +0 -0
  290. /package/build/{cjs/services → services}/quorum/index.d.ts +0 -0
  291. /package/build/{cjs/services → services}/quorum/index.js +0 -0
  292. /package/build/{cjs/services → services}/reporter/index.d.ts +0 -0
  293. /package/build/{cjs/services → services}/reporter/index.js +0 -0
  294. /package/build/{cjs/services → services}/serializer/index.d.ts +0 -0
  295. /package/build/{cjs/services → services}/serializer/index.js +0 -0
  296. /package/build/{cjs/services → services}/signaler/store.d.ts +0 -0
  297. /package/build/{cjs/services → services}/signaler/store.js +0 -0
  298. /package/build/{cjs/services → services}/signaler/stream.d.ts +0 -0
  299. /package/build/{cjs/services → services}/store/cache.d.ts +0 -0
  300. /package/build/{cjs/services → services}/store/cache.js +0 -0
  301. /package/build/{cjs/services → services}/store/clients/ioredis.d.ts +0 -0
  302. /package/build/{cjs/services → services}/store/clients/ioredis.js +0 -0
  303. /package/build/{cjs/services → services}/store/clients/redis.d.ts +0 -0
  304. /package/build/{cjs/services → services}/store/clients/redis.js +0 -0
  305. /package/build/{cjs/services → services}/store/index.d.ts +0 -0
  306. /package/build/{cjs/services → services}/store/index.js +0 -0
  307. /package/build/{cjs/services → services}/stream/clients/ioredis.d.ts +0 -0
  308. /package/build/{cjs/services → services}/stream/clients/ioredis.js +0 -0
  309. /package/build/{cjs/services → services}/stream/clients/redis.d.ts +0 -0
  310. /package/build/{cjs/services → services}/stream/clients/redis.js +0 -0
  311. /package/build/{cjs/services → services}/stream/index.d.ts +0 -0
  312. /package/build/{cjs/services → services}/stream/index.js +0 -0
  313. /package/build/{cjs/services → services}/sub/clients/ioredis.d.ts +0 -0
  314. /package/build/{cjs/services → services}/sub/clients/ioredis.js +0 -0
  315. /package/build/{cjs/services → services}/sub/clients/redis.d.ts +0 -0
  316. /package/build/{cjs/services → services}/sub/clients/redis.js +0 -0
  317. /package/build/{cjs/services → services}/sub/index.d.ts +0 -0
  318. /package/build/{cjs/services → services}/sub/index.js +0 -0
  319. /package/build/{cjs/services → services}/task/index.d.ts +0 -0
  320. /package/build/{cjs/services → services}/task/index.js +0 -0
  321. /package/build/{cjs/services → services}/telemetry/index.d.ts +0 -0
  322. /package/build/{cjs/services → services}/telemetry/index.js +0 -0
  323. /package/build/{cjs/services → services}/worker/index.d.ts +0 -0
  324. /package/build/{cjs/services → services}/worker/index.js +0 -0
  325. /package/build/{cjs/types → types}/activity.js +0 -0
  326. /package/build/{cjs/types → types}/app.d.ts +0 -0
  327. /package/build/{cjs/types → types}/app.js +0 -0
  328. /package/build/{cjs/types → types}/async.d.ts +0 -0
  329. /package/build/{cjs/types → types}/async.js +0 -0
  330. /package/build/{cjs/types → types}/cache.d.ts +0 -0
  331. /package/build/{cjs/types → types}/cache.js +0 -0
  332. /package/build/{cjs/types → types}/collator.d.ts +0 -0
  333. /package/build/{cjs/types → types}/collator.js +0 -0
  334. /package/build/{cjs/types → types}/durable.js +0 -0
  335. /package/build/{cjs/types → types}/hook.d.ts +0 -0
  336. /package/build/{cjs/types → types}/hook.js +0 -0
  337. /package/build/{cjs/types → types}/hotmesh.d.ts +0 -0
  338. /package/build/{cjs/types → types}/hotmesh.js +0 -0
  339. /package/build/{cjs/types → types}/index.js +0 -0
  340. /package/build/{cjs/types → types}/ioredisclient.d.ts +0 -0
  341. /package/build/{cjs/types → types}/ioredisclient.js +0 -0
  342. /package/build/{cjs/types → types}/job.d.ts +0 -0
  343. /package/build/{cjs/types → types}/job.js +0 -0
  344. /package/build/{cjs/types → types}/logger.d.ts +0 -0
  345. /package/build/{cjs/types → types}/logger.js +0 -0
  346. /package/build/{cjs/types → types}/map.d.ts +0 -0
  347. /package/build/{cjs/types → types}/map.js +0 -0
  348. /package/build/{cjs/types → types}/pipe.d.ts +0 -0
  349. /package/build/{cjs/types → types}/pipe.js +0 -0
  350. /package/build/{cjs/types → types}/quorum.d.ts +0 -0
  351. /package/build/{cjs/types → types}/quorum.js +0 -0
  352. /package/build/{cjs/types → types}/redis.d.ts +0 -0
  353. /package/build/{cjs/types → types}/redis.js +0 -0
  354. /package/build/{cjs/types → types}/redisclient.d.ts +0 -0
  355. /package/build/{cjs/types → types}/redisclient.js +0 -0
  356. /package/build/{cjs/types → types}/serializer.d.ts +0 -0
  357. /package/build/{cjs/types → types}/serializer.js +0 -0
  358. /package/build/{cjs/types → types}/stats.d.ts +0 -0
  359. /package/build/{cjs/types → types}/stats.js +0 -0
  360. /package/build/{cjs/types → types}/stream.d.ts +0 -0
  361. /package/build/{cjs/types → types}/stream.js +0 -0
  362. /package/build/{cjs/types → types}/telemetry.d.ts +0 -0
  363. /package/build/{cjs/types → types}/telemetry.js +0 -0
  364. /package/build/{cjs/types → types}/transition.d.ts +0 -0
  365. /package/build/{cjs/types → types}/transition.js +0 -0
@@ -4,15 +4,36 @@ exports.CollatorService = void 0;
4
4
  const errors_1 = require("../../modules/errors");
5
5
  const collator_1 = require("../../types/collator");
6
6
  class CollatorService {
7
- static getDimensionalAddress(activity) {
7
+ /**
8
+ * returns the dimensional address (dad) for the target; due
9
+ * to the nature of the notary system, the dad for leg 2 entry
10
+ * must target the `0` index while leg 2 exit must target the
11
+ * current index (0)
12
+ */
13
+ static getDimensionalAddress(activity, isEntry = false) {
8
14
  let dad = activity.context.metadata.dad || activity.metadata.dad;
9
- //todo: unsure about this reset
10
- // if (dad && activity.leg === 2) {
11
- // console.log('setting dad index back to 0=>', dad);
12
- // dad = `${dad.substring(0, dad.lastIndexOf(','))},0`;
13
- // }
15
+ if (isEntry && dad && activity.leg === 2) {
16
+ dad = `${dad.substring(0, dad.lastIndexOf(','))},0`;
17
+ }
14
18
  return CollatorService.getDimensionsById([...activity.config.ancestors, activity.metadata.aid], dad);
15
19
  }
20
+ /**
21
+ * resolves the dimensional address for the
22
+ * ancestor in the graph to go back to. this address
23
+ * is determined by trimming the last digits from
24
+ * the `dad` (including the target).
25
+ * the target activity index is then set to `0`, so that
26
+ * the origin node can be queried for approval/entry.
27
+ */
28
+ static resolveReentryDimension(activity) {
29
+ const targetActivityId = activity.config.ancestor;
30
+ const ancestors = activity.config.ancestors;
31
+ const ancestorIndex = ancestors.indexOf(targetActivityId);
32
+ const dimensions = activity.metadata.dad.split(','); //e.g., `,0,0,1,0`
33
+ dimensions.length = ancestorIndex + 1;
34
+ dimensions.push('0');
35
+ return dimensions.join(',');
36
+ }
16
37
  static async notarizeEntry(activity, multi) {
17
38
  //decrement by -100_000_000_000_000
18
39
  const amount = await activity.store.collate(activity.context.metadata.jid, activity.metadata.aid, -100000000000000, this.getDimensionalAddress(activity), multi);
@@ -27,14 +48,21 @@ class CollatorService {
27
48
  //this.verifyInteger(amount, 1, 'exit');
28
49
  return amount;
29
50
  }
51
+ static async notarizeEarlyExit(activity, multi) {
52
+ //decrement the 2nd and 3rd digits to fully deactivate (`cycle` activities use this command to fully exit after leg 1) (should result in `888000000000000`)
53
+ return await activity.store.collate(activity.context.metadata.jid, activity.metadata.aid, -11000000000000, this.getDimensionalAddress(activity), multi);
54
+ }
55
+ ;
30
56
  static async notarizeEarlyCompletion(activity, multi) {
31
- //initialize both `possible` (1m) and `actualized` (1) zero dimension, while decrementing the 2nd and 3rd digits to deactivate the activity
32
- return await activity.store.collate(activity.context.metadata.jid, activity.metadata.aid, 1000001 - 11000000000000, this.getDimensionalAddress(activity), multi);
57
+ //initialize both `possible` (1m) and `actualized` (1) zero dimension, while decrementing the 2nd
58
+ //3rd digit is optionally kept open if the activity might be used in a cycle
59
+ const decrement = activity.config.cycle ? 10000000000000 : 11000000000000;
60
+ return await activity.store.collate(activity.context.metadata.jid, activity.metadata.aid, 1000001 - decrement, this.getDimensionalAddress(activity), multi);
33
61
  }
34
62
  ;
35
63
  static async notarizeReentry(activity, multi) {
36
64
  //increment by 1_000_000 (indicates re-entry and is used to drive the 'dimensional address' for adjacent activities (minus 1))
37
- const amount = await activity.store.collate(activity.context.metadata.jid, activity.metadata.aid, 1000000, this.getDimensionalAddress(activity), multi);
65
+ const amount = await activity.store.collate(activity.context.metadata.jid, activity.metadata.aid, 1000000, this.getDimensionalAddress(activity, true), multi);
38
66
  this.verifyInteger(amount, 2, 'enter');
39
67
  return amount;
40
68
  }
@@ -45,8 +73,10 @@ class CollatorService {
45
73
  }
46
74
  ;
47
75
  static async notarizeCompletion(activity, multi) {
48
- //close out; actualize leg2 dimension (+1) and decrement the 3rd digit (-1_000_000_000_000)
49
- return await activity.store.collate(activity.context.metadata.jid, activity.metadata.aid, 1 - 1000000000000, this.getDimensionalAddress(activity), multi);
76
+ //1) ALWAYS actualize leg2 dimension (+1)
77
+ //2) IF the activity is used in a cycle, don't close leg 2!
78
+ const decrement = activity.config.cycle ? 0 : -1000000000000;
79
+ return await activity.store.collate(activity.context.metadata.jid, activity.metadata.aid, 1 - decrement, this.getDimensionalAddress(activity), multi);
50
80
  }
51
81
  ;
52
82
  static getDigitAtIndex(num, targetDigitIndex) {
@@ -29,7 +29,12 @@ const getWorkflowYAML = (topic, version = '1') => {
29
29
  type: trigger
30
30
  stats:
31
31
  id: '{$self.input.data.workflowId}'
32
+
32
33
  a1:
34
+ type: activity
35
+ cycle: true
36
+
37
+ w1:
33
38
  type: worker
34
39
  topic: ${topic}
35
40
  input:
@@ -52,9 +57,20 @@ const getWorkflowYAML = (topic, version = '1') => {
52
57
  job:
53
58
  maps:
54
59
  response: '{$self.output.data.response}'
60
+
61
+ c1:
62
+ type: cycle
63
+ ancestor: a1
55
64
  transitions:
56
65
  t1:
57
- - to: a1`;
66
+ - to: a1
67
+ a1:
68
+ - to: w1
69
+ w1:
70
+ - to: c1
71
+ conditions:
72
+ code: 500
73
+ `;
58
74
  };
59
75
  exports.getWorkflowYAML = getWorkflowYAML;
60
76
  const getActivityYAML = (topic, version = '1') => {
@@ -10,7 +10,7 @@ Here is an example of how the methods in this file are used:
10
10
  import { Durable: { NativeConnection, Worker } } from '@hotmeshio/hotmesh';
11
11
  import Redis from 'ioredis'; //OR `import * as Redis from 'redis';`
12
12
 
13
- import * as activities from './activities';
13
+ import * as workflows from './workflows';
14
14
 
15
15
  async function run() {
16
16
  const connection = await NativeConnection.connect({
@@ -24,7 +24,7 @@ async function run() {
24
24
  connection,
25
25
  namespace: 'default',
26
26
  taskQueue: 'hello-world',
27
- workflowsPath: require.resolve('./workflows'),
27
+ workflow: workflows.example,
28
28
  activities,
29
29
  });
30
30
  await worker.run();
@@ -5,6 +5,7 @@ export declare class WorkerService {
5
5
  static connection: Connection;
6
6
  static instances: Map<string, HotMesh | Promise<HotMesh>>;
7
7
  workflowRunner: HotMesh;
8
+ activityRunner: HotMesh;
8
9
  static getHotMesh: (worflowTopic: string) => Promise<HotMesh>;
9
10
  static activateWorkflow(hotMesh: HotMesh, topic: string, factory: Function): Promise<void>;
10
11
  /**
@@ -12,9 +13,7 @@ export declare class WorkerService {
12
13
  * dynamically importing the user's workflow module. That file
13
14
  * contains a call, `proxyActivities`, which needs this info.
14
15
  *
15
- * NOTE: The `worker` and `client` both call `proxyActivities`,
16
- * as a natural result of importing worflows.ts. However,
17
- * because the worker imports the workflows dynamically AFTER
16
+ * NOTE: Because the worker imports the workflows dynamically AFTER
18
17
  * the activities are loaded, there will be items in the registry,
19
18
  * allowing proxyActivities to succeed.
20
19
  */
@@ -1,8 +1,11 @@
1
+ "use strict";
1
2
  var _a;
2
- import { asyncLocalStorage } from './asyncLocalStorage';
3
- import { HotMeshService as HotMesh } from '../hotmesh';
4
- import { StreamStatus } from '../../types/stream';
5
- import { getWorkflowYAML, getActivityYAML } from './factory';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.WorkerService = void 0;
5
+ const asyncLocalStorage_1 = require("./asyncLocalStorage");
6
+ const hotmesh_1 = require("../hotmesh");
7
+ const stream_1 = require("../../types/stream");
8
+ const factory_1 = require("./factory");
6
9
  /*
7
10
  Here is an example of how the methods in this file are used:
8
11
 
@@ -11,7 +14,7 @@ Here is an example of how the methods in this file are used:
11
14
  import { Durable: { NativeConnection, Worker } } from '@hotmeshio/hotmesh';
12
15
  import Redis from 'ioredis'; //OR `import * as Redis from 'redis';`
13
16
 
14
- import * as activities from './activities';
17
+ import * as workflows from './workflows';
15
18
 
16
19
  async function run() {
17
20
  const connection = await NativeConnection.connect({
@@ -25,7 +28,7 @@ async function run() {
25
28
  connection,
26
29
  namespace: 'default',
27
30
  taskQueue: 'hello-world',
28
- workflowsPath: require.resolve('./workflows'),
31
+ workflow: workflows.example,
29
32
  activities,
30
33
  });
31
34
  await worker.run();
@@ -66,19 +69,19 @@ class WorkerService {
66
69
  * dynamically importing the user's workflow module. That file
67
70
  * contains a call, `proxyActivities`, which needs this info.
68
71
  *
69
- * NOTE: The `worker` and `client` both call `proxyActivities`,
70
- * as a natural result of importing worflows.ts. However,
71
- * because the worker imports the workflows dynamically AFTER
72
+ * NOTE: Because the worker imports the workflows dynamically AFTER
72
73
  * the activities are loaded, there will be items in the registry,
73
74
  * allowing proxyActivities to succeed.
74
75
  */
75
76
  static registerActivities(activities) {
76
- if (typeof activities === 'function') {
77
+ if (typeof activities === 'function' && typeof WorkerService.activityRegistry[activities.name] !== 'function') {
77
78
  WorkerService.activityRegistry[activities.name] = activities;
78
79
  }
79
80
  else {
80
81
  Object.keys(activities).forEach(key => {
81
- WorkerService.activityRegistry[activities[key].name] = activities[key];
82
+ if (activities[key].name && typeof WorkerService.activityRegistry[activities[key].name] !== 'function') {
83
+ WorkerService.activityRegistry[activities[key].name] = activities[key];
84
+ }
82
85
  });
83
86
  }
84
87
  return WorkerService.activityRegistry;
@@ -86,18 +89,18 @@ class WorkerService {
86
89
  static async create(config) {
87
90
  //always call `registerActivities` before `import`
88
91
  WorkerService.connection = config.connection;
89
- WorkerService.registerActivities(config.activities);
90
- const workflow = await import(config.workflowsPath);
92
+ //user can provide the workflow file directly
93
+ const workflow = config.workflow;
91
94
  const [workflowFunctionName, workflowFunction] = WorkerService.resolveWorkflowTarget(workflow);
92
95
  const baseTopic = `${config.taskQueue}-${workflowFunctionName}`;
93
96
  const activityTopic = `${baseTopic}-activity`;
94
97
  const workflowTopic = `${baseTopic}`;
95
98
  //initialize supporting workflows
96
99
  const worker = new WorkerService();
97
- const activityRunner = await worker.initActivityWorkflow(config, activityTopic);
98
- await WorkerService.activateWorkflow(activityRunner, activityTopic, getActivityYAML);
100
+ worker.activityRunner = await worker.initActivityWorkflow(config, activityTopic);
101
+ await WorkerService.activateWorkflow(worker.activityRunner, activityTopic, factory_1.getActivityYAML);
99
102
  worker.workflowRunner = await worker.initWorkerWorkflow(config, workflowTopic, workflowFunction);
100
- await WorkerService.activateWorkflow(worker.workflowRunner, workflowTopic, getWorkflowYAML);
103
+ await WorkerService.activateWorkflow(worker.workflowRunner, workflowTopic, factory_1.getWorkflowYAML);
101
104
  return worker;
102
105
  }
103
106
  static resolveWorkflowTarget(workflow) {
@@ -113,19 +116,14 @@ class WorkerService {
113
116
  return [workflowFunction.name, workflowFunction];
114
117
  }
115
118
  async run() {
116
- if (this.workflowRunner) {
117
- this.workflowRunner.engine.logger.info('WorkerService is running');
118
- }
119
- else {
120
- console.log('WorkerService is running');
121
- }
119
+ this.workflowRunner.engine.logger.info('WorkerService is running');
122
120
  }
123
121
  async initActivityWorkflow(config, activityTopic) {
124
122
  const redisConfig = {
125
123
  class: config.connection.class,
126
124
  options: config.connection.options
127
125
  };
128
- const hmshInstance = await HotMesh.init({
126
+ const hmshInstance = await hotmesh_1.HotMeshService.init({
129
127
  appId: activityTopic,
130
128
  engine: { redis: redisConfig },
131
129
  workers: [
@@ -147,16 +145,17 @@ class WorkerService {
147
145
  const activityFunction = WorkerService.activityRegistry[activityName];
148
146
  const pojoResponse = await activityFunction.apply(this, activityInput.arguments);
149
147
  return {
150
- status: StreamStatus.SUCCESS,
148
+ status: stream_1.StreamStatus.SUCCESS,
151
149
  metadata: { ...data.metadata },
152
150
  data: { response: pojoResponse }
153
151
  };
154
152
  }
155
153
  catch (err) {
156
- console.error(err);
157
- //todo (make retry configurable)
154
+ this.activityRunner.engine.logger.error('durable-worker-activity-err', err);
158
155
  return {
159
- status: StreamStatus.PENDING,
156
+ status: stream_1.StreamStatus.ERROR,
157
+ code: 500,
158
+ message: err.message,
160
159
  metadata: { ...data.metadata },
161
160
  data: { error: err }
162
161
  };
@@ -169,11 +168,11 @@ class WorkerService {
169
168
  const appVersion = app?.version;
170
169
  if (isNaN(appVersion)) {
171
170
  try {
172
- await hotMesh.deploy(getActivityYAML(activityTopic, version));
171
+ await hotMesh.deploy((0, factory_1.getActivityYAML)(activityTopic, version));
173
172
  await hotMesh.activate(version);
174
173
  }
175
174
  catch (err) {
176
- console.log('durable-worker-activity-deploy-activate-error', err);
175
+ hotMesh.engine.logger.error('durable-worker-activity-deploy-activate-error', err);
177
176
  throw err;
178
177
  }
179
178
  }
@@ -192,7 +191,7 @@ class WorkerService {
192
191
  class: config.connection.class,
193
192
  options: config.connection.options
194
193
  };
195
- const hmshInstance = await HotMesh.init({
194
+ const hmshInstance = await hotmesh_1.HotMeshService.init({
196
195
  appId: workflowTopic,
197
196
  engine: { redis: redisConfig },
198
197
  workers: [
@@ -218,21 +217,20 @@ class WorkerService {
218
217
  context.set('workflowName', workflowTopic.split('-').pop());
219
218
  context.set('workflowTrace', data.metadata.trc);
220
219
  context.set('workflowSpan', data.metadata.spn);
221
- const workflowResponse = await asyncLocalStorage.run(context, async () => {
220
+ const workflowResponse = await asyncLocalStorage_1.asyncLocalStorage.run(context, async () => {
222
221
  return await workflowFunction.apply(this, workflowInput.arguments);
223
222
  });
224
223
  return {
225
224
  code: 200,
226
- status: StreamStatus.SUCCESS,
225
+ status: stream_1.StreamStatus.SUCCESS,
227
226
  metadata: { ...data.metadata },
228
227
  data: { response: workflowResponse }
229
228
  };
230
229
  }
231
230
  catch (err) {
232
- //todo: (retryable error types)
233
231
  return {
232
+ status: stream_1.StreamStatus.ERROR,
234
233
  code: 500,
235
- status: StreamStatus.PENDING,
236
234
  metadata: { ...data.metadata },
237
235
  data: { error: err }
238
236
  };
@@ -253,12 +251,12 @@ WorkerService.getHotMesh = async (worflowTopic) => {
253
251
  if (WorkerService.instances.has(worflowTopic)) {
254
252
  return await WorkerService.instances.get(worflowTopic);
255
253
  }
256
- const hotMesh = HotMesh.init({
254
+ const hotMesh = hotmesh_1.HotMeshService.init({
257
255
  appId: worflowTopic,
258
256
  engine: { redis: { ...WorkerService.connection } }
259
257
  });
260
258
  WorkerService.instances.set(worflowTopic, hotMesh);
261
- await WorkerService.activateWorkflow(await hotMesh, worflowTopic, getWorkflowYAML);
259
+ await WorkerService.activateWorkflow(await hotMesh, worflowTopic, factory_1.getWorkflowYAML);
262
260
  return hotMesh;
263
261
  };
264
262
  WorkerService.Context = {
@@ -269,4 +267,4 @@ WorkerService.Context = {
269
267
  };
270
268
  },
271
269
  };
272
- export { WorkerService };
270
+ exports.WorkerService = WorkerService;
@@ -33,8 +33,10 @@ Here is an example of how the methods in this file are used:
33
33
  ./workflows.ts
34
34
 
35
35
  import { Durable } from '@hotmeshio/hotmesh';
36
- import type * as activities from './activities';
36
+ import * as activities from './activities';
37
+
37
38
  const { greet } = Durable.workflow.proxyActivities<typeof activities>({
39
+ activities: activities,
38
40
  startToCloseTimeout: '1 minute',
39
41
  retryPolicy: {
40
42
  initialInterval: '5 seconds', // Initial delay between retries
@@ -71,6 +73,9 @@ class WorkflowService {
71
73
  return result;
72
74
  }
73
75
  static proxyActivities(options) {
76
+ if (options.activities) {
77
+ worker_1.WorkerService.registerActivities(options.activities);
78
+ }
74
79
  const proxy = {};
75
80
  const keys = Object.keys(worker_1.WorkerService.activityRegistry);
76
81
  if (keys.length) {
@@ -100,7 +105,11 @@ class WorkflowService {
100
105
  try {
101
106
  const hmshInstance = await worker_1.WorkerService.getHotMesh(activityTopic);
102
107
  activityState = await hmshInstance.getState(activityTopic, activityJobId);
103
- if (activityState.metadata.js == 1) {
108
+ if (activityState.metadata.err) {
109
+ await hmshInstance.scrub(activityJobId);
110
+ throw new Error(activityState.metadata.err);
111
+ }
112
+ else if (activityState.metadata.js === 0) {
104
113
  //return immediately
105
114
  return activityState.data?.response;
106
115
  }
@@ -50,6 +50,9 @@ class MapperService {
50
50
  return transitionRule;
51
51
  }
52
52
  if (code.toString() === (transitionRule.code || 200).toString()) {
53
+ if (!transitionRule.match) {
54
+ return true;
55
+ }
53
56
  const orGate = transitionRule.gate === 'or';
54
57
  let allAreTrue = true;
55
58
  let someAreTrue = false;
@@ -121,7 +121,6 @@ class StreamSignaler {
121
121
  output = await callback(input);
122
122
  }
123
123
  catch (err) {
124
- console.error(err);
125
124
  this.logger.error(`stream-call-function-error`, { stream, id, err });
126
125
  output = this.structureUnhandledError(input, err);
127
126
  }
@@ -1,6 +1,6 @@
1
1
  import { MetricTypes } from "./stats";
2
2
  import { StreamRetryPolicy } from "./stream";
3
- type ActivityExecutionType = 'trigger' | 'await' | 'worker' | 'activity' | 'emit' | 'iterate';
3
+ type ActivityExecutionType = 'trigger' | 'await' | 'worker' | 'activity' | 'emit' | 'iterate' | 'cycle';
4
4
  type Consumes = Record<string, string[]>;
5
5
  interface BaseActivity {
6
6
  title?: string;
@@ -15,6 +15,7 @@ interface BaseActivity {
15
15
  sleep?: number;
16
16
  expire?: number;
17
17
  retry?: StreamRetryPolicy;
18
+ cycle?: boolean;
18
19
  collationInt?: number;
19
20
  consumes?: Consumes;
20
21
  PRODUCES?: string[];
@@ -55,6 +56,10 @@ interface WorkerActivity extends BaseActivity {
55
56
  interface EmitActivity extends BaseActivity {
56
57
  type: 'emit';
57
58
  }
59
+ interface CycleActivity extends BaseActivity {
60
+ type: 'cycle';
61
+ ancestor: string;
62
+ }
58
63
  interface IterateActivity extends BaseActivity {
59
64
  type: 'iterate';
60
65
  }
@@ -84,4 +89,4 @@ type ActivityDataType = {
84
89
  hook?: Record<string, unknown>;
85
90
  };
86
91
  type ActivityLeg = 1 | 2;
87
- export { ActivityContext, ActivityData, ActivityDataType, ActivityDuplex, ActivityLeg, ActivityMetadata, ActivityType, Consumes, TriggerActivityStats, AwaitActivity, BaseActivity, EmitActivity, IterateActivity, TriggerActivity, WorkerActivity };
92
+ export { ActivityContext, ActivityData, ActivityDataType, ActivityDuplex, ActivityLeg, ActivityMetadata, ActivityType, Consumes, TriggerActivityStats, AwaitActivity, CycleActivity, BaseActivity, EmitActivity, IterateActivity, TriggerActivity, WorkerActivity };
@@ -34,10 +34,7 @@ type WorkerConfig = {
34
34
  connection: Connection;
35
35
  namespace: string;
36
36
  taskQueue: string;
37
- workflowsPath: string;
38
- activities: {
39
- [key: string]: Function;
40
- };
37
+ workflow: Function;
41
38
  };
42
39
  type ContextType = {
43
40
  workflowId: string;
@@ -48,8 +45,9 @@ type ProxyType<ACT> = {
48
45
  [K in keyof ACT]: FunctionSignature<ACT[K]>;
49
46
  };
50
47
  type ActivityConfig = {
51
- startToCloseTimeout: string;
52
- retryPolicy: {
48
+ startToCloseTimeout?: string;
49
+ activities?: any;
50
+ retryPolicy?: {
53
51
  initialInterval: string;
54
52
  maximumAttempts: number;
55
53
  backoffCoefficient: number;
@@ -1,4 +1,4 @@
1
- export { ActivityType, ActivityDataType, ActivityContext, ActivityData, ActivityDuplex, ActivityLeg, ActivityMetadata, Consumes, AwaitActivity, BaseActivity, EmitActivity, WorkerActivity, IterateActivity, TriggerActivity, TriggerActivityStats } from './activity';
1
+ export { ActivityType, ActivityDataType, ActivityContext, ActivityData, ActivityDuplex, ActivityLeg, ActivityMetadata, Consumes, AwaitActivity, BaseActivity, CycleActivity, EmitActivity, WorkerActivity, IterateActivity, TriggerActivity, TriggerActivityStats } from './activity';
2
2
  export { App, AppVID, AppTransitions, AppSubscriptions } from './app';
3
3
  export { AsyncSignal } from './async';
4
4
  export { CacheMode } from './cache';
package/package.json CHANGED
@@ -1,14 +1,9 @@
1
1
  {
2
2
  "name": "@hotmeshio/hotmesh",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "description": "Durable Workflows",
5
- "main": "build/cjs/index.js",
6
- "module": "build/esm/index.js",
7
- "types": "build/cjs/index.d.ts",
8
- "exports": {
9
- "import": "./build/esm/index.js",
10
- "require": "./build/cjs/index.js"
11
- },
5
+ "main": "build/index.js",
6
+ "types": "build/index.d.ts",
12
7
  "repository": {
13
8
  "type": "git",
14
9
  "url": "https://github.com/hotmeshio/sdk-typescript.git"
@@ -19,9 +14,7 @@
19
14
  },
20
15
  "scripts": {
21
16
  "clean": "rimraf ./build",
22
- "build:cjs": "tsc --build tsconfig.cjs.json",
23
- "build:esm": "tsc --build tsconfig.esm.json",
24
- "build": "npm run build:cjs && npm run build:esm",
17
+ "build": "tsc --build tsconfig.json",
25
18
  "clean-build": "npm run clean && npm run build",
26
19
  "lint": "eslint . --ext .ts",
27
20
  "lint:fix": "eslint . --fix --ext .ts",
@@ -29,6 +22,7 @@
29
22
  "test": "NODE_ENV=test jest --detectOpenHandles --forceExit --verbose",
30
23
  "test:hmsh": "NODE_ENV=test jest ./tests/functional/index.test.ts --detectOpenHandles --verbose",
31
24
  "test:compile": "NODE_ENV=test jest ./tests/functional/compile/index.test.ts --detectOpenHandles --forceExit --verbose",
25
+ "test:cycle": "NODE_ENV=test jest ./tests/functional/cycle/index.test.ts --detectOpenHandles --forceExit --verbose",
32
26
  "test:connect": "NODE_ENV=test jest ./tests/unit/services/connector/index.test.ts --detectOpenHandles --forceExit --verbose",
33
27
  "test:connect:redis": "NODE_ENV=test jest ./tests/unit/services/connector/clients/redis.test.ts --detectOpenHandles --forceExit --verbose",
34
28
  "test:connect:ioredis": "NODE_ENV=test jest ./tests/unit/services/connector/clients/ioredis.test.ts --detectOpenHandles --forceExit --verbose",
@@ -48,6 +42,7 @@
48
42
  "test:durable": "NODE_ENV=test jest ./tests/durable/*/index.test.ts --detectOpenHandles --forceExit --verbose",
49
43
  "test:durable:hello": "NODE_ENV=test jest ./tests/durable/helloworld/index.test.ts --detectOpenHandles --forceExit --verbose",
50
44
  "test:durable:goodbye": "NODE_ENV=test jest ./tests/durable/goodbye/index.test.ts --detectOpenHandles --forceExit --verbose",
45
+ "test:durable:retry": "NODE_ENV=test jest ./tests/durable/retry/index.test.ts --detectOpenHandles --forceExit --verbose",
51
46
  "test:durable:loopactivity": "NODE_ENV=test jest ./tests/durable/loopactivity/index.test.ts --detectOpenHandles --forceExit --verbose",
52
47
  "test:durable:nested": "NODE_ENV=test jest ./tests/durable/nested/index.test.ts --detectOpenHandles --forceExit --verbose"
53
48
  },
@@ -129,7 +129,7 @@ class Activity {
129
129
  this.leg = leg;
130
130
  }
131
131
 
132
- //******** SIGNALER RE-ENTRY POINT (B) ********//
132
+ //******** SIGNAL RE-ENTRY POINT ********//
133
133
  doesHook(): boolean {
134
134
  return !!(this.config.hook?.topic || this.config.sleep);
135
135
  }
@@ -170,11 +170,6 @@ class Activity {
170
170
  return await this.processHookEvent(jobId);
171
171
  }
172
172
 
173
- //todo: hooks are currently singletons. but they can support
174
- // dimensional threads like `await` and `worker` do.
175
- // Copy code from those activities to support cyclical
176
- // timehook and eventhook inputs by adding a 'pending'
177
- // flag to hooks that allows for repeated signals
178
173
  async processHookEvent(jobId: string): Promise<JobStatus | void> {
179
174
  this.logger.debug('activity-process-hook-event', { jobId });
180
175
  let telemetry: TelemetryService;
@@ -207,7 +202,6 @@ class Activity {
207
202
  telemetry.setActivityAttributes(attrs);
208
203
  return jobStatus as number;
209
204
  } catch (error) {
210
- console.error('this error?', error);
211
205
  this.logger.error('engine-process-hook-event-error', error);
212
206
  telemetry.setActivityError(error.message);
213
207
  throw error;
@@ -216,6 +210,95 @@ class Activity {
216
210
  }
217
211
  }
218
212
 
213
+ //******** DUPLEX RE-ENTRY POINT ********//
214
+ async processEvent(status: StreamStatus = StreamStatus.SUCCESS, code: StreamCode = 200): Promise<void> {
215
+ this.setLeg(2);
216
+ const jid = this.context.metadata.jid;
217
+ const aid = this.metadata.aid;
218
+ this.status = status;
219
+ this.code = code;
220
+ this.logger.debug('activity-process-event', { topic: this.config.subtype, jid, aid, status, code });
221
+ let telemetry: TelemetryService;
222
+ try {
223
+ await this.getState();
224
+ const aState = await CollatorService.notarizeReentry(this);
225
+ this.adjacentIndex = CollatorService.getDimensionalIndex(aState);
226
+
227
+ telemetry = new TelemetryService(this.engine.appId, this.config, this.metadata, this.context);
228
+ let isComplete = CollatorService.isActivityComplete(this.context.metadata.js);
229
+
230
+ if (isComplete) {
231
+ this.logger.warn('activity-process-event-duplicate', { jid, aid });
232
+ this.logger.debug('activity-process-event-duplicate-resolution', { resolution: 'Increase HotMesh config `reclaimDelay` timeout.' });
233
+ return;
234
+ }
235
+
236
+ telemetry.startActivitySpan(this.leg);
237
+ let multiResponse: MultiResponseFlags;
238
+ if (status === StreamStatus.PENDING) {
239
+ multiResponse = await this.processPending(telemetry);
240
+ } else if (status === StreamStatus.SUCCESS) {
241
+ multiResponse = await this.processSuccess(telemetry);
242
+ } else {
243
+ multiResponse = await this.processError(telemetry);
244
+ }
245
+ this.transitionAdjacent(multiResponse, telemetry);
246
+ } catch (error) {
247
+ this.logger.error('activity-process-event-error', error);
248
+ telemetry.setActivityError(error.message);
249
+ throw error;
250
+ } finally {
251
+ telemetry.endActivitySpan();
252
+ this.logger.debug('activity-process-event-end', { jid, aid });
253
+ }
254
+ }
255
+
256
+ async processPending(telemetry: TelemetryService): Promise<MultiResponseFlags> {
257
+ this.bindActivityData('output');
258
+ this.adjacencyList = await this.filterAdjacent();
259
+ this.mapJobData();
260
+ const multi = this.store.getMulti();
261
+ await this.setState(multi);
262
+ await CollatorService.notarizeContinuation(this, multi);
263
+
264
+ await this.setStatus(this.adjacencyList.length, multi);
265
+ return await multi.exec() as MultiResponseFlags;
266
+ }
267
+
268
+ async processSuccess(telemetry: TelemetryService): Promise<MultiResponseFlags> {
269
+ this.bindActivityData('output');
270
+ this.adjacencyList = await this.filterAdjacent();
271
+ this.mapJobData();
272
+ const multi = this.store.getMulti();
273
+ await this.setState(multi);
274
+ await CollatorService.notarizeCompletion(this, multi);
275
+
276
+ await this.setStatus(this.adjacencyList.length - 1, multi);
277
+ return await multi.exec() as MultiResponseFlags;
278
+ }
279
+
280
+ async processError(telemetry: TelemetryService): Promise<MultiResponseFlags> {
281
+ this.bindActivityError(this.data);
282
+ this.adjacencyList = await this.filterAdjacent();
283
+ const multi = this.store.getMulti();
284
+ await this.setState(multi);
285
+ await CollatorService.notarizeCompletion(this, multi);
286
+
287
+ await this.setStatus(this.adjacencyList.length - 1, multi);
288
+ return await multi.exec() as MultiResponseFlags;
289
+ }
290
+
291
+ async transitionAdjacent(multiResponse: MultiResponseFlags, telemetry: TelemetryService): Promise<void> {
292
+ telemetry.mapActivityAttributes();
293
+ const jobStatus = this.resolveStatus(multiResponse);
294
+ const attrs: StringScalarType = { 'app.job.jss': jobStatus };
295
+ const messageIds = await this.transition(this.adjacencyList, jobStatus);
296
+ if (messageIds.length) {
297
+ attrs['app.activity.mids'] = messageIds.join(',')
298
+ }
299
+ telemetry.setActivityAttributes(attrs);
300
+ }
301
+
219
302
  resolveStatus(multiResponse: MultiResponseFlags): number {
220
303
  const activityStatus = multiResponse[multiResponse.length - 1];
221
304
  if (Array.isArray(activityStatus)) {