@tambo-ai/react 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +9 -0
  2. package/dist/hooks/__tests__/use-suggestions.test.d.ts +1 -0
  3. package/dist/hooks/__tests__/use-suggestions.test.js +167 -0
  4. package/dist/hooks/__tests__/use-suggestions.test.js.map +1 -0
  5. package/dist/hooks/react-query-hooks.d.ts +21 -0
  6. package/dist/hooks/react-query-hooks.js +33 -0
  7. package/dist/hooks/react-query-hooks.js.map +1 -0
  8. package/dist/hooks/use-component-state.d.ts +8 -0
  9. package/dist/hooks/use-component-state.js +42 -0
  10. package/dist/hooks/use-component-state.js.map +1 -0
  11. package/dist/hooks/use-current-message.d.ts +18 -0
  12. package/dist/hooks/use-current-message.js +73 -0
  13. package/dist/hooks/use-current-message.js.map +1 -0
  14. package/dist/hooks/use-query-client.d.ts +0 -0
  15. package/dist/hooks/use-query-client.js +2 -0
  16. package/dist/hooks/use-query-client.js.map +1 -0
  17. package/dist/hooks/use-suggestions.d.ts +44 -0
  18. package/dist/hooks/use-suggestions.js +111 -0
  19. package/dist/hooks/use-suggestions.js.map +1 -0
  20. package/dist/hooks/use-tambo-threads.d.ts +137 -0
  21. package/dist/hooks/use-tambo-threads.js +33 -0
  22. package/dist/hooks/use-tambo-threads.js.map +1 -0
  23. package/dist/hooks/use-thread-input.d.ts +48 -0
  24. package/dist/hooks/use-thread-input.js +53 -0
  25. package/dist/hooks/use-thread-input.js.map +1 -0
  26. package/dist/index.d.ts +12 -0
  27. package/dist/index.js +34 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/model/component-metadata.d.ts +32 -0
  30. package/dist/model/component-metadata.js +3 -0
  31. package/dist/model/component-metadata.js.map +1 -0
  32. package/dist/model/generate-component-response.d.ts +17 -0
  33. package/dist/model/generate-component-response.js +22 -0
  34. package/dist/model/generate-component-response.js.map +1 -0
  35. package/dist/model/tambo-thread.d.ts +7 -0
  36. package/dist/model/tambo-thread.js +3 -0
  37. package/dist/model/tambo-thread.js.map +1 -0
  38. package/dist/model/thread-input-error.d.ts +3 -0
  39. package/dist/model/thread-input-error.js +8 -0
  40. package/dist/model/thread-input-error.js.map +1 -0
  41. package/dist/model/validate-input.d.ts +6 -0
  42. package/dist/model/validate-input.js +27 -0
  43. package/dist/model/validate-input.js.map +1 -0
  44. package/dist/providers/index.d.ts +5 -0
  45. package/dist/providers/index.js +21 -0
  46. package/dist/providers/index.js.map +1 -0
  47. package/dist/providers/tambo-client-provider.d.ts +15 -0
  48. package/dist/providers/tambo-client-provider.js +66 -0
  49. package/dist/providers/tambo-client-provider.js.map +1 -0
  50. package/dist/providers/tambo-component-provider.d.ts +18 -0
  51. package/dist/providers/tambo-component-provider.js +129 -0
  52. package/dist/providers/tambo-component-provider.js.map +1 -0
  53. package/dist/providers/tambo-provider.d.ts +10 -0
  54. package/dist/providers/tambo-provider.js +70 -0
  55. package/dist/providers/tambo-provider.js.map +1 -0
  56. package/dist/providers/tambo-registry-provider.d.ts +21 -0
  57. package/dist/providers/tambo-registry-provider.js +117 -0
  58. package/dist/providers/tambo-registry-provider.js.map +1 -0
  59. package/dist/providers/tambo-thread-provider.d.ts +28 -0
  60. package/dist/providers/tambo-thread-provider.js +417 -0
  61. package/dist/providers/tambo-thread-provider.js.map +1 -0
  62. package/dist/setupTests.d.ts +1 -0
  63. package/dist/setupTests.js +20 -0
  64. package/dist/setupTests.js.map +1 -0
  65. package/dist/util/generate-component.d.ts +8 -0
  66. package/dist/util/generate-component.js +209 -0
  67. package/dist/util/generate-component.js.map +1 -0
  68. package/dist/util/messages.d.ts +2 -0
  69. package/dist/util/messages.js +12 -0
  70. package/dist/util/messages.js.map +1 -0
  71. package/dist/util/query-utils.d.ts +5 -0
  72. package/dist/util/query-utils.js +63 -0
  73. package/dist/util/query-utils.js.map +1 -0
  74. package/dist/util/registry.d.ts +7 -0
  75. package/dist/util/registry.js +99 -0
  76. package/dist/util/registry.js.map +1 -0
  77. package/dist/util/tool-caller.d.ts +3 -0
  78. package/dist/util/tool-caller.js +30 -0
  79. package/dist/util/tool-caller.js.map +1 -0
  80. package/esm/hooks/__tests__/use-suggestions.test.d.ts +1 -0
  81. package/esm/hooks/__tests__/use-suggestions.test.js +165 -0
  82. package/esm/hooks/__tests__/use-suggestions.test.js.map +1 -0
  83. package/esm/hooks/react-query-hooks.d.ts +21 -0
  84. package/esm/hooks/react-query-hooks.js +28 -0
  85. package/esm/hooks/react-query-hooks.js.map +1 -0
  86. package/esm/hooks/use-component-state.d.ts +8 -0
  87. package/esm/hooks/use-component-state.js +39 -0
  88. package/esm/hooks/use-component-state.js.map +1 -0
  89. package/esm/hooks/use-current-message.d.ts +18 -0
  90. package/esm/hooks/use-current-message.js +33 -0
  91. package/esm/hooks/use-current-message.js.map +1 -0
  92. package/esm/hooks/use-query-client.d.ts +0 -0
  93. package/esm/hooks/use-query-client.js +2 -0
  94. package/esm/hooks/use-query-client.js.map +1 -0
  95. package/esm/hooks/use-suggestions.d.ts +44 -0
  96. package/esm/hooks/use-suggestions.js +108 -0
  97. package/esm/hooks/use-suggestions.js.map +1 -0
  98. package/esm/hooks/use-tambo-threads.d.ts +137 -0
  99. package/esm/hooks/use-tambo-threads.js +30 -0
  100. package/esm/hooks/use-tambo-threads.js.map +1 -0
  101. package/esm/hooks/use-thread-input.d.ts +48 -0
  102. package/esm/hooks/use-thread-input.js +49 -0
  103. package/esm/hooks/use-thread-input.js.map +1 -0
  104. package/esm/index.d.ts +12 -0
  105. package/esm/index.js +10 -0
  106. package/esm/index.js.map +1 -0
  107. package/esm/model/component-metadata.d.ts +32 -0
  108. package/esm/model/component-metadata.js +2 -0
  109. package/esm/model/component-metadata.js.map +1 -0
  110. package/esm/model/generate-component-response.d.ts +17 -0
  111. package/esm/model/generate-component-response.js +18 -0
  112. package/esm/model/generate-component-response.js.map +1 -0
  113. package/esm/model/tambo-thread.d.ts +7 -0
  114. package/esm/model/tambo-thread.js +2 -0
  115. package/esm/model/tambo-thread.js.map +1 -0
  116. package/esm/model/thread-input-error.d.ts +3 -0
  117. package/esm/model/thread-input-error.js +4 -0
  118. package/esm/model/thread-input-error.js.map +1 -0
  119. package/esm/model/validate-input.d.ts +6 -0
  120. package/esm/model/validate-input.js +24 -0
  121. package/esm/model/validate-input.js.map +1 -0
  122. package/esm/providers/index.d.ts +5 -0
  123. package/esm/providers/index.js +6 -0
  124. package/esm/providers/index.js.map +1 -0
  125. package/esm/providers/tambo-client-provider.d.ts +15 -0
  126. package/esm/providers/tambo-client-provider.js +24 -0
  127. package/esm/providers/tambo-client-provider.js.map +1 -0
  128. package/esm/providers/tambo-component-provider.d.ts +18 -0
  129. package/esm/providers/tambo-component-provider.js +91 -0
  130. package/esm/providers/tambo-component-provider.js.map +1 -0
  131. package/esm/providers/tambo-provider.d.ts +10 -0
  132. package/esm/providers/tambo-provider.js +32 -0
  133. package/esm/providers/tambo-provider.js.map +1 -0
  134. package/esm/providers/tambo-registry-provider.d.ts +21 -0
  135. package/esm/providers/tambo-registry-provider.js +79 -0
  136. package/esm/providers/tambo-registry-provider.js.map +1 -0
  137. package/esm/providers/tambo-thread-provider.d.ts +28 -0
  138. package/esm/providers/tambo-thread-provider.js +379 -0
  139. package/esm/providers/tambo-thread-provider.js.map +1 -0
  140. package/esm/setupTests.d.ts +1 -0
  141. package/esm/setupTests.js +18 -0
  142. package/esm/setupTests.js.map +1 -0
  143. package/esm/util/generate-component.d.ts +8 -0
  144. package/esm/util/generate-component.js +202 -0
  145. package/esm/util/generate-component.js.map +1 -0
  146. package/esm/util/messages.d.ts +2 -0
  147. package/esm/util/messages.js +9 -0
  148. package/esm/util/messages.js.map +1 -0
  149. package/esm/util/query-utils.d.ts +5 -0
  150. package/esm/util/query-utils.js +59 -0
  151. package/esm/util/query-utils.js.map +1 -0
  152. package/esm/util/registry.d.ts +7 -0
  153. package/esm/util/registry.js +88 -0
  154. package/esm/util/registry.js.map +1 -0
  155. package/esm/util/tool-caller.d.ts +3 -0
  156. package/esm/util/tool-caller.js +26 -0
  157. package/esm/util/tool-caller.js.map +1 -0
  158. package/package.json +84 -0
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Get the threads for the specified project and optional context key.
3
+ */
4
+ export declare function useTamboThreads({ projectId, contextKey, }?: {
5
+ projectId?: string;
6
+ contextKey?: string;
7
+ }): import("@tanstack/query-core").QueryObserverRefetchErrorResult<import("@tambo-ai/typescript-sdk/resources/beta/threads/threads").ThreadsOffsetAndLimit | null, Error> | import("@tanstack/query-core").QueryObserverSuccessResult<import("@tambo-ai/typescript-sdk/resources/beta/threads/threads").ThreadsOffsetAndLimit | null, Error> | import("@tanstack/query-core").QueryObserverLoadingErrorResult<import("@tambo-ai/typescript-sdk/resources/beta/threads/threads").ThreadsOffsetAndLimit | null, Error> | import("@tanstack/query-core").QueryObserverPendingResult<import("@tambo-ai/typescript-sdk/resources/beta/threads/threads").ThreadsOffsetAndLimit | null, Error> | import("@tanstack/query-core").QueryObserverPlaceholderResult<import("@tambo-ai/typescript-sdk/resources/beta/threads/threads").ThreadsOffsetAndLimit | null, Error> | {
8
+ error: Error;
9
+ isError: true;
10
+ isPending: false;
11
+ isLoading: false;
12
+ isLoadingError: false;
13
+ isRefetchError: true;
14
+ isSuccess: false;
15
+ isPlaceholderData: false;
16
+ status: "error";
17
+ dataUpdatedAt: number;
18
+ errorUpdatedAt: number;
19
+ failureCount: number;
20
+ failureReason: Error | null;
21
+ errorUpdateCount: number;
22
+ isFetched: boolean;
23
+ isFetchedAfterMount: boolean;
24
+ isFetching: boolean;
25
+ isInitialLoading: boolean;
26
+ isPaused: boolean;
27
+ isRefetching: boolean;
28
+ isStale: boolean;
29
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<string, Error>>;
30
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
31
+ promise: Promise<string>;
32
+ data: null;
33
+ } | {
34
+ error: null;
35
+ isError: false;
36
+ isPending: false;
37
+ isLoading: false;
38
+ isLoadingError: false;
39
+ isRefetchError: false;
40
+ isSuccess: true;
41
+ isPlaceholderData: false;
42
+ status: "success";
43
+ dataUpdatedAt: number;
44
+ errorUpdatedAt: number;
45
+ failureCount: number;
46
+ failureReason: Error | null;
47
+ errorUpdateCount: number;
48
+ isFetched: boolean;
49
+ isFetchedAfterMount: boolean;
50
+ isFetching: boolean;
51
+ isInitialLoading: boolean;
52
+ isPaused: boolean;
53
+ isRefetching: boolean;
54
+ isStale: boolean;
55
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<string, Error>>;
56
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
57
+ promise: Promise<string>;
58
+ data: null;
59
+ } | {
60
+ error: Error;
61
+ isError: true;
62
+ isPending: false;
63
+ isLoading: false;
64
+ isLoadingError: true;
65
+ isRefetchError: false;
66
+ isSuccess: false;
67
+ isPlaceholderData: false;
68
+ status: "error";
69
+ dataUpdatedAt: number;
70
+ errorUpdatedAt: number;
71
+ failureCount: number;
72
+ failureReason: Error | null;
73
+ errorUpdateCount: number;
74
+ isFetched: boolean;
75
+ isFetchedAfterMount: boolean;
76
+ isFetching: boolean;
77
+ isInitialLoading: boolean;
78
+ isPaused: boolean;
79
+ isRefetching: boolean;
80
+ isStale: boolean;
81
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<string, Error>>;
82
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
83
+ promise: Promise<string>;
84
+ data: null;
85
+ } | {
86
+ error: null;
87
+ isError: false;
88
+ isPending: true;
89
+ isLoadingError: false;
90
+ isRefetchError: false;
91
+ isSuccess: false;
92
+ isPlaceholderData: false;
93
+ status: "pending";
94
+ dataUpdatedAt: number;
95
+ errorUpdatedAt: number;
96
+ failureCount: number;
97
+ failureReason: Error | null;
98
+ errorUpdateCount: number;
99
+ isFetched: boolean;
100
+ isFetchedAfterMount: boolean;
101
+ isFetching: boolean;
102
+ isLoading: boolean;
103
+ isInitialLoading: boolean;
104
+ isPaused: boolean;
105
+ isRefetching: boolean;
106
+ isStale: boolean;
107
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<string, Error>>;
108
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
109
+ promise: Promise<string>;
110
+ data: null;
111
+ } | {
112
+ isError: false;
113
+ error: null;
114
+ isPending: false;
115
+ isLoading: false;
116
+ isLoadingError: false;
117
+ isRefetchError: false;
118
+ isSuccess: true;
119
+ isPlaceholderData: true;
120
+ status: "success";
121
+ dataUpdatedAt: number;
122
+ errorUpdatedAt: number;
123
+ failureCount: number;
124
+ failureReason: Error | null;
125
+ errorUpdateCount: number;
126
+ isFetched: boolean;
127
+ isFetchedAfterMount: boolean;
128
+ isFetching: boolean;
129
+ isInitialLoading: boolean;
130
+ isPaused: boolean;
131
+ isRefetching: boolean;
132
+ isStale: boolean;
133
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<string, Error>>;
134
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
135
+ promise: Promise<string>;
136
+ data: null;
137
+ };
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTamboThreads = useTamboThreads;
4
+ const tambo_client_provider_1 = require("../providers/tambo-client-provider");
5
+ const react_query_hooks_1 = require("./react-query-hooks");
6
+ /**
7
+ * Get the threads for the specified project and optional context key.
8
+ */
9
+ function useTamboThreads({ projectId, contextKey, } = {}) {
10
+ const client = (0, tambo_client_provider_1.useTamboClient)();
11
+ const { data: queriedProjectId, ...projectIdState } = (0, react_query_hooks_1.useTamboQuery)({
12
+ queryKey: ["projectId"],
13
+ queryFn: async () => {
14
+ return (await client.beta.projects.getCurrent()).id;
15
+ },
16
+ });
17
+ const currentProjectId = projectId ?? queriedProjectId;
18
+ const threadState = (0, react_query_hooks_1.useTamboQuery)({
19
+ enabled: !!currentProjectId,
20
+ queryKey: ["threads", currentProjectId, contextKey],
21
+ queryFn: async () => {
22
+ if (!currentProjectId) {
23
+ return null;
24
+ }
25
+ const threadIter = await client.beta.threads.list(currentProjectId, {
26
+ contextKey,
27
+ });
28
+ return threadIter;
29
+ },
30
+ });
31
+ return currentProjectId ? threadState : { data: null, ...projectIdState };
32
+ }
33
+ //# sourceMappingURL=use-tambo-threads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-threads.js","sourceRoot":"","sources":["../../src/hooks/use-tambo-threads.ts"],"names":[],"mappings":";;AAMA,0CA+BC;AArCD,8EAAoE;AACpE,2DAAoD;AAEpD;;GAEG;AACH,SAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,UAAU,MAIR,EAAE;IACJ,MAAM,MAAM,GAAG,IAAA,sCAAc,GAAE,CAAC;IAChC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE,GAAG,IAAA,iCAAa,EAAC;QAClE,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC;KACF,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,SAAS,IAAI,gBAAgB,CAAC;IAEvD,MAAM,WAAW,GAAG,IAAA,iCAAa,EAAC;QAChC,OAAO,EAAE,CAAC,CAAC,gBAAgB;QAC3B,QAAQ,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,CAAC;QACnD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAClE,UAAU;aACX,CAAC,CAAC;YACH,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,CAAC;AAC5E,CAAC","sourcesContent":["import { useTamboClient } from \"../providers/tambo-client-provider\";\nimport { useTamboQuery } from \"./react-query-hooks\";\n\n/**\n * Get the threads for the specified project and optional context key.\n */\nexport function useTamboThreads({\n projectId,\n contextKey,\n}: {\n projectId?: string;\n contextKey?: string;\n} = {}) {\n const client = useTamboClient();\n const { data: queriedProjectId, ...projectIdState } = useTamboQuery({\n queryKey: [\"projectId\"],\n queryFn: async () => {\n return (await client.beta.projects.getCurrent()).id;\n },\n });\n const currentProjectId = projectId ?? queriedProjectId;\n\n const threadState = useTamboQuery({\n enabled: !!currentProjectId,\n queryKey: [\"threads\", currentProjectId, contextKey],\n queryFn: async () => {\n if (!currentProjectId) {\n return null;\n }\n const threadIter = await client.beta.threads.list(currentProjectId, {\n contextKey,\n });\n return threadIter;\n },\n });\n\n return currentProjectId ? threadState : { data: null, ...projectIdState };\n}\n"]}
@@ -0,0 +1,48 @@
1
+ import { UseMutationResult } from "@tanstack/react-query";
2
+ /**
3
+ * Error messages for various input-related error scenarios
4
+ * These messages are used to provide user-friendly error feedback
5
+ * @readonly
6
+ */
7
+ export declare const INPUT_ERROR_MESSAGES: {
8
+ /** Error when attempting to submit empty input */
9
+ readonly EMPTY: "Message cannot be empty";
10
+ /** Error when network connection fails */
11
+ readonly NETWORK: "Network error. Please check your connection";
12
+ /** Error when server fails to process the request */
13
+ readonly SERVER: "Server error. Please try again";
14
+ /** Error when input format is invalid */
15
+ readonly VALIDATION: "Invalid message format";
16
+ };
17
+ /**
18
+ * Interface for the thread input hook return value
19
+ * Provides all necessary functions and state for managing thread input
20
+ */
21
+ interface UseThreadInputInternal {
22
+ /** Current value of the input field */
23
+ value: string;
24
+ /**
25
+ * Function to update the input value
26
+ * @param value - New value for the input field
27
+ */
28
+ setValue: (value: string) => void;
29
+ /**
30
+ * Function to submit the current input value
31
+ * Validates input, handles errors, and cleans up state after submission
32
+ * @throws {ThreadInputError} If submission fails
33
+ * @returns Promise that resolves when submission is complete
34
+ */
35
+ submit: (options?: {
36
+ contextKey?: string;
37
+ }) => Promise<void>;
38
+ }
39
+ export type UseThreadInput = UseThreadInputInternal & UseMutationResult<void, Error, {
40
+ contextKey?: string;
41
+ }>;
42
+ /**
43
+ * Hook for managing thread message input state and submission
44
+ *
45
+ * @returns Interface for managing thread input state and submission
46
+ */
47
+ export declare function useTamboThreadInput(contextKey?: string): UseThreadInput;
48
+ export {};
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INPUT_ERROR_MESSAGES = void 0;
4
+ exports.useTamboThreadInput = useTamboThreadInput;
5
+ const react_1 = require("react");
6
+ const thread_input_error_1 = require("../model/thread-input-error");
7
+ const validate_input_1 = require("../model/validate-input");
8
+ const tambo_thread_provider_1 = require("../providers/tambo-thread-provider");
9
+ const react_query_hooks_1 = require("./react-query-hooks");
10
+ /**
11
+ * Error messages for various input-related error scenarios
12
+ * These messages are used to provide user-friendly error feedback
13
+ * @readonly
14
+ */
15
+ exports.INPUT_ERROR_MESSAGES = {
16
+ /** Error when attempting to submit empty input */
17
+ EMPTY: "Message cannot be empty",
18
+ /** Error when network connection fails */
19
+ NETWORK: "Network error. Please check your connection",
20
+ /** Error when server fails to process the request */
21
+ SERVER: "Server error. Please try again",
22
+ /** Error when input format is invalid */
23
+ VALIDATION: "Invalid message format",
24
+ };
25
+ /**
26
+ * Hook for managing thread message input state and submission
27
+ *
28
+ * @returns Interface for managing thread input state and submission
29
+ */
30
+ function useTamboThreadInput(contextKey) {
31
+ const { thread, inputValue, setInputValue, sendThreadMessage } = (0, tambo_thread_provider_1.useTamboThread)();
32
+ const submit = (0, react_1.useCallback)(async ({ contextKey: submitContextKey } = {}) => {
33
+ const validation = (0, validate_input_1.validateInput)(inputValue);
34
+ if (!validation.isValid) {
35
+ throw new thread_input_error_1.ThreadInputError(`Cannot submit message: ${validation.error ?? exports.INPUT_ERROR_MESSAGES.VALIDATION}`, { cause: validation.error });
36
+ }
37
+ await sendThreadMessage(validation.sanitizedInput, {
38
+ threadId: thread.id,
39
+ contextKey: submitContextKey ?? contextKey ?? undefined,
40
+ });
41
+ setInputValue("");
42
+ }, [inputValue, sendThreadMessage, thread.id, contextKey, setInputValue]);
43
+ const { mutateAsync: submitAsync, mutate: _unusedSubmit, ...mutationState } = (0, react_query_hooks_1.useTamboMutation)({
44
+ mutationFn: submit,
45
+ });
46
+ return {
47
+ ...mutationState,
48
+ value: inputValue,
49
+ setValue: setInputValue,
50
+ submit: submitAsync,
51
+ };
52
+ }
53
+ //# sourceMappingURL=use-thread-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-thread-input.js","sourceRoot":"","sources":["../../src/hooks/use-thread-input.ts"],"names":[],"mappings":";;;AAmDA,kDAoCC;AAtFD,iCAAoC;AACpC,oEAA+D;AAC/D,4DAAwD;AACxD,8EAAoE;AACpE,2DAAuD;AAEvD;;;;GAIG;AACU,QAAA,oBAAoB,GAAG;IAClC,kDAAkD;IAClD,KAAK,EAAE,yBAAyB;IAChC,0CAA0C;IAC1C,OAAO,EAAE,6CAA6C;IACtD,qDAAqD;IACrD,MAAM,EAAE,gCAAgC;IACxC,yCAAyC;IACzC,UAAU,EAAE,wBAAwB;CAC5B,CAAC;AAyBX;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,UAAmB;IACrD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,GAC5D,IAAA,sCAAc,GAAE,CAAC;IAEnB,MAAM,MAAM,GAAG,IAAA,mBAAW,EACxB,KAAK,EAAE,EAAE,UAAU,EAAE,gBAAgB,KAA8B,EAAE,EAAE,EAAE;QACvE,MAAM,UAAU,GAAG,IAAA,8BAAa,EAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,qCAAgB,CACxB,0BAA0B,UAAU,CAAC,KAAK,IAAI,4BAAoB,CAAC,UAAU,EAAE,EAC/E,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAC5B,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,CAAC,UAAU,CAAC,cAAc,EAAE;YACjD,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,UAAU,EAAE,gBAAgB,IAAI,UAAU,IAAI,SAAS;SACxD,CAAC,CAAC;QACH,aAAa,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CACtE,CAAC;IACF,MAAM,EACJ,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,aAAa,EACrB,GAAG,aAAa,EACjB,GAAG,IAAA,oCAAgB,EAAC;QACnB,UAAU,EAAE,MAAM;KACnB,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,aAAa;QAChB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,WAAW;KACF,CAAC;AACtB,CAAC","sourcesContent":["import { UseMutationResult } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport { ThreadInputError } from \"../model/thread-input-error\";\nimport { validateInput } from \"../model/validate-input\";\nimport { useTamboThread } from \"../providers/tambo-thread-provider\";\nimport { useTamboMutation } from \"./react-query-hooks\";\n\n/**\n * Error messages for various input-related error scenarios\n * These messages are used to provide user-friendly error feedback\n * @readonly\n */\nexport const INPUT_ERROR_MESSAGES = {\n /** Error when attempting to submit empty input */\n EMPTY: \"Message cannot be empty\",\n /** Error when network connection fails */\n NETWORK: \"Network error. Please check your connection\",\n /** Error when server fails to process the request */\n SERVER: \"Server error. Please try again\",\n /** Error when input format is invalid */\n VALIDATION: \"Invalid message format\",\n} as const;\n\n/**\n * Interface for the thread input hook return value\n * Provides all necessary functions and state for managing thread input\n */\ninterface UseThreadInputInternal {\n /** Current value of the input field */\n value: string;\n /**\n * Function to update the input value\n * @param value - New value for the input field\n */\n setValue: (value: string) => void;\n /**\n * Function to submit the current input value\n * Validates input, handles errors, and cleans up state after submission\n * @throws {ThreadInputError} If submission fails\n * @returns Promise that resolves when submission is complete\n */\n submit: (options?: { contextKey?: string }) => Promise<void>;\n}\nexport type UseThreadInput = UseThreadInputInternal &\n UseMutationResult<void, Error, { contextKey?: string }>;\n\n/**\n * Hook for managing thread message input state and submission\n *\n * @returns Interface for managing thread input state and submission\n */\nexport function useTamboThreadInput(contextKey?: string): UseThreadInput {\n const { thread, inputValue, setInputValue, sendThreadMessage } =\n useTamboThread();\n\n const submit = useCallback(\n async ({ contextKey: submitContextKey }: { contextKey?: string } = {}) => {\n const validation = validateInput(inputValue);\n if (!validation.isValid) {\n throw new ThreadInputError(\n `Cannot submit message: ${validation.error ?? INPUT_ERROR_MESSAGES.VALIDATION}`,\n { cause: validation.error },\n );\n }\n\n await sendThreadMessage(validation.sanitizedInput, {\n threadId: thread.id,\n contextKey: submitContextKey ?? contextKey ?? undefined,\n });\n setInputValue(\"\");\n },\n [inputValue, sendThreadMessage, thread.id, contextKey, setInputValue],\n );\n const {\n mutateAsync: submitAsync,\n mutate: _unusedSubmit,\n ...mutationState\n } = useTamboMutation({\n mutationFn: submit,\n });\n\n return {\n ...mutationState,\n value: inputValue,\n setValue: setInputValue,\n submit: submitAsync,\n } as UseThreadInput;\n}\n"]}
@@ -0,0 +1,12 @@
1
+ /** Exports for the library. Only publically available exports are re-exported here. Anything not exported here is not supported and may change or break at any time. */
2
+ export { useTamboComponentState } from "./hooks/use-component-state";
3
+ export { TamboMessageProvider, useTamboCurrentMessage, useTamboMessageContext, } from "./hooks/use-current-message";
4
+ export * from "./hooks/use-suggestions";
5
+ export { useTamboThreadInput } from "./hooks/use-thread-input";
6
+ export * from "./providers";
7
+ export type { APIError, RateLimitError, TamboAIError, } from "@tambo-ai/typescript-sdk";
8
+ export type { Suggestion, SuggestionGenerateParams, SuggestionGenerateResponse, SuggestionListResponse, } from "@tambo-ai/typescript-sdk/resources/beta/threads/suggestions";
9
+ export { useTamboThreads } from "./hooks/use-tambo-threads";
10
+ export { ComponentContextToolMetadata, ComponentRegistry, ParameterSpec, RegisteredComponent, TamboTool, } from "./model/component-metadata";
11
+ export { GenerationStage, TamboThreadMessage, } from "./model/generate-component-response";
12
+ export { TamboThread } from "./model/tambo-thread";
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
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
+ exports.GenerationStage = exports.useTamboThreads = exports.useTamboThreadInput = exports.useTamboMessageContext = exports.useTamboCurrentMessage = exports.TamboMessageProvider = exports.useTamboComponentState = void 0;
18
+ /** Exports for the library. Only publically available exports are re-exported here. Anything not exported here is not supported and may change or break at any time. */
19
+ var use_component_state_1 = require("./hooks/use-component-state");
20
+ Object.defineProperty(exports, "useTamboComponentState", { enumerable: true, get: function () { return use_component_state_1.useTamboComponentState; } });
21
+ var use_current_message_1 = require("./hooks/use-current-message");
22
+ Object.defineProperty(exports, "TamboMessageProvider", { enumerable: true, get: function () { return use_current_message_1.TamboMessageProvider; } });
23
+ Object.defineProperty(exports, "useTamboCurrentMessage", { enumerable: true, get: function () { return use_current_message_1.useTamboCurrentMessage; } });
24
+ Object.defineProperty(exports, "useTamboMessageContext", { enumerable: true, get: function () { return use_current_message_1.useTamboMessageContext; } });
25
+ __exportStar(require("./hooks/use-suggestions"), exports);
26
+ var use_thread_input_1 = require("./hooks/use-thread-input");
27
+ Object.defineProperty(exports, "useTamboThreadInput", { enumerable: true, get: function () { return use_thread_input_1.useTamboThreadInput; } });
28
+ // Re-export provider components
29
+ __exportStar(require("./providers"), exports);
30
+ var use_tambo_threads_1 = require("./hooks/use-tambo-threads");
31
+ Object.defineProperty(exports, "useTamboThreads", { enumerable: true, get: function () { return use_tambo_threads_1.useTamboThreads; } });
32
+ var generate_component_response_1 = require("./model/generate-component-response");
33
+ Object.defineProperty(exports, "GenerationStage", { enumerable: true, get: function () { return generate_component_response_1.GenerationStage; } });
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,wKAAwK;AACxK,mEAAqE;AAA5D,6HAAA,sBAAsB,OAAA;AAC/B,mEAIqC;AAHnC,2HAAA,oBAAoB,OAAA;AACpB,6HAAA,sBAAsB,OAAA;AACtB,6HAAA,sBAAsB,OAAA;AAExB,0DAAwC;AACxC,6DAA+D;AAAtD,uHAAA,mBAAmB,OAAA;AAE5B,gCAAgC;AAChC,8CAA4B;AAc5B,+DAA4D;AAAnD,oHAAA,eAAe,OAAA;AAQxB,mFAG6C;AAF3C,8HAAA,eAAe,OAAA","sourcesContent":["/** Exports for the library. Only publically available exports are re-exported here. Anything not exported here is not supported and may change or break at any time. */\nexport { useTamboComponentState } from \"./hooks/use-component-state\";\nexport {\n TamboMessageProvider,\n useTamboCurrentMessage,\n useTamboMessageContext,\n} from \"./hooks/use-current-message\";\nexport * from \"./hooks/use-suggestions\";\nexport { useTamboThreadInput } from \"./hooks/use-thread-input\";\n\n// Re-export provider components\nexport * from \"./providers\";\n\n// Re-export types from Tambo Node SDK\nexport type {\n APIError,\n RateLimitError,\n TamboAIError,\n} from \"@tambo-ai/typescript-sdk\";\nexport type {\n Suggestion,\n SuggestionGenerateParams,\n SuggestionGenerateResponse,\n SuggestionListResponse,\n} from \"@tambo-ai/typescript-sdk/resources/beta/threads/suggestions\";\nexport { useTamboThreads } from \"./hooks/use-tambo-threads\";\nexport {\n ComponentContextToolMetadata,\n ComponentRegistry,\n ParameterSpec,\n RegisteredComponent,\n TamboTool,\n} from \"./model/component-metadata\";\nexport {\n GenerationStage,\n TamboThreadMessage,\n} from \"./model/generate-component-response\";\nexport { TamboThread } from \"./model/tambo-thread\";\n"]}
@@ -0,0 +1,32 @@
1
+ import TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { ComponentType } from "react";
3
+ import z from "zod";
4
+ import type zodToJsonSchema from "zod-to-json-schema";
5
+ /** Extension of the ToolParameters interface from Tambo AI to include JSONSchema definition */
6
+ export type ParameterSpec = TamboAI.ToolParameters & {
7
+ schema?: ReturnType<typeof zodToJsonSchema>;
8
+ };
9
+ /**
10
+ * Extends the base ContextTool interface from Tambo AI to include schema information
11
+ * for parameter validation using zod-to-json-schema.
12
+ */
13
+ export interface ComponentContextToolMetadata extends TamboAI.ComponentContextToolMetadata {
14
+ parameters: ParameterSpec[];
15
+ }
16
+ export interface ComponentContextTool {
17
+ getComponentContext: (...args: any[]) => Promise<any>;
18
+ definition: ComponentContextToolMetadata;
19
+ }
20
+ export interface RegisteredComponent extends TamboAI.AvailableComponent {
21
+ component: ComponentType<any>;
22
+ loadingComponent?: ComponentType<any>;
23
+ }
24
+ export type ComponentRegistry = Record<string, RegisteredComponent>;
25
+ export type TamboToolRegistry = Record<string, TamboTool>;
26
+ export interface TamboTool<Args extends z.ZodTuple<any, any> = z.ZodTuple<any, any>, Returns extends z.ZodTypeAny = z.ZodTypeAny> {
27
+ name: string;
28
+ description: string;
29
+ tool: (...args: z.infer<Args>) => z.infer<Returns>;
30
+ toolSchema: z.ZodFunction<Args, Returns>;
31
+ }
32
+ export type TamboToolAssociations = Record<string, string[]>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=component-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-metadata.js","sourceRoot":"","sources":["../../src/model/component-metadata.ts"],"names":[],"mappings":"","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { ComponentType } from \"react\";\nimport z from \"zod\";\nimport type zodToJsonSchema from \"zod-to-json-schema\";\n/** Extension of the ToolParameters interface from Tambo AI to include JSONSchema definition */\nexport type ParameterSpec = TamboAI.ToolParameters & {\n schema?: ReturnType<typeof zodToJsonSchema>;\n};\n\n/**\n * Extends the base ContextTool interface from Tambo AI to include schema information\n * for parameter validation using zod-to-json-schema.\n */\nexport interface ComponentContextToolMetadata\n extends TamboAI.ComponentContextToolMetadata {\n parameters: ParameterSpec[];\n}\n\nexport interface ComponentContextTool {\n getComponentContext: (...args: any[]) => Promise<any>;\n definition: ComponentContextToolMetadata;\n}\n\nexport interface RegisteredComponent extends TamboAI.AvailableComponent {\n component: ComponentType<any>;\n loadingComponent?: ComponentType<any>;\n}\n\nexport type ComponentRegistry = Record<string, RegisteredComponent>;\n\nexport type TamboToolRegistry = Record<string, TamboTool>;\n\nexport interface TamboTool<\n Args extends z.ZodTuple<any, any> = z.ZodTuple<any, any>,\n Returns extends z.ZodTypeAny = z.ZodTypeAny,\n> {\n name: string;\n description: string;\n tool: (...args: z.infer<Args>) => z.infer<Returns>;\n toolSchema: z.ZodFunction<Args, Returns>;\n}\n\nexport type TamboToolAssociations = Record<string, string[]>;\n"]}
@@ -0,0 +1,17 @@
1
+ import TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { ReactElement } from "react";
3
+ /** An extension of the TamboAI.Beta.Threads.ThreadMessage type that includes a
4
+ * renderedComponent */
5
+ export interface TamboThreadMessage extends TamboAI.Beta.Threads.ThreadMessage {
6
+ renderedComponent?: ReactElement | null;
7
+ }
8
+ export declare enum GenerationStage {
9
+ IDLE = "IDLE",
10
+ CHOOSING_COMPONENT = "CHOOSING_COMPONENT",
11
+ FETCHING_CONTEXT = "FETCHING_CONTEXT",
12
+ HYDRATING_COMPONENT = "HYDRATING_COMPONENT",
13
+ STREAMING_RESPONSE = "STREAMING_RESPONSE",
14
+ COMPLETE = "COMPLETE",
15
+ ERROR = "ERROR"
16
+ }
17
+ export declare function isIdleStage(generationStage: GenerationStage): boolean;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GenerationStage = void 0;
4
+ exports.isIdleStage = isIdleStage;
5
+ var GenerationStage;
6
+ (function (GenerationStage) {
7
+ GenerationStage["IDLE"] = "IDLE";
8
+ GenerationStage["CHOOSING_COMPONENT"] = "CHOOSING_COMPONENT";
9
+ GenerationStage["FETCHING_CONTEXT"] = "FETCHING_CONTEXT";
10
+ GenerationStage["HYDRATING_COMPONENT"] = "HYDRATING_COMPONENT";
11
+ GenerationStage["STREAMING_RESPONSE"] = "STREAMING_RESPONSE";
12
+ GenerationStage["COMPLETE"] = "COMPLETE";
13
+ GenerationStage["ERROR"] = "ERROR";
14
+ })(GenerationStage || (exports.GenerationStage = GenerationStage = {}));
15
+ function isIdleStage(generationStage) {
16
+ return [
17
+ GenerationStage.IDLE,
18
+ GenerationStage.COMPLETE,
19
+ GenerationStage.ERROR,
20
+ ].includes(generationStage);
21
+ }
22
+ //# sourceMappingURL=generate-component-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-component-response.js","sourceRoot":"","sources":["../../src/model/generate-component-response.ts"],"names":[],"mappings":";;;AAkBA,kCAMC;AAfD,IAAY,eAQX;AARD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,4DAAyC,CAAA;IACzC,wDAAqC,CAAA;IACrC,8DAA2C,CAAA;IAC3C,4DAAyC,CAAA;IACzC,wCAAqB,CAAA;IACrB,kCAAe,CAAA;AACjB,CAAC,EARW,eAAe,+BAAf,eAAe,QAQ1B;AACD,SAAgB,WAAW,CAAC,eAAgC;IAC1D,OAAO;QACL,eAAe,CAAC,IAAI;QACpB,eAAe,CAAC,QAAQ;QACxB,eAAe,CAAC,KAAK;KACtB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { ReactElement } from \"react\";\n\n/** An extension of the TamboAI.Beta.Threads.ThreadMessage type that includes a\n * renderedComponent */\nexport interface TamboThreadMessage extends TamboAI.Beta.Threads.ThreadMessage {\n renderedComponent?: ReactElement | null;\n}\n\nexport enum GenerationStage {\n IDLE = \"IDLE\",\n CHOOSING_COMPONENT = \"CHOOSING_COMPONENT\",\n FETCHING_CONTEXT = \"FETCHING_CONTEXT\",\n HYDRATING_COMPONENT = \"HYDRATING_COMPONENT\",\n STREAMING_RESPONSE = \"STREAMING_RESPONSE\",\n COMPLETE = \"COMPLETE\",\n ERROR = \"ERROR\",\n}\nexport function isIdleStage(generationStage: GenerationStage) {\n return [\n GenerationStage.IDLE,\n GenerationStage.COMPLETE,\n GenerationStage.ERROR,\n ].includes(generationStage);\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { TamboThreadMessage } from "./generate-component-response";
3
+ /** An extension of the TamboAI.Beta.Thread type that includes
4
+ * messages with renderedComponent */
5
+ export interface TamboThread extends TamboAI.Beta.Thread {
6
+ messages: TamboThreadMessage[];
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=tambo-thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tambo-thread.js","sourceRoot":"","sources":["../../src/model/tambo-thread.ts"],"names":[],"mappings":"","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { TamboThreadMessage } from \"./generate-component-response\";\n\n/** An extension of the TamboAI.Beta.Thread type that includes\n * messages with renderedComponent */\nexport interface TamboThread extends TamboAI.Beta.Thread {\n messages: TamboThreadMessage[];\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { TamboAIError } from "@tambo-ai/typescript-sdk";
2
+ export declare class ThreadInputError extends TamboAIError {
3
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThreadInputError = void 0;
4
+ const typescript_sdk_1 = require("@tambo-ai/typescript-sdk");
5
+ class ThreadInputError extends typescript_sdk_1.TamboAIError {
6
+ }
7
+ exports.ThreadInputError = ThreadInputError;
8
+ //# sourceMappingURL=thread-input-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-input-error.js","sourceRoot":"","sources":["../../src/model/thread-input-error.ts"],"names":[],"mappings":";;;AAAA,6DAAwD;AAExD,MAAa,gBAAiB,SAAQ,6BAAY;CAAG;AAArD,4CAAqD","sourcesContent":["import { TamboAIError } from \"@tambo-ai/typescript-sdk\";\n\nexport class ThreadInputError extends TamboAIError {}\n"]}
@@ -0,0 +1,6 @@
1
+ export interface ValidationResult {
2
+ isValid: boolean;
3
+ error?: Error;
4
+ sanitizedInput: string;
5
+ }
6
+ export declare function validateInput(input: string): ValidationResult;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateInput = validateInput;
4
+ // TODO(future): Consider adding more validation rules if needed
5
+ function validateInput(input) {
6
+ const trimmed = input.trim();
7
+ if (trimmed.length === 0) {
8
+ return {
9
+ isValid: false,
10
+ error: new Error("Message cannot be empty"),
11
+ sanitizedInput: trimmed,
12
+ };
13
+ }
14
+ // TODO(perf): Make this configurable if needed
15
+ if (trimmed.length > 10000) {
16
+ return {
17
+ isValid: false,
18
+ error: new Error("Message is too long (max 10000 characters)"),
19
+ sanitizedInput: trimmed,
20
+ };
21
+ }
22
+ return {
23
+ isValid: true,
24
+ sanitizedInput: trimmed,
25
+ };
26
+ }
27
+ //# sourceMappingURL=validate-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-input.js","sourceRoot":"","sources":["../../src/model/validate-input.ts"],"names":[],"mappings":";;AAOA,sCAwBC;AAzBD,gEAAgE;AAChE,SAAgB,aAAa,CAAC,KAAa;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CAAC,yBAAyB,CAAC;YAC3C,cAAc,EAAE,OAAO;SACxB,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CAAC,4CAA4C,CAAC;YAC9D,cAAc,EAAE,OAAO;SACxB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,OAAO;KACxB,CAAC;AACJ,CAAC","sourcesContent":["export interface ValidationResult {\n isValid: boolean;\n error?: Error;\n sanitizedInput: string;\n}\n\n// TODO(future): Consider adding more validation rules if needed\nexport function validateInput(input: string): ValidationResult {\n const trimmed = input.trim();\n\n if (trimmed.length === 0) {\n return {\n isValid: false,\n error: new Error(\"Message cannot be empty\"),\n sanitizedInput: trimmed,\n };\n }\n\n // TODO(perf): Make this configurable if needed\n if (trimmed.length > 10000) {\n return {\n isValid: false,\n error: new Error(\"Message is too long (max 10000 characters)\"),\n sanitizedInput: trimmed,\n };\n }\n\n return {\n isValid: true,\n sanitizedInput: trimmed,\n };\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export { TamboClientProvider, useTamboClient } from "./tambo-client-provider";
2
+ export { TamboComponentProvider, useTamboComponent, } from "./tambo-component-provider";
3
+ export { TamboContext, TamboProvider, useTambo } from "./tambo-provider";
4
+ export { RegisterComponentOptions, TamboRegistryContext, TamboRegistryProvider, useTamboRegistry, } from "./tambo-registry-provider";
5
+ export { TamboThreadContext, TamboThreadProvider, useTamboThread, } from "./tambo-thread-provider";
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTamboThread = exports.TamboThreadProvider = exports.TamboThreadContext = exports.useTamboRegistry = exports.TamboRegistryProvider = exports.useTambo = exports.TamboProvider = exports.TamboContext = exports.useTamboComponent = exports.TamboComponentProvider = exports.useTamboClient = exports.TamboClientProvider = void 0;
4
+ var tambo_client_provider_1 = require("./tambo-client-provider");
5
+ Object.defineProperty(exports, "TamboClientProvider", { enumerable: true, get: function () { return tambo_client_provider_1.TamboClientProvider; } });
6
+ Object.defineProperty(exports, "useTamboClient", { enumerable: true, get: function () { return tambo_client_provider_1.useTamboClient; } });
7
+ var tambo_component_provider_1 = require("./tambo-component-provider");
8
+ Object.defineProperty(exports, "TamboComponentProvider", { enumerable: true, get: function () { return tambo_component_provider_1.TamboComponentProvider; } });
9
+ Object.defineProperty(exports, "useTamboComponent", { enumerable: true, get: function () { return tambo_component_provider_1.useTamboComponent; } });
10
+ var tambo_provider_1 = require("./tambo-provider");
11
+ Object.defineProperty(exports, "TamboContext", { enumerable: true, get: function () { return tambo_provider_1.TamboContext; } });
12
+ Object.defineProperty(exports, "TamboProvider", { enumerable: true, get: function () { return tambo_provider_1.TamboProvider; } });
13
+ Object.defineProperty(exports, "useTambo", { enumerable: true, get: function () { return tambo_provider_1.useTambo; } });
14
+ var tambo_registry_provider_1 = require("./tambo-registry-provider");
15
+ Object.defineProperty(exports, "TamboRegistryProvider", { enumerable: true, get: function () { return tambo_registry_provider_1.TamboRegistryProvider; } });
16
+ Object.defineProperty(exports, "useTamboRegistry", { enumerable: true, get: function () { return tambo_registry_provider_1.useTamboRegistry; } });
17
+ var tambo_thread_provider_1 = require("./tambo-thread-provider");
18
+ Object.defineProperty(exports, "TamboThreadContext", { enumerable: true, get: function () { return tambo_thread_provider_1.TamboThreadContext; } });
19
+ Object.defineProperty(exports, "TamboThreadProvider", { enumerable: true, get: function () { return tambo_thread_provider_1.TamboThreadProvider; } });
20
+ Object.defineProperty(exports, "useTamboThread", { enumerable: true, get: function () { return tambo_thread_provider_1.useTamboThread; } });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;;AAAA,iEAA8E;AAArE,4HAAA,mBAAmB,OAAA;AAAE,uHAAA,cAAc,OAAA;AAC5C,uEAGoC;AAFlC,kIAAA,sBAAsB,OAAA;AACtB,6HAAA,iBAAiB,OAAA;AAEnB,mDAAyE;AAAhE,8GAAA,YAAY,OAAA;AAAE,+GAAA,aAAa,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAC9C,qEAKmC;AAFjC,gIAAA,qBAAqB,OAAA;AACrB,2HAAA,gBAAgB,OAAA;AAElB,iEAIiC;AAH/B,2HAAA,kBAAkB,OAAA;AAClB,4HAAA,mBAAmB,OAAA;AACnB,uHAAA,cAAc,OAAA","sourcesContent":["export { TamboClientProvider, useTamboClient } from \"./tambo-client-provider\";\nexport {\n TamboComponentProvider,\n useTamboComponent,\n} from \"./tambo-component-provider\";\nexport { TamboContext, TamboProvider, useTambo } from \"./tambo-provider\";\nexport {\n RegisterComponentOptions,\n TamboRegistryContext,\n TamboRegistryProvider,\n useTamboRegistry,\n} from \"./tambo-registry-provider\";\nexport {\n TamboThreadContext,\n TamboThreadProvider,\n useTamboThread,\n} from \"./tambo-thread-provider\";\n"]}
@@ -0,0 +1,15 @@
1
+ import TamboAI from "@tambo-ai/typescript-sdk";
2
+ import { QueryClient } from "@tanstack/react-query";
3
+ import React, { PropsWithChildren } from "react";
4
+ export interface TamboClientProviderProps {
5
+ tamboUrl: string;
6
+ apiKey: string;
7
+ }
8
+ export interface TamboClientContextProps {
9
+ client: TamboAI;
10
+ /** The tambo-specific query client */
11
+ queryClient: QueryClient;
12
+ }
13
+ export declare const TamboClientProvider: React.FC<PropsWithChildren<TamboClientProviderProps>>;
14
+ export declare const useTamboClient: () => TamboAI;
15
+ export declare const useTamboQueryClient: () => QueryClient;
@@ -0,0 +1,66 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.useTamboQueryClient = exports.useTamboClient = exports.TamboClientProvider = void 0;
40
+ const typescript_sdk_1 = __importDefault(require("@tambo-ai/typescript-sdk"));
41
+ const react_query_1 = require("@tanstack/react-query");
42
+ const react_1 = __importStar(require("react"));
43
+ const TamboClientContext = (0, react_1.createContext)(undefined);
44
+ const TamboClientProvider = ({ children, tamboUrl, apiKey }) => {
45
+ const [client] = (0, react_1.useState)(() => new typescript_sdk_1.default({ baseURL: tamboUrl, apiKey }));
46
+ const [queryClient] = (0, react_1.useState)(() => new react_query_1.QueryClient());
47
+ return (react_1.default.createElement(TamboClientContext.Provider, { value: { client, queryClient } }, children));
48
+ };
49
+ exports.TamboClientProvider = TamboClientProvider;
50
+ const useTamboClient = () => {
51
+ const context = react_1.default.useContext(TamboClientContext);
52
+ if (context === undefined) {
53
+ throw new Error("useTamboClient must be used within a TamboClientProvider");
54
+ }
55
+ return context.client;
56
+ };
57
+ exports.useTamboClient = useTamboClient;
58
+ const useTamboQueryClient = () => {
59
+ const context = react_1.default.useContext(TamboClientContext);
60
+ if (context === undefined) {
61
+ throw new Error("useTamboQueryClient must be used within a TamboClientProvider");
62
+ }
63
+ return context.queryClient;
64
+ };
65
+ exports.useTamboQueryClient = useTamboQueryClient;
66
+ //# sourceMappingURL=tambo-client-provider.js.map