@stepflowjs/client-native 0.0.1

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.
@@ -0,0 +1,235 @@
1
+ import { StepflowClient, StepflowClientConfig, StreamOptions, StreamEvent, StepExecution, Execution, ExecutionStatus, TriggerResult } from '@stepflowjs/client-ts';
2
+ export { Execution, ExecutionError, ExecutionStatus, ListRunsOptions, NotifyResult, PaginatedResult, StepExecution, StepflowClient, StepflowClientConfig, StepflowError, StreamEvent, StreamOptions, SubscribeOptions, TriggerResult, Unsubscribe } from '@stepflowjs/client-ts';
3
+ import React from 'react';
4
+
5
+ interface StepflowNativeClientConfig extends StepflowClientConfig {
6
+ /**
7
+ * Custom fetch implementation (e.g., expo/fetch)
8
+ * If not provided, will attempt to auto-detect expo/fetch
9
+ */
10
+ customFetch?: typeof globalThis.fetch;
11
+ /**
12
+ * Enable warnings when streaming may not work properly
13
+ * @default true
14
+ */
15
+ enableStreamingWarnings?: boolean;
16
+ }
17
+ declare class StepflowNativeClient extends StepflowClient {
18
+ private customFetch?;
19
+ private enableStreamingWarnings;
20
+ private fetchResolved;
21
+ private resolvedFetch?;
22
+ constructor(config: StepflowNativeClientConfig);
23
+ /**
24
+ * Resolve the fetch implementation to use
25
+ * Priority: customFetch > expo/fetch > global fetch (with warning)
26
+ */
27
+ private resolveFetch;
28
+ /**
29
+ * Override stream method to use resolved fetch and detect streaming capability
30
+ */
31
+ stream<TPayload = unknown, TResult = unknown>(workflowId: string, payload: TPayload, options?: StreamOptions): AsyncGenerator<StreamEvent, void, unknown>;
32
+ }
33
+
34
+ interface StepflowNativeContextValue {
35
+ client: StepflowNativeClient;
36
+ config: StepflowNativeClientConfig;
37
+ }
38
+ interface StepflowNativeProviderProps {
39
+ children: React.ReactNode;
40
+ config: StepflowNativeClientConfig;
41
+ }
42
+ declare function StepflowNativeProvider({ children, config, }: StepflowNativeProviderProps): React.ReactElement;
43
+ declare function useStepflowNative(): StepflowNativeContextValue;
44
+
45
+ interface UseWorkflowRunOptions {
46
+ /**
47
+ * The run ID to subscribe to
48
+ */
49
+ runId: string;
50
+ /**
51
+ * Public access token for the run
52
+ */
53
+ accessToken?: string;
54
+ /**
55
+ * Callback when a step completes
56
+ */
57
+ onStepComplete?: (step: StepExecution) => void;
58
+ /**
59
+ * Callback when the workflow completes
60
+ */
61
+ onComplete?: (result: unknown) => void;
62
+ /**
63
+ * Callback when the workflow fails
64
+ */
65
+ onError?: (error: Error) => void;
66
+ /**
67
+ * Throttle updates (ms)
68
+ */
69
+ throttleMs?: number;
70
+ /**
71
+ * Enable/disable the subscription
72
+ */
73
+ enabled?: boolean;
74
+ }
75
+ interface UseWorkflowRunResult<TPayload = unknown, TResult = unknown> {
76
+ /**
77
+ * The current execution state
78
+ */
79
+ run: Execution<TPayload, TResult> | null;
80
+ /**
81
+ * Current execution status
82
+ */
83
+ status: ExecutionStatus;
84
+ /**
85
+ * Completed steps
86
+ */
87
+ steps: StepExecution[];
88
+ /**
89
+ * Execution metadata
90
+ */
91
+ metadata: Record<string, unknown>;
92
+ /**
93
+ * Error if any
94
+ */
95
+ error: Error | null;
96
+ /**
97
+ * Loading state
98
+ */
99
+ isLoading: boolean;
100
+ /**
101
+ * Connection state
102
+ */
103
+ isConnected: boolean;
104
+ /**
105
+ * Refetch the run data
106
+ */
107
+ refetch: () => Promise<void>;
108
+ }
109
+ declare function useWorkflowRun<TPayload = unknown, TResult = unknown>(options: UseWorkflowRunOptions): UseWorkflowRunResult<TPayload, TResult>;
110
+
111
+ interface UseWorkflowTriggerOptions {
112
+ /**
113
+ * The workflow ID to trigger
114
+ */
115
+ workflowId: string;
116
+ /**
117
+ * Callback on successful trigger
118
+ */
119
+ onSuccess?: (result: TriggerResult) => void;
120
+ /**
121
+ * Callback on error
122
+ */
123
+ onError?: (error: Error) => void;
124
+ }
125
+ interface UseWorkflowTriggerResult<TPayload = unknown> {
126
+ /**
127
+ * Trigger the workflow with payload
128
+ */
129
+ trigger: (payload: TPayload, options?: TriggerOptions) => Promise<TriggerResult>;
130
+ /**
131
+ * The run ID from the last trigger
132
+ */
133
+ runId: string | null;
134
+ /**
135
+ * The execution ID from the last trigger
136
+ */
137
+ executionId: string | null;
138
+ /**
139
+ * Public access token for the run
140
+ */
141
+ accessToken: string | null;
142
+ /**
143
+ * Whether a trigger is in progress
144
+ */
145
+ isTriggering: boolean;
146
+ /**
147
+ * Error from the last trigger
148
+ */
149
+ error: Error | null;
150
+ /**
151
+ * Reset the state
152
+ */
153
+ reset: () => void;
154
+ }
155
+ interface TriggerOptions {
156
+ /**
157
+ * Custom run ID
158
+ */
159
+ runId?: string;
160
+ /**
161
+ * Additional metadata
162
+ */
163
+ metadata?: Record<string, unknown>;
164
+ /**
165
+ * Delay before execution (ms)
166
+ */
167
+ delay?: number;
168
+ }
169
+ declare function useWorkflowTrigger<TPayload = unknown>(options: UseWorkflowTriggerOptions): UseWorkflowTriggerResult<TPayload>;
170
+
171
+ interface UseWorkflowStreamOptions<TPayload, TResult> {
172
+ /**
173
+ * The workflow ID to execute
174
+ */
175
+ workflowId: string;
176
+ /**
177
+ * The payload to send
178
+ */
179
+ payload: TPayload;
180
+ /**
181
+ * Auto-start the stream
182
+ */
183
+ autoStart?: boolean;
184
+ /**
185
+ * Callback on workflow completion
186
+ */
187
+ onComplete?: (result: TResult) => void;
188
+ /**
189
+ * Callback on error
190
+ */
191
+ onError?: (error: Error) => void;
192
+ }
193
+ interface UseWorkflowStreamResult<TResult = unknown> {
194
+ /**
195
+ * Start the workflow stream
196
+ */
197
+ start: () => Promise<void>;
198
+ /**
199
+ * Stop/abort the stream
200
+ */
201
+ stop: () => void;
202
+ /**
203
+ * All received events
204
+ */
205
+ events: WorkflowEvent[];
206
+ /**
207
+ * Final result (when complete)
208
+ */
209
+ result: TResult | null;
210
+ /**
211
+ * Current status
212
+ */
213
+ status: ExecutionStatus;
214
+ /**
215
+ * Whether streaming is active
216
+ */
217
+ isStreaming: boolean;
218
+ /**
219
+ * Error if any
220
+ */
221
+ error: Error | null;
222
+ /**
223
+ * Reset the state
224
+ */
225
+ reset: () => void;
226
+ }
227
+ interface WorkflowEvent {
228
+ type: string;
229
+ data: unknown;
230
+ timestamp: Date;
231
+ stepName?: string;
232
+ }
233
+ declare function useWorkflowStream<TPayload = unknown, TResult = unknown>(options: UseWorkflowStreamOptions<TPayload, TResult>): UseWorkflowStreamResult<TResult>;
234
+
235
+ export { StepflowNativeClient, type StepflowNativeClientConfig, StepflowNativeProvider, type StepflowNativeProviderProps, type TriggerOptions, type UseWorkflowRunOptions, type UseWorkflowRunResult, type UseWorkflowStreamOptions, type UseWorkflowStreamResult, type UseWorkflowTriggerOptions, type UseWorkflowTriggerResult, type WorkflowEvent, useStepflowNative, useWorkflowRun, useWorkflowStream, useWorkflowTrigger };
package/dist/index.js ADDED
@@ -0,0 +1,420 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
18
+
19
+ // src/client.ts
20
+ var client_exports = {};
21
+ __export(client_exports, {
22
+ StepflowNativeClient: () => StepflowNativeClient
23
+ });
24
+ __reExport(client_exports, client_ts_star);
25
+ import {
26
+ StepflowClient
27
+ } from "@stepflowjs/client-ts";
28
+ import * as client_ts_star from "@stepflowjs/client-ts";
29
+ var StepflowNativeClient = class extends StepflowClient {
30
+ customFetch;
31
+ enableStreamingWarnings;
32
+ fetchResolved = false;
33
+ resolvedFetch;
34
+ constructor(config) {
35
+ super(config);
36
+ this.customFetch = config.customFetch;
37
+ this.enableStreamingWarnings = config.enableStreamingWarnings ?? true;
38
+ }
39
+ /**
40
+ * Resolve the fetch implementation to use
41
+ * Priority: customFetch > expo/fetch > global fetch (with warning)
42
+ */
43
+ async resolveFetch() {
44
+ if (this.fetchResolved && this.resolvedFetch) {
45
+ return this.resolvedFetch;
46
+ }
47
+ if (this.customFetch) {
48
+ this.resolvedFetch = this.customFetch;
49
+ this.fetchResolved = true;
50
+ return this.resolvedFetch;
51
+ }
52
+ try {
53
+ const expoFetch = await import("expo/fetch");
54
+ this.resolvedFetch = expoFetch.fetch;
55
+ this.fetchResolved = true;
56
+ return this.resolvedFetch;
57
+ } catch {
58
+ }
59
+ if (this.enableStreamingWarnings) {
60
+ console.warn(
61
+ "[Stepflow] Using default fetch - streaming may not work properly. Install expo SDK 52+ or provide customFetch for proper streaming support."
62
+ );
63
+ }
64
+ this.resolvedFetch = globalThis.fetch;
65
+ this.fetchResolved = true;
66
+ return this.resolvedFetch;
67
+ }
68
+ /**
69
+ * Override stream method to use resolved fetch and detect streaming capability
70
+ */
71
+ async *stream(workflowId, payload, options) {
72
+ const fetchImpl = await this.resolveFetch();
73
+ const isDefaultFetch = fetchImpl === globalThis.fetch && !this.customFetch;
74
+ if (isDefaultFetch && this.enableStreamingWarnings) {
75
+ console.warn(
76
+ "[Stepflow] Streaming with default fetch may not work properly. Consider using expo SDK 52+ or providing customFetch."
77
+ );
78
+ }
79
+ yield* super.stream(workflowId, payload, options);
80
+ }
81
+ };
82
+
83
+ // src/index.ts
84
+ import {
85
+ StepflowClient as StepflowClient2,
86
+ StepflowError
87
+ } from "@stepflowjs/client-ts";
88
+
89
+ // src/providers/stepflow-provider.tsx
90
+ import { createContext, useContext, useMemo } from "react";
91
+ import { jsx } from "react/jsx-runtime";
92
+ var StepflowNativeContext = createContext(
93
+ null
94
+ );
95
+ function StepflowNativeProvider({
96
+ children,
97
+ config
98
+ }) {
99
+ const client = useMemo(
100
+ () => new StepflowNativeClient(config),
101
+ [
102
+ config.baseUrl,
103
+ config.apiKey,
104
+ config.publicApiKey,
105
+ config.wsUrl,
106
+ config.customFetch,
107
+ config.enableStreamingWarnings
108
+ ]
109
+ );
110
+ const value = useMemo(() => ({ client, config }), [client, config]);
111
+ return /* @__PURE__ */ jsx(StepflowNativeContext.Provider, { value, children });
112
+ }
113
+ function useStepflowNative() {
114
+ const context = useContext(StepflowNativeContext);
115
+ if (!context) {
116
+ throw new Error(
117
+ "useStepflowNative must be used within a StepflowNativeProvider"
118
+ );
119
+ }
120
+ return context;
121
+ }
122
+
123
+ // src/hooks/use-workflow-run.ts
124
+ import { useState, useEffect, useCallback } from "react";
125
+ function useWorkflowRun(options) {
126
+ const { client } = useStepflowNative();
127
+ const {
128
+ runId,
129
+ accessToken,
130
+ onStepComplete,
131
+ onComplete,
132
+ onError,
133
+ throttleMs,
134
+ enabled = true
135
+ } = options;
136
+ const [state, setState] = useState({
137
+ run: null,
138
+ status: "pending",
139
+ steps: [],
140
+ metadata: {},
141
+ error: null,
142
+ isLoading: true,
143
+ isConnected: false
144
+ });
145
+ const refetch = useCallback(async () => {
146
+ if (!enabled) return;
147
+ try {
148
+ setState((prev) => ({ ...prev, isLoading: true }));
149
+ const run = await client.getRun(runId, {
150
+ accessToken
151
+ });
152
+ if (run) {
153
+ setState((prev) => ({
154
+ ...prev,
155
+ run,
156
+ status: run.status,
157
+ steps: run.steps,
158
+ metadata: run.metadata,
159
+ isLoading: false
160
+ }));
161
+ }
162
+ } catch (err) {
163
+ setState((prev) => ({
164
+ ...prev,
165
+ error: err instanceof Error ? err : new Error(String(err)),
166
+ isLoading: false
167
+ }));
168
+ }
169
+ }, [client, runId, accessToken, enabled]);
170
+ useEffect(() => {
171
+ if (!enabled) return;
172
+ refetch();
173
+ const unsubscribe = client.subscribeToRun(runId, {
174
+ accessToken,
175
+ throttleMs,
176
+ onUpdate: (run) => {
177
+ setState((prev) => ({
178
+ ...prev,
179
+ run,
180
+ status: run.status,
181
+ steps: run.steps,
182
+ metadata: run.metadata,
183
+ isLoading: false
184
+ }));
185
+ },
186
+ onStepComplete: (step) => {
187
+ setState((prev) => ({
188
+ ...prev,
189
+ steps: [...prev.steps.filter((s) => s.name !== step.name), step]
190
+ }));
191
+ onStepComplete?.(step);
192
+ },
193
+ onComplete: (result) => {
194
+ setState((prev) => ({
195
+ ...prev,
196
+ status: "completed",
197
+ isLoading: false
198
+ }));
199
+ onComplete?.(result);
200
+ },
201
+ onError: (error) => {
202
+ setState((prev) => ({
203
+ ...prev,
204
+ error,
205
+ status: "failed",
206
+ isLoading: false
207
+ }));
208
+ onError?.(error);
209
+ },
210
+ onConnect: () => {
211
+ setState((prev) => ({ ...prev, isConnected: true }));
212
+ },
213
+ onDisconnect: () => {
214
+ setState((prev) => ({ ...prev, isConnected: false }));
215
+ }
216
+ });
217
+ return () => {
218
+ unsubscribe();
219
+ };
220
+ }, [
221
+ client,
222
+ runId,
223
+ accessToken,
224
+ enabled,
225
+ throttleMs,
226
+ onStepComplete,
227
+ onComplete,
228
+ onError,
229
+ refetch
230
+ ]);
231
+ return {
232
+ ...state,
233
+ refetch
234
+ };
235
+ }
236
+
237
+ // src/hooks/use-workflow-trigger.ts
238
+ import { useState as useState2, useCallback as useCallback2 } from "react";
239
+ function useWorkflowTrigger(options) {
240
+ const { client } = useStepflowNative();
241
+ const { workflowId, onSuccess, onError } = options;
242
+ const [state, setState] = useState2({
243
+ runId: null,
244
+ executionId: null,
245
+ accessToken: null,
246
+ isTriggering: false,
247
+ error: null
248
+ });
249
+ const trigger = useCallback2(
250
+ async (payload, triggerOptions) => {
251
+ setState((prev) => ({
252
+ ...prev,
253
+ isTriggering: true,
254
+ error: null
255
+ }));
256
+ try {
257
+ const result = await client.trigger(
258
+ workflowId,
259
+ payload,
260
+ triggerOptions
261
+ );
262
+ setState({
263
+ runId: result.runId,
264
+ executionId: result.executionId,
265
+ accessToken: result.publicAccessToken,
266
+ isTriggering: false,
267
+ error: null
268
+ });
269
+ onSuccess?.(result);
270
+ return result;
271
+ } catch (err) {
272
+ const error = err instanceof Error ? err : new Error(String(err));
273
+ setState((prev) => ({
274
+ ...prev,
275
+ isTriggering: false,
276
+ error
277
+ }));
278
+ onError?.(error);
279
+ throw error;
280
+ }
281
+ },
282
+ [client, workflowId, onSuccess, onError]
283
+ );
284
+ const reset = useCallback2(() => {
285
+ setState({
286
+ runId: null,
287
+ executionId: null,
288
+ accessToken: null,
289
+ isTriggering: false,
290
+ error: null
291
+ });
292
+ }, []);
293
+ return {
294
+ trigger,
295
+ ...state,
296
+ reset
297
+ };
298
+ }
299
+
300
+ // src/hooks/use-workflow-stream.ts
301
+ import { useState as useState3, useCallback as useCallback3, useRef, useEffect as useEffect2 } from "react";
302
+ function useWorkflowStream(options) {
303
+ const { client } = useStepflowNative();
304
+ const {
305
+ workflowId,
306
+ payload,
307
+ autoStart = false,
308
+ onComplete,
309
+ onError
310
+ } = options;
311
+ const [state, setState] = useState3({
312
+ events: [],
313
+ result: null,
314
+ status: "pending",
315
+ isStreaming: false,
316
+ error: null
317
+ });
318
+ const abortControllerRef = useRef(null);
319
+ const start = useCallback3(async () => {
320
+ abortControllerRef.current?.abort();
321
+ abortControllerRef.current = new AbortController();
322
+ setState((prev) => ({
323
+ ...prev,
324
+ events: [],
325
+ result: null,
326
+ status: "running",
327
+ isStreaming: true,
328
+ error: null
329
+ }));
330
+ try {
331
+ const stream = client.stream(workflowId, payload, {
332
+ signal: abortControllerRef.current.signal
333
+ });
334
+ for await (const event of stream) {
335
+ const workflowEvent = {
336
+ type: event.type,
337
+ data: event.data,
338
+ timestamp: /* @__PURE__ */ new Date(),
339
+ stepName: event.stepName
340
+ };
341
+ setState((prev) => ({
342
+ ...prev,
343
+ events: [...prev.events, workflowEvent]
344
+ }));
345
+ if (event.type === "execution:complete") {
346
+ const result = event.data;
347
+ setState((prev) => ({
348
+ ...prev,
349
+ result,
350
+ status: "completed",
351
+ isStreaming: false
352
+ }));
353
+ onComplete?.(result);
354
+ }
355
+ if (event.type === "execution:failed") {
356
+ const error = new Error(event.data.message);
357
+ setState((prev) => ({
358
+ ...prev,
359
+ error,
360
+ status: "failed",
361
+ isStreaming: false
362
+ }));
363
+ onError?.(error);
364
+ }
365
+ }
366
+ } catch (err) {
367
+ if (err.name === "AbortError") {
368
+ setState((prev) => ({ ...prev, isStreaming: false }));
369
+ return;
370
+ }
371
+ const error = err instanceof Error ? err : new Error(String(err));
372
+ setState((prev) => ({
373
+ ...prev,
374
+ error,
375
+ status: "failed",
376
+ isStreaming: false
377
+ }));
378
+ onError?.(error);
379
+ }
380
+ }, [client, workflowId, payload, onComplete, onError]);
381
+ const stop = useCallback3(() => {
382
+ abortControllerRef.current?.abort();
383
+ setState((prev) => ({ ...prev, isStreaming: false }));
384
+ }, []);
385
+ const reset = useCallback3(() => {
386
+ abortControllerRef.current?.abort();
387
+ setState({
388
+ events: [],
389
+ result: null,
390
+ status: "pending",
391
+ isStreaming: false,
392
+ error: null
393
+ });
394
+ }, []);
395
+ useEffect2(() => {
396
+ if (autoStart) {
397
+ start();
398
+ }
399
+ return () => {
400
+ abortControllerRef.current?.abort();
401
+ };
402
+ }, [autoStart, start]);
403
+ return {
404
+ start,
405
+ stop,
406
+ reset,
407
+ ...state
408
+ };
409
+ }
410
+ export {
411
+ StepflowClient2 as StepflowClient,
412
+ StepflowError,
413
+ StepflowNativeClient,
414
+ StepflowNativeProvider,
415
+ useStepflowNative,
416
+ useWorkflowRun,
417
+ useWorkflowStream,
418
+ useWorkflowTrigger
419
+ };
420
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client.ts","../src/index.ts","../src/providers/stepflow-provider.tsx","../src/hooks/use-workflow-run.ts","../src/hooks/use-workflow-trigger.ts","../src/hooks/use-workflow-stream.ts"],"sourcesContent":["// ============================================================================\n// Stepflow React Native Client\n// ============================================================================\n\nimport {\n StepflowClient,\n type StepflowClientConfig,\n type StreamEvent,\n type StreamOptions,\n} from \"@stepflowjs/client-ts\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface StepflowNativeClientConfig extends StepflowClientConfig {\n /**\n * Custom fetch implementation (e.g., expo/fetch)\n * If not provided, will attempt to auto-detect expo/fetch\n */\n customFetch?: typeof globalThis.fetch;\n\n /**\n * Enable warnings when streaming may not work properly\n * @default true\n */\n enableStreamingWarnings?: boolean;\n}\n\n// ============================================================================\n// Client Implementation\n// ============================================================================\n\nexport class StepflowNativeClient extends StepflowClient {\n private customFetch?: typeof globalThis.fetch;\n private enableStreamingWarnings: boolean;\n private fetchResolved = false;\n private resolvedFetch?: typeof globalThis.fetch;\n\n constructor(config: StepflowNativeClientConfig) {\n super(config);\n this.customFetch = config.customFetch;\n this.enableStreamingWarnings = config.enableStreamingWarnings ?? true;\n }\n\n /**\n * Resolve the fetch implementation to use\n * Priority: customFetch > expo/fetch > global fetch (with warning)\n */\n private async resolveFetch(): Promise<typeof globalThis.fetch> {\n // Return cached result if already resolved\n if (this.fetchResolved && this.resolvedFetch) {\n return this.resolvedFetch;\n }\n\n // 1. Use custom fetch if provided\n if (this.customFetch) {\n this.resolvedFetch = this.customFetch;\n this.fetchResolved = true;\n return this.resolvedFetch;\n }\n\n // 2. Try to dynamically import expo/fetch\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const expoFetch = (await import(\"expo/fetch\" as any)) as {\n fetch: typeof globalThis.fetch;\n };\n this.resolvedFetch = expoFetch.fetch;\n this.fetchResolved = true;\n return this.resolvedFetch;\n } catch {\n // expo/fetch not available, fall back to global fetch\n }\n\n // 3. Fall back to global fetch with warning\n if (this.enableStreamingWarnings) {\n console.warn(\n \"[Stepflow] Using default fetch - streaming may not work properly. \" +\n \"Install expo SDK 52+ or provide customFetch for proper streaming support.\",\n );\n }\n\n this.resolvedFetch = globalThis.fetch;\n this.fetchResolved = true;\n return this.resolvedFetch;\n }\n\n /**\n * Override stream method to use resolved fetch and detect streaming capability\n */\n override async *stream<TPayload = unknown, TResult = unknown>(\n workflowId: string,\n payload: TPayload,\n options?: StreamOptions,\n ): AsyncGenerator<StreamEvent, void, unknown> {\n // Resolve fetch implementation\n const fetchImpl = await this.resolveFetch();\n\n // Check if we're using default fetch (not expo/fetch or custom)\n const isDefaultFetch = fetchImpl === globalThis.fetch && !this.customFetch;\n\n if (isDefaultFetch && this.enableStreamingWarnings) {\n console.warn(\n \"[Stepflow] Streaming with default fetch may not work properly. \" +\n \"Consider using expo SDK 52+ or providing customFetch.\",\n );\n }\n\n // Use parent implementation\n yield* super.stream<TPayload, TResult>(workflowId, payload, options);\n }\n}\n\n// Re-export all types from client-ts\nexport * from \"@stepflowjs/client-ts\";\n","// ============================================================================\n// @stepflowjs/client-native - React Native Client SDK\n// ============================================================================\n\n// Export client\nexport { StepflowNativeClient } from \"./client.js\";\nexport type { StepflowNativeClientConfig } from \"./client.js\";\n\n// Re-export all types from @stepflowjs/client-ts (except TriggerOptions which we re-export from hooks)\nexport {\n StepflowClient,\n StepflowError,\n type StepflowClientConfig,\n type ExecutionStatus,\n type Execution,\n type ExecutionError,\n type StepExecution,\n type TriggerResult,\n type NotifyResult,\n type SubscribeOptions,\n type StreamOptions,\n type StreamEvent,\n type ListRunsOptions,\n type PaginatedResult,\n type Unsubscribe,\n} from \"@stepflowjs/client-ts\";\n\n// Export provider and context hook\nexport {\n StepflowNativeProvider,\n useStepflowNative,\n type StepflowNativeProviderProps,\n} from \"./providers/stepflow-provider.js\";\n\n// Export hooks\nexport * from \"./hooks/index.js\";\n","// ============================================================================\n// StepflowNativeProvider - React Native context for Stepflow client\n// ============================================================================\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport {\n StepflowNativeClient,\n type StepflowNativeClientConfig,\n} from \"../client.js\";\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface StepflowNativeContextValue {\n client: StepflowNativeClient;\n config: StepflowNativeClientConfig;\n}\n\nconst StepflowNativeContext = createContext<StepflowNativeContextValue | null>(\n null,\n);\n\n// ============================================================================\n// Provider\n// ============================================================================\n\nexport interface StepflowNativeProviderProps {\n children: React.ReactNode;\n config: StepflowNativeClientConfig;\n}\n\nexport function StepflowNativeProvider({\n children,\n config,\n}: StepflowNativeProviderProps): React.ReactElement {\n const client = useMemo(\n () => new StepflowNativeClient(config),\n [\n config.baseUrl,\n config.apiKey,\n config.publicApiKey,\n config.wsUrl,\n config.customFetch,\n config.enableStreamingWarnings,\n ],\n );\n\n const value = useMemo(() => ({ client, config }), [client, config]);\n\n return (\n <StepflowNativeContext.Provider value={value}>\n {children}\n </StepflowNativeContext.Provider>\n );\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\nexport function useStepflowNative(): StepflowNativeContextValue {\n const context = useContext(StepflowNativeContext);\n\n if (!context) {\n throw new Error(\n \"useStepflowNative must be used within a StepflowNativeProvider\",\n );\n }\n\n return context;\n}\n","// ============================================================================\n// useWorkflowRun - Subscribe to workflow run updates\n// ============================================================================\n\nimport { useState, useEffect, useCallback } from \"react\";\nimport { useStepflowNative } from \"../providers/stepflow-provider.js\";\nimport type {\n Execution,\n ExecutionStatus,\n StepExecution,\n} from \"@stepflowjs/client-ts\";\n\nexport interface UseWorkflowRunOptions {\n /**\n * The run ID to subscribe to\n */\n runId: string;\n\n /**\n * Public access token for the run\n */\n accessToken?: string;\n\n /**\n * Callback when a step completes\n */\n onStepComplete?: (step: StepExecution) => void;\n\n /**\n * Callback when the workflow completes\n */\n onComplete?: (result: unknown) => void;\n\n /**\n * Callback when the workflow fails\n */\n onError?: (error: Error) => void;\n\n /**\n * Throttle updates (ms)\n */\n throttleMs?: number;\n\n /**\n * Enable/disable the subscription\n */\n enabled?: boolean;\n}\n\nexport interface UseWorkflowRunResult<TPayload = unknown, TResult = unknown> {\n /**\n * The current execution state\n */\n run: Execution<TPayload, TResult> | null;\n\n /**\n * Current execution status\n */\n status: ExecutionStatus;\n\n /**\n * Completed steps\n */\n steps: StepExecution[];\n\n /**\n * Execution metadata\n */\n metadata: Record<string, unknown>;\n\n /**\n * Error if any\n */\n error: Error | null;\n\n /**\n * Loading state\n */\n isLoading: boolean;\n\n /**\n * Connection state\n */\n isConnected: boolean;\n\n /**\n * Refetch the run data\n */\n refetch: () => Promise<void>;\n}\n\nexport function useWorkflowRun<TPayload = unknown, TResult = unknown>(\n options: UseWorkflowRunOptions,\n): UseWorkflowRunResult<TPayload, TResult> {\n const { client } = useStepflowNative();\n const {\n runId,\n accessToken,\n onStepComplete,\n onComplete,\n onError,\n throttleMs,\n enabled = true,\n } = options;\n\n const [state, setState] = useState<{\n run: Execution<TPayload, TResult> | null;\n status: ExecutionStatus;\n steps: StepExecution[];\n metadata: Record<string, unknown>;\n error: Error | null;\n isLoading: boolean;\n isConnected: boolean;\n }>({\n run: null,\n status: \"pending\",\n steps: [],\n metadata: {},\n error: null,\n isLoading: true,\n isConnected: false,\n });\n\n const refetch = useCallback(async () => {\n if (!enabled) return;\n\n try {\n setState((prev) => ({ ...prev, isLoading: true }));\n const run = await client.getRun<TPayload, TResult>(runId, {\n accessToken,\n });\n\n if (run) {\n setState((prev) => ({\n ...prev,\n run,\n status: run.status,\n steps: run.steps,\n metadata: run.metadata,\n isLoading: false,\n }));\n }\n } catch (err) {\n setState((prev) => ({\n ...prev,\n error: err instanceof Error ? err : new Error(String(err)),\n isLoading: false,\n }));\n }\n }, [client, runId, accessToken, enabled]);\n\n useEffect(() => {\n if (!enabled) return;\n\n // Initial fetch\n refetch();\n\n // Subscribe to updates\n const unsubscribe = client.subscribeToRun<TPayload, TResult>(runId, {\n accessToken,\n throttleMs,\n onUpdate: (run) => {\n setState((prev) => ({\n ...prev,\n run,\n status: run.status,\n steps: run.steps,\n metadata: run.metadata,\n isLoading: false,\n }));\n },\n onStepComplete: (step) => {\n setState((prev) => ({\n ...prev,\n steps: [...prev.steps.filter((s) => s.name !== step.name), step],\n }));\n onStepComplete?.(step);\n },\n onComplete: (result) => {\n setState((prev) => ({\n ...prev,\n status: \"completed\",\n isLoading: false,\n }));\n onComplete?.(result);\n },\n onError: (error) => {\n setState((prev) => ({\n ...prev,\n error,\n status: \"failed\",\n isLoading: false,\n }));\n onError?.(error);\n },\n onConnect: () => {\n setState((prev) => ({ ...prev, isConnected: true }));\n },\n onDisconnect: () => {\n setState((prev) => ({ ...prev, isConnected: false }));\n },\n });\n\n return () => {\n unsubscribe();\n };\n }, [\n client,\n runId,\n accessToken,\n enabled,\n throttleMs,\n onStepComplete,\n onComplete,\n onError,\n refetch,\n ]);\n\n return {\n ...state,\n refetch,\n };\n}\n","// ============================================================================\n// useWorkflowTrigger - Trigger a workflow and get access token\n// ============================================================================\n\nimport { useState, useCallback } from \"react\";\nimport { useStepflowNative } from \"../providers/stepflow-provider.js\";\nimport type { TriggerResult } from \"@stepflowjs/client-ts\";\n\nexport interface UseWorkflowTriggerOptions {\n /**\n * The workflow ID to trigger\n */\n workflowId: string;\n\n /**\n * Callback on successful trigger\n */\n onSuccess?: (result: TriggerResult) => void;\n\n /**\n * Callback on error\n */\n onError?: (error: Error) => void;\n}\n\nexport interface UseWorkflowTriggerResult<TPayload = unknown> {\n /**\n * Trigger the workflow with payload\n */\n trigger: (\n payload: TPayload,\n options?: TriggerOptions,\n ) => Promise<TriggerResult>;\n\n /**\n * The run ID from the last trigger\n */\n runId: string | null;\n\n /**\n * The execution ID from the last trigger\n */\n executionId: string | null;\n\n /**\n * Public access token for the run\n */\n accessToken: string | null;\n\n /**\n * Whether a trigger is in progress\n */\n isTriggering: boolean;\n\n /**\n * Error from the last trigger\n */\n error: Error | null;\n\n /**\n * Reset the state\n */\n reset: () => void;\n}\n\nexport interface TriggerOptions {\n /**\n * Custom run ID\n */\n runId?: string;\n\n /**\n * Additional metadata\n */\n metadata?: Record<string, unknown>;\n\n /**\n * Delay before execution (ms)\n */\n delay?: number;\n}\n\nexport function useWorkflowTrigger<TPayload = unknown>(\n options: UseWorkflowTriggerOptions,\n): UseWorkflowTriggerResult<TPayload> {\n const { client } = useStepflowNative();\n const { workflowId, onSuccess, onError } = options;\n\n const [state, setState] = useState<{\n runId: string | null;\n executionId: string | null;\n accessToken: string | null;\n isTriggering: boolean;\n error: Error | null;\n }>({\n runId: null,\n executionId: null,\n accessToken: null,\n isTriggering: false,\n error: null,\n });\n\n const trigger = useCallback(\n async (\n payload: TPayload,\n triggerOptions?: TriggerOptions,\n ): Promise<TriggerResult> => {\n setState((prev) => ({\n ...prev,\n isTriggering: true,\n error: null,\n }));\n\n try {\n const result = await client.trigger(\n workflowId,\n payload,\n triggerOptions,\n );\n\n setState({\n runId: result.runId,\n executionId: result.executionId,\n accessToken: result.publicAccessToken,\n isTriggering: false,\n error: null,\n });\n\n onSuccess?.(result);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n\n setState((prev) => ({\n ...prev,\n isTriggering: false,\n error,\n }));\n\n onError?.(error);\n throw error;\n }\n },\n [client, workflowId, onSuccess, onError],\n );\n\n const reset = useCallback(() => {\n setState({\n runId: null,\n executionId: null,\n accessToken: null,\n isTriggering: false,\n error: null,\n });\n }, []);\n\n return {\n trigger,\n ...state,\n reset,\n };\n}\n","// ============================================================================\n// useWorkflowStream - Stream workflow execution with real-time events\n// ============================================================================\n\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useStepflowNative } from \"../providers/stepflow-provider.js\";\nimport type { ExecutionStatus } from \"@stepflowjs/client-ts\";\n\nexport interface UseWorkflowStreamOptions<TPayload, TResult> {\n /**\n * The workflow ID to execute\n */\n workflowId: string;\n\n /**\n * The payload to send\n */\n payload: TPayload;\n\n /**\n * Auto-start the stream\n */\n autoStart?: boolean;\n\n /**\n * Callback on workflow completion\n */\n onComplete?: (result: TResult) => void;\n\n /**\n * Callback on error\n */\n onError?: (error: Error) => void;\n}\n\nexport interface UseWorkflowStreamResult<TResult = unknown> {\n /**\n * Start the workflow stream\n */\n start: () => Promise<void>;\n\n /**\n * Stop/abort the stream\n */\n stop: () => void;\n\n /**\n * All received events\n */\n events: WorkflowEvent[];\n\n /**\n * Final result (when complete)\n */\n result: TResult | null;\n\n /**\n * Current status\n */\n status: ExecutionStatus;\n\n /**\n * Whether streaming is active\n */\n isStreaming: boolean;\n\n /**\n * Error if any\n */\n error: Error | null;\n\n /**\n * Reset the state\n */\n reset: () => void;\n}\n\nexport interface WorkflowEvent {\n type: string;\n data: unknown;\n timestamp: Date;\n stepName?: string;\n}\n\nexport function useWorkflowStream<TPayload = unknown, TResult = unknown>(\n options: UseWorkflowStreamOptions<TPayload, TResult>,\n): UseWorkflowStreamResult<TResult> {\n const { client } = useStepflowNative();\n const {\n workflowId,\n payload,\n autoStart = false,\n onComplete,\n onError,\n } = options;\n\n const [state, setState] = useState<{\n events: WorkflowEvent[];\n result: TResult | null;\n status: ExecutionStatus;\n isStreaming: boolean;\n error: Error | null;\n }>({\n events: [],\n result: null,\n status: \"pending\",\n isStreaming: false,\n error: null,\n });\n\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const start = useCallback(async () => {\n // Abort any existing stream\n abortControllerRef.current?.abort();\n abortControllerRef.current = new AbortController();\n\n setState((prev) => ({\n ...prev,\n events: [],\n result: null,\n status: \"running\",\n isStreaming: true,\n error: null,\n }));\n\n try {\n const stream = client.stream<TPayload, TResult>(workflowId, payload, {\n signal: abortControllerRef.current.signal,\n });\n\n for await (const event of stream) {\n const workflowEvent: WorkflowEvent = {\n type: event.type,\n data: event.data,\n timestamp: new Date(),\n stepName: event.stepName,\n };\n\n setState((prev) => ({\n ...prev,\n events: [...prev.events, workflowEvent],\n }));\n\n if (event.type === \"execution:complete\") {\n const result = event.data as TResult;\n setState((prev) => ({\n ...prev,\n result,\n status: \"completed\",\n isStreaming: false,\n }));\n onComplete?.(result);\n }\n\n if (event.type === \"execution:failed\") {\n const error = new Error((event.data as { message: string }).message);\n setState((prev) => ({\n ...prev,\n error,\n status: \"failed\",\n isStreaming: false,\n }));\n onError?.(error);\n }\n }\n } catch (err) {\n if ((err as Error).name === \"AbortError\") {\n setState((prev) => ({ ...prev, isStreaming: false }));\n return;\n }\n\n const error = err instanceof Error ? err : new Error(String(err));\n setState((prev) => ({\n ...prev,\n error,\n status: \"failed\",\n isStreaming: false,\n }));\n onError?.(error);\n }\n }, [client, workflowId, payload, onComplete, onError]);\n\n const stop = useCallback(() => {\n abortControllerRef.current?.abort();\n setState((prev) => ({ ...prev, isStreaming: false }));\n }, []);\n\n const reset = useCallback(() => {\n abortControllerRef.current?.abort();\n setState({\n events: [],\n result: null,\n status: \"pending\",\n isStreaming: false,\n error: null,\n });\n }, []);\n\n useEffect(() => {\n if (autoStart) {\n start();\n }\n\n return () => {\n abortControllerRef.current?.abort();\n };\n }, [autoStart, start]); // Only run on mount and autoStart change\n\n return {\n start,\n stop,\n reset,\n ...state,\n };\n}\n"],"mappings":"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","names":["StepflowClient","useState","useCallback","useState","useCallback","useState","useCallback","useEffect","useState","useCallback","useEffect"]}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@stepflowjs/client-native",
3
+ "version": "0.0.1",
4
+ "description": "React Native hooks for Stepflow workflow orchestration",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "dependencies": {
19
+ "@stepflowjs/client-ts": "0.0.1"
20
+ },
21
+ "peerDependencies": {
22
+ "react": "^18.0.0 || ^19.0.0",
23
+ "react-native": ">=0.70.0",
24
+ "typescript": "^5.0.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/react": "^19.2.8",
28
+ "tsup": "^8.5.1",
29
+ "vitest": "^4.0.17"
30
+ },
31
+ "license": "MIT",
32
+ "author": "Stepflow Contributors",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://stepflow-production.up.railway.app",
36
+ "directory": "packages/client-native"
37
+ },
38
+ "homepage": "https://stepflow-production.up.railway.app",
39
+ "bugs": {
40
+ "url": "https://stepflow-production.up.railway.app"
41
+ },
42
+ "keywords": [
43
+ "stepflow",
44
+ "workflow",
45
+ "orchestration",
46
+ "react-native",
47
+ "hooks",
48
+ "client",
49
+ "sdk"
50
+ ],
51
+ "publishConfig": {
52
+ "access": "public"
53
+ },
54
+ "scripts": {
55
+ "build": "tsup",
56
+ "dev": "tsup --watch",
57
+ "typecheck": "tsc --noEmit",
58
+ "test": "vitest",
59
+ "clean": "rm -rf dist"
60
+ }
61
+ }