@trigger.dev/react-hooks 0.0.0-bun-runtimes-20260909131057

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 (89) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -0
  3. package/dist/commonjs/contexts.d.ts +4 -0
  4. package/dist/commonjs/contexts.js +10 -0
  5. package/dist/commonjs/contexts.js.map +1 -0
  6. package/dist/commonjs/hooks/useApiClient.d.ts +47 -0
  7. package/dist/commonjs/hooks/useApiClient.js +57 -0
  8. package/dist/commonjs/hooks/useApiClient.js.map +1 -0
  9. package/dist/commonjs/hooks/useInputStreamSend.d.ts +26 -0
  10. package/dist/commonjs/hooks/useInputStreamSend.js +45 -0
  11. package/dist/commonjs/hooks/useInputStreamSend.js.map +1 -0
  12. package/dist/commonjs/hooks/useRealtime.d.ts +336 -0
  13. package/dist/commonjs/hooks/useRealtime.js +642 -0
  14. package/dist/commonjs/hooks/useRealtime.js.map +1 -0
  15. package/dist/commonjs/hooks/useRun.d.ts +22 -0
  16. package/dist/commonjs/hooks/useRun.js +40 -0
  17. package/dist/commonjs/hooks/useRun.js.map +1 -0
  18. package/dist/commonjs/hooks/useSessionStream.d.ts +131 -0
  19. package/dist/commonjs/hooks/useSessionStream.js +236 -0
  20. package/dist/commonjs/hooks/useSessionStream.js.map +1 -0
  21. package/dist/commonjs/hooks/useSessionStreamChannel.d.ts +86 -0
  22. package/dist/commonjs/hooks/useSessionStreamChannel.js +209 -0
  23. package/dist/commonjs/hooks/useSessionStreamChannel.js.map +1 -0
  24. package/dist/commonjs/hooks/useTaskTrigger.d.ts +107 -0
  25. package/dist/commonjs/hooks/useTaskTrigger.js +139 -0
  26. package/dist/commonjs/hooks/useTaskTrigger.js.map +1 -0
  27. package/dist/commonjs/hooks/useWaitToken.d.ts +35 -0
  28. package/dist/commonjs/hooks/useWaitToken.js +52 -0
  29. package/dist/commonjs/hooks/useWaitToken.js.map +1 -0
  30. package/dist/commonjs/index.d.ts +9 -0
  31. package/dist/commonjs/index.js +26 -0
  32. package/dist/commonjs/index.js.map +1 -0
  33. package/dist/commonjs/package.json +3 -0
  34. package/dist/commonjs/utils/createContextAndHook.d.ts +14 -0
  35. package/dist/commonjs/utils/createContextAndHook.js +38 -0
  36. package/dist/commonjs/utils/createContextAndHook.js.map +1 -0
  37. package/dist/commonjs/utils/throttle.d.ts +6 -0
  38. package/dist/commonjs/utils/throttle.js +50 -0
  39. package/dist/commonjs/utils/throttle.js.map +1 -0
  40. package/dist/commonjs/utils/trigger-swr.d.ts +19 -0
  41. package/dist/commonjs/utils/trigger-swr.js +27 -0
  42. package/dist/commonjs/utils/trigger-swr.js.map +1 -0
  43. package/dist/commonjs/utils/useStableRequestCallback.d.ts +5 -0
  44. package/dist/commonjs/utils/useStableRequestCallback.js +17 -0
  45. package/dist/commonjs/utils/useStableRequestCallback.js.map +1 -0
  46. package/dist/esm/contexts.d.ts +4 -0
  47. package/dist/esm/contexts.js +5 -0
  48. package/dist/esm/contexts.js.map +1 -0
  49. package/dist/esm/hooks/useApiClient.d.ts +47 -0
  50. package/dist/esm/hooks/useApiClient.js +54 -0
  51. package/dist/esm/hooks/useApiClient.js.map +1 -0
  52. package/dist/esm/hooks/useInputStreamSend.d.ts +26 -0
  53. package/dist/esm/hooks/useInputStreamSend.js +39 -0
  54. package/dist/esm/hooks/useInputStreamSend.js.map +1 -0
  55. package/dist/esm/hooks/useRealtime.d.ts +336 -0
  56. package/dist/esm/hooks/useRealtime.js +635 -0
  57. package/dist/esm/hooks/useRealtime.js.map +1 -0
  58. package/dist/esm/hooks/useRun.d.ts +22 -0
  59. package/dist/esm/hooks/useRun.js +37 -0
  60. package/dist/esm/hooks/useRun.js.map +1 -0
  61. package/dist/esm/hooks/useSessionStream.d.ts +131 -0
  62. package/dist/esm/hooks/useSessionStream.js +233 -0
  63. package/dist/esm/hooks/useSessionStream.js.map +1 -0
  64. package/dist/esm/hooks/useSessionStreamChannel.d.ts +86 -0
  65. package/dist/esm/hooks/useSessionStreamChannel.js +206 -0
  66. package/dist/esm/hooks/useSessionStreamChannel.js.map +1 -0
  67. package/dist/esm/hooks/useTaskTrigger.d.ts +107 -0
  68. package/dist/esm/hooks/useTaskTrigger.js +131 -0
  69. package/dist/esm/hooks/useTaskTrigger.js.map +1 -0
  70. package/dist/esm/hooks/useWaitToken.d.ts +35 -0
  71. package/dist/esm/hooks/useWaitToken.js +46 -0
  72. package/dist/esm/hooks/useWaitToken.js.map +1 -0
  73. package/dist/esm/index.d.ts +9 -0
  74. package/dist/esm/index.js +10 -0
  75. package/dist/esm/index.js.map +1 -0
  76. package/dist/esm/package.json +3 -0
  77. package/dist/esm/utils/createContextAndHook.d.ts +14 -0
  78. package/dist/esm/utils/createContextAndHook.js +31 -0
  79. package/dist/esm/utils/createContextAndHook.js.map +1 -0
  80. package/dist/esm/utils/throttle.d.ts +6 -0
  81. package/dist/esm/utils/throttle.js +47 -0
  82. package/dist/esm/utils/throttle.js.map +1 -0
  83. package/dist/esm/utils/trigger-swr.d.ts +19 -0
  84. package/dist/esm/utils/trigger-swr.js +6 -0
  85. package/dist/esm/utils/trigger-swr.js.map +1 -0
  86. package/dist/esm/utils/useStableRequestCallback.d.ts +5 -0
  87. package/dist/esm/utils/useStableRequestCallback.js +14 -0
  88. package/dist/esm/utils/useStableRequestCallback.js.map +1 -0
  89. package/package.json +75 -0
@@ -0,0 +1,206 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useId, useRef, useState } from "react";
3
+ import { createThrottledQueue } from "../utils/throttle.js";
4
+ import { useSWR } from "../utils/trigger-swr.js";
5
+ import { useStableRequestCallback } from "../utils/useStableRequestCallback.js";
6
+ import { useApiClient } from "./useApiClient.js";
7
+ /**
8
+ * Read one side of a named Session side channel, with record types inferred
9
+ * from a `defineSessionChannel` declaration passed as the type argument.
10
+ *
11
+ * The channel name is typesafe (`SessionChannelName<TChannel>`) and `records`
12
+ * is typed from the channel's `.out` / `.in` record type. Called without the
13
+ * type argument, the channel name is any string and `records` is `unknown`.
14
+ *
15
+ * Requires a Public Access Token scoped to the session (or to the channel).
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * import type { screenshotsChannel } from "./shared/channels";
20
+ *
21
+ * const { records } = useSessionStreamChannel<typeof screenshotsChannel>("screenshots", {
22
+ * sessionId,
23
+ * accessToken,
24
+ * io: "out",
25
+ * from: "latest",
26
+ * maxRecords: 1,
27
+ * });
28
+ * ```
29
+ */
30
+ export function useSessionStreamChannel(channel, options) {
31
+ const hookId = useId();
32
+ const idKey = options.id ?? hookId;
33
+ const io = (options.io ?? "out");
34
+ const sessionId = options.sessionId;
35
+ const channelName = channel;
36
+ const [initialRecordsFallback] = useState([]);
37
+ const { data: records, mutate: mutateRecords } = useSWR([idKey, sessionId, channelName, io, "records"], null, { fallbackData: initialRecordsFallback });
38
+ const recordsRef = useRef(records ?? []);
39
+ useEffect(() => {
40
+ recordsRef.current = records || [];
41
+ }, [records]);
42
+ const { data: lastEventId = undefined, mutate: setLastEventId } = useSWR([idKey, sessionId, channelName, io, "lastEventId"], null);
43
+ const lastEventIdRef = useRef(lastEventId);
44
+ const channelIdentityRef = useRef(`${idKey}:${sessionId}:${channelName}:${io}`);
45
+ useEffect(() => {
46
+ const identity = `${idKey}:${sessionId}:${channelName}:${io}`;
47
+ if (channelIdentityRef.current !== identity) {
48
+ channelIdentityRef.current = identity;
49
+ lastEventIdRef.current = lastEventId;
50
+ }
51
+ }, [idKey, sessionId, channelName, io, lastEventId]);
52
+ const { data: lastControl = undefined, mutate: setLastControl } = useSWR([idKey, sessionId, channelName, io, "lastControl"], null);
53
+ const { data: _isComplete = false, mutate: setIsComplete } = useSWR([idKey, sessionId, channelName, io, "complete"], null);
54
+ const { data: error = undefined, mutate: setError } = useSWR([idKey, sessionId, channelName, io, "error"], null);
55
+ const abortControllerRef = useRef(null);
56
+ const stop = useCallback(() => {
57
+ if (abortControllerRef.current) {
58
+ abortControllerRef.current.abort();
59
+ abortControllerRef.current = null;
60
+ }
61
+ }, []);
62
+ const onRecordsCallback = options.onRecords;
63
+ const onRecords = useCallback((recordsBatch) => {
64
+ if (onRecordsCallback) {
65
+ onRecordsCallback(recordsBatch);
66
+ }
67
+ }, [onRecordsCallback]);
68
+ const onControlCallback = options.onControl;
69
+ const onControl = useCallback((event) => {
70
+ if (onControlCallback) {
71
+ onControlCallback(event);
72
+ }
73
+ }, [onControlCallback]);
74
+ const apiClient = useApiClient(options);
75
+ const timeoutInSeconds = options.timeoutInSeconds;
76
+ const startEventId = options.lastEventId;
77
+ const throttleInMs = options.throttleInMs;
78
+ const from = options.from;
79
+ const maxRecords = options.maxRecords;
80
+ useEffect(() => {
81
+ if (maxRecords != null && maxRecords >= 0) {
82
+ const current = recordsRef.current;
83
+ if (current.length > maxRecords) {
84
+ mutateRecords(current.slice(current.length - maxRecords));
85
+ }
86
+ }
87
+ }, [maxRecords, mutateRecords]);
88
+ const triggerRequest = useCallback(async () => {
89
+ let abortController = null;
90
+ try {
91
+ if (!sessionId || !apiClient) {
92
+ return;
93
+ }
94
+ abortController = new AbortController();
95
+ abortControllerRef.current = abortController;
96
+ await processSessionChannelStream(sessionId, io, channelName, apiClient, mutateRecords, recordsRef, setLastEventId, setLastControl, setError, onRecords, onControl, abortControllerRef, timeoutInSeconds, startEventId !== undefined ? String(startEventId) : lastEventIdRef.current, throttleInMs ?? 16, from, maxRecords);
97
+ }
98
+ catch (err) {
99
+ if (err.name === "AbortError") {
100
+ return;
101
+ }
102
+ setError(err);
103
+ }
104
+ finally {
105
+ if (abortControllerRef.current === abortController) {
106
+ abortControllerRef.current = null;
107
+ }
108
+ setIsComplete(true);
109
+ }
110
+ }, [
111
+ sessionId,
112
+ io,
113
+ channelName,
114
+ apiClient,
115
+ mutateRecords,
116
+ setLastEventId,
117
+ setLastControl,
118
+ setError,
119
+ setIsComplete,
120
+ onRecords,
121
+ onControl,
122
+ timeoutInSeconds,
123
+ startEventId,
124
+ throttleInMs,
125
+ from,
126
+ maxRecords,
127
+ ]);
128
+ const requestSubscription = useStableRequestCallback(triggerRequest);
129
+ useEffect(() => {
130
+ if (typeof options.enabled === "boolean" && !options.enabled) {
131
+ return;
132
+ }
133
+ if (!sessionId) {
134
+ return;
135
+ }
136
+ requestSubscription().finally(() => { });
137
+ return () => {
138
+ stop();
139
+ };
140
+ }, [sessionId, channelName, io, stop, options.enabled, requestSubscription]);
141
+ return { records: records ?? initialRecordsFallback, lastEventId, lastControl, error, stop };
142
+ }
143
+ async function processSessionChannelStream(sessionIdOrExternalId, io, channel, apiClient, mutateRecordsData, existingRecordsRef, setLastEventId, setLastControl, onError, onRecords, onControl, abortControllerRef, timeoutInSeconds, lastEventId, throttleInMs, from, maxRecords) {
144
+ let lastSeenEventId;
145
+ let publishedEventId;
146
+ let partsBatch = [];
147
+ const publishLastEventId = () => {
148
+ if (lastSeenEventId !== publishedEventId) {
149
+ publishedEventId = lastSeenEventId;
150
+ setLastEventId(lastSeenEventId);
151
+ }
152
+ };
153
+ const flushParts = () => {
154
+ if (partsBatch.length === 0)
155
+ return;
156
+ const batch = partsBatch;
157
+ partsBatch = [];
158
+ onRecords(batch);
159
+ };
160
+ try {
161
+ const stream = await apiClient.subscribeToSessionStream(sessionIdOrExternalId, io, {
162
+ signal: abortControllerRef.current?.signal,
163
+ channel,
164
+ timeoutInSeconds,
165
+ lastEventId,
166
+ from,
167
+ onPart: (part) => {
168
+ lastSeenEventId = part.id;
169
+ partsBatch.push(part);
170
+ },
171
+ onControl: (event) => {
172
+ setLastControl(event);
173
+ onControl(event);
174
+ },
175
+ });
176
+ const recordsQueue = createThrottledQueue(async (newRecords) => {
177
+ const combined = [...existingRecordsRef.current, ...newRecords];
178
+ const bounded = maxRecords != null && maxRecords >= 0 && combined.length > maxRecords
179
+ ? combined.slice(combined.length - maxRecords)
180
+ : combined;
181
+ existingRecordsRef.current = bounded;
182
+ mutateRecordsData(bounded);
183
+ publishLastEventId();
184
+ flushParts();
185
+ }, throttleInMs);
186
+ for await (const record of stream) {
187
+ recordsQueue.add(record);
188
+ }
189
+ await recordsQueue.flush();
190
+ publishLastEventId();
191
+ flushParts();
192
+ }
193
+ catch (err) {
194
+ if (err.name === "AbortError") {
195
+ return;
196
+ }
197
+ if (err instanceof Error) {
198
+ onError(err);
199
+ }
200
+ else {
201
+ onError(new Error(String(err)));
202
+ }
203
+ throw err;
204
+ }
205
+ }
206
+ //# sourceMappingURL=useSessionStreamChannel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionStreamChannel.js","sourceRoot":"","sources":["../../../src/hooks/useSessionStreamChannel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { type InferRunTypes, type RunHandleFromTypes, type AnyTask, type TaskIdentifier, type TaskPayload, type TriggerOptions, type RealtimeRunSkipColumns } from "@trigger.dev/core/v3";
2
+ import { type UseApiClientOptions } from "./useApiClient.js";
3
+ import { type UseRealtimeRunInstance, type UseRealtimeRunWithStreamsInstance } from "./useRealtime.js";
4
+ /**
5
+ * Base interface for task trigger instances.
6
+ *
7
+ * @template TTask - The type of the task
8
+ */
9
+ export interface TriggerInstance<TTask extends AnyTask> {
10
+ /** Function to submit the task with a payload */
11
+ submit: (payload: TaskPayload<TTask>, options?: TriggerOptions) => void;
12
+ /** Whether the task is currently being submitted */
13
+ isLoading: boolean;
14
+ /** The handle returned after successful task submission */
15
+ handle?: RunHandleFromTypes<InferRunTypes<TTask>>;
16
+ /** Any error that occurred during submission */
17
+ error?: Error;
18
+ }
19
+ export type UseTaskTriggerOptions = UseApiClientOptions;
20
+ /**
21
+ * Hook to trigger a task and manage its initial execution state.
22
+ *
23
+ * @template TTask - The type of the task
24
+ * @param {TaskIdentifier<TTask>} id - The identifier of the task to trigger
25
+ * @param {UseTaskTriggerOptions} [options] - Configuration options for the task trigger
26
+ * @returns {TriggerInstance<TTask>} An object containing the submit function, loading state, handle, and any errors
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import type { myTask } from './path/to/task';
31
+ * const { submit, isLoading, handle, error } = useTaskTrigger<typeof myTask>('my-task-id');
32
+ *
33
+ * // Submit the task with payload
34
+ * submit({ foo: 'bar' });
35
+ * ```
36
+ */
37
+ export declare function useTaskTrigger<TTask extends AnyTask>(id: TaskIdentifier<TTask>, options?: UseTaskTriggerOptions): TriggerInstance<TTask>;
38
+ /**
39
+ * Configuration options for task triggers with realtime updates.
40
+ */
41
+ export type UseRealtimeTaskTriggerOptions = UseTaskTriggerOptions & {
42
+ /** Whether the realtime subscription is enabled */
43
+ enabled?: boolean;
44
+ /** Optional throttle time in milliseconds for stream updates */
45
+ experimental_throttleInMs?: number;
46
+ /**
47
+ * Skip columns from the subscription.
48
+ *
49
+ * @default []
50
+ */
51
+ skipColumns?: RealtimeRunSkipColumns;
52
+ };
53
+ export type RealtimeTriggerInstanceWithStreams<TTask extends AnyTask, TStreams extends Record<string, any> = Record<string, any>> = UseRealtimeRunWithStreamsInstance<TTask, TStreams> & {
54
+ submit: (payload: TaskPayload<TTask>, options?: TriggerOptions) => void;
55
+ isLoading: boolean;
56
+ handle?: RunHandleFromTypes<InferRunTypes<TTask>>;
57
+ };
58
+ /**
59
+ * Hook to trigger a task and subscribe to its realtime updates including stream data.
60
+ *
61
+ * @template TTask - The type of the task
62
+ * @template TStreams - The type of the streams data
63
+ * @param {TaskIdentifier<TTask>} id - The identifier of the task to trigger
64
+ * @param {UseRealtimeTaskTriggerOptions} [options] - Configuration options for the task trigger and realtime updates
65
+ * @returns {RealtimeTriggerInstanceWithStreams<TTask, TStreams>} An object containing the submit function, loading state,
66
+ * handle, run state, streams data, and error handling
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * import type { myTask } from './path/to/task';
71
+ * const { submit, run, streams, error } = useRealtimeTaskTriggerWithStreams<
72
+ * typeof myTask,
73
+ * { output: string }
74
+ * >('my-task-id');
75
+ *
76
+ * // Submit and monitor the task with streams
77
+ * submit({ foo: 'bar' });
78
+ * ```
79
+ */
80
+ export declare function useRealtimeTaskTriggerWithStreams<TTask extends AnyTask, TStreams extends Record<string, any> = Record<string, any>>(id: TaskIdentifier<TTask>, options?: UseRealtimeTaskTriggerOptions): RealtimeTriggerInstanceWithStreams<TTask, TStreams>;
81
+ export type RealtimeTriggerInstance<TTask extends AnyTask> = UseRealtimeRunInstance<TTask> & {
82
+ submit: (payload: TaskPayload<TTask>, options?: TriggerOptions) => void;
83
+ isLoading: boolean;
84
+ handle?: RunHandleFromTypes<InferRunTypes<TTask>>;
85
+ };
86
+ /**
87
+ * Hook to trigger a task and subscribe to its realtime updates.
88
+ *
89
+ * @template TTask - The type of the task
90
+ * @param {TaskIdentifier<TTask>} id - The identifier of the task to trigger
91
+ * @param {UseRealtimeTaskTriggerOptions} [options] - Configuration options for the task trigger and realtime updates
92
+ * @returns {RealtimeTriggerInstance<TTask>} An object containing the submit function, loading state,
93
+ * handle, run state, and error handling
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * import type { myTask } from './path/to/task';
98
+ * const { submit, run, error, stop } = useRealtimeTaskTrigger<typeof myTask>('my-task-id');
99
+ *
100
+ * // Submit and monitor the task
101
+ * submit({ foo: 'bar' });
102
+ *
103
+ * // Stop monitoring when needed
104
+ * stop();
105
+ * ```
106
+ */
107
+ export declare function useRealtimeTaskTrigger<TTask extends AnyTask>(id: TaskIdentifier<TTask>, options?: UseRealtimeTaskTriggerOptions): RealtimeTriggerInstance<TTask>;
@@ -0,0 +1,131 @@
1
+ "use client";
2
+ import { makeIdempotencyKey, stringifyIO, } from "@trigger.dev/core/v3";
3
+ import useSWRMutation from "swr/mutation";
4
+ import { useApiClient } from "./useApiClient.js";
5
+ import { useRealtimeRun, useRealtimeRunWithStreams, } from "./useRealtime.js";
6
+ /**
7
+ * Hook to trigger a task and manage its initial execution state.
8
+ *
9
+ * @template TTask - The type of the task
10
+ * @param {TaskIdentifier<TTask>} id - The identifier of the task to trigger
11
+ * @param {UseTaskTriggerOptions} [options] - Configuration options for the task trigger
12
+ * @returns {TriggerInstance<TTask>} An object containing the submit function, loading state, handle, and any errors
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import type { myTask } from './path/to/task';
17
+ * const { submit, isLoading, handle, error } = useTaskTrigger<typeof myTask>('my-task-id');
18
+ *
19
+ * // Submit the task with payload
20
+ * submit({ foo: 'bar' });
21
+ * ```
22
+ */
23
+ export function useTaskTrigger(id, options) {
24
+ const apiClient = useApiClient(options);
25
+ async function triggerTask(id, { arg: { payload, options }, }) {
26
+ if (!apiClient) {
27
+ throw new Error("Could not trigger task in useTaskTrigger: Missing access token");
28
+ }
29
+ const payloadPacket = await stringifyIO(payload);
30
+ const handle = await apiClient.triggerTask(id, {
31
+ payload: payloadPacket.data,
32
+ options: {
33
+ queue: options?.queue ? { name: options.queue } : undefined,
34
+ concurrencyKey: options?.concurrencyKey,
35
+ payloadType: payloadPacket.dataType,
36
+ idempotencyKey: await makeIdempotencyKey(options?.idempotencyKey),
37
+ delay: options?.delay,
38
+ ttl: options?.ttl,
39
+ tags: options?.tags,
40
+ maxAttempts: options?.maxAttempts,
41
+ metadata: options?.metadata,
42
+ maxDuration: options?.maxDuration,
43
+ lockToVersion: options?.version,
44
+ debounce: options?.debounce,
45
+ },
46
+ });
47
+ return { ...handle, taskIdentifier: id };
48
+ }
49
+ const mutation = useSWRMutation(id, triggerTask);
50
+ return {
51
+ submit: (payload, options) => {
52
+ // trigger the task with the given payload
53
+ mutation.trigger({ payload, options });
54
+ },
55
+ isLoading: mutation.isMutating,
56
+ handle: mutation.data,
57
+ error: mutation.error,
58
+ };
59
+ }
60
+ /**
61
+ * Hook to trigger a task and subscribe to its realtime updates including stream data.
62
+ *
63
+ * @template TTask - The type of the task
64
+ * @template TStreams - The type of the streams data
65
+ * @param {TaskIdentifier<TTask>} id - The identifier of the task to trigger
66
+ * @param {UseRealtimeTaskTriggerOptions} [options] - Configuration options for the task trigger and realtime updates
67
+ * @returns {RealtimeTriggerInstanceWithStreams<TTask, TStreams>} An object containing the submit function, loading state,
68
+ * handle, run state, streams data, and error handling
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * import type { myTask } from './path/to/task';
73
+ * const { submit, run, streams, error } = useRealtimeTaskTriggerWithStreams<
74
+ * typeof myTask,
75
+ * { output: string }
76
+ * >('my-task-id');
77
+ *
78
+ * // Submit and monitor the task with streams
79
+ * submit({ foo: 'bar' });
80
+ * ```
81
+ */
82
+ export function useRealtimeTaskTriggerWithStreams(id, options) {
83
+ const triggerInstance = useTaskTrigger(id, options);
84
+ const realtimeInstance = useRealtimeRunWithStreams(triggerInstance.handle?.id, {
85
+ ...options,
86
+ id: triggerInstance.handle?.id,
87
+ accessToken: triggerInstance.handle?.publicAccessToken ?? options?.accessToken,
88
+ });
89
+ return {
90
+ ...realtimeInstance,
91
+ ...triggerInstance,
92
+ };
93
+ }
94
+ /**
95
+ * Hook to trigger a task and subscribe to its realtime updates.
96
+ *
97
+ * @template TTask - The type of the task
98
+ * @param {TaskIdentifier<TTask>} id - The identifier of the task to trigger
99
+ * @param {UseRealtimeTaskTriggerOptions} [options] - Configuration options for the task trigger and realtime updates
100
+ * @returns {RealtimeTriggerInstance<TTask>} An object containing the submit function, loading state,
101
+ * handle, run state, and error handling
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * import type { myTask } from './path/to/task';
106
+ * const { submit, run, error, stop } = useRealtimeTaskTrigger<typeof myTask>('my-task-id');
107
+ *
108
+ * // Submit and monitor the task
109
+ * submit({ foo: 'bar' });
110
+ *
111
+ * // Stop monitoring when needed
112
+ * stop();
113
+ * ```
114
+ */
115
+ export function useRealtimeTaskTrigger(id, options) {
116
+ const triggerInstance = useTaskTrigger(id, options);
117
+ const realtimeInstance = useRealtimeRun(triggerInstance.handle?.id, {
118
+ ...options,
119
+ id: triggerInstance.handle?.id,
120
+ accessToken: triggerInstance.handle?.publicAccessToken ?? options?.accessToken,
121
+ });
122
+ return {
123
+ submit: triggerInstance.submit,
124
+ isLoading: triggerInstance.isLoading,
125
+ handle: triggerInstance.handle,
126
+ run: realtimeInstance.run,
127
+ error: realtimeInstance.error ?? triggerInstance.error,
128
+ stop: realtimeInstance.stop,
129
+ };
130
+ }
131
+ //# sourceMappingURL=useTaskTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTaskTrigger.js","sourceRoot":"","sources":["../../../src/hooks/useTaskTrigger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { UseApiClientOptions } from "./useApiClient.js";
2
+ /**
3
+ * Base interface for task trigger instances.
4
+ *
5
+ * @template TOutput - The type of the output
6
+ */
7
+ export interface WaitTokenInstance<TOutput> {
8
+ /** Function to complete the waitpoint with an output */
9
+ complete: (output: TOutput) => void;
10
+ /** Whether the waitpoint is currently being completed */
11
+ isLoading: boolean;
12
+ /** Whether the waitpoint has been completed */
13
+ isCompleted: boolean;
14
+ /** Any error that occurred during completion */
15
+ error?: Error;
16
+ /** Whether the waitpoint is ready to be completed */
17
+ isReady: boolean;
18
+ }
19
+ /**
20
+ * Hook to complete a waitpoint and manage its completion state.
21
+ *
22
+ * @template TOutput - The type of the output
23
+ * @param {string} waitpointId - The identifier of the waitpoint to complete
24
+ * @returns {WaitTokenInstance<TOutput>} An object containing the complete function, loading state, isCompleted, and any errors
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import type { myTask } from './path/to/task';
29
+ * const { complete, isLoading, isCompleted, error } = useWaitToken('waitpoint-id');
30
+ *
31
+ * // Complete the waitpoint with an output
32
+ * complete({ foo: 'bar' });
33
+ * ```
34
+ */
35
+ export declare function useWaitToken<TOutput>(waitpointId?: string, options?: UseApiClientOptions): WaitTokenInstance<TOutput>;
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import useSWRMutation from "swr/mutation";
3
+ import { useApiClient } from "./useApiClient.js";
4
+ /**
5
+ * Hook to complete a waitpoint and manage its completion state.
6
+ *
7
+ * @template TOutput - The type of the output
8
+ * @param {string} waitpointId - The identifier of the waitpoint to complete
9
+ * @returns {WaitTokenInstance<TOutput>} An object containing the complete function, loading state, isCompleted, and any errors
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import type { myTask } from './path/to/task';
14
+ * const { complete, isLoading, isCompleted, error } = useWaitToken('waitpoint-id');
15
+ *
16
+ * // Complete the waitpoint with an output
17
+ * complete({ foo: 'bar' });
18
+ * ```
19
+ */
20
+ export function useWaitToken(waitpointId, options) {
21
+ const apiClient = useApiClient(options);
22
+ async function completeWaitpoint(id, { arg: { output } }) {
23
+ if (!apiClient) {
24
+ throw new Error("Could not complete waitpoint in useWaitToken: Missing access token");
25
+ }
26
+ if (!waitpointId) {
27
+ throw new Error("Could not complete waitpoint in useWaitToken: Missing waitpoint ID");
28
+ }
29
+ const result = await apiClient.completeWaitpointToken(waitpointId, {
30
+ data: output,
31
+ });
32
+ return result;
33
+ }
34
+ const mutation = useSWRMutation(waitpointId, completeWaitpoint);
35
+ return {
36
+ complete: (output) => {
37
+ // trigger the task with the given payload
38
+ mutation.trigger({ output });
39
+ },
40
+ isLoading: mutation.isMutating,
41
+ isCompleted: !!mutation.data?.success,
42
+ isReady: !!waitpointId,
43
+ error: mutation.error,
44
+ };
45
+ }
46
+ //# sourceMappingURL=useWaitToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWaitToken.js","sourceRoot":"","sources":["../../../src/hooks/useWaitToken.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,cAAc,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAoBjD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAC1B,WAAoB,EACpB,OAA6B;IAE7B,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAExC,KAAK,UAAU,iBAAiB,CAAC,EAAU,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAgC;QAC5F,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,sBAAsB,CAAC,WAAW,EAAE;YACjE,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAEhE,OAAO;QACL,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YACnB,0CAA0C;YAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,SAAS,EAAE,QAAQ,CAAC,UAAU;QAC9B,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO;QACrC,OAAO,EAAE,CAAC,CAAC,WAAW;QACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from "./contexts.js";
2
+ export * from "./hooks/useApiClient.js";
3
+ export * from "./hooks/useRun.js";
4
+ export * from "./hooks/useRealtime.js";
5
+ export * from "./hooks/useTaskTrigger.js";
6
+ export * from "./hooks/useWaitToken.js";
7
+ export * from "./hooks/useInputStreamSend.js";
8
+ export * from "./hooks/useSessionStream.js";
9
+ export * from "./hooks/useSessionStreamChannel.js";
@@ -0,0 +1,10 @@
1
+ export * from "./contexts.js";
2
+ export * from "./hooks/useApiClient.js";
3
+ export * from "./hooks/useRun.js";
4
+ export * from "./hooks/useRealtime.js";
5
+ export * from "./hooks/useTaskTrigger.js";
6
+ export * from "./hooks/useWaitToken.js";
7
+ export * from "./hooks/useInputStreamSend.js";
8
+ export * from "./hooks/useSessionStream.js";
9
+ export * from "./hooks/useSessionStreamChannel.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ type Options = {
3
+ assertCtxFn?: (v: unknown, msg: string) => void;
4
+ };
5
+ type ContextOf<T> = React.Context<T | undefined>;
6
+ type UseCtxFn<T> = () => T;
7
+ /**
8
+ * Creates and returns a Context and two hooks that return the context value.
9
+ * The Context type is derived from the type passed in by the user.
10
+ * The first hook returned guarantees that the context exists so the returned value is always CtxValue
11
+ * The second hook makes no guarantees, so the returned value can be CtxValue | undefined
12
+ */
13
+ export declare const createContextAndHook: <CtxVal>(displayName: string, options?: Options) => [ContextOf<CtxVal>, UseCtxFn<CtxVal>, UseCtxFn<CtxVal | Partial<CtxVal>>];
14
+ export {};
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import React from "react";
3
+ function assertContextExists(contextVal, msgOrCtx) {
4
+ if (!contextVal) {
5
+ throw typeof msgOrCtx === "string"
6
+ ? new Error(msgOrCtx)
7
+ : new Error(`${msgOrCtx.displayName} not found`);
8
+ }
9
+ }
10
+ /**
11
+ * Creates and returns a Context and two hooks that return the context value.
12
+ * The Context type is derived from the type passed in by the user.
13
+ * The first hook returned guarantees that the context exists so the returned value is always CtxValue
14
+ * The second hook makes no guarantees, so the returned value can be CtxValue | undefined
15
+ */
16
+ export const createContextAndHook = (displayName, options) => {
17
+ const { assertCtxFn = assertContextExists } = options || {};
18
+ const Ctx = React.createContext(undefined);
19
+ Ctx.displayName = displayName;
20
+ const useCtx = () => {
21
+ const ctx = React.useContext(Ctx);
22
+ assertCtxFn(ctx, `${displayName} not found`);
23
+ return ctx;
24
+ };
25
+ const useCtxWithoutGuarantee = () => {
26
+ const ctx = React.useContext(Ctx);
27
+ return ctx ? ctx : {};
28
+ };
29
+ return [Ctx, useCtx, useCtxWithoutGuarantee];
30
+ };
31
+ //# sourceMappingURL=createContextAndHook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createContextAndHook.js","sourceRoot":"","sources":["../../../src/utils/createContextAndHook.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,SAAS,mBAAmB,CAC1B,UAAmB,EACnB,QAAqC;IAErC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,OAAO,QAAQ,KAAK,QAAQ;YAChC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC;YACrB,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,WAAW,YAAY,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAMD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,WAAmB,EACnB,OAAiB,EAC0D,EAAE;IAC7E,MAAM,EAAE,WAAW,GAAG,mBAAmB,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAqB,SAAS,CAAC,CAAC;IAC/D,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IAE9B,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAClC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,YAAY,CAAC,CAAC;QAC7C,OAAO,GAAa,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;AAC/C,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type ThrottledQueue<T> = {
2
+ add: (item: T) => void;
3
+ flush: () => Promise<void>;
4
+ isEmpty: () => boolean;
5
+ };
6
+ export declare function createThrottledQueue<T>(onFlush: (items: T[]) => Promise<void>, throttleInMs?: number): ThrottledQueue<T>;