@ironflow/browser 0.1.0-test.2 → 0.2.2

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @ironflow/browser
2
2
 
3
- Browser client for [Ironflow](https://github.com/anthropics/ironflow) workflow engine. Provides real-time subscriptions, workflow triggers, and event emission for web applications.
3
+ Browser client for [Ironflow](https://github.com/sahina/ironflow), an event-driven backend platform. Provides real-time subscriptions, workflow triggers, and event emission for web applications.
4
4
 
5
5
  ## Installation
6
6
 
@@ -29,7 +29,7 @@ const run = await ironflow.trigger('process-order', {
29
29
  });
30
30
 
31
31
  // Emit events
32
- await ironflow.emit('order.approved', { orderId: '123' });
32
+ await ironflow.emit('order.approved', { orderId: '123' }, { version: 1 });
33
33
 
34
34
  // Cleanup
35
35
  sub.unsubscribe();
@@ -51,7 +51,7 @@ sub.unsubscribe();
51
51
  | `ironflow.connect()` | Connect to the server |
52
52
  | `ironflow.subscribe(pattern, options)` | Subscribe to events |
53
53
  | `ironflow.trigger(functionId, options)` | Trigger a workflow |
54
- | `ironflow.emit(eventName, data)` | Emit an event |
54
+ | `ironflow.emit(eventName, data, options?)` | Emit an event |
55
55
  | `ironflow.getRun(runId)` | Get run status |
56
56
 
57
57
  ## Browser Compatibility
package/dist/client.d.ts CHANGED
@@ -3,9 +3,11 @@
3
3
  *
4
4
  * Singleton client for browser-based real-time interactions with Ironflow.
5
5
  */
6
- import type { Run, ListRunsOptions, ListRunsResult, TriggerResult, EmitOptions, EmitResult, SubscriptionErrorInfo, SubscriptionCallbacks, Subscription, AckableSubscription, ConnectionState } from "@ironflow/core";
6
+ import type { Run, ListRunsOptions, ListRunsResult, TriggerResult, EmitOptions, EmitResult, SubscriptionErrorInfo, SubscriptionCallbacks, Subscription, AckableSubscription, ConnectionState, AppendEventInput, AppendOptions, AppendResult, ReadStreamOptions, StreamEvent, StreamInfo, EntitySubscribeOptions, GetProjectionOptions, RebuildProjectionOptions, ProjectionStatusInfo, ProjectionStateResult, ProjectionSubscriptionCallbacks } from "@ironflow/core";
7
7
  import type { IronflowConfig, IronflowConfigOptions } from "./config.js";
8
8
  import { type BrowserSubscribeOptions, type SubscriptionGroup } from "./subscription.js";
9
+ import { BrowserKVClient } from "./kv.js";
10
+ import { BrowserConfigClient } from "./config-client.js";
9
11
  /**
10
12
  * Ironflow browser client singleton
11
13
  */
@@ -125,6 +127,42 @@ declare class IronflowClient {
125
127
  * Cancel a running run
126
128
  */
127
129
  cancelRun(runId: string, reason?: string): Promise<Run>;
130
+ /**
131
+ * Retry a failed run
132
+ */
133
+ retryRun(runId: string, fromStep?: string): Promise<Run>;
134
+ /**
135
+ * Patch a step's output (hot patching)
136
+ */
137
+ patchStep(stepId: string, output: Record<string, unknown>, reason?: string): Promise<void>;
138
+ /**
139
+ * Resume a paused or failed run
140
+ */
141
+ resumeRun(runId: string, fromStep?: string): Promise<Run>;
142
+ /**
143
+ * List registered functions
144
+ */
145
+ listFunctions(): Promise<unknown[]>;
146
+ /**
147
+ * List connected workers
148
+ */
149
+ listWorkers(): Promise<unknown[]>;
150
+ /**
151
+ * Health check
152
+ */
153
+ health(): Promise<{
154
+ status: string;
155
+ timestamp: string;
156
+ version: string;
157
+ }>;
158
+ /**
159
+ * Get server capabilities
160
+ */
161
+ getCapabilities(): Promise<{
162
+ transports: string[];
163
+ features: string[];
164
+ version: string;
165
+ }>;
128
166
  /**
129
167
  * Emit an event
130
168
  *
@@ -141,6 +179,163 @@ declare class IronflowClient {
141
179
  * Join a consumer group for load-balanced event processing
142
180
  */
143
181
  joinConsumerGroup<T = unknown>(groupName: string, pattern: string, callbacksAndOptions: SubscriptionCallbacks<T> & BrowserSubscribeOptions): Promise<AckableSubscription>;
182
+ /**
183
+ * Entity stream operations
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * // Append an event to a stream
188
+ * const result = await ironflow.streams.append("order-123", {
189
+ * name: "order.created",
190
+ * data: { total: 100 },
191
+ * entityType: "order",
192
+ * });
193
+ *
194
+ * // Read events from a stream
195
+ * const { events } = await ironflow.streams.read("order-123", { limit: 10 });
196
+ *
197
+ * // Get stream info
198
+ * const info = await ironflow.streams.getInfo("order-123");
199
+ * ```
200
+ */
201
+ streams: {
202
+ /**
203
+ * Append an event to an entity stream
204
+ */
205
+ append: (entityId: string, input: AppendEventInput, options?: AppendOptions) => Promise<AppendResult>;
206
+ /**
207
+ * Read events from an entity stream
208
+ */
209
+ read: (entityId: string, options?: ReadStreamOptions) => Promise<{
210
+ events: StreamEvent[];
211
+ totalCount: number;
212
+ }>;
213
+ /**
214
+ * Get information about an entity stream
215
+ */
216
+ getInfo: (entityId: string) => Promise<StreamInfo>;
217
+ /**
218
+ * Subscribe to real-time events for an entity stream
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * const sub = await ironflow.streams.subscribe("order-123", {
223
+ * entityType: "order",
224
+ * onEvent: (event) => console.log(event),
225
+ * replay: 100,
226
+ * });
227
+ *
228
+ * // Cleanup
229
+ * sub.unsubscribe();
230
+ * ```
231
+ */
232
+ subscribe: (entityId: string, options: EntitySubscribeOptions) => Promise<Subscription>;
233
+ };
234
+ /**
235
+ * Get the current state of a projection
236
+ *
237
+ * @example
238
+ * ```typescript
239
+ * const result = await ironflow.getProjection<OrderStats>('order-stats');
240
+ * console.log(result.state); // { totalOrders: 42, ... }
241
+ *
242
+ * // With partition
243
+ * const result = await ironflow.getProjection('order-stats', { partition: 'customer-123' });
244
+ * ```
245
+ */
246
+ getProjection<TState = unknown>(name: string, options?: GetProjectionOptions): Promise<ProjectionStateResult<TState>>;
247
+ /**
248
+ * Get the status of a projection
249
+ *
250
+ * @example
251
+ * ```typescript
252
+ * const status = await ironflow.getProjectionStatus('order-stats');
253
+ * console.log(status.status); // 'active' | 'rebuilding' | 'paused' | 'error'
254
+ * ```
255
+ */
256
+ getProjectionStatus(name: string): Promise<ProjectionStatusInfo>;
257
+ /**
258
+ * Trigger a rebuild of a projection
259
+ *
260
+ * @example
261
+ * ```typescript
262
+ * const result = await ironflow.rebuildProjection('order-stats');
263
+ * ```
264
+ */
265
+ rebuildProjection(name: string, options?: RebuildProjectionOptions): Promise<{
266
+ status: string;
267
+ }>;
268
+ /**
269
+ * List all registered projections
270
+ *
271
+ * @example
272
+ * ```typescript
273
+ * const projections = await ironflow.listProjections();
274
+ * projections.forEach(p => console.log(p.name, p.status));
275
+ * ```
276
+ */
277
+ listProjections(): Promise<ProjectionStatusInfo[]>;
278
+ /**
279
+ * Subscribe to real-time updates for a projection
280
+ *
281
+ * @example
282
+ * ```typescript
283
+ * const sub = await ironflow.subscribeToProjection<OrderStats>('order-stats', {
284
+ * onUpdate: (state, event) => console.log('Updated:', state),
285
+ * onError: (error) => console.error(error),
286
+ * });
287
+ *
288
+ * // With partition
289
+ * const sub = await ironflow.subscribeToProjection('order-stats', {
290
+ * onUpdate: (state, event) => console.log('Updated:', state),
291
+ * }, { partition: 'customer-123' });
292
+ *
293
+ * // Cleanup
294
+ * sub.unsubscribe();
295
+ * ```
296
+ */
297
+ subscribeToProjection<TState = unknown>(name: string, callbacks: ProjectionSubscriptionCallbacks<TState>, options?: {
298
+ partition?: string;
299
+ replay?: number;
300
+ }): Promise<Subscription>;
301
+ /**
302
+ * KV store operations
303
+ *
304
+ * @example
305
+ * ```typescript
306
+ * const kv = ironflow.kv();
307
+ * const bucket = await kv.createBucket({ name: "sessions", ttlSeconds: 3600 });
308
+ * const handle = kv.bucket("sessions");
309
+ * const { revision } = await handle.put("user.123", { token: "abc" });
310
+ * const entry = await handle.get("user.123");
311
+ *
312
+ * // Watch for changes
313
+ * const watcher = handle.watch({
314
+ * onUpdate: (event) => console.log(event),
315
+ * }, { key: "user.*" });
316
+ * ```
317
+ */
318
+ kv(): BrowserKVClient;
319
+ /**
320
+ * Config management operations
321
+ *
322
+ * @example
323
+ * ```typescript
324
+ * const cfg = ironflow.configManager();
325
+ * await cfg.set("app", { featureX: true, maxRetries: 3 });
326
+ * const { data, revision } = await cfg.get("app");
327
+ * await cfg.patch("app", { maxRetries: 5 });
328
+ * const configs = await cfg.list();
329
+ * await cfg.delete("app");
330
+ *
331
+ * // Watch for changes
332
+ * const sub = await cfg.watch("app", {
333
+ * onEvent: (config) => console.log(config),
334
+ * });
335
+ * sub.unsubscribe();
336
+ * ```
337
+ */
338
+ configManager(): BrowserConfigClient;
144
339
  /**
145
340
  * Pattern helpers for building subscription patterns
146
341
  */
@@ -156,8 +351,14 @@ declare class IronflowClient {
156
351
  };
157
352
  private ensureConfigured;
158
353
  private cleanup;
354
+ /**
355
+ * Reset client state for testing. Not intended for production use.
356
+ * @internal
357
+ */
358
+ _resetForTesting(): void;
159
359
  private setupVisibilityHandling;
160
360
  private request;
361
+ private streamRequest;
161
362
  private mapRunResponse;
162
363
  }
163
364
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}