@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.
Files changed (115) hide show
  1. package/dist/index.d.ts +5 -11
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -12
  4. package/dist/src/call-step-file.js +1 -1
  5. package/dist/src/cron-handler.d.ts +3 -4
  6. package/dist/src/cron-handler.d.ts.map +1 -1
  7. package/dist/src/cron-handler.js +2 -46
  8. package/dist/src/event-manager.d.ts +4 -0
  9. package/dist/src/event-manager.d.ts.map +1 -0
  10. package/dist/src/event-manager.js +32 -0
  11. package/dist/src/helper/flows-helper.d.ts +1 -1
  12. package/dist/src/helper/flows-helper.d.ts.map +1 -1
  13. package/dist/src/infrastructure-validator/schemas.d.ts +8 -8
  14. package/dist/src/locked-data.d.ts +2 -3
  15. package/dist/src/locked-data.d.ts.map +1 -1
  16. package/dist/src/locked-data.js +3 -6
  17. package/dist/src/logger-factory.d.ts +2 -2
  18. package/dist/src/logger-factory.d.ts.map +1 -1
  19. package/dist/src/motia.d.ts +6 -4
  20. package/dist/src/motia.d.ts.map +1 -1
  21. package/dist/src/node/logger.d.ts +3 -0
  22. package/dist/src/node/logger.d.ts.map +1 -1
  23. package/dist/src/node/logger.js +5 -0
  24. package/dist/src/observability/index.d.ts +14 -3
  25. package/dist/src/observability/index.d.ts.map +1 -1
  26. package/dist/src/observability/trace-stream-adapter.d.ts +1 -1
  27. package/dist/src/observability/trace-stream-adapter.d.ts.map +1 -1
  28. package/dist/src/observability/trace-stream-adapter.js +2 -3
  29. package/dist/src/observability/tracer.d.ts +0 -1
  30. package/dist/src/observability/tracer.d.ts.map +1 -1
  31. package/dist/src/observability/tracer.js +3 -13
  32. package/dist/src/printer.d.ts +6 -0
  33. package/dist/src/printer.d.ts.map +1 -1
  34. package/dist/src/printer.js +19 -2
  35. package/dist/src/python/motia_logger.py +10 -1
  36. package/dist/src/queue-manager.d.ts +2 -2
  37. package/dist/src/queue-manager.d.ts.map +1 -1
  38. package/dist/src/queue-manager.js +3 -17
  39. package/dist/src/server.d.ts +5 -11
  40. package/dist/src/server.d.ts.map +1 -1
  41. package/dist/src/server.js +12 -13
  42. package/dist/src/{adapters/defaults/state/file-state-adapter.d.ts → state/adapters/default-state-adapter.d.ts} +2 -2
  43. package/dist/src/state/adapters/default-state-adapter.d.ts.map +1 -0
  44. package/dist/src/{adapters/defaults/state/file-state-adapter.js → state/adapters/default-state-adapter.js} +3 -1
  45. package/dist/src/{adapters/defaults/state → state/adapters}/memory-state-adapter.d.ts +1 -1
  46. package/dist/src/state/adapters/memory-state-adapter.d.ts.map +1 -0
  47. package/dist/src/{adapters/defaults/state → state/adapters}/memory-state-adapter.js +3 -1
  48. package/dist/src/{adapters/defaults/state → state/adapters}/utils.d.ts +1 -1
  49. package/dist/src/state/adapters/utils.d.ts.map +1 -0
  50. package/dist/src/state/create-state-adapter.d.ts +4 -4
  51. package/dist/src/state/create-state-adapter.d.ts.map +1 -1
  52. package/dist/src/state/create-state-adapter.js +3 -3
  53. package/dist/src/{adapters/interfaces/state-adapter.interface.d.ts → state/state-adapter.d.ts} +5 -2
  54. package/dist/src/state/state-adapter.d.ts.map +1 -0
  55. package/dist/src/step-handlers.d.ts +2 -2
  56. package/dist/src/step-handlers.d.ts.map +1 -1
  57. package/dist/src/step-handlers.js +10 -14
  58. package/dist/src/{adapters/defaults/stream → streams/adapters}/file-stream-adapter.d.ts +2 -2
  59. package/dist/src/streams/adapters/file-stream-adapter.d.ts.map +1 -0
  60. package/dist/src/{adapters/defaults/stream → streams/adapters}/file-stream-adapter.js +3 -3
  61. package/dist/src/{adapters/defaults/stream → streams/adapters}/memory-stream-adapter.d.ts +1 -4
  62. package/dist/src/streams/adapters/memory-stream-adapter.d.ts.map +1 -0
  63. package/dist/src/streams/adapters/memory-stream-adapter.js +39 -0
  64. package/dist/src/streams/adapters/stream-adapter.d.ts +12 -0
  65. package/dist/src/streams/adapters/stream-adapter.d.ts.map +1 -0
  66. package/dist/src/streams/adapters/stream-adapter.js +10 -0
  67. package/dist/src/streams/flows-config-stream.d.ts +1 -1
  68. package/dist/src/streams/flows-config-stream.d.ts.map +1 -1
  69. package/dist/src/streams/flows-config-stream.js +3 -3
  70. package/dist/src/streams/flows-stream.d.ts +1 -1
  71. package/dist/src/streams/flows-stream.d.ts.map +1 -1
  72. package/dist/src/streams/flows-stream.js +3 -3
  73. package/dist/src/streams/logs-stream.d.ts +1 -2
  74. package/dist/src/streams/logs-stream.d.ts.map +1 -1
  75. package/dist/src/streams/logs-stream.js +3 -3
  76. package/dist/src/types/app-config-types.d.ts +0 -12
  77. package/dist/src/types/app-config-types.d.ts.map +1 -1
  78. package/dist/src/types.d.ts +5 -0
  79. package/dist/src/types.d.ts.map +1 -1
  80. package/dist/src/validate-event-input.d.ts.map +1 -1
  81. package/dist/src/validate-event-input.js +1 -3
  82. package/package.json +1 -1
  83. package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.ts +0 -13
  84. package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.ts.map +0 -1
  85. package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.js +0 -53
  86. package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.ts +0 -15
  87. package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.ts.map +0 -1
  88. package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.js +0 -49
  89. package/dist/src/adapters/defaults/index.d.ts +0 -7
  90. package/dist/src/adapters/defaults/index.d.ts.map +0 -1
  91. package/dist/src/adapters/defaults/index.js +0 -15
  92. package/dist/src/adapters/defaults/state/file-state-adapter.d.ts.map +0 -1
  93. package/dist/src/adapters/defaults/state/memory-state-adapter.d.ts.map +0 -1
  94. package/dist/src/adapters/defaults/state/utils.d.ts.map +0 -1
  95. package/dist/src/adapters/defaults/stream/file-stream-adapter.d.ts.map +0 -1
  96. package/dist/src/adapters/defaults/stream/memory-stream-adapter.d.ts.map +0 -1
  97. package/dist/src/adapters/defaults/stream/memory-stream-adapter.js +0 -55
  98. package/dist/src/adapters/interfaces/cron-adapter.interface.d.ts +0 -29
  99. package/dist/src/adapters/interfaces/cron-adapter.interface.d.ts.map +0 -1
  100. package/dist/src/adapters/interfaces/event-adapter.interface.d.ts +0 -15
  101. package/dist/src/adapters/interfaces/event-adapter.interface.d.ts.map +0 -1
  102. package/dist/src/adapters/interfaces/event-adapter.interface.js +0 -2
  103. package/dist/src/adapters/interfaces/index.d.ts +0 -6
  104. package/dist/src/adapters/interfaces/index.d.ts.map +0 -1
  105. package/dist/src/adapters/interfaces/index.js +0 -5
  106. package/dist/src/adapters/interfaces/observability-adapter.interface.d.ts +0 -23
  107. package/dist/src/adapters/interfaces/observability-adapter.interface.d.ts.map +0 -1
  108. package/dist/src/adapters/interfaces/observability-adapter.interface.js +0 -2
  109. package/dist/src/adapters/interfaces/state-adapter.interface.d.ts.map +0 -1
  110. package/dist/src/adapters/interfaces/state-adapter.interface.js +0 -2
  111. package/dist/src/adapters/interfaces/stream-adapter.interface.d.ts +0 -22
  112. package/dist/src/adapters/interfaces/stream-adapter.interface.d.ts.map +0 -1
  113. package/dist/src/adapters/interfaces/stream-adapter.interface.js +0 -16
  114. /package/dist/src/{adapters/defaults/state → state/adapters}/utils.js +0 -0
  115. /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,
@@ -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,EAAS,IAAI,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAc5C,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;IA8B1F,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;CAI7B;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;CACnB"}
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"}
@@ -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
- export type QueueMetrics = {
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,MAAM,MAAM,YAAY,GAAG;IACzB,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,cAAc,CAA8C;IACpE,OAAO,CAAC,kBAAkB,CAAyB;gBAEvC,MAAM,CAAC,EAAE,MAAM;IAI3B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;YA0BN,cAAc;IAyE5B,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;IAiClG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAyBlD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAInD,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAQ7C,KAAK,IAAI,IAAI;CAWd"}
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;
@@ -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
- type AdapterOptions = {
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
@@ -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;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAA;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAA;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAA;AAIjF,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;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAG5E,OAAO,KAAK,EAA2B,cAAc,EAA4B,IAAI,EAAE,MAAM,SAAS,CAAA;AACtG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGpE,MAAM,MAAM,WAAW,GAAG;IACxB,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,KAAK,cAAc,GAAG;IACpB,YAAY,EAAE,YAAY,CAAA;IAC1B,WAAW,EAAE,WAAW,CAAA;IACxB,aAAa,CAAC,EAAE,oBAAoB,CAAA;CACrC,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,YAAY,UAAU,EACtB,OAAO,YAAY,EACnB,QAAQ,iBAAiB,EACzB,UAAU,cAAc,KACvB,WAqRF,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"}
@@ -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, adapters) => {
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
- eventAdapter: adapters.eventAdapter,
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, adapters?.cronAdapter);
121
- const motiaEventManager = (0, step_handlers_1.createStepHandlers)(motia, adapters.eventAdapter);
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 adapters.eventAdapter.emit(eventObj);
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
- await cronManager.close();
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 '../../interfaces/state-adapter.interface';
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=file-state-adapter.d.ts.map
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 '../../interfaces/state-adapter.interface';
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 '../../interfaces/state-adapter.interface';
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 as FileStateAdapterConfig } from '../adapters/defaults/state/file-state-adapter';
2
- import type { StateAdapter } from '../adapters/interfaces/state-adapter.interface';
3
- type AdapterConfig = FileStateAdapterConfig | {
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): StateAdapter;
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,EAEL,KAAK,iBAAiB,IAAI,sBAAsB,EACjD,MAAM,+CAA+C,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAA;AAElF,KAAK,aAAa,GAAG,sBAAsB,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAA;AAEnE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAEtE"}
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 file_state_adapter_1 = require("../adapters/defaults/state/file-state-adapter");
5
- const memory_state_adapter_1 = require("../adapters/defaults/state/memory-state-adapter");
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 file_state_adapter_1.FileStateAdapter(config) : new memory_state_adapter_1.MemoryStateAdapter();
7
+ return config.adapter === 'default' ? new default_state_adapter_1.FileStateAdapter(config) : new memory_state_adapter_1.MemoryStateAdapter();
8
8
  }
@@ -1,4 +1,4 @@
1
- import type { InternalStateManager } from '../../types';
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.interface.d.ts.map
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, eventAdapter: EventAdapter) => MotiaEventManager;
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":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAsB,MAAM,+CAA+C,CAAA;AAKrG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACpC,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,iBAwF7E,CAAA"}
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, eventAdapter) => {
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(async (subscribe) => {
40
+ subscribes.forEach((subscribe) => {
41
41
  const handler = async (event) => {
42
- const { data, traceId, flows } = event;
43
- const logger = event.logger
44
- ? event.logger.child({ step: step.config.name })
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
- const subscriptionHandle = await eventAdapter.subscribe(subscribe, name, handler, queueConfig);
55
- handlers.push(subscriptionHandle);
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((subscriptionHandle) => {
64
- eventAdapter.unsubscribe(subscriptionHandle);
59
+ handlers.forEach(({ topic, handler }) => {
60
+ queueManager.unsubscribe(topic, handler);
65
61
  logger_1.globalLogger.debug('[step handler] unsubscribed handler', {
66
62
  filePath,
67
- ...subscriptionHandle,
63
+ topic,
68
64
  step: step.config.name,
69
65
  });
70
66
  });
@@ -1,5 +1,5 @@
1
- import type { BaseStreamItem } from '../../../types-stream';
2
- import { StreamAdapter } from '../../interfaces/stream-adapter.interface';
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 stream_adapter_interface_1 = require("../../interfaces/stream-adapter.interface");
43
- class FileStreamAdapter extends stream_adapter_interface_1.StreamAdapter {
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(streamName);
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 '../../interfaces/stream-adapter.interface';
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"}