@marktoflow/core 2.0.4 → 2.0.5
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/built-in-operations.d.ts.map +1 -1
- package/dist/built-in-operations.js +5 -1
- package/dist/built-in-operations.js.map +1 -1
- package/dist/engine.d.ts +7 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +134 -12
- package/dist/engine.js.map +1 -1
- package/dist/event-operations.d.ts +59 -0
- package/dist/event-operations.d.ts.map +1 -0
- package/dist/event-operations.js +99 -0
- package/dist/event-operations.js.map +1 -0
- package/dist/event-source.d.ts +195 -0
- package/dist/event-source.d.ts.map +1 -0
- package/dist/event-source.js +757 -0
- package/dist/event-source.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +87 -0
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +28 -0
- package/dist/models.js.map +1 -1
- package/dist/parallel.d.ts.map +1 -1
- package/dist/parallel.js +6 -2
- package/dist/parallel.js.map +1 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +21 -4
- package/dist/parser.js.map +1 -1
- package/dist/permissions.d.ts.map +1 -1
- package/dist/permissions.js +17 -2
- package/dist/permissions.js.map +1 -1
- package/dist/template-engine.d.ts.map +1 -1
- package/dist/template-engine.js +10 -15
- package/dist/template-engine.js.map +1 -1
- package/dist/utils/errors.d.ts +44 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +151 -0
- package/dist/utils/errors.js.map +1 -1
- package/package.json +5 -3
- package/dist/templates.d.ts +0 -80
- package/dist/templates.d.ts.map +0 -1
- package/dist/templates.js +0 -248
- package/dist/templates.js.map +0 -1
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event sources for event-driven workflows.
|
|
3
|
+
*
|
|
4
|
+
* Provides persistent connections to external services (Discord, Slack, WebSocket, etc.)
|
|
5
|
+
* that emit events to trigger workflow steps or restart workflows.
|
|
6
|
+
*
|
|
7
|
+
* Event sources:
|
|
8
|
+
* - websocket: Connect to any WebSocket endpoint
|
|
9
|
+
* - discord: Listen for Discord events via bot gateway
|
|
10
|
+
* - slack: Listen for Slack events via Socket Mode
|
|
11
|
+
* - cron: Emit events on a schedule (wraps the existing scheduler)
|
|
12
|
+
* - http-stream: SSE (Server-Sent Events) listener
|
|
13
|
+
* - rss: Poll RSS/Atom feeds for new items
|
|
14
|
+
*/
|
|
15
|
+
import { EventEmitter } from "node:events";
|
|
16
|
+
export interface EventSourceEvent {
|
|
17
|
+
/** Source identifier (e.g., "discord", "slack", "websocket") */
|
|
18
|
+
source: string;
|
|
19
|
+
/** Event type (e.g., "message", "reaction", "connected", "disconnected") */
|
|
20
|
+
type: string;
|
|
21
|
+
/** Event payload (source-specific) */
|
|
22
|
+
data: Record<string, unknown>;
|
|
23
|
+
/** ISO timestamp */
|
|
24
|
+
timestamp: string;
|
|
25
|
+
/** Raw event data (for debugging) */
|
|
26
|
+
raw?: unknown;
|
|
27
|
+
}
|
|
28
|
+
export interface EventSourceConfig {
|
|
29
|
+
/** Source type */
|
|
30
|
+
kind: "websocket" | "discord" | "slack" | "cron" | "http-stream" | "rss";
|
|
31
|
+
/** Unique id for this source */
|
|
32
|
+
id: string;
|
|
33
|
+
/** Source-specific configuration */
|
|
34
|
+
options: Record<string, unknown>;
|
|
35
|
+
/** Optional filter: only emit events matching these types */
|
|
36
|
+
filter?: string[];
|
|
37
|
+
/** Reconnect on disconnect (default: true) */
|
|
38
|
+
reconnect?: boolean;
|
|
39
|
+
/** Reconnect delay in ms (default: 5000) */
|
|
40
|
+
reconnectDelay?: number;
|
|
41
|
+
/** Max reconnect attempts (default: Infinity) */
|
|
42
|
+
maxReconnectAttempts?: number;
|
|
43
|
+
}
|
|
44
|
+
export type EventSourceStatus = "disconnected" | "connecting" | "connected" | "error" | "stopped";
|
|
45
|
+
export interface EventSourceStats {
|
|
46
|
+
id: string;
|
|
47
|
+
kind: string;
|
|
48
|
+
status: EventSourceStatus;
|
|
49
|
+
eventsReceived: number;
|
|
50
|
+
lastEventAt?: string | undefined;
|
|
51
|
+
connectedAt?: string | undefined;
|
|
52
|
+
reconnectAttempts: number;
|
|
53
|
+
}
|
|
54
|
+
export declare abstract class BaseEventSource extends EventEmitter {
|
|
55
|
+
readonly id: string;
|
|
56
|
+
readonly kind: string;
|
|
57
|
+
protected config: EventSourceConfig;
|
|
58
|
+
protected _status: EventSourceStatus;
|
|
59
|
+
protected _eventsReceived: number;
|
|
60
|
+
protected _lastEventAt: string | undefined;
|
|
61
|
+
protected _connectedAt: string | undefined;
|
|
62
|
+
protected _reconnectAttempts: number;
|
|
63
|
+
private _reconnectTimer;
|
|
64
|
+
constructor(config: EventSourceConfig);
|
|
65
|
+
get status(): EventSourceStatus;
|
|
66
|
+
get stats(): EventSourceStats;
|
|
67
|
+
abstract connect(): Promise<void>;
|
|
68
|
+
abstract disconnect(): Promise<void>;
|
|
69
|
+
/** Emit an event through the source */
|
|
70
|
+
protected emitEvent(type: string, data: Record<string, unknown>, raw?: unknown): void;
|
|
71
|
+
/** Handle disconnection with optional reconnect */
|
|
72
|
+
protected handleDisconnect(reason?: string): void;
|
|
73
|
+
/** Stop the source (no reconnect) */
|
|
74
|
+
stop(): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
export declare class WebSocketEventSource extends BaseEventSource {
|
|
77
|
+
private ws;
|
|
78
|
+
constructor(config: EventSourceConfig);
|
|
79
|
+
connect(): Promise<void>;
|
|
80
|
+
disconnect(): Promise<void>;
|
|
81
|
+
/** Send a message through the WebSocket */
|
|
82
|
+
send(data: string | Record<string, unknown>): void;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Discord event source via the Discord Gateway (WebSocket).
|
|
86
|
+
* Uses the Discord Bot Gateway API directly — no external library needed.
|
|
87
|
+
*
|
|
88
|
+
* Required options:
|
|
89
|
+
* - token: Discord bot token
|
|
90
|
+
* - intents: Gateway intents bitmask (e.g., 513 for GUILDS + GUILD_MESSAGES)
|
|
91
|
+
*
|
|
92
|
+
* Optional:
|
|
93
|
+
* - filter: Array of event types to listen for (e.g., ["MESSAGE_CREATE"])
|
|
94
|
+
*/
|
|
95
|
+
export declare class DiscordEventSource extends BaseEventSource {
|
|
96
|
+
private ws;
|
|
97
|
+
private heartbeatInterval;
|
|
98
|
+
private lastSequence;
|
|
99
|
+
private sessionId;
|
|
100
|
+
private resumeGatewayUrl;
|
|
101
|
+
constructor(config: EventSourceConfig);
|
|
102
|
+
connect(): Promise<void>;
|
|
103
|
+
disconnect(): Promise<void>;
|
|
104
|
+
private startHeartbeat;
|
|
105
|
+
private stopHeartbeat;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Slack event source via Socket Mode (WebSocket).
|
|
109
|
+
*
|
|
110
|
+
* Required options:
|
|
111
|
+
* - appToken: Slack app-level token (xapp-...)
|
|
112
|
+
*
|
|
113
|
+
* Optional:
|
|
114
|
+
* - filter: Array of event types (e.g., ["message", "reaction_added"])
|
|
115
|
+
*/
|
|
116
|
+
export declare class SlackEventSource extends BaseEventSource {
|
|
117
|
+
private ws;
|
|
118
|
+
constructor(config: EventSourceConfig);
|
|
119
|
+
connect(): Promise<void>;
|
|
120
|
+
disconnect(): Promise<void>;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Cron event source — emits events on a schedule.
|
|
124
|
+
*
|
|
125
|
+
* Options:
|
|
126
|
+
* - schedule: Cron expression or interval string (e.g., "30m", "1h")
|
|
127
|
+
* - payload: Optional static payload to include with each event
|
|
128
|
+
*/
|
|
129
|
+
export declare class CronEventSource extends BaseEventSource {
|
|
130
|
+
private timer;
|
|
131
|
+
private intervalMs;
|
|
132
|
+
constructor(config: EventSourceConfig);
|
|
133
|
+
connect(): Promise<void>;
|
|
134
|
+
disconnect(): Promise<void>;
|
|
135
|
+
private tick;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* HTTP Server-Sent Events listener.
|
|
139
|
+
*
|
|
140
|
+
* Options:
|
|
141
|
+
* - url: SSE endpoint URL
|
|
142
|
+
* - headers: Optional headers
|
|
143
|
+
*/
|
|
144
|
+
export declare class SSEEventSource extends BaseEventSource {
|
|
145
|
+
private controller;
|
|
146
|
+
constructor(config: EventSourceConfig);
|
|
147
|
+
connect(): Promise<void>;
|
|
148
|
+
disconnect(): Promise<void>;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* RSS/Atom feed event source — polls a feed and emits events for new items.
|
|
152
|
+
*
|
|
153
|
+
* Options:
|
|
154
|
+
* - url: Feed URL (required)
|
|
155
|
+
* - interval: Polling interval as duration string (default: "5m")
|
|
156
|
+
* - immediate: Poll immediately on connect (default: false)
|
|
157
|
+
* - headers: Custom HTTP headers for feed requests
|
|
158
|
+
* - maxItems: Max new items to emit per poll (default: unlimited)
|
|
159
|
+
*/
|
|
160
|
+
export declare class RssEventSource extends BaseEventSource {
|
|
161
|
+
private timer;
|
|
162
|
+
private intervalMs;
|
|
163
|
+
private seenIds;
|
|
164
|
+
private firstPoll;
|
|
165
|
+
private static readonly MAX_SEEN_IDS;
|
|
166
|
+
constructor(config: EventSourceConfig);
|
|
167
|
+
connect(): Promise<void>;
|
|
168
|
+
disconnect(): Promise<void>;
|
|
169
|
+
private poll;
|
|
170
|
+
}
|
|
171
|
+
export declare function createEventSource(config: EventSourceConfig): BaseEventSource;
|
|
172
|
+
/**
|
|
173
|
+
* Manages multiple event sources and provides a unified event stream.
|
|
174
|
+
*/
|
|
175
|
+
export declare class EventSourceManager extends EventEmitter {
|
|
176
|
+
private sources;
|
|
177
|
+
/** Add and connect an event source */
|
|
178
|
+
add(config: EventSourceConfig): Promise<BaseEventSource>;
|
|
179
|
+
/** Remove and disconnect an event source */
|
|
180
|
+
remove(id: string): Promise<void>;
|
|
181
|
+
/** Get a source by id */
|
|
182
|
+
get(id: string): BaseEventSource | undefined;
|
|
183
|
+
/** Get stats for all sources */
|
|
184
|
+
stats(): EventSourceStats[];
|
|
185
|
+
/** Wait for the next event from any source, with optional filter */
|
|
186
|
+
waitForEvent(options?: {
|
|
187
|
+
source?: string;
|
|
188
|
+
type?: string;
|
|
189
|
+
timeout?: number;
|
|
190
|
+
filter?: (event: EventSourceEvent) => boolean;
|
|
191
|
+
}): Promise<EventSourceEvent>;
|
|
192
|
+
/** Stop all sources */
|
|
193
|
+
stopAll(): Promise<void>;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=event-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-source.d.ts","sourceRoot":"","sources":["../src/event-source.ts"],"names":[],"mappings":"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"}
|