@cossistant/react 0.0.28 → 0.0.30

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 (301) hide show
  1. package/README.md +1 -1
  2. package/_virtual/rolldown_runtime.js +9 -23
  3. package/hooks/index.d.ts +3 -3
  4. package/hooks/private/store/use-conversations-store.d.ts +2 -0
  5. package/hooks/private/store/use-conversations-store.d.ts.map +1 -1
  6. package/hooks/private/store/use-conversations-store.js +15 -8
  7. package/hooks/private/store/use-conversations-store.js.map +1 -1
  8. package/hooks/private/store/use-store-selector.d.ts +3 -0
  9. package/hooks/private/store/use-store-selector.d.ts.map +1 -1
  10. package/hooks/private/store/use-store-selector.js +4 -8
  11. package/hooks/private/store/use-store-selector.js.map +1 -1
  12. package/hooks/private/store/use-website-store.d.ts +3 -1
  13. package/hooks/private/store/use-website-store.d.ts.map +1 -1
  14. package/hooks/private/store/use-website-store.js +14 -6
  15. package/hooks/private/store/use-website-store.js.map +1 -1
  16. package/hooks/private/use-client-query.d.ts +1 -1
  17. package/hooks/private/use-client-query.d.ts.map +1 -1
  18. package/hooks/private/use-client-query.js +1 -0
  19. package/hooks/private/use-client-query.js.map +1 -1
  20. package/hooks/private/use-default-messages.d.ts +1 -1
  21. package/hooks/private/use-grouped-messages.d.ts +10 -7
  22. package/hooks/private/use-grouped-messages.d.ts.map +1 -1
  23. package/hooks/private/use-grouped-messages.js +44 -11
  24. package/hooks/private/use-grouped-messages.js.map +1 -1
  25. package/hooks/private/use-rest-client.d.ts +13 -3
  26. package/hooks/private/use-rest-client.d.ts.map +1 -1
  27. package/hooks/private/use-rest-client.js +49 -22
  28. package/hooks/private/use-rest-client.js.map +1 -1
  29. package/hooks/private/use-visitor-typing-reporter.d.ts +1 -1
  30. package/hooks/use-conversation-auto-seen.d.ts +1 -1
  31. package/hooks/use-conversation-page.d.ts +1 -1
  32. package/hooks/use-conversation-page.d.ts.map +1 -1
  33. package/hooks/use-conversation-page.js +10 -3
  34. package/hooks/use-conversation-page.js.map +1 -1
  35. package/hooks/use-conversation-preview.d.ts +3 -1
  36. package/hooks/use-conversation-preview.d.ts.map +1 -1
  37. package/hooks/use-conversation-preview.js +6 -3
  38. package/hooks/use-conversation-preview.js.map +1 -1
  39. package/hooks/use-conversation-seen.d.ts +1 -1
  40. package/hooks/use-conversation-seen.js +1 -1
  41. package/hooks/use-conversation-seen.js.map +1 -1
  42. package/hooks/use-conversation-timeline-items.d.ts +1 -1
  43. package/hooks/use-conversation-timeline-items.js +2 -3
  44. package/hooks/use-conversation-timeline-items.js.map +1 -1
  45. package/hooks/use-conversation-timeline.d.ts +1 -1
  46. package/hooks/use-conversation-timeline.d.ts.map +1 -1
  47. package/hooks/use-conversation-timeline.js +1 -3
  48. package/hooks/use-conversation-timeline.js.map +1 -1
  49. package/hooks/use-conversation.d.ts +1 -1
  50. package/hooks/use-conversation.js +2 -3
  51. package/hooks/use-conversation.js.map +1 -1
  52. package/hooks/use-conversations.d.ts +1 -1
  53. package/hooks/use-conversations.js +5 -3
  54. package/hooks/use-conversations.js.map +1 -1
  55. package/hooks/use-create-conversation.d.ts +3 -3
  56. package/hooks/use-create-conversation.js +1 -0
  57. package/hooks/use-create-conversation.js.map +1 -1
  58. package/hooks/use-file-upload.d.ts +1 -1
  59. package/hooks/use-file-upload.js +3 -3
  60. package/hooks/use-file-upload.js.map +1 -1
  61. package/hooks/use-home-page.js +3 -3
  62. package/hooks/use-home-page.js.map +1 -1
  63. package/hooks/use-message-composer.d.ts +10 -3
  64. package/hooks/use-message-composer.d.ts.map +1 -1
  65. package/hooks/use-message-composer.js +5 -2
  66. package/hooks/use-message-composer.js.map +1 -1
  67. package/hooks/use-realtime-support.d.ts +1 -1
  68. package/hooks/use-send-message.d.ts +8 -2
  69. package/hooks/use-send-message.d.ts.map +1 -1
  70. package/hooks/use-send-message.js +5 -3
  71. package/hooks/use-send-message.js.map +1 -1
  72. package/hooks/use-visitor.js +2 -2
  73. package/hooks/use-visitor.js.map +1 -1
  74. package/identify-visitor.d.ts.map +1 -1
  75. package/identify-visitor.js +15 -1
  76. package/identify-visitor.js.map +1 -1
  77. package/index.d.ts +3 -3
  78. package/index.js +1 -1
  79. package/package.json +5 -3
  80. package/{conversation.d.ts → packages/types/src/api/conversation.d.ts} +368 -64
  81. package/packages/types/src/api/conversation.d.ts.map +1 -0
  82. package/packages/types/src/api/timeline-item.d.ts +460 -0
  83. package/packages/types/src/api/timeline-item.d.ts.map +1 -0
  84. package/packages/types/src/realtime-events.d.ts +1004 -0
  85. package/packages/types/src/realtime-events.d.ts.map +1 -0
  86. package/{schemas3.d.ts → packages/types/src/schemas.d.ts} +95 -19
  87. package/packages/types/src/schemas.d.ts.map +1 -0
  88. package/primitives/avatar/avatar.js +1 -1
  89. package/primitives/avatar/avatar.js.map +1 -1
  90. package/primitives/avatar/fallback.d.ts.map +1 -1
  91. package/primitives/avatar/fallback.js +2 -2
  92. package/primitives/avatar/fallback.js.map +1 -1
  93. package/primitives/avatar/image.d.ts +1 -1
  94. package/primitives/avatar/image.js +1 -1
  95. package/primitives/avatar/image.js.map +1 -1
  96. package/primitives/button.js +1 -1
  97. package/primitives/button.js.map +1 -1
  98. package/primitives/conversation-timeline.d.ts +1 -1
  99. package/primitives/conversation-timeline.js +4 -4
  100. package/primitives/conversation-timeline.js.map +1 -1
  101. package/primitives/day-separator.d.ts +76 -0
  102. package/primitives/day-separator.d.ts.map +1 -0
  103. package/primitives/day-separator.js +111 -0
  104. package/primitives/day-separator.js.map +1 -0
  105. package/primitives/index.d.ts +3 -2
  106. package/primitives/index.js +6 -1
  107. package/primitives/index.parts.d.ts +2 -1
  108. package/primitives/index.parts.js +2 -1
  109. package/primitives/multimodal-input.d.ts +2 -2
  110. package/primitives/multimodal-input.d.ts.map +1 -1
  111. package/primitives/multimodal-input.js +2 -2
  112. package/primitives/multimodal-input.js.map +1 -1
  113. package/primitives/timeline-item-attachments.d.ts +1 -1
  114. package/primitives/timeline-item-attachments.js +6 -7
  115. package/primitives/timeline-item-attachments.js.map +1 -1
  116. package/primitives/timeline-item-group.d.ts +1 -1
  117. package/primitives/timeline-item-group.d.ts.map +1 -1
  118. package/primitives/timeline-item-group.js +8 -8
  119. package/primitives/timeline-item-group.js.map +1 -1
  120. package/primitives/timeline-item.d.ts +1 -1
  121. package/primitives/timeline-item.d.ts.map +1 -1
  122. package/primitives/timeline-item.js +33 -8
  123. package/primitives/timeline-item.js.map +1 -1
  124. package/primitives/trigger.js +1 -1
  125. package/primitives/trigger.js.map +1 -1
  126. package/primitives/window.js +1 -1
  127. package/primitives/window.js.map +1 -1
  128. package/provider.d.ts +4 -2
  129. package/provider.d.ts.map +1 -1
  130. package/provider.js +56 -8
  131. package/provider.js.map +1 -1
  132. package/realtime/event-filter.d.ts +4 -1
  133. package/realtime/event-filter.d.ts.map +1 -1
  134. package/realtime/event-filter.js +14 -0
  135. package/realtime/event-filter.js.map +1 -1
  136. package/realtime/provider.d.ts +1 -1
  137. package/realtime/provider.d.ts.map +1 -1
  138. package/realtime/provider.js +1 -2
  139. package/realtime/provider.js.map +1 -1
  140. package/realtime/seen-store.d.ts +2 -2
  141. package/realtime/support-provider.js +6 -1
  142. package/realtime/support-provider.js.map +1 -1
  143. package/realtime/typing-store.d.ts +1 -1
  144. package/realtime/use-realtime.d.ts +1 -1
  145. package/support/components/avatar-stack.d.ts.map +1 -1
  146. package/support/components/avatar-stack.js +32 -12
  147. package/support/components/avatar-stack.js.map +1 -1
  148. package/support/components/avatar.d.ts +34 -3
  149. package/support/components/avatar.d.ts.map +1 -1
  150. package/support/components/avatar.js +61 -8
  151. package/support/components/avatar.js.map +1 -1
  152. package/support/components/button.d.ts +4 -2
  153. package/support/components/button.d.ts.map +1 -1
  154. package/support/components/button.js +3 -3
  155. package/support/components/button.js.map +1 -1
  156. package/support/components/configuration-error.d.ts +16 -0
  157. package/support/components/configuration-error.d.ts.map +1 -0
  158. package/support/components/configuration-error.js +162 -0
  159. package/support/components/configuration-error.js.map +1 -0
  160. package/support/components/content.js +1 -2
  161. package/support/components/content.js.map +1 -1
  162. package/support/components/conversation-button-link.js +18 -23
  163. package/support/components/conversation-button-link.js.map +1 -1
  164. package/support/components/conversation-event.d.ts.map +1 -1
  165. package/support/components/conversation-event.js +7 -5
  166. package/support/components/conversation-event.js.map +1 -1
  167. package/support/components/conversation-timeline.d.ts +6 -1
  168. package/support/components/conversation-timeline.d.ts.map +1 -1
  169. package/support/components/conversation-timeline.js +22 -2
  170. package/support/components/conversation-timeline.js.map +1 -1
  171. package/support/components/header.js +1 -1
  172. package/support/components/image-lightbox.d.ts +1 -1
  173. package/support/components/image-lightbox.js +1 -2
  174. package/support/components/image-lightbox.js.map +1 -1
  175. package/support/components/index.js +1 -1
  176. package/support/components/multimodal-input.js +0 -1
  177. package/support/components/multimodal-input.js.map +1 -1
  178. package/support/components/navigation-tab.js +1 -1
  179. package/support/components/online-indicator.d.ts +50 -0
  180. package/support/components/online-indicator.d.ts.map +1 -0
  181. package/support/components/online-indicator.js +65 -0
  182. package/support/components/online-indicator.js.map +1 -0
  183. package/support/components/root.js +0 -1
  184. package/support/components/root.js.map +1 -1
  185. package/support/components/timeline-identification-tool.js +4 -4
  186. package/support/components/timeline-identification-tool.js.map +1 -1
  187. package/support/components/timeline-message-group.d.ts +1 -1
  188. package/support/components/timeline-message-group.d.ts.map +1 -1
  189. package/support/components/timeline-message-group.js +6 -4
  190. package/support/components/timeline-message-group.js.map +1 -1
  191. package/support/components/timeline-message-item.d.ts +1 -1
  192. package/support/components/timeline-message-item.js +4 -4
  193. package/support/components/timeline-message-item.js.map +1 -1
  194. package/support/components/trigger.js +1 -2
  195. package/support/components/trigger.js.map +1 -1
  196. package/support/components/typing-indicator.js +1 -1
  197. package/support/components/typing-indicator.js.map +1 -1
  198. package/support/context/controlled-state.js +0 -1
  199. package/support/context/controlled-state.js.map +1 -1
  200. package/support/context/events.d.ts +1 -1
  201. package/support/context/events.js +0 -1
  202. package/support/context/events.js.map +1 -1
  203. package/support/context/handle.js +0 -1
  204. package/support/context/handle.js.map +1 -1
  205. package/support/context/identification.d.ts +33 -0
  206. package/support/context/identification.d.ts.map +1 -0
  207. package/support/context/identification.js +34 -0
  208. package/support/context/identification.js.map +1 -0
  209. package/support/context/positioning.js +0 -1
  210. package/support/context/positioning.js.map +1 -1
  211. package/support/context/slots.js +0 -1
  212. package/support/context/slots.js.map +1 -1
  213. package/support/context/websocket.d.ts +1 -1
  214. package/support/context/websocket.js +0 -1
  215. package/support/context/websocket.js.map +1 -1
  216. package/support/index.d.ts.map +1 -1
  217. package/support/index.js +51 -18
  218. package/support/index.js.map +1 -1
  219. package/support/pages/conversation-history.js +2 -1
  220. package/support/pages/conversation-history.js.map +1 -1
  221. package/support/pages/conversation.d.ts +1 -1
  222. package/support/pages/conversation.js +1 -1
  223. package/support/pages/conversation.js.map +1 -1
  224. package/support/pages/home.js +5 -3
  225. package/support/pages/home.js.map +1 -1
  226. package/support/router.d.ts.map +1 -1
  227. package/support/router.js +4 -0
  228. package/support/router.js.map +1 -1
  229. package/support/store/support-store.js +0 -1
  230. package/support/store/support-store.js.map +1 -1
  231. package/support/{support-C7Xaw-N6.css → support-DmViRaga.css} +2 -2
  232. package/support/{support-C7Xaw-N6.css.map → support-DmViRaga.css.map} +1 -1
  233. package/support/text/index.d.ts +1 -1
  234. package/support/text/index.d.ts.map +1 -1
  235. package/support/text/index.js +1 -1
  236. package/support/text/index.js.map +1 -1
  237. package/support/text/locales/en.js +1 -1
  238. package/support/text/locales/en.js.map +1 -1
  239. package/support/text/locales/es.js +1 -1
  240. package/support/text/locales/es.js.map +1 -1
  241. package/support/text/locales/fr.js +1 -1
  242. package/support/text/locales/fr.js.map +1 -1
  243. package/support/utils/index.d.ts +1 -1
  244. package/support-config.js +0 -1
  245. package/support-config.js.map +1 -1
  246. package/support.css +1 -1
  247. package/tailwind.css +1 -1
  248. package/utils/conversation.d.ts.map +1 -1
  249. package/utils/conversation.js +1 -3
  250. package/utils/conversation.js.map +1 -1
  251. package/utils/use-render-element.d.ts.map +1 -1
  252. package/utils/use-render-element.js +20 -5
  253. package/utils/use-render-element.js.map +1 -1
  254. package/api.d.ts +0 -71
  255. package/api.d.ts.map +0 -1
  256. package/checks.d.ts +0 -189
  257. package/checks.d.ts.map +0 -1
  258. package/clsx.d.ts +0 -7
  259. package/clsx.d.ts.map +0 -1
  260. package/coerce.d.ts +0 -9
  261. package/coerce.d.ts.map +0 -1
  262. package/conversation.d.ts.map +0 -1
  263. package/core.d.ts +0 -35
  264. package/core.d.ts.map +0 -1
  265. package/errors.d.ts +0 -121
  266. package/errors.d.ts.map +0 -1
  267. package/errors2.d.ts +0 -24
  268. package/errors2.d.ts.map +0 -1
  269. package/index2.d.ts +0 -4
  270. package/index3.d.ts +0 -1
  271. package/metadata.d.ts +0 -1
  272. package/openapi-generator.d.ts +0 -1
  273. package/openapi-generator2.d.ts +0 -1
  274. package/openapi-generator3.d.ts +0 -1
  275. package/openapi30.d.ts +0 -125
  276. package/openapi30.d.ts.map +0 -1
  277. package/openapi31.d.ts +0 -131
  278. package/openapi31.d.ts.map +0 -1
  279. package/parse.d.ts +0 -17
  280. package/parse.d.ts.map +0 -1
  281. package/realtime-events.d.ts +0 -482
  282. package/realtime-events.d.ts.map +0 -1
  283. package/registries.d.ts +0 -32
  284. package/registries.d.ts.map +0 -1
  285. package/schemas.d.ts +0 -673
  286. package/schemas.d.ts.map +0 -1
  287. package/schemas2.d.ts +0 -320
  288. package/schemas2.d.ts.map +0 -1
  289. package/schemas3.d.ts.map +0 -1
  290. package/specification-extension.d.ts +0 -9
  291. package/specification-extension.d.ts.map +0 -1
  292. package/standard-schema.d.ts +0 -59
  293. package/standard-schema.d.ts.map +0 -1
  294. package/timeline-item.d.ts +0 -227
  295. package/timeline-item.d.ts.map +0 -1
  296. package/util.d.ts +0 -41
  297. package/util.d.ts.map +0 -1
  298. package/versions.d.ts +0 -9
  299. package/versions.d.ts.map +0 -1
  300. package/zod-extensions.d.ts +0 -39
  301. package/zod-extensions.d.ts.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { useIdentificationState } from "./support/context/identification.js";
1
2
  import { useVisitor } from "./hooks/use-visitor.js";
2
3
  import { computeMetadataHash } from "./utils/metadata-hash.js";
3
4
  import { useEffect, useState } from "react";
@@ -8,8 +9,19 @@ import { useEffect, useState } from "react";
8
9
  */
9
10
  const IdentifySupportVisitor = ({ externalId, email, name, image, metadata: _newMetadata }) => {
10
11
  const { visitor, identify, setVisitorMetadata } = useVisitor();
12
+ const identificationState = useIdentificationState();
11
13
  const [hasIdentified, setHasIdentified] = useState(false);
12
14
  const [lastMetadataHash, setLastMetadataHash] = useState(null);
15
+ useEffect(() => {
16
+ const needsIdentification = Boolean(externalId || email) && !visitor?.contact;
17
+ if (identificationState?.setIsIdentifying) identificationState.setIsIdentifying(needsIdentification && !hasIdentified);
18
+ }, [
19
+ externalId,
20
+ email,
21
+ visitor?.contact,
22
+ hasIdentified,
23
+ identificationState
24
+ ]);
13
25
  useEffect(() => {
14
26
  const shouldIdentify = async () => {
15
27
  if (!Boolean(externalId || email)) return;
@@ -22,6 +34,7 @@ const IdentifySupportVisitor = ({ externalId, email, name, image, metadata: _new
22
34
  image: image ?? void 0
23
35
  });
24
36
  setHasIdentified(true);
37
+ if (identificationState?.setIsIdentifying) identificationState.setIsIdentifying(false);
25
38
  }
26
39
  return;
27
40
  }
@@ -44,7 +57,8 @@ const IdentifySupportVisitor = ({ externalId, email, name, image, metadata: _new
44
57
  name,
45
58
  image,
46
59
  identify,
47
- hasIdentified
60
+ hasIdentified,
61
+ identificationState
48
62
  ]);
49
63
  useEffect(() => {
50
64
  const updateMetadata = async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"identify-visitor.js","names":[],"sources":["../src/identify-visitor.tsx"],"sourcesContent":["/** biome-ignore-all lint/correctness/useExhaustiveDependencies: wanted here */\n\nimport type { VisitorMetadata } from \"@cossistant/types\";\nimport { type ReactElement, useEffect, useState } from \"react\";\nimport { useVisitor } from \"./hooks\";\nimport { computeMetadataHash } from \"./utils/metadata-hash\";\n\nexport type IdentifySupportVisitorProps = {\n\texternalId?: string;\n\temail?: string;\n\tname?: string | null;\n\timage?: string | null;\n\tmetadata?: VisitorMetadata | null;\n};\n\n/**\n * Component exposed by Cossistant allowing you to identify a visitor whenever rendered with either an `externalId` or `email`. Once identified, the visitor will be associated with a contact and any subsequent metadata updates will be attached to this contact.\n */\nexport const IdentifySupportVisitor = ({\n\texternalId,\n\temail,\n\tname,\n\timage,\n\tmetadata: _newMetadata,\n}: IdentifySupportVisitorProps): ReactElement | null => {\n\tconst { visitor, identify, setVisitorMetadata } = useVisitor();\n\tconst [hasIdentified, setHasIdentified] = useState(false);\n\tconst [lastMetadataHash, setLastMetadataHash] = useState<string | null>(null);\n\n\t// Only call identify if:\n\t// 1. Visitor hasn't been identified yet (no contact)\n\t// 2. Name, email, or image changed compared to current contact\n\tuseEffect(() => {\n\t\tconst shouldIdentify = async () => {\n\t\t\tconst hasIdentificationData = Boolean(externalId || email);\n\n\t\t\t// Need at least externalId or email to identify\n\t\t\tif (!hasIdentificationData) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Case 1: No contact exists yet\n\t\t\tif (!visitor?.contact) {\n\t\t\t\tif (!hasIdentified) {\n\t\t\t\t\tawait identify({\n\t\t\t\t\t\texternalId,\n\t\t\t\t\t\temail,\n\t\t\t\t\t\tname: name ?? undefined,\n\t\t\t\t\t\timage: image ?? undefined,\n\t\t\t\t\t});\n\t\t\t\t\tsetHasIdentified(true);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Case 2: Contact exists but name/email/image changed\n\t\t\tconst contact = visitor.contact;\n\t\t\tconst nameChanged = name !== undefined && name !== contact.name;\n\t\t\tconst emailChanged = email !== undefined && email !== contact.email;\n\t\t\tconst imageChanged = image !== undefined && image !== contact.image;\n\t\t\tconst hasChanges = nameChanged || emailChanged || imageChanged;\n\n\t\t\tif (hasChanges) {\n\t\t\t\tawait identify({\n\t\t\t\t\texternalId,\n\t\t\t\t\temail,\n\t\t\t\t\tname: name ?? undefined,\n\t\t\t\t\timage: image ?? undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tshouldIdentify();\n\t}, [\n\t\tvisitor?.contact,\n\t\texternalId,\n\t\temail,\n\t\tname,\n\t\timage,\n\t\tidentify,\n\t\thasIdentified,\n\t]);\n\n\t// Compute metadata hash, compare to previous hash and only update if it has changed\n\tuseEffect(() => {\n\t\tconst updateMetadata = async () => {\n\t\t\t// Skip if no metadata provided or visitor doesn't have a contact\n\t\t\tif (!_newMetadata) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!visitor?.contact) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Compute new metadata hash\n\t\t\tconst newMetadataHash = await computeMetadataHash(_newMetadata);\n\n\t\t\t// Get the existing hash from the contact\n\t\t\tconst existingHash = visitor.contact.metadataHash || \"\";\n\n\t\t\t// Only update if hashes don't match and we haven't already updated with this hash\n\t\t\tconst hashChanged = newMetadataHash !== existingHash;\n\t\t\tconst notAlreadyUpdated = newMetadataHash !== lastMetadataHash;\n\t\t\tconst shouldUpdate = Boolean(\n\t\t\t\tnewMetadataHash && hashChanged && notAlreadyUpdated\n\t\t\t);\n\n\t\t\tif (shouldUpdate) {\n\t\t\t\tawait setVisitorMetadata(_newMetadata);\n\t\t\t\tsetLastMetadataHash(newMetadataHash);\n\t\t\t}\n\t\t};\n\n\t\tupdateMetadata();\n\t}, [\n\t\t_newMetadata,\n\t\tvisitor?.contact?.metadataHash,\n\t\tvisitor?.contact,\n\t\tsetVisitorMetadata,\n\t\tlastMetadataHash,\n\t]);\n\n\treturn null;\n};\n\nIdentifySupportVisitor.displayName = \"IdentifySupportVisitor\";\n"],"mappings":";;;;;;;;AAkBA,MAAa,0BAA0B,EACtC,YACA,OACA,MACA,OACA,UAAU,mBAC6C;CACvD,MAAM,EAAE,SAAS,UAAU,uBAAuB,YAAY;CAC9D,MAAM,CAAC,eAAe,oBAAoB,SAAS,MAAM;CACzD,MAAM,CAAC,kBAAkB,uBAAuB,SAAwB,KAAK;AAK7E,iBAAgB;EACf,MAAM,iBAAiB,YAAY;AAIlC,OAAI,CAH0B,QAAQ,cAAc,MAAM,CAIzD;AAID,OAAI,CAAC,SAAS,SAAS;AACtB,QAAI,CAAC,eAAe;AACnB,WAAM,SAAS;MACd;MACA;MACA,MAAM,QAAQ;MACd,OAAO,SAAS;MAChB,CAAC;AACF,sBAAiB,KAAK;;AAEvB;;GAID,MAAM,UAAU,QAAQ;GACxB,MAAM,cAAc,SAAS,UAAa,SAAS,QAAQ;GAC3D,MAAM,eAAe,UAAU,UAAa,UAAU,QAAQ;GAC9D,MAAM,eAAe,UAAU,UAAa,UAAU,QAAQ;AAG9D,OAFmB,eAAe,gBAAgB,aAGjD,OAAM,SAAS;IACd;IACA;IACA,MAAM,QAAQ;IACd,OAAO,SAAS;IAChB,CAAC;;AAIJ,kBAAgB;IACd;EACF,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;AAGF,iBAAgB;EACf,MAAM,iBAAiB,YAAY;AAElC,OAAI,CAAC,aACJ;AAGD,OAAI,CAAC,SAAS,QACb;GAID,MAAM,kBAAkB,MAAM,oBAAoB,aAAa;GAM/D,MAAM,cAAc,qBAHC,QAAQ,QAAQ,gBAAgB;GAIrD,MAAM,oBAAoB,oBAAoB;AAK9C,OAJqB,QACpB,mBAAmB,eAAe,kBAClC,EAEiB;AACjB,UAAM,mBAAmB,aAAa;AACtC,wBAAoB,gBAAgB;;;AAItC,kBAAgB;IACd;EACF;EACA,SAAS,SAAS;EAClB,SAAS;EACT;EACA;EACA,CAAC;AAEF,QAAO;;AAGR,uBAAuB,cAAc"}
1
+ {"version":3,"file":"identify-visitor.js","names":[],"sources":["../src/identify-visitor.tsx"],"sourcesContent":["/** biome-ignore-all lint/correctness/useExhaustiveDependencies: wanted here */\n\nimport type { VisitorMetadata } from \"@cossistant/types\";\nimport { type ReactElement, useEffect, useState } from \"react\";\nimport { useVisitor } from \"./hooks\";\nimport { useIdentificationState } from \"./support/context/identification\";\nimport { computeMetadataHash } from \"./utils/metadata-hash\";\n\nexport type IdentifySupportVisitorProps = {\n\texternalId?: string;\n\temail?: string;\n\tname?: string | null;\n\timage?: string | null;\n\tmetadata?: VisitorMetadata | null;\n};\n\n/**\n * Component exposed by Cossistant allowing you to identify a visitor whenever rendered with either an `externalId` or `email`. Once identified, the visitor will be associated with a contact and any subsequent metadata updates will be attached to this contact.\n */\nexport const IdentifySupportVisitor = ({\n\texternalId,\n\temail,\n\tname,\n\timage,\n\tmetadata: _newMetadata,\n}: IdentifySupportVisitorProps): ReactElement | null => {\n\tconst { visitor, identify, setVisitorMetadata } = useVisitor();\n\tconst identificationState = useIdentificationState();\n\tconst [hasIdentified, setHasIdentified] = useState(false);\n\tconst [lastMetadataHash, setLastMetadataHash] = useState<string | null>(null);\n\n\t// Signal that identification is pending when we have identification data but no contact yet\n\tuseEffect(() => {\n\t\tconst hasIdentificationData = Boolean(externalId || email);\n\t\tconst needsIdentification = hasIdentificationData && !visitor?.contact;\n\n\t\tif (identificationState?.setIsIdentifying) {\n\t\t\tidentificationState.setIsIdentifying(\n\t\t\t\tneedsIdentification && !hasIdentified\n\t\t\t);\n\t\t}\n\t}, [externalId, email, visitor?.contact, hasIdentified, identificationState]);\n\n\t// Only call identify if:\n\t// 1. Visitor hasn't been identified yet (no contact)\n\t// 2. Name, email, or image changed compared to current contact\n\tuseEffect(() => {\n\t\tconst shouldIdentify = async () => {\n\t\t\tconst hasIdentificationData = Boolean(externalId || email);\n\n\t\t\t// Need at least externalId or email to identify\n\t\t\tif (!hasIdentificationData) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Case 1: No contact exists yet\n\t\t\tif (!visitor?.contact) {\n\t\t\t\tif (!hasIdentified) {\n\t\t\t\t\tawait identify({\n\t\t\t\t\t\texternalId,\n\t\t\t\t\t\temail,\n\t\t\t\t\t\tname: name ?? undefined,\n\t\t\t\t\t\timage: image ?? undefined,\n\t\t\t\t\t});\n\t\t\t\t\tsetHasIdentified(true);\n\t\t\t\t\t// Clear identifying state after identification completes\n\t\t\t\t\tif (identificationState?.setIsIdentifying) {\n\t\t\t\t\t\tidentificationState.setIsIdentifying(false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Case 2: Contact exists but name/email/image changed\n\t\t\tconst contact = visitor.contact;\n\t\t\tconst nameChanged = name !== undefined && name !== contact.name;\n\t\t\tconst emailChanged = email !== undefined && email !== contact.email;\n\t\t\tconst imageChanged = image !== undefined && image !== contact.image;\n\t\t\tconst hasChanges = nameChanged || emailChanged || imageChanged;\n\n\t\t\tif (hasChanges) {\n\t\t\t\tawait identify({\n\t\t\t\t\texternalId,\n\t\t\t\t\temail,\n\t\t\t\t\tname: name ?? undefined,\n\t\t\t\t\timage: image ?? undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tshouldIdentify();\n\t}, [\n\t\tvisitor?.contact,\n\t\texternalId,\n\t\temail,\n\t\tname,\n\t\timage,\n\t\tidentify,\n\t\thasIdentified,\n\t\tidentificationState,\n\t]);\n\n\t// Compute metadata hash, compare to previous hash and only update if it has changed\n\tuseEffect(() => {\n\t\tconst updateMetadata = async () => {\n\t\t\t// Skip if no metadata provided or visitor doesn't have a contact\n\t\t\tif (!_newMetadata) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!visitor?.contact) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Compute new metadata hash\n\t\t\tconst newMetadataHash = await computeMetadataHash(_newMetadata);\n\n\t\t\t// Get the existing hash from the contact\n\t\t\tconst existingHash = visitor.contact.metadataHash || \"\";\n\n\t\t\t// Only update if hashes don't match and we haven't already updated with this hash\n\t\t\tconst hashChanged = newMetadataHash !== existingHash;\n\t\t\tconst notAlreadyUpdated = newMetadataHash !== lastMetadataHash;\n\t\t\tconst shouldUpdate = Boolean(\n\t\t\t\tnewMetadataHash && hashChanged && notAlreadyUpdated\n\t\t\t);\n\n\t\t\tif (shouldUpdate) {\n\t\t\t\tawait setVisitorMetadata(_newMetadata);\n\t\t\t\tsetLastMetadataHash(newMetadataHash);\n\t\t\t}\n\t\t};\n\n\t\tupdateMetadata();\n\t}, [\n\t\t_newMetadata,\n\t\tvisitor?.contact?.metadataHash,\n\t\tvisitor?.contact,\n\t\tsetVisitorMetadata,\n\t\tlastMetadataHash,\n\t]);\n\n\treturn null;\n};\n\nIdentifySupportVisitor.displayName = \"IdentifySupportVisitor\";\n"],"mappings":";;;;;;;;;AAmBA,MAAa,0BAA0B,EACtC,YACA,OACA,MACA,OACA,UAAU,mBAC6C;CACvD,MAAM,EAAE,SAAS,UAAU,uBAAuB,YAAY;CAC9D,MAAM,sBAAsB,wBAAwB;CACpD,MAAM,CAAC,eAAe,oBAAoB,SAAS,MAAM;CACzD,MAAM,CAAC,kBAAkB,uBAAuB,SAAwB,KAAK;AAG7E,iBAAgB;EAEf,MAAM,sBADwB,QAAQ,cAAc,MAAM,IACL,CAAC,SAAS;AAE/D,MAAI,qBAAqB,iBACxB,qBAAoB,iBACnB,uBAAuB,CAAC,cACxB;IAEA;EAAC;EAAY;EAAO,SAAS;EAAS;EAAe;EAAoB,CAAC;AAK7E,iBAAgB;EACf,MAAM,iBAAiB,YAAY;AAIlC,OAAI,CAH0B,QAAQ,cAAc,MAAM,CAIzD;AAID,OAAI,CAAC,SAAS,SAAS;AACtB,QAAI,CAAC,eAAe;AACnB,WAAM,SAAS;MACd;MACA;MACA,MAAM,QAAQ;MACd,OAAO,SAAS;MAChB,CAAC;AACF,sBAAiB,KAAK;AAEtB,SAAI,qBAAqB,iBACxB,qBAAoB,iBAAiB,MAAM;;AAG7C;;GAID,MAAM,UAAU,QAAQ;GACxB,MAAM,cAAc,SAAS,UAAa,SAAS,QAAQ;GAC3D,MAAM,eAAe,UAAU,UAAa,UAAU,QAAQ;GAC9D,MAAM,eAAe,UAAU,UAAa,UAAU,QAAQ;AAG9D,OAFmB,eAAe,gBAAgB,aAGjD,OAAM,SAAS;IACd;IACA;IACA,MAAM,QAAQ;IACd,OAAO,SAAS;IAChB,CAAC;;AAIJ,kBAAgB;IACd;EACF,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;AAGF,iBAAgB;EACf,MAAM,iBAAiB,YAAY;AAElC,OAAI,CAAC,aACJ;AAGD,OAAI,CAAC,SAAS,QACb;GAID,MAAM,kBAAkB,MAAM,oBAAoB,aAAa;GAM/D,MAAM,cAAc,qBAHC,QAAQ,QAAQ,gBAAgB;GAIrD,MAAM,oBAAoB,oBAAoB;AAK9C,OAJqB,QACpB,mBAAmB,eAAe,kBAClC,EAEiB;AACjB,UAAM,mBAAmB,aAAa;AACtC,wBAAoB,gBAAgB;;;AAItC,kBAAgB;IACd;EACF;EACA,SAAS,SAAS;EAClB,SAAS;EACT;EACA;EACA,CAAC;AAEF,QAAO;;AAGR,uBAAuB,cAAc"}
package/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { useClientQuery } from "./hooks/private/use-client-query.js";
2
2
  import { useDefaultMessages } from "./hooks/private/use-default-messages.js";
3
- import { ConversationItem, GroupedMessage, TimelineEventItem, TimelineToolItem, UseGroupedMessagesOptions, UseGroupedMessagesProps, useGroupedMessages } from "./hooks/private/use-grouped-messages.js";
3
+ import { ConversationItem, DaySeparatorItem, GroupedMessage, TimelineEventItem, TimelineToolItem, UseGroupedMessagesOptions, UseGroupedMessagesProps, useGroupedMessages } from "./hooks/private/use-grouped-messages.js";
4
4
  import { UseMultimodalInputOptions, UseMultimodalInputReturn, useMultimodalInput } from "./hooks/private/use-multimodal-input.js";
5
- import { UseClientResult, useClient } from "./hooks/private/use-rest-client.js";
5
+ import { ConfigurationError, UseClientResult, useClient } from "./hooks/private/use-rest-client.js";
6
6
  import { UseComposerRefocusOptions, UseComposerRefocusReturn, useComposerRefocus } from "./hooks/use-composer-refocus.js";
7
7
  import { UseConversationOptions, UseConversationResult, useConversation } from "./hooks/use-conversation.js";
8
8
  import { CONVERSATION_AUTO_SEEN_DELAY_MS, UseConversationAutoSeenOptions, useConversationAutoSeen } from "./hooks/use-conversation-auto-seen.js";
@@ -49,4 +49,4 @@ import { Header } from "./support/components/header.js";
49
49
  import { WebSocketContextValue, WebSocketProvider, useWebSocket } from "./support/context/websocket.js";
50
50
  import { useSupportConfig, useSupportNavigation, useSupportStore } from "./support/store/support-store.js";
51
51
  import { DefaultRoutes, NavigationState, RouteRegistry, Support, SupportContentProps, SupportPageProps, SupportPageType, SupportProps, SupportRootProps, SupportRouterProps, SupportTriggerProps } from "./support/index.js";
52
- export { Align, CoButton as Button, CONVERSATION_AUTO_SEEN_DELAY_MS, CollisionPadding, ContentProps, ConversationEndEvent, ConversationItem, ConversationLifecycleState, ConversationPreviewAssignedAgent, ConversationPreviewLastMessage, ConversationPreviewTypingParticipant, ConversationPreviewTypingState, ConversationStartEvent, ConversationTimelineTypingParticipant, ConversationTypingParticipant, CossistantContextValue, CossistantProviderProps, CreateConversationVariables, CustomPage, DefaultRoutes, ErrorEvent, FileUploadPart, GroupedMessage, Header, IdentifySupportVisitor, IdentifySupportVisitorProps, MessageReceivedEvent, MessageSentEvent, NavigationState, index_d_exports as Primitives, RealtimeAuthConfig, RealtimeContextValue, RealtimeEventHandler, RealtimeEventHandlerEntry, RealtimeEventHandlersMap, RealtimeEventMeta, RealtimeProvider, RealtimeProviderProps, RootProps, RouteRegistry, SendMessageOptions, SendMessageResult, Side, Support, SupportConfig, SupportConfigProps, SupportContentProps, SupportContext, SupportEvent, SupportEventCallbacks, SupportEventType, SupportHandle, SupportLocale, SupportPageProps, SupportPageType, SupportProps, SupportProvider, SupportProviderProps, SupportRealtimeProvider, SupportRootProps, SupportRouterProps, SupportTextContentOverrides, SupportTriggerProps, Text, TimelineEventItem, TimelineToolItem, TriggerRenderProps, UseClientResult, UseComposerRefocusOptions, UseComposerRefocusReturn, UseConversationAutoSeenOptions, UseConversationHistoryPageOptions, UseConversationHistoryPageReturn, UseConversationLifecycleOptions, UseConversationLifecycleReturn, UseConversationOptions, UseConversationPageOptions, UseConversationPageReturn, UseConversationPreviewOptions, UseConversationPreviewReturn, UseConversationResult, UseConversationTimelineItemsOptions, UseConversationTimelineItemsResult, UseConversationTimelineOptions, UseConversationTimelineReturn, UseConversationsOptions, UseConversationsResult, UseCreateConversationOptions, UseCreateConversationResult, UseFileUploadOptions, UseFileUploadReturn, UseGroupedMessagesOptions, UseGroupedMessagesProps, UseHomePageOptions, UseHomePageReturn, UseMessageComposerOptions, UseMessageComposerReturn, UseMultimodalInputOptions, UseMultimodalInputReturn, UseRealtimeSupportOptions, UseRealtimeSupportResult, UseScrollMaskOptions, UseScrollMaskReturn, UseSendMessageOptions, UseSendMessageResult, UseSoundEffectOptions, UseSoundEffectReturn, UseSupportValue, UseVisitorReturn, WebSocketContextValue, WebSocketProvider, WindowVisibilityFocusState, applyConversationSeenEvent, applyConversationTypingEvent, clearTypingFromTimelineItem, clearTypingState, hydrateConversationSeen, setTypingState, upsertConversationSeen, useClient, useClientQuery, useComposerRefocus, useConversation, useConversationAutoSeen, useConversationHistoryPage, useConversationLifecycle, useConversationPage, useConversationPreview, useConversationSeen, useConversationTimeline, useConversationTimelineItems, useConversationTyping, useConversations, useCreateConversation, useDebouncedConversationSeen, useDefaultMessages, useFileUpload, useGroupedMessages, useHomePage, useMessageComposer, useMultimodalInput, useNewMessageSound, useRealtime, useRealtimeConnection, useRealtimeSupport, useScrollMask, useSendMessage, useSoundEffect, useSupport, useSupportConfig, useSupportEventEmitter, useSupportEvents, useSupportHandle, useSupportNavigation, useSupportStore, useSupportText, useTypingSound, useVisitor, useWebSocket, useWindowVisibilityFocus };
52
+ export { Align, CoButton as Button, CONVERSATION_AUTO_SEEN_DELAY_MS, CollisionPadding, ConfigurationError, ContentProps, ConversationEndEvent, ConversationItem, ConversationLifecycleState, ConversationPreviewAssignedAgent, ConversationPreviewLastMessage, ConversationPreviewTypingParticipant, ConversationPreviewTypingState, ConversationStartEvent, ConversationTimelineTypingParticipant, ConversationTypingParticipant, CossistantContextValue, CossistantProviderProps, CreateConversationVariables, CustomPage, DaySeparatorItem, DefaultRoutes, ErrorEvent, FileUploadPart, GroupedMessage, Header, IdentifySupportVisitor, IdentifySupportVisitorProps, MessageReceivedEvent, MessageSentEvent, NavigationState, index_d_exports as Primitives, RealtimeAuthConfig, RealtimeContextValue, RealtimeEventHandler, RealtimeEventHandlerEntry, RealtimeEventHandlersMap, RealtimeEventMeta, RealtimeProvider, RealtimeProviderProps, RootProps, RouteRegistry, SendMessageOptions, SendMessageResult, Side, Support, SupportConfig, SupportConfigProps, SupportContentProps, SupportContext, SupportEvent, SupportEventCallbacks, SupportEventType, SupportHandle, SupportLocale, SupportPageProps, SupportPageType, SupportProps, SupportProvider, SupportProviderProps, SupportRealtimeProvider, SupportRootProps, SupportRouterProps, SupportTextContentOverrides, SupportTriggerProps, Text, TimelineEventItem, TimelineToolItem, TriggerRenderProps, UseClientResult, UseComposerRefocusOptions, UseComposerRefocusReturn, UseConversationAutoSeenOptions, UseConversationHistoryPageOptions, UseConversationHistoryPageReturn, UseConversationLifecycleOptions, UseConversationLifecycleReturn, UseConversationOptions, UseConversationPageOptions, UseConversationPageReturn, UseConversationPreviewOptions, UseConversationPreviewReturn, UseConversationResult, UseConversationTimelineItemsOptions, UseConversationTimelineItemsResult, UseConversationTimelineOptions, UseConversationTimelineReturn, UseConversationsOptions, UseConversationsResult, UseCreateConversationOptions, UseCreateConversationResult, UseFileUploadOptions, UseFileUploadReturn, UseGroupedMessagesOptions, UseGroupedMessagesProps, UseHomePageOptions, UseHomePageReturn, UseMessageComposerOptions, UseMessageComposerReturn, UseMultimodalInputOptions, UseMultimodalInputReturn, UseRealtimeSupportOptions, UseRealtimeSupportResult, UseScrollMaskOptions, UseScrollMaskReturn, UseSendMessageOptions, UseSendMessageResult, UseSoundEffectOptions, UseSoundEffectReturn, UseSupportValue, UseVisitorReturn, WebSocketContextValue, WebSocketProvider, WindowVisibilityFocusState, applyConversationSeenEvent, applyConversationTypingEvent, clearTypingFromTimelineItem, clearTypingState, hydrateConversationSeen, setTypingState, upsertConversationSeen, useClient, useClientQuery, useComposerRefocus, useConversation, useConversationAutoSeen, useConversationHistoryPage, useConversationLifecycle, useConversationPage, useConversationPreview, useConversationSeen, useConversationTimeline, useConversationTimelineItems, useConversationTyping, useConversations, useCreateConversation, useDebouncedConversationSeen, useDefaultMessages, useFileUpload, useGroupedMessages, useHomePage, useMessageComposer, useMultimodalInput, useNewMessageSound, useRealtime, useRealtimeConnection, useRealtimeSupport, useScrollMask, useSendMessage, useSoundEffect, useSupport, useSupportConfig, useSupportEventEmitter, useSupportEvents, useSupportHandle, useSupportNavigation, useSupportStore, useSupportText, useTypingSound, useVisitor, useWebSocket, useWindowVisibilityFocus };
package/index.js CHANGED
@@ -9,12 +9,12 @@ import { primitives_exports } from "./primitives/index.js";
9
9
  import { RealtimeProvider, useRealtimeConnection } from "./realtime/provider.js";
10
10
  import { useRealtime } from "./realtime/use-realtime.js";
11
11
  import { SupportRealtimeProvider } from "./realtime/support-provider.js";
12
+ import { CoButton } from "./support/components/button.js";
12
13
  import { useSoundEffect } from "./hooks/use-sound-effect.js";
13
14
  import { useNewMessageSound } from "./hooks/use-new-message-sound.js";
14
15
  import { useTypingSound } from "./hooks/use-typing-sound.js";
15
16
  import { useSupportEventEmitter, useSupportEvents } from "./support/context/events.js";
16
17
  import { useSupportHandle } from "./support/context/handle.js";
17
- import { CoButton } from "./support/components/button.js";
18
18
  import { Header } from "./support/components/header.js";
19
19
  import { Text, useSupportText } from "./support/text/index.js";
20
20
  import { WebSocketProvider, useWebSocket } from "./support/context/websocket.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cossistant/react",
3
3
  "type": "module",
4
- "version": "0.0.28",
4
+ "version": "0.0.30",
5
5
  "private": false,
6
6
  "author": "Cossistant team",
7
7
  "description": "Headless React SDK for building AI-powered support/chat widgets. Hooks + primitives, WS-driven, TypeScript-first. Next.js-ready, Tailwind optional.",
@@ -88,14 +88,16 @@
88
88
  "*.css"
89
89
  ],
90
90
  "dependencies": {
91
- "@cossistant/core": "0.0.28",
92
- "@cossistant/types": "0.0.28",
91
+ "@cossistant/core": "0.0.30",
92
+ "@cossistant/types": "0.0.30",
93
+ "facehash": "0.0.5",
93
94
  "@floating-ui/react": "^0.27.16",
94
95
  "class-variance-authority": "^0.7.1",
95
96
  "clsx": "^2.1.1",
96
97
  "nanoid": "^5.1.5",
97
98
  "react-markdown": "^10.1.0",
98
99
  "react-use-websocket": "^4.13.0",
100
+ "remark-breaks": "^4.0.0",
99
101
  "tailwind-merge": "^3.3.1",
100
102
  "ulid": "^3.0.1"
101
103
  },
@@ -1,8 +1,8 @@
1
- import { $strip } from "./schemas.js";
2
- import { output } from "./core.js";
3
- import { ZodArray, ZodBoolean, ZodDefault, ZodEnum, ZodLiteral, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodString, ZodUnion } from "./schemas2.js";
4
- import { ZodCoercedNumber } from "./coerce.js";
5
- import "./index3.js";
1
+ import { $loose, $strip } from "../../../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/schemas.js";
2
+ import { output } from "../../../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/core.js";
3
+ import { ZodArray, ZodBoolean, ZodDefault, ZodEnum, ZodLiteral, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodRecord, ZodString, ZodUnion, ZodUnknown } from "../../../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/schemas.js";
4
+ import { ZodCoercedNumber } from "../../../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/coerce.js";
5
+ import "../../../../node_modules/.bun/@hono+zod-openapi@1.2.0+114bfa29adc0f5d0/node_modules/@hono/zod-openapi/dist/index.js";
6
6
 
7
7
  //#region ../types/src/api/conversation.d.ts
8
8
 
@@ -25,6 +25,96 @@ declare const createConversationResponseSchema: ZodObject<{
25
25
  parts: ZodArray<ZodUnion<readonly [ZodObject<{
26
26
  type: ZodLiteral<"text">;
27
27
  text: ZodString;
28
+ state: ZodOptional<ZodEnum<{
29
+ done: "done";
30
+ streaming: "streaming";
31
+ }>>;
32
+ }, $strip>, ZodObject<{
33
+ type: ZodLiteral<"reasoning">;
34
+ text: ZodString;
35
+ state: ZodOptional<ZodEnum<{
36
+ done: "done";
37
+ streaming: "streaming";
38
+ }>>;
39
+ providerMetadata: ZodOptional<ZodObject<{
40
+ cossistant: ZodOptional<ZodObject<{
41
+ visibility: ZodOptional<ZodEnum<{
42
+ public: "public";
43
+ private: "private";
44
+ }>>;
45
+ progressMessage: ZodOptional<ZodString>;
46
+ knowledgeId: ZodOptional<ZodString>;
47
+ }, $strip>>;
48
+ }, $loose>>;
49
+ }, $strip>, ZodObject<{
50
+ type: ZodString;
51
+ toolCallId: ZodString;
52
+ toolName: ZodString;
53
+ input: ZodRecord<ZodString, ZodUnknown>;
54
+ output: ZodOptional<ZodUnknown>;
55
+ state: ZodEnum<{
56
+ error: "error";
57
+ result: "result";
58
+ partial: "partial";
59
+ }>;
60
+ errorText: ZodOptional<ZodString>;
61
+ providerMetadata: ZodOptional<ZodObject<{
62
+ cossistant: ZodOptional<ZodObject<{
63
+ visibility: ZodOptional<ZodEnum<{
64
+ public: "public";
65
+ private: "private";
66
+ }>>;
67
+ progressMessage: ZodOptional<ZodString>;
68
+ knowledgeId: ZodOptional<ZodString>;
69
+ }, $strip>>;
70
+ }, $loose>>;
71
+ }, $strip>, ZodObject<{
72
+ type: ZodLiteral<"source-url">;
73
+ sourceId: ZodString;
74
+ url: ZodString;
75
+ title: ZodOptional<ZodString>;
76
+ providerMetadata: ZodOptional<ZodObject<{
77
+ cossistant: ZodOptional<ZodObject<{
78
+ visibility: ZodOptional<ZodEnum<{
79
+ public: "public";
80
+ private: "private";
81
+ }>>;
82
+ progressMessage: ZodOptional<ZodString>;
83
+ knowledgeId: ZodOptional<ZodString>;
84
+ }, $strip>>;
85
+ }, $loose>>;
86
+ }, $strip>, ZodObject<{
87
+ type: ZodLiteral<"source-document">;
88
+ sourceId: ZodString;
89
+ mediaType: ZodString;
90
+ title: ZodString;
91
+ filename: ZodOptional<ZodString>;
92
+ providerMetadata: ZodOptional<ZodObject<{
93
+ cossistant: ZodOptional<ZodObject<{
94
+ visibility: ZodOptional<ZodEnum<{
95
+ public: "public";
96
+ private: "private";
97
+ }>>;
98
+ progressMessage: ZodOptional<ZodString>;
99
+ knowledgeId: ZodOptional<ZodString>;
100
+ }, $strip>>;
101
+ }, $loose>>;
102
+ }, $strip>, ZodObject<{
103
+ type: ZodLiteral<"step-start">;
104
+ }, $strip>, ZodObject<{
105
+ type: ZodLiteral<"file">;
106
+ url: ZodString;
107
+ mediaType: ZodString;
108
+ filename: ZodOptional<ZodString>;
109
+ size: ZodOptional<ZodNumber>;
110
+ }, $strip>, ZodObject<{
111
+ type: ZodLiteral<"image">;
112
+ url: ZodString;
113
+ mediaType: ZodString;
114
+ filename: ZodOptional<ZodString>;
115
+ size: ZodOptional<ZodNumber>;
116
+ width: ZodOptional<ZodNumber>;
117
+ height: ZodOptional<ZodNumber>;
28
118
  }, $strip>, ZodObject<{
29
119
  type: ZodLiteral<"event">;
30
120
  eventType: ZodEnum<{
@@ -48,20 +138,6 @@ declare const createConversationResponseSchema: ZodObject<{
48
138
  targetUserId: ZodNullable<ZodString>;
49
139
  targetAiAgentId: ZodNullable<ZodString>;
50
140
  message: ZodOptional<ZodNullable<ZodString>>;
51
- }, $strip>, ZodObject<{
52
- type: ZodLiteral<"image">;
53
- url: ZodString;
54
- mediaType: ZodString;
55
- fileName: ZodOptional<ZodString>;
56
- size: ZodOptional<ZodNumber>;
57
- width: ZodOptional<ZodNumber>;
58
- height: ZodOptional<ZodNumber>;
59
- }, $strip>, ZodObject<{
60
- type: ZodLiteral<"file">;
61
- url: ZodString;
62
- mediaType: ZodString;
63
- fileName: ZodOptional<ZodString>;
64
- size: ZodOptional<ZodNumber>;
65
141
  }, $strip>, ZodObject<{
66
142
  type: ZodLiteral<"metadata">;
67
143
  source: ZodEnum<{
@@ -84,8 +160,8 @@ declare const createConversationResponseSchema: ZodObject<{
84
160
  visitorId: ZodString;
85
161
  websiteId: ZodString;
86
162
  status: ZodDefault<ZodEnum<{
87
- resolved: "resolved";
88
163
  open: "open";
164
+ resolved: "resolved";
89
165
  spam: "spam";
90
166
  }>>;
91
167
  deletedAt: ZodDefault<ZodNullable<ZodString>>;
@@ -108,6 +184,96 @@ declare const createConversationResponseSchema: ZodObject<{
108
184
  parts: ZodArray<ZodUnion<readonly [ZodObject<{
109
185
  type: ZodLiteral<"text">;
110
186
  text: ZodString;
187
+ state: ZodOptional<ZodEnum<{
188
+ done: "done";
189
+ streaming: "streaming";
190
+ }>>;
191
+ }, $strip>, ZodObject<{
192
+ type: ZodLiteral<"reasoning">;
193
+ text: ZodString;
194
+ state: ZodOptional<ZodEnum<{
195
+ done: "done";
196
+ streaming: "streaming";
197
+ }>>;
198
+ providerMetadata: ZodOptional<ZodObject<{
199
+ cossistant: ZodOptional<ZodObject<{
200
+ visibility: ZodOptional<ZodEnum<{
201
+ public: "public";
202
+ private: "private";
203
+ }>>;
204
+ progressMessage: ZodOptional<ZodString>;
205
+ knowledgeId: ZodOptional<ZodString>;
206
+ }, $strip>>;
207
+ }, $loose>>;
208
+ }, $strip>, ZodObject<{
209
+ type: ZodString;
210
+ toolCallId: ZodString;
211
+ toolName: ZodString;
212
+ input: ZodRecord<ZodString, ZodUnknown>;
213
+ output: ZodOptional<ZodUnknown>;
214
+ state: ZodEnum<{
215
+ error: "error";
216
+ result: "result";
217
+ partial: "partial";
218
+ }>;
219
+ errorText: ZodOptional<ZodString>;
220
+ providerMetadata: ZodOptional<ZodObject<{
221
+ cossistant: ZodOptional<ZodObject<{
222
+ visibility: ZodOptional<ZodEnum<{
223
+ public: "public";
224
+ private: "private";
225
+ }>>;
226
+ progressMessage: ZodOptional<ZodString>;
227
+ knowledgeId: ZodOptional<ZodString>;
228
+ }, $strip>>;
229
+ }, $loose>>;
230
+ }, $strip>, ZodObject<{
231
+ type: ZodLiteral<"source-url">;
232
+ sourceId: ZodString;
233
+ url: ZodString;
234
+ title: ZodOptional<ZodString>;
235
+ providerMetadata: ZodOptional<ZodObject<{
236
+ cossistant: ZodOptional<ZodObject<{
237
+ visibility: ZodOptional<ZodEnum<{
238
+ public: "public";
239
+ private: "private";
240
+ }>>;
241
+ progressMessage: ZodOptional<ZodString>;
242
+ knowledgeId: ZodOptional<ZodString>;
243
+ }, $strip>>;
244
+ }, $loose>>;
245
+ }, $strip>, ZodObject<{
246
+ type: ZodLiteral<"source-document">;
247
+ sourceId: ZodString;
248
+ mediaType: ZodString;
249
+ title: ZodString;
250
+ filename: ZodOptional<ZodString>;
251
+ providerMetadata: ZodOptional<ZodObject<{
252
+ cossistant: ZodOptional<ZodObject<{
253
+ visibility: ZodOptional<ZodEnum<{
254
+ public: "public";
255
+ private: "private";
256
+ }>>;
257
+ progressMessage: ZodOptional<ZodString>;
258
+ knowledgeId: ZodOptional<ZodString>;
259
+ }, $strip>>;
260
+ }, $loose>>;
261
+ }, $strip>, ZodObject<{
262
+ type: ZodLiteral<"step-start">;
263
+ }, $strip>, ZodObject<{
264
+ type: ZodLiteral<"file">;
265
+ url: ZodString;
266
+ mediaType: ZodString;
267
+ filename: ZodOptional<ZodString>;
268
+ size: ZodOptional<ZodNumber>;
269
+ }, $strip>, ZodObject<{
270
+ type: ZodLiteral<"image">;
271
+ url: ZodString;
272
+ mediaType: ZodString;
273
+ filename: ZodOptional<ZodString>;
274
+ size: ZodOptional<ZodNumber>;
275
+ width: ZodOptional<ZodNumber>;
276
+ height: ZodOptional<ZodNumber>;
111
277
  }, $strip>, ZodObject<{
112
278
  type: ZodLiteral<"event">;
113
279
  eventType: ZodEnum<{
@@ -131,20 +297,6 @@ declare const createConversationResponseSchema: ZodObject<{
131
297
  targetUserId: ZodNullable<ZodString>;
132
298
  targetAiAgentId: ZodNullable<ZodString>;
133
299
  message: ZodOptional<ZodNullable<ZodString>>;
134
- }, $strip>, ZodObject<{
135
- type: ZodLiteral<"image">;
136
- url: ZodString;
137
- mediaType: ZodString;
138
- fileName: ZodOptional<ZodString>;
139
- size: ZodOptional<ZodNumber>;
140
- width: ZodOptional<ZodNumber>;
141
- height: ZodOptional<ZodNumber>;
142
- }, $strip>, ZodObject<{
143
- type: ZodLiteral<"file">;
144
- url: ZodString;
145
- mediaType: ZodString;
146
- fileName: ZodOptional<ZodString>;
147
- size: ZodOptional<ZodNumber>;
148
300
  }, $strip>, ZodObject<{
149
301
  type: ZodLiteral<"metadata">;
150
302
  source: ZodEnum<{
@@ -189,8 +341,8 @@ declare const listConversationsResponseSchema: ZodObject<{
189
341
  visitorId: ZodString;
190
342
  websiteId: ZodString;
191
343
  status: ZodDefault<ZodEnum<{
192
- resolved: "resolved";
193
344
  open: "open";
345
+ resolved: "resolved";
194
346
  spam: "spam";
195
347
  }>>;
196
348
  deletedAt: ZodDefault<ZodNullable<ZodString>>;
@@ -213,6 +365,96 @@ declare const listConversationsResponseSchema: ZodObject<{
213
365
  parts: ZodArray<ZodUnion<readonly [ZodObject<{
214
366
  type: ZodLiteral<"text">;
215
367
  text: ZodString;
368
+ state: ZodOptional<ZodEnum<{
369
+ done: "done";
370
+ streaming: "streaming";
371
+ }>>;
372
+ }, $strip>, ZodObject<{
373
+ type: ZodLiteral<"reasoning">;
374
+ text: ZodString;
375
+ state: ZodOptional<ZodEnum<{
376
+ done: "done";
377
+ streaming: "streaming";
378
+ }>>;
379
+ providerMetadata: ZodOptional<ZodObject<{
380
+ cossistant: ZodOptional<ZodObject<{
381
+ visibility: ZodOptional<ZodEnum<{
382
+ public: "public";
383
+ private: "private";
384
+ }>>;
385
+ progressMessage: ZodOptional<ZodString>;
386
+ knowledgeId: ZodOptional<ZodString>;
387
+ }, $strip>>;
388
+ }, $loose>>;
389
+ }, $strip>, ZodObject<{
390
+ type: ZodString;
391
+ toolCallId: ZodString;
392
+ toolName: ZodString;
393
+ input: ZodRecord<ZodString, ZodUnknown>;
394
+ output: ZodOptional<ZodUnknown>;
395
+ state: ZodEnum<{
396
+ error: "error";
397
+ result: "result";
398
+ partial: "partial";
399
+ }>;
400
+ errorText: ZodOptional<ZodString>;
401
+ providerMetadata: ZodOptional<ZodObject<{
402
+ cossistant: ZodOptional<ZodObject<{
403
+ visibility: ZodOptional<ZodEnum<{
404
+ public: "public";
405
+ private: "private";
406
+ }>>;
407
+ progressMessage: ZodOptional<ZodString>;
408
+ knowledgeId: ZodOptional<ZodString>;
409
+ }, $strip>>;
410
+ }, $loose>>;
411
+ }, $strip>, ZodObject<{
412
+ type: ZodLiteral<"source-url">;
413
+ sourceId: ZodString;
414
+ url: ZodString;
415
+ title: ZodOptional<ZodString>;
416
+ providerMetadata: ZodOptional<ZodObject<{
417
+ cossistant: ZodOptional<ZodObject<{
418
+ visibility: ZodOptional<ZodEnum<{
419
+ public: "public";
420
+ private: "private";
421
+ }>>;
422
+ progressMessage: ZodOptional<ZodString>;
423
+ knowledgeId: ZodOptional<ZodString>;
424
+ }, $strip>>;
425
+ }, $loose>>;
426
+ }, $strip>, ZodObject<{
427
+ type: ZodLiteral<"source-document">;
428
+ sourceId: ZodString;
429
+ mediaType: ZodString;
430
+ title: ZodString;
431
+ filename: ZodOptional<ZodString>;
432
+ providerMetadata: ZodOptional<ZodObject<{
433
+ cossistant: ZodOptional<ZodObject<{
434
+ visibility: ZodOptional<ZodEnum<{
435
+ public: "public";
436
+ private: "private";
437
+ }>>;
438
+ progressMessage: ZodOptional<ZodString>;
439
+ knowledgeId: ZodOptional<ZodString>;
440
+ }, $strip>>;
441
+ }, $loose>>;
442
+ }, $strip>, ZodObject<{
443
+ type: ZodLiteral<"step-start">;
444
+ }, $strip>, ZodObject<{
445
+ type: ZodLiteral<"file">;
446
+ url: ZodString;
447
+ mediaType: ZodString;
448
+ filename: ZodOptional<ZodString>;
449
+ size: ZodOptional<ZodNumber>;
450
+ }, $strip>, ZodObject<{
451
+ type: ZodLiteral<"image">;
452
+ url: ZodString;
453
+ mediaType: ZodString;
454
+ filename: ZodOptional<ZodString>;
455
+ size: ZodOptional<ZodNumber>;
456
+ width: ZodOptional<ZodNumber>;
457
+ height: ZodOptional<ZodNumber>;
216
458
  }, $strip>, ZodObject<{
217
459
  type: ZodLiteral<"event">;
218
460
  eventType: ZodEnum<{
@@ -236,20 +478,6 @@ declare const listConversationsResponseSchema: ZodObject<{
236
478
  targetUserId: ZodNullable<ZodString>;
237
479
  targetAiAgentId: ZodNullable<ZodString>;
238
480
  message: ZodOptional<ZodNullable<ZodString>>;
239
- }, $strip>, ZodObject<{
240
- type: ZodLiteral<"image">;
241
- url: ZodString;
242
- mediaType: ZodString;
243
- fileName: ZodOptional<ZodString>;
244
- size: ZodOptional<ZodNumber>;
245
- width: ZodOptional<ZodNumber>;
246
- height: ZodOptional<ZodNumber>;
247
- }, $strip>, ZodObject<{
248
- type: ZodLiteral<"file">;
249
- url: ZodString;
250
- mediaType: ZodString;
251
- fileName: ZodOptional<ZodString>;
252
- size: ZodOptional<ZodNumber>;
253
481
  }, $strip>, ZodObject<{
254
482
  type: ZodLiteral<"metadata">;
255
483
  source: ZodEnum<{
@@ -287,8 +515,8 @@ declare const getConversationResponseSchema: ZodObject<{
287
515
  visitorId: ZodString;
288
516
  websiteId: ZodString;
289
517
  status: ZodDefault<ZodEnum<{
290
- resolved: "resolved";
291
518
  open: "open";
519
+ resolved: "resolved";
292
520
  spam: "spam";
293
521
  }>>;
294
522
  deletedAt: ZodDefault<ZodNullable<ZodString>>;
@@ -311,6 +539,96 @@ declare const getConversationResponseSchema: ZodObject<{
311
539
  parts: ZodArray<ZodUnion<readonly [ZodObject<{
312
540
  type: ZodLiteral<"text">;
313
541
  text: ZodString;
542
+ state: ZodOptional<ZodEnum<{
543
+ done: "done";
544
+ streaming: "streaming";
545
+ }>>;
546
+ }, $strip>, ZodObject<{
547
+ type: ZodLiteral<"reasoning">;
548
+ text: ZodString;
549
+ state: ZodOptional<ZodEnum<{
550
+ done: "done";
551
+ streaming: "streaming";
552
+ }>>;
553
+ providerMetadata: ZodOptional<ZodObject<{
554
+ cossistant: ZodOptional<ZodObject<{
555
+ visibility: ZodOptional<ZodEnum<{
556
+ public: "public";
557
+ private: "private";
558
+ }>>;
559
+ progressMessage: ZodOptional<ZodString>;
560
+ knowledgeId: ZodOptional<ZodString>;
561
+ }, $strip>>;
562
+ }, $loose>>;
563
+ }, $strip>, ZodObject<{
564
+ type: ZodString;
565
+ toolCallId: ZodString;
566
+ toolName: ZodString;
567
+ input: ZodRecord<ZodString, ZodUnknown>;
568
+ output: ZodOptional<ZodUnknown>;
569
+ state: ZodEnum<{
570
+ error: "error";
571
+ result: "result";
572
+ partial: "partial";
573
+ }>;
574
+ errorText: ZodOptional<ZodString>;
575
+ providerMetadata: ZodOptional<ZodObject<{
576
+ cossistant: ZodOptional<ZodObject<{
577
+ visibility: ZodOptional<ZodEnum<{
578
+ public: "public";
579
+ private: "private";
580
+ }>>;
581
+ progressMessage: ZodOptional<ZodString>;
582
+ knowledgeId: ZodOptional<ZodString>;
583
+ }, $strip>>;
584
+ }, $loose>>;
585
+ }, $strip>, ZodObject<{
586
+ type: ZodLiteral<"source-url">;
587
+ sourceId: ZodString;
588
+ url: ZodString;
589
+ title: ZodOptional<ZodString>;
590
+ providerMetadata: ZodOptional<ZodObject<{
591
+ cossistant: ZodOptional<ZodObject<{
592
+ visibility: ZodOptional<ZodEnum<{
593
+ public: "public";
594
+ private: "private";
595
+ }>>;
596
+ progressMessage: ZodOptional<ZodString>;
597
+ knowledgeId: ZodOptional<ZodString>;
598
+ }, $strip>>;
599
+ }, $loose>>;
600
+ }, $strip>, ZodObject<{
601
+ type: ZodLiteral<"source-document">;
602
+ sourceId: ZodString;
603
+ mediaType: ZodString;
604
+ title: ZodString;
605
+ filename: ZodOptional<ZodString>;
606
+ providerMetadata: ZodOptional<ZodObject<{
607
+ cossistant: ZodOptional<ZodObject<{
608
+ visibility: ZodOptional<ZodEnum<{
609
+ public: "public";
610
+ private: "private";
611
+ }>>;
612
+ progressMessage: ZodOptional<ZodString>;
613
+ knowledgeId: ZodOptional<ZodString>;
614
+ }, $strip>>;
615
+ }, $loose>>;
616
+ }, $strip>, ZodObject<{
617
+ type: ZodLiteral<"step-start">;
618
+ }, $strip>, ZodObject<{
619
+ type: ZodLiteral<"file">;
620
+ url: ZodString;
621
+ mediaType: ZodString;
622
+ filename: ZodOptional<ZodString>;
623
+ size: ZodOptional<ZodNumber>;
624
+ }, $strip>, ZodObject<{
625
+ type: ZodLiteral<"image">;
626
+ url: ZodString;
627
+ mediaType: ZodString;
628
+ filename: ZodOptional<ZodString>;
629
+ size: ZodOptional<ZodNumber>;
630
+ width: ZodOptional<ZodNumber>;
631
+ height: ZodOptional<ZodNumber>;
314
632
  }, $strip>, ZodObject<{
315
633
  type: ZodLiteral<"event">;
316
634
  eventType: ZodEnum<{
@@ -334,20 +652,6 @@ declare const getConversationResponseSchema: ZodObject<{
334
652
  targetUserId: ZodNullable<ZodString>;
335
653
  targetAiAgentId: ZodNullable<ZodString>;
336
654
  message: ZodOptional<ZodNullable<ZodString>>;
337
- }, $strip>, ZodObject<{
338
- type: ZodLiteral<"image">;
339
- url: ZodString;
340
- mediaType: ZodString;
341
- fileName: ZodOptional<ZodString>;
342
- size: ZodOptional<ZodNumber>;
343
- width: ZodOptional<ZodNumber>;
344
- height: ZodOptional<ZodNumber>;
345
- }, $strip>, ZodObject<{
346
- type: ZodLiteral<"file">;
347
- url: ZodString;
348
- mediaType: ZodString;
349
- fileName: ZodOptional<ZodString>;
350
- size: ZodOptional<ZodNumber>;
351
655
  }, $strip>, ZodObject<{
352
656
  type: ZodLiteral<"metadata">;
353
657
  source: ZodEnum<{
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","names":[],"sources":["../../../../../../types/src/api/conversation.ts"],"sourcesContent":[],"mappings":";;;;;;;;cA8Ba,kCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAAA,UAAA,aAAA,UAAA,CAAA;YAAA,UAAA,aAAA,QAAA,CAAA;cASjC,MAAA,EAAA,QAA8B;cAI7B,OAAA,EA2BV,SAAA;;;;;;;;;;;;;;UA3BwC,MAAA,EAAA,QAAA;UAAA,OAAA,EAAA,SAAA;QA6B/B,CAAA,CAAA;QAIC,SAAA,aAaV,UAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAlDS,8BAAA,GAAiC,cACrC;cAGK,gCAA8B;;;;;;;;;;;;;;;;;KA6B/B,wBAAA,GAA2B,cAC/B;cAGK,iCAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAA,MAAA,EAAA,QAAA;cAAA,OAAA,EAAA,SAAA;YAehC,CAAA,CAAA,CAAA;YAIC,eAQV,aAAA,UAAA,CAAA;;;QARsC,CAAA,QAAA,CAAA,CAAA;MAAA,CAAA,QAAA,CAAA,WAAA,CAAA;QAU7B,IAAA,YAAsB,CAAA,YAC1B,CAAA;QAGK,QAAA,WAMV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAxBS,yBAAA,GAA4B,cAChC;cAGK,8BAA4B;;;KAU7B,sBAAA,GAAyB,cAC7B;cAGK,+BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAA,gBAAA,aAAA,UAAA,CAAA;UAAA,UAAA,aAAA,UAAA,CAAA;YAQ9B,UAAuB,aAC3B,QAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KADI,uBAAA,GAA0B,cAC9B"}