@hotmeshio/hotmesh 0.7.0 → 0.8.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.
- package/.claude/settings.local.json +7 -0
- package/README.md +1 -1
- package/build/index.d.ts +1 -3
- package/build/index.js +1 -5
- package/build/modules/utils.js +3 -31
- package/build/package.json +16 -27
- package/build/services/activities/activity.d.ts +43 -6
- package/build/services/activities/activity.js +262 -54
- package/build/services/activities/await.js +2 -2
- package/build/services/activities/cycle.js +1 -1
- package/build/services/activities/hook.d.ts +5 -0
- package/build/services/activities/hook.js +22 -19
- package/build/services/activities/interrupt.js +17 -25
- package/build/services/activities/signal.d.ts +4 -2
- package/build/services/activities/signal.js +27 -24
- package/build/services/activities/worker.js +2 -2
- package/build/services/collator/index.d.ts +123 -25
- package/build/services/collator/index.js +224 -101
- package/build/services/connector/factory.d.ts +1 -1
- package/build/services/connector/factory.js +1 -11
- package/build/services/engine/index.d.ts +5 -5
- package/build/services/engine/index.js +36 -15
- package/build/services/router/consumption/index.js +1 -1
- package/build/services/search/factory.js +1 -9
- package/build/services/store/factory.js +1 -9
- package/build/services/store/index.d.ts +5 -0
- package/build/services/store/providers/postgres/kvsql.d.ts +4 -0
- package/build/services/store/providers/postgres/kvsql.js +4 -0
- package/build/services/store/providers/postgres/kvtransaction.d.ts +2 -0
- package/build/services/store/providers/postgres/kvtransaction.js +23 -0
- package/build/services/store/providers/postgres/kvtypes/hash/basic.d.ts +51 -0
- package/build/services/store/providers/postgres/kvtypes/hash/basic.js +193 -1
- package/build/services/store/providers/postgres/kvtypes/hash/index.d.ts +4 -0
- package/build/services/store/providers/postgres/kvtypes/hash/index.js +6 -0
- package/build/services/store/providers/postgres/postgres.d.ts +20 -0
- package/build/services/store/providers/postgres/postgres.js +38 -1
- package/build/services/stream/factory.js +1 -17
- package/build/services/stream/providers/postgres/scout.js +2 -2
- package/build/services/sub/factory.js +1 -9
- package/build/services/sub/index.d.ts +1 -1
- package/build/services/sub/providers/postgres/postgres.d.ts +1 -1
- package/build/services/sub/providers/postgres/postgres.js +25 -10
- package/build/services/task/index.d.ts +1 -1
- package/build/services/task/index.js +2 -6
- package/build/types/index.d.ts +0 -1
- package/build/types/index.js +1 -4
- package/build/types/provider.d.ts +1 -1
- package/index.ts +0 -4
- package/package.json +16 -27
- package/build/services/connector/providers/ioredis.d.ts +0 -9
- package/build/services/connector/providers/ioredis.js +0 -26
- package/build/services/connector/providers/redis.d.ts +0 -9
- package/build/services/connector/providers/redis.js +0 -38
- package/build/services/search/providers/redis/ioredis.d.ts +0 -23
- package/build/services/search/providers/redis/ioredis.js +0 -189
- package/build/services/search/providers/redis/redis.d.ts +0 -23
- package/build/services/search/providers/redis/redis.js +0 -202
- package/build/services/store/providers/redis/_base.d.ts +0 -137
- package/build/services/store/providers/redis/_base.js +0 -980
- package/build/services/store/providers/redis/ioredis.d.ts +0 -20
- package/build/services/store/providers/redis/ioredis.js +0 -190
- package/build/services/store/providers/redis/redis.d.ts +0 -18
- package/build/services/store/providers/redis/redis.js +0 -199
- package/build/services/stream/providers/redis/ioredis.d.ts +0 -61
- package/build/services/stream/providers/redis/ioredis.js +0 -272
- package/build/services/stream/providers/redis/redis.d.ts +0 -61
- package/build/services/stream/providers/redis/redis.js +0 -305
- package/build/services/sub/providers/redis/ioredis.d.ts +0 -20
- package/build/services/sub/providers/redis/ioredis.js +0 -161
- package/build/services/sub/providers/redis/redis.d.ts +0 -18
- package/build/services/sub/providers/redis/redis.js +0 -148
- package/build/types/redis.d.ts +0 -258
- package/build/types/redis.js +0 -11
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Transform Postgres into a durable pipeline processor. Orchestrate long-running,
|
|
|
14
14
|
Get the power of Temporal without the infrastructure. HotMesh includes MemFlow, a Temporal-compatible API that runs directly on your Postgres database. No app server required.
|
|
15
15
|
|
|
16
16
|
### 3. Distributed State Machine
|
|
17
|
-
Build resilient, stateful applications where every component can fail and recover. HotMesh manages state transitions, retries, and coordination.
|
|
17
|
+
Build resilient, stateful applications where every component can [fail and recover](https://github.com/hotmeshio/sdk-typescript/blob/main/services/collator/README.md). HotMesh manages state transitions, retries, and coordination.
|
|
18
18
|
|
|
19
19
|
### 4. Workflow-as-Code Platform
|
|
20
20
|
Choose your style: procedural workflows with MemFlow's Temporal API, or functional workflows with HotMesh's YAML syntax.
|
package/build/index.d.ts
CHANGED
|
@@ -16,9 +16,7 @@ import * as Enums from './modules/enums';
|
|
|
16
16
|
import * as KeyStore from './modules/key';
|
|
17
17
|
import { ConnectorService as Connector } from './services/connector/factory';
|
|
18
18
|
import { PostgresConnection as ConnectorPostgres } from './services/connector/providers/postgres';
|
|
19
|
-
import { RedisConnection as ConnectorIORedis } from './services/connector/providers/ioredis';
|
|
20
|
-
import { RedisConnection as ConnectorRedis } from './services/connector/providers/redis';
|
|
21
19
|
import { NatsConnection as ConnectorNATS } from './services/connector/providers/nats';
|
|
22
20
|
export { Connector, //factory
|
|
23
|
-
|
|
21
|
+
ConnectorNATS, ConnectorPostgres, HotMesh, HotMeshConfig, MeshCall, MemFlow, Client, Connection, proxyActivities, Search, Entity, Worker, workflow, WorkflowHandle, Enums, Errors, Utils, KeyStore, };
|
|
24
22
|
export * as Types from './types';
|
package/build/index.js
CHANGED
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.Types = exports.KeyStore = exports.Utils = exports.Errors = exports.Enums = exports.WorkflowHandle = exports.workflow = exports.Worker = exports.Entity = exports.Search = exports.proxyActivities = exports.Connection = exports.Client = exports.MemFlow = exports.MeshCall = exports.HotMesh = exports.
|
|
26
|
+
exports.Types = exports.KeyStore = exports.Utils = exports.Errors = exports.Enums = exports.WorkflowHandle = exports.workflow = exports.Worker = exports.Entity = exports.Search = exports.proxyActivities = exports.Connection = exports.Client = exports.MemFlow = exports.MeshCall = exports.HotMesh = exports.ConnectorPostgres = exports.ConnectorNATS = exports.Connector = void 0;
|
|
27
27
|
const hotmesh_1 = require("./services/hotmesh");
|
|
28
28
|
Object.defineProperty(exports, "HotMesh", { enumerable: true, get: function () { return hotmesh_1.HotMesh; } });
|
|
29
29
|
const meshcall_1 = require("./services/meshcall");
|
|
@@ -58,10 +58,6 @@ const factory_1 = require("./services/connector/factory");
|
|
|
58
58
|
Object.defineProperty(exports, "Connector", { enumerable: true, get: function () { return factory_1.ConnectorService; } });
|
|
59
59
|
const postgres_1 = require("./services/connector/providers/postgres");
|
|
60
60
|
Object.defineProperty(exports, "ConnectorPostgres", { enumerable: true, get: function () { return postgres_1.PostgresConnection; } });
|
|
61
|
-
const ioredis_1 = require("./services/connector/providers/ioredis");
|
|
62
|
-
Object.defineProperty(exports, "ConnectorIORedis", { enumerable: true, get: function () { return ioredis_1.RedisConnection; } });
|
|
63
|
-
const redis_1 = require("./services/connector/providers/redis");
|
|
64
|
-
Object.defineProperty(exports, "ConnectorRedis", { enumerable: true, get: function () { return redis_1.RedisConnection; } });
|
|
65
61
|
const nats_1 = require("./services/connector/providers/nats");
|
|
66
62
|
Object.defineProperty(exports, "ConnectorNATS", { enumerable: true, get: function () { return nats_1.NatsConnection; } });
|
|
67
63
|
exports.Types = __importStar(require("./types"));
|
package/build/modules/utils.js
CHANGED
|
@@ -79,42 +79,14 @@ function identifyProvider(provider) {
|
|
|
79
79
|
else if (provider.toString().toLowerCase().includes('nats')) {
|
|
80
80
|
return 'nats';
|
|
81
81
|
}
|
|
82
|
-
else if ('defineCommand' in prototype ||
|
|
83
|
-
Object.keys(prototype).includes('multi')) {
|
|
84
|
-
return 'ioredis';
|
|
85
|
-
}
|
|
86
|
-
else if (Object.keys(prototype).includes('Multi')) {
|
|
87
|
-
return 'redis';
|
|
88
|
-
}
|
|
89
|
-
if (provider.constructor) {
|
|
90
|
-
if (provider.constructor.name === 'Redis' ||
|
|
91
|
-
provider.constructor.name === 'EventEmitter') {
|
|
92
|
-
if ('hset' in provider) {
|
|
93
|
-
return 'ioredis';
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
else if (provider.constructor.name === 'ProviderClient' ||
|
|
97
|
-
provider.constructor.name === 'Commander') {
|
|
98
|
-
if ('HSET' in provider) {
|
|
99
|
-
return 'redis';
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
let type = null;
|
|
104
82
|
if (Object.keys(provider).includes('connection') ||
|
|
105
83
|
!isNaN(provider.totalCount) && !isNaN(provider.idleCount)) {
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
else if (Object.keys(provider).includes('Pipeline')) {
|
|
109
|
-
type = 'ioredis';
|
|
110
|
-
}
|
|
111
|
-
else if (Object.keys(provider).includes('createClient')) {
|
|
112
|
-
type = 'redis';
|
|
84
|
+
return 'postgres';
|
|
113
85
|
}
|
|
114
86
|
else if (prototype.constructor.toString().includes('NatsConnectionImpl')) {
|
|
115
|
-
|
|
87
|
+
return 'nats';
|
|
116
88
|
}
|
|
117
|
-
return
|
|
89
|
+
return null;
|
|
118
90
|
}
|
|
119
91
|
exports.identifyProvider = identifyProvider;
|
|
120
92
|
/**
|
package/build/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hotmeshio/hotmesh",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Permanent-Memory Workflows & AI Agents",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "./build/index.d.ts",
|
|
@@ -23,58 +23,51 @@
|
|
|
23
23
|
"test:await": "NODE_ENV=test jest ./tests/functional/awaiter/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
24
24
|
"test:compile": "NODE_ENV=test jest ./tests/functional/compile/index.test.ts --detectOpenHandles --forceExit --verbose",
|
|
25
25
|
"test:connect": "NODE_ENV=test jest ./tests/unit/services/connector/* --detectOpenHandles --forceExit --verbose",
|
|
26
|
-
"test:connect:ioredis": "NODE_ENV=test jest ./tests/unit/services/connector/providers/ioredis.test.ts --detectOpenHandles --forceExit --verbose",
|
|
27
26
|
"test:connect:postgres": "NODE_ENV=test jest ./tests/unit/services/connector/providers/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
28
|
-
"test:connect:redis": "NODE_ENV=test jest ./tests/unit/services/connector/providers/ioredis.test.ts --detectOpenHandles --forceExit --verbose",
|
|
29
27
|
"test:connect:nats": "NODE_ENV=test jest ./tests/unit/services/connector/providers/nats.test.ts --detectOpenHandles --forceExit --verbose",
|
|
30
28
|
"test:memflow": "NODE_ENV=test jest ./tests/memflow/*/*.test.ts --detectOpenHandles --forceExit --verbose",
|
|
29
|
+
"test:memflow:postgres": "HMSH_LOGLEVEL=info NODE_ENV=test jest ./tests/memflow/*/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
31
30
|
"test:memflow:basic": "HMSH_LOGLEVEL=info NODE_ENV=test jest ./tests/memflow/basic/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
32
31
|
"test:memflow:collision": "NODE_ENV=test jest ./tests/memflow/collision/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
33
32
|
"test:memflow:fatal": "NODE_ENV=test jest ./tests/memflow/fatal/*.test.ts --detectOpenHandles --forceExit --verbose",
|
|
34
33
|
"test:memflow:goodbye": "NODE_ENV=test HMSH_LOGLEVEL=debug jest ./tests/memflow/goodbye/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
35
|
-
"test:memflow:interceptor": "NODE_ENV=test HMSH_LOGLEVEL=
|
|
34
|
+
"test:memflow:interceptor": "NODE_ENV=test HMSH_LOGLEVEL=info jest ./tests/memflow/interceptor/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
36
35
|
"test:memflow:entity": "NODE_ENV=test HMSH_LOGLEVEL=debug jest ./tests/memflow/entity/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
37
36
|
"test:memflow:agent": "NODE_ENV=test HMSH_LOGLEVEL=debug jest ./tests/memflow/agent/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
38
37
|
"test:memflow:hello": "HMSH_TELEMETRY=debug HMSH_LOGLEVEL=debug NODE_ENV=test jest ./tests/memflow/helloworld/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
39
38
|
"test:memflow:hook": "NODE_ENV=test jest ./tests/memflow/hook/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
40
|
-
"test:memflow:interrupt": "NODE_ENV=test jest ./tests/memflow/interrupt
|
|
41
|
-
"test:memflow:loopactivity": "NODE_ENV=test jest ./tests/memflow/loopactivity
|
|
39
|
+
"test:memflow:interrupt": "NODE_ENV=test jest ./tests/memflow/interrupt/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
40
|
+
"test:memflow:loopactivity": "NODE_ENV=test jest ./tests/memflow/loopactivity/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
42
41
|
"test:memflow:nested": "NODE_ENV=test jest ./tests/memflow/nested/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
43
42
|
"test:memflow:pipeline": "NODE_ENV=test jest ./tests/memflow/pipeline/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
44
43
|
"test:memflow:retry": "NODE_ENV=test jest ./tests/memflow/retry/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
45
44
|
"test:memflow:retrypolicy": "NODE_ENV=test jest ./tests/memflow/retry-policy/*.test.ts --detectOpenHandles --forceExit --verbose",
|
|
46
45
|
"test:memflow:sleep": "NODE_ENV=test jest ./tests/memflow/sleep/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
47
46
|
"test:memflow:signal": "NODE_ENV=test jest ./tests/memflow/signal/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
48
|
-
"test:memflow:unknown": "NODE_ENV=test jest ./tests/memflow/unknown
|
|
47
|
+
"test:memflow:unknown": "NODE_ENV=test jest ./tests/memflow/unknown/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
49
48
|
"test:cycle": "NODE_ENV=test jest ./tests/functional/cycle/*.test.ts --detectOpenHandles --forceExit --verbose",
|
|
50
|
-
"test:functional": "NODE_ENV=test jest ./tests/functional
|
|
49
|
+
"test:functional": "NODE_ENV=test jest ./tests/functional/**/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
51
50
|
"test:emit": "NODE_ENV=test jest ./tests/functional/emit/*.test.ts --detectOpenHandles --forceExit --verbose",
|
|
52
51
|
"test:pending": "NODE_ENV=test jest ./tests/functional/pending/index.test.ts --detectOpenHandles --forceExit --verbose",
|
|
53
|
-
"test:hmsh": "NODE_ENV=test jest ./tests/functional
|
|
52
|
+
"test:hmsh": "NODE_ENV=test jest ./tests/functional/postgres.test.ts --detectOpenHandles --verbose --forceExit",
|
|
54
53
|
"test:hook": "NODE_ENV=test jest ./tests/functional/hook/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
55
|
-
"test:interrupt": "NODE_ENV=test jest ./tests/functional/interrupt
|
|
54
|
+
"test:interrupt": "NODE_ENV=test jest ./tests/functional/interrupt/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
56
55
|
"test:parallel": "NODE_ENV=test jest ./tests/functional/parallel/index.test.ts --detectOpenHandles --forceExit --verbose",
|
|
57
56
|
"test:pipe": "NODE_ENV=test jest ./tests/unit/services/pipe/index.test.ts --detectOpenHandles --forceExit --verbose",
|
|
58
57
|
"test:quorum": "NODE_ENV=test jest ./tests/functional/quorum/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
59
|
-
"test:reclaim": "NODE_ENV=test jest ./tests/functional/reclaim
|
|
60
|
-
"test:redeploy": "NODE_ENV=test jest ./tests/functional/redeploy
|
|
58
|
+
"test:reclaim": "NODE_ENV=test jest ./tests/functional/reclaim/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
59
|
+
"test:redeploy": "NODE_ENV=test jest ./tests/functional/redeploy/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
61
60
|
"test:reporter": "NODE_ENV=test jest ./tests/unit/services/reporter/index.test.ts --detectOpenHandles --forceExit --verbose",
|
|
62
|
-
"test:reentrant": "NODE_ENV=test jest ./tests/functional/reentrant
|
|
63
|
-
"test:retry": "NODE_ENV=test jest ./tests/functional/retry
|
|
61
|
+
"test:reentrant": "NODE_ENV=test jest ./tests/functional/reentrant/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
62
|
+
"test:retry": "NODE_ENV=test jest ./tests/functional/retry/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
64
63
|
"test:retrypolicy": "NODE_ENV=test jest ./tests/functional/retry-policy/*.test.ts --detectOpenHandles --forceExit --verbose",
|
|
65
|
-
"test:sequence": "NODE_ENV=test HMSH_LOGLEVEL=
|
|
66
|
-
"test:signal": "NODE_ENV=test jest ./tests/functional/signal
|
|
64
|
+
"test:sequence": "NODE_ENV=test HMSH_LOGLEVEL=info jest ./tests/functional/sequence/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
65
|
+
"test:signal": "NODE_ENV=test jest ./tests/functional/signal/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
67
66
|
"test:status": "NODE_ENV=test jest ./tests/functional/status/index.test.ts --detectOpenHandles --forceExit --verbose",
|
|
68
67
|
"test:providers": "NODE_ENV=test jest ./tests/functional/*/providers/*/*.test.ts --detectOpenHandles --forceExit --verbose",
|
|
69
|
-
"test:store:ioredis": "NODE_ENV=test jest ./tests/functional/store/providers/redis/ioredis.test.ts --detectOpenHandles --forceExit --verbose",
|
|
70
|
-
"test:store:redis": "NODE_ENV=test jest ./tests/functional/store/providers/redis/redis.test.ts --detectOpenHandles --forceExit --verbose",
|
|
71
68
|
"test:store:postgres": "NODE_ENV=test jest ./tests/functional/store/providers/postgres/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
72
|
-
"test:stream:ioredis": "NODE_ENV=test jest ./tests/functional/stream/providers/redis/ioredis.test.ts --detectOpenHandles --forceExit --verbose",
|
|
73
|
-
"test:stream:redis": "NODE_ENV=test jest ./tests/functional/stream/providers/redis/redis.test.ts --detectOpenHandles --forceExit --verbose",
|
|
74
69
|
"test:stream:postgres": "NODE_ENV=test jest ./tests/functional/stream/providers/postgres/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
75
70
|
"test:stream:nats": "NODE_ENV=test jest ./tests/functional/stream/providers/nats/nats.test.ts --detectOpenHandles --forceExit --verbose",
|
|
76
|
-
"test:sub:ioredis": "NODE_ENV=test jest ./tests/functional/sub/providers/redis/ioredis.test.ts --detectOpenHandles --forceExit --verbose",
|
|
77
|
-
"test:sub:redis": "NODE_ENV=test jest ./tests/functional/sub/providers/redis/redis.test.ts --detectOpenHandles --forceExit --verbose",
|
|
78
71
|
"test:sub:postgres": "NODE_ENV=test jest ./tests/functional/sub/providers/postgres/postgres.test.ts --detectOpenHandles --forceExit --verbose",
|
|
79
72
|
"test:sub:nats": "NODE_ENV=test jest ./tests/functional/sub/providers/nats/nats.test.ts --detectOpenHandles --forceExit --verbose",
|
|
80
73
|
"test:trigger": "NODE_ENV=test jest ./tests/unit/services/activities/trigger.test.ts --detectOpenHandles --forceExit --verbose",
|
|
@@ -116,13 +109,11 @@
|
|
|
116
109
|
"eslint-config-prettier": "^9.1.0",
|
|
117
110
|
"eslint-plugin-import": "^2.29.1",
|
|
118
111
|
"eslint-plugin-prettier": "^5.1.3",
|
|
119
|
-
"ioredis": "^5.3.2",
|
|
120
112
|
"javascript-obfuscator": "^0.6.2",
|
|
121
113
|
"jest": "^29.5.0",
|
|
122
114
|
"nats": "^2.28.0",
|
|
123
115
|
"openai": "^5.9.0",
|
|
124
116
|
"pg": "^8.10.0",
|
|
125
|
-
"redis": "^4.6.13",
|
|
126
117
|
"rimraf": "^4.4.1",
|
|
127
118
|
"terser": "^5.37.0",
|
|
128
119
|
"ts-jest": "^29.0.5",
|
|
@@ -132,9 +123,7 @@
|
|
|
132
123
|
"typescript": "^5.0.4"
|
|
133
124
|
},
|
|
134
125
|
"peerDependencies": {
|
|
135
|
-
"ioredis": "^4.0.0 || ^5.0.0",
|
|
136
126
|
"nats": "^2.0.0",
|
|
137
|
-
"pg": "^8.0.0"
|
|
138
|
-
"redis": "^4.0.0"
|
|
127
|
+
"pg": "^8.0.0"
|
|
139
128
|
}
|
|
140
129
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { EngineService } from '../engine';
|
|
2
2
|
import { ILogger } from '../logger';
|
|
3
3
|
import { StoreService } from '../store';
|
|
4
|
-
import { TelemetryService } from '../telemetry';
|
|
5
4
|
import { ActivityData, ActivityLeg, ActivityMetadata, ActivityType } from '../../types/activity';
|
|
6
5
|
import { ProviderClient, ProviderTransaction, TransactionResultList } from '../../types/provider';
|
|
7
6
|
import { JobState, JobStatus } from '../../types/job';
|
|
@@ -24,6 +23,7 @@ declare class Activity {
|
|
|
24
23
|
leg: ActivityLeg;
|
|
25
24
|
adjacencyList: StreamData[];
|
|
26
25
|
adjacentIndex: number;
|
|
26
|
+
guidLedger: number;
|
|
27
27
|
constructor(config: ActivityType, data: ActivityData, metadata: ActivityMetadata, hook: ActivityData | null, engine: EngineService, context?: JobState);
|
|
28
28
|
setLeg(leg: ActivityLeg): void;
|
|
29
29
|
/**
|
|
@@ -37,15 +37,48 @@ declare class Activity {
|
|
|
37
37
|
*/
|
|
38
38
|
verifyEntry(): Promise<void>;
|
|
39
39
|
/**
|
|
40
|
-
* Upon entering leg 2 of a duplexed activity
|
|
40
|
+
* Upon entering leg 2 of a duplexed activity.
|
|
41
|
+
* Increments both the activity ledger (+1) and GUID ledger (+1).
|
|
42
|
+
* Stores the GUID ledger value for step-level resume decisions.
|
|
41
43
|
*/
|
|
42
44
|
verifyReentry(): Promise<number>;
|
|
43
45
|
processEvent(status?: StreamStatus, code?: StreamCode, type?: 'hook' | 'output'): Promise<void>;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Executes the 3-step Leg2 protocol using GUID ledger for
|
|
48
|
+
* crash-safe resume. Each step bundles durable writes with
|
|
49
|
+
* its concluding digit update in a single transaction.
|
|
50
|
+
*
|
|
51
|
+
* @returns true if this transition caused the job to complete
|
|
52
|
+
*/
|
|
53
|
+
executeStepProtocol(delta: number, shouldFinalize: boolean): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* Extracts the thresholdHit value from transaction results.
|
|
56
|
+
* The setStatusAndCollateGuid result is the last item.
|
|
57
|
+
*/
|
|
58
|
+
resolveThresholdHit(results: TransactionResultList): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Extracts the job status from the last result of a transaction.
|
|
61
|
+
* Used by subclass Leg1 process methods for telemetry.
|
|
62
|
+
*/
|
|
48
63
|
resolveStatus(multiResponse: TransactionResultList): number;
|
|
64
|
+
/**
|
|
65
|
+
* Leg1 entry verification for Category B activities (Leg1-only with children).
|
|
66
|
+
* Returns true if this is a resume (Leg1 already completed on a prior attempt).
|
|
67
|
+
* On resume, loads the GUID ledger for step-level resume decisions.
|
|
68
|
+
*/
|
|
69
|
+
verifyLeg1Entry(): Promise<boolean>;
|
|
70
|
+
/**
|
|
71
|
+
* Executes the 3-step Leg1 protocol for Category B activities
|
|
72
|
+
* (Leg1-only with children, e.g., Hook passthrough, Signal, Interrupt-another).
|
|
73
|
+
* Uses the incoming Leg1 message GUID as the GUID ledger key.
|
|
74
|
+
*
|
|
75
|
+
* Step A: setState + notarizeLeg1Completion + step1 markers (transaction 1)
|
|
76
|
+
* Step B: publish children + step2 markers + setStatusAndCollateGuid (transaction 2)
|
|
77
|
+
* Step C: if edge → runJobCompletionTasks + step3 markers + finalize (transaction 3)
|
|
78
|
+
*
|
|
79
|
+
* @returns true if this transition caused the job to complete
|
|
80
|
+
*/
|
|
81
|
+
executeLeg1StepProtocol(delta: number): Promise<boolean>;
|
|
49
82
|
mapJobData(): void;
|
|
50
83
|
mapInputData(): void;
|
|
51
84
|
mapOutputData(): void;
|
|
@@ -94,6 +127,10 @@ declare class Activity {
|
|
|
94
127
|
* @private
|
|
95
128
|
*/
|
|
96
129
|
shouldPersistJob(): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Transition method for Category C (Leg1-only, no children, no semaphore change)
|
|
132
|
+
* and Category D (Trigger) activities. NOT used by the Leg2 step protocol.
|
|
133
|
+
*/
|
|
97
134
|
transition(adjacencyList: StreamData[], jobStatus: JobStatus): Promise<string[]>;
|
|
98
135
|
/**
|
|
99
136
|
* A job with a vale < -100_000_000 is considered interrupted,
|