@trigger.dev/react-hooks 0.0.0-deploy-fix-20250124173800

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 (59) 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 +39 -0
  7. package/dist/commonjs/hooks/useApiClient.js +43 -0
  8. package/dist/commonjs/hooks/useApiClient.js.map +1 -0
  9. package/dist/commonjs/hooks/useRealtime.d.ts +117 -0
  10. package/dist/commonjs/hooks/useRealtime.js +423 -0
  11. package/dist/commonjs/hooks/useRealtime.js.map +1 -0
  12. package/dist/commonjs/hooks/useRun.d.ts +22 -0
  13. package/dist/commonjs/hooks/useRun.js +40 -0
  14. package/dist/commonjs/hooks/useRun.js.map +1 -0
  15. package/dist/commonjs/hooks/useTaskTrigger.d.ts +101 -0
  16. package/dist/commonjs/hooks/useTaskTrigger.js +137 -0
  17. package/dist/commonjs/hooks/useTaskTrigger.js.map +1 -0
  18. package/dist/commonjs/index.d.ts +5 -0
  19. package/dist/commonjs/index.js +22 -0
  20. package/dist/commonjs/index.js.map +1 -0
  21. package/dist/commonjs/package.json +3 -0
  22. package/dist/commonjs/utils/createContextAndHook.d.ts +15 -0
  23. package/dist/commonjs/utils/createContextAndHook.js +39 -0
  24. package/dist/commonjs/utils/createContextAndHook.js.map +1 -0
  25. package/dist/commonjs/utils/throttle.d.ts +6 -0
  26. package/dist/commonjs/utils/throttle.js +50 -0
  27. package/dist/commonjs/utils/throttle.js.map +1 -0
  28. package/dist/commonjs/utils/trigger-swr.d.ts +19 -0
  29. package/dist/commonjs/utils/trigger-swr.js +28 -0
  30. package/dist/commonjs/utils/trigger-swr.js.map +1 -0
  31. package/dist/esm/contexts.d.ts +4 -0
  32. package/dist/esm/contexts.js +5 -0
  33. package/dist/esm/contexts.js.map +1 -0
  34. package/dist/esm/hooks/useApiClient.d.ts +39 -0
  35. package/dist/esm/hooks/useApiClient.js +40 -0
  36. package/dist/esm/hooks/useApiClient.js.map +1 -0
  37. package/dist/esm/hooks/useRealtime.d.ts +117 -0
  38. package/dist/esm/hooks/useRealtime.js +417 -0
  39. package/dist/esm/hooks/useRealtime.js.map +1 -0
  40. package/dist/esm/hooks/useRun.d.ts +22 -0
  41. package/dist/esm/hooks/useRun.js +37 -0
  42. package/dist/esm/hooks/useRun.js.map +1 -0
  43. package/dist/esm/hooks/useTaskTrigger.d.ts +101 -0
  44. package/dist/esm/hooks/useTaskTrigger.js +129 -0
  45. package/dist/esm/hooks/useTaskTrigger.js.map +1 -0
  46. package/dist/esm/index.d.ts +5 -0
  47. package/dist/esm/index.js +6 -0
  48. package/dist/esm/index.js.map +1 -0
  49. package/dist/esm/package.json +3 -0
  50. package/dist/esm/utils/createContextAndHook.d.ts +15 -0
  51. package/dist/esm/utils/createContextAndHook.js +31 -0
  52. package/dist/esm/utils/createContextAndHook.js.map +1 -0
  53. package/dist/esm/utils/throttle.d.ts +6 -0
  54. package/dist/esm/utils/throttle.js +47 -0
  55. package/dist/esm/utils/throttle.js.map +1 -0
  56. package/dist/esm/utils/trigger-swr.d.ts +19 -0
  57. package/dist/esm/utils/trigger-swr.js +6 -0
  58. package/dist/esm/utils/trigger-swr.js.map +1 -0
  59. package/package.json +77 -0
@@ -0,0 +1,137 @@
1
+ "use client";
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.useTaskTrigger = useTaskTrigger;
8
+ exports.useRealtimeTaskTriggerWithStreams = useRealtimeTaskTriggerWithStreams;
9
+ exports.useRealtimeTaskTrigger = useRealtimeTaskTrigger;
10
+ const v3_1 = require("@trigger.dev/core/v3");
11
+ const mutation_1 = __importDefault(require("swr/mutation"));
12
+ const useApiClient_js_1 = require("./useApiClient.js");
13
+ const useRealtime_js_1 = require("./useRealtime.js");
14
+ /**
15
+ * Hook to trigger a task and manage its initial execution state.
16
+ *
17
+ * @template TTask - The type of the task
18
+ * @param {TaskIdentifier<TTask>} id - The identifier of the task to trigger
19
+ * @param {UseTaskTriggerOptions} [options] - Configuration options for the task trigger
20
+ * @returns {TriggerInstance<TTask>} An object containing the submit function, loading state, handle, and any errors
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import type { myTask } from './path/to/task';
25
+ * const { submit, isLoading, handle, error } = useTaskTrigger<typeof myTask>('my-task-id');
26
+ *
27
+ * // Submit the task with payload
28
+ * submit({ foo: 'bar' });
29
+ * ```
30
+ */
31
+ function useTaskTrigger(id, options) {
32
+ const apiClient = (0, useApiClient_js_1.useApiClient)(options);
33
+ async function triggerTask(id, { arg: { payload, options }, }) {
34
+ if (!apiClient) {
35
+ throw new Error("Could not trigger task in useTaskTrigger: Missing access token");
36
+ }
37
+ const payloadPacket = await (0, v3_1.stringifyIO)(payload);
38
+ const handle = await apiClient.triggerTask(id, {
39
+ payload: payloadPacket.data,
40
+ options: {
41
+ queue: options?.queue,
42
+ concurrencyKey: options?.concurrencyKey,
43
+ payloadType: payloadPacket.dataType,
44
+ idempotencyKey: await (0, v3_1.makeIdempotencyKey)(options?.idempotencyKey),
45
+ delay: options?.delay,
46
+ ttl: options?.ttl,
47
+ tags: options?.tags,
48
+ maxAttempts: options?.maxAttempts,
49
+ metadata: options?.metadata,
50
+ maxDuration: options?.maxDuration,
51
+ },
52
+ });
53
+ return { ...handle, taskIdentifier: id };
54
+ }
55
+ const mutation = (0, mutation_1.default)(id, triggerTask);
56
+ return {
57
+ submit: (payload, options) => {
58
+ // trigger the task with the given payload
59
+ mutation.trigger({ payload, options });
60
+ },
61
+ isLoading: mutation.isMutating,
62
+ handle: mutation.data,
63
+ error: mutation.error,
64
+ };
65
+ }
66
+ /**
67
+ * Hook to trigger a task and subscribe to its realtime updates including stream data.
68
+ *
69
+ * @template TTask - The type of the task
70
+ * @template TStreams - The type of the streams data
71
+ * @param {TaskIdentifier<TTask>} id - The identifier of the task to trigger
72
+ * @param {UseRealtimeTaskTriggerOptions} [options] - Configuration options for the task trigger and realtime updates
73
+ * @returns {RealtimeTriggerInstanceWithStreams<TTask, TStreams>} An object containing the submit function, loading state,
74
+ * handle, run state, streams data, and error handling
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * import type { myTask } from './path/to/task';
79
+ * const { submit, run, streams, error } = useRealtimeTaskTriggerWithStreams<
80
+ * typeof myTask,
81
+ * { output: string }
82
+ * >('my-task-id');
83
+ *
84
+ * // Submit and monitor the task with streams
85
+ * submit({ foo: 'bar' });
86
+ * ```
87
+ */
88
+ function useRealtimeTaskTriggerWithStreams(id, options) {
89
+ const triggerInstance = useTaskTrigger(id, options);
90
+ const realtimeInstance = (0, useRealtime_js_1.useRealtimeRunWithStreams)(triggerInstance.handle?.id, {
91
+ ...options,
92
+ id: triggerInstance.handle?.id,
93
+ accessToken: triggerInstance.handle?.publicAccessToken ?? options?.accessToken,
94
+ });
95
+ return {
96
+ ...realtimeInstance,
97
+ ...triggerInstance,
98
+ };
99
+ }
100
+ /**
101
+ * Hook to trigger a task and subscribe to its realtime updates.
102
+ *
103
+ * @template TTask - The type of the task
104
+ * @param {TaskIdentifier<TTask>} id - The identifier of the task to trigger
105
+ * @param {UseRealtimeTaskTriggerOptions} [options] - Configuration options for the task trigger and realtime updates
106
+ * @returns {RealtimeTriggerInstance<TTask>} An object containing the submit function, loading state,
107
+ * handle, run state, and error handling
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * import type { myTask } from './path/to/task';
112
+ * const { submit, run, error, stop } = useRealtimeTaskTrigger<typeof myTask>('my-task-id');
113
+ *
114
+ * // Submit and monitor the task
115
+ * submit({ foo: 'bar' });
116
+ *
117
+ * // Stop monitoring when needed
118
+ * stop();
119
+ * ```
120
+ */
121
+ function useRealtimeTaskTrigger(id, options) {
122
+ const triggerInstance = useTaskTrigger(id, options);
123
+ const realtimeInstance = (0, useRealtime_js_1.useRealtimeRun)(triggerInstance.handle?.id, {
124
+ ...options,
125
+ id: triggerInstance.handle?.id,
126
+ accessToken: triggerInstance.handle?.publicAccessToken ?? options?.accessToken,
127
+ });
128
+ return {
129
+ submit: triggerInstance.submit,
130
+ isLoading: triggerInstance.isLoading,
131
+ handle: triggerInstance.handle,
132
+ run: realtimeInstance.run,
133
+ error: realtimeInstance.error ?? triggerInstance.error,
134
+ stop: realtimeInstance.stop,
135
+ };
136
+ }
137
+ //# 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,5 @@
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";
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./contexts.js"), exports);
18
+ __exportStar(require("./hooks/useApiClient.js"), exports);
19
+ __exportStar(require("./hooks/useRun.js"), exports);
20
+ __exportStar(require("./hooks/useRealtime.js"), exports);
21
+ __exportStar(require("./hooks/useTaskTrigger.js"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,0DAAwC;AACxC,oDAAkC;AAClC,yDAAuC;AACvC,4DAA0C"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ export declare function assertContextExists(contextVal: unknown, msgOrCtx: string | React.Context<any>): asserts contextVal;
3
+ type Options = {
4
+ assertCtxFn?: (v: unknown, msg: string) => void;
5
+ };
6
+ type ContextOf<T> = React.Context<T | undefined>;
7
+ type UseCtxFn<T> = () => T;
8
+ /**
9
+ * Creates and returns a Context and two hooks that return the context value.
10
+ * The Context type is derived from the type passed in by the user.
11
+ * The first hook returned guarantees that the context exists so the returned value is always CtxValue
12
+ * The second hook makes no guarantees, so the returned value can be CtxValue | undefined
13
+ */
14
+ export declare const createContextAndHook: <CtxVal>(displayName: string, options?: Options) => [ContextOf<CtxVal>, UseCtxFn<CtxVal>, UseCtxFn<CtxVal | Partial<CtxVal>>];
15
+ export {};
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createContextAndHook = void 0;
8
+ exports.assertContextExists = assertContextExists;
9
+ const react_1 = __importDefault(require("react"));
10
+ function assertContextExists(contextVal, msgOrCtx) {
11
+ if (!contextVal) {
12
+ throw typeof msgOrCtx === "string"
13
+ ? new Error(msgOrCtx)
14
+ : new Error(`${msgOrCtx.displayName} not found`);
15
+ }
16
+ }
17
+ /**
18
+ * Creates and returns a Context and two hooks that return the context value.
19
+ * The Context type is derived from the type passed in by the user.
20
+ * The first hook returned guarantees that the context exists so the returned value is always CtxValue
21
+ * The second hook makes no guarantees, so the returned value can be CtxValue | undefined
22
+ */
23
+ const createContextAndHook = (displayName, options) => {
24
+ const { assertCtxFn = assertContextExists } = options || {};
25
+ const Ctx = react_1.default.createContext(undefined);
26
+ Ctx.displayName = displayName;
27
+ const useCtx = () => {
28
+ const ctx = react_1.default.useContext(Ctx);
29
+ assertCtxFn(ctx, `${displayName} not found`);
30
+ return ctx;
31
+ };
32
+ const useCtxWithoutGuarantee = () => {
33
+ const ctx = react_1.default.useContext(Ctx);
34
+ return ctx ? ctx : {};
35
+ };
36
+ return [Ctx, useCtx, useCtxWithoutGuarantee];
37
+ };
38
+ exports.createContextAndHook = createContextAndHook;
39
+ //# sourceMappingURL=createContextAndHook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createContextAndHook.js","sourceRoot":"","sources":["../../../src/utils/createContextAndHook.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;AAGb,kDASC;AAXD,kDAA0B;AAE1B,SAAgB,mBAAmB,CACjC,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;AACI,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,eAAK,CAAC,aAAa,CAAqB,SAAS,CAAC,CAAC;IAC/D,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IAE9B,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,GAAG,GAAG,eAAK,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,eAAK,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;AApBW,QAAA,oBAAoB,wBAoB/B"}
@@ -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>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createThrottledQueue = createThrottledQueue;
4
+ function createThrottledQueue(onFlush, throttleInMs) {
5
+ let queue = [];
6
+ let lastFlushTime = 0;
7
+ let flushPromise = null;
8
+ const scheduleFlush = async () => {
9
+ // If no throttle specified or there's already a flush in progress, return
10
+ if (!throttleInMs) {
11
+ // Immediately flush when no throttling is specified
12
+ const itemsToFlush = [...queue];
13
+ queue = [];
14
+ await onFlush(itemsToFlush);
15
+ return;
16
+ }
17
+ if (queue.length === 0 || flushPromise)
18
+ return;
19
+ const now = Date.now();
20
+ const timeUntilNextFlush = Math.max(0, lastFlushTime + throttleInMs - now);
21
+ if (timeUntilNextFlush === 0) {
22
+ const itemsToFlush = [...queue];
23
+ queue = [];
24
+ lastFlushTime = now;
25
+ flushPromise = onFlush(itemsToFlush).finally(() => {
26
+ flushPromise = null;
27
+ // Check if more items accumulated during flush
28
+ scheduleFlush();
29
+ });
30
+ }
31
+ else {
32
+ setTimeout(scheduleFlush, timeUntilNextFlush);
33
+ }
34
+ };
35
+ return {
36
+ add: (item) => {
37
+ queue.push(item);
38
+ scheduleFlush();
39
+ },
40
+ flush: async () => {
41
+ if (queue.length === 0)
42
+ return;
43
+ const itemsToFlush = [...queue];
44
+ queue = [];
45
+ await onFlush(itemsToFlush);
46
+ },
47
+ isEmpty: () => queue.length === 0,
48
+ };
49
+ }
50
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/utils/throttle.ts"],"names":[],"mappings":";;AAOA,oDAkDC;AAlDD,SAAgB,oBAAoB,CAClC,OAAsC,EACtC,YAAqB;IAErB,IAAI,KAAK,GAAQ,EAAE,CAAC;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,YAAY,GAAyB,IAAI,CAAC;IAE9C,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,0EAA0E;QAC1E,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,oDAAoD;YACpD,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAChC,KAAK,GAAG,EAAE,CAAC;YACX,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY;YAAE,OAAO;QAE/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC;QAE3E,IAAI,kBAAkB,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAChC,KAAK,GAAG,EAAE,CAAC;YACX,aAAa,GAAG,GAAG,CAAC;YACpB,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBAChD,YAAY,GAAG,IAAI,CAAC;gBACpB,+CAA+C;gBAC/C,aAAa,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,CAAC,IAAO,EAAE,EAAE;YACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,aAAa,EAAE,CAAC;QAClB,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC/B,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAChC,KAAK,GAAG,EAAE,CAAC;YACX,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;KAClC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { ApiRequestOptions } from "@trigger.dev/core/v3";
2
+ export * from "swr";
3
+ export { default as useSWR, SWRConfig } from "swr";
4
+ export type CommonTriggerHookOptions = {
5
+ /**
6
+ * Poll for updates at the specified interval (in milliseconds). Polling is not recommended for most use-cases. Use the Realtime hooks instead.
7
+ */
8
+ refreshInterval?: number;
9
+ /** Revalidate the data when the browser regains a network connection. */
10
+ revalidateOnReconnect?: boolean;
11
+ /** Revalidate the data when the window regains focus. */
12
+ revalidateOnFocus?: boolean;
13
+ /** Optional access token for authentication */
14
+ accessToken?: string;
15
+ /** Optional base URL for the API endpoints */
16
+ baseURL?: string;
17
+ /** Optional additional request configuration */
18
+ requestOptions?: ApiRequestOptions;
19
+ };
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
+ };
17
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.SWRConfig = exports.useSWR = void 0;
22
+ // eslint-disable-next-line import/export
23
+ __exportStar(require("swr"), exports);
24
+ // eslint-disable-next-line import/export
25
+ var swr_1 = require("swr");
26
+ Object.defineProperty(exports, "useSWR", { enumerable: true, get: function () { return __importDefault(swr_1).default; } });
27
+ Object.defineProperty(exports, "SWRConfig", { enumerable: true, get: function () { return swr_1.SWRConfig; } });
28
+ //# sourceMappingURL=trigger-swr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-swr.js","sourceRoot":"","sources":["../../../src/utils/trigger-swr.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;AAIb,yCAAyC;AACzC,sCAAoB;AACpB,yCAAyC;AACzC,2BAAmD;AAA1C,8GAAA,OAAO,OAAU;AAAE,gGAAA,SAAS,OAAA"}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import type { ApiClientConfiguration } from "@trigger.dev/core/v3";
3
+ declare const TriggerAuthContext: React.Context<ApiClientConfiguration | undefined>, useTriggerAuthContext: () => ApiClientConfiguration, useTriggerAuthContextOptional: () => ApiClientConfiguration | Partial<ApiClientConfiguration>;
4
+ export { TriggerAuthContext, useTriggerAuthContext, useTriggerAuthContextOptional };
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ import { createContextAndHook } from "./utils/createContextAndHook.js";
3
+ const [TriggerAuthContext, useTriggerAuthContext, useTriggerAuthContextOptional] = createContextAndHook("TriggerAuthContext");
4
+ export { TriggerAuthContext, useTriggerAuthContext, useTriggerAuthContextOptional };
5
+ //# sourceMappingURL=contexts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contexts.js","sourceRoot":"","sources":["../../src/contexts.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGvE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,6BAA6B,CAAC,GAC9E,oBAAoB,CAAyB,oBAAoB,CAAC,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { ApiClient, ApiRequestOptions } from "@trigger.dev/core/v3";
2
+ /**
3
+ * Configuration options for creating an API client instance.
4
+ */
5
+ export type UseApiClientOptions = {
6
+ /** Optional access token for authentication */
7
+ accessToken?: string;
8
+ /** Optional base URL for the API endpoints */
9
+ baseURL?: string;
10
+ /** Optional additional request configuration */
11
+ requestOptions?: ApiRequestOptions;
12
+ /**
13
+ * Enable or disable the API client instance.
14
+ *
15
+ * Set enabled to false if you don't have an accessToken and don't want to throw an error.
16
+ */
17
+ enabled?: boolean;
18
+ };
19
+ /**
20
+ * Hook to create an API client instance using authentication context or provided options.
21
+ *
22
+ * @param {UseApiClientOptions} [options] - Configuration options for the API client
23
+ * @returns {ApiClient} An initialized API client instance
24
+ * @throws {Error} When no access token is available in either context or options
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * // Using context authentication
29
+ * const apiClient = useApiClient();
30
+ *
31
+ * // Using custom options
32
+ * const apiClient = useApiClient({
33
+ * accessToken: "your-access-token",
34
+ * baseURL: "https://api.my-trigger.com",
35
+ * requestOptions: { retry: { maxAttempts: 10 } }
36
+ * });
37
+ * ```
38
+ */
39
+ export declare function useApiClient(options?: UseApiClientOptions): ApiClient | undefined;
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { ApiClient } from "@trigger.dev/core/v3";
3
+ import { useTriggerAuthContextOptional } from "../contexts.js";
4
+ /**
5
+ * Hook to create an API client instance using authentication context or provided options.
6
+ *
7
+ * @param {UseApiClientOptions} [options] - Configuration options for the API client
8
+ * @returns {ApiClient} An initialized API client instance
9
+ * @throws {Error} When no access token is available in either context or options
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // Using context authentication
14
+ * const apiClient = useApiClient();
15
+ *
16
+ * // Using custom options
17
+ * const apiClient = useApiClient({
18
+ * accessToken: "your-access-token",
19
+ * baseURL: "https://api.my-trigger.com",
20
+ * requestOptions: { retry: { maxAttempts: 10 } }
21
+ * });
22
+ * ```
23
+ */
24
+ export function useApiClient(options) {
25
+ const auth = useTriggerAuthContextOptional();
26
+ const baseUrl = options?.baseURL ?? auth?.baseURL ?? "https://api.trigger.dev";
27
+ const accessToken = options?.accessToken ?? auth?.accessToken;
28
+ if (!accessToken) {
29
+ if (options?.enabled === false) {
30
+ return undefined;
31
+ }
32
+ throw new Error("Missing accessToken in TriggerAuthContext or useApiClient options");
33
+ }
34
+ const requestOptions = {
35
+ ...auth?.requestOptions,
36
+ ...options?.requestOptions,
37
+ };
38
+ return new ApiClient(baseUrl, accessToken, requestOptions);
39
+ }
40
+ //# sourceMappingURL=useApiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApiClient.js","sourceRoot":"","sources":["../../../src/hooks/useApiClient.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAqB,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAqB/D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,YAAY,CAAC,OAA6B;IACxD,MAAM,IAAI,GAAG,6BAA6B,EAAE,CAAC;IAE7C,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,IAAI,yBAAyB,CAAC;IAC/E,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,CAAC;IAE9D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,OAAO,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,cAAc,GAAsB;QACxC,GAAG,IAAI,EAAE,cAAc;QACvB,GAAG,OAAO,EAAE,cAAc;KAC3B,CAAC;IAEF,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,117 @@
1
+ import { AnyTask, RealtimeRun } from "@trigger.dev/core/v3";
2
+ import { UseApiClientOptions } from "./useApiClient.js";
3
+ export type UseRealtimeRunOptions = UseApiClientOptions & {
4
+ id?: string;
5
+ enabled?: boolean;
6
+ experimental_throttleInMs?: number;
7
+ };
8
+ export type UseRealtimeSingleRunOptions<TTask extends AnyTask = AnyTask> = UseRealtimeRunOptions & {
9
+ /**
10
+ * Callback this is called when the run completes, an error occurs, or the subscription is stopped.
11
+ *
12
+ * @param {RealtimeRun<TTask>} run - The run object
13
+ * @param {Error} [err] - The error that occurred
14
+ */
15
+ onComplete?: (run: RealtimeRun<TTask>, err?: Error) => void;
16
+ /**
17
+ * Whether to stop the subscription when the run completes
18
+ *
19
+ * @default true
20
+ *
21
+ * Set this to false if you are making updates to the run metadata after completion through child runs
22
+ */
23
+ stopOnCompletion?: boolean;
24
+ };
25
+ export type UseRealtimeRunInstance<TTask extends AnyTask = AnyTask> = {
26
+ run: RealtimeRun<TTask> | undefined;
27
+ error: Error | undefined;
28
+ /**
29
+ * Abort the current request immediately.
30
+ */
31
+ stop: () => void;
32
+ };
33
+ /**
34
+ * Hook to subscribe to realtime updates of a task run.
35
+ *
36
+ * @template TTask - The type of the task
37
+ * @param {string} [runId] - The unique identifier of the run to subscribe to
38
+ * @param {UseRealtimeSingleRunOptions} [options] - Configuration options for the subscription
39
+ * @returns {UseRealtimeRunInstance<TTask>} An object containing the current state of the run, error handling, and control methods
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import type { myTask } from './path/to/task';
44
+ * const { run, error } = useRealtimeRun<typeof myTask>('run-id-123');
45
+ * ```
46
+ */
47
+ export declare function useRealtimeRun<TTask extends AnyTask>(runId?: string, options?: UseRealtimeSingleRunOptions<TTask>): UseRealtimeRunInstance<TTask>;
48
+ export type StreamResults<TStreams extends Record<string, any>> = {
49
+ [K in keyof TStreams]: Array<TStreams[K]>;
50
+ };
51
+ export type UseRealtimeRunWithStreamsInstance<TTask extends AnyTask = AnyTask, TStreams extends Record<string, any> = Record<string, any>> = {
52
+ run: RealtimeRun<TTask> | undefined;
53
+ streams: StreamResults<TStreams>;
54
+ error: Error | undefined;
55
+ /**
56
+ * Abort the current request immediately, keep the generated tokens if any.
57
+ */
58
+ stop: () => void;
59
+ };
60
+ /**
61
+ * Hook to subscribe to realtime updates of a task run with associated data streams.
62
+ *
63
+ * @template TTask - The type of the task
64
+ * @template TStreams - The type of the streams data
65
+ * @param {string} [runId] - The unique identifier of the run to subscribe to
66
+ * @param {UseRealtimeRunOptions} [options] - Configuration options for the subscription
67
+ * @returns {UseRealtimeRunWithStreamsInstance<TTask, TStreams>} An object containing the current state of the run, streams data, and error handling
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * import type { myTask } from './path/to/task';
72
+ * const { run, streams, error } = useRealtimeRunWithStreams<typeof myTask, {
73
+ * output: string;
74
+ * }>('run-id-123');
75
+ * ```
76
+ */
77
+ export declare function useRealtimeRunWithStreams<TTask extends AnyTask = AnyTask, TStreams extends Record<string, any> = Record<string, any>>(runId?: string, options?: UseRealtimeSingleRunOptions<TTask>): UseRealtimeRunWithStreamsInstance<TTask, TStreams>;
78
+ export type UseRealtimeRunsInstance<TTask extends AnyTask = AnyTask> = {
79
+ runs: RealtimeRun<TTask>[];
80
+ error: Error | undefined;
81
+ /**
82
+ * Abort the current request immediately.
83
+ */
84
+ stop: () => void;
85
+ };
86
+ /**
87
+ * Hook to subscribe to realtime updates of task runs filtered by tag(s).
88
+ *
89
+ * @template TTask - The type of the task
90
+ * @param {string | string[]} tag - The tag or array of tags to filter runs by
91
+ * @param {UseRealtimeRunOptions} [options] - Configuration options for the subscription
92
+ * @returns {UseRealtimeRunsInstance<TTask>} An object containing the current state of the runs and any error encountered
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * import type { myTask } from './path/to/task';
97
+ * const { runs, error } = useRealtimeRunsWithTag<typeof myTask>('my-tag');
98
+ * // Or with multiple tags
99
+ * const { runs, error } = useRealtimeRunsWithTag<typeof myTask>(['tag1', 'tag2']);
100
+ * ```
101
+ */
102
+ export declare function useRealtimeRunsWithTag<TTask extends AnyTask>(tag: string | string[], options?: UseRealtimeRunOptions): UseRealtimeRunsInstance<TTask>;
103
+ /**
104
+ * Hook to subscribe to realtime updates of a batch of task runs.
105
+ *
106
+ * @template TTask - The type of the task
107
+ * @param {string} batchId - The unique identifier of the batch to subscribe to
108
+ * @param {UseRealtimeRunOptions} [options] - Configuration options for the subscription
109
+ * @returns {UseRealtimeRunsInstance<TTask>} An object containing the current state of the runs, error handling, and control methods
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * import type { myTask } from './path/to/task';
114
+ * const { runs, error } = useRealtimeBatch<typeof myTask>('batch-id-123');
115
+ * ```
116
+ */
117
+ export declare function useRealtimeBatch<TTask extends AnyTask>(batchId: string, options?: UseRealtimeRunOptions): UseRealtimeRunsInstance<TTask>;