@tambo-ai/react 0.65.1 → 0.65.3

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 (488) hide show
  1. package/README.md +56 -63
  2. package/dist/context-helpers/context-helpers-provider.test.d.ts.map +1 -0
  3. package/dist/context-helpers/{__tests__/context-helpers-provider.test.js → context-helpers-provider.test.js} +2 -2
  4. package/dist/context-helpers/context-helpers-provider.test.js.map +1 -0
  5. package/dist/context-helpers/context-helpers.test.d.ts.map +1 -0
  6. package/dist/context-helpers/{__tests__/context-helpers.test.js → context-helpers.test.js} +1 -1
  7. package/dist/context-helpers/context-helpers.test.js.map +1 -0
  8. package/dist/hooks/use-component-state.d.ts +11 -24
  9. package/dist/hooks/use-component-state.d.ts.map +1 -1
  10. package/dist/hooks/use-component-state.js +14 -5
  11. package/dist/hooks/use-component-state.js.map +1 -1
  12. package/dist/hooks/use-component-state.test.d.ts.map +1 -0
  13. package/dist/hooks/{__tests__/use-component-state.test.js → use-component-state.test.js} +7 -7
  14. package/dist/hooks/use-component-state.test.js.map +1 -0
  15. package/dist/hooks/use-message-images.test.d.ts.map +1 -0
  16. package/dist/hooks/{__tests__/use-message-images.test.js → use-message-images.test.js} +1 -1
  17. package/dist/hooks/use-message-images.test.js.map +1 -0
  18. package/dist/hooks/use-streaming-props.d.ts +7 -19
  19. package/dist/hooks/use-streaming-props.d.ts.map +1 -1
  20. package/dist/hooks/use-streaming-props.js +7 -19
  21. package/dist/hooks/use-streaming-props.js.map +1 -1
  22. package/dist/hooks/use-suggestions.d.ts +1 -1
  23. package/dist/hooks/use-suggestions.d.ts.map +1 -1
  24. package/dist/hooks/use-suggestions.js.map +1 -1
  25. package/dist/hooks/use-suggestions.test.d.ts.map +1 -0
  26. package/dist/hooks/{__tests__/use-suggestions.test.js → use-suggestions.test.js} +36 -29
  27. package/dist/hooks/use-suggestions.test.js.map +1 -0
  28. package/dist/hooks/use-tambo-stream-status.d.ts +9 -8
  29. package/dist/hooks/use-tambo-stream-status.d.ts.map +1 -1
  30. package/dist/hooks/use-tambo-stream-status.js +9 -8
  31. package/dist/hooks/use-tambo-stream-status.js.map +1 -1
  32. package/dist/hooks/use-tambo-stream-status.test.d.ts.map +1 -0
  33. package/dist/hooks/{__tests__/use-tambo-stream-status.test.js → use-tambo-stream-status.test.js} +6 -6
  34. package/dist/hooks/use-tambo-stream-status.test.js.map +1 -0
  35. package/dist/hooks/use-tambo-threads.test.d.ts.map +1 -0
  36. package/dist/hooks/{__tests__/use-tambo-threads.test.js → use-tambo-threads.test.js} +3 -3
  37. package/dist/hooks/use-tambo-threads.test.js.map +1 -0
  38. package/dist/mcp/elicitation.d.ts +10 -2
  39. package/dist/mcp/elicitation.d.ts.map +1 -1
  40. package/dist/mcp/elicitation.js +19 -1
  41. package/dist/mcp/elicitation.js.map +1 -1
  42. package/dist/mcp/elicitation.test.d.ts.map +1 -0
  43. package/dist/mcp/{__tests__/elicitation.test.js → elicitation.test.js} +1 -1
  44. package/dist/mcp/elicitation.test.js.map +1 -0
  45. package/dist/mcp/index.d.ts +10 -1
  46. package/dist/mcp/index.d.ts.map +1 -1
  47. package/dist/mcp/index.js +9 -0
  48. package/dist/mcp/index.js.map +1 -1
  49. package/dist/mcp/mcp-client.d.ts +29 -10
  50. package/dist/mcp/mcp-client.d.ts.map +1 -1
  51. package/dist/mcp/mcp-client.test.d.ts.map +1 -0
  52. package/dist/mcp/{__tests__/mcp-client.test.js → mcp-client.test.js} +1 -1
  53. package/dist/mcp/mcp-client.test.js.map +1 -0
  54. package/dist/mcp/mcp-hooks.d.ts +52 -19
  55. package/dist/mcp/mcp-hooks.d.ts.map +1 -1
  56. package/dist/mcp/mcp-hooks.js.map +1 -1
  57. package/dist/mcp/mcp-hooks.test.d.ts.map +1 -0
  58. package/dist/mcp/{__tests__/mcp-hooks.test.js → mcp-hooks.test.js} +7 -33
  59. package/dist/mcp/mcp-hooks.test.js.map +1 -0
  60. package/dist/mcp/tambo-mcp-provider.d.ts +2 -0
  61. package/dist/mcp/tambo-mcp-provider.d.ts.map +1 -1
  62. package/dist/mcp/tambo-mcp-provider.js +58 -12
  63. package/dist/mcp/tambo-mcp-provider.js.map +1 -1
  64. package/dist/mcp/tambo-mcp-provider.test.d.ts.map +1 -0
  65. package/dist/mcp/{__tests__/tambo-mcp-provider.test.js → tambo-mcp-provider.test.js} +9 -25
  66. package/dist/mcp/tambo-mcp-provider.test.js.map +1 -0
  67. package/dist/mcp/use-mcp-servers.test.d.ts.map +1 -0
  68. package/dist/mcp/{__tests__/use-mcp-servers.test.js → use-mcp-servers.test.js} +5 -11
  69. package/dist/mcp/use-mcp-servers.test.js.map +1 -0
  70. package/dist/model/component-metadata.d.ts +1 -1
  71. package/dist/model/component-metadata.d.ts.map +1 -1
  72. package/dist/model/component-metadata.js.map +1 -1
  73. package/dist/model/mcp-server-info.d.ts +3 -1
  74. package/dist/model/mcp-server-info.d.ts.map +1 -1
  75. package/dist/model/mcp-server-info.js.map +1 -1
  76. package/dist/model/tambo-thread.d.ts +6 -1
  77. package/dist/model/tambo-thread.d.ts.map +1 -1
  78. package/dist/model/tambo-thread.js.map +1 -1
  79. package/dist/providers/hoc/with-tambo-interactable.d.ts +1 -1
  80. package/dist/providers/hoc/with-tambo-interactable.d.ts.map +1 -1
  81. package/dist/providers/hoc/with-tambo-interactable.js.map +1 -1
  82. package/dist/providers/hooks/use-tambo-session-token.test.d.ts.map +1 -0
  83. package/dist/providers/hooks/{__tests__/use-tambo-session-token.test.js → use-tambo-session-token.test.js} +1 -1
  84. package/dist/providers/hooks/use-tambo-session-token.test.js.map +1 -0
  85. package/dist/providers/tambo-client-provider.d.ts +0 -4
  86. package/dist/providers/tambo-client-provider.d.ts.map +1 -1
  87. package/dist/providers/tambo-client-provider.js +0 -3
  88. package/dist/providers/tambo-client-provider.js.map +1 -1
  89. package/dist/providers/tambo-context-attachment-provider.test.d.ts.map +1 -0
  90. package/dist/providers/{__tests__/tambo-context-attachment-provider.test.js → tambo-context-attachment-provider.test.js} +2 -2
  91. package/dist/providers/tambo-context-attachment-provider.test.js.map +1 -0
  92. package/dist/providers/tambo-context-helpers-provider.test.d.ts.map +1 -0
  93. package/dist/providers/{__tests__/tambo-context-helpers-provider.test.js → tambo-context-helpers-provider.test.js} +2 -2
  94. package/dist/providers/tambo-context-helpers-provider.test.js.map +1 -0
  95. package/dist/providers/tambo-interactable-provider-partial-updates.test.d.ts.map +1 -0
  96. package/dist/providers/{__tests__/tambo-interactable-provider-partial-updates.test.js → tambo-interactable-provider-partial-updates.test.js} +91 -91
  97. package/dist/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -0
  98. package/dist/providers/tambo-interactable-provider.d.ts +1 -1
  99. package/dist/providers/tambo-interactable-provider.d.ts.map +1 -1
  100. package/dist/providers/tambo-interactable-provider.js +30 -30
  101. package/dist/providers/tambo-interactable-provider.js.map +1 -1
  102. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.d.ts.map +1 -0
  103. package/dist/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.js → tambo-interactables-additional-context-edge-cases.test.js} +18 -18
  104. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -0
  105. package/dist/providers/tambo-interactables-additional-context.test.d.ts.map +1 -0
  106. package/dist/providers/{__tests__/tambo-interactables-additional-context.test.js → tambo-interactables-additional-context.test.js} +20 -20
  107. package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -0
  108. package/dist/providers/tambo-mcp-token-provider.d.ts +20 -13
  109. package/dist/providers/tambo-mcp-token-provider.d.ts.map +1 -1
  110. package/dist/providers/tambo-mcp-token-provider.js +122 -10
  111. package/dist/providers/tambo-mcp-token-provider.js.map +1 -1
  112. package/dist/providers/tambo-prop-stream-provider.test.d.ts.map +1 -0
  113. package/dist/providers/{__tests__/tambo-prop-stream-provider.test.js → tambo-prop-stream-provider.test.js} +32 -25
  114. package/dist/providers/tambo-prop-stream-provider.test.js.map +1 -0
  115. package/dist/providers/tambo-provider.d.ts +2 -2
  116. package/dist/providers/tambo-provider.d.ts.map +1 -1
  117. package/dist/providers/tambo-provider.js +5 -7
  118. package/dist/providers/tambo-provider.js.map +1 -1
  119. package/dist/providers/tambo-registry-provider.js +2 -2
  120. package/dist/providers/tambo-registry-provider.js.map +1 -1
  121. package/dist/providers/tambo-registry-provider.test.d.ts.map +1 -0
  122. package/dist/providers/{__tests__/tambo-registry-provider.test.js → tambo-registry-provider.test.js} +21 -21
  123. package/dist/providers/tambo-registry-provider.test.js.map +1 -0
  124. package/dist/providers/tambo-stubs.d.ts.map +1 -1
  125. package/dist/providers/tambo-stubs.js +4 -2
  126. package/dist/providers/tambo-stubs.js.map +1 -1
  127. package/dist/providers/tambo-stubs.test.d.ts.map +1 -0
  128. package/dist/providers/{__tests__/tambo-stubs.test.js → tambo-stubs.test.js} +2 -2
  129. package/dist/providers/tambo-stubs.test.js.map +1 -0
  130. package/dist/providers/tambo-thread-input-provider.d.ts +1 -1
  131. package/dist/providers/tambo-thread-input-provider.d.ts.map +1 -1
  132. package/dist/providers/tambo-thread-input-provider.js.map +1 -1
  133. package/dist/providers/tambo-thread-provider-initial-messages.test.d.ts.map +1 -0
  134. package/dist/providers/{__tests__/tambo-thread-provider-initial-messages.test.js → tambo-thread-provider-initial-messages.test.js} +7 -9
  135. package/dist/providers/tambo-thread-provider-initial-messages.test.js.map +1 -0
  136. package/dist/providers/tambo-thread-provider.d.ts +8 -0
  137. package/dist/providers/tambo-thread-provider.d.ts.map +1 -1
  138. package/dist/providers/tambo-thread-provider.js +82 -19
  139. package/dist/providers/tambo-thread-provider.js.map +1 -1
  140. package/dist/providers/tambo-thread-provider.test.d.ts.map +1 -0
  141. package/dist/providers/{__tests__/tambo-thread-provider.test.js → tambo-thread-provider.test.js} +32 -64
  142. package/dist/providers/tambo-thread-provider.test.js.map +1 -0
  143. package/dist/testing/tools.js.map +1 -1
  144. package/dist/util/content-parts.test.d.ts.map +1 -0
  145. package/dist/util/{__tests__/content-parts.test.js → content-parts.test.js} +1 -1
  146. package/dist/util/content-parts.test.js.map +1 -0
  147. package/dist/util/generate-component.js +2 -2
  148. package/dist/util/generate-component.js.map +1 -1
  149. package/dist/util/message-builder.d.ts +2 -2
  150. package/dist/util/message-builder.d.ts.map +1 -1
  151. package/dist/util/message-builder.js +63 -6
  152. package/dist/util/message-builder.js.map +1 -1
  153. package/dist/util/message-builder.test.d.ts.map +1 -0
  154. package/dist/util/{__tests__/message-builder.test.js → message-builder.test.js} +1 -1
  155. package/dist/util/message-builder.test.js.map +1 -0
  156. package/dist/util/query-utils.d.ts.map +1 -1
  157. package/dist/util/query-utils.js +49 -31
  158. package/dist/util/query-utils.js.map +1 -1
  159. package/dist/util/registry.js.map +1 -1
  160. package/dist/util/validate-zod-schema.d.ts +1 -1
  161. package/dist/util/validate-zod-schema.d.ts.map +1 -1
  162. package/dist/util/validate-zod-schema.js +15 -15
  163. package/dist/util/validate-zod-schema.js.map +1 -1
  164. package/dist/util/validate-zod-schema.test.d.ts.map +1 -0
  165. package/dist/{__tests__/util → util}/validate-zod-schema.test.js +36 -36
  166. package/dist/util/validate-zod-schema.test.js.map +1 -0
  167. package/esm/context-helpers/context-helpers-provider.test.d.ts.map +1 -0
  168. package/esm/context-helpers/{__tests__/context-helpers-provider.test.js → context-helpers-provider.test.js} +2 -2
  169. package/esm/context-helpers/context-helpers-provider.test.js.map +1 -0
  170. package/esm/context-helpers/context-helpers.test.d.ts.map +1 -0
  171. package/esm/context-helpers/{__tests__/context-helpers.test.js → context-helpers.test.js} +1 -1
  172. package/esm/context-helpers/context-helpers.test.js.map +1 -0
  173. package/esm/hooks/use-component-state.d.ts +11 -24
  174. package/esm/hooks/use-component-state.d.ts.map +1 -1
  175. package/esm/hooks/use-component-state.js +14 -5
  176. package/esm/hooks/use-component-state.js.map +1 -1
  177. package/esm/hooks/use-component-state.test.d.ts.map +1 -0
  178. package/esm/hooks/{__tests__/use-component-state.test.js → use-component-state.test.js} +7 -7
  179. package/esm/hooks/use-component-state.test.js.map +1 -0
  180. package/esm/hooks/use-message-images.test.d.ts.map +1 -0
  181. package/esm/hooks/{__tests__/use-message-images.test.js → use-message-images.test.js} +1 -1
  182. package/esm/hooks/use-message-images.test.js.map +1 -0
  183. package/esm/hooks/use-streaming-props.d.ts +7 -19
  184. package/esm/hooks/use-streaming-props.d.ts.map +1 -1
  185. package/esm/hooks/use-streaming-props.js +7 -19
  186. package/esm/hooks/use-streaming-props.js.map +1 -1
  187. package/esm/hooks/use-suggestions.d.ts +1 -1
  188. package/esm/hooks/use-suggestions.d.ts.map +1 -1
  189. package/esm/hooks/use-suggestions.js.map +1 -1
  190. package/esm/hooks/use-suggestions.test.d.ts.map +1 -0
  191. package/esm/hooks/{__tests__/use-suggestions.test.js → use-suggestions.test.js} +36 -29
  192. package/esm/hooks/use-suggestions.test.js.map +1 -0
  193. package/esm/hooks/use-tambo-stream-status.d.ts +9 -8
  194. package/esm/hooks/use-tambo-stream-status.d.ts.map +1 -1
  195. package/esm/hooks/use-tambo-stream-status.js +9 -8
  196. package/esm/hooks/use-tambo-stream-status.js.map +1 -1
  197. package/esm/hooks/use-tambo-stream-status.test.d.ts.map +1 -0
  198. package/esm/hooks/{__tests__/use-tambo-stream-status.test.js → use-tambo-stream-status.test.js} +6 -6
  199. package/esm/hooks/use-tambo-stream-status.test.js.map +1 -0
  200. package/esm/hooks/use-tambo-threads.test.d.ts.map +1 -0
  201. package/esm/hooks/{__tests__/use-tambo-threads.test.js → use-tambo-threads.test.js} +3 -3
  202. package/esm/hooks/use-tambo-threads.test.js.map +1 -0
  203. package/esm/mcp/elicitation.d.ts +10 -2
  204. package/esm/mcp/elicitation.d.ts.map +1 -1
  205. package/esm/mcp/elicitation.js +19 -1
  206. package/esm/mcp/elicitation.js.map +1 -1
  207. package/esm/mcp/elicitation.test.d.ts.map +1 -0
  208. package/esm/mcp/{__tests__/elicitation.test.js → elicitation.test.js} +1 -1
  209. package/esm/mcp/elicitation.test.js.map +1 -0
  210. package/esm/mcp/index.d.ts +10 -1
  211. package/esm/mcp/index.d.ts.map +1 -1
  212. package/esm/mcp/index.js +9 -0
  213. package/esm/mcp/index.js.map +1 -1
  214. package/esm/mcp/mcp-client.d.ts +29 -10
  215. package/esm/mcp/mcp-client.d.ts.map +1 -1
  216. package/esm/mcp/mcp-client.test.d.ts.map +1 -0
  217. package/esm/mcp/{__tests__/mcp-client.test.js → mcp-client.test.js} +1 -1
  218. package/esm/mcp/mcp-client.test.js.map +1 -0
  219. package/esm/mcp/mcp-hooks.d.ts +52 -19
  220. package/esm/mcp/mcp-hooks.d.ts.map +1 -1
  221. package/esm/mcp/mcp-hooks.js.map +1 -1
  222. package/esm/mcp/mcp-hooks.test.d.ts.map +1 -0
  223. package/esm/mcp/{__tests__/mcp-hooks.test.js → mcp-hooks.test.js} +7 -33
  224. package/esm/mcp/mcp-hooks.test.js.map +1 -0
  225. package/esm/mcp/tambo-mcp-provider.d.ts +2 -0
  226. package/esm/mcp/tambo-mcp-provider.d.ts.map +1 -1
  227. package/esm/mcp/tambo-mcp-provider.js +58 -12
  228. package/esm/mcp/tambo-mcp-provider.js.map +1 -1
  229. package/esm/mcp/tambo-mcp-provider.test.d.ts.map +1 -0
  230. package/esm/mcp/{__tests__/tambo-mcp-provider.test.js → tambo-mcp-provider.test.js} +9 -25
  231. package/esm/mcp/tambo-mcp-provider.test.js.map +1 -0
  232. package/esm/mcp/use-mcp-servers.test.d.ts.map +1 -0
  233. package/esm/mcp/{__tests__/use-mcp-servers.test.js → use-mcp-servers.test.js} +5 -11
  234. package/esm/mcp/use-mcp-servers.test.js.map +1 -0
  235. package/esm/model/component-metadata.d.ts +1 -1
  236. package/esm/model/component-metadata.d.ts.map +1 -1
  237. package/esm/model/component-metadata.js.map +1 -1
  238. package/esm/model/mcp-server-info.d.ts +3 -1
  239. package/esm/model/mcp-server-info.d.ts.map +1 -1
  240. package/esm/model/mcp-server-info.js.map +1 -1
  241. package/esm/model/tambo-thread.d.ts +6 -1
  242. package/esm/model/tambo-thread.d.ts.map +1 -1
  243. package/esm/model/tambo-thread.js.map +1 -1
  244. package/esm/providers/hoc/with-tambo-interactable.d.ts +1 -1
  245. package/esm/providers/hoc/with-tambo-interactable.d.ts.map +1 -1
  246. package/esm/providers/hoc/with-tambo-interactable.js.map +1 -1
  247. package/esm/providers/hooks/use-tambo-session-token.test.d.ts.map +1 -0
  248. package/esm/providers/hooks/{__tests__/use-tambo-session-token.test.js → use-tambo-session-token.test.js} +1 -1
  249. package/esm/providers/hooks/use-tambo-session-token.test.js.map +1 -0
  250. package/esm/providers/tambo-client-provider.d.ts +0 -4
  251. package/esm/providers/tambo-client-provider.d.ts.map +1 -1
  252. package/esm/providers/tambo-client-provider.js +0 -3
  253. package/esm/providers/tambo-client-provider.js.map +1 -1
  254. package/esm/providers/tambo-context-attachment-provider.test.d.ts.map +1 -0
  255. package/esm/providers/{__tests__/tambo-context-attachment-provider.test.js → tambo-context-attachment-provider.test.js} +2 -2
  256. package/esm/providers/tambo-context-attachment-provider.test.js.map +1 -0
  257. package/esm/providers/tambo-context-helpers-provider.test.d.ts.map +1 -0
  258. package/esm/providers/{__tests__/tambo-context-helpers-provider.test.js → tambo-context-helpers-provider.test.js} +2 -2
  259. package/esm/providers/tambo-context-helpers-provider.test.js.map +1 -0
  260. package/esm/providers/tambo-interactable-provider-partial-updates.test.d.ts.map +1 -0
  261. package/esm/providers/{__tests__/tambo-interactable-provider-partial-updates.test.js → tambo-interactable-provider-partial-updates.test.js} +5 -5
  262. package/esm/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -0
  263. package/esm/providers/tambo-interactable-provider.d.ts +1 -1
  264. package/esm/providers/tambo-interactable-provider.d.ts.map +1 -1
  265. package/esm/providers/tambo-interactable-provider.js +1 -1
  266. package/esm/providers/tambo-interactable-provider.js.map +1 -1
  267. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.d.ts.map +1 -0
  268. package/esm/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.js → tambo-interactables-additional-context-edge-cases.test.js} +11 -11
  269. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -0
  270. package/esm/providers/tambo-interactables-additional-context.test.d.ts.map +1 -0
  271. package/esm/providers/{__tests__/tambo-interactables-additional-context.test.js → tambo-interactables-additional-context.test.js} +11 -11
  272. package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -0
  273. package/esm/providers/tambo-mcp-token-provider.d.ts +20 -13
  274. package/esm/providers/tambo-mcp-token-provider.d.ts.map +1 -1
  275. package/esm/providers/tambo-mcp-token-provider.js +123 -11
  276. package/esm/providers/tambo-mcp-token-provider.js.map +1 -1
  277. package/esm/providers/tambo-prop-stream-provider.test.d.ts.map +1 -0
  278. package/esm/providers/{__tests__/tambo-prop-stream-provider.test.js → tambo-prop-stream-provider.test.js} +32 -25
  279. package/esm/providers/tambo-prop-stream-provider.test.js.map +1 -0
  280. package/esm/providers/tambo-provider.d.ts +2 -2
  281. package/esm/providers/tambo-provider.d.ts.map +1 -1
  282. package/esm/providers/tambo-provider.js +5 -7
  283. package/esm/providers/tambo-provider.js.map +1 -1
  284. package/esm/providers/tambo-registry-provider.js +1 -1
  285. package/esm/providers/tambo-registry-provider.js.map +1 -1
  286. package/esm/providers/tambo-registry-provider.test.d.ts.map +1 -0
  287. package/esm/providers/{__tests__/tambo-registry-provider.test.js → tambo-registry-provider.test.js} +2 -2
  288. package/esm/providers/tambo-registry-provider.test.js.map +1 -0
  289. package/esm/providers/tambo-stubs.d.ts.map +1 -1
  290. package/esm/providers/tambo-stubs.js +4 -2
  291. package/esm/providers/tambo-stubs.js.map +1 -1
  292. package/esm/providers/tambo-stubs.test.d.ts.map +1 -0
  293. package/esm/providers/{__tests__/tambo-stubs.test.js → tambo-stubs.test.js} +2 -2
  294. package/esm/providers/tambo-stubs.test.js.map +1 -0
  295. package/esm/providers/tambo-thread-input-provider.d.ts +1 -1
  296. package/esm/providers/tambo-thread-input-provider.d.ts.map +1 -1
  297. package/esm/providers/tambo-thread-input-provider.js.map +1 -1
  298. package/esm/providers/tambo-thread-provider-initial-messages.test.d.ts.map +1 -0
  299. package/esm/providers/{__tests__/tambo-thread-provider-initial-messages.test.js → tambo-thread-provider-initial-messages.test.js} +7 -9
  300. package/esm/providers/tambo-thread-provider-initial-messages.test.js.map +1 -0
  301. package/esm/providers/tambo-thread-provider.d.ts +8 -0
  302. package/esm/providers/tambo-thread-provider.d.ts.map +1 -1
  303. package/esm/providers/tambo-thread-provider.js +82 -19
  304. package/esm/providers/tambo-thread-provider.js.map +1 -1
  305. package/esm/providers/tambo-thread-provider.test.d.ts.map +1 -0
  306. package/esm/providers/{__tests__/tambo-thread-provider.test.js → tambo-thread-provider.test.js} +11 -43
  307. package/esm/providers/tambo-thread-provider.test.js.map +1 -0
  308. package/esm/testing/tools.js.map +1 -1
  309. package/esm/util/content-parts.test.d.ts.map +1 -0
  310. package/esm/util/{__tests__/content-parts.test.js → content-parts.test.js} +1 -1
  311. package/esm/util/content-parts.test.js.map +1 -0
  312. package/esm/util/generate-component.js +1 -1
  313. package/esm/util/generate-component.js.map +1 -1
  314. package/esm/util/message-builder.d.ts +2 -2
  315. package/esm/util/message-builder.d.ts.map +1 -1
  316. package/esm/util/message-builder.js +63 -6
  317. package/esm/util/message-builder.js.map +1 -1
  318. package/esm/util/message-builder.test.d.ts.map +1 -0
  319. package/esm/util/{__tests__/message-builder.test.js → message-builder.test.js} +1 -1
  320. package/esm/util/message-builder.test.js.map +1 -0
  321. package/esm/util/query-utils.d.ts.map +1 -1
  322. package/esm/util/query-utils.js +49 -31
  323. package/esm/util/query-utils.js.map +1 -1
  324. package/esm/util/registry.js.map +1 -1
  325. package/esm/util/validate-zod-schema.d.ts +1 -1
  326. package/esm/util/validate-zod-schema.d.ts.map +1 -1
  327. package/esm/util/validate-zod-schema.js +1 -1
  328. package/esm/util/validate-zod-schema.js.map +1 -1
  329. package/esm/util/validate-zod-schema.test.d.ts.map +1 -0
  330. package/esm/{__tests__/util → util}/validate-zod-schema.test.js +2 -2
  331. package/esm/util/validate-zod-schema.test.js.map +1 -0
  332. package/package.json +25 -11
  333. package/dist/__tests__/util/validate-zod-schema.test.d.ts.map +0 -1
  334. package/dist/__tests__/util/validate-zod-schema.test.js.map +0 -1
  335. package/dist/context-helpers/__tests__/context-helpers-provider.test.d.ts.map +0 -1
  336. package/dist/context-helpers/__tests__/context-helpers-provider.test.js.map +0 -1
  337. package/dist/context-helpers/__tests__/context-helpers.test.d.ts.map +0 -1
  338. package/dist/context-helpers/__tests__/context-helpers.test.js.map +0 -1
  339. package/dist/hooks/__tests__/use-component-state.test.d.ts.map +0 -1
  340. package/dist/hooks/__tests__/use-component-state.test.js.map +0 -1
  341. package/dist/hooks/__tests__/use-message-images.test.d.ts.map +0 -1
  342. package/dist/hooks/__tests__/use-message-images.test.js.map +0 -1
  343. package/dist/hooks/__tests__/use-suggestions.test.d.ts.map +0 -1
  344. package/dist/hooks/__tests__/use-suggestions.test.js.map +0 -1
  345. package/dist/hooks/__tests__/use-tambo-stream-status.test.d.ts.map +0 -1
  346. package/dist/hooks/__tests__/use-tambo-stream-status.test.js.map +0 -1
  347. package/dist/hooks/__tests__/use-tambo-threads.test.d.ts.map +0 -1
  348. package/dist/hooks/__tests__/use-tambo-threads.test.js.map +0 -1
  349. package/dist/mcp/__tests__/elicitation.test.d.ts.map +0 -1
  350. package/dist/mcp/__tests__/elicitation.test.js.map +0 -1
  351. package/dist/mcp/__tests__/mcp-client.test.d.ts.map +0 -1
  352. package/dist/mcp/__tests__/mcp-client.test.js.map +0 -1
  353. package/dist/mcp/__tests__/mcp-hooks.test.d.ts.map +0 -1
  354. package/dist/mcp/__tests__/mcp-hooks.test.js.map +0 -1
  355. package/dist/mcp/__tests__/tambo-mcp-provider.test.d.ts.map +0 -1
  356. package/dist/mcp/__tests__/tambo-mcp-provider.test.js.map +0 -1
  357. package/dist/mcp/__tests__/use-mcp-servers.test.d.ts.map +0 -1
  358. package/dist/mcp/__tests__/use-mcp-servers.test.js.map +0 -1
  359. package/dist/providers/__tests__/tambo-context-attachment-provider.test.d.ts.map +0 -1
  360. package/dist/providers/__tests__/tambo-context-attachment-provider.test.js.map +0 -1
  361. package/dist/providers/__tests__/tambo-context-helpers-provider.test.d.ts.map +0 -1
  362. package/dist/providers/__tests__/tambo-context-helpers-provider.test.js.map +0 -1
  363. package/dist/providers/__tests__/tambo-interactable-provider-partial-updates.test.d.ts.map +0 -1
  364. package/dist/providers/__tests__/tambo-interactable-provider-partial-updates.test.js.map +0 -1
  365. package/dist/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts.map +0 -1
  366. package/dist/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.js.map +0 -1
  367. package/dist/providers/__tests__/tambo-interactables-additional-context.test.d.ts.map +0 -1
  368. package/dist/providers/__tests__/tambo-interactables-additional-context.test.js.map +0 -1
  369. package/dist/providers/__tests__/tambo-prop-stream-provider.test.d.ts.map +0 -1
  370. package/dist/providers/__tests__/tambo-prop-stream-provider.test.js.map +0 -1
  371. package/dist/providers/__tests__/tambo-registry-provider.test.d.ts.map +0 -1
  372. package/dist/providers/__tests__/tambo-registry-provider.test.js.map +0 -1
  373. package/dist/providers/__tests__/tambo-stubs.test.d.ts.map +0 -1
  374. package/dist/providers/__tests__/tambo-stubs.test.js.map +0 -1
  375. package/dist/providers/__tests__/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
  376. package/dist/providers/__tests__/tambo-thread-provider-initial-messages.test.js.map +0 -1
  377. package/dist/providers/__tests__/tambo-thread-provider.test.d.ts.map +0 -1
  378. package/dist/providers/__tests__/tambo-thread-provider.test.js.map +0 -1
  379. package/dist/providers/hooks/__tests__/use-tambo-session-token.test.d.ts.map +0 -1
  380. package/dist/providers/hooks/__tests__/use-tambo-session-token.test.js.map +0 -1
  381. package/dist/util/__tests__/content-parts.test.d.ts.map +0 -1
  382. package/dist/util/__tests__/content-parts.test.js.map +0 -1
  383. package/dist/util/__tests__/message-builder.test.d.ts.map +0 -1
  384. package/dist/util/__tests__/message-builder.test.js.map +0 -1
  385. package/esm/__tests__/util/validate-zod-schema.test.d.ts.map +0 -1
  386. package/esm/__tests__/util/validate-zod-schema.test.js.map +0 -1
  387. package/esm/context-helpers/__tests__/context-helpers-provider.test.d.ts.map +0 -1
  388. package/esm/context-helpers/__tests__/context-helpers-provider.test.js.map +0 -1
  389. package/esm/context-helpers/__tests__/context-helpers.test.d.ts.map +0 -1
  390. package/esm/context-helpers/__tests__/context-helpers.test.js.map +0 -1
  391. package/esm/hooks/__tests__/use-component-state.test.d.ts.map +0 -1
  392. package/esm/hooks/__tests__/use-component-state.test.js.map +0 -1
  393. package/esm/hooks/__tests__/use-message-images.test.d.ts.map +0 -1
  394. package/esm/hooks/__tests__/use-message-images.test.js.map +0 -1
  395. package/esm/hooks/__tests__/use-suggestions.test.d.ts.map +0 -1
  396. package/esm/hooks/__tests__/use-suggestions.test.js.map +0 -1
  397. package/esm/hooks/__tests__/use-tambo-stream-status.test.d.ts.map +0 -1
  398. package/esm/hooks/__tests__/use-tambo-stream-status.test.js.map +0 -1
  399. package/esm/hooks/__tests__/use-tambo-threads.test.d.ts.map +0 -1
  400. package/esm/hooks/__tests__/use-tambo-threads.test.js.map +0 -1
  401. package/esm/mcp/__tests__/elicitation.test.d.ts.map +0 -1
  402. package/esm/mcp/__tests__/elicitation.test.js.map +0 -1
  403. package/esm/mcp/__tests__/mcp-client.test.d.ts.map +0 -1
  404. package/esm/mcp/__tests__/mcp-client.test.js.map +0 -1
  405. package/esm/mcp/__tests__/mcp-hooks.test.d.ts.map +0 -1
  406. package/esm/mcp/__tests__/mcp-hooks.test.js.map +0 -1
  407. package/esm/mcp/__tests__/tambo-mcp-provider.test.d.ts.map +0 -1
  408. package/esm/mcp/__tests__/tambo-mcp-provider.test.js.map +0 -1
  409. package/esm/mcp/__tests__/use-mcp-servers.test.d.ts.map +0 -1
  410. package/esm/mcp/__tests__/use-mcp-servers.test.js.map +0 -1
  411. package/esm/providers/__tests__/tambo-context-attachment-provider.test.d.ts.map +0 -1
  412. package/esm/providers/__tests__/tambo-context-attachment-provider.test.js.map +0 -1
  413. package/esm/providers/__tests__/tambo-context-helpers-provider.test.d.ts.map +0 -1
  414. package/esm/providers/__tests__/tambo-context-helpers-provider.test.js.map +0 -1
  415. package/esm/providers/__tests__/tambo-interactable-provider-partial-updates.test.d.ts.map +0 -1
  416. package/esm/providers/__tests__/tambo-interactable-provider-partial-updates.test.js.map +0 -1
  417. package/esm/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts.map +0 -1
  418. package/esm/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.js.map +0 -1
  419. package/esm/providers/__tests__/tambo-interactables-additional-context.test.d.ts.map +0 -1
  420. package/esm/providers/__tests__/tambo-interactables-additional-context.test.js.map +0 -1
  421. package/esm/providers/__tests__/tambo-prop-stream-provider.test.d.ts.map +0 -1
  422. package/esm/providers/__tests__/tambo-prop-stream-provider.test.js.map +0 -1
  423. package/esm/providers/__tests__/tambo-registry-provider.test.d.ts.map +0 -1
  424. package/esm/providers/__tests__/tambo-registry-provider.test.js.map +0 -1
  425. package/esm/providers/__tests__/tambo-stubs.test.d.ts.map +0 -1
  426. package/esm/providers/__tests__/tambo-stubs.test.js.map +0 -1
  427. package/esm/providers/__tests__/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
  428. package/esm/providers/__tests__/tambo-thread-provider-initial-messages.test.js.map +0 -1
  429. package/esm/providers/__tests__/tambo-thread-provider.test.d.ts.map +0 -1
  430. package/esm/providers/__tests__/tambo-thread-provider.test.js.map +0 -1
  431. package/esm/providers/hooks/__tests__/use-tambo-session-token.test.d.ts.map +0 -1
  432. package/esm/providers/hooks/__tests__/use-tambo-session-token.test.js.map +0 -1
  433. package/esm/util/__tests__/content-parts.test.d.ts.map +0 -1
  434. package/esm/util/__tests__/content-parts.test.js.map +0 -1
  435. package/esm/util/__tests__/message-builder.test.d.ts.map +0 -1
  436. package/esm/util/__tests__/message-builder.test.js.map +0 -1
  437. /package/dist/context-helpers/{__tests__/context-helpers-provider.test.d.ts → context-helpers-provider.test.d.ts} +0 -0
  438. /package/dist/context-helpers/{__tests__/context-helpers.test.d.ts → context-helpers.test.d.ts} +0 -0
  439. /package/dist/hooks/{__tests__/use-component-state.test.d.ts → use-component-state.test.d.ts} +0 -0
  440. /package/dist/hooks/{__tests__/use-message-images.test.d.ts → use-message-images.test.d.ts} +0 -0
  441. /package/dist/hooks/{__tests__/use-suggestions.test.d.ts → use-suggestions.test.d.ts} +0 -0
  442. /package/dist/hooks/{__tests__/use-tambo-stream-status.test.d.ts → use-tambo-stream-status.test.d.ts} +0 -0
  443. /package/dist/hooks/{__tests__/use-tambo-threads.test.d.ts → use-tambo-threads.test.d.ts} +0 -0
  444. /package/dist/mcp/{__tests__/elicitation.test.d.ts → elicitation.test.d.ts} +0 -0
  445. /package/dist/mcp/{__tests__/mcp-client.test.d.ts → mcp-client.test.d.ts} +0 -0
  446. /package/dist/mcp/{__tests__/mcp-hooks.test.d.ts → mcp-hooks.test.d.ts} +0 -0
  447. /package/dist/mcp/{__tests__/tambo-mcp-provider.test.d.ts → tambo-mcp-provider.test.d.ts} +0 -0
  448. /package/dist/mcp/{__tests__/use-mcp-servers.test.d.ts → use-mcp-servers.test.d.ts} +0 -0
  449. /package/dist/providers/hooks/{__tests__/use-tambo-session-token.test.d.ts → use-tambo-session-token.test.d.ts} +0 -0
  450. /package/dist/providers/{__tests__/tambo-context-attachment-provider.test.d.ts → tambo-context-attachment-provider.test.d.ts} +0 -0
  451. /package/dist/providers/{__tests__/tambo-context-helpers-provider.test.d.ts → tambo-context-helpers-provider.test.d.ts} +0 -0
  452. /package/dist/providers/{__tests__/tambo-interactable-provider-partial-updates.test.d.ts → tambo-interactable-provider-partial-updates.test.d.ts} +0 -0
  453. /package/dist/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts → tambo-interactables-additional-context-edge-cases.test.d.ts} +0 -0
  454. /package/dist/providers/{__tests__/tambo-interactables-additional-context.test.d.ts → tambo-interactables-additional-context.test.d.ts} +0 -0
  455. /package/dist/providers/{__tests__/tambo-prop-stream-provider.test.d.ts → tambo-prop-stream-provider.test.d.ts} +0 -0
  456. /package/dist/providers/{__tests__/tambo-registry-provider.test.d.ts → tambo-registry-provider.test.d.ts} +0 -0
  457. /package/dist/providers/{__tests__/tambo-stubs.test.d.ts → tambo-stubs.test.d.ts} +0 -0
  458. /package/dist/providers/{__tests__/tambo-thread-provider-initial-messages.test.d.ts → tambo-thread-provider-initial-messages.test.d.ts} +0 -0
  459. /package/dist/providers/{__tests__/tambo-thread-provider.test.d.ts → tambo-thread-provider.test.d.ts} +0 -0
  460. /package/dist/util/{__tests__/content-parts.test.d.ts → content-parts.test.d.ts} +0 -0
  461. /package/dist/util/{__tests__/message-builder.test.d.ts → message-builder.test.d.ts} +0 -0
  462. /package/dist/{__tests__/util → util}/validate-zod-schema.test.d.ts +0 -0
  463. /package/esm/context-helpers/{__tests__/context-helpers-provider.test.d.ts → context-helpers-provider.test.d.ts} +0 -0
  464. /package/esm/context-helpers/{__tests__/context-helpers.test.d.ts → context-helpers.test.d.ts} +0 -0
  465. /package/esm/hooks/{__tests__/use-component-state.test.d.ts → use-component-state.test.d.ts} +0 -0
  466. /package/esm/hooks/{__tests__/use-message-images.test.d.ts → use-message-images.test.d.ts} +0 -0
  467. /package/esm/hooks/{__tests__/use-suggestions.test.d.ts → use-suggestions.test.d.ts} +0 -0
  468. /package/esm/hooks/{__tests__/use-tambo-stream-status.test.d.ts → use-tambo-stream-status.test.d.ts} +0 -0
  469. /package/esm/hooks/{__tests__/use-tambo-threads.test.d.ts → use-tambo-threads.test.d.ts} +0 -0
  470. /package/esm/mcp/{__tests__/elicitation.test.d.ts → elicitation.test.d.ts} +0 -0
  471. /package/esm/mcp/{__tests__/mcp-client.test.d.ts → mcp-client.test.d.ts} +0 -0
  472. /package/esm/mcp/{__tests__/mcp-hooks.test.d.ts → mcp-hooks.test.d.ts} +0 -0
  473. /package/esm/mcp/{__tests__/tambo-mcp-provider.test.d.ts → tambo-mcp-provider.test.d.ts} +0 -0
  474. /package/esm/mcp/{__tests__/use-mcp-servers.test.d.ts → use-mcp-servers.test.d.ts} +0 -0
  475. /package/esm/providers/hooks/{__tests__/use-tambo-session-token.test.d.ts → use-tambo-session-token.test.d.ts} +0 -0
  476. /package/esm/providers/{__tests__/tambo-context-attachment-provider.test.d.ts → tambo-context-attachment-provider.test.d.ts} +0 -0
  477. /package/esm/providers/{__tests__/tambo-context-helpers-provider.test.d.ts → tambo-context-helpers-provider.test.d.ts} +0 -0
  478. /package/esm/providers/{__tests__/tambo-interactable-provider-partial-updates.test.d.ts → tambo-interactable-provider-partial-updates.test.d.ts} +0 -0
  479. /package/esm/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts → tambo-interactables-additional-context-edge-cases.test.d.ts} +0 -0
  480. /package/esm/providers/{__tests__/tambo-interactables-additional-context.test.d.ts → tambo-interactables-additional-context.test.d.ts} +0 -0
  481. /package/esm/providers/{__tests__/tambo-prop-stream-provider.test.d.ts → tambo-prop-stream-provider.test.d.ts} +0 -0
  482. /package/esm/providers/{__tests__/tambo-registry-provider.test.d.ts → tambo-registry-provider.test.d.ts} +0 -0
  483. /package/esm/providers/{__tests__/tambo-stubs.test.d.ts → tambo-stubs.test.d.ts} +0 -0
  484. /package/esm/providers/{__tests__/tambo-thread-provider-initial-messages.test.d.ts → tambo-thread-provider-initial-messages.test.d.ts} +0 -0
  485. /package/esm/providers/{__tests__/tambo-thread-provider.test.d.ts → tambo-thread-provider.test.d.ts} +0 -0
  486. /package/esm/util/{__tests__/content-parts.test.d.ts → content-parts.test.d.ts} +0 -0
  487. /package/esm/util/{__tests__/message-builder.test.d.ts → message-builder.test.d.ts} +0 -0
  488. /package/esm/{__tests__/util → util}/validate-zod-schema.test.d.ts +0 -0
@@ -11,26 +11,31 @@ exports.combineQueryResults = combineQueryResults;
11
11
  * @returns The combined mutation result
12
12
  */
13
13
  function combineMutationResults(resultA, resultB) {
14
- {
15
- return {
16
- isPending: resultA.isPending || resultB.isPending,
17
- isSuccess: resultA.isSuccess && resultB.isSuccess,
18
- isError: resultA.isError || resultB.isError,
19
- isIdle: resultA.isIdle && resultB.isIdle,
20
- isPaused: resultA.isPaused || resultB.isPaused,
21
- submittedAt: resultA.submittedAt || resultB.submittedAt,
22
- status: resultA.isPending || resultB.isPending
23
- ? "pending"
24
- : resultA.isError || resultB.isError
25
- ? "error"
26
- : resultA.isSuccess && resultB.isSuccess
27
- ? "success"
28
- : "idle",
29
- error: resultA.error ?? resultB.error,
30
- failureCount: resultA.failureCount + resultB.failureCount,
31
- failureReason: resultA.failureReason ?? resultB.failureReason,
32
- };
14
+ let status;
15
+ if (resultA.isPending || resultB.isPending) {
16
+ status = "pending";
33
17
  }
18
+ else if (resultA.isError || resultB.isError) {
19
+ status = "error";
20
+ }
21
+ else if (resultA.isSuccess && resultB.isSuccess) {
22
+ status = "success";
23
+ }
24
+ else {
25
+ status = "idle";
26
+ }
27
+ return {
28
+ isPending: resultA.isPending || resultB.isPending,
29
+ isSuccess: resultA.isSuccess && resultB.isSuccess,
30
+ isError: resultA.isError || resultB.isError,
31
+ isIdle: resultA.isIdle && resultB.isIdle,
32
+ isPaused: resultA.isPaused || resultB.isPaused,
33
+ submittedAt: resultA.submittedAt || resultB.submittedAt,
34
+ status,
35
+ error: resultA.error ?? resultB.error,
36
+ failureCount: resultA.failureCount + resultB.failureCount,
37
+ failureReason: resultA.failureReason ?? resultB.failureReason,
38
+ };
34
39
  }
35
40
  /**
36
41
  * Combines two query results, showing the "loading state" of the two queries.
@@ -41,6 +46,29 @@ function combineMutationResults(resultA, resultB) {
41
46
  * @returns The combined query result
42
47
  */
43
48
  function combineQueryResults(resultA, resultB) {
49
+ let status;
50
+ if (resultA.isPending || resultB.isPending) {
51
+ status = "pending";
52
+ }
53
+ else if (resultA.isError || resultB.isError) {
54
+ status = "error";
55
+ }
56
+ else if (resultA.isSuccess && resultB.isSuccess) {
57
+ status = "success";
58
+ }
59
+ else {
60
+ status = "pending";
61
+ }
62
+ let fetchStatus;
63
+ if (resultA.isFetching || resultB.isFetching) {
64
+ fetchStatus = "fetching";
65
+ }
66
+ else if (resultA.isPaused || resultB.isPaused) {
67
+ fetchStatus = "paused";
68
+ }
69
+ else {
70
+ fetchStatus = "idle";
71
+ }
44
72
  return {
45
73
  isPending: resultA.isPending || resultB.isPending,
46
74
  isSuccess: resultA.isSuccess && resultB.isSuccess,
@@ -57,22 +85,12 @@ function combineQueryResults(resultA, resultB) {
57
85
  isStale: resultA.isStale || resultB.isStale,
58
86
  isRefetching: resultA.isRefetching || resultB.isRefetching,
59
87
  isFetching: resultA.isFetching || resultB.isFetching,
60
- status: resultA.isPending || resultB.isPending
61
- ? "pending"
62
- : resultA.isError || resultB.isError
63
- ? "error"
64
- : resultA.isSuccess && resultB.isSuccess
65
- ? "success"
66
- : "pending",
88
+ status,
67
89
  error: resultA.error ?? resultB.error,
68
90
  failureCount: resultA.failureCount + resultB.failureCount,
69
91
  failureReason: resultA.failureReason ?? resultB.failureReason,
70
92
  errorUpdateCount: resultA.errorUpdateCount + resultB.errorUpdateCount,
71
- fetchStatus: resultA.isFetching || resultB.isFetching
72
- ? "fetching"
73
- : resultA.isPaused || resultB.isPaused
74
- ? "paused"
75
- : "idle",
93
+ fetchStatus,
76
94
  dataUpdatedAt: Math.max(resultA.dataUpdatedAt, resultB.dataUpdatedAt),
77
95
  errorUpdatedAt: Math.max(resultA.errorUpdatedAt, resultB.errorUpdatedAt),
78
96
  };
@@ -1 +1 @@
1
- {"version":3,"file":"query-utils.js","sourceRoot":"","sources":["../../src/util/query-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { UseMutationResult, UseQueryResult } from \"@tanstack/react-query\";\n\nexport type CombinedMutationResult<\n TData = unknown,\n TError = unknown,\n TVariables = unknown,\n TContext = unknown,\n> = Omit<\n UseMutationResult<TData, TError, TVariables, TContext>,\n \"mutate\" | \"mutateAsync\" | \"reset\" | \"data\" | \"variables\" | \"context\"\n>;\n\n/**\n * Combines two mutation results, showing the \"loading state\" of the two\n * mutations. For instance, if either mutation is pending, the combined\n * mutation result will be pending.\n * @param resultA - The first mutation result\n * @param resultB - The second mutation result\n * @returns The combined mutation result\n */\nexport function combineMutationResults<TData1, TData2, TError1, TError2>(\n resultA: UseMutationResult<TData1, TError1, any, any>,\n resultB: UseMutationResult<TData2, TError2, any, any>,\n): CombinedMutationResult<TData1 | TData2, TError1 | TError2> {\n {\n return {\n isPending: resultA.isPending || resultB.isPending,\n isSuccess: resultA.isSuccess && resultB.isSuccess,\n isError: resultA.isError || resultB.isError,\n isIdle: resultA.isIdle && resultB.isIdle,\n isPaused: resultA.isPaused || resultB.isPaused,\n submittedAt: resultA.submittedAt || resultB.submittedAt,\n status:\n resultA.isPending || resultB.isPending\n ? \"pending\"\n : resultA.isError || resultB.isError\n ? \"error\"\n : resultA.isSuccess && resultB.isSuccess\n ? \"success\"\n : \"idle\",\n error: resultA.error ?? resultB.error,\n failureCount: resultA.failureCount + resultB.failureCount,\n failureReason: resultA.failureReason ?? resultB.failureReason,\n };\n }\n}\n\nexport type CombinedQueryResult<TData1, TData2, TError1, TError2> = Omit<\n UseQueryResult<TData1 | TData2, TError1 | TError2>,\n \"data\" | \"refetch\" | \"promise\"\n>;\n/**\n * Combines two query results, showing the \"loading state\" of the two queries.\n * For instance, if either query is loading, the combined query result will be\n * loading.\n * @param resultA - The first query result\n * @param resultB - The second query result\n * @returns The combined query result\n */\nexport function combineQueryResults<TData1, TData2, TError1, TError2>(\n resultA: UseQueryResult<TData1, TError1>,\n resultB: UseQueryResult<TData2, TError2>,\n): CombinedQueryResult<void, void, TError1, TError2> {\n return {\n isPending: resultA.isPending || resultB.isPending,\n isSuccess: resultA.isSuccess && resultB.isSuccess,\n isError: resultA.isError || resultB.isError,\n isEnabled: resultA.isEnabled && resultB.isEnabled,\n isLoading: resultA.isLoading || resultB.isLoading,\n isFetched: resultA.isFetched && resultB.isFetched,\n isFetchedAfterMount:\n resultA.isFetchedAfterMount && resultB.isFetchedAfterMount,\n isInitialLoading: resultA.isInitialLoading || resultB.isInitialLoading,\n isPaused: resultA.isPaused || resultB.isPaused,\n isLoadingError: resultA.isLoadingError || resultB.isLoadingError,\n isRefetchError: resultA.isRefetchError || resultB.isRefetchError,\n isPlaceholderData: resultA.isPlaceholderData || resultB.isPlaceholderData,\n isStale: resultA.isStale || resultB.isStale,\n isRefetching: resultA.isRefetching || resultB.isRefetching,\n isFetching: resultA.isFetching || resultB.isFetching,\n status:\n resultA.isPending || resultB.isPending\n ? \"pending\"\n : resultA.isError || resultB.isError\n ? \"error\"\n : resultA.isSuccess && resultB.isSuccess\n ? \"success\"\n : \"pending\",\n error: resultA.error ?? resultB.error,\n failureCount: resultA.failureCount + resultB.failureCount,\n failureReason: resultA.failureReason ?? resultB.failureReason,\n errorUpdateCount: resultA.errorUpdateCount + resultB.errorUpdateCount,\n fetchStatus:\n resultA.isFetching || resultB.isFetching\n ? \"fetching\"\n : resultA.isPaused || resultB.isPaused\n ? \"paused\"\n : \"idle\",\n dataUpdatedAt: Math.max(resultA.dataUpdatedAt, resultB.dataUpdatedAt),\n errorUpdatedAt: Math.max(resultA.errorUpdatedAt, resultB.errorUpdatedAt),\n };\n}\n"]}
1
+ {"version":3,"file":"query-utils.js","sourceRoot":"","sources":["../../src/util/query-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { UseMutationResult, UseQueryResult } from \"@tanstack/react-query\";\n\nexport type CombinedMutationResult<\n TData = unknown,\n TError = unknown,\n TVariables = unknown,\n TContext = unknown,\n> = Omit<\n UseMutationResult<TData, TError, TVariables, TContext>,\n \"mutate\" | \"mutateAsync\" | \"reset\" | \"data\" | \"variables\" | \"context\"\n>;\n\n/**\n * Combines two mutation results, showing the \"loading state\" of the two\n * mutations. For instance, if either mutation is pending, the combined\n * mutation result will be pending.\n * @param resultA - The first mutation result\n * @param resultB - The second mutation result\n * @returns The combined mutation result\n */\nexport function combineMutationResults<TData1, TData2, TError1, TError2>(\n resultA: UseMutationResult<TData1, TError1, any, any>,\n resultB: UseMutationResult<TData2, TError2, any, any>,\n): CombinedMutationResult<TData1 | TData2, TError1 | TError2> {\n let status: \"pending\" | \"error\" | \"success\" | \"idle\";\n if (resultA.isPending || resultB.isPending) {\n status = \"pending\";\n } else if (resultA.isError || resultB.isError) {\n status = \"error\";\n } else if (resultA.isSuccess && resultB.isSuccess) {\n status = \"success\";\n } else {\n status = \"idle\";\n }\n\n return {\n isPending: resultA.isPending || resultB.isPending,\n isSuccess: resultA.isSuccess && resultB.isSuccess,\n isError: resultA.isError || resultB.isError,\n isIdle: resultA.isIdle && resultB.isIdle,\n isPaused: resultA.isPaused || resultB.isPaused,\n submittedAt: resultA.submittedAt || resultB.submittedAt,\n status,\n error: resultA.error ?? resultB.error,\n failureCount: resultA.failureCount + resultB.failureCount,\n failureReason: resultA.failureReason ?? resultB.failureReason,\n };\n}\n\nexport type CombinedQueryResult<TData1, TData2, TError1, TError2> = Omit<\n UseQueryResult<TData1 | TData2, TError1 | TError2>,\n \"data\" | \"refetch\" | \"promise\"\n>;\n/**\n * Combines two query results, showing the \"loading state\" of the two queries.\n * For instance, if either query is loading, the combined query result will be\n * loading.\n * @param resultA - The first query result\n * @param resultB - The second query result\n * @returns The combined query result\n */\nexport function combineQueryResults<TData1, TData2, TError1, TError2>(\n resultA: UseQueryResult<TData1, TError1>,\n resultB: UseQueryResult<TData2, TError2>,\n): CombinedQueryResult<void, void, TError1, TError2> {\n let status: \"pending\" | \"error\" | \"success\";\n if (resultA.isPending || resultB.isPending) {\n status = \"pending\";\n } else if (resultA.isError || resultB.isError) {\n status = \"error\";\n } else if (resultA.isSuccess && resultB.isSuccess) {\n status = \"success\";\n } else {\n status = \"pending\";\n }\n\n let fetchStatus: \"fetching\" | \"paused\" | \"idle\";\n if (resultA.isFetching || resultB.isFetching) {\n fetchStatus = \"fetching\";\n } else if (resultA.isPaused || resultB.isPaused) {\n fetchStatus = \"paused\";\n } else {\n fetchStatus = \"idle\";\n }\n\n return {\n isPending: resultA.isPending || resultB.isPending,\n isSuccess: resultA.isSuccess && resultB.isSuccess,\n isError: resultA.isError || resultB.isError,\n isEnabled: resultA.isEnabled && resultB.isEnabled,\n isLoading: resultA.isLoading || resultB.isLoading,\n isFetched: resultA.isFetched && resultB.isFetched,\n isFetchedAfterMount:\n resultA.isFetchedAfterMount && resultB.isFetchedAfterMount,\n isInitialLoading: resultA.isInitialLoading || resultB.isInitialLoading,\n isPaused: resultA.isPaused || resultB.isPaused,\n isLoadingError: resultA.isLoadingError || resultB.isLoadingError,\n isRefetchError: resultA.isRefetchError || resultB.isRefetchError,\n isPlaceholderData: resultA.isPlaceholderData || resultB.isPlaceholderData,\n isStale: resultA.isStale || resultB.isStale,\n isRefetching: resultA.isRefetching || resultB.isRefetching,\n isFetching: resultA.isFetching || resultB.isFetching,\n status,\n error: resultA.error ?? resultB.error,\n failureCount: resultA.failureCount + resultB.failureCount,\n failureReason: resultA.failureReason ?? resultB.failureReason,\n errorUpdateCount: resultA.errorUpdateCount + resultB.errorUpdateCount,\n fetchStatus,\n dataUpdatedAt: Math.max(resultA.dataUpdatedAt, resultB.dataUpdatedAt),\n errorUpdatedAt: Math.max(resultA.errorUpdatedAt, resultB.errorUpdatedAt),\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/util/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport {\n ComponentContextToolMetadata,\n ComponentRegistry,\n JSONSchemaLite,\n ParameterSpec,\n RegisteredComponent,\n TamboTool,\n TamboToolAssociations,\n TamboToolRegistry,\n} from \"../model/component-metadata\";\n\n/**\n * Get all the available components from the component registry\n * @param componentRegistry - The component registry\n * @param toolRegistry - The tool registry\n * @param toolAssociations - The tool associations\n * @returns The available components\n */\nexport const getAvailableComponents = (\n componentRegistry: ComponentRegistry,\n toolRegistry: TamboToolRegistry,\n toolAssociations: TamboToolAssociations,\n): TamboAI.AvailableComponent[] => {\n const availableComponents: TamboAI.AvailableComponent[] = [];\n\n for (const [name, componentEntry] of Object.entries(componentRegistry)) {\n const associatedToolNames = toolAssociations[name] || [];\n\n const contextTools = [\n ...associatedToolNames.map((toolName) => {\n const tool = toolRegistry[toolName];\n if (!tool) return null;\n return mapTamboToolToContextTool(tool);\n }),\n ].filter((tool): tool is ComponentContextToolMetadata => tool !== null);\n\n availableComponents.push({\n name: componentEntry.name,\n description: componentEntry.description,\n props: componentEntry.props,\n contextTools,\n });\n }\n\n return availableComponents;\n};\n\n/**\n * Get tools from tool registry that are not associated with any component\n * @param toolRegistry - The tool registry\n * @param toolAssociations - The tool associations\n * @returns The tools that are not associated with any component\n */\nexport const getUnassociatedTools = (\n toolRegistry: TamboToolRegistry,\n toolAssociations: TamboToolAssociations,\n): TamboTool[] => {\n return Object.values(toolRegistry).filter((tool) => {\n // Check if the tool's name appears in any of the tool association arrays\n return !Object.values(toolAssociations).flat().includes(tool.name);\n });\n};\n\n/**\n * Helper function to convert component props from Zod schema to JSON Schema\n * @param component - The component to convert\n * @returns The converted props\n */\nexport const convertPropsToJsonSchema = (\n component: RegisteredComponent,\n): any => {\n if (!component.props) {\n return component.props;\n }\n\n // Check if props is a Zod schema (we can't directly check the type, so we check for _def)\n if (component.props._def && typeof component.props.parse === \"function\") {\n // Use two-step type assertion for safety\n return zodToJsonSchema(component.props as unknown as z.ZodTypeAny);\n }\n\n return component.props;\n};\n\n/**\n * Get a component by name from the component registry\n * @param componentName - The name of the component to get\n * @param componentRegistry - The component registry\n * @returns The component registration information\n */\nexport const getComponentFromRegistry = (\n componentName: string,\n componentRegistry: ComponentRegistry,\n): RegisteredComponent => {\n const componentEntry = componentRegistry[componentName];\n\n if (!componentEntry) {\n throw new Error(\n `Tambo tried to use Component ${componentName}, but it was not found.`,\n );\n }\n\n return componentEntry;\n};\n\n/**\n * Map a Tambo tool to a context tool\n * @param tool - The tool to map\n * @returns The context tool\n */\nexport const mapTamboToolToContextTool = (\n tool: TamboTool,\n): ComponentContextToolMetadata => {\n const parameters = getParametersFromZodFunction(tool.toolSchema);\n\n return {\n name: tool.name,\n description: tool.description,\n parameters,\n };\n};\n\nfunction isJsonSchema(\n schema: unknown,\n): schema is ReturnType<typeof zodToJsonSchema> {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n \"type\" in schema &&\n typeof (schema as { type: unknown }).type === \"string\" &&\n (schema as { type: string }).type === \"object\"\n );\n}\n\nconst getParametersFromZodFunction = (\n schema: z.ZodFunction<any, any> | JSONSchemaLite,\n): ParameterSpec[] => {\n if (isJsonSchema(schema)) {\n return [\n {\n name: \"args\",\n type: \"object\",\n description: schema.description ?? \"\",\n isRequired: true,\n schema: schema,\n },\n ];\n }\n\n const parameters: z.ZodTuple = schema.parameters();\n return parameters.items.map((param, index): ParameterSpec => {\n const name = `param${index + 1}`;\n const type = getZodBaseType(param);\n const description = param.description ?? \"\";\n const isRequired = !param.isOptional();\n const schema = zodToJsonSchema(param);\n\n return {\n name,\n type,\n description,\n isRequired,\n schema,\n };\n });\n};\n\nconst getZodBaseType = (schema: z.ZodTypeAny): string => {\n const typeName = schema._def.typeName;\n switch (typeName) {\n case \"ZodString\":\n return \"string\";\n case \"ZodNumber\":\n return \"number\";\n case \"ZodBoolean\":\n return \"boolean\";\n case \"ZodArray\":\n return \"array\";\n case \"ZodEnum\":\n return \"enum\";\n case \"ZodDate\":\n return \"date\";\n case \"ZodObject\":\n return \"object\";\n default:\n console.warn(\"falling back to string for\", typeName);\n return \"string\";\n }\n};\n"]}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/util/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { z } from \"zod/v3\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport {\n ComponentContextToolMetadata,\n ComponentRegistry,\n JSONSchemaLite,\n ParameterSpec,\n RegisteredComponent,\n TamboTool,\n TamboToolAssociations,\n TamboToolRegistry,\n} from \"../model/component-metadata\";\n\n/**\n * Get all the available components from the component registry\n * @param componentRegistry - The component registry\n * @param toolRegistry - The tool registry\n * @param toolAssociations - The tool associations\n * @returns The available components\n */\nexport const getAvailableComponents = (\n componentRegistry: ComponentRegistry,\n toolRegistry: TamboToolRegistry,\n toolAssociations: TamboToolAssociations,\n): TamboAI.AvailableComponent[] => {\n const availableComponents: TamboAI.AvailableComponent[] = [];\n\n for (const [name, componentEntry] of Object.entries(componentRegistry)) {\n const associatedToolNames = toolAssociations[name] || [];\n\n const contextTools = [\n ...associatedToolNames.map((toolName) => {\n const tool = toolRegistry[toolName];\n if (!tool) return null;\n return mapTamboToolToContextTool(tool);\n }),\n ].filter((tool): tool is ComponentContextToolMetadata => tool !== null);\n\n availableComponents.push({\n name: componentEntry.name,\n description: componentEntry.description,\n props: componentEntry.props,\n contextTools,\n });\n }\n\n return availableComponents;\n};\n\n/**\n * Get tools from tool registry that are not associated with any component\n * @param toolRegistry - The tool registry\n * @param toolAssociations - The tool associations\n * @returns The tools that are not associated with any component\n */\nexport const getUnassociatedTools = (\n toolRegistry: TamboToolRegistry,\n toolAssociations: TamboToolAssociations,\n): TamboTool[] => {\n return Object.values(toolRegistry).filter((tool) => {\n // Check if the tool's name appears in any of the tool association arrays\n return !Object.values(toolAssociations).flat().includes(tool.name);\n });\n};\n\n/**\n * Helper function to convert component props from Zod schema to JSON Schema\n * @param component - The component to convert\n * @returns The converted props\n */\nexport const convertPropsToJsonSchema = (\n component: RegisteredComponent,\n): any => {\n if (!component.props) {\n return component.props;\n }\n\n // Check if props is a Zod schema (we can't directly check the type, so we check for _def)\n if (component.props._def && typeof component.props.parse === \"function\") {\n // Use two-step type assertion for safety\n return zodToJsonSchema(component.props as unknown as z.ZodTypeAny);\n }\n\n return component.props;\n};\n\n/**\n * Get a component by name from the component registry\n * @param componentName - The name of the component to get\n * @param componentRegistry - The component registry\n * @returns The component registration information\n */\nexport const getComponentFromRegistry = (\n componentName: string,\n componentRegistry: ComponentRegistry,\n): RegisteredComponent => {\n const componentEntry = componentRegistry[componentName];\n\n if (!componentEntry) {\n throw new Error(\n `Tambo tried to use Component ${componentName}, but it was not found.`,\n );\n }\n\n return componentEntry;\n};\n\n/**\n * Map a Tambo tool to a context tool\n * @param tool - The tool to map\n * @returns The context tool\n */\nexport const mapTamboToolToContextTool = (\n tool: TamboTool,\n): ComponentContextToolMetadata => {\n const parameters = getParametersFromZodFunction(tool.toolSchema);\n\n return {\n name: tool.name,\n description: tool.description,\n parameters,\n };\n};\n\nfunction isJsonSchema(\n schema: unknown,\n): schema is ReturnType<typeof zodToJsonSchema> {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n \"type\" in schema &&\n typeof (schema as { type: unknown }).type === \"string\" &&\n (schema as { type: string }).type === \"object\"\n );\n}\n\nconst getParametersFromZodFunction = (\n schema: z.ZodFunction<any, any> | JSONSchemaLite,\n): ParameterSpec[] => {\n if (isJsonSchema(schema)) {\n return [\n {\n name: \"args\",\n type: \"object\",\n description: schema.description ?? \"\",\n isRequired: true,\n schema: schema,\n },\n ];\n }\n\n const parameters: z.ZodTuple = schema.parameters();\n return parameters.items.map((param, index): ParameterSpec => {\n const name = `param${index + 1}`;\n const type = getZodBaseType(param);\n const description = param.description ?? \"\";\n const isRequired = !param.isOptional();\n const schema = zodToJsonSchema(param);\n\n return {\n name,\n type,\n description,\n isRequired,\n schema,\n };\n });\n};\n\nconst getZodBaseType = (schema: z.ZodTypeAny): string => {\n const typeName = schema._def.typeName;\n switch (typeName) {\n case \"ZodString\":\n return \"string\";\n case \"ZodNumber\":\n return \"number\";\n case \"ZodBoolean\":\n return \"boolean\";\n case \"ZodArray\":\n return \"array\";\n case \"ZodEnum\":\n return \"enum\";\n case \"ZodDate\":\n return \"date\";\n case \"ZodObject\":\n return \"object\";\n default:\n console.warn(\"falling back to string for\", typeName);\n return \"string\";\n }\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { ZodTypeAny } from "zod";
1
+ import { ZodTypeAny } from "zod/v3";
2
2
  /**
3
3
  * Recursively walks a Zod schema and throws when it encounters `z.record()`.
4
4
  * Records are not serialisable to JSON-Schema in a way that the Tambo backend
@@ -1 +1 @@
1
- {"version":3,"file":"validate-zod-schema.d.ts","sourceRoot":"","sources":["../../src/util/validate-zod-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,UAAU,EAAE,MAAM,KAAK,CAAC;AAE3D;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,UAAU,EAClB,WAAW,SAAW,GACrB,IAAI,CA6GN"}
1
+ {"version":3,"file":"validate-zod-schema.d.ts","sourceRoot":"","sources":["../../src/util/validate-zod-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,UAAU,EAClB,WAAW,SAAW,GACrB,IAAI,CA6GN"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assertNoZodRecord = assertNoZodRecord;
4
- const zod_1 = require("zod");
4
+ const v3_1 = require("zod/v3");
5
5
  /**
6
6
  * Recursively walks a Zod schema and throws when it encounters `z.record()`.
7
7
  * Records are not serialisable to JSON-Schema in a way that the Tambo backend
@@ -14,14 +14,14 @@ function assertNoZodRecord(schema, contextName = "schema") {
14
14
  const visit = (current, path) => {
15
15
  if (!current ||
16
16
  typeof current !== "object" ||
17
- !(current instanceof zod_1.z.ZodType))
17
+ !(current instanceof v3_1.z.ZodType))
18
18
  return;
19
19
  if (visited.has(current))
20
20
  return;
21
21
  const def = current._def;
22
22
  const typeName = def?.typeName;
23
23
  // ───────────────────── Disallowed ─────────────────────
24
- if (typeName === zod_1.ZodFirstPartyTypeKind.ZodRecord) {
24
+ if (typeName === v3_1.ZodFirstPartyTypeKind.ZodRecord) {
25
25
  const joined = path.length ? path.join(".") : "(root)";
26
26
  throw new Error(`z.record() is not supported in ${contextName}. ` +
27
27
  `Found at path "${joined}". ` +
@@ -29,40 +29,40 @@ function assertNoZodRecord(schema, contextName = "schema") {
29
29
  }
30
30
  visited.add(current);
31
31
  // ─────────────── Composite / container types ──────────
32
- if (current instanceof zod_1.z.ZodObject) {
32
+ if (current instanceof v3_1.z.ZodObject) {
33
33
  for (const key of Object.keys(current.shape)) {
34
34
  visit(current.shape[key], [...path, key]);
35
35
  }
36
36
  return;
37
37
  }
38
- if (current instanceof zod_1.z.ZodArray) {
38
+ if (current instanceof v3_1.z.ZodArray) {
39
39
  visit(current.element, [...path, "[]"]);
40
40
  return;
41
41
  }
42
- if (current instanceof zod_1.z.ZodTuple) {
42
+ if (current instanceof v3_1.z.ZodTuple) {
43
43
  current.items.forEach((item, idx) => visit(item, [...path, `${idx}`]));
44
44
  return;
45
45
  }
46
- if (current instanceof zod_1.z.ZodUnion) {
46
+ if (current instanceof v3_1.z.ZodUnion) {
47
47
  def.options.forEach((opt, idx) => visit(opt, [...path, `|${idx}`]));
48
48
  return;
49
49
  }
50
- if (current instanceof zod_1.z.ZodDiscriminatedUnion) {
50
+ if (current instanceof v3_1.z.ZodDiscriminatedUnion) {
51
51
  current.options.forEach((opt, idx) => visit(opt, [...path, `|${idx}`]));
52
52
  return;
53
53
  }
54
- if (current instanceof zod_1.z.ZodIntersection) {
54
+ if (current instanceof v3_1.z.ZodIntersection) {
55
55
  visit(def.left, [...path, "&0"]);
56
56
  visit(def.right, [...path, "&1"]);
57
57
  return;
58
58
  }
59
- if (current instanceof zod_1.z.ZodLazy) {
59
+ if (current instanceof v3_1.z.ZodLazy) {
60
60
  visit(def.getter(), path);
61
61
  return;
62
62
  }
63
- if (current instanceof zod_1.z.ZodFunction) {
63
+ if (current instanceof v3_1.z.ZodFunction) {
64
64
  // Check the function arguments for z.record()
65
- if (def.args instanceof zod_1.z.ZodTuple) {
65
+ if (def.args instanceof v3_1.z.ZodTuple) {
66
66
  visit(def.args, [...path, "args"]);
67
67
  }
68
68
  return;
@@ -79,15 +79,15 @@ function assertNoZodRecord(schema, contextName = "schema") {
79
79
  ];
80
80
  for (const key of potentialKeys) {
81
81
  const maybe = def?.[key];
82
- if (maybe instanceof zod_1.z.ZodType)
82
+ if (maybe instanceof v3_1.z.ZodType)
83
83
  visit(maybe, path);
84
84
  else if (Array.isArray(maybe))
85
- maybe.forEach((sub) => sub instanceof zod_1.z.ZodType && visit(sub, path));
85
+ maybe.forEach((sub) => sub instanceof v3_1.z.ZodType && visit(sub, path));
86
86
  }
87
87
  if (typeof def?.getter === "function") {
88
88
  try {
89
89
  const lazySchema = def.getter();
90
- if (lazySchema instanceof zod_1.z.ZodType)
90
+ if (lazySchema instanceof v3_1.z.ZodType)
91
91
  visit(lazySchema, [...path]);
92
92
  }
93
93
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"validate-zod-schema.js","sourceRoot":"","sources":["../../src/util/validate-zod-schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z, ZodFirstPartyTypeKind, ZodTypeAny } from \"zod\";\n\n/**\n * Recursively walks a Zod schema and throws when it encounters `z.record()`.\n * Records are not serialisable to JSON-Schema in a way that the Tambo backend\n * understands, so they are disallowed.\n * @param schema The root Zod schema to inspect.\n * @param contextName A human-readable label echoed in the error message.\n */\nexport function assertNoZodRecord(\n schema: ZodTypeAny,\n contextName = \"schema\",\n): void {\n const visited = new WeakSet<ZodTypeAny>();\n\n const visit = (current: ZodTypeAny, path: string[]): void => {\n if (\n !current ||\n typeof current !== \"object\" ||\n !(current instanceof z.ZodType)\n )\n return;\n if (visited.has(current)) return;\n\n const def: any = current._def;\n const typeName: ZodFirstPartyTypeKind | undefined = def?.typeName;\n\n // ───────────────────── Disallowed ─────────────────────\n if (typeName === ZodFirstPartyTypeKind.ZodRecord) {\n const joined = path.length ? path.join(\".\") : \"(root)\";\n throw new Error(\n `z.record() is not supported in ${contextName}. ` +\n `Found at path \"${joined}\". ` +\n \"Replace it with z.object({ ... }) using explicit keys.\",\n );\n }\n\n visited.add(current);\n\n // ─────────────── Composite / container types ──────────\n if (current instanceof z.ZodObject) {\n for (const key of Object.keys(current.shape)) {\n visit(current.shape[key], [...path, key]);\n }\n return;\n }\n\n if (current instanceof z.ZodArray) {\n visit(current.element, [...path, \"[]\"]);\n return;\n }\n\n if (current instanceof z.ZodTuple) {\n current.items.forEach((item: ZodTypeAny, idx: number) =>\n visit(item, [...path, `${idx}`]),\n );\n return;\n }\n\n if (current instanceof z.ZodUnion) {\n def.options.forEach((opt: ZodTypeAny, idx: number) =>\n visit(opt, [...path, `|${idx}`]),\n );\n return;\n }\n\n if (current instanceof z.ZodDiscriminatedUnion) {\n current.options.forEach((opt: ZodTypeAny, idx: number) =>\n visit(opt, [...path, `|${idx}`]),\n );\n return;\n }\n\n if (current instanceof z.ZodIntersection) {\n visit(def.left, [...path, \"&0\"]);\n visit(def.right, [...path, \"&1\"]);\n return;\n }\n\n if (current instanceof z.ZodLazy) {\n visit(def.getter(), path);\n return;\n }\n\n if (current instanceof z.ZodFunction) {\n // Check the function arguments for z.record()\n if (def.args instanceof z.ZodTuple) {\n visit(def.args, [...path, \"args\"]);\n }\n return;\n }\n\n // ───────────── Wrapper / pass-through types ───────────\n const potentialKeys = [\n \"schema\",\n \"innerType\",\n \"type\",\n \"in\",\n \"out\",\n \"left\",\n \"right\",\n ] as const;\n\n for (const key of potentialKeys) {\n const maybe = def?.[key];\n if (maybe instanceof z.ZodType) visit(maybe, path);\n else if (Array.isArray(maybe))\n maybe.forEach((sub) => sub instanceof z.ZodType && visit(sub, path));\n }\n\n if (typeof def?.getter === \"function\") {\n try {\n const lazySchema = def.getter();\n if (lazySchema instanceof z.ZodType) visit(lazySchema, [...path]);\n } catch {\n // Ignore lazy getter execution errors.\n }\n }\n };\n\n visit(schema, []);\n}\n"]}
1
+ {"version":3,"file":"validate-zod-schema.js","sourceRoot":"","sources":["../../src/util/validate-zod-schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z, ZodFirstPartyTypeKind, ZodTypeAny } from \"zod/v3\";\n\n/**\n * Recursively walks a Zod schema and throws when it encounters `z.record()`.\n * Records are not serialisable to JSON-Schema in a way that the Tambo backend\n * understands, so they are disallowed.\n * @param schema The root Zod schema to inspect.\n * @param contextName A human-readable label echoed in the error message.\n */\nexport function assertNoZodRecord(\n schema: ZodTypeAny,\n contextName = \"schema\",\n): void {\n const visited = new WeakSet<ZodTypeAny>();\n\n const visit = (current: ZodTypeAny, path: string[]): void => {\n if (\n !current ||\n typeof current !== \"object\" ||\n !(current instanceof z.ZodType)\n )\n return;\n if (visited.has(current)) return;\n\n const def: any = current._def;\n const typeName: ZodFirstPartyTypeKind | undefined = def?.typeName;\n\n // ───────────────────── Disallowed ─────────────────────\n if (typeName === ZodFirstPartyTypeKind.ZodRecord) {\n const joined = path.length ? path.join(\".\") : \"(root)\";\n throw new Error(\n `z.record() is not supported in ${contextName}. ` +\n `Found at path \"${joined}\". ` +\n \"Replace it with z.object({ ... }) using explicit keys.\",\n );\n }\n\n visited.add(current);\n\n // ─────────────── Composite / container types ──────────\n if (current instanceof z.ZodObject) {\n for (const key of Object.keys(current.shape)) {\n visit(current.shape[key], [...path, key]);\n }\n return;\n }\n\n if (current instanceof z.ZodArray) {\n visit(current.element, [...path, \"[]\"]);\n return;\n }\n\n if (current instanceof z.ZodTuple) {\n current.items.forEach((item: ZodTypeAny, idx: number) =>\n visit(item, [...path, `${idx}`]),\n );\n return;\n }\n\n if (current instanceof z.ZodUnion) {\n def.options.forEach((opt: ZodTypeAny, idx: number) =>\n visit(opt, [...path, `|${idx}`]),\n );\n return;\n }\n\n if (current instanceof z.ZodDiscriminatedUnion) {\n current.options.forEach((opt: ZodTypeAny, idx: number) =>\n visit(opt, [...path, `|${idx}`]),\n );\n return;\n }\n\n if (current instanceof z.ZodIntersection) {\n visit(def.left, [...path, \"&0\"]);\n visit(def.right, [...path, \"&1\"]);\n return;\n }\n\n if (current instanceof z.ZodLazy) {\n visit(def.getter(), path);\n return;\n }\n\n if (current instanceof z.ZodFunction) {\n // Check the function arguments for z.record()\n if (def.args instanceof z.ZodTuple) {\n visit(def.args, [...path, \"args\"]);\n }\n return;\n }\n\n // ───────────── Wrapper / pass-through types ───────────\n const potentialKeys = [\n \"schema\",\n \"innerType\",\n \"type\",\n \"in\",\n \"out\",\n \"left\",\n \"right\",\n ] as const;\n\n for (const key of potentialKeys) {\n const maybe = def?.[key];\n if (maybe instanceof z.ZodType) visit(maybe, path);\n else if (Array.isArray(maybe))\n maybe.forEach((sub) => sub instanceof z.ZodType && visit(sub, path));\n }\n\n if (typeof def?.getter === \"function\") {\n try {\n const lazySchema = def.getter();\n if (lazySchema instanceof z.ZodType) visit(lazySchema, [...path]);\n } catch {\n // Ignore lazy getter execution errors.\n }\n }\n };\n\n visit(schema, []);\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-zod-schema.test.d.ts","sourceRoot":"","sources":["../../src/util/validate-zod-schema.test.ts"],"names":[],"mappings":""}
@@ -1,95 +1,95 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const zod_1 = require("zod");
4
- const validate_zod_schema_1 = require("../../util/validate-zod-schema");
3
+ const v3_1 = require("zod/v3");
4
+ const validate_zod_schema_1 = require("./validate-zod-schema");
5
5
  describe("assertNoZodRecord", () => {
6
6
  it("should allow valid schemas without records", () => {
7
- const schema = zod_1.z.object({
8
- name: zod_1.z.string(),
9
- age: zod_1.z.number(),
10
- tags: zod_1.z.array(zod_1.z.string()),
11
- address: zod_1.z.object({
12
- street: zod_1.z.string(),
13
- city: zod_1.z.string(),
7
+ const schema = v3_1.z.object({
8
+ name: v3_1.z.string(),
9
+ age: v3_1.z.number(),
10
+ tags: v3_1.z.array(v3_1.z.string()),
11
+ address: v3_1.z.object({
12
+ street: v3_1.z.string(),
13
+ city: v3_1.z.string(),
14
14
  }),
15
15
  });
16
16
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).not.toThrow();
17
17
  });
18
18
  it("should throw when encountering a record at root level", () => {
19
- const schema = zod_1.z.record(zod_1.z.string());
19
+ const schema = v3_1.z.record(v3_1.z.string());
20
20
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "(root)". Replace it with z.object({ ... }) using explicit keys.');
21
21
  });
22
22
  it("should throw when encountering a nested record", () => {
23
- const schema = zod_1.z.object({
24
- name: zod_1.z.string(),
25
- metadata: zod_1.z.record(zod_1.z.string()),
23
+ const schema = v3_1.z.object({
24
+ name: v3_1.z.string(),
25
+ metadata: v3_1.z.record(v3_1.z.string()),
26
26
  });
27
27
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "metadata". Replace it with z.object({ ... }) using explicit keys.');
28
28
  });
29
29
  it("should throw when encountering a record in an array", () => {
30
- const schema = zod_1.z.object({
31
- items: zod_1.z.array(zod_1.z.record(zod_1.z.string())),
30
+ const schema = v3_1.z.object({
31
+ items: v3_1.z.array(v3_1.z.record(v3_1.z.string())),
32
32
  });
33
33
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "items.[]". Replace it with z.object({ ... }) using explicit keys.');
34
34
  });
35
35
  it("should throw when encountering a record in a union", () => {
36
- const schema = zod_1.z.union([zod_1.z.string(), zod_1.z.record(zod_1.z.number())]);
36
+ const schema = v3_1.z.union([v3_1.z.string(), v3_1.z.record(v3_1.z.number())]);
37
37
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "|1". Replace it with z.object({ ... }) using explicit keys.');
38
38
  });
39
39
  it("should throw when encountering a record in an intersection", () => {
40
- const schema = zod_1.z.intersection(zod_1.z.object({ name: zod_1.z.string() }), zod_1.z.object({ metadata: zod_1.z.record(zod_1.z.string()) }));
40
+ const schema = v3_1.z.intersection(v3_1.z.object({ name: v3_1.z.string() }), v3_1.z.object({ metadata: v3_1.z.record(v3_1.z.string()) }));
41
41
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "&1.metadata". Replace it with z.object({ ... }) using explicit keys.');
42
42
  });
43
43
  it("should throw when encountering a record in a discriminated union", () => {
44
- const schema = zod_1.z.discriminatedUnion("type", [
45
- zod_1.z.object({ type: zod_1.z.literal("string"), value: zod_1.z.string() }),
46
- zod_1.z.object({ type: zod_1.z.literal("record"), value: zod_1.z.record(zod_1.z.number()) }),
44
+ const schema = v3_1.z.discriminatedUnion("type", [
45
+ v3_1.z.object({ type: v3_1.z.literal("string"), value: v3_1.z.string() }),
46
+ v3_1.z.object({ type: v3_1.z.literal("record"), value: v3_1.z.record(v3_1.z.number()) }),
47
47
  ]);
48
48
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "|1.value". Replace it with z.object({ ... }) using explicit keys.');
49
49
  });
50
50
  it("should throw when encountering a record in an optional field", () => {
51
- const schema = zod_1.z.object({
52
- optional: zod_1.z.optional(zod_1.z.record(zod_1.z.string())),
51
+ const schema = v3_1.z.object({
52
+ optional: v3_1.z.optional(v3_1.z.record(v3_1.z.string())),
53
53
  });
54
54
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "optional". Replace it with z.object({ ... }) using explicit keys.');
55
55
  });
56
56
  it("should throw when encountering a record in a nullable field", () => {
57
- const schema = zod_1.z.object({
58
- nullable: zod_1.z.nullable(zod_1.z.record(zod_1.z.string())),
57
+ const schema = v3_1.z.object({
58
+ nullable: v3_1.z.nullable(v3_1.z.record(v3_1.z.string())),
59
59
  });
60
60
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "nullable". Replace it with z.object({ ... }) using explicit keys.');
61
61
  });
62
62
  it("should throw when encountering a record in a tuple", () => {
63
- const schema = zod_1.z.tuple([zod_1.z.string(), zod_1.z.record(zod_1.z.number())]);
63
+ const schema = v3_1.z.tuple([v3_1.z.string(), v3_1.z.record(v3_1.z.number())]);
64
64
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "1". Replace it with z.object({ ... }) using explicit keys.');
65
65
  });
66
66
  it("should use custom context name in error message", () => {
67
- const schema = zod_1.z.record(zod_1.z.string());
67
+ const schema = v3_1.z.record(v3_1.z.string());
68
68
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema, "mySchema")).toThrow('z.record() is not supported in mySchema. Found at path "(root)". Replace it with z.object({ ... }) using explicit keys.');
69
69
  });
70
70
  it("should handle ZodLazy schemas", () => {
71
- const schema = zod_1.z.lazy(() => zod_1.z.record(zod_1.z.string()));
71
+ const schema = v3_1.z.lazy(() => v3_1.z.record(v3_1.z.string()));
72
72
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "(root)". Replace it with z.object({ ... }) using explicit keys.');
73
73
  });
74
74
  it("should allow z.function() with valid arguments", () => {
75
- const schema = zod_1.z
75
+ const schema = v3_1.z
76
76
  .function()
77
- .args(zod_1.z.string(), zod_1.z.number())
78
- .returns(zod_1.z.string());
77
+ .args(v3_1.z.string(), v3_1.z.number())
78
+ .returns(v3_1.z.string());
79
79
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).not.toThrow();
80
80
  });
81
81
  it("should throw when z.function() arguments contain z.record()", () => {
82
- const schema = zod_1.z.function().args(zod_1.z.record(zod_1.z.string())).returns(zod_1.z.string());
82
+ const schema = v3_1.z.function().args(v3_1.z.record(v3_1.z.string())).returns(v3_1.z.string());
83
83
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "args.0". Replace it with z.object({ ... }) using explicit keys.');
84
84
  });
85
85
  it("should throw when z.function() arguments contain nested z.record()", () => {
86
- const schema = zod_1.z
86
+ const schema = v3_1.z
87
87
  .function()
88
- .args(zod_1.z.object({
89
- name: zod_1.z.string(),
90
- metadata: zod_1.z.record(zod_1.z.string()),
88
+ .args(v3_1.z.object({
89
+ name: v3_1.z.string(),
90
+ metadata: v3_1.z.record(v3_1.z.string()),
91
91
  }))
92
- .returns(zod_1.z.string());
92
+ .returns(v3_1.z.string());
93
93
  expect(() => (0, validate_zod_schema_1.assertNoZodRecord)(schema)).toThrow('z.record() is not supported in schema. Found at path "args.0.metadata". Replace it with z.object({ ... }) using explicit keys.');
94
94
  });
95
95
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-zod-schema.test.js","sourceRoot":"","sources":["../../src/util/validate-zod-schema.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod/v3\";\nimport { assertNoZodRecord } from \"./validate-zod-schema\";\n\ndescribe(\"assertNoZodRecord\", () => {\n it(\"should allow valid schemas without records\", () => {\n const schema = z.object({\n name: z.string(),\n age: z.number(),\n tags: z.array(z.string()),\n address: z.object({\n street: z.string(),\n city: z.string(),\n }),\n });\n\n expect(() => assertNoZodRecord(schema)).not.toThrow();\n });\n\n it(\"should throw when encountering a record at root level\", () => {\n const schema = z.record(z.string());\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"(root)\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a nested record\", () => {\n const schema = z.object({\n name: z.string(),\n metadata: z.record(z.string()),\n });\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"metadata\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in an array\", () => {\n const schema = z.object({\n items: z.array(z.record(z.string())),\n });\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"items.[]\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in a union\", () => {\n const schema = z.union([z.string(), z.record(z.number())]);\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"|1\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in an intersection\", () => {\n const schema = z.intersection(\n z.object({ name: z.string() }),\n z.object({ metadata: z.record(z.string()) }),\n );\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"&1.metadata\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in a discriminated union\", () => {\n const schema = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"string\"), value: z.string() }),\n z.object({ type: z.literal(\"record\"), value: z.record(z.number()) }),\n ]);\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"|1.value\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in an optional field\", () => {\n const schema = z.object({\n optional: z.optional(z.record(z.string())),\n });\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"optional\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in a nullable field\", () => {\n const schema = z.object({\n nullable: z.nullable(z.record(z.string())),\n });\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"nullable\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should throw when encountering a record in a tuple\", () => {\n const schema = z.tuple([z.string(), z.record(z.number())]);\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"1\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should use custom context name in error message\", () => {\n const schema = z.record(z.string());\n\n expect(() => assertNoZodRecord(schema, \"mySchema\")).toThrow(\n 'z.record() is not supported in mySchema. Found at path \"(root)\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should handle ZodLazy schemas\", () => {\n const schema = z.lazy(() => z.record(z.string()));\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"(root)\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should allow z.function() with valid arguments\", () => {\n const schema = z\n .function()\n .args(z.string(), z.number())\n .returns(z.string());\n\n expect(() => assertNoZodRecord(schema)).not.toThrow();\n });\n\n it(\"should throw when z.function() arguments contain z.record()\", () => {\n const schema = z.function().args(z.record(z.string())).returns(z.string());\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"args.0\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n\n it(\"should throw when z.function() arguments contain nested z.record()\", () => {\n const schema = z\n .function()\n .args(\n z.object({\n name: z.string(),\n metadata: z.record(z.string()),\n }),\n )\n .returns(z.string());\n\n expect(() => assertNoZodRecord(schema)).toThrow(\n 'z.record() is not supported in schema. Found at path \"args.0.metadata\". Replace it with z.object({ ... }) using explicit keys.',\n );\n });\n});\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-helpers-provider.test.d.ts","sourceRoot":"","sources":["../../src/context-helpers/context-helpers-provider.test.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -13,8 +13,8 @@
13
13
  */
14
14
  import { act, renderHook } from "@testing-library/react";
15
15
  import React from "react";
16
- import { TamboContextHelpersProvider, useTamboContextHelpers, } from "../../providers/tambo-context-helpers-provider";
17
- import { currentPageContextHelper, currentTimeContextHelper, } from "../index";
16
+ import { TamboContextHelpersProvider, useTamboContextHelpers, } from "../providers/tambo-context-helpers-provider";
17
+ import { currentPageContextHelper, currentTimeContextHelper, } from "./index";
18
18
  /**
19
19
  * Test wrapper to provide the TamboContextHelpersProvider for hooks.
20
20
  * @param helpers - A dictionary of context helper functions.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-helpers-provider.test.js","sourceRoot":"","sources":["../../src/context-helpers/context-helpers-provider.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tests for the Context Helpers API.\n *\n * The new API treats a context helper as a plain function that returns a value\n * to include in context, or null/undefined to skip. The provider wraps each\n * value with its key name as { name, context } before sending with messages.\n *\n * This test suite validates that:\n * - Helper functions can return sync/async values.\n * - Returning null/undefined causes the helper to be skipped.\n * - Errors in helpers are caught and skipped.\n * - The provider aggregates helpers passed in its props and returns AdditionalContext[].\n */\n\nimport { act, renderHook } from \"@testing-library/react\";\nimport React, { PropsWithChildren } from \"react\";\nimport {\n TamboContextHelpersProvider,\n useTamboContextHelpers,\n} from \"../providers/tambo-context-helpers-provider\";\nimport {\n type AdditionalContext,\n type ContextHelperFn,\n currentPageContextHelper,\n currentTimeContextHelper,\n} from \"./index\";\n\n/**\n * Test wrapper to provide the TamboContextHelpersProvider for hooks.\n * @param helpers - A dictionary of context helper functions.\n * @returns A wrapper component that provides the TamboContextHelpersProvider.\n */\nfunction wrapper(helpers?: Record<string, ContextHelperFn>) {\n // eslint-disable-next-line react/display-name\n return ({ children }: PropsWithChildren) =>\n React.createElement(\n TamboContextHelpersProvider,\n {\n contextHelpers: helpers,\n },\n children,\n );\n}\n\ndescribe(\"Context Helpers API\", () => {\n // Ensure the global registry doesn't leak state between tests\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n test(\"returns empty array when no helpers provided\", async () => {\n const { result } = renderHook(() => useTamboContextHelpers(), {\n wrapper: wrapper(),\n });\n\n const contexts = await result.current.getAdditionalContext();\n expect(Array.isArray(contexts)).toBe(true);\n expect(contexts).toHaveLength(0);\n });\n\n test(\"collects sync and async helper results\", async () => {\n const syncHelper: ContextHelperFn = () => ({ a: 1 });\n const asyncHelper: ContextHelperFn = async () => ({ b: 2 });\n\n const { result } = renderHook(() => useTamboContextHelpers(), {\n wrapper: wrapper({\n sync: syncHelper,\n async: asyncHelper,\n }),\n });\n\n const contexts = await result.current.getAdditionalContext();\n\n // Validate shape and presence\n const byName = new Map(contexts.map((c) => [c.name, c.context]));\n expect(byName.get(\"sync\")).toEqual({ a: 1 });\n expect(byName.get(\"async\")).toEqual({ b: 2 });\n });\n\n test(\"skips null and undefined results\", async () => {\n const nullHelper: ContextHelperFn = () => null;\n const undefinedHelper: ContextHelperFn = () => undefined;\n const validHelper: ContextHelperFn = () => ({ ok: true });\n\n const { result } = renderHook(() => useTamboContextHelpers(), {\n wrapper: wrapper({\n nullHelper,\n undefinedHelper,\n validHelper,\n }),\n });\n\n const contexts = await result.current.getAdditionalContext();\n const names = contexts.map((c) => c.name);\n\n expect(names).toContain(\"validHelper\");\n expect(names).not.toContain(\"nullHelper\");\n expect(names).not.toContain(\"undefinedHelper\");\n });\n\n test(\"errors in helpers are caught and skipped\", async () => {\n const consoleSpy = jest.spyOn(console, \"error\").mockImplementation(() => {\n // silence expected error\n });\n\n const badHelper: ContextHelperFn = () => {\n throw new Error(\"boom\");\n };\n const goodHelper: ContextHelperFn = () => ({ ok: 1 });\n\n const { result } = renderHook(() => useTamboContextHelpers(), {\n wrapper: wrapper({ badHelper, goodHelper }),\n });\n\n const contexts = await result.current.getAdditionalContext();\n expect(contexts).toHaveLength(1);\n expect(contexts[0]).toEqual<AdditionalContext>({\n name: \"goodHelper\",\n context: { ok: 1 },\n });\n\n consoleSpy.mockRestore();\n });\n\n test(\"dynamic add/remove helpers works\", async () => {\n const { result } = renderHook(() => useTamboContextHelpers(), {\n wrapper: wrapper(),\n });\n\n // Initially empty\n expect(await result.current.getAdditionalContext()).toHaveLength(0);\n\n // Add\n act(() => {\n result.current.addContextHelper(\"dyn\", () => ({ x: 10 }));\n });\n\n let contexts = await result.current.getAdditionalContext();\n expect(contexts).toHaveLength(1);\n expect(contexts[0]).toEqual<AdditionalContext>({\n name: \"dyn\",\n context: { x: 10 },\n });\n\n // Update\n act(() => {\n result.current.addContextHelper(\"dyn\", () => ({ x: 20 }));\n });\n contexts = await result.current.getAdditionalContext();\n expect(contexts).toHaveLength(1);\n expect(contexts[0]).toEqual<AdditionalContext>({\n name: \"dyn\",\n context: { x: 20 },\n });\n\n // Remove\n act(() => {\n result.current.removeContextHelper(\"dyn\");\n });\n contexts = await result.current.getAdditionalContext();\n expect(contexts).toHaveLength(0);\n });\n\n test(\"prebuilt helpers can be passed directly\", async () => {\n const { result } = renderHook(() => useTamboContextHelpers(), {\n wrapper: wrapper({\n userTime: currentTimeContextHelper,\n userPage: currentPageContextHelper,\n }),\n });\n\n const contexts = await result.current.getAdditionalContext();\n\n // Should include both entries unless environment prevents userPage (SSR)\n const names = contexts.map((c) => c.name);\n expect(names).toContain(\"userTime\");\n // userPage may be null on non-browser envs; allow either outcome:\n // if present, ensure expected keys exist\n if (names.includes(\"userPage\")) {\n const userPage = contexts.find((c) => c.name === \"userPage\")!.context as {\n url?: string;\n title?: string;\n };\n expect(\n typeof userPage.url === \"string\" || userPage.url === undefined,\n ).toBe(true);\n expect(\n typeof userPage.title === \"string\" || userPage.title === undefined,\n ).toBe(true);\n }\n });\n});\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-helpers.test.d.ts","sourceRoot":"","sources":["../../src/context-helpers/context-helpers.test.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { currentPageContextHelper, currentTimeContextHelper } from "../index";
1
+ import { currentPageContextHelper, currentTimeContextHelper } from "./index";
2
2
  /**
3
3
  * Tests for prebuilt context helper functions.
4
4
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-helpers.test.js","sourceRoot":"","sources":["../../src/context-helpers/context-helpers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAE7E;;;;;GAKG;AACH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;YAE3C,kCAAkC;YAClC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAE/B,+BAA+B;YAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,OAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEjD,iCAAiC;YACjC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,OAAQ,CAAC,SAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;YAE3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,sDAAsD;gBACtD,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAExC,MAAM,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { currentPageContextHelper, currentTimeContextHelper } from \"./index\";\n\n/**\n * Tests for prebuilt context helper functions.\n *\n * These helpers now return raw values (or null) instead of { name, context }.\n * The provider is responsible for wrapping values as { name, context }.\n */\ndescribe(\"Context Helpers (prebuilt functions)\", () => {\n describe(\"currentTimeContextHelper\", () => {\n it(\"should return user time context with required fields\", () => {\n const context = currentTimeContextHelper();\n\n // Should not be null (error case)\n expect(context).not.toBeNull();\n\n // Shape: { timestamp: string }\n expect(context).toHaveProperty(\"timestamp\");\n expect(typeof context!.timestamp).toBe(\"string\");\n\n // Verify timestamp string parses\n expect(() => new Date(context!.timestamp as string)).not.toThrow();\n });\n });\n\n describe(\"currentPageContextHelper\", () => {\n it(\"should return page context in browser, or null otherwise\", () => {\n const context = currentPageContextHelper();\n\n if (context === null) {\n // Non-browser environments should return null to skip\n expect(context).toBeNull();\n return;\n }\n\n // Shape: { url: string, title: string }\n expect(context).toHaveProperty(\"url\");\n expect(context).toHaveProperty(\"title\");\n\n expect(typeof context.url).toBe(\"string\");\n expect(typeof context.title).toBe(\"string\");\n });\n });\n});\n"]}