@motiadev/core 0.8.2-beta.140-460356 → 0.8.2-beta.140-424079
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/dist/index.d.ts +5 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -12
- package/dist/src/call-step-file.js +1 -1
- package/dist/src/cron-handler.d.ts +3 -4
- package/dist/src/cron-handler.d.ts.map +1 -1
- package/dist/src/cron-handler.js +2 -46
- package/dist/src/event-manager.d.ts +4 -0
- package/dist/src/event-manager.d.ts.map +1 -0
- package/dist/src/event-manager.js +32 -0
- package/dist/src/helper/flows-helper.d.ts +1 -1
- package/dist/src/helper/flows-helper.d.ts.map +1 -1
- package/dist/src/infrastructure-validator/schemas.d.ts +8 -8
- package/dist/src/locked-data.d.ts +2 -3
- package/dist/src/locked-data.d.ts.map +1 -1
- package/dist/src/locked-data.js +3 -6
- package/dist/src/logger-factory.d.ts +2 -2
- package/dist/src/logger-factory.d.ts.map +1 -1
- package/dist/src/motia.d.ts +6 -4
- package/dist/src/motia.d.ts.map +1 -1
- package/dist/src/node/logger.d.ts +3 -0
- package/dist/src/node/logger.d.ts.map +1 -1
- package/dist/src/node/logger.js +5 -0
- package/dist/src/observability/index.d.ts +14 -3
- package/dist/src/observability/index.d.ts.map +1 -1
- package/dist/src/observability/trace-stream-adapter.d.ts +1 -1
- package/dist/src/observability/trace-stream-adapter.d.ts.map +1 -1
- package/dist/src/observability/trace-stream-adapter.js +2 -3
- package/dist/src/observability/tracer.d.ts +0 -1
- package/dist/src/observability/tracer.d.ts.map +1 -1
- package/dist/src/observability/tracer.js +3 -13
- package/dist/src/printer.d.ts +6 -0
- package/dist/src/printer.d.ts.map +1 -1
- package/dist/src/printer.js +19 -2
- package/dist/src/python/motia_logger.py +10 -1
- package/dist/src/queue-manager.d.ts +2 -2
- package/dist/src/queue-manager.d.ts.map +1 -1
- package/dist/src/queue-manager.js +3 -17
- package/dist/src/server.d.ts +5 -11
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +12 -13
- package/dist/src/{adapters/defaults/state/file-state-adapter.d.ts → state/adapters/default-state-adapter.d.ts} +2 -2
- package/dist/src/state/adapters/default-state-adapter.d.ts.map +1 -0
- package/dist/src/{adapters/defaults/state/file-state-adapter.js → state/adapters/default-state-adapter.js} +3 -1
- package/dist/src/{adapters/defaults/state → state/adapters}/memory-state-adapter.d.ts +1 -1
- package/dist/src/state/adapters/memory-state-adapter.d.ts.map +1 -0
- package/dist/src/{adapters/defaults/state → state/adapters}/memory-state-adapter.js +3 -1
- package/dist/src/{adapters/defaults/state → state/adapters}/utils.d.ts +1 -1
- package/dist/src/state/adapters/utils.d.ts.map +1 -0
- package/dist/src/state/create-state-adapter.d.ts +4 -4
- package/dist/src/state/create-state-adapter.d.ts.map +1 -1
- package/dist/src/state/create-state-adapter.js +3 -3
- package/dist/src/{adapters/interfaces/state-adapter.interface.d.ts → state/state-adapter.d.ts} +5 -2
- package/dist/src/state/state-adapter.d.ts.map +1 -0
- package/dist/src/step-handlers.d.ts +2 -2
- package/dist/src/step-handlers.d.ts.map +1 -1
- package/dist/src/step-handlers.js +10 -14
- package/dist/src/{adapters/defaults/stream → streams/adapters}/file-stream-adapter.d.ts +2 -2
- package/dist/src/streams/adapters/file-stream-adapter.d.ts.map +1 -0
- package/dist/src/{adapters/defaults/stream → streams/adapters}/file-stream-adapter.js +3 -3
- package/dist/src/{adapters/defaults/stream → streams/adapters}/memory-stream-adapter.d.ts +1 -4
- package/dist/src/streams/adapters/memory-stream-adapter.d.ts.map +1 -0
- package/dist/src/streams/adapters/memory-stream-adapter.js +39 -0
- package/dist/src/streams/adapters/stream-adapter.d.ts +12 -0
- package/dist/src/streams/adapters/stream-adapter.d.ts.map +1 -0
- package/dist/src/streams/adapters/stream-adapter.js +10 -0
- package/dist/src/streams/flows-config-stream.d.ts +1 -1
- package/dist/src/streams/flows-config-stream.d.ts.map +1 -1
- package/dist/src/streams/flows-config-stream.js +3 -3
- package/dist/src/streams/flows-stream.d.ts +1 -1
- package/dist/src/streams/flows-stream.d.ts.map +1 -1
- package/dist/src/streams/flows-stream.js +3 -3
- package/dist/src/streams/logs-stream.d.ts +1 -2
- package/dist/src/streams/logs-stream.d.ts.map +1 -1
- package/dist/src/streams/logs-stream.js +3 -3
- package/dist/src/types/app-config-types.d.ts +0 -12
- package/dist/src/types/app-config-types.d.ts.map +1 -1
- package/dist/src/types.d.ts +5 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/validate-event-input.d.ts.map +1 -1
- package/dist/src/validate-event-input.js +1 -3
- package/package.json +1 -1
- package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.ts +0 -13
- package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.js +0 -53
- package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.ts +0 -15
- package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.js +0 -49
- package/dist/src/adapters/defaults/index.d.ts +0 -7
- package/dist/src/adapters/defaults/index.d.ts.map +0 -1
- package/dist/src/adapters/defaults/index.js +0 -15
- package/dist/src/adapters/defaults/state/file-state-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/state/memory-state-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/state/utils.d.ts.map +0 -1
- package/dist/src/adapters/defaults/stream/file-stream-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/stream/memory-stream-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/stream/memory-stream-adapter.js +0 -55
- package/dist/src/adapters/interfaces/cron-adapter.interface.d.ts +0 -29
- package/dist/src/adapters/interfaces/cron-adapter.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/event-adapter.interface.d.ts +0 -15
- package/dist/src/adapters/interfaces/event-adapter.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/event-adapter.interface.js +0 -2
- package/dist/src/adapters/interfaces/index.d.ts +0 -6
- package/dist/src/adapters/interfaces/index.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/index.js +0 -5
- package/dist/src/adapters/interfaces/observability-adapter.interface.d.ts +0 -23
- package/dist/src/adapters/interfaces/observability-adapter.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/observability-adapter.interface.js +0 -2
- package/dist/src/adapters/interfaces/state-adapter.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/state-adapter.interface.js +0 -2
- package/dist/src/adapters/interfaces/stream-adapter.interface.d.ts +0 -22
- package/dist/src/adapters/interfaces/stream-adapter.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/stream-adapter.interface.js +0 -16
- /package/dist/src/{adapters/defaults/state → state/adapters}/utils.js +0 -0
- /package/dist/src/{adapters/interfaces/cron-adapter.interface.js → state/state-adapter.js} +0 -0
|
@@ -6,7 +6,7 @@ const stream_tracer_1 = require("./stream-tracer");
|
|
|
6
6
|
const trace_manager_1 = require("./trace-manager");
|
|
7
7
|
const trace_stream_adapter_1 = require("./trace-stream-adapter");
|
|
8
8
|
const MAX_TRACE_GROUPS = process.env.MOTIA_MAX_TRACE_GROUPS //
|
|
9
|
-
? parseInt(process.env.MOTIA_MAX_TRACE_GROUPS)
|
|
9
|
+
? Number.parseInt(process.env.MOTIA_MAX_TRACE_GROUPS, 10)
|
|
10
10
|
: 50;
|
|
11
11
|
class BaseTracerFactory {
|
|
12
12
|
constructor(traceStream, traceGroupStream) {
|
|
@@ -56,21 +56,11 @@ class BaseTracerFactory {
|
|
|
56
56
|
const manager = new trace_manager_1.TraceManager(this.traceStream, this.traceGroupStream, traceGroup, trace);
|
|
57
57
|
return new stream_tracer_1.StreamTracer(manager, traceGroup, trace, logger);
|
|
58
58
|
}
|
|
59
|
-
async attachToTrace(traceId, step, logger) {
|
|
60
|
-
const existingGroup = await this.traceGroupStream.get('default', traceId);
|
|
61
|
-
if (!existingGroup) {
|
|
62
|
-
return this.createTracer(traceId, step, logger);
|
|
63
|
-
}
|
|
64
|
-
const trace = (0, create_trace_1.createTrace)(existingGroup, step);
|
|
65
|
-
const manager = new trace_manager_1.TraceManager(this.traceStream, this.traceGroupStream, existingGroup, trace);
|
|
66
|
-
return new stream_tracer_1.StreamTracer(manager, existingGroup, trace, logger);
|
|
67
|
-
}
|
|
68
59
|
}
|
|
69
60
|
exports.BaseTracerFactory = BaseTracerFactory;
|
|
70
61
|
const createTracerFactory = (lockedData) => {
|
|
71
|
-
const streamAdapter = lockedData.streamAdapter === 'file' ? 'file' : 'memory';
|
|
72
62
|
const traceStreamName = 'motia-trace';
|
|
73
|
-
const traceStreamAdapter = new trace_stream_adapter_1.TraceStreamAdapter(lockedData.baseDir, traceStreamName, streamAdapter);
|
|
63
|
+
const traceStreamAdapter = new trace_stream_adapter_1.TraceStreamAdapter(lockedData.baseDir, traceStreamName, lockedData.streamAdapter);
|
|
74
64
|
const traceStream = lockedData.createStream({
|
|
75
65
|
filePath: traceStreamName,
|
|
76
66
|
hidden: true,
|
|
@@ -81,7 +71,7 @@ const createTracerFactory = (lockedData) => {
|
|
|
81
71
|
},
|
|
82
72
|
})();
|
|
83
73
|
const traceGroupName = 'motia-trace-group';
|
|
84
|
-
const traceGroupStreamAdapter = new trace_stream_adapter_1.TraceStreamAdapter(lockedData.baseDir, traceGroupName, streamAdapter);
|
|
74
|
+
const traceGroupStreamAdapter = new trace_stream_adapter_1.TraceStreamAdapter(lockedData.baseDir, traceGroupName, lockedData.streamAdapter);
|
|
85
75
|
const traceGroupStream = lockedData.createStream({
|
|
86
76
|
filePath: traceGroupName,
|
|
87
77
|
hidden: true,
|
package/dist/src/printer.d.ts
CHANGED
|
@@ -35,6 +35,9 @@ export declare class Printer {
|
|
|
35
35
|
getStepType(step: Step): string;
|
|
36
36
|
getStepPath(step: Step): string;
|
|
37
37
|
getStreamPath(stream: Stream): string;
|
|
38
|
+
printPluginLog(message: string): void;
|
|
39
|
+
printPluginWarn(message: string): void;
|
|
40
|
+
printPluginError(message: string, ...args: unknown[]): void;
|
|
38
41
|
}
|
|
39
42
|
export declare class NoPrinter extends Printer {
|
|
40
43
|
constructor();
|
|
@@ -51,5 +54,8 @@ export declare class NoPrinter extends Printer {
|
|
|
51
54
|
printStreamCreated(): void;
|
|
52
55
|
printStreamUpdated(): void;
|
|
53
56
|
printStreamRemoved(): void;
|
|
57
|
+
printPluginLog(): void;
|
|
58
|
+
printPluginWarn(): void;
|
|
59
|
+
printPluginError(): void;
|
|
54
60
|
}
|
|
55
61
|
//# sourceMappingURL=printer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printer.d.ts","sourceRoot":"","sources":["../../src/printer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"printer.d.ts","sourceRoot":"","sources":["../../src/printer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAiB5C,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAE5C,OAAO,SAAU;IACjB,OAAO,SAAU;IACjB,UAAU,SAAa;IACvB,QAAQ,SAAW;IACnB,KAAK,SAAQ;IACb,OAAO,SAAU;IACjB,OAAO,SAAU;IAEjB,8BAA8B,CAC5B,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EACvB,OAAO,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;IA6B1F,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;IAMzC,gBAAgB,CAAC,IAAI,EAAE,IAAI;IAI3B,gBAAgB,CAAC,IAAI,EAAE,IAAI;IAI3B,gBAAgB,CAAC,IAAI,EAAE,IAAI;IAI3B,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAIjC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAIjC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAIjC,kBAAkB,CAAC,MAAM,EAAE,MAAM;IAIjC,kBAAkB,CAAC,MAAM,EAAE,MAAM;IAIjC,kBAAkB,CAAC,MAAM,EAAE,MAAM;IAIjC,6BAA6B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;IAMtD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;IAO9C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe;IAcvE,eAAe,CAAC,QAAQ,EAAE,MAAM;IAIhC,WAAW,CAAC,IAAI,EAAE,IAAI;IAStB,WAAW,CAAC,IAAI,EAAE,IAAI;IAKtB,aAAa,CAAC,MAAM,EAAE,MAAM;IAK5B,cAAc,CAAC,OAAO,EAAE,MAAM;IAK9B,eAAe,CAAC,OAAO,EAAE,MAAM;IAK/B,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;CAIrD;AAED,qBAAa,SAAU,SAAQ,OAAO;;IAKpC,8BAA8B;IAE9B,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,aAAa;IACb,aAAa;IAEb,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAElB,cAAc;IACd,eAAe;IACf,gBAAgB;CACjB"}
|
package/dist/src/printer.js
CHANGED
|
@@ -18,6 +18,9 @@ const removed = colors_1.default.red('➜ [REMOVED]');
|
|
|
18
18
|
const invalidEmit = colors_1.default.red('➜ [INVALID EMIT]');
|
|
19
19
|
const error = colors_1.default.red('[ERROR]');
|
|
20
20
|
const warning = colors_1.default.yellow('[WARNING]');
|
|
21
|
+
const warnIcon = colors_1.default.yellow('⚠');
|
|
22
|
+
const infoIcon = colors_1.default.blue('ℹ');
|
|
23
|
+
const errorIcon = colors_1.default.red('✖');
|
|
21
24
|
class Printer {
|
|
22
25
|
constructor(baseDir) {
|
|
23
26
|
this.baseDir = baseDir;
|
|
@@ -30,7 +33,6 @@ class Printer {
|
|
|
30
33
|
this.removed = removed;
|
|
31
34
|
}
|
|
32
35
|
printEventInputValidationError(emit, details) {
|
|
33
|
-
const warnIcon = colors_1.default.yellow('⚠');
|
|
34
36
|
const emitPath = colors_1.default.bold(colors_1.default.cyan(`Emit ${emit.topic}`));
|
|
35
37
|
console.log(`${warnIcon} ${warning} ${emitPath} validation issues:`);
|
|
36
38
|
const hasAny = details.missingFields?.length || details.extraFields?.length || details.typeMismatches?.length;
|
|
@@ -81,7 +83,7 @@ class Printer {
|
|
|
81
83
|
console.log(`${removed} ${streamTag} ${this.getStreamPath(stream)} removed`);
|
|
82
84
|
}
|
|
83
85
|
printInvalidEmitConfiguration(step, emit) {
|
|
84
|
-
console.log(`${warning} ${stepTag} ${this.getStepType(step)} ${this.getStepPath(step)} emits to ${colors_1.default.yellow(emit)}, but there is no subscriber defined`);
|
|
86
|
+
console.log(`${warnIcon} ${warning} ${stepTag} ${this.getStepType(step)} ${this.getStepPath(step)} emits to ${colors_1.default.yellow(emit)}, but there is no subscriber defined`);
|
|
85
87
|
}
|
|
86
88
|
printInvalidSchema(topic, step) {
|
|
87
89
|
console.log(`${error} Topic ${colors_1.default.bold(colors_1.default.blue(topic))} has incompatible schemas in the following steps:`);
|
|
@@ -124,6 +126,18 @@ class Printer {
|
|
|
124
126
|
const streamPath = this.getRelativePath(stream.filePath);
|
|
125
127
|
return colors_1.default.bold(colors_1.default.magenta(streamPath));
|
|
126
128
|
}
|
|
129
|
+
printPluginLog(message) {
|
|
130
|
+
const pluginTag = colors_1.default.bold(colors_1.default.cyan('[motia-plugins]'));
|
|
131
|
+
console.log(`${infoIcon} ${pluginTag} ${message}`);
|
|
132
|
+
}
|
|
133
|
+
printPluginWarn(message) {
|
|
134
|
+
const pluginTag = colors_1.default.bold(colors_1.default.cyan('[motia-plugins]'));
|
|
135
|
+
console.warn(`${warnIcon} ${pluginTag} ${colors_1.default.yellow(message)}`);
|
|
136
|
+
}
|
|
137
|
+
printPluginError(message, ...args) {
|
|
138
|
+
const pluginTag = colors_1.default.bold(colors_1.default.cyan('[motia-plugins]'));
|
|
139
|
+
console.error(`${errorIcon} ${pluginTag} ${colors_1.default.red(message)}`, ...args);
|
|
140
|
+
}
|
|
127
141
|
}
|
|
128
142
|
exports.Printer = Printer;
|
|
129
143
|
class NoPrinter extends Printer {
|
|
@@ -143,5 +157,8 @@ class NoPrinter extends Printer {
|
|
|
143
157
|
printStreamCreated() { }
|
|
144
158
|
printStreamUpdated() { }
|
|
145
159
|
printStreamRemoved() { }
|
|
160
|
+
printPluginLog() { }
|
|
161
|
+
printPluginWarn() { }
|
|
162
|
+
printPluginError() { }
|
|
146
163
|
}
|
|
147
164
|
exports.NoPrinter = NoPrinter;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import time
|
|
2
|
-
from typing import Any, Dict, Optional
|
|
2
|
+
from typing import Any, Dict, Optional, Callable, List
|
|
3
3
|
from motia_rpc import RpcSender
|
|
4
4
|
|
|
5
|
+
LogListener = Callable[[str, str, Optional[Any]], None]
|
|
6
|
+
|
|
5
7
|
class Logger:
|
|
6
8
|
def __init__(self, trace_id: str, flows: list[str], rpc: RpcSender):
|
|
7
9
|
self.trace_id = trace_id
|
|
8
10
|
self.flows = flows
|
|
9
11
|
self.rpc = rpc
|
|
12
|
+
self.listeners: List[LogListener] = []
|
|
10
13
|
|
|
11
14
|
def _log(self, level: str, message: str, args: Optional[Dict[str, Any]] = None) -> None:
|
|
12
15
|
log_entry = {
|
|
@@ -27,6 +30,9 @@ class Logger:
|
|
|
27
30
|
|
|
28
31
|
self.rpc.send_no_wait('log', log_entry)
|
|
29
32
|
|
|
33
|
+
for listener in self.listeners:
|
|
34
|
+
listener(level, message, args)
|
|
35
|
+
|
|
30
36
|
def info(self, message: str, args: Optional[Any] = None) -> None:
|
|
31
37
|
self._log("info", message, args)
|
|
32
38
|
|
|
@@ -38,3 +44,6 @@ class Logger:
|
|
|
38
44
|
|
|
39
45
|
def warn(self, message: str, args: Optional[Any] = None) -> None:
|
|
40
46
|
self._log("warn", message, args)
|
|
47
|
+
|
|
48
|
+
def add_listener(self, listener: LogListener) -> None:
|
|
49
|
+
self.listeners.append(listener)
|
|
@@ -10,7 +10,7 @@ export declare class MaxRetriesError extends QueueError {
|
|
|
10
10
|
readonly attempts: number;
|
|
11
11
|
constructor(message: string, attempts: number);
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
type QueueMetrics = {
|
|
14
14
|
queueDepth: number;
|
|
15
15
|
processingCount: number;
|
|
16
16
|
retriesCount: number;
|
|
@@ -24,7 +24,6 @@ export declare class QueueManager {
|
|
|
24
24
|
private queueEmitter;
|
|
25
25
|
private scheduledTimeouts;
|
|
26
26
|
private metrics;
|
|
27
|
-
private topicListeners;
|
|
28
27
|
private processingMessages;
|
|
29
28
|
constructor(logger?: Logger);
|
|
30
29
|
private initMetrics;
|
|
@@ -40,4 +39,5 @@ export declare class QueueManager {
|
|
|
40
39
|
getAllMetrics(): Record<string, QueueMetrics>;
|
|
41
40
|
reset(): void;
|
|
42
41
|
}
|
|
42
|
+
export {};
|
|
43
43
|
//# sourceMappingURL=queue-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-manager.d.ts","sourceRoot":"","sources":["../../src/queue-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1D,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,UAAU;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,UAAU;aAG3B,QAAQ,EAAE,MAAM;gBADhC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM;CAKnC;AAoBD,
|
|
1
|
+
{"version":3,"file":"queue-manager.d.ts","sourceRoot":"","sources":["../../src/queue-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1D,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,UAAU;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,UAAU;aAG3B,QAAQ,EAAE,MAAM;gBADhC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM;CAKnC;AAoBD,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,kBAAkB,CAAyB;gBAEvC,MAAM,CAAC,EAAE,MAAM;IAO3B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;YA0BN,cAAc;IAwE5B,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,kBAAkB;IAcpB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmChG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAuBlG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAoBlD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAInD,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAQ7C,KAAK,IAAI,IAAI;CAUd"}
|
|
@@ -34,9 +34,11 @@ class QueueManager {
|
|
|
34
34
|
this.queueEmitter = new events_1.EventEmitter();
|
|
35
35
|
this.scheduledTimeouts = new Map();
|
|
36
36
|
this.metrics = new Map();
|
|
37
|
-
this.topicListeners = new Map();
|
|
38
37
|
this.processingMessages = new Set();
|
|
39
38
|
this.logger = logger || logger_1.globalLogger;
|
|
39
|
+
this.queueEmitter.on('process', (topic) => {
|
|
40
|
+
this.processQueue(topic);
|
|
41
|
+
});
|
|
40
42
|
}
|
|
41
43
|
initMetrics(topic) {
|
|
42
44
|
if (!this.metrics.has(topic)) {
|
|
@@ -96,7 +98,6 @@ class QueueManager {
|
|
|
96
98
|
message.subscriptionId = handler.subscriptionId;
|
|
97
99
|
message.visibleAt = Date.now();
|
|
98
100
|
}
|
|
99
|
-
const visibilityTimeoutMs = handler.queueConfig.visibilityTimeout * 1000;
|
|
100
101
|
this.updateMetric(topic, 'processingCount', 1);
|
|
101
102
|
try {
|
|
102
103
|
await handler.handler(message.event);
|
|
@@ -194,15 +195,6 @@ class QueueManager {
|
|
|
194
195
|
if (!this.subscriptions[topic]) {
|
|
195
196
|
this.subscriptions[topic] = [];
|
|
196
197
|
}
|
|
197
|
-
if (!this.topicListeners.has(topic)) {
|
|
198
|
-
const listener = (t) => {
|
|
199
|
-
if (t === topic) {
|
|
200
|
-
this.processQueue(topic);
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
this.topicListeners.set(topic, listener);
|
|
204
|
-
this.queueEmitter.on('process', listener);
|
|
205
|
-
}
|
|
206
198
|
const internalSubscriptionId = (0, crypto_1.randomUUID)();
|
|
207
199
|
this.subscriptions[topic].push({ handler, queueConfig, subscriptionId, internalSubscriptionId });
|
|
208
200
|
if (this.queues[topic] && this.queues[topic].length > 0) {
|
|
@@ -228,11 +220,6 @@ class QueueManager {
|
|
|
228
220
|
delete this.subscriptions[topic];
|
|
229
221
|
const hasQueuedMessages = this.queues[topic] && this.queues[topic].length > 0;
|
|
230
222
|
if (!hasQueuedMessages) {
|
|
231
|
-
const listener = this.topicListeners.get(topic);
|
|
232
|
-
if (listener) {
|
|
233
|
-
this.queueEmitter.off('process', listener);
|
|
234
|
-
this.topicListeners.delete(topic);
|
|
235
|
-
}
|
|
236
223
|
const timeout = this.scheduledTimeouts.get(topic);
|
|
237
224
|
if (timeout) {
|
|
238
225
|
clearTimeout(timeout);
|
|
@@ -260,7 +247,6 @@ class QueueManager {
|
|
|
260
247
|
this.lockedGroups = new Set();
|
|
261
248
|
this.processingMessages = new Set();
|
|
262
249
|
this.metrics.clear();
|
|
263
|
-
this.topicListeners.clear();
|
|
264
250
|
}
|
|
265
251
|
}
|
|
266
252
|
exports.QueueManager = QueueManager;
|
package/dist/src/server.d.ts
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { type Express } from 'express';
|
|
2
2
|
import http from 'http';
|
|
3
3
|
import type { Server as WsServer } from 'ws';
|
|
4
|
-
import type { CronAdapter } from './adapters/interfaces/cron-adapter.interface';
|
|
5
|
-
import type { EventAdapter } from './adapters/interfaces/event-adapter.interface';
|
|
6
|
-
import type { StateAdapter } from './adapters/interfaces/state-adapter.interface';
|
|
7
4
|
import { type CronManager } from './cron-handler';
|
|
8
5
|
import type { LockedData } from './locked-data';
|
|
9
6
|
import type { Motia } from './motia';
|
|
10
7
|
import { Printer } from './printer';
|
|
8
|
+
import { QueueManager } from './queue-manager';
|
|
9
|
+
import type { StateAdapter } from './state/state-adapter';
|
|
11
10
|
import { type MotiaEventManager } from './step-handlers';
|
|
12
|
-
import type { ApiRouteConfig, Step } from './types';
|
|
13
|
-
import type { StreamAdapterFactory } from './types/app-config-types';
|
|
11
|
+
import type { ApiRouteConfig, EventManager, Step } from './types';
|
|
14
12
|
export type MotiaServer = {
|
|
13
|
+
printer: Printer;
|
|
15
14
|
app: Express;
|
|
16
15
|
server: http.Server;
|
|
17
16
|
socketServer: WsServer;
|
|
@@ -26,11 +25,6 @@ type MotiaServerConfig = {
|
|
|
26
25
|
isVerbose: boolean;
|
|
27
26
|
printer?: Printer;
|
|
28
27
|
};
|
|
29
|
-
|
|
30
|
-
eventAdapter: EventAdapter;
|
|
31
|
-
cronAdapter: CronAdapter;
|
|
32
|
-
streamAdapter?: StreamAdapterFactory;
|
|
33
|
-
};
|
|
34
|
-
export declare const createServer: (lockedData: LockedData, state: StateAdapter, config: MotiaServerConfig, adapters: AdapterOptions) => MotiaServer;
|
|
28
|
+
export declare const createServer: (lockedData: LockedData, eventManager: EventManager, state: StateAdapter, config: MotiaServerConfig, queueManager?: QueueManager) => MotiaServer;
|
|
35
29
|
export {};
|
|
36
30
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAA;AAC5E,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAA;AAC5E,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAA;AAG5C,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,gBAAgB,CAAA;AAOpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAG5E,OAAO,KAAK,EAA2B,cAAc,EAA4B,YAAY,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAGpH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;IACnB,YAAY,EAAE,QAAQ,CAAA;IACtB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IACjD,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAC9C,WAAW,EAAE,WAAW,CAAA;IACxB,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,YAAY,UAAU,EACtB,cAAc,YAAY,EAC1B,OAAO,YAAY,EACnB,QAAQ,iBAAiB,EACzB,eAAe,YAAY,KAC1B,WAmRF,CAAA"}
|
package/dist/src/server.js
CHANGED
|
@@ -20,11 +20,12 @@ const logger_1 = require("./logger");
|
|
|
20
20
|
const logger_factory_1 = require("./logger-factory");
|
|
21
21
|
const tracer_1 = require("./observability/tracer");
|
|
22
22
|
const printer_1 = require("./printer");
|
|
23
|
+
const queue_manager_1 = require("./queue-manager");
|
|
23
24
|
const socket_server_1 = require("./socket-server");
|
|
24
25
|
const step_handlers_1 = require("./step-handlers");
|
|
25
26
|
const steps_1 = require("./steps");
|
|
26
27
|
const logs_stream_1 = require("./streams/logs-stream");
|
|
27
|
-
const createServer = (lockedData, state, config,
|
|
28
|
+
const createServer = (lockedData, eventManager, state, config, queueManager) => {
|
|
28
29
|
const printer = config.printer ?? new printer_1.Printer(process.cwd());
|
|
29
30
|
const app = (0, express_1.default)();
|
|
30
31
|
const server = http_1.default.createServer(app);
|
|
@@ -107,24 +108,25 @@ const createServer = (lockedData, state, config, adapters) => {
|
|
|
107
108
|
const allSteps = [...steps_1.systemSteps, ...lockedData.activeSteps];
|
|
108
109
|
const loggerFactory = new logger_factory_1.BaseLoggerFactory(config.isVerbose, logStream);
|
|
109
110
|
const tracerFactory = (0, tracer_1.createTracerFactory)(lockedData);
|
|
111
|
+
const queueMgr = queueManager || new queue_manager_1.QueueManager();
|
|
110
112
|
const motia = {
|
|
111
113
|
loggerFactory,
|
|
112
|
-
|
|
114
|
+
eventManager,
|
|
113
115
|
state,
|
|
114
116
|
lockedData,
|
|
115
117
|
printer,
|
|
116
118
|
tracerFactory,
|
|
117
119
|
app,
|
|
118
120
|
stateAdapter: state,
|
|
121
|
+
queueManager: queueMgr,
|
|
119
122
|
};
|
|
120
|
-
const cronManager = (0, cron_handler_1.setupCronHandlers)(motia
|
|
121
|
-
const motiaEventManager = (0, step_handlers_1.createStepHandlers)(motia,
|
|
123
|
+
const cronManager = (0, cron_handler_1.setupCronHandlers)(motia);
|
|
124
|
+
const motiaEventManager = (0, step_handlers_1.createStepHandlers)(motia, queueMgr);
|
|
122
125
|
const asyncHandler = (step) => {
|
|
123
126
|
return async (req, res) => {
|
|
124
127
|
const traceId = (0, generate_trace_id_1.generateTraceId)();
|
|
125
128
|
const { name: stepName, flows } = step.config;
|
|
126
129
|
const logger = loggerFactory.create({ traceId, flows, stepName });
|
|
127
|
-
const tracer = await motia.tracerFactory.createTracer(traceId, step, logger);
|
|
128
130
|
logger.debug('[API] Received request, processing step', { path: req.path });
|
|
129
131
|
const data = {
|
|
130
132
|
body: req.body,
|
|
@@ -145,17 +147,17 @@ const createServer = (lockedData, state, config, adapters) => {
|
|
|
145
147
|
traceId,
|
|
146
148
|
flows,
|
|
147
149
|
logger,
|
|
148
|
-
tracer,
|
|
150
|
+
tracer: null,
|
|
149
151
|
};
|
|
150
|
-
await
|
|
152
|
+
await eventManager.emit(eventObj);
|
|
151
153
|
},
|
|
152
154
|
logger,
|
|
153
155
|
streams: lockedData.getStreams(),
|
|
154
156
|
};
|
|
155
157
|
result = await step.handler(data, context);
|
|
156
|
-
tracer.end();
|
|
157
158
|
}
|
|
158
159
|
else {
|
|
160
|
+
const tracer = await motia.tracerFactory.createTracer(traceId, step, logger);
|
|
159
161
|
result = await (0, call_step_file_1.callStepFile)({ data, step, logger, tracer, traceId }, motia);
|
|
160
162
|
}
|
|
161
163
|
(0, utils_1.trackEvent)('api_call_success', { stepName });
|
|
@@ -250,12 +252,9 @@ const createServer = (lockedData, state, config, adapters) => {
|
|
|
250
252
|
console.error('Server error:', error);
|
|
251
253
|
});
|
|
252
254
|
const close = async () => {
|
|
253
|
-
|
|
255
|
+
cronManager.close();
|
|
254
256
|
socketServer.close();
|
|
255
|
-
if (adapters?.eventAdapter) {
|
|
256
|
-
await adapters.eventAdapter.shutdown();
|
|
257
|
-
}
|
|
258
257
|
};
|
|
259
|
-
return { app, server, socketServer, close, removeRoute, addRoute, cronManager, motiaEventManager, motia };
|
|
258
|
+
return { app, server, socketServer, close, removeRoute, addRoute, cronManager, motiaEventManager, motia, printer };
|
|
260
259
|
};
|
|
261
260
|
exports.createServer = createServer;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StateAdapter, StateItem, StateItemsInput } from '
|
|
1
|
+
import type { StateAdapter, StateItem, StateItemsInput } from '../state-adapter';
|
|
2
2
|
export type FileAdapterConfig = {
|
|
3
3
|
adapter: 'default';
|
|
4
4
|
filePath: string;
|
|
@@ -20,4 +20,4 @@ export declare class FileStateAdapter implements StateAdapter {
|
|
|
20
20
|
private _readFile;
|
|
21
21
|
private _writeFile;
|
|
22
22
|
}
|
|
23
|
-
//# sourceMappingURL=
|
|
23
|
+
//# sourceMappingURL=default-state-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-state-adapter.d.ts","sourceRoot":"","sources":["../../../../src/state/adapters/default-state-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGhF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,MAAM,EAAE,iBAAiB;IAKrC,IAAI;IAeE,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAQ1C,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAOvD,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAW7C,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAa1D,KAAK,CAAC,OAAO,EAAE,MAAM;IAarB,IAAI,CAAC,OAAO,EAAE,MAAM;IAOpB,QAAQ;IASR,OAAO;IAIP,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAazD,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,UAAU;CAQnB"}
|
|
@@ -110,7 +110,9 @@ class FileStateAdapter {
|
|
|
110
110
|
Object.keys(data).forEach((key) => traceIds.add(key.split(':')[0]));
|
|
111
111
|
return Array.from(traceIds);
|
|
112
112
|
}
|
|
113
|
-
async cleanup() {
|
|
113
|
+
async cleanup() {
|
|
114
|
+
// No cleanup needed for file system
|
|
115
|
+
}
|
|
114
116
|
async items(input) {
|
|
115
117
|
const data = this._readFile();
|
|
116
118
|
return Object.entries(data)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StateAdapter, StateItem, StateItemsInput } from '
|
|
1
|
+
import type { StateAdapter, StateItem, StateItemsInput } from '../state-adapter';
|
|
2
2
|
export declare class MemoryStateAdapter implements StateAdapter {
|
|
3
3
|
private state;
|
|
4
4
|
constructor();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-state-adapter.d.ts","sourceRoot":"","sources":["../../../../src/state/adapters/memory-state-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGhF,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,KAAK,CAA8B;;IAMrC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAM1C,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAMvD,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAQ7C,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAW1D,KAAK,CAAC,OAAO,EAAE,MAAM;IAUrB,IAAI,CAAC,OAAO,EAAE,MAAM;IAMpB,QAAQ;IAQR,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAYnD,OAAO;IAIb,OAAO,CAAC,QAAQ;CAGjB"}
|
|
@@ -58,7 +58,9 @@ class MemoryStateAdapter {
|
|
|
58
58
|
.filter((item) => (input.groupId ? item.groupId === input.groupId : true))
|
|
59
59
|
.filter((item) => (input.filter ? (0, utils_1.filterItem)(item, input.filter) : true));
|
|
60
60
|
}
|
|
61
|
-
async cleanup() {
|
|
61
|
+
async cleanup() {
|
|
62
|
+
// No cleanup needed for memory
|
|
63
|
+
}
|
|
62
64
|
_makeKey(traceId, key) {
|
|
63
65
|
return `${traceId}:${key}`;
|
|
64
66
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StateFilter, StateItem } from '
|
|
1
|
+
import type { StateFilter, StateItem } from '../state-adapter';
|
|
2
2
|
export declare const inferType: (value: unknown) => StateItem["type"];
|
|
3
3
|
export declare const filterItem: (item: StateItem, filters: StateFilter[]) => boolean;
|
|
4
4
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/state/adapters/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAU9D,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,SAAS,CAAC,MAAM,CAa1D,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,MAAM,SAAS,EAAE,SAAS,WAAW,EAAE,KAAG,OAuCpE,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type FileAdapterConfig
|
|
2
|
-
import
|
|
3
|
-
type AdapterConfig =
|
|
1
|
+
import { type FileAdapterConfig, FileStateAdapter } from './adapters/default-state-adapter';
|
|
2
|
+
import { MemoryStateAdapter } from './adapters/memory-state-adapter';
|
|
3
|
+
type AdapterConfig = FileAdapterConfig | {
|
|
4
4
|
adapter: 'memory';
|
|
5
5
|
};
|
|
6
|
-
export declare function createStateAdapter(config: AdapterConfig):
|
|
6
|
+
export declare function createStateAdapter(config: AdapterConfig): FileStateAdapter | MemoryStateAdapter;
|
|
7
7
|
export {};
|
|
8
8
|
//# sourceMappingURL=create-state-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-state-adapter.d.ts","sourceRoot":"","sources":["../../../src/state/create-state-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"create-state-adapter.d.ts","sourceRoot":"","sources":["../../../src/state/create-state-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAEpE,KAAK,aAAa,GAAG,iBAAiB,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAA;AAE9D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,yCAEvD"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createStateAdapter = createStateAdapter;
|
|
4
|
-
const
|
|
5
|
-
const memory_state_adapter_1 = require("
|
|
4
|
+
const default_state_adapter_1 = require("./adapters/default-state-adapter");
|
|
5
|
+
const memory_state_adapter_1 = require("./adapters/memory-state-adapter");
|
|
6
6
|
function createStateAdapter(config) {
|
|
7
|
-
return config.adapter === 'default' ? new
|
|
7
|
+
return config.adapter === 'default' ? new default_state_adapter_1.FileStateAdapter(config) : new memory_state_adapter_1.MemoryStateAdapter();
|
|
8
8
|
}
|
package/dist/src/{adapters/interfaces/state-adapter.interface.d.ts → state/state-adapter.d.ts}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { InternalStateManager } from '
|
|
1
|
+
import type { InternalStateManager } from '../types';
|
|
2
2
|
export interface StateItem {
|
|
3
3
|
groupId: string;
|
|
4
4
|
key: string;
|
|
@@ -14,6 +14,9 @@ export interface StateItemsInput {
|
|
|
14
14
|
groupId?: string;
|
|
15
15
|
filter?: StateFilter[];
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Interface for state management adapters
|
|
19
|
+
*/
|
|
17
20
|
export interface StateAdapter extends InternalStateManager {
|
|
18
21
|
clear(traceId: string): Promise<void>;
|
|
19
22
|
cleanup(): Promise<void>;
|
|
@@ -21,4 +24,4 @@ export interface StateAdapter extends InternalStateManager {
|
|
|
21
24
|
traceIds(): Promise<string[]>;
|
|
22
25
|
items(input: StateItemsInput): Promise<StateItem[]>;
|
|
23
26
|
}
|
|
24
|
-
//# sourceMappingURL=state-adapter.
|
|
27
|
+
//# sourceMappingURL=state-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-adapter.d.ts","sourceRoot":"","sources":["../../../src/state/state-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAEpD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IACnE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,CAAA;CAC7D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,UAAU,GACV,aAAa,GACb,YAAY,GACZ,UAAU,GACV,WAAW,GACX,QAAQ,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,oBAAoB;IACxD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAExB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACxC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAE7B,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;CACpD"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { EventAdapter } from './adapters/interfaces/event-adapter.interface';
|
|
2
1
|
import type { Motia } from './motia';
|
|
2
|
+
import type { QueueManager } from './queue-manager';
|
|
3
3
|
import type { EventConfig, Step } from './types';
|
|
4
4
|
export type MotiaEventManager = {
|
|
5
5
|
createHandler: (step: Step<EventConfig>) => void;
|
|
6
6
|
removeHandler: (step: Step<EventConfig>) => void;
|
|
7
7
|
};
|
|
8
|
-
export declare const createStepHandlers: (motia: Motia,
|
|
8
|
+
export declare const createStepHandlers: (motia: Motia, queueManager: QueueManager) => MotiaEventManager;
|
|
9
9
|
//# sourceMappingURL=step-handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-handlers.d.ts","sourceRoot":"","sources":["../../src/step-handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"step-handlers.d.ts","sourceRoot":"","sources":["../../src/step-handlers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAS,WAAW,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAGvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;IAChD,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;CACjD,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,EAAE,cAAc,YAAY,KAAG,iBAkF7E,CAAA"}
|
|
@@ -6,7 +6,7 @@ const defaults_1 = require("./infrastructure-validator/defaults");
|
|
|
6
6
|
const validations_1 = require("./infrastructure-validator/validations");
|
|
7
7
|
const logger_1 = require("./logger");
|
|
8
8
|
const validate_event_input_1 = require("./validate-event-input");
|
|
9
|
-
const createStepHandlers = (motia,
|
|
9
|
+
const createStepHandlers = (motia, queueManager) => {
|
|
10
10
|
const eventSteps = motia.lockedData.eventSteps();
|
|
11
11
|
const handlerMap = new Map();
|
|
12
12
|
logger_1.globalLogger.debug(`[step handler] creating step handlers for ${eventSteps.length} steps`);
|
|
@@ -37,22 +37,18 @@ const createStepHandlers = (motia, eventAdapter) => {
|
|
|
37
37
|
}
|
|
38
38
|
const queueConfig = (0, defaults_1.getQueueConfigWithDefaults)(config.infrastructure);
|
|
39
39
|
const handlers = [];
|
|
40
|
-
subscribes.forEach(
|
|
40
|
+
subscribes.forEach((subscribe) => {
|
|
41
41
|
const handler = async (event) => {
|
|
42
|
-
const { data, traceId
|
|
43
|
-
const logger = event.logger
|
|
44
|
-
|
|
45
|
-
: motia.loggerFactory.create({ traceId, flows: flows || [], stepName: step.config.name });
|
|
46
|
-
const tracer = event.tracer
|
|
47
|
-
? event.tracer.child(step, logger)
|
|
48
|
-
: await motia.tracerFactory.attachToTrace(traceId, step, logger);
|
|
42
|
+
const { data, traceId } = event;
|
|
43
|
+
const logger = event.logger.child({ step: step.config.name });
|
|
44
|
+
const tracer = event.tracer.child(step, logger);
|
|
49
45
|
logger_1.globalLogger.debug('[step handler] received event', { event: removeLogger(event), step: name });
|
|
50
46
|
(0, validate_event_input_1.validateEventInput)(step, event, motia);
|
|
51
47
|
// Continue execution even if validation failed
|
|
52
48
|
await (0, call_step_file_1.callStepFile)({ step, data, traceId, tracer, logger, infrastructure: config.infrastructure }, motia);
|
|
53
49
|
};
|
|
54
|
-
|
|
55
|
-
handlers.push(
|
|
50
|
+
queueManager.subscribe(subscribe, handler, queueConfig, subscribe);
|
|
51
|
+
handlers.push({ topic: subscribe, handler });
|
|
56
52
|
});
|
|
57
53
|
handlerMap.set(filePath, handlers);
|
|
58
54
|
};
|
|
@@ -60,11 +56,11 @@ const createStepHandlers = (motia, eventAdapter) => {
|
|
|
60
56
|
const { filePath } = step;
|
|
61
57
|
const handlers = handlerMap.get(filePath);
|
|
62
58
|
if (handlers) {
|
|
63
|
-
handlers.forEach((
|
|
64
|
-
|
|
59
|
+
handlers.forEach(({ topic, handler }) => {
|
|
60
|
+
queueManager.unsubscribe(topic, handler);
|
|
65
61
|
logger_1.globalLogger.debug('[step handler] unsubscribed handler', {
|
|
66
62
|
filePath,
|
|
67
|
-
|
|
63
|
+
topic,
|
|
68
64
|
step: step.config.name,
|
|
69
65
|
});
|
|
70
66
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { BaseStreamItem } from '
|
|
2
|
-
import { StreamAdapter } from '
|
|
1
|
+
import type { BaseStreamItem } from '../../types-stream';
|
|
2
|
+
import { StreamAdapter } from './stream-adapter';
|
|
3
3
|
export type FileAdapterConfig = {
|
|
4
4
|
filePath: string;
|
|
5
5
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-stream-adapter.d.ts","sourceRoot":"","sources":["../../../../src/streams/adapters/file-stream-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,iBAAiB,CAAC,KAAK,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEvB,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,GAAE,MAAiB;IAMzF,IAAI;IAcE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;IAQ3D,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAOxE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;;;IAW7C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAa1E,KAAK,CAAC,OAAO,EAAE,MAAM;IAa3B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAI9C,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAU7C,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO;CAQnC"}
|
|
@@ -39,10 +39,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.FileStreamAdapter = void 0;
|
|
40
40
|
const fs_1 = __importDefault(require("fs"));
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
|
-
const
|
|
43
|
-
class FileStreamAdapter extends
|
|
42
|
+
const stream_adapter_1 = require("./stream-adapter");
|
|
43
|
+
class FileStreamAdapter extends stream_adapter_1.StreamAdapter {
|
|
44
44
|
constructor(filePath, streamName, motiaFileStoragePath = '.motia') {
|
|
45
|
-
super(
|
|
45
|
+
super();
|
|
46
46
|
this.streamsDir = path.join(filePath, motiaFileStoragePath, 'streams');
|
|
47
47
|
this.filePath = path.join(this.streamsDir, `${streamName}.stream.json`);
|
|
48
48
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { StreamAdapter } from '
|
|
1
|
+
import { StreamAdapter } from './stream-adapter';
|
|
2
2
|
export declare class MemoryStreamAdapter<TData> extends StreamAdapter<TData> {
|
|
3
3
|
private state;
|
|
4
|
-
constructor(streamName: string);
|
|
5
4
|
init(): Promise<void>;
|
|
6
5
|
getGroup<T>(groupId: string): Promise<T[]>;
|
|
7
6
|
get<T>(groupId: string, id: string): Promise<T | null>;
|
|
@@ -9,8 +8,6 @@ export declare class MemoryStreamAdapter<TData> extends StreamAdapter<TData> {
|
|
|
9
8
|
id: string;
|
|
10
9
|
}>;
|
|
11
10
|
delete<T>(groupId: string, id: string): Promise<T | null>;
|
|
12
|
-
clear(groupId: string): Promise<void>;
|
|
13
|
-
private _makeKeyPrefix;
|
|
14
11
|
private _makeKey;
|
|
15
12
|
}
|
|
16
13
|
//# sourceMappingURL=memory-stream-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-stream-adapter.d.ts","sourceRoot":"","sources":["../../../../src/streams/adapters/memory-stream-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,qBAAa,mBAAmB,CAAC,KAAK,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;IAClE,OAAO,CAAC,KAAK,CAA8B;IAErC,IAAI;IAIJ,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAM1C,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAMtD,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;;;IAQ5C,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAW/D,OAAO,CAAC,QAAQ;CAGjB"}
|