@hotmeshio/hotmesh 0.3.32 → 0.4.0

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 (254) hide show
  1. package/README.md +128 -823
  2. package/build/index.d.ts +9 -9
  3. package/build/index.js +10 -10
  4. package/build/package.json +22 -21
  5. package/build/types/error.d.ts +5 -5
  6. package/build/types/exporter.d.ts +1 -1
  7. package/build/types/index.d.ts +3 -3
  8. package/build/types/manifest.d.ts +2 -2
  9. package/build/types/{meshflow.d.ts → memflow.d.ts} +15 -15
  10. package/build/types/meshdata.d.ts +3 -3
  11. package/build/types/postgres.d.ts +7 -0
  12. package/build/types/stream.d.ts +3 -0
  13. package/index.ts +11 -11
  14. package/package.json +22 -21
  15. package/typedoc.json +8 -7
  16. package/types/error.ts +5 -5
  17. package/types/exporter.ts +1 -1
  18. package/types/index.ts +7 -7
  19. package/types/manifest.ts +2 -2
  20. package/types/{meshflow.ts → memflow.ts} +15 -15
  21. package/types/meshdata.ts +3 -3
  22. package/types/postgres.ts +9 -0
  23. package/types/stream.ts +4 -0
  24. package/build/modules/enums.d.ts +0 -110
  25. package/build/modules/enums.js +0 -134
  26. package/build/modules/errors.d.ts +0 -124
  27. package/build/modules/errors.js +0 -191
  28. package/build/modules/key.d.ts +0 -66
  29. package/build/modules/key.js +0 -1
  30. package/build/modules/storage.d.ts +0 -3
  31. package/build/modules/storage.js +0 -5
  32. package/build/modules/utils.d.ts +0 -119
  33. package/build/modules/utils.js +0 -1
  34. package/build/services/activities/activity.d.ts +0 -104
  35. package/build/services/activities/activity.js +0 -1
  36. package/build/services/activities/await.d.ts +0 -12
  37. package/build/services/activities/await.js +0 -1
  38. package/build/services/activities/cycle.d.ts +0 -19
  39. package/build/services/activities/cycle.js +0 -1
  40. package/build/services/activities/hook.d.ts +0 -27
  41. package/build/services/activities/hook.js +0 -1
  42. package/build/services/activities/index.d.ts +0 -19
  43. package/build/services/activities/index.js +0 -1
  44. package/build/services/activities/interrupt.d.ts +0 -16
  45. package/build/services/activities/interrupt.js +0 -1
  46. package/build/services/activities/signal.d.ts +0 -20
  47. package/build/services/activities/signal.js +0 -1
  48. package/build/services/activities/trigger.d.ts +0 -37
  49. package/build/services/activities/trigger.js +0 -1
  50. package/build/services/activities/worker.d.ts +0 -12
  51. package/build/services/activities/worker.js +0 -1
  52. package/build/services/collator/index.d.ts +0 -111
  53. package/build/services/collator/index.js +0 -1
  54. package/build/services/compiler/deployer.d.ts +0 -40
  55. package/build/services/compiler/deployer.js +0 -1
  56. package/build/services/compiler/index.d.ts +0 -32
  57. package/build/services/compiler/index.js +0 -1
  58. package/build/services/compiler/validator.d.ts +0 -34
  59. package/build/services/compiler/validator.js +0 -1
  60. package/build/services/connector/factory.d.ts +0 -22
  61. package/build/services/connector/factory.js +0 -99
  62. package/build/services/connector/index.d.ts +0 -30
  63. package/build/services/connector/index.js +0 -54
  64. package/build/services/connector/providers/ioredis.d.ts +0 -9
  65. package/build/services/connector/providers/ioredis.js +0 -26
  66. package/build/services/connector/providers/nats.d.ts +0 -9
  67. package/build/services/connector/providers/nats.js +0 -34
  68. package/build/services/connector/providers/postgres.d.ts +0 -20
  69. package/build/services/connector/providers/postgres.js +0 -102
  70. package/build/services/connector/providers/redis.d.ts +0 -9
  71. package/build/services/connector/providers/redis.js +0 -38
  72. package/build/services/engine/index.d.ts +0 -264
  73. package/build/services/engine/index.js +0 -1
  74. package/build/services/exporter/index.d.ts +0 -44
  75. package/build/services/exporter/index.js +0 -1
  76. package/build/services/hotmesh/index.d.ts +0 -340
  77. package/build/services/hotmesh/index.js +0 -479
  78. package/build/services/logger/index.d.ts +0 -16
  79. package/build/services/logger/index.js +0 -54
  80. package/build/services/mapper/index.d.ts +0 -28
  81. package/build/services/mapper/index.js +0 -1
  82. package/build/services/meshcall/index.d.ts +0 -194
  83. package/build/services/meshcall/index.js +0 -452
  84. package/build/services/meshcall/schemas/factory.d.ts +0 -9
  85. package/build/services/meshcall/schemas/factory.js +0 -189
  86. package/build/services/meshdata/index.d.ts +0 -795
  87. package/build/services/meshdata/index.js +0 -1235
  88. package/build/services/meshflow/client.d.ts +0 -108
  89. package/build/services/meshflow/client.js +0 -371
  90. package/build/services/meshflow/connection.d.ts +0 -23
  91. package/build/services/meshflow/connection.js +0 -33
  92. package/build/services/meshflow/exporter.d.ts +0 -51
  93. package/build/services/meshflow/exporter.js +0 -1
  94. package/build/services/meshflow/handle.d.ts +0 -90
  95. package/build/services/meshflow/handle.js +0 -176
  96. package/build/services/meshflow/index.d.ts +0 -111
  97. package/build/services/meshflow/index.js +0 -117
  98. package/build/services/meshflow/schemas/factory.d.ts +0 -29
  99. package/build/services/meshflow/schemas/factory.js +0 -2492
  100. package/build/services/meshflow/search.d.ts +0 -142
  101. package/build/services/meshflow/search.js +0 -320
  102. package/build/services/meshflow/worker.d.ts +0 -124
  103. package/build/services/meshflow/worker.js +0 -514
  104. package/build/services/meshflow/workflow/all.d.ts +0 -7
  105. package/build/services/meshflow/workflow/all.js +0 -15
  106. package/build/services/meshflow/workflow/common.d.ts +0 -18
  107. package/build/services/meshflow/workflow/common.js +0 -45
  108. package/build/services/meshflow/workflow/context.d.ts +0 -6
  109. package/build/services/meshflow/workflow/context.js +0 -45
  110. package/build/services/meshflow/workflow/didRun.d.ts +0 -7
  111. package/build/services/meshflow/workflow/didRun.js +0 -22
  112. package/build/services/meshflow/workflow/emit.d.ts +0 -11
  113. package/build/services/meshflow/workflow/emit.js +0 -29
  114. package/build/services/meshflow/workflow/enrich.d.ts +0 -9
  115. package/build/services/meshflow/workflow/enrich.js +0 -17
  116. package/build/services/meshflow/workflow/execChild.d.ts +0 -18
  117. package/build/services/meshflow/workflow/execChild.js +0 -102
  118. package/build/services/meshflow/workflow/hook.d.ts +0 -9
  119. package/build/services/meshflow/workflow/hook.js +0 -40
  120. package/build/services/meshflow/workflow/index.d.ts +0 -70
  121. package/build/services/meshflow/workflow/index.js +0 -83
  122. package/build/services/meshflow/workflow/interrupt.d.ts +0 -9
  123. package/build/services/meshflow/workflow/interrupt.js +0 -24
  124. package/build/services/meshflow/workflow/isSideEffectAllowed.d.ts +0 -10
  125. package/build/services/meshflow/workflow/isSideEffectAllowed.js +0 -33
  126. package/build/services/meshflow/workflow/proxyActivities.d.ts +0 -20
  127. package/build/services/meshflow/workflow/proxyActivities.js +0 -97
  128. package/build/services/meshflow/workflow/random.d.ts +0 -6
  129. package/build/services/meshflow/workflow/random.js +0 -16
  130. package/build/services/meshflow/workflow/searchMethods.d.ts +0 -6
  131. package/build/services/meshflow/workflow/searchMethods.js +0 -25
  132. package/build/services/meshflow/workflow/signal.d.ts +0 -7
  133. package/build/services/meshflow/workflow/signal.js +0 -28
  134. package/build/services/meshflow/workflow/sleepFor.d.ts +0 -8
  135. package/build/services/meshflow/workflow/sleepFor.js +0 -35
  136. package/build/services/meshflow/workflow/trace.d.ts +0 -14
  137. package/build/services/meshflow/workflow/trace.js +0 -33
  138. package/build/services/meshflow/workflow/waitFor.d.ts +0 -8
  139. package/build/services/meshflow/workflow/waitFor.js +0 -35
  140. package/build/services/meshos/index.d.ts +0 -293
  141. package/build/services/meshos/index.js +0 -547
  142. package/build/services/pipe/functions/array.d.ts +0 -17
  143. package/build/services/pipe/functions/array.js +0 -1
  144. package/build/services/pipe/functions/bitwise.d.ts +0 -9
  145. package/build/services/pipe/functions/bitwise.js +0 -1
  146. package/build/services/pipe/functions/conditional.d.ts +0 -13
  147. package/build/services/pipe/functions/conditional.js +0 -1
  148. package/build/services/pipe/functions/cron.d.ts +0 -12
  149. package/build/services/pipe/functions/cron.js +0 -1
  150. package/build/services/pipe/functions/date.d.ts +0 -58
  151. package/build/services/pipe/functions/date.js +0 -1
  152. package/build/services/pipe/functions/index.d.ts +0 -29
  153. package/build/services/pipe/functions/index.js +0 -1
  154. package/build/services/pipe/functions/json.d.ts +0 -5
  155. package/build/services/pipe/functions/json.js +0 -1
  156. package/build/services/pipe/functions/logical.d.ts +0 -5
  157. package/build/services/pipe/functions/logical.js +0 -1
  158. package/build/services/pipe/functions/math.d.ts +0 -42
  159. package/build/services/pipe/functions/math.js +0 -1
  160. package/build/services/pipe/functions/number.d.ts +0 -21
  161. package/build/services/pipe/functions/number.js +0 -1
  162. package/build/services/pipe/functions/object.d.ts +0 -25
  163. package/build/services/pipe/functions/object.js +0 -1
  164. package/build/services/pipe/functions/string.d.ts +0 -23
  165. package/build/services/pipe/functions/string.js +0 -1
  166. package/build/services/pipe/functions/symbol.d.ts +0 -12
  167. package/build/services/pipe/functions/symbol.js +0 -1
  168. package/build/services/pipe/functions/unary.d.ts +0 -7
  169. package/build/services/pipe/functions/unary.js +0 -1
  170. package/build/services/pipe/index.d.ts +0 -48
  171. package/build/services/pipe/index.js +0 -1
  172. package/build/services/quorum/index.d.ts +0 -90
  173. package/build/services/quorum/index.js +0 -1
  174. package/build/services/reporter/index.d.ts +0 -50
  175. package/build/services/reporter/index.js +0 -1
  176. package/build/services/router/index.d.ts +0 -60
  177. package/build/services/router/index.js +0 -1
  178. package/build/services/search/factory.d.ts +0 -7
  179. package/build/services/search/factory.js +0 -24
  180. package/build/services/search/index.d.ts +0 -22
  181. package/build/services/search/index.js +0 -10
  182. package/build/services/search/providers/postgres/postgres.d.ts +0 -24
  183. package/build/services/search/providers/postgres/postgres.js +0 -1
  184. package/build/services/search/providers/redis/ioredis.d.ts +0 -18
  185. package/build/services/search/providers/redis/ioredis.js +0 -1
  186. package/build/services/search/providers/redis/redis.d.ts +0 -18
  187. package/build/services/search/providers/redis/redis.js +0 -1
  188. package/build/services/serializer/index.d.ts +0 -42
  189. package/build/services/serializer/index.js +0 -1
  190. package/build/services/store/cache.d.ts +0 -67
  191. package/build/services/store/cache.js +0 -128
  192. package/build/services/store/factory.d.ts +0 -8
  193. package/build/services/store/factory.js +0 -24
  194. package/build/services/store/index.d.ts +0 -89
  195. package/build/services/store/index.js +0 -9
  196. package/build/services/store/providers/postgres/kvsql.d.ts +0 -168
  197. package/build/services/store/providers/postgres/kvsql.js +0 -1
  198. package/build/services/store/providers/postgres/kvtables.d.ts +0 -20
  199. package/build/services/store/providers/postgres/kvtables.js +0 -1
  200. package/build/services/store/providers/postgres/kvtransaction.d.ts +0 -36
  201. package/build/services/store/providers/postgres/kvtransaction.js +0 -1
  202. package/build/services/store/providers/postgres/kvtypes/hash.d.ts +0 -60
  203. package/build/services/store/providers/postgres/kvtypes/hash.js +0 -1
  204. package/build/services/store/providers/postgres/kvtypes/list.d.ts +0 -33
  205. package/build/services/store/providers/postgres/kvtypes/list.js +0 -1
  206. package/build/services/store/providers/postgres/kvtypes/string.d.ts +0 -20
  207. package/build/services/store/providers/postgres/kvtypes/string.js +0 -1
  208. package/build/services/store/providers/postgres/kvtypes/zset.d.ts +0 -41
  209. package/build/services/store/providers/postgres/kvtypes/zset.js +0 -1
  210. package/build/services/store/providers/postgres/postgres.d.ts +0 -145
  211. package/build/services/store/providers/postgres/postgres.js +0 -1
  212. package/build/services/store/providers/redis/_base.d.ts +0 -137
  213. package/build/services/store/providers/redis/_base.js +0 -1
  214. package/build/services/store/providers/redis/ioredis.d.ts +0 -20
  215. package/build/services/store/providers/redis/ioredis.js +0 -1
  216. package/build/services/store/providers/redis/redis.d.ts +0 -18
  217. package/build/services/store/providers/redis/redis.js +0 -1
  218. package/build/services/store/providers/store-initializable.d.ts +0 -5
  219. package/build/services/store/providers/store-initializable.js +0 -1
  220. package/build/services/stream/factory.d.ts +0 -8
  221. package/build/services/stream/factory.js +0 -37
  222. package/build/services/stream/index.d.ts +0 -64
  223. package/build/services/stream/index.js +0 -11
  224. package/build/services/stream/providers/nats/nats.d.ts +0 -59
  225. package/build/services/stream/providers/nats/nats.js +0 -1
  226. package/build/services/stream/providers/postgres/kvtables.d.ts +0 -2
  227. package/build/services/stream/providers/postgres/kvtables.js +0 -1
  228. package/build/services/stream/providers/postgres/postgres.d.ts +0 -88
  229. package/build/services/stream/providers/postgres/postgres.js +0 -1
  230. package/build/services/stream/providers/redis/ioredis.d.ts +0 -60
  231. package/build/services/stream/providers/redis/ioredis.js +0 -1
  232. package/build/services/stream/providers/redis/redis.d.ts +0 -60
  233. package/build/services/stream/providers/redis/redis.js +0 -1
  234. package/build/services/stream/providers/stream-initializable.d.ts +0 -4
  235. package/build/services/stream/providers/stream-initializable.js +0 -1
  236. package/build/services/sub/factory.d.ts +0 -7
  237. package/build/services/sub/factory.js +0 -29
  238. package/build/services/sub/index.d.ts +0 -22
  239. package/build/services/sub/index.js +0 -10
  240. package/build/services/sub/providers/nats/nats.d.ts +0 -19
  241. package/build/services/sub/providers/nats/nats.js +0 -1
  242. package/build/services/sub/providers/postgres/postgres.d.ts +0 -19
  243. package/build/services/sub/providers/postgres/postgres.js +0 -1
  244. package/build/services/sub/providers/redis/ioredis.d.ts +0 -17
  245. package/build/services/sub/providers/redis/ioredis.js +0 -1
  246. package/build/services/sub/providers/redis/redis.d.ts +0 -17
  247. package/build/services/sub/providers/redis/redis.js +0 -1
  248. package/build/services/task/index.d.ts +0 -36
  249. package/build/services/task/index.js +0 -1
  250. package/build/services/telemetry/index.d.ts +0 -52
  251. package/build/services/telemetry/index.js +0 -1
  252. package/build/services/worker/index.d.ts +0 -77
  253. package/build/services/worker/index.js +0 -1
  254. /package/build/types/{meshflow.js → memflow.js} +0 -0
@@ -1,514 +0,0 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.WorkerService = void 0;
5
- const enums_1 = require("../../modules/enums");
6
- const errors_1 = require("../../modules/errors");
7
- const storage_1 = require("../../modules/storage");
8
- const utils_1 = require("../../modules/utils");
9
- const hotmesh_1 = require("../hotmesh");
10
- const stream_1 = require("../../types/stream");
11
- const search_1 = require("./search");
12
- const factory_1 = require("./schemas/factory");
13
- /**
14
- * The *Worker* service Registers worker functions and connects them to the mesh,
15
- * using the target backend provider/s (Redis, Postgres, NATS, etc).
16
- *
17
- * @example
18
- * ```typescript
19
- * import { MeshFlow } from '@hotmeshio/hotmesh';
20
- * import { Client as Postgres } from 'pg';
21
- * import * as workflows from './workflows';
22
- *
23
- * async function run() {
24
- * const worker = await MeshFlow.Worker.create({
25
- * connection: {
26
- * class: Postgres,
27
- * options: { connectionString: 'postgres://user:password@localhost:5432/db' }
28
- * },
29
- * taskQueue: 'default',
30
- * workflow: workflows.example,
31
- * });
32
- *
33
- * await worker.run();
34
- * }
35
- * ```
36
- */
37
- class WorkerService {
38
- static hashOptions(connection) {
39
- if ('options' in connection) {
40
- //shorthand format
41
- return (0, utils_1.hashOptions)(connection.options);
42
- }
43
- else {
44
- //longhand format (sub, store, stream, pub, search)
45
- const response = [];
46
- for (const p in connection) {
47
- if (connection[p].options) {
48
- response.push((0, utils_1.hashOptions)(connection[p].options));
49
- }
50
- }
51
- return response.join('');
52
- }
53
- }
54
- /**
55
- * @private
56
- */
57
- constructor() { }
58
- /**
59
- * @private
60
- */
61
- static async activateWorkflow(hotMesh) {
62
- const app = await hotMesh.engine.store.getApp(hotMesh.engine.appId);
63
- const appVersion = app?.version;
64
- if (!appVersion) {
65
- try {
66
- await hotMesh.deploy((0, factory_1.getWorkflowYAML)(hotMesh.engine.appId, factory_1.APP_VERSION));
67
- await hotMesh.activate(factory_1.APP_VERSION);
68
- }
69
- catch (err) {
70
- hotMesh.engine.logger.error('meshflow-worker-deploy-activate-err', err);
71
- throw err;
72
- }
73
- }
74
- else if (app && !app.active) {
75
- try {
76
- await hotMesh.activate(factory_1.APP_VERSION);
77
- }
78
- catch (err) {
79
- hotMesh.engine.logger.error('meshflow-worker-activate-err', err);
80
- throw err;
81
- }
82
- }
83
- }
84
- /**
85
- * @private
86
- */
87
- static registerActivities(activities) {
88
- if (typeof activities === 'function' &&
89
- typeof WorkerService.activityRegistry[activities.name] !== 'function') {
90
- WorkerService.activityRegistry[activities.name] = activities;
91
- }
92
- else {
93
- Object.keys(activities).forEach((key) => {
94
- if (activities[key].name &&
95
- typeof WorkerService.activityRegistry[activities[key].name] !==
96
- 'function') {
97
- WorkerService.activityRegistry[activities[key].name] = activities[key];
98
- }
99
- else if (typeof activities[key] === 'function') {
100
- WorkerService.activityRegistry[key] = activities[key];
101
- }
102
- });
103
- }
104
- return WorkerService.activityRegistry;
105
- }
106
- /**
107
- * Connects a worker to the mesh.
108
- *
109
- * @example
110
- * ```typescript
111
- * import { MeshFlow } from '@hotmeshio/hotmesh';
112
- * import { Client as Postgres } from 'pg';
113
- * import * as workflows from './workflows';
114
- *
115
- * async function run() {
116
- * const worker = await MeshFlow.Worker.create({
117
- * connection: {
118
- * class: Postgres,
119
- * options: {
120
- * connectionString: 'postgres://user:password@localhost:5432/db'
121
- * },
122
- * },
123
- * taskQueue: 'default',
124
- * workflow: workflows.example,
125
- * });
126
- *
127
- * await worker.run();
128
- * }
129
- * ```
130
- */
131
- static async create(config) {
132
- const workflow = config.workflow;
133
- const [workflowFunctionName, workflowFunction] = WorkerService.resolveWorkflowTarget(workflow);
134
- const baseTopic = `${config.taskQueue}-${workflowFunctionName}`;
135
- const activityTopic = `${baseTopic}-activity`;
136
- const workflowTopic = `${baseTopic}`;
137
- //initialize supporting workflows
138
- const worker = new WorkerService();
139
- worker.activityRunner = await worker.initActivityWorker(config, activityTopic);
140
- worker.workflowRunner = await worker.initWorkflowWorker(config, workflowTopic, workflowFunction);
141
- search_1.Search.configureSearchIndex(worker.workflowRunner, config.search);
142
- await WorkerService.activateWorkflow(worker.workflowRunner);
143
- return worker;
144
- }
145
- /**
146
- * @private
147
- */
148
- static resolveWorkflowTarget(workflow, name) {
149
- let workflowFunction;
150
- if (typeof workflow === 'function') {
151
- workflowFunction = workflow;
152
- return [workflowFunction.name ?? name, workflowFunction];
153
- }
154
- else {
155
- const workflowFunctionNames = Object.keys(workflow);
156
- const lastFunctionName = workflowFunctionNames[workflowFunctionNames.length - 1];
157
- workflowFunction = workflow[lastFunctionName];
158
- return WorkerService.resolveWorkflowTarget(workflowFunction, lastFunctionName);
159
- }
160
- }
161
- /**
162
- * Run the connected worker; no-op (unnecessary to call)
163
- */
164
- async run() {
165
- this.workflowRunner.engine.logger.info('meshflow-worker-running');
166
- }
167
- /**
168
- * @private
169
- */
170
- async initActivityWorker(config, activityTopic) {
171
- const providerConfig = config.connection;
172
- const targetNamespace = config?.namespace ?? factory_1.APP_ID;
173
- const optionsHash = WorkerService.hashOptions(config?.connection);
174
- const targetTopic = `${optionsHash}.${targetNamespace}.${activityTopic}`;
175
- const hotMeshWorker = await hotmesh_1.HotMesh.init({
176
- guid: config.guid ? `${config.guid}XA` : undefined,
177
- logLevel: config.options?.logLevel ?? enums_1.HMSH_LOGLEVEL,
178
- appId: targetNamespace,
179
- engine: { connection: providerConfig },
180
- workers: [
181
- {
182
- topic: activityTopic,
183
- connection: providerConfig,
184
- callback: this.wrapActivityFunctions().bind(this),
185
- },
186
- ],
187
- });
188
- WorkerService.instances.set(targetTopic, hotMeshWorker);
189
- return hotMeshWorker;
190
- }
191
- /**
192
- * @private
193
- */
194
- wrapActivityFunctions() {
195
- return async (data) => {
196
- try {
197
- //always run the activity function when instructed; return the response
198
- const activityInput = data.data;
199
- const activityName = activityInput.activityName;
200
- const activityFunction = WorkerService.activityRegistry[activityName];
201
- const pojoResponse = await activityFunction.apply(this, activityInput.arguments);
202
- return {
203
- status: stream_1.StreamStatus.SUCCESS,
204
- metadata: { ...data.metadata },
205
- data: { response: pojoResponse },
206
- };
207
- }
208
- catch (err) {
209
- this.activityRunner.engine.logger.error('meshflow-worker-activity-err', {
210
- name: err.name,
211
- message: err.message,
212
- stack: err.stack,
213
- });
214
- if (!(err instanceof errors_1.MeshFlowTimeoutError) &&
215
- !(err instanceof errors_1.MeshFlowMaxedError) &&
216
- !(err instanceof errors_1.MeshFlowFatalError)) {
217
- //use code 599 as a proxy for all retryable errors
218
- // (basically anything not 596, 597, 598)
219
- return {
220
- status: stream_1.StreamStatus.SUCCESS,
221
- code: enums_1.HMSH_CODE_MESHFLOW_RETRYABLE,
222
- metadata: { ...data.metadata },
223
- data: {
224
- $error: {
225
- message: err.message,
226
- stack: err.stack,
227
- timestamp: (0, utils_1.formatISODate)(new Date()),
228
- },
229
- },
230
- };
231
- }
232
- return {
233
- //always returrn success (the MeshFlow module is just fine);
234
- // it's the user's function that has failed
235
- status: stream_1.StreamStatus.SUCCESS,
236
- code: err.code,
237
- stack: err.stack,
238
- metadata: { ...data.metadata },
239
- data: {
240
- $error: {
241
- message: err.message,
242
- stack: err.stack,
243
- timestamp: (0, utils_1.formatISODate)(new Date()),
244
- code: err.code,
245
- },
246
- },
247
- };
248
- }
249
- };
250
- }
251
- /**
252
- * @private
253
- */
254
- async initWorkflowWorker(config, workflowTopic, workflowFunction) {
255
- const providerConfig = config.connection;
256
- const targetNamespace = config?.namespace ?? factory_1.APP_ID;
257
- const optionsHash = WorkerService.hashOptions(config?.connection);
258
- const targetTopic = `${optionsHash}.${targetNamespace}.${workflowTopic}`;
259
- const hotMeshWorker = await hotmesh_1.HotMesh.init({
260
- guid: config.guid,
261
- logLevel: config.options?.logLevel ?? enums_1.HMSH_LOGLEVEL,
262
- appId: config.namespace ?? factory_1.APP_ID,
263
- engine: { connection: providerConfig },
264
- workers: [
265
- {
266
- topic: workflowTopic,
267
- connection: providerConfig,
268
- callback: this.wrapWorkflowFunction(workflowFunction, workflowTopic, config).bind(this),
269
- },
270
- ],
271
- });
272
- WorkerService.instances.set(targetTopic, hotMeshWorker);
273
- return hotMeshWorker;
274
- }
275
- /**
276
- * @private
277
- */
278
- wrapWorkflowFunction(workflowFunction, workflowTopic, config) {
279
- return async (data) => {
280
- const counter = { counter: 0 };
281
- const interruptionRegistry = [];
282
- let isProcessing = false;
283
- try {
284
- //incoming data payload has arguments and workflowId
285
- const workflowInput = data.data;
286
- const context = new Map();
287
- context.set('canRetry', workflowInput.canRetry);
288
- context.set('expire', workflowInput.expire);
289
- context.set('counter', counter);
290
- context.set('interruptionRegistry', interruptionRegistry);
291
- context.set('connection', config.connection);
292
- context.set('namespace', config.namespace ?? factory_1.APP_ID);
293
- context.set('raw', data);
294
- context.set('workflowId', workflowInput.workflowId);
295
- if (workflowInput.originJobId) {
296
- //if present there is an origin job to which this job is subordinated;
297
- // garbage collect (expire) this job when originJobId is expired
298
- context.set('originJobId', workflowInput.originJobId);
299
- }
300
- //TODO: the query is provider-specific;
301
- // refactor as an abstract interface the provider must implement
302
- let replayQuery = '';
303
- if (workflowInput.workflowDimension) {
304
- //every hook function runs in an isolated dimension controlled
305
- //by the index assigned when the signal was received; even if the
306
- //hook function re-runs, its scope will always remain constant
307
- context.set('workflowDimension', workflowInput.workflowDimension);
308
- replayQuery = `-*${workflowInput.workflowDimension}-*`;
309
- }
310
- else {
311
- //last letter of words like 'hook', 'sleep', 'wait', 'signal', 'search', 'start', 'proxy', 'child', 'collator', 'trace', 'enrich', 'publish'
312
- replayQuery = '-*[ehklptydr]-*';
313
- }
314
- context.set('workflowTopic', workflowTopic);
315
- context.set('workflowName', workflowTopic.split('-').pop());
316
- context.set('workflowTrace', data.metadata.trc);
317
- context.set('workflowSpan', data.metadata.spn);
318
- const store = this.workflowRunner.engine.store;
319
- const [cursor, replay] = await store.findJobFields(workflowInput.workflowId, replayQuery, 50000, 5000);
320
- context.set('replay', replay);
321
- context.set('cursor', cursor); // if != 0, more remain
322
- const workflowResponse = await storage_1.asyncLocalStorage.run(context, async () => {
323
- return await workflowFunction.apply(this, workflowInput.arguments);
324
- });
325
- return {
326
- code: 200,
327
- status: stream_1.StreamStatus.SUCCESS,
328
- metadata: { ...data.metadata },
329
- data: { response: workflowResponse, done: true },
330
- };
331
- }
332
- catch (err) {
333
- if (isProcessing) {
334
- return;
335
- }
336
- if (err instanceof errors_1.MeshFlowWaitForError ||
337
- interruptionRegistry.length > 1) {
338
- isProcessing = true;
339
- //NOTE: this type is spawned when `Promise.all` is used OR if the interruption is a `waitFor`
340
- const workflowInput = data.data;
341
- const execIndex = counter.counter - interruptionRegistry.length + 1;
342
- const { workflowId, workflowTopic, workflowDimension, originJobId, expire, } = workflowInput;
343
- const collatorFlowId = `${(0, utils_1.guid)()}$C`;
344
- return {
345
- status: stream_1.StreamStatus.SUCCESS,
346
- code: enums_1.HMSH_CODE_MESHFLOW_ALL,
347
- metadata: { ...data.metadata },
348
- data: {
349
- code: enums_1.HMSH_CODE_MESHFLOW_ALL,
350
- items: [...interruptionRegistry],
351
- size: interruptionRegistry.length,
352
- workflowDimension: workflowDimension || '',
353
- index: execIndex,
354
- originJobId: originJobId || workflowId,
355
- parentWorkflowId: workflowId,
356
- workflowId: collatorFlowId,
357
- workflowTopic: workflowTopic,
358
- expire,
359
- },
360
- };
361
- }
362
- else if (err instanceof errors_1.MeshFlowSleepError) {
363
- //return the sleep interruption
364
- isProcessing = true;
365
- return {
366
- status: stream_1.StreamStatus.SUCCESS,
367
- code: err.code,
368
- metadata: { ...data.metadata },
369
- data: {
370
- code: err.code,
371
- message: JSON.stringify({
372
- duration: err.duration,
373
- index: err.index,
374
- workflowDimension: err.workflowDimension,
375
- }),
376
- duration: err.duration,
377
- index: err.index,
378
- workflowDimension: err.workflowDimension,
379
- },
380
- };
381
- }
382
- else if (err instanceof errors_1.MeshFlowProxyError) {
383
- //return the proxyActivity interruption
384
- isProcessing = true;
385
- return {
386
- status: stream_1.StreamStatus.SUCCESS,
387
- code: err.code,
388
- metadata: { ...data.metadata },
389
- data: {
390
- code: err.code,
391
- message: JSON.stringify({
392
- message: err.message,
393
- workflowId: err.workflowId,
394
- activityName: err.activityName,
395
- dimension: err.workflowDimension,
396
- }),
397
- arguments: err.arguments,
398
- workflowDimension: err.workflowDimension,
399
- index: err.index,
400
- originJobId: err.originJobId,
401
- parentWorkflowId: err.parentWorkflowId,
402
- expire: err.expire,
403
- workflowId: err.workflowId,
404
- workflowTopic: err.workflowTopic,
405
- activityName: err.activityName,
406
- backoffCoefficient: err.backoffCoefficient,
407
- maximumAttempts: err.maximumAttempts,
408
- maximumInterval: err.maximumInterval,
409
- },
410
- };
411
- }
412
- else if (err instanceof errors_1.MeshFlowChildError) {
413
- //return the child interruption
414
- isProcessing = true;
415
- const msg = {
416
- message: err.message,
417
- workflowId: err.workflowId,
418
- dimension: err.workflowDimension,
419
- };
420
- return {
421
- status: stream_1.StreamStatus.SUCCESS,
422
- code: err.code,
423
- metadata: { ...data.metadata },
424
- data: {
425
- arguments: err.arguments,
426
- await: err.await,
427
- backoffCoefficient: err.backoffCoefficient || enums_1.HMSH_MESHFLOW_EXP_BACKOFF,
428
- code: err.code,
429
- index: err.index,
430
- message: JSON.stringify(msg),
431
- maximumAttempts: err.maximumAttempts || enums_1.HMSH_MESHFLOW_MAX_ATTEMPTS,
432
- maximumInterval: err.maximumInterval || (0, utils_1.s)(enums_1.HMSH_MESHFLOW_MAX_INTERVAL),
433
- originJobId: err.originJobId,
434
- parentWorkflowId: err.parentWorkflowId,
435
- expire: err.expire,
436
- persistent: err.persistent,
437
- signalIn: err.signalIn,
438
- workflowDimension: err.workflowDimension,
439
- workflowId: err.workflowId,
440
- workflowTopic: err.workflowTopic,
441
- },
442
- };
443
- }
444
- // ALL other errors are actual fatal errors (598, 597, 596)
445
- // OR will be retried (599)
446
- isProcessing = true;
447
- return {
448
- status: stream_1.StreamStatus.SUCCESS,
449
- code: err.code || new errors_1.MeshFlowRetryError(err.message).code,
450
- metadata: { ...data.metadata },
451
- data: {
452
- $error: {
453
- message: err.message,
454
- type: err.name,
455
- name: err.name,
456
- stack: err.stack,
457
- code: err.code || new errors_1.MeshFlowRetryError(err.message).code,
458
- },
459
- },
460
- };
461
- }
462
- };
463
- }
464
- /**
465
- * @private
466
- */
467
- static async shutdown() {
468
- for (const [_, hotMeshInstance] of WorkerService.instances) {
469
- (await hotMeshInstance).stop();
470
- }
471
- }
472
- }
473
- _a = WorkerService;
474
- /**
475
- * @private
476
- */
477
- WorkerService.activityRegistry = {}; //user's activities
478
- /**
479
- * @private
480
- */
481
- WorkerService.instances = new Map();
482
- /**
483
- * @private
484
- */
485
- WorkerService.getHotMesh = async (workflowTopic, config, options) => {
486
- const targetNamespace = config?.namespace ?? factory_1.APP_ID;
487
- const optionsHash = WorkerService.hashOptions(config?.connection);
488
- const targetTopic = `${optionsHash}.${targetNamespace}.${workflowTopic}`;
489
- if (WorkerService.instances.has(targetTopic)) {
490
- return await WorkerService.instances.get(targetTopic);
491
- }
492
- const hotMeshClient = hotmesh_1.HotMesh.init({
493
- logLevel: options?.logLevel ?? enums_1.HMSH_LOGLEVEL,
494
- appId: targetNamespace,
495
- engine: {
496
- connection: { ...config?.connection },
497
- },
498
- });
499
- WorkerService.instances.set(targetTopic, hotMeshClient);
500
- await WorkerService.activateWorkflow(await hotMeshClient);
501
- return hotMeshClient;
502
- };
503
- /**
504
- * @private
505
- */
506
- WorkerService.Context = {
507
- info: () => {
508
- return {
509
- workflowId: '',
510
- workflowTopic: '',
511
- };
512
- },
513
- };
514
- exports.WorkerService = WorkerService;
@@ -1,7 +0,0 @@
1
- /**
2
- * A workflow-safe version of Promise.all, currently limited to certain concurrency.
3
- * @private
4
- * @param {...Promise<T>[]} promises - An array of promises.
5
- * @returns {Promise<T[]>} A promise resolving to an array of results.
6
- */
7
- export declare function all<T>(...promises: Promise<T>[]): Promise<T[]>;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.all = void 0;
4
- /**
5
- * A workflow-safe version of Promise.all, currently limited to certain concurrency.
6
- * @private
7
- * @param {...Promise<T>[]} promises - An array of promises.
8
- * @returns {Promise<T[]>} A promise resolving to an array of results.
9
- */
10
- async function all(...promises) {
11
- // a micro-delay to ensure correct sequencing
12
- await new Promise((resolve) => setTimeout(resolve, 1));
13
- return await Promise.all(promises);
14
- }
15
- exports.all = all;
@@ -1,18 +0,0 @@
1
- import { MeshFlowChildError, MeshFlowFatalError, MeshFlowMaxedError, MeshFlowProxyError, MeshFlowRetryError, MeshFlowSleepError, MeshFlowTimeoutError, MeshFlowWaitForError } from '../../../modules/errors';
2
- import { KeyService, KeyType } from '../../../modules/key';
3
- import { asyncLocalStorage } from '../../../modules/storage';
4
- import { deterministicRandom, guid, s, sleepImmediate } from '../../../modules/utils';
5
- import { HotMesh } from '../../hotmesh';
6
- import { SerializerService } from '../../serializer';
7
- import { ActivityConfig, ChildResponseType, HookOptions, ProxyResponseType, ProxyType, WorkflowContext, WorkflowOptions } from '../../../types/meshflow';
8
- import { JobInterruptOptions } from '../../../types/job';
9
- import { StreamCode, StreamStatus } from '../../../types/stream';
10
- import { StringAnyType, StringScalarType, StringStringType } from '../../../types/serializer';
11
- import { HMSH_CODE_MESHFLOW_CHILD, HMSH_CODE_MESHFLOW_FATAL, HMSH_CODE_MESHFLOW_MAXED, HMSH_CODE_MESHFLOW_PROXY, HMSH_CODE_MESHFLOW_SLEEP, HMSH_CODE_MESHFLOW_TIMEOUT, HMSH_CODE_MESHFLOW_WAIT, HMSH_MESHFLOW_EXP_BACKOFF, HMSH_MESHFLOW_MAX_ATTEMPTS, HMSH_MESHFLOW_MAX_INTERVAL } from '../../../modules/enums';
12
- import { MeshFlowChildErrorType, MeshFlowProxyErrorType } from '../../../types/error';
13
- import { TelemetryService } from '../../telemetry';
14
- import { QuorumMessage } from '../../../types';
15
- import { UserMessage } from '../../../types/quorum';
16
- import { Search } from '../search';
17
- import { WorkerService } from '../worker';
18
- export { MeshFlowChildError, MeshFlowFatalError, MeshFlowMaxedError, MeshFlowProxyError, MeshFlowRetryError, MeshFlowSleepError, MeshFlowTimeoutError, MeshFlowWaitForError, KeyService, KeyType, asyncLocalStorage, deterministicRandom, guid, s, sleepImmediate, HotMesh, SerializerService, ActivityConfig, ChildResponseType, HookOptions, ProxyResponseType, ProxyType, WorkflowContext, WorkflowOptions, JobInterruptOptions, StreamCode, StreamStatus, StringAnyType, StringScalarType, StringStringType, HMSH_CODE_MESHFLOW_CHILD, HMSH_CODE_MESHFLOW_FATAL, HMSH_CODE_MESHFLOW_MAXED, HMSH_CODE_MESHFLOW_PROXY, HMSH_CODE_MESHFLOW_SLEEP, HMSH_CODE_MESHFLOW_TIMEOUT, HMSH_CODE_MESHFLOW_WAIT, HMSH_MESHFLOW_EXP_BACKOFF, HMSH_MESHFLOW_MAX_ATTEMPTS, HMSH_MESHFLOW_MAX_INTERVAL, MeshFlowChildErrorType, MeshFlowProxyErrorType, TelemetryService, QuorumMessage, UserMessage, Search, WorkerService, };
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WorkerService = exports.Search = exports.TelemetryService = exports.HMSH_MESHFLOW_MAX_INTERVAL = exports.HMSH_MESHFLOW_MAX_ATTEMPTS = exports.HMSH_MESHFLOW_EXP_BACKOFF = exports.HMSH_CODE_MESHFLOW_WAIT = exports.HMSH_CODE_MESHFLOW_TIMEOUT = exports.HMSH_CODE_MESHFLOW_SLEEP = exports.HMSH_CODE_MESHFLOW_PROXY = exports.HMSH_CODE_MESHFLOW_MAXED = exports.HMSH_CODE_MESHFLOW_FATAL = exports.HMSH_CODE_MESHFLOW_CHILD = exports.StreamStatus = exports.SerializerService = exports.HotMesh = exports.sleepImmediate = exports.s = exports.guid = exports.deterministicRandom = exports.asyncLocalStorage = exports.KeyType = exports.KeyService = exports.MeshFlowWaitForError = exports.MeshFlowTimeoutError = exports.MeshFlowSleepError = exports.MeshFlowRetryError = exports.MeshFlowProxyError = exports.MeshFlowMaxedError = exports.MeshFlowFatalError = exports.MeshFlowChildError = void 0;
4
- const errors_1 = require("../../../modules/errors");
5
- Object.defineProperty(exports, "MeshFlowChildError", { enumerable: true, get: function () { return errors_1.MeshFlowChildError; } });
6
- Object.defineProperty(exports, "MeshFlowFatalError", { enumerable: true, get: function () { return errors_1.MeshFlowFatalError; } });
7
- Object.defineProperty(exports, "MeshFlowMaxedError", { enumerable: true, get: function () { return errors_1.MeshFlowMaxedError; } });
8
- Object.defineProperty(exports, "MeshFlowProxyError", { enumerable: true, get: function () { return errors_1.MeshFlowProxyError; } });
9
- Object.defineProperty(exports, "MeshFlowRetryError", { enumerable: true, get: function () { return errors_1.MeshFlowRetryError; } });
10
- Object.defineProperty(exports, "MeshFlowSleepError", { enumerable: true, get: function () { return errors_1.MeshFlowSleepError; } });
11
- Object.defineProperty(exports, "MeshFlowTimeoutError", { enumerable: true, get: function () { return errors_1.MeshFlowTimeoutError; } });
12
- Object.defineProperty(exports, "MeshFlowWaitForError", { enumerable: true, get: function () { return errors_1.MeshFlowWaitForError; } });
13
- const key_1 = require("../../../modules/key");
14
- Object.defineProperty(exports, "KeyService", { enumerable: true, get: function () { return key_1.KeyService; } });
15
- Object.defineProperty(exports, "KeyType", { enumerable: true, get: function () { return key_1.KeyType; } });
16
- const storage_1 = require("../../../modules/storage");
17
- Object.defineProperty(exports, "asyncLocalStorage", { enumerable: true, get: function () { return storage_1.asyncLocalStorage; } });
18
- const utils_1 = require("../../../modules/utils");
19
- Object.defineProperty(exports, "deterministicRandom", { enumerable: true, get: function () { return utils_1.deterministicRandom; } });
20
- Object.defineProperty(exports, "guid", { enumerable: true, get: function () { return utils_1.guid; } });
21
- Object.defineProperty(exports, "s", { enumerable: true, get: function () { return utils_1.s; } });
22
- Object.defineProperty(exports, "sleepImmediate", { enumerable: true, get: function () { return utils_1.sleepImmediate; } });
23
- const hotmesh_1 = require("../../hotmesh");
24
- Object.defineProperty(exports, "HotMesh", { enumerable: true, get: function () { return hotmesh_1.HotMesh; } });
25
- const serializer_1 = require("../../serializer");
26
- Object.defineProperty(exports, "SerializerService", { enumerable: true, get: function () { return serializer_1.SerializerService; } });
27
- const stream_1 = require("../../../types/stream");
28
- Object.defineProperty(exports, "StreamStatus", { enumerable: true, get: function () { return stream_1.StreamStatus; } });
29
- const enums_1 = require("../../../modules/enums");
30
- Object.defineProperty(exports, "HMSH_CODE_MESHFLOW_CHILD", { enumerable: true, get: function () { return enums_1.HMSH_CODE_MESHFLOW_CHILD; } });
31
- Object.defineProperty(exports, "HMSH_CODE_MESHFLOW_FATAL", { enumerable: true, get: function () { return enums_1.HMSH_CODE_MESHFLOW_FATAL; } });
32
- Object.defineProperty(exports, "HMSH_CODE_MESHFLOW_MAXED", { enumerable: true, get: function () { return enums_1.HMSH_CODE_MESHFLOW_MAXED; } });
33
- Object.defineProperty(exports, "HMSH_CODE_MESHFLOW_PROXY", { enumerable: true, get: function () { return enums_1.HMSH_CODE_MESHFLOW_PROXY; } });
34
- Object.defineProperty(exports, "HMSH_CODE_MESHFLOW_SLEEP", { enumerable: true, get: function () { return enums_1.HMSH_CODE_MESHFLOW_SLEEP; } });
35
- Object.defineProperty(exports, "HMSH_CODE_MESHFLOW_TIMEOUT", { enumerable: true, get: function () { return enums_1.HMSH_CODE_MESHFLOW_TIMEOUT; } });
36
- Object.defineProperty(exports, "HMSH_CODE_MESHFLOW_WAIT", { enumerable: true, get: function () { return enums_1.HMSH_CODE_MESHFLOW_WAIT; } });
37
- Object.defineProperty(exports, "HMSH_MESHFLOW_EXP_BACKOFF", { enumerable: true, get: function () { return enums_1.HMSH_MESHFLOW_EXP_BACKOFF; } });
38
- Object.defineProperty(exports, "HMSH_MESHFLOW_MAX_ATTEMPTS", { enumerable: true, get: function () { return enums_1.HMSH_MESHFLOW_MAX_ATTEMPTS; } });
39
- Object.defineProperty(exports, "HMSH_MESHFLOW_MAX_INTERVAL", { enumerable: true, get: function () { return enums_1.HMSH_MESHFLOW_MAX_INTERVAL; } });
40
- const telemetry_1 = require("../../telemetry");
41
- Object.defineProperty(exports, "TelemetryService", { enumerable: true, get: function () { return telemetry_1.TelemetryService; } });
42
- const search_1 = require("../search");
43
- Object.defineProperty(exports, "Search", { enumerable: true, get: function () { return search_1.Search; } });
44
- const worker_1 = require("../worker");
45
- Object.defineProperty(exports, "WorkerService", { enumerable: true, get: function () { return worker_1.WorkerService; } });
@@ -1,6 +0,0 @@
1
- import { WorkflowContext } from './common';
2
- /**
3
- * Returns the current workflow context, restored from storage.
4
- * @returns {WorkflowContext} The current workflow context.
5
- */
6
- export declare function getContext(): WorkflowContext;
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getContext = void 0;
4
- const common_1 = require("./common");
5
- /**
6
- * Returns the current workflow context, restored from storage.
7
- * @returns {WorkflowContext} The current workflow context.
8
- */
9
- function getContext() {
10
- const store = common_1.asyncLocalStorage.getStore();
11
- const workflowId = store.get('workflowId');
12
- const replay = store.get('replay');
13
- const cursor = store.get('cursor');
14
- const interruptionRegistry = store.get('interruptionRegistry');
15
- const workflowDimension = store.get('workflowDimension') ?? '';
16
- const workflowTopic = store.get('workflowTopic');
17
- const connection = store.get('connection');
18
- const namespace = store.get('namespace');
19
- const originJobId = store.get('originJobId');
20
- const workflowTrace = store.get('workflowTrace');
21
- const canRetry = store.get('canRetry');
22
- const workflowSpan = store.get('workflowSpan');
23
- const expire = store.get('expire');
24
- const COUNTER = store.get('counter');
25
- const raw = store.get('raw');
26
- return {
27
- canRetry,
28
- COUNTER,
29
- counter: COUNTER.counter,
30
- cursor,
31
- interruptionRegistry,
32
- connection,
33
- expire,
34
- namespace,
35
- originJobId,
36
- raw,
37
- replay,
38
- workflowId,
39
- workflowDimension,
40
- workflowTopic,
41
- workflowTrace,
42
- workflowSpan,
43
- };
44
- }
45
- exports.getContext = getContext;
@@ -1,7 +0,0 @@
1
- /**
2
- * Determines if a replayed execution result already exists for the given prefix.
3
- * @private
4
- * @param {string} prefix - Identifier prefix (e.g., 'proxy', 'child', 'start', 'wait', etc.)
5
- * @returns {Promise<[boolean, number, any]>} A tuple: [alreadyRan, executionIndex, restoredData]
6
- */
7
- export declare function didRun(prefix: string): Promise<[boolean, number, any]>;