@ironflow/browser 0.26.0 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +179 -13
- package/dist/client.d.ts +94 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +191 -122
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/offline.d.ts +166 -0
- package/dist/offline.d.ts.map +1 -0
- package/dist/offline.js +306 -0
- package/dist/offline.js.map +1 -0
- package/dist/queue/db.d.ts +123 -0
- package/dist/queue/db.d.ts.map +1 -0
- package/dist/queue/db.js +304 -0
- package/dist/queue/db.js.map +1 -0
- package/dist/queue/ids.d.ts +22 -0
- package/dist/queue/ids.d.ts.map +1 -0
- package/dist/queue/ids.js +45 -0
- package/dist/queue/ids.js.map +1 -0
- package/dist/queue/lock.d.ts +42 -0
- package/dist/queue/lock.d.ts.map +1 -0
- package/dist/queue/lock.js +65 -0
- package/dist/queue/lock.js.map +1 -0
- package/dist/queue/queue.d.ts +281 -0
- package/dist/queue/queue.d.ts.map +1 -0
- package/dist/queue/queue.js +894 -0
- package/dist/queue/queue.js.map +1 -0
- package/dist/queue/types.d.ts +145 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +6 -0
- package/dist/queue/types.js.map +1 -0
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@ This README is the sole reference for coding agents integrating with the browser
|
|
|
11
11
|
- [Connection Management](#connection-management)
|
|
12
12
|
- [Events and Subscriptions](#events-and-subscriptions)
|
|
13
13
|
- [Emitting Events](#emitting-events)
|
|
14
|
+
- [Offline Writes](#offline-writes)
|
|
14
15
|
- [Workflow Operations](#workflow-operations)
|
|
15
16
|
- [Agents (`ironflow.agents.*`)](#agents-ironflowagents)
|
|
16
17
|
- [Entity Streams (Event Sourcing)](#entity-streams-event-sourcing)
|
|
@@ -119,7 +120,7 @@ Register a global handler that fires for all subscription errors:
|
|
|
119
120
|
|
|
120
121
|
```typescript
|
|
121
122
|
const unsubscribe = ironflow.onError((error) => {
|
|
122
|
-
// error: {
|
|
123
|
+
// error: { subscriptionId?: string; code: string; message: string; retrying?: boolean }
|
|
123
124
|
console.error('Ironflow error:', error.message, error.code);
|
|
124
125
|
});
|
|
125
126
|
```
|
|
@@ -204,7 +205,7 @@ sub.unsubscribe();
|
|
|
204
205
|
|
|
205
206
|
### Pattern Helpers
|
|
206
207
|
|
|
207
|
-
Use the `patterns` utility to build subscription patterns.
|
|
208
|
+
Use the `patterns` utility to build subscription patterns. Import it directly:
|
|
208
209
|
|
|
209
210
|
```typescript
|
|
210
211
|
import { ironflow, patterns } from '@ironflow/browser';
|
|
@@ -273,9 +274,9 @@ const sub = await ironflow.joinConsumerGroup(
|
|
|
273
274
|
);
|
|
274
275
|
|
|
275
276
|
// Returns AckableSubscription
|
|
276
|
-
sub.ack(eventId);
|
|
277
|
-
sub.nak(eventId, 5000);
|
|
278
|
-
sub.term(eventId);
|
|
277
|
+
await sub.ack(eventId); // Acknowledge successful processing
|
|
278
|
+
await sub.nak(eventId, 5000); // Negative ack with optional redelivery delay (ms)
|
|
279
|
+
await sub.term(eventId); // Terminate - do not redeliver
|
|
279
280
|
|
|
280
281
|
sub.unsubscribe();
|
|
281
282
|
```
|
|
@@ -291,7 +292,7 @@ const sub = await ironflow.subscribe('events:order.created', {
|
|
|
291
292
|
|
|
292
293
|
// sub is AckableSubscription when ackMode is 'manual'
|
|
293
294
|
const ackableSub = sub as AckableSubscription;
|
|
294
|
-
ackableSub.ack(eventId);
|
|
295
|
+
await ackableSub.ack(eventId);
|
|
295
296
|
```
|
|
296
297
|
|
|
297
298
|
## Emitting Events
|
|
@@ -321,6 +322,165 @@ const result = await ironflow.emit(
|
|
|
321
322
|
);
|
|
322
323
|
```
|
|
323
324
|
|
|
325
|
+
## Offline Writes
|
|
326
|
+
|
|
327
|
+
For apps that keep working with no connection. `createClient()` returns a client
|
|
328
|
+
whose `emit()` and `streams.append()` are written to an IndexedDB outbox first
|
|
329
|
+
and sent by a background drainer.
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
import { createClient } from '@ironflow/browser';
|
|
333
|
+
|
|
334
|
+
const app = await createClient({
|
|
335
|
+
serverUrl: 'https://api.example.com',
|
|
336
|
+
auth: { token: session.accessToken },
|
|
337
|
+
offlineQueue: {
|
|
338
|
+
identity: session.userId, // required, see below
|
|
339
|
+
onAuthRequired: async () => ({ token: await refreshToken() }),
|
|
340
|
+
onWriteLost: (write, reason) => toast(`A change was not saved: ${reason}`),
|
|
341
|
+
},
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
const { localId } = await app.emit('order.placed', { orderId: '123' });
|
|
345
|
+
// Resolves immediately — nothing has been sent yet.
|
|
346
|
+
|
|
347
|
+
app.queue.watch(localId, (status) => {
|
|
348
|
+
if (status.status === 'sent') markRowSynced();
|
|
349
|
+
});
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
Everything the ordinary client can do is on `app.client`:
|
|
353
|
+
|
|
354
|
+
```typescript
|
|
355
|
+
const run = await app.client.getRun(runId);
|
|
356
|
+
await app.client.subscribe('order.*', handler);
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### What it does and does not promise
|
|
360
|
+
|
|
361
|
+
**Writes survive a reload, a crash, and a discarded tab.** They are on disk
|
|
362
|
+
before `emit()` resolves.
|
|
363
|
+
|
|
364
|
+
**They are not delivered in the background.** Nothing drains while the page is
|
|
365
|
+
frozen or closed; delivery happens the next time the app is open. Tell users
|
|
366
|
+
"saved, will sync when you're back", never "sent in the background". True
|
|
367
|
+
background delivery needs a service worker — see ADR 0052, Alternative A.
|
|
368
|
+
|
|
369
|
+
**Storage is best-effort.** Safari evicts an origin's IndexedDB after roughly
|
|
370
|
+
seven days with no interaction.
|
|
371
|
+
|
|
372
|
+
**`runIds` are not returned.** A run id cannot exist before the server creates
|
|
373
|
+
the run, and the point of the queue is to answer before contacting the server.
|
|
374
|
+
Subscribe for the outcome instead.
|
|
375
|
+
|
|
376
|
+
**Nothing attached to the returned promise survives a reload.** After a refresh
|
|
377
|
+
the `await` is gone but the write is still queued. Use `queue.watch(localId)` or
|
|
378
|
+
an event subscription — never a `.then()` — to react to delivery.
|
|
379
|
+
|
|
380
|
+
**The outbox is not encrypted.** Any XSS on your origin can read queued writes.
|
|
381
|
+
This matches Sentry, Segment, Workbox and Firestore, all of which store
|
|
382
|
+
plaintext. For a write that must never sit on disk, send it through
|
|
383
|
+
`app.client.emit()` instead, which throws when offline rather than queueing.
|
|
384
|
+
|
|
385
|
+
### `identity` is required, and is not your token
|
|
386
|
+
|
|
387
|
+
The outbox is per-origin, so a shared machine can hold one user's queue when the
|
|
388
|
+
next signs in. Every write records the `identity` in force when it was queued,
|
|
389
|
+
and a mismatch quarantines it rather than sending it as the wrong person.
|
|
390
|
+
|
|
391
|
+
Pass a stable id for the principal — a user id works. Do not pass the token: a
|
|
392
|
+
hash of a credential identifies the *credential*, so an ordinary token rotation
|
|
393
|
+
would make the same user look like a different one and quarantine their own
|
|
394
|
+
writes.
|
|
395
|
+
|
|
396
|
+
**`onAuthRequired` must report who signed in**, not just the new credential:
|
|
397
|
+
|
|
398
|
+
```typescript
|
|
399
|
+
onAuthRequired: async () => {
|
|
400
|
+
const session = await showLoginPrompt();
|
|
401
|
+
return { token: session.accessToken, identity: session.userId };
|
|
402
|
+
},
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Returning the identity is what makes a shared machine safe. If a *different*
|
|
406
|
+
person signs in at that prompt — the normal outcome of showing a login form —
|
|
407
|
+
the queue rebinds to them, and the previous user's pending writes are
|
|
408
|
+
quarantined instead of being transmitted under the new user's credentials.
|
|
409
|
+
|
|
410
|
+
The callback is bounded at five minutes — generous, since the honest case is
|
|
411
|
+
someone reading a login form. The bound is there because a promise that never
|
|
412
|
+
settles at all (a modal the user dismissed, an auth server that hangs) would
|
|
413
|
+
otherwise hold the drain loop open for the life of the page: delivery would stop
|
|
414
|
+
with no in-app recovery while `pending` climbed to `maxItems`. On timeout the
|
|
415
|
+
queue backs off and asks again, and nothing is dead-lettered. Returning an
|
|
416
|
+
identity with no credential leaves the existing credential in place rather than
|
|
417
|
+
clearing it — `setAuth({})` would take the shared client's subscriptions down
|
|
418
|
+
with it.
|
|
419
|
+
|
|
420
|
+
Writes are also bound to the server and environment they were enqueued against.
|
|
421
|
+
Reconfiguring the underlying client while the queue is non-empty quarantines
|
|
422
|
+
those writes (`destination-mismatch`) rather than sending them somewhere they
|
|
423
|
+
were never meant to go.
|
|
424
|
+
|
|
425
|
+
### Delivery rules
|
|
426
|
+
|
|
427
|
+
| Response | What happens |
|
|
428
|
+
| --- | --- |
|
|
429
|
+
| 2xx | Removed from the outbox; watchers see `sent` |
|
|
430
|
+
| Network failure, 5xx, 429 | Retried with exponential backoff and jitter; stays at the head |
|
|
431
|
+
| 401 | Queue pauses, `onAuthRequired` runs, then it resumes |
|
|
432
|
+
| 403 and other 4xx | Moved to the dead-letter store; the queue advances |
|
|
433
|
+
| 2xx with an unreadable body | Dead-lettered as `RESPONSE_UNPARSEABLE` — retrying cannot fix it, and treating it as retryable would stall the whole queue behind it |
|
|
434
|
+
|
|
435
|
+
Writes are sent strictly in order, one at a time, and the queue does not advance
|
|
436
|
+
past one that has not been acknowledged. That is deliberate: `order.placed`
|
|
437
|
+
arriving after `order.shipped` is a corrupted projection, not a slow request. A
|
|
438
|
+
consequence worth planning for is that a full queue drains in as many round
|
|
439
|
+
trips as it has writes — `queue.subscribe()` reports `total` so you can render
|
|
440
|
+
"syncing 34 of 500" rather than a spinner that looks stuck.
|
|
441
|
+
|
|
442
|
+
### When it refuses
|
|
443
|
+
|
|
444
|
+
`emit()` and `streams.append()` throw rather than silently dropping:
|
|
445
|
+
|
|
446
|
+
- **`QueueFullError`** at 500 writes or 5 MB. The queue rejects rather than
|
|
447
|
+
evicting the oldest. Dropping `order.placed` while keeping `order.shipped`
|
|
448
|
+
would manufacture exactly the corruption the ordering guarantee prevents, so
|
|
449
|
+
the app is told instead and can stop generating dependent writes.
|
|
450
|
+
- **A write bound to a different server, environment, or principal.** Quarantined
|
|
451
|
+
to the dead-letter store rather than sent, with the reason naming which.
|
|
452
|
+
- **`streams.append` with `expectedVersion`.** A version read before the write
|
|
453
|
+
was queued is stale by the time it sends, so the append would always lose its
|
|
454
|
+
concurrency check. Use `expectedVersion: -1`, or write through
|
|
455
|
+
`app.client.streams.append()`.
|
|
456
|
+
- **Bodies that are not JSON-serializable** (cycles, `BigInt`). Caught at
|
|
457
|
+
enqueue rather than reporting "saved" for a write that could never be sent.
|
|
458
|
+
|
|
459
|
+
Writes older than `maxRetentionMs` (default 7 days) are dead-lettered instead of
|
|
460
|
+
delivered — a change queued nine days ago is usually more harmful to apply than
|
|
461
|
+
to drop. Everything that will never be sent lands in the dead-letter store:
|
|
462
|
+
|
|
463
|
+
```typescript
|
|
464
|
+
for (const entry of await app.queue.deadLetter()) {
|
|
465
|
+
console.warn(entry.reason, entry.message, entry.write.body);
|
|
466
|
+
await app.queue.retry(entry.write.localId); // or .discard(...)
|
|
467
|
+
}
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
### Multiple tabs
|
|
471
|
+
|
|
472
|
+
One tab drains at a time, held by a Web Lock; the others keep their counters in
|
|
473
|
+
sync over `BroadcastChannel`. Without `navigator.locks` (Safari < 16) tabs may
|
|
474
|
+
interleave — writes are still deduplicated by the engine, but ordering across
|
|
475
|
+
tabs is not guaranteed.
|
|
476
|
+
|
|
477
|
+
### Environments without IndexedDB
|
|
478
|
+
|
|
479
|
+
Server rendering, Node, or a locked-down browser: the queue disables itself with
|
|
480
|
+
a console warning and writes are sent directly, so a shared config that sets
|
|
481
|
+
`offlineQueue` does not crash a server render. Check `app.queue.enabled` to know
|
|
482
|
+
which mode you are in; results report `queued: false, pending: false`.
|
|
483
|
+
|
|
324
484
|
## Workflow Operations
|
|
325
485
|
|
|
326
486
|
### Invoke a Workflow Function
|
|
@@ -377,9 +537,6 @@ console.log(result.nextCursor); // Cursor for next page (undefined if last page
|
|
|
377
537
|
// Cancel a running workflow
|
|
378
538
|
const run = await ironflow.cancelRun('run_abc123', 'No longer needed');
|
|
379
539
|
|
|
380
|
-
// Retry a failed run (optionally from a specific step)
|
|
381
|
-
const run = await ironflow.retryRun('run_abc123', 'step-that-failed');
|
|
382
|
-
|
|
383
540
|
// Resume a paused or failed run
|
|
384
541
|
const run = await ironflow.resumeRun('run_abc123', 'step-to-resume-from');
|
|
385
542
|
|
|
@@ -481,7 +638,7 @@ Errors:
|
|
|
481
638
|
| `RunFailedError` | `system.run.{runId}.failed` |
|
|
482
639
|
| `RunCancelledError` | `system.run.{runId}.cancelled` |
|
|
483
640
|
|
|
484
|
-
### `agents.subscribe(runId, callbacks)`
|
|
641
|
+
### `agents.subscribe(runId, callbacks, opts?)`
|
|
485
642
|
|
|
486
643
|
Typed wrapper over the broader `subscribe(pattern)` API. Dispatches by topic.
|
|
487
644
|
|
|
@@ -1280,6 +1437,15 @@ Common error codes returned by the client:
|
|
|
1280
1437
|
- Safari 13.1+
|
|
1281
1438
|
- Edge 80+
|
|
1282
1439
|
|
|
1440
|
+
The offline write queue degrades rather than requiring a newer baseline:
|
|
1441
|
+
|
|
1442
|
+
| Feature | Needs | Without it |
|
|
1443
|
+
| --- | --- | --- |
|
|
1444
|
+
| Outbox persistence | IndexedDB (all of the above) | Queue disables itself, writes go direct |
|
|
1445
|
+
| Idempotency keys | `crypto.randomUUID` (Safari 15.4+) | Falls back to `crypto.getRandomValues` |
|
|
1446
|
+
| One drainer across tabs | `navigator.locks` (Safari 16+) | Single-tab drain; tabs may interleave |
|
|
1447
|
+
| Cross-tab pending counts | `BroadcastChannel` | Counters are tab-local |
|
|
1448
|
+
|
|
1283
1449
|
Requires native `fetch`, `WebSocket`, and `AbortController` support.
|
|
1284
1450
|
|
|
1285
1451
|
## Exported Types
|
|
@@ -1302,13 +1468,13 @@ The package re-exports the following types from `@ironflow/core` for convenience
|
|
|
1302
1468
|
|
|
1303
1469
|
**KV types:** `KVBucketConfig`, `KVBucketInfo`, `KVEntry`, `KVPutResult`, `KVListKeysResult`, `KVListBucketsResult`, `KVWatchEvent`, `KVWatchCallbacks`, `KVWatchOptions`, `KVWatcher`
|
|
1304
1470
|
|
|
1305
|
-
**Config types:** `ConfigResponse`, `ConfigEntry`, `ConfigSetResult`, `ConfigWatchCallbacks`
|
|
1471
|
+
**Config types:** `ConfigResponse`, `ConfigEntry`, `ConfigSetResult`, `ConfigWatchCallbacks`, `ConfigWatchEvent`
|
|
1306
1472
|
|
|
1307
1473
|
**Browser-specific types:** `IronflowConfig`, `IronflowConfigOptions`, `ReconnectConfig`, `VisibilityConfig`, `AuthConfig`, `BrowserSubscribeOptions`, `SubscriptionGroup`, `Transport`, `TransportCallbacks`, `TransportFactory`, `TransportOptions`
|
|
1308
1474
|
|
|
1309
|
-
**Utilities:** `patterns`, `DEFAULT_SERVER_URL`, `DEFAULT_WS_URL`, `DEFAULT_TIMEOUTS`, `getServerUrl`, `getWebSocketUrl`
|
|
1475
|
+
**Utilities:** `patterns`, `DEFAULT_SERVER_URL`, `DEFAULT_WS_URL`, `DEFAULT_TIMEOUTS`, `getServerUrl`, `getWebSocketUrl`, `DEFAULT_CONFIG`, `mergeConfig`
|
|
1310
1476
|
|
|
1311
|
-
**Classes:** `BrowserKVClient`, `BrowserKVBucketHandle`, `BrowserConfigClient`
|
|
1477
|
+
**Classes:** `BrowserKVClient`, `BrowserKVBucketHandle`, `BrowserConfigClient`, `SubscriptionManager`
|
|
1312
1478
|
|
|
1313
1479
|
## Links
|
|
1314
1480
|
|
package/dist/client.d.ts
CHANGED
|
@@ -3,13 +3,20 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Singleton client for browser-based real-time interactions with Ironflow.
|
|
5
5
|
*/
|
|
6
|
-
import type { Run, ListRunsOptions, ListRunsResult, InvokeResult, EmitOptions, EmitResult, SubscriptionErrorInfo, SubscriptionCallbacks, Subscription, AckableSubscription, ConnectionState, AppendEventInput, AppendOptions, AppendResult, ReadStreamOptions, StreamEvent, StreamInfo, StreamSnapshot, EntitySubscribeOptions, GetProjectionOptions, RebuildProjectionOptions, ProjectionStatusInfo, WaitResult, WaitProgress, QuerySQLProjectionOptions, SQLProjectionQueryResult, ProjectionStateResult, ProjectionSubscriptionCallbacks, TimeTravelRunStateSnapshot, TimeTravelTimelineEvent, TimeTravelStepOutputSnapshot, APIKey, APIKeyWithSecret, CreateAPIKeyInput, Organization, CreateOrgInput, UpdateOrgInput, Role, CreateRoleInput, UpdateRoleInput, Policy, CreatePolicyInput, UpdatePolicyInput, EventSchema, RegisterSchemaInput, TestUpcastInput, UpcastResult, WebhookSource, CreateWebhookSourceInput, WebhookDelivery, ListWebhookDeliveriesOptions, AuditTrailResult, GetAuditTrailOptions, User, CreateUserInput, UpdateUserInput, Tenant } from "@ironflow/core";
|
|
6
|
+
import type { Logger, Run, ListRunsOptions, ListRunsResult, InvokeResult, EmitOptions, EmitResult, SubscriptionErrorInfo, SubscriptionCallbacks, Subscription, AckableSubscription, ConnectionState, AppendEventInput, AppendOptions, AppendResult, ReadStreamOptions, StreamEvent, StreamInfo, StreamSnapshot, EntitySubscribeOptions, GetProjectionOptions, RebuildProjectionOptions, ProjectionStatusInfo, WaitResult, WaitProgress, QuerySQLProjectionOptions, SQLProjectionQueryResult, ProjectionStateResult, ProjectionSubscriptionCallbacks, TimeTravelRunStateSnapshot, TimeTravelTimelineEvent, TimeTravelStepOutputSnapshot, APIKey, APIKeyWithSecret, CreateAPIKeyInput, Organization, CreateOrgInput, UpdateOrgInput, Role, CreateRoleInput, UpdateRoleInput, Policy, CreatePolicyInput, UpdatePolicyInput, EventSchema, RegisterSchemaInput, TestUpcastInput, UpcastResult, WebhookSource, CreateWebhookSourceInput, WebhookDelivery, ListWebhookDeliveriesOptions, AuditTrailResult, GetAuditTrailOptions, User, CreateUserInput, UpdateUserInput, Tenant } from "@ironflow/core";
|
|
7
7
|
import { type EmitSyncResult } from "@ironflow/core";
|
|
8
|
-
import type { IronflowConfig, IronflowConfigOptions } from "./config.js";
|
|
8
|
+
import type { AuthConfig, IronflowConfig, IronflowConfigOptions } from "./config.js";
|
|
9
9
|
import { type BrowserSubscribeOptions, type SubscriptionGroup } from "./subscription.js";
|
|
10
10
|
import { BrowserKVClient } from "./kv.js";
|
|
11
11
|
import { BrowserConfigClient } from "./config-client.js";
|
|
12
12
|
import { type AgentsNamespace } from "./agents/index.js";
|
|
13
|
+
/**
|
|
14
|
+
* Key for the offline queue's replay entry point.
|
|
15
|
+
*
|
|
16
|
+
* Not exported from the package root, so it is unreachable outside this module
|
|
17
|
+
* pair — the closest thing to package-private TypeScript offers.
|
|
18
|
+
*/
|
|
19
|
+
export declare const REPLAY_QUEUED_WRITE: unique symbol;
|
|
13
20
|
/**
|
|
14
21
|
* Ironflow browser client singleton
|
|
15
22
|
*/
|
|
@@ -40,6 +47,28 @@ declare class IronflowClient {
|
|
|
40
47
|
* Must be called before any other operations.
|
|
41
48
|
*/
|
|
42
49
|
configure(options?: IronflowConfigOptions): void;
|
|
50
|
+
/**
|
|
51
|
+
* Replace the credentials without tearing anything down.
|
|
52
|
+
*
|
|
53
|
+
* `configure()` cannot be used for this: it calls `cleanup()`, which destroys
|
|
54
|
+
* the transport, every subscription, and — for an offline client — the
|
|
55
|
+
* drainer mid-flight. Refreshing an expired token must not cost you all of
|
|
56
|
+
* that.
|
|
57
|
+
*
|
|
58
|
+
* Every request path reads `config.auth` at send time (`request()`,
|
|
59
|
+
* `streamRequest()`, `restRequest()` all build their `Authorization` header
|
|
60
|
+
* per call), so the next request picks this up with no further work. An
|
|
61
|
+
* already-open subscription keeps the credentials it connected with until it
|
|
62
|
+
* reconnects.
|
|
63
|
+
*/
|
|
64
|
+
setAuth(auth: AuthConfig | undefined): void;
|
|
65
|
+
/**
|
|
66
|
+
* The configured logger.
|
|
67
|
+
*
|
|
68
|
+
* @internal Lets sibling modules (the offline queue) honour the app's logging
|
|
69
|
+
* configuration instead of writing straight to the console.
|
|
70
|
+
*/
|
|
71
|
+
getLogger(): Logger;
|
|
43
72
|
/**
|
|
44
73
|
* Check if the client is configured
|
|
45
74
|
*/
|
|
@@ -150,10 +179,6 @@ declare class IronflowClient {
|
|
|
150
179
|
* Cancel a running run
|
|
151
180
|
*/
|
|
152
181
|
cancelRun(runId: string, reason?: string): Promise<Run>;
|
|
153
|
-
/**
|
|
154
|
-
* Retry a failed run
|
|
155
|
-
*/
|
|
156
|
-
retryRun(runId: string, fromStep?: string): Promise<Run>;
|
|
157
182
|
/**
|
|
158
183
|
* Patch a step's output (hot patching)
|
|
159
184
|
*/
|
|
@@ -821,7 +846,66 @@ declare class IronflowClient {
|
|
|
821
846
|
*/
|
|
822
847
|
_resetForTesting(): void;
|
|
823
848
|
private setupVisibilityHandling;
|
|
849
|
+
/**
|
|
850
|
+
* Shared HTTP shell for every REST/Connect call the client makes.
|
|
851
|
+
*
|
|
852
|
+
* `send` owns the transport concerns; `handle` owns how one response becomes
|
|
853
|
+
* a `T`. Splitting there is what lets three callers with very different
|
|
854
|
+
* response handling share one implementation:
|
|
855
|
+
*
|
|
856
|
+
* caller ──> send(method, path, body, handle)
|
|
857
|
+
* │
|
|
858
|
+
* ├─ headers: Content-Type (only when a body is sent),
|
|
859
|
+
* │ X-Ironflow-Environment,
|
|
860
|
+
* │ Authorization (apiKey wins over token)
|
|
861
|
+
* ├─ fetch ──> handle(response) ──> T
|
|
862
|
+
* │ └─ may throw IronflowError ──┐
|
|
863
|
+
* ├─ catch: AbortError -> TIMEOUT │ rethrown
|
|
864
|
+
* │ anything else -> REQUEST_FAILED │ as-is
|
|
865
|
+
* └─ finally: clearTimeout <───────────────────┘
|
|
866
|
+
*
|
|
867
|
+
* Two details are load-bearing and must not be "tidied":
|
|
868
|
+
*
|
|
869
|
+
* 1. The abort timer is cleared only *after* `handle` returns, so a slow
|
|
870
|
+
* parse of a large body can still trip the timeout. That matches the
|
|
871
|
+
* behaviour of the three helpers this replaces.
|
|
872
|
+
* 2. `handle` runs inside the try, so errors it throws pass through the
|
|
873
|
+
* catch below. Every typed error in this SDK (`ValidationError`,
|
|
874
|
+
* `UnauthenticatedError`, `EnterpriseRequiredError`, `UnauthorizedError`)
|
|
875
|
+
* extends `IronflowError`, so the single `instanceof` guard covers all of
|
|
876
|
+
* them and they are rethrown untouched.
|
|
877
|
+
*/
|
|
878
|
+
private send;
|
|
879
|
+
/**
|
|
880
|
+
* Connect-style request whose response is validated against a zod schema.
|
|
881
|
+
*
|
|
882
|
+
* Reads the body exactly once and reuses the text for both the error path
|
|
883
|
+
* and the success parse.
|
|
884
|
+
*/
|
|
824
885
|
private request;
|
|
886
|
+
/**
|
|
887
|
+
* Replay a write that the offline queue stored earlier (ADR 0052).
|
|
888
|
+
*
|
|
889
|
+
* Keyed by a module-private symbol rather than a name. An `@internal` JSDoc
|
|
890
|
+
* tag does nothing without `stripInternal`, which this repo does not set, so
|
|
891
|
+
* a named method would ship in the published .d.ts — and this one is an
|
|
892
|
+
* arbitrary-path authenticated POST, which is not something to hand out.
|
|
893
|
+
* `index.ts` does not re-export the symbol, so no consumer can reach it.
|
|
894
|
+
*
|
|
895
|
+
* Takes the serialised body the queue persisted and routes it through the
|
|
896
|
+
* ordinary request path, so a replayed write gets exactly the same headers,
|
|
897
|
+
* timeout and retry classification as a live one — including 429 being
|
|
898
|
+
* retryable, which the drainer depends on.
|
|
899
|
+
*/
|
|
900
|
+
[REPLAY_QUEUED_WRITE](path: string, body: string): Promise<{
|
|
901
|
+
eventId?: string;
|
|
902
|
+
entityVersion?: number;
|
|
903
|
+
}>;
|
|
904
|
+
/**
|
|
905
|
+
* Connect-style POST returning the raw decoded JSON, no schema validation.
|
|
906
|
+
*
|
|
907
|
+
* Only reads the body on the error path.
|
|
908
|
+
*/
|
|
825
909
|
private streamRequest;
|
|
826
910
|
/**
|
|
827
911
|
* REST request helper for auth management endpoints.
|
|
@@ -830,6 +914,10 @@ declare class IronflowClient {
|
|
|
830
914
|
* - 401 → UnauthenticatedError
|
|
831
915
|
* - 402 → EnterpriseRequiredError
|
|
832
916
|
* - 403 → UnauthorizedError
|
|
917
|
+
*
|
|
918
|
+
* Note the error message template differs from the two Connect helpers
|
|
919
|
+
* above ("Request failed with status N" vs "Request failed: N"); both are
|
|
920
|
+
* pinned by tests, so pick deliberately if you ever unify them.
|
|
833
921
|
*/
|
|
834
922
|
private restRequest;
|
|
835
923
|
private mapRunResponse;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|