@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,38 @@
1
+ "use strict";
2
+ "use client";
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
+ const react_1 = __importDefault(require("react"));
9
+ function assertContextExists(contextVal, msgOrCtx) {
10
+ if (!contextVal) {
11
+ throw typeof msgOrCtx === "string"
12
+ ? new Error(msgOrCtx)
13
+ : new Error(`${msgOrCtx.displayName} not found`);
14
+ }
15
+ }
16
+ /**
17
+ * Creates and returns a Context and two hooks that return the context value.
18
+ * The Context type is derived from the type passed in by the user.
19
+ * The first hook returned guarantees that the context exists so the returned value is always CtxValue
20
+ * The second hook makes no guarantees, so the returned value can be CtxValue | undefined
21
+ */
22
+ const createContextAndHook = (displayName, options) => {
23
+ const { assertCtxFn = assertContextExists } = options || {};
24
+ const Ctx = react_1.default.createContext(undefined);
25
+ Ctx.displayName = displayName;
26
+ const useCtx = () => {
27
+ const ctx = react_1.default.useContext(Ctx);
28
+ assertCtxFn(ctx, `${displayName} not found`);
29
+ return ctx;
30
+ };
31
+ const useCtxWithoutGuarantee = () => {
32
+ const ctx = react_1.default.useContext(Ctx);
33
+ return ctx ? ctx : {};
34
+ };
35
+ return [Ctx, useCtx, useCtxWithoutGuarantee];
36
+ };
37
+ exports.createContextAndHook = createContextAndHook;
38
+ //# 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,kDAA0B;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;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,GAApB,oBAAoB,CAoB/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,8BACE,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 type { ApiRequestOptions } from "@trigger.dev/core/v3";
2
+ export * from "swr";
3
+ export { default as useSWR } 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,27 @@
1
+ "use strict";
2
+ "use client";
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.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
+ //# 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,2BAAwC;AAA/B,8GAAA,OAAO,OAAU"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Keep subscription lifecycles controlled by their effects while using the
3
+ * latest request inputs.
4
+ */
5
+ export declare function useStableRequestCallback(callback: () => Promise<void>): () => Promise<void>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useStableRequestCallback = useStableRequestCallback;
5
+ const react_1 = require("react");
6
+ /**
7
+ * Keep subscription lifecycles controlled by their effects while using the
8
+ * latest request inputs.
9
+ */
10
+ function useStableRequestCallback(callback) {
11
+ const callbackRef = (0, react_1.useRef)(callback);
12
+ (0, react_1.useEffect)(() => {
13
+ callbackRef.current = callback;
14
+ }, [callback]);
15
+ return (0, react_1.useCallback)(() => callbackRef.current(), []);
16
+ }
17
+ //# sourceMappingURL=useStableRequestCallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStableRequestCallback.js","sourceRoot":"","sources":["../../../src/utils/useStableRequestCallback.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AAEb,iCAAuD;AAEvD;;;GAGG;AACH,kCAAyC,QAA6B;IACpE,MAAM,WAAW,GAAG,IAAA,cAAM,EAAC,QAAQ,CAAC,CAAC;IAErC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC"}
@@ -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,47 @@
1
+ import type { ApiRequestOptions } from "@trigger.dev/core/v3";
2
+ import { ApiClient } from "@trigger.dev/core/v3";
3
+ /**
4
+ * Configuration options for creating an API client instance.
5
+ */
6
+ export type UseApiClientOptions = {
7
+ /** Optional access token for authentication */
8
+ accessToken?: string;
9
+ /** Optional base URL for the API endpoints */
10
+ baseURL?: string;
11
+ /** Optional preview branch name for preview environments */
12
+ previewBranch?: string;
13
+ /** Optional additional request configuration */
14
+ requestOptions?: ApiRequestOptions;
15
+ /**
16
+ * Optional callback that mints a fresh access token. Used to reconnect a
17
+ * realtime stream that the server rejected because its token expired.
18
+ */
19
+ refreshAccessToken?: () => Promise<string>;
20
+ /**
21
+ * Enable or disable the API client instance.
22
+ *
23
+ * Set enabled to false if you don't have an accessToken and don't want to throw an error.
24
+ */
25
+ enabled?: boolean;
26
+ };
27
+ /**
28
+ * Hook to create an API client instance using authentication context or provided options.
29
+ *
30
+ * @param {UseApiClientOptions} [options] - Configuration options for the API client
31
+ * @returns {ApiClient} An initialized API client instance
32
+ * @throws {Error} When no access token is available in either context or options
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * // Using context authentication
37
+ * const apiClient = useApiClient();
38
+ *
39
+ * // Using custom options
40
+ * const apiClient = useApiClient({
41
+ * accessToken: "your-access-token",
42
+ * baseURL: "https://api.my-trigger.com",
43
+ * requestOptions: { retry: { maxAttempts: 10 } }
44
+ * });
45
+ * ```
46
+ */
47
+ export declare function useApiClient(options?: UseApiClientOptions): ApiClient | undefined;
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { ApiClient, refreshAccessTokenOnce } from "@trigger.dev/core/v3";
3
+ import { useCallback, useEffect, useRef } from "react";
4
+ import { useTriggerAuthContextOptional } from "../contexts.js";
5
+ /**
6
+ * Hook to create an API client instance using authentication context or provided options.
7
+ *
8
+ * @param {UseApiClientOptions} [options] - Configuration options for the API client
9
+ * @returns {ApiClient} An initialized API client instance
10
+ * @throws {Error} When no access token is available in either context or options
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * // Using context authentication
15
+ * const apiClient = useApiClient();
16
+ *
17
+ * // Using custom options
18
+ * const apiClient = useApiClient({
19
+ * accessToken: "your-access-token",
20
+ * baseURL: "https://api.my-trigger.com",
21
+ * requestOptions: { retry: { maxAttempts: 10 } }
22
+ * });
23
+ * ```
24
+ */
25
+ export function useApiClient(options) {
26
+ const auth = useTriggerAuthContextOptional();
27
+ const baseUrl = options?.baseURL ?? auth?.baseURL ?? "https://api.trigger.dev";
28
+ const accessToken = options?.accessToken ?? auth?.accessToken;
29
+ const previewBranch = options?.previewBranch ?? auth?.previewBranch;
30
+ const refreshAccessToken = options?.refreshAccessToken ?? auth?.refreshAccessToken;
31
+ const refreshAccessTokenRef = useRef(refreshAccessToken);
32
+ useEffect(() => {
33
+ refreshAccessTokenRef.current = refreshAccessToken;
34
+ }, [refreshAccessToken]);
35
+ const stableRefreshAccessToken = useCallback(async () => {
36
+ const refresh = refreshAccessTokenRef.current;
37
+ if (!refresh) {
38
+ throw new Error("Missing refreshAccessToken in TriggerAuthContext or useApiClient options");
39
+ }
40
+ return refreshAccessTokenOnce(refresh);
41
+ }, []);
42
+ if (!accessToken) {
43
+ if (options?.enabled === false) {
44
+ return undefined;
45
+ }
46
+ throw new Error("Missing accessToken in TriggerAuthContext or useApiClient options");
47
+ }
48
+ const requestOptions = {
49
+ ...auth?.requestOptions,
50
+ ...options?.requestOptions,
51
+ };
52
+ return new ApiClient(baseUrl, accessToken, previewBranch, requestOptions, undefined, refreshAccessToken ? stableRefreshAccessToken : undefined);
53
+ }
54
+ //# sourceMappingURL=useApiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApiClient.js","sourceRoot":"","sources":["../../../src/hooks/useApiClient.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AA4B/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;IAC9D,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,aAAa,CAAC;IACpE,MAAM,kBAAkB,GAAG,OAAO,EAAE,kBAAkB,IAAI,IAAI,EAAE,kBAAkB,CAAC;IAEnF,MAAM,qBAAqB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACzD,SAAS,CAAC,GAAG,EAAE;QACb,qBAAqB,CAAC,OAAO,GAAG,kBAAkB,CAAC;IACrD,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACzB,MAAM,wBAAwB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACtD,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC;QAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,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,CAClB,OAAO,EACP,WAAW,EACX,aAAa,EACb,cAAc,EACd,SAAS,EACT,kBAAkB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS,CAC1D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { UseApiClientOptions } from "./useApiClient.js";
2
+ export interface InputStreamSendInstance<TData> {
3
+ /** Send data to the input stream */
4
+ send: (data: TData) => void;
5
+ /** Whether a send is currently in progress */
6
+ isLoading: boolean;
7
+ /** Any error that occurred during the last send */
8
+ error?: Error;
9
+ /** Whether the hook is ready to send (has runId and access token) */
10
+ isReady: boolean;
11
+ }
12
+ /**
13
+ * Hook to send data to an input stream on a running task.
14
+ *
15
+ * @template TData - The type of data to send
16
+ * @param streamId - The input stream identifier
17
+ * @param runId - The run to send input stream data to
18
+ * @param options - API client options (e.g. accessToken)
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * const { send, isLoading } = useInputStreamSend("my-stream", runId, { accessToken });
23
+ * send({ message: "hello" });
24
+ * ```
25
+ */
26
+ export declare function useInputStreamSend<TData>(streamId: string, runId?: string, options?: UseApiClientOptions): InputStreamSendInstance<TData>;
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import useSWRMutation from "swr/mutation";
3
+ import { useApiClient } from "./useApiClient.js";
4
+ /**
5
+ * Hook to send data to an input stream on a running task.
6
+ *
7
+ * @template TData - The type of data to send
8
+ * @param streamId - The input stream identifier
9
+ * @param runId - The run to send input stream data to
10
+ * @param options - API client options (e.g. accessToken)
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * const { send, isLoading } = useInputStreamSend("my-stream", runId, { accessToken });
15
+ * send({ message: "hello" });
16
+ * ```
17
+ */
18
+ export function useInputStreamSend(streamId, runId, options) {
19
+ const apiClient = useApiClient(options);
20
+ async function sendToStream(key, { arg }) {
21
+ if (!apiClient) {
22
+ throw new Error("Could not send to input stream: Missing access token");
23
+ }
24
+ if (!runId) {
25
+ throw new Error("Could not send to input stream: Missing run ID");
26
+ }
27
+ return await apiClient.sendInputStream(runId, streamId, arg.data);
28
+ }
29
+ const mutation = useSWRMutation(runId ? `input-stream:${runId}:${streamId}` : null, sendToStream);
30
+ return {
31
+ send: (data) => {
32
+ mutation.trigger({ data });
33
+ },
34
+ isLoading: mutation.isMutating,
35
+ isReady: !!runId && !!apiClient,
36
+ error: mutation.error,
37
+ };
38
+ }
39
+ //# sourceMappingURL=useInputStreamSend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputStreamSend.js","sourceRoot":"","sources":["../../../src/hooks/useInputStreamSend.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,cAAc,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAajD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,KAAc,EACd,OAA6B;IAE7B,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAExC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,EAAE,GAAG,EAA4B;QACxE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,MAAM,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,KAAK,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAElG,OAAO;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YACb,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,SAAS,EAAE,QAAQ,CAAC,UAAU;QAC9B,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC;AACJ,CAAC"}